IMD 1.18: 30/01/2015 20:31:44 BIG BOARD USER DISK #5 Micro Cornucopia PO BOX 223 Bend, OR 97709  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  FORMAT4 Z80ghijklmFORMAT4 HEXnopMODEM7A COMD )*+,-MAST CAT TYPESQ COMKUSQ COMOSQ COMj5-DISK DOC,eO ; WORK WITH ANY TERMINAL OR THE ON-BOARD VIDEO MONITOR. FEEL FREE TO ; EDIT THIS PROGRAM. IF YOU ARE ABLE TO ADD SOME FUVERIFY COMVERIFY DOCCAT1 SUBFAST DOCQRSTUVWXYZ[\]^_`GRAM *************** ;*************** VERSION 2.1 *************** ;*************** *************** ;MODEM7B COMDCLOCK COMPACMAN COM'(./0123456789:;CLOCK MAC6 !"#$%&D COM CRCK3 LST LPACDEFS H HIJK5-DISK BAK-MNNCTIONS TO IT OR ; DO SOME OF MINE BETTER, PLEASE LET ME KNOW. ; THE BASIC FORMAT PROGRAM STILL EXISTS. ALL I HAVE DONE ICAT SUBCAT COMCAT DOCACATME SUB*************** WRITTEN BY J.P. JONES MODIFIED BY G. MION *************** ;*************** MINOR BUG FIXED BY T.HAMEENHOPACMAN COM<=PACMAN C ;>?stuvwxUNLOAD COMSNOOPY TXTFAST DOCabcNOLOCK COMdWASH COMS TO MAKE ; THE PROGRAM MORE USABLE. IT ASKS WHICH DRIVE YOU HAVE THE DISK IN ; TO FORMAT, SHOWS YOU THAT IT IS INDEED FORMATCRCK3 COMFMAP COMUCAT COM-USRDISK005 *************** ;****************************************************************************** ; THIS PRODUMPX DOC"@ADUMPX COMBCDEFAST COMFGOPSQ/USQ DOCfg;****************************************************************************** ;**********************************************TING, AND THEN VERIFIES ; ALL TRACKS AND SECTORS TELLING YOU WHICH ONES FAILED TO FORMAT. ;*******************************DIF COMsDIF DOCSSED COMYXDIR COM GRAM WILL FORMAT A DISK IN DRIVE A,B,C OR D AND THEN VERIFY ; EACH TRACK AND SECTOR. THIS VERSION OF THE PROGRAM IS DESIGNED TFORMAT4 COMPACMAN DOCqrPACUTIL C ayz{|}~PACMONSTC 0******************************** ;*************** *************** ;*************** BIGBOARD FORMATTER PRO *********************************************** ;*************** EQUATE TABLE *************** ;****************************R ;IF LESS THEN 'A', ERROR CP 'E' ;CHECK FOR MAX DRIVE # JP NC,SELERR ;IF GREATER THAN 'D', ERROR AND 07H ;ONLY WANTWD DISCONTROLLER ADD DATREG EQU WD1771+3 ;DATA REGISTER SKCMD EQU 00011100B ;SEEK COMMAND ; ORG 100H ;STANDARD CP 25 TIMES LD HL,SECT1 ;START OF SECTOR 1 LD DE,SECT2 ;START OF SECTOR 2 LD BC,186*25 ;EACH SECTOR CONTAIN 186 BYTES DRIVE ROUTINE READ EQU MONITR+24H ;PRM-80 READ SECTOR ROUTINE OVECTR EQU MONITR+0CH ;PFM-80 CONSOLE OUTPUT ROUTINE CONIN EQUNG STATUS MESSAGE LD C,BPSTRG CALL BDOS ;PRINT REMAINDER OF MESSAGE JP RD ;SEE IF USER WANTS TO FORMAT OR QUIT? ;************************************************** WBOOT EQU 0 ;CP/M JUMP LOCATION FOR A WARM BOOT MONITR EQU 0F000H ; TO LOOK AT LOWER 3 BITS DEC A ;ASCII CHARACTER 1 GREATER THAN DRIVE # LD C,A CALL SELECT ;IF OK, SELECT DRIVE JP NZ/M COM PROGRAM ; SIGNON WITH FORMAT MESSAGE LD DE,SIGNON ;DE POINTS TO SIGNON MESSAGE LD C,BPSTRG ;FDOS CONTROL TO ATA LDIR ;COPY SECTOR 1 25 TIMES ; NOW SET UP SECTOR NUMBER IN PROPER POSITION LD HL,SECTNO ;POINT TO SLOT IN FIRST MONITR+9H ;PFM-80 CONSOLE INPUT ROUTINE BDOS EQU 5 ;FDOS ENTRY POINT BCONIN EQU 1 ;CONSOLE READ CONTROL BYTE BCONOT E START OF FORMATTING ROUTINE FORMAT: LD DE,HEADER ;DE POINTS TO TRACK DISPLAY HEADER LD C,BPSTRG CALL BDOS ;PRINT HEADBASE OF PFM MONITOR JUMP TABLE WDSTAT EQU 10H ;1771 STATUS ADDRESS WDCTL EQU WDSTAT ;CONTROL=STATUS WRITE WDATA EQU 13H,SELERR ; PRINT DRIVE STATUS AND THEN WAIT FOR READY SIGNAL LD DE,STATSB ;DE POINTS TO BEGINNING STATUS MESSAGE LD C,BPRINT STRING CALL BDOS ;DISPLAY MESSAGE ; DETERMIN WHICH DRIVE TO FORMAT DISK IN SELAGN: LD C,BCONIN ;FDOS CONTROL TO IMAGE LD DE,186 ;OFFSET INTO NEXT SECTOR LD BC,26*256+1 ;B=COUNTER C=SECTOR # SECTID: LD (HL),C ;STORE SECTOR # INCQU 2 ;CONSOLE WRITE CONTROL BYTE BPSTRG EQU 9 ;PRINT STRING CONTROL BYTE CR EQU 0DH ;ASCII CARRIAGE RETURN LF EQU 0AHER ; FIRST, SET UP ONE TRACK'S DATA IMAGE LD HL,DATA ;POINT TO DATA AREA OF DISK IMAGE LD DE,DATA+1 LD (HL),0E5H ; ;1771 DATA I/O HOME EQU MONITR+1EH ;PFM-80 HEAD HOME ROUTINE PFMSEEK EQU MONITR+21H ;PFM SEEK ROUTINE W/CRC READY EQU PSTRG ;FDOS CONTROL TO PRINT STRING CALL BDOS ;DISPLAY MESSAGE POP AF ;GET DRIVE # BACK LD E,A ;LOAD DRIVE # IN E F READ CHARACTER CALL BDOS ;WAIT FOR DRIVE CHARACTER PUSH AF ;SAVE DRIVE # CP 'A' ;CHECK FOR MIN DRIVE # JP C,SELER C ;INCREMENT SECTOR # ADD HL,DE ;POINT TO NEXT SECTOR ID DJNZ SECTID ;DO ALL 26 SECTORS ; NOW PUT TRAILER OF FF'S  ;ASCII LINE FEED BS EQU 08H ESC EQU 1BH ;ASCII ESCAPE ; TRACK EQU MONITR+0F6DH ;TRACK STORAGE AREA WD1771 EQU 10H ;FILL DATA AREA WITH BLANK VALUE LD BC,127 ;DATA FIELD IS 128 BYTES LONG LDIR ;FILL DATA @ HL TO DE ; COPY ONE SECTORMONITR+7ABH ;PFM-80 CONTROLLER CLEAR ROUTINE STEP EQU MONITR+793H ;1771 STEP ROUTINE SELECT EQU MONITR+1BH ;PFM-80 SELECT DOR FDOS TO PRINT LD C,BCONOT ;FDOS CONTROL TO PRINT CHARACTER CALL BDOS ;PRINT DRIVE # LD DE,STATSE ;DE POINTS TO ENDI AFTER WHOLE TRACK LD HL,SECT1+4836 ;THAT'S A LOT OF TRACK DATA LD A,-1 ;NEED 247 BYTES OR FF, SO DO ;256 FOR INSU *************** ;************** VERIFY TRACK/SECTOR *************** ;************** *************** ;********** DEC D ;OUTER BYTE COUNT JR NZ,NXTBYT ; PRINT TRACK # AND SETUP FOR NEXT TRACK POP BC ;GET TRACK COUNTER BACK LH= I= J= K= L=  AGAIN ; PUT TRACK ID'S IN PLACE LD HL,TRKNO ;POINT TO POSITION IN IMAGE LD DE,186 ;OFFSET FOR EACH SECTOR TRAKID:  OCCURS POP BC ;GET STATUS DATA BACK ; TEST ALL SECTORS ON TRACK NXTRD: PUSH BC ;SAVE STATUS DATA AGAIN LD HL,80H RANCE LD B,0 ENDMRK: LD (HL),A ;STORE FF INC HL DJNZ ENDMRK ;STORE 256 FF'S ; NOW SET UP FOR FORMATTING LD A,(******************************************************************** ;*********************************************************D A,C ;A=TRACK PRINT OFFSET CALL PNTRK ;PRINT TRACK # INC C ;UPDATE TRACK COUNT LD A,C ;GET NEW TRACK # CP 77  M= N= O= P= LD (HL),C ;STORE CURRENT TRACK # ADD HL,DE ;POINT TO NEXT SECTOR DJNZ TRAKID ; DO THE TRACK WRITE LD HL,LEADER  ;DISK READ BUFFER AREA CALL READ ;USE PFM TO READ SECTOR JP NZ,PNTERR ;JUMP IF READ ERROR OCCURS POP BC ;GET STATUS66H) ;GET NMI VECTOR BYTE PUSH AF ;SAVE IT LD A,0C9H LD (66H),A ;LOAD RETURN INSTRUCTION AT VECTOR ; DO THE FOR********************* ; DO A CARRIAGE RETURN-LINE FEED FOR TRACK VERIFICATION MESSAGE LD DE,CRLF LD C,BPSTRG CALL B;HAVE WE DONE 76 TRACKS JR NZ,NXTTRK ;KEEP FORMATTING IF NOT DONE ;***************************************************** Q= R= S=SOURCE/Rockford 398-6090T=  ;POINT TO DATA LD D,20 ;20*256+36=TOTAL BYTES LD B,36 LD C,WDATA ;C POINTS TO 1771 DATA PORT LD A,0F4H ;1771 WRIT;}A=Atlanta CBBS 1-404-394-4220B=Chicago CBBS 1-312-545-8086C=Calamity Clif 1-312-MAT DI ;NO INTERRUPTS LD C,0 ;START WITH TRACK 0 NXTTRK: LD B,26 ;26 SECTORS PER TRACK PUSH BC ;WE'LL NEED THEDOS ;PRINT CR,LF ; SET TRACK TO 0 AND START TESTING LD E,0 ;E=TRACK # AGAIN: LD BC,1A01H ;B=LOOP COUNT C=SECTOR #************************* ;****************************************************************************** ;**************  U= V= W= X= Y=E TRACK COMMAND OUT (WDCTL),A ;SEND COMMAND NXTBYT: HALT ;WHEN 1771 READY, WILL NMI OUTI ;SEND DATA JR NZ,NXTBYT234-9257D=Detroit CP/M* 1-313-588-7054E= F= G= M LATER ; SEEK NEXT TRACK IN SEQUENCE CALL SEEK POP BC ;GET TRACK # AND SECTOR CTR BACK PUSH BC ;LETS SAVE THEM PUSH BC ;SAVE STATUS DATA LD C,E ;C=TRACK # CALL PFMSEEK ;USE PFM TO SEEK TRACK JP NZ,PNTERR ;JUMP IF SEEK ERROR  Z= !9""1"Ͳ MODEM7 as of 12/18/80 Originally Written by Ward Chriʘ ͬCHECKSUM ERROR Ph>9 >!\:! ͬAWAITING FILE NAME ́  7!] :! ͬTIME ʎ #z •  ͬ ++FILE TRANSFER UNSUCC   G:x̨  <*+PY 0:2!/2ͱ:!X>2:!G:xC Mͳ>2!OUT RECEIVING FILENAME U  @ w:!~>#}U :!y !\:!v ͬCHECKSUM ERROR ́ v  :!4 >2y":!Ę < >B2!>:] \P@c ͣ2!xͦͽQ D >c :!‹ >2y"ͬ #*ҟ*#">*ʹ!"**DM ;:ºg" Bad block: $ x.y.ͭ*:<_"*#"* q#:OT EXIST++ ͬTYPE "R" TO RETURN TO MODEM TYPE "A" TO RE-ENTER NAME:  *AR lʈʯuʈ ʹ*|ʕ͋Ú  *" "w"o"z " |2*.":\O2!/2cͫͶ""!+"v">2!ʯ ʕcG:>Pf7>2!2~" !*"z"J !\"̈́ :fµ *z"\ "z"!~"4õ !"5© !*"z":~"A>@2~"!"6!!N!Җ >B2!:] Ü n ͫ:! :! ͬFILE OPEN, READY TO RECEIVE Qͣr ir͵:! ͬAWAITINp#" i:2!d" :W!yP)=K:GcU}2*DMڐxʅ`i͐" kͬ ++FILE TRANSFER COMPLETED++ ͬ ++FILE TRANSFER UNSUCCESSFUL++ ͬ ++ TRANSFER CANCELLED ++  Y:(|^#V#"!~#fokB::_ :J͒i Testing data area... $  *DM*xʕ̨ʯ¬:!ʯ:/2ï  cc:w#"v"G:x/ >::=cc! 6 !!F#F ~ #F ~  "|"+#F ~ & :"<2"#F ~ 8 & 6 *|""~ _ #R #~ _ "|"!"p G NAME NAK Ph>!~"51 *z"\ "z"8 >7 !]~:!~x N #@ >:!Qʥ >u:!e͐" !:<22|ʻک|».:22}2:G* !w#:w##Ý Drive speci6# 6 #6#ͬ ENTER FILE NAME TO BE TRANSFERRED - C/R TO QUIT: !M!!̈́!~͔PYwͭ*|Ͳ Testing system tracks... $ !"#"^**  Testing directory area... $> ?2?2ǹ!+9:w#9:w#> :L O b xO6#}l&)>o\ȇ!o ~¢ #~+] !e~w#~w\!\l !u6B#6A#6Kl!l6\:\<  CRCK ver 3.0 --> FILE: FORMAT4 .Z80 CRC = 74 B7 --> FILE: FORMAT4 .HEX CRC = 80 92 --> FILE: MODEM7A .COM CRC = D U= V= W= X= Y=234-9257D=Detroit CP/M* 1-313-588-7054E= F= G= 6# 6 #6#ͬ ENTER FILE NAME TO BE TRANSFERRED - C/R TO QUIT: !M!!̈́!~͔ CRC = 5B 19 --> FILE: PACMAN .DOC CRC = E1 3C --> FILE: PACUTIL .C CRC = D9 B9 --> FILE: PACMONST.C CRC = F> ?2?2ǹ!+9:w#9:w#> :L O b xO6#}l&)>o0 F3 --> FILE: MAST .CAT CRC = 52 27 --> FILE: MODEM7B .COM CRC = BB 63 --> FILE: CLOCK .COM CRC = E6 44  Z= !9""1"Ͳ MODEM7 as of 12/18/80 Originally Written by Ward ChriH= I= J= K= L= ʎ #z •  ͬ ++FILE TRANSFER UNSUCC   G:x̨ 0 D7 --> FILE: VERIFY .COM CRC = 0F 49 --> FILE: VERIFY .DOC CRC = C9 48 --> FILE: CAT1 .SUB CRC = EF 8C +ͪ"ͪ+|ƒ"!"!\" !!l:! Yccͬ ++FILE DOES N--> FILE: PACMAN .COM CRC = E8 2E --> FILE: CLOCK .MAC CRC = D7 A7 --> FILE: PACMAN .C CRC = B1 6B --> FILEstensen Revisions by Mark M. Zeiger, Jim Mills $ >2!/2ͱ:!X>2:!G:xC Mͳ>2! M= N= O= P=  :!4 >2y":!Ę < >B2!>:] \P@c ͣ2!xͦͽQ D >c :!‹ >2y"ͬ --> FILE: FAST .DOC CRC = D8 75 --> FILE: CAT .SUB CRC = 4A 2D --> FILE: CAT .COM CRC = 1B C4 --> FILEOT EXIST++ ͬTYPE "R" TO RETURN TO MODEM TYPE "A" TO RE-ENTER NAME:  *AR lʈʯuʈ: UNLOAD .COM CRC = A8 23 --> FILE: SNOOPY .TXT CRC = 15 BF --> FILE: DUMPX .DOC CRC = 16 7E --> FILE: DUMPX:!ET$S Rq Dʕ:!c:] B>2!/2cͫͶ""!+"v">2!ʯ ʕcG: Q= R= S=SOURCE/Rockford 398-6090T= Җ >B2!:] Ü n ͫ:! :! ͬFILE OPEN, READY TO RECEIVE Qͣr ir͵:! ͬAWAITIN;}A=Atlanta CBBS 1-404-394-4220B=Chicago CBBS 1-312-545-8086C=Calamity Clif 1-312-kͬ ++FILE TRANSFER COMPLETED++ ͬ ++FILE TRANSFER UNSUCCESSFUL++ ͬ ++ TRANSFER CANCELLED ++  .COM CRC = 40 A4 --> FILE: FAST .COM CRC = 29 34 --> FILE: SQ/USQ .DOC CRC = AB B1 --> FILE: FORMAT4 .COM xʕ̨ʯ¬:!ʯ:/2ï  cc:w#"v"G:x/ >::=cc G NAME NAK Ph>!~"51 *z"\ "z"8 >7 !]~:!~x N #@ >:!Qʥ >u:!ͬROUTINE CANCELLED >B2!:!<2!:!\<ͬFILES EXISTS -- TYPE 'Y' TO ERASE:  *Y\VE BLOCK -- ABORTING ++ $:!ʪ:!;ͬ++ TIMEOUT ++ :!3;ڜWڜ/ :!:!;ͬ++ BAD SECTOR #>D > 2eG'4>_%>*:!>8:!>!-;%;!:e >4:e>4e! ]0ژ:Ҙ0DM)) )o|${h\ȇ!o ~¢ #~+] !e~w#~w\!\l !u6B#6A#6Kl!l6\:\< :! :!&:!+:!+O / :!N:!hͬAWAITING INITIAL NAK Pffh*ʘ ͬCHECKSUM ERROR Ph>9 >!\:! ͬAWAITING FILE NAME ́  7!] :! ͬTIME ͬ No file specified \<ERROR - CAN'T MAKE FILE DIRECTORY MUST BE FULL $\<{CAN'T OPEN FILE$:! IN HDR ;z2!>2!!ڜw,Q2!ڜJ:!G:!l:!ʓ]|/W}/_! =ڏxy++ INVALID BAUD RATE ++$!l\2|2h    >(3>)_> 2h: M >2 !\  :\2 ! \ \Á ! \ \! \ \""$":: 2"<2 2<2%2(<2+]2! !! 6ø#ù!:!2!:!E:!!]ͬOUT RECEIVING FILENAME U  @ w:!~>#}U :!y !\:!v ͬCHECKSUM ERROR ́ v :!ͬFILE OPEN - EXTENT LENGTH: :k3>H\<CAN'T CLOSE FILE$:!=2!*!"!:!7"\SEND # :!3>:!:!/>2!!~,°2!yͺ2fG:!x3ͬH RCD, NOT ACK :!<2! :!> Oa{_< E0:!S<ɯ2!ͬMULTIPLE ERRORS ENCOUNTERED. TYPE Q T<7Š 2 =Ɓo&  ] 2h2|w#~w\!\l ~# x ɯ2!:! ͬAWAITING #:!<3 TRANSFERRED :\2x"!\:x"2\!!!:y" q >2!2!/2:!a:!ʁͬ ALL TRANSFERS COMPLETED >Pf7>2!2~" !*"z"J !\"̈́ :fµ *z"\ "z"!~"4õ !"5© !*"z":~"A>@2~"!"6!!N!(=7++ FILE READ ERROR ++$! y=>2!y2!!""!*!!"!:!<2!:!O"\ :!J7CAN'T SEND SECTOR -- ABORTING $:!ͬTIMEOUT ON ACK :!\:! 1"i>v> O QUIT, R TO RETRY:  *RQJ~ʹ#í ͻͬ:!>Q2!f~#:ȯ2- R!!f 7G:!#:!;x3ͬH RCD, NOT SOH ;>:!<2! :!b:!hJ ͵++ UNABLE TO RECEI:!ͬ ++PRESS RETURN TO DISCONNECT++  ˆͬ ++DISCONNECTED++ ͂:!c>>>>>> >! 6 !!F#F ~ #F ~  "|"+#F ~ & :"<2"#F ~ 8 & 6 *|""~ _ #R #~ _ "|"!"p ! r2!!""!ERROR WRITING FILE $:xG:P 7O:!:!  ~e!!͂ͬ WAITING FOR DIAL TONE >!dͬ ++NO DIAL TONE AFTER 10 SECONDS++ 7 !."͉͒:!!+ :͂ͬ ++DISCONNECTED++  | :" "ͪ>2!/2!" :! :" *v"g̀͡- Return to terminal mode with no loss of data :ͬDSC - Disconnect CAL - Dial number ͬXPR - Toggle expert mos! !ú ͬNOT FOUND>? !t!w#+!!mt! _!:s!Y! ++BAD LIBRARY NUMBER CALLED++ $ (Y/N/C):  *NYʬCR/2-2͑ Rͬ Connection established - Select options: >!!\6# > " >"  > " >" w#" :9 _@w# . ; w#; ~*_ #Q b t ~*p #d t 6?#t !! ʛr> > > >$ "ͬENTER NUMBER OR LIBRARY LETTER - TYPE C/R WHEN FINISHED, CTRL-X CANCELS WHILE DIALI>2!/2!" :/2 F#* 7SRTE~IA#2>#C7#(կ8 ʘʘ  [de (Menu on/off) DIR - List directory (may specify drive) CPM - Exit to CP/M S - Send CP/M file R - Receive CP/M **File Not Found Size Recs Bytes Ext Acc65536 set to R/O Invalid Disk AssignmentWrong CP/M Version (Requires 2.0)!ͱ:]EMG:xCTʌSJR1:!Jͬ ++Bad Option++ P:m ͬ Re-enter PRIMARY option and file name only:\̈́!s!:l2s!:m $!2!M!2!s!!>!~!~!# ͬ | :!<2!NG: !M:!ʫ!!A~0 J#!.{E~Q ;Q:!_!!~T" ʫͱ ʫ#͑QG#4+~#pxo#[#G~wڶ+xF6 ʻxo[4[o> o>o[>#o> o> oQG>#o> o> ox[o file T - Terminal mode (optional file name) E - Terminal mode with echo ͬ DEFAULT DRIVE: Aͬ Com. # . . * . ## . ########### . ### . ########### . ## . . . . . . . * . . * . . . . . . . ################################### !M:m ¢>2>2!/>2!:ͬEnter New Baudrate: !e6  0:wO#!!!!!! s! !ú ͬNOT FOUND>? !t!w#+!!mt! _!:s!Y!@`!A2n!ͬ DRIVE 6?#t !!3*!͑>'$ʖ$ž–͂0:> O:'$$>!$>!$ >![>o5[> o> o[> o> oF##> w#1];UaQ{Q_*g*{* mand: !M!0CPM0DIRһ0RET7*v"c:H0DSCҕ0WRT0XPR0DEL:0CAL>2!Í############################################# . . . * . . . . ### . . . . * . . . ## % ### . ##### . ### . ##### . ### % ## >2 /2!:ͬ WRT - Write file to disk (from terminal mode) DEL - Erase present file (from terminal mode) RET \̈́!s!:l2s!:mADOQRSVTMADOQRSVTB""ͬINVALID OPTION # ͬ | :!<2!͑$ # 7Õ>?*>!>*͑>]!Һ͂:-¬ͬ No answer after time-out. Redial?O#^#6 ) ;  ʼ ;  ü  ) ;  ; #O  O  * . . * . * . * . . * . * . * . . * ## . ### . # . ########### . # . ### . ## . . . * # . . . ### . . . # * . . . ######## .  X X***X X //XXXX X XXXX X // X P0*B~#fo!0`iM0`i!9!P0! 9%6d%6d!9DM! w#w! ~#fo|ҵ1`iw#w`i~#fo|ҧ1! ~#fo( XX *- *XX X X * *X* X X X  OFILE$!" ** #" ɯ22!"!" <  NO DIR SPACE: OFILE$!m0  XX X X X XX XX XXXX XXXXXX/ X XXXX XXX XX##### . ### . ##### . ####### # . # . . * . . * . . # . # # . # . ### - - ### . # . # ####### . # . #  XX X // X XXXXXXXXXXXXXXXXXX/ X XXX// X X X 1 - - XXXX X XX X *** X XXXXX  * *X * X X X * * X** X XXXX X ))))O "Iʊ>:%2>N:N:NNNpI?O:2y_y0:j%:N> %> %*** X X XXXXXXXXXXXXX * * X X *---* X X X *+~# !\ F COM , 7 :2!q:*ö*B*D}|ڟ!"D*B{zґ*@‹ X X X X X X X X X X X X X X XX X X ***** X XXX XX XXXX ******* XXX XXXX XX XX X ****** * * X** XX X X * ** X** X XX X * ** X**>:%N‘> %> %* }±">%¥<  CANNOT CLOSE OFILE$ *-* * XXX X X *- * XXX X *D"D]*D"B!"D*@*B}>*D#"Dɯ2+2?!"B"D<  NO IFILE FILE$!\ "'2 X X X X XXX XX X XXX X X X X X X X  XXXXXXXXX XX XXX XX X **** X X** X X XX XX  XXX X X * ** XX XXXX XXX * * * XXXX X /! ~#fo/0*=ßC!9DM! ~#fo! ~#fo0! n&0S0â=/!9DM*q ~#fo!0`iM0`i!4! *- *X XXX *- *X X XXX *- *X X *+HEX~# !\  å** }|ڕ!" *{z҇*h* " : t DISK FULL: X X XX X XXXX X X XXXXXXXX\ XX XX X XX  X * * * X X X =======******* * * X X XXXXXXXX\ MP FILE.NAM DUMP A:FILE.NAM DUMP B:FILE.NAM OR DUMP MAY BE TYPED SEPARATELY AS: DUMP *FILE.NAM *B:FILE.NAHE CONSOLE IN A FORMAT SIMILAR TO THAT USED BY THE DDT DUMP COMMAND. IN ADDITION, ANY SECTOR OR GROUP OF SECTORS MAY BE DUMPED4 SECTOR 2 EDIT THE REQUESTED SECTOR WILL BE DISPLAYED FOLLOWED BY AN EDIT PROMPT EDIT - ENTER THE ADDRESS OF THE F D to move right E or w to move up X or x to move down to halt Q to quit Type: 1 normal game 2 blinking monsterPACES ARE USUALLY IGNORED THEY ARE ONLY REQUIRED AFTER THE WORDS TRACK AND SECTOR OR T AND S, AND AFTER THE WORD DUMP. A LIM ====* * X \ \ )XXXXX =========********** XXXXXXXXXXXXXXXXXXXXXX  A MAP OF THE GROUP ALLOCATIONS FOR THE ENTIRE DISK OR THE DIRECTORY SORTED ALPHABETICALLY. DUMP TRACK 3 SECTOR 7 DUMP OR TRACK AND SECTOR. IF DUMP IS TYPED THE PROGRAM RESPONDS WITH A HEADING FOLLOWED BY A '*' AND WAITS FOR MORE INPUT. OPERAT CHANGE THE CONTENTS OF THE ADDRESS ENTER THE NEW BYTE FOLLOWED BY A CARRIAGE RETURN. THE PROGRAM WILL DISPLAY THE NEXT ADDRESSs 3 intelligent monsters 4 blinking intelligent monsters !9DM`iw#w`i~#foITED EDITING FEATURE IS INCLUDED IN THE DUMP UTILITY TO ALLOW CHANGING DATA ON THE DISK. THE EDIT FEATURE WORKS AS FOLLOWS. ANts in further treasure appearing magically somewhere in the dungeon, marked by "$". There is a magic tunnel connecting the cenTRACK 5 SECTOR 3 - 9 DUMP TRACK 6 (DUMPS ALL 26 SECTORS) DUMP GROUP 19 DUMP MAP DUMP DIR (DUMPS DIRECTORY) ION IN THIS MODE IS SIMILAR TO OTHER UTILITIES LIKE PIP OR DDT. THE OPERATION DESIRED MAY THEN BE TYPED IN AS FOLLOWS: DU AND ITS CONTENTS. TO STOP ENTERING DATA TYPE A PERIOD. THE PROGRAM WILL REDISPLAY THE SECTOR SHOWING THE CHANGES MADE. THE ED --- DUMP --- BY: S. J. SINGER THIS PROGRAM IS AN IMPROVED DUMP UTILITY FOR CP/M. ANY CPM FILE MAY BE DUMPED TO TY SINGLE SECTOR ON EITHER DRIVE MAY BE EDITED BY REQUESTING DISPLAY OF THE SECTOR FOLLOWED BY THE WORD EDIT. DUMP B:TRACK ter left and center right parts of the dungeon. The monsters know about it! Type: S to move left  THE WORDS TRACK, SECTOR AND GROUP MAY BE ABREVIATED AS FOLLOWS DUMP G 4 DUMP T 7 S 3-4 *TRACK 5 S 6 *SECTOR 2-  IT FEATURE WORKS ALMOST EXACTLY LIKE THE S ENTRY FEATURE IN DDT. TYPING ONLY A CARRIAGE RETURN OMITS ENTRY. TYPING A PERIOD M FF5E SECONDS $5372 FF5C HOURS 65373 FF5D MINUTES 65374 AS FOLLOWS: A>CLOCK ABHHMMSS A = S FOR STANDARD TIME M FOR MILITARY TIME B = D TO DISPLAY TIME O TITLE *** XEROX 820 REAL-TIME CLOCK UTILITY *** .Z80 BDOS EQU 5 ;BDOS ENTRY POINT PRTSTG EQU 9 ;CP/M PRINT STRING FUN MODULO 128, THE NEXT ADDRESS AFTER 007F IS 0000. THE EDIT FEATURE SHOULD BE USED WITH CAUTION SINCE IT IS POSSIBLE TO EDIT C IN HDR ;z2!>2!!ڜw,Q2!ڜJ:!G:!l:!ʓERELY REDISPLAYS THE SECTOR FROM MEMORY, IT DOES NOT CAUSE IT TO BE WRITTEN BACK ON THE DISK. WHEN EDITING IS COMPLETE, REDISP2h: M >2 !\  :\2 ! \ \Á ! \ \! \ \N SCREEN N NO DISPLAY ON SCREEN HH = HOUR MM = MINUTE SS = SECOND $ THE CLOCK MODULE ISCTION CLRSCN EQU 1AH ;CLEAR SCREEN CODE CR EQU 0DH ;CARRIAGE RETURN CODE LF EQU 0AH ;LINE FEED CODE CTC3 EQU 0FF16H :( j : $ !p* ^#V+q#p!>s#r:E !x":M >2k:N >2*>"*͔2\*͔SEND # :!3>:!:!/>2!!~,°2!yͺ2fG:!x3ͬH RCD, NOT ACK :!<2! :!LAY THE SECTOR BY TYPING A PERIOD AND TYPE EITHER WRITE (WRITE SECTOR BACK ON DISK) STOP (STOP EDITING WITHOUT WRITING<7Š 2 =Ɓo&  ] 2h2|w#~w\!\l ~# x ɯ2!:! ͬAWAITING #:!<3 ALREADY LOADED, PRESS RESET IF YOU WANT TO RELOAD IT. CLOCK VARIABLE MEMORY LOCATIONS DECIMAL ;CTC CHANNEL 3 INTERRUPT VECTOR BASE1 EQU 0FF75H ;BASE VARIABLE (1.0 ROM) BASE2 EQU 0FF78H ;BASE VARIABLE (2.0 ROM) CLKOR2]*͔2^>|0g}0o!^X:u<8?.0g\6 #@6:#@6:#@6 ˿ 8  yS0w#4~<6 :!J7CAN'T SEND SECTOR -- ABORTING $:!ͬTIMEOUT ON ACK :!\:! 1"i>v>  ON DISK) ALL EDIT ENTRIES MUST BE MADE IN HEX. ENTERING NON HEX CHARACTERS RESULTS IN AN ERROR MESSAGE. THE PERMISSABLE ADf 7G:!#:!;x3ͬH RCD, NOT SOH ;>:!<2! :!b:!hJ ͵++ UNABLE TO RECEI HEX VARIABLE 65372 FF5C HOURS 65373 FF5D MINUTES 65374 G EQU 0FE00H ;ORIGIN FOR CLOCK ROUTINE HOURS EQU 0FF5CH ;HOURS VARIABLE LOCATION MINUTE EQU HOURS + 1 ;MINUTES VARIABLE L+4~<6+4~ 6 CLOCK UTILITY INSTRUCTIONS VER 1.0 THE COMMAND LINE TO SET & RUN THE CLOCK MUST BE ͬROUTINE CANCELLED >B2!:!<2!:!\<ͬFILES EXISTS -- TYPE 'Y' TO ERASE:  *Y\DRESS RANGE IS 0000 TO 007F. LARGER ADDRESSES GIVE AN ERROR MESSAGE. WHEN ENTERING A GROUP OF BYTES THE ADDRESSES ARE COMPUTEDVE BLOCK -- ABORTING ++ $:!ʪ:!;ͬ++ TIMEOUT ++ :!3;ڜWڜ/ :!:!;ͬ++ BAD SECTOR #  OCATION SECNDS EQU MINUTE + 1 ;SECONDS VARIABLE LOCATION ; ; FIRST CHECK FOR CLOCK MODULE ALREADY LOADED, IF IT IS DISPLAYM JR NZ,ROM1 ;SKIP IF NOT LD HL,BASE2 ;NEW BASE ADDRESS LD (CLOCK+7),HL ;SAVE NEW VALUE ROM1: LD A,(82H) ;GET STD/MINE LD DE,12 ;OFFSET INTO ROUTINE ADD HL,DE ;COMPUTE ADDRESS LD E,(HL) ;GET LOW BYTE OF CALL TO E INC HL ;BUMP PASCII OFFSET LD L,A ;PUT BACK IN L ADD A,A ;DOUBLE A ADD A,A ;DOUBLE AGAIN ADD A,L ;ADD ONE IN ADD A,A ;A = AHEAD LD DE,INSTR ;ELSE PRINT INSTRUCTIONS LD C,PRTSTG ;PRINT STRING FUNCTION TO C CALL BDOS ;GO PRINT THROUGH CP/M LUE CALL CONV ;GO CONVERT TO BINARY LD (MINUTE),A ;SAVE IN MINUTES VARIABLE LD HL,(88H) ;GET SECONDS VALUE CALL CONV ; MESSAGE AND GO BACK TO CP/M ; BEGIN: LD A,(0FE00H) CP 0FFH ;CHECK FOR CLOCK ALREADY LOADED JR Z,PROCED ;PROCEED IILITARY OPTION CP 'M' ;CHECK FOR M JR NZ,BASEOK ;DEFAULT STD TIME SKIP OVER LD A,25D ;NEW VALUE LD (BASE+1),A ;SAVOINTER LD D,(HL) ;GET HIGH BYTE OF CALL TO D DEC HL ;ROLL HL BACK LD BC,CLOCK ;GET ADDRESS OF CLOCK ROUTINE LD (HL)A * 10 ADD A,H ;ADD IN UNITS VALUE RET ;ALL DONE ; ; MAIN CLOCK ROUTINE - THIS CODE IS MOVED INTO HIGH MEMORY AND ERST 0 ;GO BACK TO CP/M ; ; IF CLOCK IS NOT LOADED AND COMMAND LINE PARAMETER COUNT IS OK ; MOVE IMAGE OF CLOCK ROUTINE TO ;GO CONVERT TO BINARY LD (SECNDS),A ;SAVE IN SECONDS VARIABLE EI LD A,1AH ;CLEAR SCREEN CODE CALL 0F00FH ;GO THRF NOT LD DE,RESET ;POINT TO RESET MESSAGE LD C,PRTSTG ;PRINT STRING FUNCTION TO C CALL BDOS ;CALL BDOS RST 0 ;BACKE NEW VALUE BASEOK: LD A,(83H) ;GET DISPLAY OPTION CP 'N' ;CHECK FOR NO DISPLAY JR NZ,DISOK ;DEFAULT ON SKIP AROUND ,C ;RE-ROUTE INTERRUPT TO CLOCK ROUTINE INC HL LD (HL),B LD HL,GETOUT+1 ;POINT TO CLOCK EXIT LD (HL),E ;SAVE ORIGINXECUTED ; EVERYTIME A ONE SECOND INTERRUPT OCCURS ; START: .PHASE CLKORG CLOCK: LD HL,SECNDS ;POINT HL TO SECONDS VARIA HIGH MEMORY ; PARMOK: LD HL,START ;SOURCE ADDRESS FOR MOVE LD DE,CLKORG ;DESTINATION ADDRESS FOR MOVE LD BC,LENGTH ;OUGH MONITOR RET ; ; CONVERT ASCII VALUE IN H&L TO BINARY VALUE & RETURN IN A REGISTER. ; UNITS IN H -- TENS IN L ; C TO CP/M ; ; CHECK LENGTH OF COMMAND LINE (MUST BE 9 CHARACTERS) IF NOT GIVE ; USER INSTRUCTIONS ON WHAT MUST BE ON COMMANDLD A,0C3H ;GET JUMP INSTRUCTION LD (CLOCK+6),A ;SAVE IN PLACE OF CALL LD HL,(GETOUT+1) LD (CLOCK+7),HL DISOK: LD HL,(8AL LOW BYTE INC HL LD (HL),D ;SAVE ORIGINAL HIGH BYTE LD A,(0F001H) ;GET BYTE FROM MONITOR CP 45H ;CHECK FOR 2.0 ROBLE CALL INCTIM ;INCREMENT TIME IN BINARY LD A,(BASE1) ;GET LINE# OF BOTTOM LINE ON SCREEN INC A ;ADD 1 TO WRAP AROUNNUMBER OF BYTES TO MOVE LDIR ;Z-80 BLOCK MOVE DI ;DISABLE INTERRUPTS LD HL,(CTC3) ;ADDRESS OF 1 SEC. INTERRUPT ROUTONV: LD A,H ;MOVE TO A SUB 30H ;REMOVE ASCII OFFSET LD H,A ;PUT BACK IN H LD A,L ;MOVE L TO A SUB 30H ;REMOVE  LINE ; PROCED: LD A,(80H) ;GET COMMAND LINE LENGTH CP 9 ;CHECK FOR 9 CHARACTERS JP Z,PARMOK ;IF COUNT = 9 THEN GO 4H) ;GET HOURS VALUE CALL CONV ;GO CONVERT TO BINARY LD (HOURS),A ;SAVE IN HOURS VARIABLE LD HL,(86H) ;GET MINUTES VA  D TO TOP LINE CP 24 JR C,CLOCK2 ;WATCH FOR MODULO 24 THING XOR A CLOCK2: SRL A ;TRANSFORM LINE# INTO 16 BIT ADDRESS ; ROLL-OVER AFTER 24 HOURS RET C ;EXIT IF NO ROLL-OVER LD (HL),1 ;ELSE RESET HOURS TO 1 AND RET ;START OVER LENG INCTIM: INC (HL) LD A,(HL) ;BUMP CLOCK SECONDS AND CHECK FOR CP 60 ; ROLL-OVER AT END OF MINUTE RET C ;EXIT IF NO  FF5C HOURS' DEFB CR,LF DEFM ' 65373 FF5D MINUTES' DEFB CR,LF DEFM ' 65374 ENTS OF CLOCK VARIABLE LOCATIONS ON THE ; SCREEN. ENTER WITH THE DE REGISTER POINTING TO THE DESIRED VARIABLE ; PUTDEC: LD N NO DISPLAY ON SCREEN' DEFB CR,LF,LF DEFM ' HH = HOUR' DEFB CR,LF,LF DEFM ' MM = MINUTE' DEFB CR,LF,LLD L,70*2 ; WITH COL# COMPONENT=70 RR L LD DE,3000H OR D LD H,A IN A,(1CH) SET 7,A OUT (1CH),A ;ENABLE CRT RAMTH EQU $-CLOCK ;CALCULATE LENGTH OF CODE .DEPHASE ; ; MESSAGES ; INSTR: DEFB CLRSCN,LF DEFM ' CARRY TO MINUTES LD (HL),0 ;ELSE RESET SECONDS TO ZERO DEC HL ; AND POINT NEXT TO MINUTES INC (HL) LD A,(HL) ;BUMP FF5E SECONDS' DEFB CR,LF,LF,LF DEFM '$' END BEGIN  A,(DE) INC DE LD C,0 PUTD1: SUB 10 JR C,PUTD2 INC C JR PUTD1 PUTD2: ADD A,10 PUSH AF LD A,C CALL PUTDIG ;DIF DEFM ' SS = SECOND' DEFB CR,LF,LF,LF DEFM '$' RESET: DEFB CLRSCN,LF,LF DEFM 'THE CLOCK MODULE IS ALREADY LOADE BANK LD DE,HOURS ;POINT DE TO CLOCK HOURS LD (HL),' ' INC HL CALL PUTDEC ;CALL PUTDEC TO DISPLAY HOURS LD (HL),':' CLOCK UTILITY INSTRUCTIONS' DEFM ' VER 1.0' DEFB CR,LF,LF DEFM 'THE COMMAND LINE TO SET & RUN THE CLOCK MUST BE AS ' D CLOCK MINUTES AND CHECK FOR CP 60 ; ROLL-OVER AT END OF HOUR RET C ;EXIT IF NO CARRY INTO HOURS LD (HL),0 ;ELSE RESSPLAY 10'S DIGIT OF TIME POP AF PUTDIG: OR '0' ;MAKE MSB OF ACC INTO ASCII LD (HL),A INC HL ;STORE CHARACTER AND BUMPD, PRESS RESET' DEFM ' IF YOU WANT TO RELOAD IT.' DEFB CR,LF,LF,LF,LF,LF,LF,LF,LF DEFB ' CLOCK VARIABLE MEMORY LO INC HL CALL PUTDEC ;CALL PUTDEC TO DISPLAY MINUTES LD (HL),':' INC HL CALL PUTDEC ;CALL PUTDEC TO DISPLAY SECONDSEFM 'FOLLOWS:' DEFB CR,LF,LF DEFM 'A>CLOCK ABHHMMSS' DEFB CR,LF,LF DEFM ' A = S FOR STANDARD TIME' DEFB CR,LF ET MINUTES TO ZERO DEC HL ; AND POINT NEXT TO HOURS INC (HL) LD A,(HL) ;BUMP CLOCK HOURS AND CHECK FOR BASE: CP 13  POINTER RET ; ; INCREMENT TIME IN SECONDS VARIABLE BY ONE, CHECK FOR: ; SECONDS = 59, MINUTES = 59, AND HOURS = 12. ; CATIONS' DEFB CR,LF,LF,LF DEFM ' DECIMAL HEX VARIABLE' DEFB CR,LF,LF DEFM ' 65372  LD (HL),' ' IN A,(1CH) RES 7,A OUT (1CH),A ;DISABLE CRT ROM BANK GETOUT: JP 0 ; ; SUBROUTINE TO PUT DECIMAL CONTDEFM ' M FOR MILITARY TIME' DEFB CR,LF,LF DEFM ' B = D TO DISPLAY TIME ON SCREEN' DEFB CR,LF DEFM '  *K͞+GG7S'+FÎr ͖ 8{ Ăw#w#w^#V#*~#fo^#*~#fo^#V#*n^#*$>6_,>6>@2?$*>">Zþ//â=0ï J00F1!9DM͡! 6#6! ~#fo| ͤ! !-!ͧ!":>""G #Ϳ,"x ..Ϳ,.ͭ'5':>?2>I#:>>2> *<-*N*l*2>ͻ':?[#7/ͽ6:>1$:>$:? TRANSFERRED :\2x"!\:x"2\!!!:y" q >2!2!/2:!a:!ʁͬ ALL TRANSFERS COMPLETED "!@"!" ʞ!F#x±~#±!b2r~# "2r+}|~#G:rx"2r(=7++ FILE READ ERROR ++$! y=>2!y2!!""!*!!"!:!<2!:!O"\n^#V# ~#fo^#& ~#fo!+!#!+!#!+!+}|z{|}|z$ !-!ͧ*B~#fo!1 ! ͪ! !9!ͧ*@~#fo+|b!5 !-!ͧ*86@#6*<w#w*>$_,:>#)’#>66:?6#*?|£#2͈7#>66:?6>#6>66: ?6#*?">)#>6:?6>s6>@2>#2͈7#:!ͬ ++PRESS RETURN TO DISCONNECT++  ˆͬ ++DISCONNECTED++ ͂:!c>>>>>>+w# +6#!6#2w2x*s!>r<o&F=-` r'~h6!+`W?_! r2!!""!ERROR WRITING FILE $:xG:P 7O:!:! 7||7zZZ)|/g}/o#|͉k|/g}/o#ɯ2qZZk:q|/g}/o#|/g}/o#:q<2qqDM!xxGyO~#fo!A * ͪ* !-!ͧ`iw#w`i~#fo|`i~#fo(k*!`i~#foͧ`i^#Vr+só*F6#)#:>=2>))$>s6#́)($2:>"$2͈7#3͈7#*>">*?">:?ʒ$:>s$)f$>>6:?62͈7#2͈72>D > 2eG'4>_%>*:!>8:!>!-;%;!:e >4:e>4e! ]0ژ:Ҙ0DM)) )o|${h!~7z?` :>ª@w#G.¶ww#?*>?w#> w#.7:77:! :!&:!+:!+O / :!N:!hͬAWAITING INITIAL NAK Pffh*)v|͔`i|)Öxڷz/W{/_ѯzW{_=yOxGæ2qZZ͉M|}ȯ|g}o)|/g}/oͬ No file specified \<ERROR - CAN'T MAKE FILE DIRECTORY MUST BE FULL $\<{CAN'T OPEN FILE$:!>#)f$>6:?6>{62͈7#)«$:?„$>}62i$:?$.́)$>&663i$:?$_,w#:>$h-_,$:?>]|/W}/_! =ڏxy++ INVALID BAUD RATE ++$!l\2|2h    >(3>)_> !a{   `OE!y6$ -7rBo&))T])))!y""$":: 2"<2 2<2%2(<2+]2! !! 6ø#ù!:!2!:!E:!!]ͬ#z/W{/_!9~#fo! ! ! ! ! ! !9~#A"s!`*"!"!Y">2>2>22!"!:!ͬFILE OPEN - EXTENT LENGTH: :k3>H\<CAN'T CLOSE FILE$:!=2!*!"!:!7"\ > Oa{_< E0:!S<ɯ2!ͬMULTIPLE ERRORS ENCOUNTERED. TYPE Q T file T - Terminal mode (optional file name) E - Terminal mode with echo ͬ DEFAULT DRIVE: Aͬ Com !M:m ¢>2>2!/>2!:ͬEnter New Baudrate: !e6  0:wO#!!!!!! s! !ú ͬNOT FOUND>? !t!w#+!!mt! _!:s!Y!@`!A2n!ͬ DRIVE 6?#t !!3*!͑>'$ʖ$ž–͂0:> O:'$$>!$>!$ >![>o5[> o> o[> o> oF##> w#1];UaQ{Q_*g*{* O QUIT, R TO RETRY:  *RQJ~ʹ#í ͻͬ:!>Q2!f~#:ȯ2- R!!mand: !M!0CPM0DIRһ0RET7*v"c:H0DSCҕ0WRT0XPR0DEL:0CAL>2!Í>2 /2!:ͬ WRT - Write file to disk (from terminal mode) DEL - Erase present file (from terminal mode) RET \̈́!s!:l2s!:mADOQRSVTMADOQRSVTB""ͬINVALID OPTION # ͬ | :!<2!͑$ # 7Õ>?*>!>*͑>]!Һ͂:-¬ͬ No answer after time-out. Redial?O#^#6 ) ;  ʼ ;  ü  ) ;  ; #O  O ~e!!͂ͬ WAITING FOR DIAL TONE >!dͬ ++NO DIAL TONE AFTER 10 SECONDS++ 7 !."͉͒:!!+ :͂ͬ ++DISCONNECTED++  | :" "ͪ>2!/2!" :! :" *v"g̀͡- Return to terminal mode with no loss of data :ͬDSC - Disconnect CAL - Dial number ͬXPR - Toggle expert mos! !ú ͬNOT FOUND>? !t!w#+!!mt! _!:s!Y! ++BAD LIBRARY NUMBER CALLED++ $ (Y/N/C):  *NYʬCR/2-2͑ Rͬ Connection established - Select options: >!!\6# > " >"  > " >" w#" :9 _@w# . ; w#; ~*_ #Q b t ~*p #d t 6?#t !! ʛr> > > >$ "ͬENTER NUMBER OR LIBRARY LETTER - TYPE C/R WHEN FINISHED, CTRL-X CANCELS WHILE DIALI>2!/2!" :/2 F#* 7SRTE~IA#2>#C7#(կ8 ʘʘ  [de (Menu on/off) DIR - List directory (may specify drive) CPM - Exit to CP/M S - Send CP/M file R - Receive CP/M **File Not Found Size Recs Bytes Ext Acc65536 set to R/O Invalid Disk AssignmentWrong CP/M Version (Requires 2.0)!ͱ:]EMG:xCTʌSJR1:!Jͬ ++Bad Option++ P:m ͬ Re-enter PRIMARY option and file name only:\̈́!s!:l2s!:m $!2!M!2!s!!>!~!~!# ͬ | :!<2!NG: !M:!ʫ!!A~0 J#!.{E~Q ;Q:!_!!~T" ʫͱ ʫ#͑QG#4+~#pxo#[#G~wڶ+xF6 ʻxo[4[o> o>o[>#o> o> oQG>#o> o> ox[o ENTHIS TAKES ABOUT 2 SECONDSTHE MONSTERS ALWAYS TRIUMPHIN THE END! ?40/5!9DM*>~#fo! s#r! ~#fo|@~#fo+|„ *D~#fo|© !ì ! *D~#fo!M * ͪ* !<!ͧ*D^#Vr+s!|҄ !S !- > B! ! ~#fo! ~#fo *R~#fo~#fo##s#rX*R~#fow#wX[`i~#fo>*m>ʔ>.y>ʔ>$…>!@`i~#fo?!ͭ`i^#Vr+si *! s#r! w#w! ~#fo|~ ! ~#fo! ~#fo)s#r! ~#fo##6 #6! ~#f ~#fo *R~#fo##~#fo#s#r?*R~#fow#w?[! ~#fo|…! ! ~#fo! ~#fo *R~#fo6`i6 #! ^#Vr+s ! *R~#fo~#fo! s#r*R~#fo##~#fo! s#r! ~#fo(k*! ~#fo6 *R~#fo~#fo>!ͧ*@w#w*R~#fow#w*R~#fow#w! w#w! ~#fo|҄ ! ~#fo k*6#6! ^#Vr+ʳ>%‘>Ý*q ^#Vr+s*B^#Vr+sÝ*q ~#fos#rÝ!!-! *@6#6*D6#6*R~#foow#w! ~#fow#w! ~#fow#w! ~#fo w#w!M! ~#fo~#fo! ~#fo##~#foͭ! ^#V! r+s! ^#Vr+sþ *6[*86<#6! ~#fo(k*! ~#fo++n`is#r>.>> >>*>>%>>$>4! ‹>ʲ>—>z>£>B>¯>M[*86^#6! ~#fo+(k*! ~#fon`is#r>.>*> >sD ͹*B~#fo|ҡ ͼ*<~#fo#|‰ !o !-!ͧ! !-!ͧ!Ϳ! ^#Vr+s! !-!ͧ!6#6*R~#fo6#6*! s#r! w#w! ~#fo|Қ! ~#fo ~#fo+|{! ~#fow#w! ~#fow#w! ^:w#w*:^#Vr+s! |¦ Ͱͳ*<~#fo#|½ ò ! w#w! ~#fo| ! ~#foͶ! ^#Vr+s *<~#fo#|! ~#fo! ~#fo *R~#fo~#fo++s#rJ*R~#fow#wJ[! ~#fo|“! ! ~#fo! ~#fo *R*>*>*>%>*>$'>*a! ! ~#fo! ~#fo *R~#fo##~#fo+s#rw*R~#fow#ww[*8 !-! ͧ!9SCORE: gold left = %6dCOUNTDOWN: delay = %6d%2d%c   YOU ARE BEING EAT#V! r+s! ^#Vr+s4Ý*! s#r! w#w! ~#fo|U! ~#fo~#fo*R~#fo~#fo+! ~#fo##~#fo*R~# ò *R~#fo~#fo+|5 ͳ*<~#fo#|5 ò ! 6#6! ~#fo|j ! ~#foͶ! ^#Vr+s> *<~#fo#|~ ò *~#fow#w`i6 #6[*86>#6! ~#fo(k*! ~#fo##n`is#r>.> > > >*> >%> >$6*H6#6*Jw#w*Lw#w*Nw#w*8~#fo*R~#fo~#fo*R~#fo##~#foͭ`iw#w`i~#fo! ~#fo+ҧ 6v#6! ~#fo#(k*! ~#fon`is#r>.¿>> >>*>>%>>$>)! ! ~#fo! fo##~#fo+! ~#fo *<s#r6*<w#w! ^#V! r+s! ^#Vr+sô*<~#fo#|ʚ*8~#fo*R~#fo~#f! ~#fo+|!" ~#fo(n! s#r!|! ~#fo|`i^#Vr+s)! 6#6! ~#fo+++|,!" ~#fo++n! s#r!|s#r! ~#fo*R~#fo##~#fo`i~#fo*R~#fo~#fo! ~#fo*<s#r! ~#fo)**q ~#fod͉#s ^#Vr+s! ~#fo|8! ~#fo)! ~#foQ`i~#fo)! ~#foQ!$9u{C7=G8?4þ/ >!9DM`ifo|*:~#fo+! ~#fo)*~#fo|! ~#fo(k*! ~#fon&! ~#fo! ~#fo! ~#fo! ~)! 6#6!* ~#fo*R~#fo~#fo! s#r!, ~#fo*R~#fo##~#fo! s#r! ~#fo|x! 6#6Ù! ~#foo*R~#fo##~#fo ! 9COUNTDOWN: ø0Í7!9DM*@~#fo+|*`is#r! w#w! ~#fo|`i~#fo,! ~#fo|,`i^#Vr+s)! 6#6! ~#fo++|ʁ!" ~#fo##n! s#r!|ʁ! ~#fo|ʁ`i^#Vr+s)! 6#6#r! ~#fo+|U*<~#fo#|U! ~#fo|³*:~#fo! ~#fo)*~#fo|³! ~#fo~#fo+|ˆ!M`i~#fo! ~#fow#w!]`*86@#6*F*Rs#r!'*Tc!(*|c!>(*c!f(*c!(*c#fo! ~#fo! ~#fos#r! ~#fo~#fo>=>d>I>ʆ>U>ʨ>a>! ~#fo+! s#r! ~#fo`i|ґ! 6#6Ù! w#w! ~#fo|ڶ! 6#6! ~#fo|! 6#6! w#w! w#w! w#w! ~#fo`i~#fo * ~#fo|µ! ~#fo)*6#6! `i~#fo~#fo`i~#fo##~#foͲ`i~#fo##6#6`i~#fo6#6`i~#fow#w`i~#fo6#6`i~#fo *m ~#fo+++|ʨ*m ~#fo++++|8!*q ~#fo8*R~#fo~#fo+|! ~#fo>>>>W>ó*<~#fo+|ʳ!S`i~#fo! ~#fo!! 9bad directionÍ7!9DM`iw#w!, ~#fo(k*!(*c!(*Dc!)*lc!.)*c!V)*c!~)*c!)* c!)*s#r! ~#fo#! s#r! ~#fo`is#r! ~#fo++`is#r! ~#fo! s#r`i~#fo|`i6! ~#fo##`is#r! ~#fo! s#R~#fo~#fo|‹! ~#fo)! ~#fo! ~#fo[! ~#fo)! ~#fo! ~#foˆ! ^#Vr+s)! ! ~#fo)! ~6#6!M!!Ͳ`i~#fo!͵##s#r`i^#V! r+s! ^#Vr+s!9057!9DM! ~#fo k>ʗ>>!" ~#fo(n}#T!" ~#fo(n}-T`i^#Vr+s)! 6#6!" ~#fon}#ʔ!" ~#fon}-ʔ`i^!* ~#fo!" s#r!( ~#fo~#fo! s#rzʀ!" ~#fon! s#r!|ʀ! ~#fo|ʀ`i^#Vr+s)! 6#64c!)*\c!**c!F**c!n**c!**c!**$c!**Lcr`i~#fo|`iw#w! ~#fo(k*`i~#fon}.X X%X$X*Xö! ~#fo`i~#fos#r! ~#fo##! ~#fo#fos#r! ~#fo)! ~#fo! ~#fo! ~#fo)! ~#fo! ~#fo! ^#Vr+s)! ! ~#fo)! ~#fos#r!*! s#r! ~#fo~#fo! s#r! ~#fo##~#fo! s#r! ~#fo ~#fo+|*m ~#fo! s#r! ~#fo+|ʯ! ~##Vr+s)! 6#6!" ~#fo++n}#!" ~#fo++n}-`i^#Vr+s)! 6#6!" ~#fo##n}# !" ~#fo##n}- `i^#Vr+s !+*tc!6+*c!^+*c!+*c!+*c!+*<c!+*dc!&,*f*>6#6*m w#wi*m ~#fo|¼'!lá'*B6#6*q w#wo!''.0r!9#######################* c!%%# . . . . . . . . ### . . . . . . . . #* c!%%# % ### . ##### . ### . ##### . ### % #** . . * . * . * . . * . * . * . . * ## . ### . # . ########### . # . ### . ## . . . * # . . . ### . . . # * . . . ######## . ##### . ##### . ### . ##### . #######*tc!## # . # . . . . . . . . # . # *c!#$ # . # * . . . . . . * # . # ####### . # . ########### . # . ######## . . . * . * . . ### . . * . * . . . ## % ### . ##### . c!N,*c!v,*c!,*c!,*,c!,*Tc!-*|c!>-*c###################### . . . * . . . . ### . . . . * . . . ## % ### . ##### . ### . ##### . ### % ## * . . * . * . * . . * .  c!&:&# . . # . . . . . . . . . . . . # . . #*, c!N&v&### . # . # . ########### . # . # . ###*T ##### . ### . ##### . ####### # . # . . * . . * . . # . # # . # . ### - - ### . # . # ####### . # . # # . ### - - ### . # . # *c!2$Z$####### . # . # # . # . #######*c!n$Ö$ . . . # ### . ##### . ### % ## . . # * . * . * . . * . * . * # . . #### . # . # . ########### . # . # . #### . * . . # . . . ### . . !f-*c!-*c!-*c!-*Dc!.*lc!..*c!V.*c!~.** . * . . * ## . ### . # . ########### . # . ### . ## . . . * # . . . ### . . . # * . . . ######## . ##### . ### . ##### . ##c!&ò&# . . . . # . . . ### . . . # . . . . #*| c!&&# . ########### . ### . ########### . #* c!' # . # . ####### * . * # # * . * ####### . # . # # . # . ####### # . # . ###########  # . . . * c!$$####### . # . # # . # . #######*< c!$% # . # . ########### . # . . * . ## . ########### . ### . ########### . ## . . . . . . . * . . * . . . . . . . ###################################c!.* c!.*4c!.*\c!/*c!F/*c!n/*c!/*c##### # . # . . * . . * . . # . # # . # . ### - - ### . # . # ####### . # . # # . # . ####### *'# . . . . . . . . . . . . . . . . . . #* c!>'f'#######################################* c*o w#w!. # . # # . # * . . . . . . * # . # ####### . # . ########### . # . ######## . . . * . * . . ### . . * . * . . # . # *d c!"%J% # . # . . . . . . . . # . # * c!^%Æ%####### . # . ########### . # . ############################################### . . . * . . . . ### . . . . * . . . ## % ### . ##### . ### . ##### . ### % ## !#.## . ### . # . ########### . # . ### . #*$c!B#j## . . . . # . . . ### . . . # . . . . #*Lc!~#æ### * . * # # * . * ####### . # . # # . # . ####### # . # . ########### . # . # # .  . . ## % ### . ##### . ### . ##### . ### % ## . . # * . * . * . . * . * . * # . . #### . # . # . ########### . # . # . #### >15>D’4>H5>Ež4>_5>wª4>_5>X¶4>v5>x4>v5> 4>ʍ5>4>ʣ5>4>ʣ5>Q4>ʣ5>4>ʩ5>1^#Vr+s1!32!! ^#Vr+s1!32!! ^#Vr+s1*m ~#fo!32!! ^#Vr+s1!32! There are gold coins scattered uniformly in the dungeon, marked by "+". One magic potion is available at each spot marked "%P0*B~#fo!0`iM0`i!9!P0! 9%6d%6d!9DM! w#w! ~#fo|ҵ1`iw#w`i~#fo|ҧ1! ~#fo( #6`i~#fo! ~#fo)s#r`i~#fo w#w!M`i~#fo~#fo`i~#fo##~#fo5*q ~#fo s#r!n7!n7!9MONSTERS . * . . # . . . ### . . . # . . * . ## . ########### . ### . ########### . ## . . . . . . . * . . * . . . . . . . ########### 5>ʳ5>25>5>3"5>5>4.5>55*R~#fo6#65*R~#fo6#65*R~#fo6#65*R~#f! ^#Vr+s1*q ~#fo!42!! ~#fo1!!422!9 ___________________________ | ". Each potion will enable you to kill monsters by touch for a limited duration. It will also scare them away. When you killk*T`i~#fon! s! ~#fo(k*`i~#fo! ns! ~#fo(k*`i~#fo! ns{*›1! ~#foKILLED: %1dÓ7kG!9DM͐7`is#r`i~#fo! ~#fo)ú7!97/!9DM! ~#fo!-!7*s 6*t 6=*##################################################################### . . . . . . . . ### . . . . . . . . ## % ### . ##### . o6#65*R~#fow#w5H45`i6#6^4*m 6#65*m 6#65*m 6#65*m 6#65^4!96 || G A M E O V E R || || Game type: %1d ||  a monster it is regenerated, but this takes time. You can also regenerate yourself %d times. Killing all the monsters resul(k*`i~#fo6.`i^#Vr+s0! ^#Vr+s0*B6#6*>~#fo*>~#fo s#r!92F?4þ/w 68þ/*=;> 8!!8!88!98!L98!98!98!!/:8!{:8!:8!;8!Q;8!x;### . ##### . ### % ## . . . . . . . . . . . . . . . . . . #/ >!9DM! ~#fo! ~#fo0/â=!9DM!!!5*R~#fo~#fo+|h7*o ^#Vr+sz“6* n}.m6*B^#Vr+s* 6$!$!!  || Your score: %-5u ||___________________________|K4CC1!9DMB4|^45E4! s#r! ~#fo|g}o>S†4ts in further treasure appearing magically somewhere in the dungeon, marked by "$". There is a magic tunnel connecting the cen*=;>r=!9DM!21!11*m ~#fo|B3! 6#6!! ^#Vr+s1!N32!! ^#Vr+s1!l32!! 8!;8!;8!;8!<8!2<8!X<8!<8!<8Attention: you are in a dungeon, being chased by monsters! /! ~#fo/0*=ßC!9DM! ~#fo! ~#fo0! n&0S0â=/!9DM*q ~#fo!0`iM0`i!4!5*o w#w!w7!-!6*o ~#fo!7* 6* !>!6! ~#fo k*`is#r`i~#fo##6 ter left and center right parts of the dungeon. The monsters know about it! Type: S to move left ҚA! ^#Vr+s6 sAðA! ^#Vr+s`insA! ^#Vr+s`insç>͐6!9AA!9DM͐͐ .B͐^#Vr+`in&u>}Dʬ?U?X?O?C@@Sq@ÝA͐~#fo|?! ^#Vr+s6-͐͐~#fos#r! ^#Vr+s! 6 @! 6@! 6n&|g}o|F! C! ~#foÿF! ~#fo##n}9FUD! ~#fo##6! ~#fo###n&ÿF! ~#fo##n&ÿF! ~#fon! s! ~#f!u=!=x=!{=.1è=i>!9DM! ͐ͥ=!9DM͐`is#r! ^#Vr+s! ^#Vr+sns{==͐> s#r! ~#fon}NUD! ~#fo! ~#fo#! ~#fo##sss! ~#fo6! ~#fo6!!C|tE!!C`is! ~#fo D to move right E or w to move up X or x to move down ѯgs#r@! ^#Vr+s! ^#Vr+s~#fos! ^#Vr+s@! n}„@! 6o! ~#fos! ~#fo|g}o|²F! ~#fo#6! n&ÿFÿF!9Nonsense! #+|F'zF F!9>ßC!9DM͐n}9>! ^#Vr+sn& >>D>i> >!y9DM! `i>>`iA>!9x>AÂBñBC!h9DMn! s!|g}o|ʭD`in&|g}os! n&|g}o|D`in! ~#fon}DC"E! n&|g}o|"E`in} E!ce> to halt Q to quit Type: 1 normal game 2 blinking monster!9DM! n&0ͯڭB! n&9ͯ÷BÂB!9DM`iw#w͐~#fon&ʹB}C͐ ?͐^#Vr+snѯg`is##6! ^#Vr+s~#fo! s#r͐n}@͐|@! ^#Vr+s! ^#Vr+sns! ^#Vr+s! ^#Vr+sß@͐6! ! s#r! nF |G""GG ! ###G""  Wait a few seconds, and type a CR: $*>HyGyG7*|g}! ^#Vr+s~#fo! s#r͐! s#r! ^#Vr+sn`is{A`in}%³A! ! s#r! 6#6! s! s! s͐n}-?! ^#V ~#fo#6tE`in}"E! ~#fo#6tE! ~#fo##n}tE! ~#fo##6! ~#fo###`ins! n&|g}o|tE`in&!C! ~#fo>s 3 intelligent monsters 4 blinking intelligent monsters !9DM`iw#w`i~#forB͐ C!9CLC!9DM! n&C|AC! n&FC! n&!9DM! n&aͯwC! n&zͯÁC}@A! ^#Vr+s!@A! ^#Vr+s! n}7A!0:A! sA͐! ^#Vr+sns{iA! ^#Vr+s@A! n}ʚA! ^#Vr+s!o"zg{o"|g 7*+++:G_*DM!Go&}r+s! 4͐n}0?! 4͐n&o>}5?! r>8?!! s#r! ^#Vr+sn`is{.€?! r>! s#r! 4! ^#Vr+sn`isE>ʻE>”E>ʾE> E>&F>¬E>VF>¸E>fFüFÿF! ~#fo#n}EEUD! ~#fo!C! ~#fo|F! ~#fo! ~#fo?!=`i^#Vr+s!9DM! ~#fo *u s! ~#fo *v s*s -=~=*= >ÓG!C!9DM! ~#fo!~CåCC!9DM! ~#fo!͢CCC!CCC!CCÖGÓGßC!9DM!F! - H######################################## . . . * . . . . ### . . . . * . . . ## % ### . ##### . ### . ##### . ##typ *mptr; char gcnt[10]; init(); /* global init */ for (pac_cnt = MAXPAC; pac_cnt > 0; pac_cnt--) { redraw: .CRL, to get sufficiently raw terminal i/o. * This means that there's little point in distributing a .COM file. * * To TOR BACK ON THE DISK. THIS WILL RESTORE THE FILE PROVIDED NONE OF THE SECTORS IN THE FILE WERE CHANGED AFTER THE FILE WAS "ERABTL, June, 1980. * * Adapted for BDS C by Jeff Martin Naperville, Il February 1982 * As distributed, this program is sP/M TO "DEATH" BY CHANGING A SINGLE BYTE. ONE OCCASIONAL VALUABLE USE IS TO RESTORE FILES THAT HAVE BEEN ACCIDENTALLY ERASED. E# % ## * . . * . * . * . . * . * . * . . * ## . ### . # . ########### . # . ### . ## . . . * # . . . ### . . . # * . . . ### clr(); SPLOT(0, 45, "SCORE: "); SPLOT(21, 45, "gold left = "); sprintf(gcnt, "%6d", goldcnt); SPLOT(21, 57, gcompile: * CC1 PACMAN.C * CC1 PACMONST.C * CC1 PACUTIL.C * * To link: * CLINK PACMAN PACMONST PACUTIL DEFFSED". AN ADDITIONAL FEATURE OF DUMP IS THE ABILITY TO VALIDATE A DISK. DUMP VALIDATE DUMP A:VALIDATE DUMP B:VALIDet up for the H19 terminal. * All that should be necessary to modify it for another terminal * type is to make the approprRASING A FILE USING THE ERA COMMAND DOES NOT ERASE THE DATA FROM THE DISK, BUT ONLY ENTERS AN E5 INTO THE FIRST BYTE OF THE DI/* * PACMAN - written by Dave Nixon, AGS Computers Inc., July, 1981. * * Terminal handling for video games taken from cnt); if (potion == TRUE) { SPLOT(3, 45, "COUNTDOWN: "); }; pacsymb = PACMAN; killflg = FALSE; spri CIO * or, * L2 PACMAN PACMONST PACUTIL -L DEFF CIO */ #include #include "pacdefs.h" main() { ATE THIS CAUSES THE ENTIRE DISK SELECTED TO BE READ ONE SECTOR AT A TIME. THE SECTOR NUMBER OF ANY SECTOR CAUSING A READ ERiate changes to the initPOS and POS * functions, located at the very end of PACUTIL.C. These functions * define the cursoRECTORY. TO RESTORE A FILE, DISPLAY THE DIRECTORY BY DISPLAYING GROUPS 0 AND 1. FIND THE SECTOR CONTAINING THE NAME OF THE FILaliens * the original version of aliens is from * Fall 1979 Cambridge Jude ntf(message, "delay = %6d", delay); SPLOT(22, 45, message); /* * PLOT maze */ for (tmp = 0; tmp < BRDY; tm register int tmp; /* temp variables */ register int pac_cnt; register int monstcnt; /* monster number */ struct pacROR WILL BE DISPLAYED. WHEN VALIDATING THE PROGRAM READS EVERY SECOND SECTOR FOR SPEED. AS WITH OTHER CP/M UTILITIES ^S "FRr-addressing sequence. * * Also, as with most keyboard game programs with BDS C, this program * must be linked with CIOE TO BE RESTORED AND DISPLAY IT USING THE EDIT FEATURE CHANGE THE BYTE PRECEEDING THE FILE NAME FROM E5 TO 00 AND WRITE THE SECMiller * * Score keeping modified and general terminal handling (termcap routines * from UCB's ex) added by Rob Coben, p++) { SPLOT(tmp, 0, &(display[tmp][0])); }; /* initialize a pacman */ pac.xpos = PSTARTX; pac.ypos = P EEZES" THE DISPLAY, AND ^C RETURNS TO THE MONITOR. DUMP CONTAINS MANY ERROR AND CONSISTANCY CHECKS. THE RESULTING MESSAGES SHO:+}" 2 2 " @Zâ-:+}" 2 ! G~2 p8 * @ZEDIT8 EDIT - $ !  s# ìALTERNATE SECTOR VALIDATE D. FOX 5/80 $ û *$ >2 1 2 !" !s#  >!\!s#  ?O*.!"> *.'"ĩ: 2 )2 : 2 >2 8 õ6# > w# q „ULD BE SELF EXPLANATORY.  >! Z#WRITE*! 6Z:STOP c!0T O)))) C @}v.q |€}#!A:1!)+B:8W2 =>2 Kx~# @!@@wx?Gr#_ 7!@RIVE A$~  Þ DRIVE B$  ý ERROR - TRACK $ : !o SECTOR $ !: o  >2  DJNZ.EI...@EXAF.@EXX..vHLT..IN...INR..INX..J....JMP..JMPR. JR...:LDA.. LDAX.*LHLD.LXI..@ z .ʙw# 7yʤ# Ÿ w# ¦!\iN e!COM!" : _\   \͝Ñ"r:͝m:>Mʝ#~:g<>-͝|/1͝|. U,L g>0͝|0͝!3>,Ý> Ý>;Ý.q "   è͚Ɛ'@'_: ͑: ͑  * ~͑  ! s#   > @}.Ð : ZÏVALIDATE!@ZçGROUP !@ZüG  !@ZMAPg !@ZDIR !@ZTRACK :+}" 2 ڍ 2 ? ;: <2 * &: oT))): _>H͝m>2Ð*~!=~͝#~.ĝ>'͝'͝Ý*~~>S͝>PÝPSW}* w  : <2 Î!" ̈́*.*"3  : 7U?UO*.!"S> : M?mO*."kf : _*.'"!@ZT f#~!#:F0 ?))) O /+}" 2 !@`ZfSECTOR~!@yZ{S Vð GROUP ALLOCATION MAP DRIVE -$  : A $   B $  *  $!9" 1 2 :):og,w!L CP/M DUMP UTILITY VERS 1.3A $, xCOPYRIGHT 1978 BY S. J. SINGER $W  >._#y £   w  * " * " >2 2 : _: M?O*."f : 7*~*~!M~M Ýo$C>0͝C~͝#3NZZ.NCC.POPEP.M.BCDEHLMA ..... ...............ACI..: -é DRIVE A -$ ü TRACK $ !: o  |{0__ SECT   ~+  0$  : <2 8 0 1$.  xS yS zS o  #    À $$#|$ÆAʗ$y)ó$!$DG.KJD#~.~˜$y)"87Random number seed (-32768- to 32767)$*" +2%%* !8$ҟ"T]DJ!h DG!* D±"`i" "N]~"N]D,͋ y):* :) Í% z8͸MEMORY HIccæìþîóøG1:g.-ͫ*"{͸RROR$t  ð ERROR - HEX INPUT ONLY $  Î  : _* $ $Y THAT NAM   #+6~ 6+w:6+:w+"O ~#Yr+s AOUT OF MEMORY$1:Ɓo&6!(͕}O:2O !\r  * ø GROUPS REMAINING ON DISK OUT OF 243 $    : : _2 <2 : 7 ? O*.!" : M? OPCopyright (C) 1979, Robert A. Van Valzah[RS]   PX2#,#OBK2#D,O2#D,Z zJ`iDJ^# J!DJ^{#Vq#~#+N#͔#^{#Vʏ Execution under FAST now complet{y2y2`i"Yy2O!ͭ"! ͭ"!ͭ"! ~#fo"K*&) s# NO FILE BY     ͕l͕!6C#6O#6M*DM:gw# x¥T^#{_zw# x}·ó~# !ͷ ͓Q!ͷ*." *." *.'" 3 INPUT ERROR$%   [ INCORRECT SECTOR NUMBER$A    INCORRECT TRACK NUMBEͣͳկ>   « ;ȷ#ó#~+:~@##~.#y  #* >?##s#r x# 2 *+#~##^#V2ʝ#O: y$#2©#2©#ez#$¦#e > ($DB!$DGT1L1r"******ͳ*|:Tw*****|:Tw: !  #T]~ʀ!#!~!ʚ!y_­!: >2 ![¹!2 !: >2 !> yG{!~#_yG!!2 !2E0:?+2&1a:O;͆͸Beginning execution under FAST 1.01 `:W!-ͫ3-ͫ*"!R$i   ü INCORRECT GROUP NUMBER (GREATER THAN 242)$   : NO FILE BY THAT NAME ON DRIVE A$   #  #~.,; :=<>ȷͳ[9!09*."#͊y2͜yuxud INVALID OPTION $͜y+æ#Undefined line ¦#e###N#F>!#* +p+q+w: Õ#DBDADSDE: * * D ~0  2 <2 2~^#V#T:ʦ͸DISK WRITE ERROR € ~#fo#~7##*ͩ7|:##:O~ȹ7 #6#*" ʩ6 ʬ6* c1: O *" H5">&{: F"!F"#~ ̽(~#x": L" i".s"Ds"EL"L"{ʁ""<>!ʛ͸OUT OF MEMORc͸NO COM FILcƐ'@'ON#  NO FILE BY THAT NAME ON DRIVE B$   C DISK DEAD ERROR$1  û f ERROR IN FILE NAME$Q   Å ADDRESS EuͷD:O~AO#ͷ# Y S W R+~ ]#+y   ! !9>!t>* ͩw7 :O:O:O*DM|͞##~O#6#DM w#42|~<"2##~O#~xg6͓/* monster starting position */ #define MSTARTY 10 /* monster starting position */ #define MBEGINX 18 /* monster beginning pe CNTLS '\23' #define BUF_SIZE 32 #define TRUE 1 #define FALSE 0 #define UPINT (-1) #define DOWNINT 1 #define LEFTINtruct pactyp *pacptr; /* * initbrd is used to re-initialize the display * array once a new game is started. */ #define MSSAVE 5 /* maximum scores saved per game type */ */ #define MGTYPE 4 /* Maximum game types */ #define MAXPAC 3 / '>' struct pactyp { int xpos; /* horizontal position */ int ypos; /* vertical position */ int dirn; /* direct#DM!w!~6*#NNw!# «N~#osition */ #define MBEGINY 7 /* monster beginning position */ #define TRYPOS 13 #define TRXPOS 20 #define GOTONE 1 #deT (-2) #define RIGHTINT 2 #define PACMAN '@' #define MONSTER 'M' #define RUNNER 'S' #define TREASURE '$' #define CHO char initbrd[BRDY][BRDX]; /* brd is kept for historical reasons. * It should only be used in the routine "which" * * maximum number of pacmen to start */ #define MAXMONSTER 4 /* max number of monsters */ #define EMPTY 'E' #define FULL 'Fion of travel */ int speed; /* FAST/SLOW */ int danger; /* TRUE if can eat */ int stat; /* status */ }; fine TURKEY (-1) #define DUP 1 #define DDOWN 4 #define DRIGHT 3 #define DLEFT 2 #define DNULL 0 #define BRDX 40 #dICE '*' #define GOLD '.' #define POTION '%' #define VACANT ' ' /* space */ #define WALL '#' #define GATE '-' #to determine the next move for a monster or * in the routine "monster" to determine if it * was a valid move. Admittedly t' #define LEFT 'h' #define RIGHT 'l' #define NORTH 'k' /* means UP, but UP defined in vsinit() */ #define NNORTH 'w' # int rscore[MAXMONSTER]; struct pactyp monst[MAXMONSTER]; int pacsymb, rounds, /* time keeping mechanism */ efine BRDY 23 #define XWRAP 38 #define TREASVAL 20 #define KILLSCORE 10 #define BEEP '\07' /* ctrl-g */ #define MSTARdefine START 0 #define RUN 1 #define FAST 1 #define SLOW 0 #define PSTARTX 18 #define PSTARTY 17 #define MSTARTX 16 his is redundant * and could be replaced by initbrd, but it is kept * so that someday additional intelligence or * optidefine DOWN 'j' #define NDOWN 'x' #define HALT ' ' #define DELETE '\177' #define ABORT '\34' #define QUIT 'q' #defin killflg, delay, potion, goldcnt, /* no. of gold pieces remaining */ potioncnt; struct pactyp pac; s#define GAME1 '1' #define GAME2 '2' #define GAME3 '3' #define GAME4 '4' /* #define MAXSCORE "/usr/games/lib/paclog" TINTVL 10 #define POTINTVL 25 #define GOLDCNT 185 #define PUP '^' #define PDOWN 'v' #define PLEFT '<' #define PRIGHT mization could be added to the choice of * the monster's next move. Hence, note the symbol * CHOICE at most points that a 0 79 --> FILE: TYPESQ .COM CRC = 2D 63 --> FILE: USQ .COM CRC = FE 42 --> FILE: SQ .COM CRC = 95 B0  that this little screamer buffers FAST.DOC the disk track by track for reads, writes, and directory accesses whover the hearts of the young ones but watch out, if you are a beginner, you should run this on a 2.5 MHz machine, at 4 MHz you0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,USR DISK #5 DOCUMENTATION David Thompson Micro Cornucopia 11740 NW West Portland, Oregon 97229 OK, for all you pacman lmove decision * logically HAS to be made. */ char brd[BRDY][BRDX]; /* * display reflects the screen on the playe--> FILE: WASH .COM CRC = 97 81 --> FILE: D .COM CRC = 6A D7 --> FILE: CRCK3 .LST CRC = 00 00 --> FILE: CAT .DOC CRC = B4 9A --> FILE: CATME .SUB CRC = EF C8 --> FILE: CRCK3 .COM CRC = C5 45 --> FILE: FMAP  have to be quick. (Best to keep this one hidden if you plan to continue using your system.) Another really interesting thin 0 }; */ char posnstr[10]; /* cursor positioning string, made extern for speed */  the routine "monster" to deteovers, here is it, complete with source. I received this game from two folks at the same time, one sent source, the other sentr's * terminal at any point in time. */ char display[BRDY][BRDX]; char message[81]; /* temporary message buff: 5-DISK .DOC CRC = 2E 2D --> FILE: NOLOCK .COM CRC = 2B A1 DONE .COM CRC = 4F 8F --> FILE: UCAT .COM CRC = 59 B8 --> FILE: -USRDISK.005 CRC = 00 00 --> FILE: DIF .COM g is that I received disks from two readers, both contained PACMAN, and both contained ZCPR (usr disk #4). And both were confirmine if it * was a valid mov documentation so I put the two together and here it is. It is easy to set up for your own direction commands so have at it aner */ int game, killcnt; unsigned pscore; /* struct uscore { unsigned score; /* same type as pscore */ lie also does a newsletter and though I haven't seen it, I understand there are a number of Big board users who subscribe. They CRC = 53 C7 --> FILE: DIF .DOC CRC = 84 6B --> FILE: SSED .COM CRC = 74 81 --> FILE: XDIR .COM CRC = 9gured for the Big Board. One of the folks is Gordon Banks MD, and you're going to be seeing more from Gordon as time goes oprobably PACMAN.C entering illegal commands or in lower case. PACMAN.DOC PACMONST.C PACUTIL.C FAST.COM - Gordon saysd enjoy. Perhaps at the next Micro C get together we can have a pacman competition. Of course this game will definitely win  int uid; /* uid of player */ }; struct scorebrd { struct uscore entry[MSSAVE]; } scoresave[MGTYPE] = {  have 15 disks of software written in and for pascal-z. -------------------------------------------------------------------- n. He really seems to be getting into the Big Board. The other is Gary Kaufman. Thankyou both. CAT.COM .DOC .SUB (Catalogin#DM!w!~6*#NNw!# «N~# " B`i+" : "P* DM* ͭ">2 : sS:2ÿR2 2 * DM* " * #* " DUP `i" * |*+ `iafter the last parens. Software sent in by Don Bell 8404 Gonzaga Ct Sacramento, CA 95826 Pascal-z user disks put toge28$`i"  NT]" DJ\O*+#~#N#^#V"2+N:;NXN2+;N2>N>2 ͨ9ʶNxGͽ;>2 „N~(ŠNg your disks) See Catalog.doc for all the information on this package. I got it via the pascal-z user group, which got it frr"******ͳ*|:Tw*****|:Tw: ! Q+2PPc1F*' #^#V °Pr+s+5GG+2P;PD,+2>,@ÍP>"@GG>"@óP*| Q~ Qʹ\}o|g Q>ther by Charlie Foster 7963 Center Parkway Sacramento CA 95823 Charlie also does a newsletter and though I haven't seen N~(Jͨ9z£NxG: WF:zJBK!N N 2 ~(ŠN ͪN+2>N(N2D)>ND,^N* * D2ON##~w#<om the CPMug. Oh well, I'm not proud. If I were proud I'd still pass along this super piece of software. It is a real lifesave^#V#T:ʦ͸DISK WRITE ERROR € ~#fo#~7##*ͩ7|:##:O~ȹ7 #6#* WHAT IS FAST AND HOW DOES IT WORK? What is FAST? It is a new transient program for the CP/M (*) dit, I understand there are a number of Big board users who subscribe. They have 15 disks of software written in and for pascal NO* " N* DOy_xW `i" * D\O##~w# !M* * * 2 2 ~§M2 #+2͚R!" +2'ND,,M"" +2'ND,MDADLDL\OD, 2  ut a hardware change can increase the rate at which your CPU executes instructions. But, most transients are "disk bound",OF ASSEMBLY Execution under FAST now complete A> Where N.NN is the version number of FAST that you are using. s. Then the transient ASM.COM is loaded and given control. The fact that FAST is in the system is totally transparennce, write buffering will offer no speed improvement when a transient only reads the disk. One thing that FAST must k in time to reduce the amount of time lost to rotational latency and head load delay. HOW TO USE  for buffering of multiple drives. Examples of typical option strings will be given below. Explicitly specifying the  that is, they spend a large percentage of their total execution time just waiting for the information they need from t FAST Users Manual 5/29/79 Page 2 Command line options COMMAND t to the transient, except for the reduced memory size. Messages will be printed just before and after the transient is enow is which disk drive is to be buffered. This is communicated to FAST simply by using the single letter name of the desiFAST The normal CP/M command to assemble a file with the name MUMBLE.ASM is: A>ASM MUMBLE To perform the sam buffering mode is desirable to reach the best trade-off between speed of execution and memory usage. In general, he disk. FAST uses this fact to increase execution speed by reducing the time spent waiting for the disks. This is accomLINE OPTIONS The buffering action of FAST may be altered with the use of command line options. This is accomplished by fxecuted to indicate that FAST is in control. After execution, you should see something like this on your terminal: Ared drive (e.g. "A" for disk drive A). As a convenience, the current default drive may be specified with the commercial ate function under FAST, simply type: A>FAST ASM MUMBLE Thus, in its simplest form, FAST can be used as a prefix to anas more buffering is used, execution speed will increase. However, more buffering means more memory usage. The typlished by using two different types of buffering. Firstly, portions of the disk which are frequently accessed (the ollowing the FAST command with an option string enclosed in square brackets ("[" and "]"). A valid option string must>FAST ASM MUMBLE Beginning execution under FAST N.NN CP/M ASSEMBLER - VER 1.4 1234 056H USE FACTOR END  sign ("@"). The second thing which FAST must know is which mode of buffering is to be used. FAST supports thry normal CP/M command. This will load FAST which will link itself to your operating system and allocate its disk bufferpe of buffering selected should be tailored to the disk usage patterns of the transient being executed. For insta directory) are held in a buffer, eliminating the need to seek to read them. Secondly, disk accesses are grouped together consist of a drive specification followed by one or more buffering mode specifications. This group may be repeated  ee different buffering modes. Each mode may be used individually or in combination with other modes to offer the fastest exs, and those which perform random disk I/O. In particular, ASM.COM, MAC.COM, PIP.COM, and ED.COM are examples of such t buffer the first time a drive is accessed. From then on, all reads from and writes to the directory can be carried our a time, instead of writing them immediately. Sectors for any given track are held in the buffer until CP/M tries to : B>FAST [ASWBSR] ASM MUMBLE.BAA In this example, the .ASM source file is on drive B so read and seek buffering havedisk. This mode of buffering is most beneficial to transients which read disk files sequentially. As a matter of fecution. The three modes available are: Seek buffering Read buffering Write buffering ransients. Read buffering causes an entire track from the disk to be read into a buffer the first time any sector ist without moving the disk head from its current position. Thus, transients which access the directory frequently will be spewrite to a track that is not buffered. When it is time to change tracks, only those sectors which were changed are been specified for that drive. The A drive, on the other hand, is to receive the result of the assembly (the .HEX and .PRact, it may slow down transients which read files in a random access mode. Fortunatlly, the vast majority of CP/M transien Yes (all of the above) The type of buffering desired is communicated to FAST by a single letter in the option string.  read from that track. This increases execution speed because CP/M typically reads most of one track before going on d up considerably by seek buffering. Transients which fall into this category are those which deal with many different  actually written before clearing the buffers to make room for the new data. This improves execution speed for the sN files), so it gets write and seek buffering. FAST Users Manual 5/29/79 Page 3 Commants read the disk sequentially. Examples of such transients are ASM.COM, MAC.COM, PIP.COM, and BASIC-E.COM (if the BASIThe letter is simply the first letter of the word which describes the type of buffering (capitalized above). The to the next one. Additionally, the time required to read a whole track is a fairly small percentage increase over the ti files simultaneously, perform operations with temporary files and rename them, read or write large (more than 16K) fileame reasons that read buffering does, i.e. a whole track can be written in about the time it takes to write a single d line options BUFFERING MODE DESCRIPTIONS Seek buffering causes the disk directory to be read into aC program doesn't do random I/O!!). With write buffering, sectors that are to be written to disk are held in a buffer fo operation and application of each mode will be discussed below. Thus, a typical FAST command line might look like thisme required to read a single sector. The net effect is that less time is spent waiting for the rotational latency of the  sector. Transients which benifit from this type of buffering typically write to disk sequentially. Examples include ASM.COMode is omitted from an option string. If a drive name is not given, the default drive for CP/M is used (this is equivhas not stated them explicitly. Thus, versatility has been retained by allowing the user the ability to specify optisystem, a good choice would be [@R]. FAST Users Manual 5/29/79 Page 5 How toe 4 Default philosophy applications. This usually means a program with many user selectable options. Forcing the user option string to specify the buffering used. This string is [@RS], giving the user read and seek buffering on the default dr, MAC.COM, and ED.COM. DEFAULT PHILOSOPHY Two of the qualities generally associated with alent to "@"). If no buffering mode is specified, read and seek buffering are used. Thus, the following two commands ons explicitly, while the default mechanism frees the user from this tedium much of the time. In short, defaults allow  change the default option string HOW TO CHANGE THE DEFAULT OPTION STRING The default string is stored in  to type the same frequently used options every time a program is invoked or committing him to remember a long listive when no option string is present on the command line. The user may, at his option, alter the default option to one a good program are versatility and ease of use. FAST has been written with these two qualities in mind as the primwould be equivalent. B>FAST [BRW] LOAD MUMBLE B>FAST [RW] LOAD MUMBLE And so would the following two commands.  versatility and ease of use to peacefully co-exist in the same program. DEFAULT MECHANISMS IN FAST  FAST at address 0130H. Thus, to change the option string, use SID or DDT to change the existing string. Assuming you ha of options is contradictory to the goal of ease of use. This conflict is resolved by the use of default mechanisms withi which is more suitable for his typical uses. For instance, if you typically use FAST for assembling and don't have to worary design goals. Many times, however, these two goals can be contradictory. A versatile program is one which is capable  A>FAST [BRS] PIP B:THIS=B:THAT A>FAST [B] PIP B:THIS=B:THAT The second default mechanism comes into play whe There are two levels of defaults built into FAST. The first default mechanism is used when either the drive or buffering mve SID this is very easy: A>SID FAST.COM SID VERS 1.4 NEXT PC END 0900 0100 94FF #S130 0130n FAST. A default mechanism is simply a rule that can be used to make assumptions about the user's wishes when he ry about running out of memory, a good default string would be [@RWS]. Conversely, if you are running in a small memory  of a wide variety of tasks or one that fits many different FAST Users Manual 5/29/79 Pagn no option string is given on the command line. Instead of executing the transient with no buffering, FAST uses a default  5B "[@RWS] 0136 20 . #^C A>SAVE 8 FASTX.COM If you do not have SID, you'll have to use DDT and figure outMPATIBILITY FAST is fully compatible with the following transients and can be expected to provide a significant redescription is Microsoft's MBASIC.COM. MBASIC uses this BDOS function only when the RESET command is used. FAST is comptunate memory dependency, STAT (version 1.4) does not correctly report the number of bytes remaining on the disk when it i change detection mechanism built into CP/M version 1.4. This means that you can't expect the operating system to give the w would not be able to detect. If the user is able to guard against this occurrence, he may use FAST with these transients a the hex for the ASCII string you wish to patch in. Then use the Substitute command to patch the file as above. In either duction in execution time. ASM LOAD SUBMIT DUMP MAC TEX COMPARE MODEM FILatible with MBASIC as long as the RESET command is not used. A good rule to remember is never to use FAST with any s executed under FAST. This is no great loss because FAST can do little to speed up the execution of STAT. arning message BDOS ERROR ON A: R/O if you forget and change disks without booting. This also gives rise to a minor innd expect a significant reduction in execution time. ED PIP DDT SID MBASIC XYBAScase, test the patched file before killing the old FAST.COM and renaming the new file to FAST.COM. ES PRINT COMBINE UNLOAD FROMISIS TOISIS ICOPY IDIR FAST is fully compatible with the foll transient which requires user input. Any such transient, by waiting for your reply, would leave you with the opportunity to  FAST MESSAGES During the course of execution, FAST may print any of several different messages. Eachcompatibility with any transients which use the BDOS reset function (BDOS call 13). This function is used in transients whicIC BASIC-E RUN WORDMASTER FAST is fully compatible with the following transients, but due to the way in which they WARNINGS N-E-V-E-R CHANGE DISKS WHILE EXECUTING UNDER FAST!!! Wait until you see the message "Execution under owing transients, but due to fact that they require user input, some caution should be exercised when they are usedchange disks. FAST Users Manual 5/29/79 Page 6 Warnings CO of these messages is listed below along with conditions under which it is printed. Beginning execution under Fh allow the user to change disks without rebooting. The only transient which we are currently aware of which fits this  access the disk, no speed improvement can be expected. SYSGEN MOVCPM FAST Due to an unforFAST now complete" before switching disks. A rather nasty side effect of seek buffering is that it disables the disk with FAST. As mentioned above, stopping for input gives the user the chance to inadvertently change disks which CP/M AST N.NN This message is printed after the transient to be executed under fast has been successfully loaded, of the message, then execution continues normally. This usually indicates a serious error (like a protected dn either case, no recovery action can be taken, so the execution complete message is printed and FAST re-boots. T persistent and you have a ROM monitor in your system, you can use FAST to help find the memory at fault. Cres simply an informatory message printed under normal conditons. NO COM FILE This message is printed when th ([Q]), or options which specify buffering of the same type for the same drive twice ([ABA]). MEMORY HIT  but just before control is transfered to it. This is simply an informatory message and does not signal anisk) and the user should boot and take corrective measures as soon as possible. INVALID OPTION This message is here are several solutions to the out of memory problem: use less buffering, use smaller transients, or, of coate a special FAST.COM with a jump to your monitor patched into location 521H. This location is called when ae transient filename given on the command line cannot be found in the directory. No recovery action can b This message is printed whenever FAST attempts to write to a memory location and cannot read the data it has ju error condition. In this message, N.NN is the version number of FAST which you are using. FAST Uprinted whenever an error is detected in the option string being scaned by FAST. This may be the option string supurse, buy more memory. DISK WRITE ERROR This message is printed when FAST attempts to write data to disk and  memory hit is detected. The HL register contains the address of the bad byte and a bit in the A register is se taken, so the execution complete message is printed and FAST re-boots. OUT OF MEMORY This messst written. The recovery action taken is to print the message and ignore the error. It is usually an indicasers Manual 5/29/79 Page 7 FAST messages Execution under FAST now complete This message isplied on the command line or the default option string in memory in the unlikely event that it has been incorregets the unsuccessful completion flag back from the BIOS. The only recovery action taken is simply the printing et for each bad bit in memory. FAST Users Manual 5/29/79 Page 8 FAST messages age is printed when the size of the TPA is exceeded while allocating buffers or while loading the transient. Itor of hardware problems in your system and should be looked into immediately. If MEMORY HIT errors are printed after the transient has finished execution and all disk buffers have been emptied. This too ictly modified. Some examples of invalid options are the null option ([]), options containing invalid characters   MEMORY ALLOCATON When FAST is loaded, it automatically relocates itself to the top of the TPA (just ed) ---------------- save .asm, .ctl, .sym, or .doc file - sfilename.asm use 'l' command to write, z to end sfilename.CTLl 8 inch IBM compatible version of CP/M, all these computations can be replaced by a simple estimating rule: A(300) because you might want to put a "E" (end of assembly) control entry there. <<<>>> that all 'L' (disassemblylas used to determine the amount of memory used are: buffers = NTB * (3 + 131 * SPT) + NSB * (3 + 131 * SID) SID = NDE ------------------------- Here is a sample of the REZ usage. Given: a COM file (lets say test.com) which runs at 100 (as alike DDT and SID). This action overlays the CCP. A side effect of this is that transients which normally return to the C saves the CTL table stablename.sym saves the sym file sfilename.doc saves the comments table ---------------- use area llow 768 bytes for FAST code overhead, 3409 bytes for each track buffer (R or W), and 2099 bytes for each seek buffe list) and 'D' (dump) commands work with the offset added. Thus, you should learn to forget that the disassembler is in m/ 4 mem used = 768 + [buffers] Where: NTB is the Number of Track Buffers allocated SPT is the number of Sectors ny good COM file should), and goes thru 2FF. lines preceeded with ---> are typed by you. ---> REZ ---> o2600 set the offsCP without booting will boot when executed under FAST. An example of such a transient command is LOAD. As mentioned of memory for comments table - unnnn such as ud000 if you had an open board at 0d000h ---------------- purge sym tbl ar (S). As an example, FAST executed without a command line option string will use 768 + 3409 + 2099 bytes. If this suemory, and think of it as if your program were actually at 100. D100 will dump your program. also note: if the program Per Track NSB is the Number of Sector Buffers allocated SID is the number of Sectors In the Directory NDE is t>2K2LF2G2H2I2J2K2L2S2TESEARCH DDT VERS 2.2$10 :X=X>=2*":2!~=W!xʃ ~#earlier, the only way a transient can tell that it is being executed under FAST is that the size of the TPA is decreased. Thnd CTL tbl x - ---------------- close .asm file (note that a preferred way to close the .asm file is to have specifiedm is rounded up to the next multiple of 256, the actual memory usage figure becomes 6400 bytes. being "REZd" will have a fairly large symbol table, then you will have to set the offset higher: o3300 or some such. (the he maximum Number of Directory Entries [ ] indicate rounding up the next highest multiple of 256 For a normavbxʥ {˜~#o}oҡÇ.!p+q*DM͞:̓ ̓:}2:~!!:*& N̓!8!6:Je amount of memory taken out of the TPA by FAST is dependant on the number of buffers which are allocated. The formu a control entry for the end address (e.g. c1ff,e)) z - -------------------------------------------- -------------------! ? command will show symbol table usage: if your symbol table is nearing the .com file, then just set a new offset (higher) aurpose is to expand wild card names, especially *.?Q?. The overall effect is to be able to issue a single command which willgured for the Big Board. One of the folks is Gordon Banks MD, and you're going to be seeing more from Gordon as time goes o You will find much more documentation in the DOC files and, especially, in the front of the source (.C) files. In general, d enjoy. Perhaps at the next Micro C get together we can have a pacman competition. Of course this game will definitely win TQT |usq The above example simulates a "pipe" indicated by the "|" by sending the "console" output of the fls.com program tnd re-load the .com) if you want to dump r-e-a-l memory, you would have to reset the offset to 0: o0 (but don't forget to produce many squeezed or unsqueezed files from and to various diskettes. Squeezed files can be transmitted faster over dataThis diskette contains many source files which together form three executable programs: SQ.COM Squeezes files and creates a these programs accept simple parameters either on the command line or from the console (interactive mode). Using the redirectiover the hearts of the young ones but watch out, if you are a beginner, you should run this on a 2.5 MHz machine, at 4 MHz youo a temporary file and then running the sq.com progam with options which cause it to read its parameters from its "console" inUSR DISK #5 DOCUMENTATION David Thompson Micro Cornucopia 11740 NW West Portland, Oregon 97229 OK, for all you pacman l links and cassette tapes and more of them can be crammed onto a diskette. The latter is especially inportant in the case of new one with similar name but with a Q in the second letter of the file type. USQ.COM Unsqueezes files created by SQ, creaton or piping of the console input and output streams built into these programs provides most of the flexibility.  have to be quick. (Best to keep this one hidden if you plan to continue using your system.) Another really interesting thinput, which is really redirected to come from the temporary file. This DOES run under plain old vanilla CP/M! Many of the smaovers, here is it, complete with source. I received this game from two folks at the same time, one sent source, the other senta distribution diskette for a large program product. Example: Unsqueeze all squeezed ASM files on drive B and send the resuing an exact replica of the original under the original name. FLS.COM Produces parameter lists for SQ and USQ. Its main pcontrol entries with cnnnn,b and cnnnn,i put in a control entry cnnnn,e which defines the address of the end of your program. g is that I received disks from two readers, both contained PACMAN, and both contained ZCPR (usr disk #4). And both were confirts are burried in the COM files in the form of library routines provided with the BDS C package (available from Lifeboat).  documentation so I put the two together and here it is. It is easy to set up for your own direction commands so have at it anlts to drive C: Also unsqueeze all squeezed TXT files on drive A: and send the results to drive D: A>fls c: b:*.AQM d: *."  DATA BACK INC C ;INCREMENT SECTOR COUNT DJNZ NXTRD ;CONTINUE TO READ UNTIL ALL ;26 SECTORS ARE READ ; PRINT A ROL C JP Z,END2 ;EXIT PROGRAM IF ^C JR RD ;WAIT FOR CORRECT RESPONSE ; SEEK: CALL READY ;CLEAR CONTROLLER RET *************** ;****************************************************************************** ;*****************************2.1' DEFB CR DEFB LF DEFB LF DEFM 'DISK TO FORMAT IS IN DRIVE' DEFM 'A,B,C OR D? >' DEFB '$' ; SELLECT ERROR MESSG DISKS END1: POP AF ;GET NMI VECTOR BYTE BACK LD (66H),A ;RESTORE MNI EI ;ENABLE INTERUPTS LD DE,NXTFMT ;POINT THE # RET ;****************************************************************************** ;****************************"V" IF ALL IS WELL FOR THIS TRACK LD A,'V' CALL OVECTR ;USE PFM TO PRINT CHARACTER JR AROUND ;SKIP AROUND ERROR MESSNZ ;EXIT IF DRIVE NOT READY LD A,C ;GET TRACK # FROM C CP 77 ;SEE IF MAXED OUT RET NC ;RETURN IF MAXED LD (TRACK************************************************* ; ROUTINE TO DISPLAY SELLECT ERROR MESSAGE SELERR: LD DE,SLTERR ;POINT AGE SLTERR: DEFB CR DEFB LF DEFM 'WRONG, try again ' DEFB '$' ; STATUS MESSAGE (BEGINNING) STATSB: DEFB CR  TO NEXT FORMAT MESSAGE LD C,BPSTRG ;FDOS PRINT STRING COMMAND CALL BDOS ;PRINT STRING JP RD ;TEST USER RESPONSE ;************************************************** ;************** MESSAGES *************** ;************AGE ; PRINT A "N" IF THERE WAS A TRACK OR SECTOR READ ERROR PNTERR: LD A,'N' CALL OVECTR ;USE PFM TO PRINT CHARACTER ),A ;STORE TRACK FOR SEEK OUT (DATREG),A ;OUTPUT TRACK TO 1771 LD B,SKCMD ;LOAD B WITH SEEK COMMAND CALL STEP ;GO SETO ERROR MESSAGE LD C,BPSTRG CALL BDOS ;PRINT STRING JP SELAGN ;TRY AGAIN ; ROUTINE TO READ USER FORMAT RESPONSES DEFB LF DEFB LF DEFM 'Disk to format is in drive ' DEFB '$' ; STATUS MESSAGE (ENDING) STATSE: DEFB ':' DEFB CR  RETURN TO CP/M IF DONE END2: JP WBOOT ;****************************************************************************** ****************************************************************** ;*********************************************************** ; INCREMENT TRACK COUNTER AND TEST IF DONE AROUND: INC E ;INCREMENT TRACK # LD A,E ;GET TRACK # CP 77 ;SEE IF WE EK AND 10010000B ;MASK FOR READY, SEEK ERRORS RET Z JP STEP ;TRY AGAIN ; ; PNTRK: LD HL,TRKPNT ;POINT TO BASE OF  RD: CALL CONIN ;READ CHARACTER CP 0DH ;LOOK FOR CARRIAGE RETURN JP Z,FORMAT ;FORMAT IF CR CP 03H ;LOOK FOR CONT DEFB LF DEFB LF DEFM 'Type to format (^C to Quit) >' DEFB '$' ; NEXT FORMAT MESSAGE NXTFMT: DEFB CR DEFB ;****************************************************************************** ;************* SPECIAL ROUTINES ******************* ; SIGNON MESSAGE SIGNON: DEFB CR DEFB LF DEFB LF DEFM 'Bigboard Disk Formatter version HAVE DONE 77 TRACKS JR NZ,AGAIN ;KEEP ON VERIFYING IF NOT DONE ; SET UP BIGBOARD FOR A RETURN TO CP/M IF THROUGH FORMATTINTRACK # ADD A,L ;ADD OFFSET LD L,A ;SET HL TO POINT TO CORRECT TRACK # LD A,(HL) ;GET TRACK # CALL OVECTR ;PRINT# LF DEFB LF DEFM 'FUNCTION COMPLETE!' DEFB CR DEFB LF DEFM 'LOAD NEXT DISKETTE, THEN TYPE ' DEFM 'TO FORMAT (^C B 0F7H ; 11 BYTES OF FF DEFB -1 DEFW -1 DEFW -1 DEFW -1 DEFW -1 DEFW -1 ; 6 BYTES OF 0'S DEFW 0 DEFW 0FW -1 DEFW -1 DEFW -1 DEFW -1 DEFW -1 DEFW -1 ; 6 BYTES OF 0'S DEFW 0 DEFW 0 DEFW 0 ; WRITE INDEX MARK C :100100001138020E09CD05000E01CD0500F5FE41A6 :10011000DAFC01FE45D2FC01E6073D4FCD1BF0C2E3 :10012000FC01119A020E09CD0500F15F0E0*********************************** ;****************************************************************************** ;*********RACK'S ; DATA WILL BE FILLED WITH FF'S. THIS FILLS THE AREA ; BETWEEN THE LAST SECTOR AND THE NEXT INDEX. THE WD- ; 1771 EXTO QUIT) >' DEFB '$' ; TRACK HEADER DISPLAY HEADER: DEFB CR DEFB LF DEFB LF DEFM '0 1 2  DEFW 0 ; WRITE DATA ADRESS COMMAND DEFB 0FBH ; 128 BYTE DATA AREA (TO BE FILLED WITH E5) DATA: DEFS 128 ; WOMMAND DEFB 0FCH ; 26 BYTES OF FF DEFW -1 DEFW -1 DEFW -1 DEFW -1 DEFW -1 DEFW -1 DEFW -1 DEFW -1 DEF2CD050A :100130000011B9020E09CD0500C30702112E030EEE :1001400009CD050021320411330436E5017F00EDAD :10015000B021140411CE04012A12***** TRACK DATA *************** ;****************************************************************************** ;*****ITS THE 'WRITE TRACK' MODE ON RECEIPT OF THE ; INDEX SIGNAL. SECT2: ;STARTING POINT FOR REMAIDER OF ;SECTORS 3' DEFM ' 4 5 6' DEFM ' 7' DEFB CR DEFB LF DEFB '$' ; TRACK #'S TRKPNT: DEFM 'RITE CRC COMMAND DEFB 0F7H ; 27 BYTES OF FF DEFB -1 DEFW -1 DEFW -1 DEFW -1 DEFW -1 DEFW -1 DEFW -1 DEFW -1 DEFW -1 DEFW -1 DEFW -1 DEFW -1 ; SECTOR DATA STARTS HERE SECT1: DEFW 0 DEFW 0 DEFW 0 ; WRITE ID ADDEDB0211D0411A6 :10016000BA0001011A710C1910FB21F8163EFF06A6 :1001700000772310FC3A6600F53EC9326600F30EA4 :1001800000061AC5CD160************************************************************************* ; 40 BYTES FF AS LEADER LEADER: DEFW -1 DEFW END 0123456789012345678901234567890' DEFM '123456789012345678901234567890' DEFM '1234567890123456' ; CARRIAGE RETURN-LINE FEEW -1 DEFW -1 DEFW -1 DEFW -1 DEFW -1 DEFW -1 DEFW -1 ;END OF ONE SECTOR'S DATA ; UPON EXECUTION, THE PRECEDRESS MARK COMMAND DEFB 0FEH ; TRACK # TRKNO: DEFW 0 ; SECTOR # SECTNO: DEFW 0 ; WRITE CRC COMMAND DEF2C1C5211B0411BA0071A3 :100190001910FC21CB03161406240E133EF4D310C1 :1001A00076EDA320FB1520F8C179CD2E020C79FE47 :1001B0004D20CE -1 DEFW -1 DEFW -1 DEFW -1 DEFW -1 DEFW -1 DEFW -1 DEFW -1 DEFW -1 DEFW -1 DEFW -1 DEFW -1 DEFW -1 DEn K.symbol Kill symbol from symbol table L Lists 23 lines from prev pc Lssss,eeee Lists from ssss to eeee L,eeee ListsD TO PLACE VERIFY STATUS UNDER TRACK # CRLF: DEFB CR DEFB LF DEFB '$' ;*******************************************ING SECTOR'S DATA WILL BE ; DUPLICATED 25 TIMES TO GIVE A FULL 26 SECTORS WORTH ; OF DATA. THE 256 BYTES FOLLOWING THE FULL T$ 11C8030E09CD05001E0001011A05 :1001C000C54BCD21F0C2DE01C1C5218000CD24F098 :1001D000C2DE01C10C10F23E56CD0CF018053E4EA9 :1001E00FFFFFFFFFFFFFFFFFFFFFFFFFFFFC :10041000FFFFFFFF000000000000FE00000000F7EB :10042000FFFFFFFFFFFFFFFFFFFFFF0000000000D7 :0204308 :100350002020202020202020203420202020202089 :100360002020203520202020202020202036202062 :1003700020202020202020370D0A243031PACMAN (PACMAN.COM) can be easily patched to any terminal that has the following characteristics: 1. A CLEAR SCREEN comman20240D0A0A446973CE :1002A0006B20746F20666F726D61742069732069B2 :1002B0006E20647269766520243A0D0A0A547970BA :1002C00065203C7260CD0CF01C7BFE4D20D4F1326600FB11DEFD :1001F000020E09CD0500C30702C300001186020EDE :1002000009CD0500C30801CD09F0FE0DCA3C01FE71 :0000FBCF :1004B200F7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF52 :0C04C200FFFFFFFFFFFFFFFFFFFFFFFF3A :00000001FF D504C45BE :1002F0005432333431 :10038000353637383930313233343536373839301D :10039000313233343536373839303132333435361B :1003A0003738393031323334353d of 2 characters of less 2. A CURSOR ADDRESSING command that is of the form: with offs5743E20746F20666F726D61AC :1002D0007420285E4320746F2051756974240D0AC0 :1002E0000A46554E4354494F4E20434F4D504C45BE :1002F000541002100003CAF90118F1CDABF7C079FE4DD0326DAC :10022000FFD313061CCD93F7E690C8C393F7217B49 :1002300003856F7ECD0CF0C90D0A0A42696762e are useful and find their way onto future user disks. I have enclosed a double sided disk for USER DISKS 2 & 3. If these 2 637383930313205 :1003B00033343536373839303132333435363738EF :1003C00039303132333435360D0A24FFFFFFFFFF59 :1003D000FFFFFFFFFFFFet = 32 3. A CURSOR ON and CURSOR OFF command that is of the form: (This is not necessary ho45210D0A4C4F4144204E45585420444A :1003000049534B455454452C205448454E2054598C :100310005045203C52544F20464F524D41542028C6 :100 (* The file PACMAN.COM has been patched for the BIG BOARD Video, using E = up / X = down / S = left / D = right 6FB3 :10024000617264204469736B20466F726D617474CF :1002500065722020202020207665720D0A0A44490C :10026000534B20544F20464F524D415 sides are of no use let me know and I'll forward the copying "fee". Thanks Again, Gary Kaufman 206 S. 13th SFFFFFFFFFFFFFFFFFFFF2D :1003E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D :1003F000FFFFFF000000000000FCFFFFFFFFFFFF0A :10040000FFFFFwever) The points to patch for CLEAR SCREEN are: Address: 2FDAH ====> First character (Currently 1AH) 2FDBH320005E4320544F205155495429203E240D0A44 :100330000A302020202020202020203120202020B2 :10034000202020202032202020202020202020338 ......Patched for Big Board by Gary Kaufman (215) 735-2841 *) The compiled version of 42049532068 :10027000494E204452495645412C422C43204F526E :1002800020443F203E240D0A57524F4E472C2074E5 :10029000727920616761696Etreet Apt 810 Philadelphia, PA 19107 (215) 735-2841 Also feel free to keep this disk for your collection. %  ====> Second character (Currently 00H) The points to patch for CURSOR ADDRESSING are: Address: 37F3H ====> First charac mptr->xpos = MSTARTX + (2 * monstcnt); mptr->ypos = MSTARTY; mptr->speed = SLOW; mptr->dirn = DNULL; mptrd = SLOW; pacptr->danger = FALSE; for (monstcnt = 0; monstcnt < MAXMONSTER; monstcnt++) { monst[mon direction keys are located: Address: 347BH ====> Move LEFT (Currently "S") 34ABH ====> Move DOWN ( pacman(); if (killflg == TURKEY) break; }; for (monstcnt = (MAXMONSTER / 2); monstcnt < MAXMONSTER; monster (Currently ESC) 37FCH ====> Second character (Currently "=") The points to patch for CURSOR ON are: Address: 3->danger = FALSE; mptr->stat = START; PLOT(mptr->ypos, mptr->xpos, MONSTER); }; rounds = 0; /* timing mechanisSTARTY; pac.dirn = DNULL; pac.speed = SLOW; pac.danger = FALSE; PLOT(pacptr->ypos, pacptr->xpos, pacsymb); /stcnt].danger = TRUE; }; }; }; update(); /* score display etc */ if (goldcnt <= 0) { reinCurrently "X") 3493H ====> Move UP (Currently "E") 3487H ====> Move RIGHT (Currently "D")tcnt++) { monster(monstcnt); /* next monster */ }; if (killflg == TURKEY) break; if (potion == TD9EH ====> First character (Currently 00H) 3D9FH ====> Second character (Currently 00H) 3DA0H ====> Thim */ /* main game loop */ do { if (rounds++ % MSTARTINTVL == 0) { startmonst(); }; pacm* display remaining pacmen */ for (tmp = 0; tmp < pac_cnt - 1; tmp++) { PLOT(23, (MAXPAC * tmp), PACMAN); }; it(); goto redraw; }; } while (killflg != TURKEY); SPLOT(5, 45, "YOU ARE BEING EATEN"); SPLOT(6, 45, "THI The QUIT character ("Q") is located at address 34E7H. This version is set-up to work with a BIG BOARD. RUE) { sprintf(message, "%2d%c", potioncnt, ((potioncnt == 10) ? BEEP : ' ')); SPLOT(3, 60, message); rd character (Currently 00H) The points to patch for CURSOR OFF are: Address: 27DCH ====> First character (Currentlyan(); if (killflg == TURKEY) break; for (monstcnt = 0; monstcnt < (MAXMONSTER / 2); monstcnt++) { mon /* * Init. monsters */ for (mptr = &monst[0], monstcnt = 0; monstcnt < MAXMONSTER; mptr++, monstcnt++) { S TAKES ABOUT 2 SECONDS"); sleep(20); }; SPLOT(8, 45, "THE MONSTERS ALWAYS TRIUMPH"); SPLOT(9, 45, "IN THE END!");  if (--potioncnt <= 0) { SPLOT(3, 45, "   "); potion = FALSE; pacptr->spee 00H) 27DDH ====> Second character (Currently 00H) 27DEH ====> Third character (Currently 00H) Thester(monstcnt); /* next monster */ }; if (killflg == TURKEY) break; if (pacptr->speed == FAST) { &  over(); } pacman() { register int sqtype; register int mcnt; register int tmpx, tmpy; int deltat; str where the pacman went */ PLOT(tmpy, tmpx, VACANT); pacptr->xpos += LEFTINT; break; default: pacptr went */ PLOT(tmpy, tmpx, VACANT); pacptr->ypos += DOWNINT; break; default: pacptr->dirn = DNULL;  for (mcnt = 0; mcnt < MAXMONSTER; mcnt++) { if (mptr->stat == RUN) { mptr->speed = SLOW; mptr->dangery[tmpy + UPINT][tmpx]) { case GOLD: case VACANT: case CHOICE: case POTION: case TREASURE: /* era default: pacptr->dirn = DNULL; break; }; break; }; /* did the pacman get any points or eat a potion?uct pactyp *mptr; /* pause; wait for the player to hit a key */ for (deltat = delay; deltat > 0; deltat--); /* ge->dirn = DNULL; break; }; break; case DRIGHT: if(tmpx == XWRAP) { /* erase where the pacman went */ break; }; break; case DLEFT: if(tmpx == 0) { /* erase where the pacman went */ PLOT(tmpy, tmpx, V = FALSE; }; mptr++; }; break; }; /* did the pacman run into a monster? */ for (mptr = &monst[0], se where the pacman went */ PLOT(tmpy, tmpx, VACANT); pacptr->ypos += UPINT; break; default: pacptr-> */ switch (sqtype) { case CHOICE: case GOLD: pscore++; goldcnt--; break; case TREASURE: pscort instructions from player, but don't wait */ poll(0); /* remember current pacman position */ tmpx = pacptr->xpos;  PLOT(tmpy, tmpx, VACANT); pacptr->xpos = 0; sqtype = VACANT; break; }; pacsymb = PRIGHT; switchACANT); pacptr->xpos = XWRAP; sqtype = VACANT; break; }; pacsymb = PLEFT; switch (sqtype = display[tmmcnt = 0; mcnt < MAXMONSTER; mptr++, mcnt++) { if ((mptr->xpos == pacptr->xpos) && (mptr->ypos == pacptr->ypos)) dirn = DNULL; break; }; break; case DDOWN: pacsymb = PDOWN; switch (sqtype = display[tmpy + DOWNINT][tmpe += TREASVAL; break; case POTION: SPLOT(3, 45, "COUNTDOWN: "); potion = TRUE; potioncnt = POTINTVL; p tmpy = pacptr->ypos; /* "eat" any gold */ /* update display array to reflect what is on terminal */ display[tmpy][ (sqtype = display[tmpy][tmpx + RIGHTINT]) { case GOLD: case VACANT: case CHOICE: case POTION: case TREApy][tmpx + LEFTINT]) { case GOLD: case VACANT: case CHOICE: case POTION: case TREASURE: /* erase { killflg = dokill(mcnt); } else { killflg = FALSE; }; }; if (killflg != TURKEY) { PLx]) { case GOLD: case VACANT: case CHOICE: case POTION: case TREASURE: /* erase where the pacmanacptr->speed = FAST; pacptr->danger = TRUE; /* slow down monsters and make them harmless */ mptr = &monst[0]; tmpx] = VACANT; /* what next? */ switch (pacptr->dirn) { case DUP: pacsymb = PUP; switch (sqtype = displaSURE: /* erase where the pacman went */ PLOT(tmpy, tmpx, VACANT); pacptr->xpos += RIGHTINT; break; ' OT(pacptr->ypos, pacptr->xpos, pacsymb); }; } efault:  }; display[TRYPOS][TRXPOS] = TREASURE; PLOT(TRYPOS, TRXPOS, TREASURE); killcnt = 0; }; SPLOT(5, 45,ocx]; brd[locy][locx] = tmp; if ((display[locy][locx] = tmp) == CHOICE) { display[locy][locx] = GOLD; urself %d times. Killing all the monsters\r\n", MAXPAC); printf("results in further treasure appearing magically somewhere inclr(); POS(0, 0); printf("Attention: you are in a dungeon, being chased by monsters!\r\n\n"); printf("There are gold co "MONSTERS KILLED: "); sprintf(message, "%1d", killcnt); SPLOT(5, 62, message); mptr = (&monst[mnum]); mptr->ypo}; }; }; goldcnt = GOLDCNT; delay -= (delay / 10); /* hot it up */ } errgen(string) char *string; { S the dungeon,\r\n"); printf("marked by \"$\". There is a magic tunnel connecting the center left and\r\n"); printf("center#include #include "pacdefs.h" update() { char str[10]; sprintf(str, "%6d", pscore); SPLOT(0, 5ins scattered uniformly in the dungeon, marked by \"+\".\r\n"); printf("One magic potion is available at each spot marked \"%s = MSTARTY; mptr->xpos = MSTARTX + (2 * mnum); mptr->stat = START; PLOT(mptr->ypos, mptr->xpos, MONSTER); pscorPLOT(23,45,string); } dokill(mnum) int mnum; { register struct pactyp *mptr; PLOT(0, 0, BEEP); if (pacpt right parts of the dungeon. The monsters know about it!\r\n\n"); printf(" Type: h to move left\r\n"); prin2, str); sprintf(str, "%6d", goldcnt); SPLOT(21, 57, str); } reinit() { register int locx, locy; register c\". Each potion will\r\n"); printf("enable you to kill monsters by touch for a limited duration. It will also\r\n"); printe += KILLSCORE; return(GOTONE); }; return(TURKEY); } /* * clr -- issues an escape sequence to clear the dispr->danger == TRUE) { if (++killcnt == MAXMONSTER) { if (display[TRYPOS][TRXPOS] == GOLD) { goldcnt--;tf(" l to move right\r\n"); printf(" k or w to move up\r\n"); printf(" har tmp; for (locy = 0; locy < BRDY; locy++) { for (locx = 0; locx < BRDX; locx++) { tmp = initbrd[locy][lf("scare them away. When you kill a monster it is regenerated, but this takes\r\n"); printf("time. You can also regenerate yolay */ clr() { puts(CLEARS); nap(4); } /* * display initial instructions */ instruct() { (  j or x to move down\r\n"); printf(" to halt \r\n"); printf(" q to quit\r\n\n lseek(scorefile, 0l, 0); write(scorefile, (char *)scoresave, sizeof(scoresave)); close(scorefile); POS(line+ read(scorefile, (char *)scoresave, sizeof(scoresave)); for (i = MSSAVE - 1; i >= 0; i--) { if (scoresave[game - 1].tion and spawns a child process to read * the input terminal. */ init() { register int tries; tries =yer */ clr(); /* high score to date processing */ if (game != 0) { line = 7; POS(line++, 20); printf(" _ |"); POS(line++, 20); printf("| 'pacdefs.h'. |"); }; */ POS(line++, 20); printf("| "); printf(" Type: 1 normal game\r\n"); printf(" 2 blinking monsters\r\n"); printf(+, 20); printf("| High Scores to date: |"); for (i = 0; i < MSSAVE; i++) { setpwent(); p = getpwentry[i].score < pscore) { if (i < MSSAVE - 1) { scoresave[game - 1].entry[i + 1].score = s 0; TTYMode(0); /* Tell cio.c to be REALLY raw! */ initPOS(); /* initialize the fixed part of posnstr */ pacsymb = PACM__________________________ "); POS(line++, 20); printf("| |"); POS(line++, 20); printf |"); POS(line++, 20); printf("| Your score: %-5u |", pscore); POS(line, 20); printf" 3 intelligent monsters\r\n"); printf(" 4 blinking intelligent monsters\r\n"); }uid(scoresave[game - 1].entry[i].uid); POS(line++, 20); printf("| Player : %-8s %5u |", p->pw_name, scoresacoresave[game - 1].entry[i].score; scoresave[game - 1].entry[i + 1].uid = scoresave[game - 1].entry[i].uid; AN; pacptr = &pac; strcpy(initbrd[0], "#######################################"); strcpy(initbrd[1], "# . . . * . . ("| G A M E O V E R |"); POS(line++, 20); printf("| |"); POS(line++, 20); pr("|___________________________|"); }; leave(); } /* * leave -- flush buffers,kill the Child, reset tty, and dele /* * over -- game over processing */ over() { register int i; register int line; /* int scorefile ve[game - 1].entry[i].score); }; } else { POS(line++, 20); printf("| |");  }; scoresave[game - 1].entry[i].score = pscore; scoresave[game - 1].entry[i].uid = getuid(); }; }; . . ### . . . . * . . . #"); strcpy(initbrd[2], "# % ### . ##### . ### . ##### . ### % #"); strcpy(initbrd[3], "# * . . * intf("| Game type: %1d |",game); /* if ((scorefile = open(MAXSCORE, O_RDWR | O_CREAT, 0666)) != -1) { te tempfile */ leave() { POS(23, 0); puts(CURSORON); exit(0); } /* * init -- does global initializa= 0; struct passwd *getpwuid(), *p; */ sleep(50); /* for slow readers */ poll(0); /* flush and discard input from pla POS(line++, 20); printf("| Please create a 'paclog' |"); POS(line++, 20); printf("| file. See 'MAXSCORE' in ) . * . * . . * . * . * . . * #"); strcpy(initbrd[4], "# . ### . # . ########### . # . ### . #"); strcpy(initbrd[5], "# . .  strcpy(brd[6], "####### . ##### . ### . ##### . #######"); strcpy(brd[7], " # . # . . * . . * . . # . # "); str); strcpy(initbrd[21],"# . . . . . . . * . . * . . . . . . . #"); strcpy(initbrd[22],"####################################. . . . . ### . . . . . . . . #"); strcpy(display[2], "# % ### . ##### . ### . ##### . ### % #"); strcpy(display[3], "# . tbrd[13]," # . # * . . . . . . * # . # "); strcpy(initbrd[14],"####### . # . ########### . # . #######"); strcpy ### . ##### . ### . ##### . ### % #"); strcpy(brd[17],"# . . # * . * . * . . * . * . * # . . #"); strcpy(brd[18],"### . #. * # . . . ### . . . # * . . . #"); strcpy(initbrd[6], "####### . ##### . ### . ##### . #######"); strcpy(initbrd[7], " cpy(brd[8], " # . # . ### - - ### . # . # "); strcpy(brd[9], "####### . # . # # . # . #######"); strcpy(###"); strcpy(brd[0], "#######################################"); strcpy(brd[1], "# . . . * . . . . ### . . . . * . . .. . . . . . . . . . . . . . . . . #"); strcpy(display[4], "# . ### . # . ########### . # . ### . #"); strcpy(display[5], "(initbrd[15],"# . . . * . * . . ### . . * . * . . . #"); strcpy(initbrd[16],"# % ### . ##### . ### . ##### . ### % #"); st . # . ########### . # . # . ###"); strcpy(brd[19],"# . * . . # . . . ### . . . # . . * . #"); strcpy(brd[20],"# . ####### # . # . . * . . * . . # . # "); strcpy(initbrd[8], " # . # . ### - - ### . # . # "); strcpy(initbrd[9],brd[10]," * . * # # * . * "); strcpy(brd[11],"####### . # . # # . # . #######"); strcpy(brd[ #"); strcpy(brd[2], "# % ### . ##### . ### . ##### . ### % #"); strcpy(brd[3], "# * . . * . * . * . . * . * . * . . * #")# . . . . # . . . ### . . . # . . . . #"); strcpy(display[6], "####### . ##### . ### . ##### . #######"); strcpy(display[7rcpy(initbrd[17],"# . . # * . * . * . . * . * . * # . . #"); strcpy(initbrd[18],"### . # . # . ########### . # . # . ###"); #### . ### . ########### . #"); strcpy(brd[21],"# . . . . . . . * . . * . . . . . . . #"); strcpy(brd[22],"############### "####### . # . # # . # . #######"); strcpy(initbrd[10]," * . * # # * . * "); strcpy(initbrd12]," # . # . ########### . # . # "); strcpy(brd[13]," # . # * . . . . . . * # . # "); strcpy(brd[14],; strcpy(brd[4], "# . ### . # . ########### . # . ### . #"); strcpy(brd[5], "# . . . * # . . . ### . . . # * . . . #"); ], " # . # . . . . . . . . # . # "); strcpy(display[8], " # . # . ### - - ### . # . # "); strcpy(displ strcpy(initbrd[19],"# . * . . # . . . ### . . . # . . * . #"); strcpy(initbrd[20],"# . ########### . ### . ########### . #"########################"); strcpy(display[0], "#######################################"); strcpy(display[1], "# . . . [11],"####### . # . # # . # . #######"); strcpy(initbrd[12]," # . # . ########### . # . # "); strcpy(ini"####### . # . ########### . # . #######"); strcpy(brd[15],"# . . . * . * . . ### . . * . * . . . #"); strcpy(brd[16],"# %* ay[9], "####### . # . # # . # . #######"); strcpy(display[10]," . . . # # . . . "); strcpy(d pacptr->dirn = DNULL; break; case ABORT: case DELETE: case QUIT: over(); break; case CNTLS: sF); } /* * poll -- read characters sent by input subprocess and set global flags */ poll(sltime) { int sttr[1] = 'Y'; posnstr[4] = '\0'; } /* * The POS function us normally defined, using termcap, as: * #define POS(ro#"); strcpy(display[19],"# . . . . # . . . ### . . . # . . . . #"); strcpy(display[20],"# . ########### . ### . ##########* #define PLOT(A,B,C) POS(A,B);putchar(C) */ PLOT(row,col,ch) int row,col; char ch; { POS (row, col); putchar(isplay[11],"####### . # . # # . # . #######"); strcpy(display[12]," # . # . ########### . # . # "); strctop = 1; goto readin; case GAME1: game = 1; break; case GAME2: game = 2; break; case GAME3op; int command; if(!kbhit()) return; readin: command = getchar(); switch(command & 0177) { case Lw,col) tputs(tgoto(vs_cm,(col),(row),1,putch) */ POS(row,col) int row,col; { posnstr[2] = 32 + row; posnstr[3] = # . #"); strcpy(display[21],"# . . . . . . . . . . . . . . . . . . #"); strcpy(display[22],"##############################ch); } /* * The SPLOT function is normally defined as: * #define SPLOT(A,B,S) POS(A,B);printf("%s",s) */ SPLOTpy(display[13]," # . # . . . . . . . . # . # "); strcpy(display[14],"####### . # . ########### . # . #######"); : game = 3; break; case GAME4: game = 4; break; default: goto readin; } } getrand(rEFT: pacptr->dirn = DLEFT; break; case RIGHT: pacptr->dirn = DRIGHT; break; case NORTH: case NNOR32 + col; puts(posnstr); } readin; } } getr#########"); killcnt = 0; srand(0); /* start rand randomly */ delay = 2000; /* * New game starts here */ (row,col,str) int row,col; char *str; { POS (row, col); puts(str); } /* This function is called at initializastrcpy(display[15],"# . . . . . . . . ### . . . . . . . . #"); strcpy(display[16],"# % ### . ##### . ### . ##### . ### % #");ange) int range; { unsigned q; q = rand(); return(q % range); } /* * Dummy nap() function */ napTH: pacptr->dirn = DUP; break; case DOWN: case NDOWN: pacptr->dirn = DDOWN; break; case HALT:  game = 0; instruct(); while (game == 0) poll(1); goldcnt = GOLDCNT; pscore = 0; clr(); puts(CURSOROFtion time to set up * the fixed portion of the cursor positioning string. */ initPOS() { posnstr[0] = ESC; posns strcpy(display[17],"# . . # . . . . . . . . . . . . # . . #"); strcpy(display[18],"### . # . # . ########### . # . # . ##(x) { int i; for(i=0;i<20*x;i++); } /* * The PLOT function is normally defined using a preprocessor macro: + emember monster's current position */ tmpx = mptr->xpos; tmpy = mptr->ypos; /* if we can, let's move a monster */  PLOT(mptr->ypos, mptr->xpos, VACANT); /* initialize moving monster */ mptr->ypos = MBEGINY; mptr->xpos = Mmptr->xpos = newx; mptr->ypos = newy; /* run into a pacman? */ if ((newy == pacptr->ypos) && (newx == pampx; break; case DLEFT: newx = tmpx + LEFTINT; newy = tmpy; if (newx <= 0) newx = XWRAP; /* wra if (mptr->stat == RUN) { gmod2 = game % 2; /* if a monster was displayed ... */ if ((gmod2 == 1) || ((gmod2BEGINX; mptr->speed = SLOW; mptr->danger = TRUE; mptr->stat = RUN; PLOT(MBEGINY, MBEGINX, MONSTER); cptr->xpos)) { killflg = dokill(mnum); }; rscore[mnum] = pscore / 100 + 1; if ((gmod2 == 1) || (killfl#include #include "pacdefs.h" startmonst() { struct pactyp *mptr; register int monstnum; if (pp around */ break; case DRIGHT: newx = tmpx + RIGHTINT; newy = tmpy; if (newx >= XWRAP) newx =  == 0) && (( (rounds - 1) % rscore[mnum]) == 0))) { /* replace display character */ PLOT(tmpy, tmpx, display[/* DRIGHT or DLEFT? */ mptr->dirn = getrand(2) + DLEFT; break; }; }; } monster(mnum) int mnum; { g == TURKEY) || ( (gmod2 == 0) && ((rounds % rscore[mnum]) == 0))) { if (mptr->danger == TRUE) {otion == TRUE) { /* don't start if potion active */ return; }; for (mptr = &monst[0], monstnum = 0; monstnum0; /* wrap around */ break; } /* use brd to determine if this was a valid direction */ switch (brd[newy][newtmpy][tmpx]); }; /* get a new direction */ mptr->dirn = which(mptr, tmpx, tmpy); switch (mptr->dirn) {  register int newx,newy; register int tmpx, tmpy; struct pactyp *mptr; int gmod2; mptr = &monst[mnum]; /* r PLOT(newy, newx, MONSTER); } else if (killflg != GOTONE) { PLOT(newy, newx, RUNNER); };  < MAXMONSTER; mptr++, monstnum++) { if (mptr->stat == START) { rscore[monstnum] = 1; /* clear home */ x]) { case GOLD: case VACANT: case POTION: case TREASURE: case CHOICE: /* set new position */  case DUP: newy = tmpy + UPINT; newx = tmpx; break; case DDOWN: newy = tmpy + DOWNINT; newx = t,  }; break; default: errgen("bad direction"); break; }; } } which(mptr, x, y) /* which dirOWNINT)) != GATE)) { moves[movecnt++] = DDOWN; }; break; case DDOWN: if ((*(brdptr + (BRDes[movecnt++] = DRIGHT; }; /* * If the player requested intelligent monsters and * the player is scoring high .y here */ nydirn = DNULL; }; }; goodmoves = 0; for (submovecnt = 0; submovecnt < movecnt; submovecnt++) = DDOWN) && ((next = *(brdptr + (BRDX * UPINT))) != WALL) && (next != GATE)) { moves[movecnt++] = DUP; }; i the pacman */ offx = x - pacptr->xpos; offy = y - pacptr->ypos; if (offx > 0) { /*need to go left */ ections are available ? */ struct pactyp *mptr; int x, y; { register int movecnt; register int submovecnt; regiX * UPINT)) != WALL) && (*(brdptr + (BRDX * UPINT)) != GATE)) { moves[movecnt++] = DUP; }; break.. */ if (((game == 3) || (game == 4)) && (getrand(1000) < pscore)) { /* make monsters intelligent */ if (pacp { if (pacptr->danger == FALSE) { if ((moves[submovecnt] == nydirn) || (moves[submovecnt] == nxdirn)) f ((tmpdirn != DUP) && ((next = *(brdptr + (BRDX * DOWNINT))) != WALL) && (next != GATE)) { moves[movecnt++] = DDnxdirn = DLEFT; } else { if (offx < 0) { nxdirn = DRIGHT; } else { /*need to stster int next; int moves[4]; int submoves[4]; int nydirn, nxdirn; int goodmoves; int offx, offy; int tmpdirn; ; case DRIGHT: if ((*(brdptr + LEFTINT) != WALL) && (*(brdptr + LEFTINT) != GATE)) { moves[movtr->danger == TRUE) { /* * Holy Cow!! The pacman is dangerous, * permit monsters to reverse direction  { submoves[goodmoves++] = moves[submovecnt]; }; } else { if ((moves[submovecnt] != nydirnOWN; }; if ((tmpdirn != DRIGHT) && ((next = *(brdptr + LEFTINT)) != WALL) && (next != GATE)) { moves[movecnay here */ nxdirn = DNULL; }; }; if (offy > 0) { /*need to go up */ nydirn = DUP; } els char *brdptr; /* * As a general rule: determine the set of all * possible moves, but select only those moves ecnt++] = DLEFT; }; break; case DLEFT: if ((*(brdptr + RIGHTINT) != WALL) && (*(brdptr + RIGHTI */ switch (tmpdirn) { case DUP: if ((*(brdptr + (BRDX * DOWNINT)) != WALL) && (*(brdptr + (BRDX * D) && (moves[submovecnt] != nxdirn)) { submoves[goodmoves++] = moves[submovecnt]; }; }; }; t++] = DLEFT; }; if ((tmpdirn != DLEFT) && ((next = *(brdptr + RIGHTINT)) != WALL) && (next != GATE)) { move { if (offy < 0) { /* need to go down */ nydirn = DDOWN; } else { /* need to sta * that don't require a monster to backtrack. */ movecnt = 0; brdptr = &(brd[y][x]); if (((tmpdirn = mptr->dirn) !NT) != GATE)) { moves[movecnt++] = DRIGHT; }; break; }; }; /* determine the offset from-  if (goodmoves > 0) { return(submoves[getrand(goodmoves)]); }; }; return(moves[getrand(movecnt)]); }  with color crayons, they'll love it. Better yet, make an extra copy for yourself and "borrow" the crayons 56789012345678901234567890123456789012345678901234u should run this on a 2.5 MHz machine, at 4 MHz you have to be quick. (Best to keep this one hidden if you plan to continue u D? >$ WRONG, try again $ Disk to format is in drive $: Type to format (^C to Quit$ FUNCTION COMPLETE! LOAD NEXT D"h !~9 > :_EҜAڜS–###~:–+~EҜAڜ2AOͼ͢HͪͰĶ >_>M_ s; if (offx > 0) { /*need for an evening. UNLOAD.COM - a nifty utility that recreates a .HEX file from a .COM file. Useful in sending files by-z. ------------------------------------------------------------------------- The following were submitted by: Gasing your system.) Another really interesting thing is that I received disks from two readers, both contained PACMAN, and boISKETTE, THEN TYPE $ 0 1 2 3 4 5 6 7 $01234 Oͼ*h?Ä&Ä*å$å'åå Disk verify (and fix) version 1.04 02-09-80 $ Which dr8 AE=O _ . !236!*!q !>w#:f>2f MODEM.COM DIF.COM - These are CPMug routines to help folks pass along software updates DIF.DOC without having to pass ary Kaufman 206 S. 13th Street Apt 810 Philadelphia, PA 19107 (215) 735-2841 MODEM7A.COM - Modem7 adaptedth contained ZCPR (usr disk #4). And both were configured for the Big Board. One of the folks is Gordon Banks MD, and you'r567890123456789012345678901234567890123456789012345678901234567890123456 $ive ? $ Disk in drive : verified. $ Bad drive specified. $ Command error, form is "verify {x:}" $!q!$>v  y. yM  K!!$ >V >N {M 2f long the whole file each time. SSED.COM This software is especially useful for phone data transfers. TYPESQ.COM - These fi for port a MODEM7B.COM - Modem7 adapted for port b SNOOPY.TXT - What else ? (list this to a printer and turn the kids loosee going to be seeing more from Gordon as time goes on. He really seems to be getting into the Big Board. The other is Gary Kau 1 2 3 4 5 6 7 $01234petition. Of course this game will definitely win over the hearts of the young ones but watch out, if you are a beginner, yo  <ͫyM2m͓Ó!{o~ Bigboard Disk Formatter ver DISK TO FORMAT IS IN DRIVEA,B,C ORles squeeze (sq.com) and unsqueeze (usq.com) SQ.COM files so they take up less room. It's just USQ.COM sq filename.. SAVE 0 B:-$1 ERA MAST.BAK FMAP B: F UCAT ERA NAMES.BAK  Sacramento, CA 95826 Pascal-z user disks put together by Charlie Foster 7963 Center Parkway Sacramento CA 95823 CharRIFY/FIX ROUTINE THAT I USE ALL THE TIME IT IS VERY HANDY ESPECIALLY SINCE IT WILL TRY TO FIX BAD SECTORS. TRY IT OUR AND I Tlie also does a newsletter and though I haven't seen it, I understand there are a number of Big board users who subscribe. TheyHINK THAT YOU WILL FIND IT AS USEFULL AS I HAVE. I DON'T KNOW JUST WHERE IT CAME FROM, BUT I'M SURE IT IS PUBLIC DOMAIN. IT  have 15 disks of software written in and for pascal-z. The following were submitted by: Gary Kaufman 206 MAY HAVE COME FROM THE NO DEFUNCT DIGITAL GROUP COMPUTERS. IT WORKS VERY WELL AND IT THINK THAT IT WILL BE A GREAT ADDITION TCAT.COM 1/8/78 $ !9"-1-]!/m!:E!] !_G6$\<•͊++UNABLE TO OPENERA MAST.BAK FMAP C: F UCAT ERA NAMES.BAK O THE LIBRARY. LATER, BRETT  MAST.CAT$ *-̓)•̓̓ë>  T >2 =ʐ!/?0?0!:?0?0 VERIFY.COM DAVID THOMPSON, AT THE LAST MINUTE I OPENED THE PACKAGE BECAUSE I WANTED TO GIVE YOU A COPY OF A VE/ !~#:Q<2Q0:<2:06æ6̓ 6̓R#?̓.m,m~?G> #b7~?x b> #mort to the top of the sorted listing. Eventually, I wrote 'FMAP' which creates a sorted directory listing, but also, if 'FMA disk extent information also (but not any extent past the first). Then I wrote 'SMAP' which produces a sorted directory lis't have to edit the file - you may type it and decide to take my defaults. NOTE The format of the 'empty' MAST.CAT is simply arch of 'MAST.CAT' FMAP.ASM Creates a file of the names on a diskette as input to 'UCAT.COM' along with '*R|=º\ʷ͊++READ ERROR OR EARLY EOF$!~#"R> > _ w#6?#͊ $?0P *.* F' is typed, writes 'NAMES.SUB' to disk with the names of all the files on the disk. This file of names then got me tting. This made finding files in the listings easier. At this time I also adopted the convention of editing a 'dummy' file oa list of names which you don't want put in the catalog. This may be 1 or more file names. It cannot be zero names. If you wa(THIS IS FILE CATALOG.DOC AS OF 3/13/78) CP/M DISK CATALOGING SYSTEM FOR COMPUTER HOBBYISTS BY WARD CHRISTENMAST.CAT' -----INSTALLING THE CATALOGING SYSTEM----- 1) Edit 'MAST.CAT' in order to place entries in it fo!~#:Q<2Q0:<2:066̓ 6̓MAST CAT NAME DISK NAME hinking about having a master file of names, or a 'master catalog'. That is what I did. I now have 1 disk file which contan each disk, called '-DISK.nnn' where nnn is the disk's serial number. Later I changed the word 'DISK' to any more meaningfulnt everything cataloged, put a name such as 'DUMMY.FIL' in the catalog. The format is as follows: Each name is on a separate SEN -----OVERVIEW----- I have always wanted to be able to keep track of where files are on my CP/M disketr the file names you don't want to be placed in the catalog. I already have ASM.COM, STAT.COM, PIP.COM, and others in the sam DISK $............ ............ FILES:ins the file names and disk names for every pertinent file I have. I also wrote a command which behaves like 'DIR' but scans  name, such as '-WORK.023' or '-CBIOS.019', etc. The important thing was that each started with a '-' which meant it would sline. The first name is pre- ceeded by a '('. The last is followed by ')'. thus: (ASM.COM PIP.COM STAT.COM) 2) Pictes. The first step was to make a 'DIR' listings with the printer on. Next I wrote a command called 'MAP' which printed theple MAST.CAT. Since these are on nearly every disk, I therefore don't want them to take room in the catalog. N-O-T-E you donthe master catalog. -----PROGRAMS----- UCAT.ASM/COM Maintains 'MAST.CAT' CAT.ASM/COM Allows 'DIR' se0 k a disk which will contain the master catalog 'MAST.CAT'. You m-u-s-t serial number (3 digits) all your diskettes, placing ape: UCAT This results in the disk being added to the catalog. This can be done whenever you want, as the entries fornique serial number. The easiest way to place an entry in the directory, with 0 data as- sociated with it is to 'ED -anyname. disk with name 'WORK' (any serial) Note that what you type following the CAT command appears as the (USE THIS WITH THE FMAP ON THIS DISK) Which will write the file, but also print the sorted directory listing. 5) Tnd filename.type - namely the disk's name and serial. N-O-T-E that UCAT deletes the leading '-' when it places a disk name in file '-anyname.nnn' on each disk. The UCAT routine then takes this as the name of the disk. 3) Put the following fil the disk are deleted from MAST.CAT and the new ones added. This means the cataloging system properly keeps track of erased nnn' then when 'NEW FILE' types, type control-c. This will leave the entry in the catalog, but will not take any data space.  title of the resultant listing. This is particularly useful for keeping hard copy listings of your catalog, such as by typinype: UCAT This will merge the file names in 'NAMES.SUB' (created by FMAP) with the names in MAST.CAT. It will report the name the directory. Therefore you don't use the '-' when asking for a particular disk. Examples of 'CAT' command requests: es on this master disk: MAST.CAT FMAP.COM UCAT.COM CAT.COM -anyname.nnn 4) files also (i.e. erases them from the catalog when it no longer finds them on the disk being cataloged). If you want to re-cat Then type:ERA *.$$$ (or ERA B:*.$$$) to erase the temporary file which was created by the editor. 2) Assuming the diskg: CAT *.* *.* AS OF 02/17/78 this will result in the title: FILES: *.* *.* AS OF 12/17/77 appearings of any files which are added to, or deleted from, the catalog. -----USING THE CATALOGING SYSTEM----- 1) W CAT lists entire catalog CAT *.* *.002 lists entries for disk 002 CAT *.asm lists Type: FMAP A: Q (FMAP ON THIS DISK DOES NOT ACCEPT THIS) This will creates NAMES.SUB, which has the names of the filesalog the 'A' disk, type: FMAP A: Q then type: UCAT 3) Use the 'CAT' command to scan the catalog as y with the catalog programs is on drive a, whenever you want to catalog the disk on drive b, type: FMAP B: Q then ty on each page of the catalog listing. 4) If you want to erase something from MAST.CAT you do so by erasing the file frohenever you put a new diskette into service you must place a '-anyname.nnn' entry in the directory. nnn should be the disk's u all asm files CAT A*.* lists all files starting with 'A' CAT *.BAS WORK.* lists all 'BAS' files on any  on this disk. The 'q' means to write the file to disk 'quietly'. If you want to see the listing, type: FMAP A: Fou use 'DIR' to scan the directory of the current disk. The operands of 'CAT' are just like 'DIR' except that there is a seco1 m the diskette it is on, then cataloging that disk. If you crash a disk and want to erase all it's entries from the catalog,  so. It then tells you to mount the catalog disk, and press return. You do that. This causes a "NAMES.SUB" file to be writteW.CAT, so if your disk is low on space, you may sacrifice this integrity, and manually ERA MAST.BAK before running UCAT. The in all files referring to -WORK.023 being erased. ------------------------------------------------- N O T Edisk. You are referred to the previous documentation on the cataloging system for more details. ------ you have to edit a dummy 'NAMES.SUB' with just the disk name in it, then execute 'UCAT' which will be faked into thinking you n to the catalog disk. Type: UCAT which will then execute the catalog updating program, which alphabetically merges NAMES.SUprogram could also be modified, to do the erase first. ------------------------------------------------- ------------ S ------------------------------------------------- The UCAT program creates a file 'NEW.CAT', and ONLY when the update ap are cataloging an empty disk. This will cause all entries for the disk to be erased. EXAMPLE: Suppose disB with the file MAST.CAT, then erases the NAMES.SUB file. NOTE that each disk to be cataloged must have a file "-diskname.s------------------------------------- QCAT was submitted subsequently, with the following comments: QCAT allows catalogipears to be successful, does it do the following functions internally: ERA MAST.BAK REN MAST.BAK=MAST.CAT k '-WORK.023' crashed, and you want to delete all references to it from MAST.CAT. (you might first want to do 'CAT *.* *.023 erial" (such as "-MAC.005"). When the list of names on the disk is sorted, the leading "-" on this filename causes it to be sng disks on a 1 disk system. You type QCAT, and the program asks you to mount the disk to be cataloged, and press a D. You do REN MAST.CAT=NEW.CAT Thus, there are 3 versions of the catalog on your disk at one time: MAST.BAK, MAST.CAT, AND NEto see what was lost). Edit NAMES.SUB and place the following single line in it: -WORK.023 then run UCAT. This will result orted first. It is then taken as the disk name and serial, and is written to the master catalog next to each filename on the 2 ERA MAST.BAK FMAP A: F ERA NAMES.BAK UCAT sing your system.) Another really interesting thing is that I received disks from two readers, both contained PACMAN, and boXX.XXX CRC = $ \<¶ ++OPEN FAILED++$!" !""*"| \!~2$#"":!9probably PACMAN.C entering illegal commands or in lower case. PACMAN.DOC PACMONST.C PACUTIL.C FAST.COM - Gordon saysareful about accidentally hitting the (D)elete key. you might have to go in and undelete a file with PFM. --------------th contained ZCPR (usr disk #4). And both were configured for the Big Board. One of the folks is Gordon Banks MD, and you'r> M: 9 ; $* |):$o5|g}o" B K0_2h2|:%ª>2%!\& that this little screamer buffers FAST.DOC the disk track by track for reads, writes, and directory accesses wh------------------------------------------------------------- The following were submitted by Gordon Banks MD (PACMAN.DOC file going to be seeing more from Gordon as time goes on. He really seems to be getting into the Big Board. The other is Gary Kau :\22!&\ \!2\ \!&\ \<7=Ɓo&3 ] ich doubles the speed of programs like ASM, MAC, etc which bang the disk a lot. See the .DOC file for more exciting e submitted by Gary Kaufman) Dr. Gordon Banks MD 1360 Scaife Hall University of Pittsburgh Pittsburgh, PA 15261 PACMANasm creates filename.aqm usq filename.aqm creates filename.asm typesq filename.dqc unsqueezes and t 2h2|~# x  *~): information. NOLOCK.COM - This is another nice utility. It NOPs out the shift lock "feature" on theCRCK ver 3.0 8/3/80 !9"~1~5CRCK ver 3.0 $ ZL:f;TDONE$!]z !e ͏--> FILE: XXXXXX.COM - A pacman type game written in BDS - C and adapted for the PACMAN.DOC Big Board. Note: if the game freezes up you are ypes file on the console. WASH.COM - This file gives you a menu of things you can do to the files on the disk. (c3  Big Board so you can send nulls to other systems etc. without casing your own system. (I'm sorry, bit, I understand there are a number of Big board users who subscribe. They have 15 disks of software written in and for pascalr if you have more than a dozen or so disks to keep track of. Just read the .doc file and you'll see what I mean. I'm using it"11MAST CAT0464F522049474E4F524 E4á*-*/}|ڊ!"/*-{z|*+ v*/"/H*/"- restore. Simply enter VERIFY and select a disk and away it goes. It leaves the data intact (or even more intact#>    %* :FJ*w#"|=Lk++WRITE ERROR$!">.- > -ad pun.) Stay tuned for more from Gordon in future disks. Gordon Banks 1360 Scaife(FMAP 8/21/77)!9"1:m2!]~ 3 6?#,\<2WK(++NOT FOUND$f:ÖFILENAME TYP EX RC -----EX and it works absolutely super. It won't work if you forget the parenthesis in MAST.CAT and if you don't have at least a !"/*+*-}>*/#"/ɯ22*!"-"/ < Å NO MASTIN FILE$NAMES SUB :1004E70007B7CAF304n. He really seems to be getting into the Big Board. The other is Gary Kaufman. Thankyou both. CAT.COM .DOC .SUB (Catalogin> - ^#V#N#F #ʒ>2N#F#^q#Vpr+s:F(>-L(FILESyNAMES SUB0_ Hall Univ of Pittsburgh Pittsburgh, PA 15261 -------------------------------------------------TENT-----$\<ʾ=!o*w#©":<2Ê:!ys#r# =:2= 2:=22 !͉##:=2after the last parens. Software sent in by Don Bell 8404 Gonzaga Ct Sacramento, CA 95826 Pascal-z user disks put toge"s**}|\!"*{zN*H*"*"!"**}>*#"ɯ22!"g your disks) See Catalog.doc for all the information on this package. I got it via the pascal-z user group, which got it fr------------------------- VERIFY.COM - Brett Berg sent me this one which he says is a lifesaver VERIFY.DOC for him. It che:!":FC-L(FILES$  0_ ~-4 *" &Å DISK FULL: MASTOUT$!"**#"ɯ22!"!"<£n^#V# ~#fo^#& ~#fo!+!#!+!#!+!+}|z{|}|z z> >   ~ ʰ_# > XXXXXXXX.YYY, . XXXXXXXX.YYY,XXXXXXXX.YYYXXXXXXXX.YYY,XXXXX$_,:>#)’#>66:?6#*?|£#2͈7#>66:?6>#6>66: ?6#*?">)#>6:?6>s6>@2>#2͈7# ?ʠʠ~ ʡ) “~#ƒi: ʲ. w#©26 #6#>2!6,#+w# +6#!6#2w2x*s!>r<o&F=-` r'~h6!+`W?_ Å NO DIR SPACE: MASTOUT$MAST BAK CAT Åi !:-++NO '-NAME' IN DIRECTORY$7||7zZZ)|/g}/o#|͉k|/g}/o#ɯ2qZZk:q|/g}/o#|/g}/o#:q<2qqDM!xxGyOXXX.YYY$$$ .SUB))#:>=2>))$>s6#́)($2:>"$2͈7#3͈7#*>">*?">:?ʒ$:>s$)f$>>6:?62͈7#2͈726.#:R4 ,J.J JRw#426 #J6#R2!t~ h>0ª@w#G.¶ww#?*>?w#> w#.7:77!!4h(h!4ʉw#) x'++TOO MANY IGNORE NAMES FOR TABLE$++NO IGNORE NAMES IN )v|͔`i|)Öxڷz/W{/_ѯzW{_=yOxGæ2qZZ͉M|}ȯ|g}o)|/g}/o>#)f$>6:?6>{62͈7#)«$:?„$>}62i$:?$.́)$>&663i$:?$_,w#:>$h-_,$:?>#z> >   ~ ʰ_# > _> _w##>*}">!a{   `OE!y6$ -7rBo&))T])))!yMAST.CAT$++EOF READING FOR IGNORE NAMES. MAY BE MISSING ) AFTER LAST NAME.$4ʉ i::!X#z/W{/_!9~#fo! ! ! ! ! ! !9~#A"s!`*"!"!Y">2>2>22!"!*K͞+@4:s'+FÎr ͖ 8{ Ăw#w#w^#V#*~#fo^#*~#fo^#V#*n^#*$>6_,>6>@2?$*>">c"s Æ É(Ù (S6('!û>))V6&!9DM!"%P! ~#fo! s#r! ~#fo! s<( ( CANNOT CLOSE MASTOUT$O w# @! ;! ;MAST.CAT HAS ENTRIES.$":>""G #Ϳ,"x ..Ϳ,.ͭ'5':>?2>I#:>>2> *<-*N*l*2>ͻ':?[#7/ͽ6:>1$:>$:?5 !#!]/!͗DEL: $!]R!͗iADD: $!]!ͩ6.#ͩ6,!"!@"!" ʞ!F#x±~#±!b2r~# "2r+}|~#G:rx"2r5 #r! ^#Vr+szP! ^#Vr+s~#fon}>=! ~#fo~#fon}+M! ~#fo~#fo#"%P! ~#fo! ͡{2LP{2NP{2OP{2MP{2KP*"VP*s#r! ~#fo*!P3s! ^#Vr+sn}ƒ! *+P!!-*!P*! s#r! ~#fo|! ~#fo| *+P!!-file] -d display lines that match -e generate Editor script -u Unsqueeze filea -v Verbose Can't open %sCan't open %sSP`i~#fo! s#rzK`i~#fo!! ~#fo`i~#fo;s#rU`i~#fow#w`i~#fo###! ~#fo~#fos#r! ~#fo`i~'P"PP{2UP{2TPsd"/P"\P"@Ps"3P"1P"HPs"5P*LP} `i6`in&| `in&)3P~#fo`in&)/P~#fo`in&! !Ͱ`i~#fo! ~#fo~#fo! n&!e!!9!! ~#fo*\P*^Pҋ! n&)/P~#fo"\P*LP}ʀ*\P!!"XP! ^#Vr+sz6 ! ^#Vr+s~#fo! s#rn}-6 ! ^#Vr+sn}3 ! ~#fon&ͪ>d> >e> >u> >v!0!"eP!"gP`iw#w`i~#fo! ~#fot`i~#fo))eP*!P*s#r`i~#fo))eP##*!P*s#r`i^#Vr+s!9%s tandard Inputbottom[%d]=%x top=%x %s$a %u . Files are different No differences encountered '%s' Unlinked y )*!Pv#fos#r*LP&|*\P! ~#fo`i~#fo~#fo`i~#fo! ~#fo~#fo! n&!!!9!`i~#fo`i~#fo! s#r! 4ü !"RP!"9P"7P!;P!Ϳ*/P"7P!CP!Ϳ*1P"9P*7P###~#fo|ͣ*9P###~#fo||g}o| *9P*7P*`P|‹ç*\P*`Pڿ*\P*bPڿ*LP}ʼ!!*\P`is#r`i~#fo##! ns`i~#fo"\P>2dP!dP5n}*\P#"\P+*Z >& - !NP40 !MP40 *"VP!OP40 !LP40 X öÅ! ~#fo|X ! ~#fo|ڮ !6 !Ͱ!T !Ͱ! !Ͱ!Not Squeezed (%s -> %s) %s has invalid decode tree size ,".+(k++!9DM! n&)'P! s#r! n&)VP~#fo"ZP!  Ì )*#P͉ ß l!9DM*iT| *iT+"iT*kT͜ `is#r!p| `i~#fo"kT*kT#| !0u"iT*kT͜ "iT|  ~#fow#w*\P#"\PE!9File %d line %d q=%x qq=%x qqq=%x p=%x Getline called after E-O-F %d %3d fp=%x hash=%04x next|ʌ  *PP*7P~#fo"PP*NP}ʵ *7P!$ *7P"7P*9P"9P9 *MP} *PP!* *KP} !3 !Ͱ* !H !P!!9~#fos{++  *LP}W! ~#fo~#fo! n&!!! n&TP6`i~#fo6#6`i~#fo`i~#fo !Ͱ! !Ͱ! !Ͱ!ͳ!H! ~#fo~#fo"+PͶ#| ! ~#fo~#fo! !Ͱ!ͳ H"!P! ~#n&)3P~#fo"^P*^P"^P! n})*9P,*7P"`P*`P"bP! ~#fo~#fo"\P*\P|}! ~#fo"\P*\P! ~#fo "\P*LP!*iT++"iT*kT!96%*(S6)!9DM$'*!P*|o*+P!}!-!0*!P*! ! =%x p=%x Wrapped: p=%x Buffer Filled EOF on file %d at line %d **EOF** Line %d is too long %d %3d gp=%x hash=%04x len=%3d Ͱ*%P|* *%P*%P!d !Ͱ!9dif.c 2.00 (dif 2.0) 11-17-81Usage: dif [-dev] filea {fileb,outs#r`i~#fo###6#6!`i~#fo! ~#fo`i~#fos#r! ~#fo^#Vr+s*\P+"\P! ~#fo~#fo!!*\P6*\fo++|\ !L! ~#fo##~#fo"-PͶ#|R ! ~#fo##~#fo! !Ͱ!ͳY L"#Ph *"XP! "-P*OP}y *"VPͼ!")P"}ʼ*\P*bP*`P*^P! ~#fo~#fo! n&!!!!9! n&TPn}E!I!*\P! ~#fo~#fo! ~#fo~#fo! 6 p=%x (,.ûS6!9DM>2KP*LP}U*9P###~#fo*7P###~#fo!L! ! s! ssT`is#r`i^#Vr+s*7P"oTs#~#foҐ!! ~#fo~#fo##n! ~#fo~#fo##nѯgW>)(k+)â'~-!9DM! s#r! s#r! ~#fo)sT! s#d w'b=%d HTBL %3d:addr=%x f=%d h=%4x l=%3d nxt=%x Can't find match at a:line %d b:line %d HTBL %d:addr=%x f=%d h=%4x l=%3d !! *PP!!! ~#fo###~#fo! ~#fob ! ~#fo! ~#fo! s#r !!*RP! ~#fo"RPË *P~#fo! ~#fo)sT~#fo###~#fo! ~#fo)sT~#fo~#fo! ~#fo)sT~#fo##n&! ~#fo)sT~#fo! ~#fo!! !9! s#r! ~#fo~#fo`is#r! ~#fo~#fo! s#r! ^#Vr+sL! ^#Vr+s ! ~#fo|^!Ê!*LP}ʱ! ~#fo! ~#fo!!!r`i^#Vr+s*9P"qTs#r! 6#6! 6#6! 6! n}W! n}! n}W! n}k! ~#fo! s#r! ^#Vr+szk`i~#forsT! s#r! ~#fo! ~#foG! ~#fo~#fo##n}:8! ~#fo##! s#r! ~#fo! ~#fo8! ~#fo~#fo##n}{)! ~%.30s û!9DM! ~#fo~#fo|<! ~#fo~#fo! ~#fo! ~#fo##n& ! ~#fo~#for)!"mT*eT#"eTP!!p!*+P*7P###~#fo!!*7P! s#r! ~#fo###~#fo! ~#fo ! ~#fo!"! ~#fo! s#rò *^#Vr+sW*!! ~#fo!sT! ~#fo|;C! ~#fo! ~#fos#rñ*9P###~#fo*7P###~#fo!! *LP}!`i~#fo!! ~#fo*MP}ʎ ! ~#fo*7P###~#fo! s#r! ~#fo*9P! s#r###~#fo! s*oT s#rz! 6k`i^#Vr+s~#fo"oT! ^#Vr+s!|L! 6*oT###~#fo|h! 6k! n}! ~#fo!#fo~#fo~#fo! ~#fo~#fo~#foʦ)! ~#fo~#fo###~#fo! ~#fo! ~#fo~#fo###~#fo! ~#fo)! ~#fo~#fo~|*!Po"gT#|Ÿ!!"eT*mT))eP*gT|g}o)~#fo"mT*mT))eP*gT"gT|g}o)~#fo"mT*mT|y*mT#-P*9P###~#fo!"*9P! s#r! ~#fo###~#fo! ~#fop!! ~#fo!("! ~#fo! s#r#!`i~#fo"7P! ~#f;! w#w! ~#fo! ~#fo;! ~#fo)sT~#fo! ~#fo)sT~#fo###~#fo! ~#fo)sT~#fo~#fo! ~#fo)sT~#fo##n&#r*LP}0! ~#fo! ~#fo*RP!!!! ~#fo|*RP*7P###~#fo!!! ~#fo+|ʯ!,! ~#fo|‰!$ s#r! ^#Vr+sz`i~#fo*qT s#rz·! 6`i^#Vr+s~#fo"qT! ^#Vr+s!|! 6*qT###~#fo|! 6#fo|!! ~#fo~#fo~#fo|$)! ~#fo~#fo~#fo~#fo! ~#fo~#fo~#fo~#fo_)! ~#fo~#fo! ~#fo~#fo"mT*mT|!*mT!"iT!c"eT!9DM! ~#fo~#fo~#fo! ~#fo~#fo~#foc!! ~#fo~#fo~#fo! ~#fo~#foo"9P!Ê!!9Found match at %d:%d Fudge=%d skipa=%d skipb=%d %d%d%da %u c %u . d %u -------- Line %4d of '%s' ----! ~#fo)sT~#fo! ~#fo!! !9! ^#Vr+sÌ!! 9Difference at %d:%d Dodiff Quantity=%d k't=%d w'a=%ï*RP*7P###~#fo! ~#fo+!!*RP! ~#fo"RP! ~#fo|~ ! ~#fo|*7P###~#fo| *PP*9P###~#fo+Å*LP}A! n&! n&! n&! ~#fo!a! *LP&| ! w#w! ~#fo! ~#fo ! ~#fo)sT~#fo;|ʎ)! ~#fo~#fo~#fo! ~#fo~#fo~#fo;|)! ~#fo~#fo###~#fo! s#r! ~#fo~#fo###~#fo! 7  ---%s++++++++ Line %4d of '%s' ++++ +%s7*N#"*|)yoO"|g}o"*+"|0"*x"((S6>)V6ð-!9DMk full? Ï(ü0!9DM! n&͌(|ʶ(! n& û(! n&(0k+!y9DM! `i(͐`i((!9(7!&!&&!&!&&w}&\!&s#r\w#w\\ &tempin.$$$tempin.$$$tempin.$$$tempout.$$$K$Ö%! ~#fo͐)~#fo#n}0#f$* ! ~#fo͐)~#fo#f"#|€#! ~#fo͐)~#fo#!%!i"l"Vr+sn}•)!)L)! ~#fo͐n! ~#fo͐nѯgW)!9)0~-!y9DM! `i)`i)!9*‘'! ! '`in&Ù'!9ñ'9.(S67!9DMw}(! n} '*! ͥ'*! n&ͥ'#| (!j(!~#fo.8!9DM͐(.!͐~#fo .E.â'78!9DM͐.͐>j.>ʑ.>v.>ʟ.>‚.>#fo͐ ~#fo)w#wá%! ^#Vr+s`i^#Vr+s"!9Can't open %s Ž.>..! n&<.! n&!?.! n&!?.! n} .! !?.! n&!?.͐##^#Vr+s|'t create %s #&.V69.o/k66w}U&* &w&|g}o|U&!&&w}&*!&*&* s#r͐͐! s#r͐ `is#r͐͐]-͐͐ ! s#r͐|G-͐͐ ͐͐͐!,!9~#fo ~#fo͐)!%s#r! ~#fo͐)*s#rK$*#n&|g}os! ~#fo͐)~#fo#n}v$!%!i"l"! ~#fos*͐##͐?+s#r͐͐s#r͐^#Vr+sn&*!9*)!9DM͐*`is#rz+͐*!8 O/!͐͐~#foB../!͐##6#6͐͐s#r͐^#Vr+s! ns&{/8m8þ8!9ͯÏ5Z5!9DM`iw#w͐~#fon&͌5}5͐ ?͐^#Vr+snѯg`is#rÝ5͐5!95$6!9DM! n& n}3! ^#Vr+s!3! ^#Vr+s! n}ʹ3!0ü3! sÇ3͐! ^#Vr+sns{3! ^#Vr+s3! n}4! ^#Vr+s! , FNxg>Goy2:$Vr+s! 4͐n}0š1! 4͐n&0}ʷ1! 0ú1!! s#r! ^#Vr+sn`is{.2! 0! s#r! 4! ^#Vr+sn`#7:)~:,"s!"u*|*uk8*~#B8"*s*uk8#"u*+"/87*|DM**DM͐Җ/!ó0͐##~#fo¯/!ó0͐##~#fo`is#r͐͐͐~#for/͐/!ó0͐5|6! n&6! n&!9DM! n&aͯO6! n&zͯ  !\&!7*!6&*!6!4! ^#Vr+s6 324! ^#Vr+s`insH4! ^#Vr+s`ins)1͐6!9!9DM! ^#Vr+szʧ4͐n`is! BEB LD A,(SECTOR) ;GET SECTOR TO READ EA1F 3A7AEB LD C,A EA22 4F CALL READR+4 ;CALL READ ROUTINE IN MONITORis`in&0}D.2Uj2Xs2O|2C2S24͐~#fo|j2! ^#Vr+s6-͐͐~#fos#r! ^#Vr+s! 6 Â2! 6Â2! ͸8ڜ8><8~# x8 ><8~+ x¬8|}8:7:,*8:*8}|2q 9+?`is#r͐##~#fo|ʌ0!͐͐͐u/͐##~#fo͐s#r͐~#fo͐s#r!!͐~#&6!&="&! BL<"e=L6)97!9"7*^#V#z6+V+^+6*6*7^#Vr+s͐ ns! ^#Vr+s`insb4!9ö4ð4!9DM͐͐ 5͐^#Vr+s͐ 4͐04͐7s! EA23 CD2EF7 RET Z ;RETURN IF NO ERRORS EA26 C8 LD C,3 ;INDICATE READ ERROR TO HANDLER EA27 0E03 CALL 6! ~#fo! n&! ^#Vr+s~#fo! 0ѯgs#rk3! ^#Vr+s! ^#Vr+s~#fos! ^#Vr+sk3! n}3! 9:qw9! {w7*!9& 6C#6O#6MX9*|n9!\&À9!\&*|€9!fox/ó0͐##6#6͐͐s#r!ó0!9!9DM! n&Aͯ0! n&Zͯ0ð4Z5É55!h9!7:O*7,2q*&:q):S7=S7=r:qo&7:)~:,"s!"u*&Q5͐ ͐͐ ͉͐ͳ4`is͐ ͐͐ )͐ͳ4`in&#&Q5!9!9DM! n&0ͯڅ5! n&9REPORT ;REPORT DISK ERROR TO CONSOLE EA29 CD46EA JR Z,READ ;RE-TRY READ IF INDICATED EA2C 28EA RET EA2E C9  6#6! ^#Vr+s~#fo! s#r͐n}k3͐|k3! ^#Vr+s! ^#Vr+sns! ^#Vr+s! ^#Vr+s!3͐6! ! s#r!!l&!~#foʸ9> +ͯ9#~9##Ñ9a{ !p9!*w#9:**9*!ѷDM! ^#Vr+s~#fo! s#r͐! s#r! ^#Vr+sn`is{K4`in}%54! ! s#r! 6#6! s! s! s͐n}-Š1! ^#|ʱ7**s¶7! ~±76*u*+"*"*u#"u}77V677*7\!*79  ; EA2F ; EA2F ; EA2F WRITE: CALL READY ;RE-SELECT DRIVE AND WAIT TILL READY EA2F CDnsole output is desired. The receiver then invokes: ssed oldfile newfile Which will result in newfile beif.c which manages to operate in the primitive CP/M environment. The editing commands output in response to the -e option refrf the antecedent file. the new .dif files are compatible with the old ssed, but, alas, not with Unix ed or sed. The array  a few lines in each have been changed. For some years the Unix differential file print program diff(1) (the (1) refers to CP/M folks (verrry) patiently awaiting something like Unix to appear magically on out desktops, I propose that the revision orDDE9 RET NZ ;DON'T CONTINUE IF IT'S NOT READY EA32 C0 LD HL,(POINTR) ;GET BUFFER POINTER EA33 2A7BEB LD Aing created identical to the oroginal newfile. Well, not precisely identical, but identical up to and including the EOF (^Z) ence sequential lines in the source files, so they (the commands) can be executed by a stream editor. (The Unix diff(1) creatsizes in dif.c may have to be shrunk somewhat to run on a 48k system. For testing, give dif -e filea fileb |ssed filea the section of the Unix Programmers Manual in which it is described) has had a -e flag which provides a set of ed commands sui revision date of the antecedent file be placed in the new file adjacent to the new revision or date, preferably on the same li.in 8 .rm 72 .ce 99 Reducing the Swelling of the Phone Bill with DIF and SSED November 17, 1981 Chuck Forsberg Computer Decharacter. The dribble after that may change, so CRCK may say they are different. To check, compare the two files with dif. es difference files with non-forward-sequential commands.) To generate a difference file, the command is dif -e oldfile>filec dif fileb filec (fileb and filec should be identical) It ought to work if you said dif -e filea fileb |ssed ftable for transforming the first file to the second. With these tools, only an update file need be transmitted, provided, one. This way the user may easily verify that he has the correct antecedent. Dif Versions 1.10 and later place hash indicesvelopment Inc Beaverton OR .ce 0 Lately (if not sooner) it has become obvious that there must be a better and cheaper way Unix folks with 14 character file names and modification times stored by the filesystem have little trouble keeping the files newfile >file.dif The >file.dif redirects the standard output to the file. A + may be susbtituted for > if simultaneous coilea |dif fileb and it does, with version 2.0. Version 2.0 of dif.c adds a -u flag which will unsqueeze filea before compf course, that both the sender and the receiver had copies of the same antecdent file. I have written a "new" diff called d of the RETAINED lines of the antecedent file in the difference output. This allows ssed 1.10 or later to verify correctness o to distribute software updates to changing programs than to transmit all of the new files in their totality, even though only synchronized. (If the antecedent files are different, there's no telling what the output file will look like!) For us poor : aring it to fileb. Thus you can say sq filea dif -eu filea.qqq fileb |ssed filea |dif fileb Or you can say dif -eu"!@"!" ʞ!F#x±~#±!b2r~# "2r+}|~#G:rx"2rn^#V# ~#fo^#& ~#fo!+!#!+!#!+!+}|z{|}|z; s! ^#Vr+szʍ! ^#Vr+s~#fo`is#rn}-`i^#Vr+sn}ʊ`i~#fon&ͧ>u_>n>vk>yÄ*< 4Ç*; me out the same! This would munge files where lf/cr has a special meaning (MBASIC continuation lines) or where embedded cr's a$_,:>#)’#>66:?6#*?|£#2͈7#>66:?6>#6>66: ?6#*?">)#>6:?6>s6>@2>#2͈7# filea.qqq fileb |ssed -u filea.qqq |dif fileb to test dif and ssed. (Be sure dif and ssed are exactly where you say they ar+w# +6#!6#2w2x*s!>r<o&F=-` r'~h6!+`W?_7||7zZZ)|/g}/o#|͉k|/g}/o#ɯ2qZZk:q|/g}/o#|/g}/o#:q<2qqDM!xxGyO4ÇÛ5! ~#fo+|! !ͪ! !ͪ! !ͪ! !ͪ! !ͪ! !ͪ!ͭ*! ~#fre used (RTTY art). Unix is a trademark of WECO, CP/M of Digital Research. o work if you said dif -e filea fileb |ssed f)#:>=2>))$>s6#́)($2:>"$2͈7#3͈7#*>">*?">:?ʒ$:>s$)f$>>6:?62͈7#2͈72e, or else pipes will be broken.) Restriction: Since the BDS Standard I/O library and the Directed I/O package are somewha!~7z?` :>ª@w#G.¶ww#?*>?w#> w#.7:77)v|͔`i|)Öxڷz/W{/_ѯzW{_=yOxGæ2qZZ͉M|}ȯ|g}o)|/g}/oo~#fo* s#rͰ#|B * ~#fo!+ !ͪ!ͭV ** s#r*< n}u **? s#rͶ* 6#6 DEFM '$' EAEA 24 DEFM 'cannot seek$' EAEB 63616E6E EAEF 6F742073 EAF3 65656B24 DEFM 'bad crc$' EA>#)f$>6:?6>{62͈7#)«$:?„$>}62i$:?$.́)$>&663i$:?$_,w#:>$h-_,$:?>t confused about translation between CP/M's cr/lf terminated lines and **nixs' \n terminated lines, dif was written to strip c!a{   `OE!y6$ -7rBo&))T])))!y#z/W{/_!9~#fo! ! ! ! ! ! !9~#A"s!`*"!"!Y">2>2>22!"!*( w#w*> s*= s͹|[ ** n}a ** 6i*! ^#Vr+s* ~#fo*! ~#fo *! ~#fo* ~#*K͞+#-#-n>'+FÎr ͖ 8{ Ăw#w#w^#V#*~#fo^#*~#fo^#V#*n^#*$>6_,>6>@2?$*>"> "ZB)Ñ öôç!9DM! ~#fo! ͡**? s#r*< s*r's from the input in order that only one cr appear on the output. As a result, lines terminated by cr/lf, lf, and lf/cr all co":>""G #Ϳ,"x ..Ϳ,.ͭ'5':>?2>I#:>>2> *<-*N*l*2>ͻ':?[#7/ͽ6:>1$:>$:?; fo!9 !ͪC * ~#fo*! ~#foF *> n}F ͼ *% n}ʺ *& ~#fo*( ~#foʺ *& ~#fo*#r*9 ~#fon},±*9 ^#Vr+s*# s#r*9 ^#Vr+sn&** s*9 ^#Vr+sn} *% 6*9 ~#fos! ^#Vr+sn}l* ~#fo ! s#r! ~#fo|! ~#fo|* ~#fo!! !*A 6#6**I~#fo*Ew#w*A6c#6!9DM! ~#fo! s#r! ~#fo!^!9~#fo`is#r> q>ʘ>}>ʛ> be %u '%s' is not the correct Antecedent Illegal command %sDifference file garbled or not made by dif -e Ssed finished  EOF on old file &0ÝZB)** |U!!*= 6* n}.x* n&|x* ( ~#fo!Z !ͪ* ~#fo! !ͪ!ͭ** n}i *# ^#Vr+s* ~#fo *> n} Ϳ **& s#r*; n}q*& ~#fo* ~#fo** n&*# ~#fo*! ~#fo*+ !!!9!%d:EOF C 6#6`iw#w`i~#fo! ~#fo҅`i~#fo))*A * ~#fo s#r`i~#fo))*A ##* ~#fo s#r`i^#Vr‰>ʛ> •>ʡ!! ^#Vr+s`i~#fos! ^#Vr+s6! ~#fo! ~#fo! ^#Vr+s`i~#fosH!9* ~#fo  !9DM*E~#fo|Y *E^#Vr+s*G~#fo  `is#r!p|ʫ `i~#fo*Gs#r* #|Ÿ!!!#* ^#Vr+s'Unexpected EOF on stdin Write Error*Iw#w*A^#Vr+s!|t* n}c ** n}i X ** n}dX *+ ! !ͪ! !ͪ!ͭà *> n}n ͼ[ ! !ͪ!on stdin %sop1=%d op2=%d cmd=0%o linno=%d cmdcrc=%u 0ZB)!9DM*? ~#fo* ͼ`is#rz*> 6*+s!9%s Not Squeezed %s has invalid decode tree size Z0Ý" *% 6*; n}*& w#w* ~# !9DM`iw#w*9 ~#fon}.F*9 ^#Vr+s* ~#foü*9 ~#fon}$l*9 ^#Vr+s!}ü*9 ~#fon&|G~#fo#|š *E60#6u*G~#fo  *Es#rz ! *E~#fo++s#r*G~#fo !9!ïZ* ~#fo*Cs#rz'!*Aw#w*I~#fo))*A *C~#fo|g}o)~#fo*Is#rÿ*I~#fo)ͭ!9ssed.c 2.0 11-4-81 Usage: ssed [-v] infile [outfile] Editing commands on stdin Edited output on ; n}!!ͿÎ* #|A!!Ϳ!* ^#Vr+s`i^#Vr+s!|ڎ*( ~#fo!`i~#fo* fo!x!*= n}4**+ |S*; n}N!|!!*+ *9 s#r*# s#r*! sʳ`i~#fo ?*9 ^#Vr+sn&`is#rl`i~#foü!97*N#"*|)yo|g}o"*+"|*B)!9DM * ~#fo |P* ~#fo!! !* ~#fo ! ! s#r! ~#fo* ~#fo)*A *C~#fos#r!|g}o)~#fo*Is#r*I~#fo|*I~#fo#*Is#r*I~#fo|!stdout -u Unsqueeze infile -v Verbose Can't open %sAt line %d: Can't back up to %d CRC error on Antecedent File %u should͹s#r!9EOF on old file Write Errorý0Z*? ~#fo* ͷ|*; n}!!ͺ*> 6< ZB)+ E)ú !9DM*##s*#s*s! ~#fo͐ ~#fo)*s#r! 6#6`i6#6͐͐ ~#foFw}~F! TORY DRIVE - $` :j°åA $ øB $ 52q2p2r!s# !S"!"g:j_!" :l7.$$$tempout.$$$/! ~#fo͐)~#fo#n}* ! ~#fo͐)~#fo##|! ~#fo͐)?O*.!":kM?'O*."%*.'"0**>G#3# ~ʮ!"[*[^#V|ʮ*#~ #t !2`in} *`i6 w}*! !ͣ`in&2!9JC!ZB))!9DMw}ʸ! n} w*! >*!*[*a|}ʖUä|g}o*Y͜*[͜     r+s,͐ ͐s#r! ~#fo͐ ~#fo)w#w:! ^#Vr+s`i^#Vr+s^!9Can't open %s #|¢!!ADw&|g}o|¸! G|!G+++|D! n} ! !G! n&!Gection/pipe specifierCan't create %s ü!E)C!y"Z)ù)w}* ͪw&|g}o|!dͭw}b*!*s( ERROR - SELECT DRIVE A OR B$  :rʑ=!o)"a!"_!*_*a|"["a"Y"_͙*Y*_|z}ʁ ~#fo͐)~#fo#n}! ~#fo͐)!js#r! ~#fo͐)*s#r*#n&|g}os! ~#fo͐)~#fo#n}!!"c"Y*Y^#V|ʑ͐+ $! *Y^#V|n͐S $I *Y^#V|n͐V *Y"Y!9"s15&:poT))):q_>2jÎ DIRECͰ*ͳ*ͪ!oͭ!z!Ͷw}b\!s#r\w#w\\͹tempin.$$$tempin.$$$tempin*[*a|}ʖUä|g}o*Y͜*[͜}o"]*]^#V"c*Y^#V*c s*Y"Y*[^#V*c sw!! ~#fo͐)~#fo# *! ~#fo͐)~#fo##|y! ~#fo͐)~#fo#!!*#4w |Š}ʑ  ^# ʤÒ~G###~!oʿ#}o |} $  $ *c"c$= \+í+!9DM͐Ҡ"!ý#͐##~#fo¹"!ý#͐##~#fo`is#r͐͐͐~#fo|"͐# 9 ! ~#fo͐n! ~#fo͐nѯgWñ !9 *!9DM͐͐ͽ s#rz !͐͐s#r͐# ^#Vr+s!&'! ^#Vr+s6 &<'! ^#Vr+s`insR'! ^#Vr+s`ins3$͐6!9j'C!!9DM! ^#Vr+sn͐s#r͐^#Vr+sn&æ!9õ!9DM͐Ͳ`is#rz͐Ͳ! s#rz͐?͐!Vr+sn`is`in&$}D8%Ut%X}%Oʆ%C%S%)'͐~#fo|t%! ^#Vr+s6-͐͐~#fos#r! ^#Vr+s! 6 Ì%!!ý#͐+?`is#r͐##~#fo|ʖ#!͐͐͐"͐##~#fo͐s#r͐~#fo͐s#r!#6#6͐~#fo!*!9DM͐2!!͐~#fo!O!;)*!9DM͐!͐>t!>ʛ!>€!>ʩ!`is{ʿ'`in}  '͐! g'͐`in&g'#|¼'!'r'!'!9''!9DM͐͐ $(͐^#Vr+s͐ !9!9DM`iw#w! 6#6͐ n! s{ C! n} Q! ^#Vr+s'! n}-p! 6#6! ^#Vr+s! ^#Vr+sn! 6Ì%! 6! ~#fo! n&! ^#Vr+s~#fo! #ѯgs#ru&! ^#Vr+s! ^#Vr+s~#fos! ^#Vr+su&!File output error; disk full? (#!9DM! n&%|O! n& T! n&c#d'!y9DM! `i]͐`i!͐~#fo͂"ý#͐##6#6͐͐s#r!ý#!9!9DM! n&Aͯ#! n&Zͯ$'x>Œ!>ʼ!>˜!>!!! n&F!! n&!I!! n&!I!! n} !! !I!! n&!I!͐##(͐0(͐7s!&o(͐ ͐͐ ͉͐'`is͐ ͐͐ )͐'`in&#&o(!9~(! s |ʱ͐ ?! nѯg`is#rp͐͐?!9;!9DM͐n}! ^#Vr+sn&! n}&! 6#6! ^#Vr+s~#fo! s#r͐n}u&͐|u&! ^#Vr+s! ^#Vr+sns! ^#Vr+s! ^#Vr+s+&͐6! `È!9×*!9DM͐!͔͐s#rz!͐##w#w͐~#foÝ)J*!9DM͐|æ͐++((!h9DM! ^#Vr+s~#fo! s#r͐! s#r! ^#Vr+sn`is{U'`in}%?'! ! s#r! 6#6! s! s! s͐n}^#Vr+s|Y"!͐͐~#foL!8"!͐##6#6͐͐s#r͐^#Vr+s! ns&Å"*9DM`iw#w͐~#fon&{(}(͐ ?͐^#Vr+snѯg`is#rÌ(͐(!9()!9DM! n&(|)! n&9DM! n&0ͯ' ! n&9ͯ!9DM`iw#w! ~#fo͐n! ~#fo͐n}… ! ~#fo`i^#Vr+sn}‚ !! s#r! n}&! ^#Vr+s!&! ^#Vr+s! n}&!0&! sÑ&͐! ^#Vr+sns{&! ^#Vr+s&! n}&'!+|!æ͐##^#Vr+s|!͐͐~#fo`is#r!b͐##^#Vr+sæ͐##͐?+s#r͐-”$! ^#Vr+s! 4͐n}0¤$! 4͐n&#}$! #$!! s#r! ^#Vr+sn`is{. %! #! s#r! 4! ^#>  )! n&!9DM! n&aͯ>)! n&zͯ  !\&!7*!)&*!)&),C JP MONITR+12 ;MONITOR CONSOLE OUTPUT RTN. ; ; OPNPRT: LD A,0FH ;PORT B=OUTPUT OUT (0BH),A ;PIO/B CONTROL PORT LD AHL ;STORE ADDR. PASSED IN HL LD A,C LD (SECTOR),A ;STORE SECT# PASSED IN C PUSH HL PUSH BC CALL READ ;READ THE SPECIF+w# +6#!6#2w2x*s!>r<o&F=-` r'~h6!+`W?_# x+ ><+~+ x›+|}ó+,7:,*Ͱ+:*+}|2q ,+:qw7||7zZZ)|/g}/o#|͉k|/g}/o#ɯ2qZZk:q|/g}/o#|/g}/o#:q<2qqDM!xxGyO!&="&! BL<"e=Lÿ),7!9")*^#V#z)+V+^+)*ͼ)*)!7:O*,1CH ;INTERRUPT VECTOR B OUT (0BH),A ;LOAD VECTOR REGISTER LD A,87H ;ENABLE INTERRUPTS ; PUSH HL LD HL,PIOINT ;GET IIED SECTOR POP BC POP HL JR NZ,BOMB INC H ;BUMP LOAD ADDRESS BY 256 INC C INC C ;BUMP SECTOR# BY 2 DJNZ RDLOOP!~7z?` :>ª@w#G.¶ww#?*>?w#> w#.7:77+! {w7*!9& 6C#6O#6MG,*|],!\&o,!\&*|o,!!l&!)v|͔`i|)Öxڷz/W{/_ѯzW{_=yOxGæ2qZZ͉M|}ȯ|g}o)|/g}/o7,2q*&:q):B*=B*=r:qo&7:)~:,"s!"u*|ʠ***sNTERRUPT DEST ADDRESS LD (0FF1CH),HL ;STORE IT AT VECTOR LD HL,PRTCHR ;OVERWRITE JP TO OPNPRT LD (OVECTR+4),HL ;SINCE CP/M RET ; ; BOMB: LD HL,DEAD CALL PMSG LOOP: JP LOOP DEAD: DEFB CR DEFB LF DEFM 'cannot boot CP/M $' ; !a{   `OE!y6$ -7rBo&))T])))!y~#foʧ,> +͞,#~Œ,##À,a{ !p,!*w#´,:**,*!ѷ! #z/W{/_!9~#fo! ! ! ! ! ! !9~#A"s!`*"!"!Y">2>2>22!"!¥*! ~ *6*u*+"*"*u#"ul**E)*7**\!**#7:)*K͞+)e&25'+FÎr ͖ 8{ Ăw#w#w^#V#*~#fo^#*~#fo^#V#*n^#* ; ; CONST: JP MONITR+6 ;MONITOR CONSOLE STATUS RTN. ; ; CONIN: JP MONITR+9 ;MONITOR CONSOLE INPUT RTN. ; ; CONOUT: LD AV5:=b#:=#:$=2#v+:<"(">6͋5:&=͋5#*&=|"M1Ϳ5#>6͋5:&=͋5>#͋5>6͋5:'=͋5#*&="<(#>͋5:&=͋, FNxg>Goy!-$"!@"!" ʞ!F#x±~#±!b2r~# "2r+}|~#G:rx"2r~:,"s!"u*|*uZ+*~#1+"*s*uZ+#"u*+"+7*|DM**ͧ+ڋ+><+~n^#V# ~#fo^#& ~#fo!+!#!+!#!+!+}|z{|}|z? 5>s͋5>@2=#R1Ϳ5#(,#:==2=)(@#>s͋5#͘(Y#X1:>͋5¤ ! ~#fo ä ! ~#fo ! ~#fo ! 6#6  ! ~#fo  `i^#Vr+sz !v ! ! ! 6! ! s#r"5! s#r! ~#fo! s! ^#Vr+sn}› ! 6!1! !"5! ! !. ~#fo!F !R s#r! ~#fo`i~#fo)")1*)&|g}o}2)! ~#fo`i~#fo)~#fo#n}^!!^a! ~#fo`i~#fo)~#fo#g!-! . To run this program, type 'TYPESQ ' ýn@ !9DM! ~#fo#n}:4 ! ~#fon&ʹ| ! ~#fo##n} ! ~#!`is{`in}%!O`in} G`i6 *)}G! !`in&O!9mès"É"Ð!9DM{2){2){:&=͋5c1Ϳ5#f1Ϳ52=#(—#>͋5:&=͋5>{͋5c1Ϳ5#(#:$=µ#>}͋5c1Ú#:$=;-͘(#>&͋5͋5f2Ú#:$=$v+è":#6 ! !*9 Can't open %s %s is not a squeezed file %s -> %s: %s has invalid decode tree size TYPESQ  ! ! s#r! ~#fo|4 ! ~#foI !. ~#fo!U  !"1!"1! w#w! ~#fo! ~#foҿ ! ~#fo)) ~#fo`i~#fo)~#fo#j#|! ~#fo`i~#fo)~#fo#!!^a!)4*)}d`i~#fo! s#r! ~#fo! ~#fo~#foAfo! ͷ! ~#fon}21Û 4 ! ~#fo! ͷÛ ! ~#fo`is#r`i~#fon}ʉ `i~#fon}*h `i~#fon}?} ! ~#fo! ͷÛ `i^2)! ~#fo! ~#fo~#fo)")! 6#6`i6#6`i~#fo! ~#fo~#foҰ*)}ð! ~#fo`i~#fo)~#fon}<|ʱ+>1=$,v+2#:$=>$$>͋5v+>͋5>@2$=2#*="<1Ϳ5:=2="<|s$}d$[2Ϳ5z$g$[3Ϳ5>G>)͋5ABORTED: Maximum number of lines exceeded ÷ O"s"!9DM!!ͱ +!!ͱ ! s{ ʹ +! n}+!1! s#r! ~#fo))1##! s#r! ^#Vr+s] `iw#w! w#w!"05!  ! s#rz ! ~#fo| *1! ~! ~#fo! ~#fo)! ~#fo! ~#fo#)~#fos#r! ^#Vr+s! ~#fo^#Vr+s`i^#Vr+s*)++")Ö! ~#fo! ~#fos#r! ~##Vr+sB >2)! ~#foͺ!9 Output drive =%s ERROR - Ignoring %s Can't accept ambiguous name %s @èæïI! ~#fo`i~#fo)~#fo#n}"N! )! ~#fo`i~#fo)~#fo#[#|r! ~#fo`i~#fo)~#fo#!!^a>2)!! ~$#͞*D)͏,Ͷ,v++4ʱ$ðXñ@!9DM! ~#fo! ͤ>21>:21>21`i6#6`i~#fo! ~#fo! ~#fo!ͱ  !!ͱ ! s! n} y*05+|g}o`is#r`i^#Vr+szv! !ͱ *05#"05Pû! n&#fo"1! ~#fo|g}o! s#r! ~#foC ! ~#foڇ ! ~#fo ʇ ! ~#fo ʇ ! ~#fo ʇ ! ~#fo fo! ~#fo~#fo)w#wä! ^#Vr+s`i^#Vr+sî!9Can't open %s ! {A!! s#r! ^#Vr+sn`is{.‰! {! s#r! 4! ^#VrFile output error; disk full? !"5!c"5þT!9DM*5*5+"5* 5KK! ~#foͻ`is#r!`is#r͐^#Vr+s! ns&16$Þ$$!9DM͐L!i͐##~#foe!i͐##~#fo`i!9DM`iw#w! ~#fo͐n! ~#fo͐n}[! ~#fo`i^#Vr+sn}X!Ç! ~#fo͐n! ~#fo͐nѯgW^#Vr+s!ң! ^#Vr+s6 |ù! ^#Vr+s`ins! ^#Vr+s`insð͐6!9!9DM͐n} ! ^#V`is#rz:͐! s#rz:͐?͐@!@!9Uv"Ì#!9DM͐|lL.͐+++|ƒ!O+sn`is`in&~}DʵUXOCISzæ͐~#fo|! ^#Vr+s6-͐͐~#fos#r! ^#Vr+s! 6 ! 6~#fo" 5* 5#|!0u"5* 5KK! ~#foͻ"5|=!KK*5++"5* 5K!9ZI!9DM`iw#w*5#"5! ~#fos#r͐͐͐~#fo(͐ʲ!i͐+?`is#r͐##~#fo|B!͐͐͐+͐##~#foA r+sn&!9DM! n&Aͯ> ! n&Zͯ!9DM! n&aͯm ! n&zͯw !9DM!petition. Of course this game will definitely win over the hearts of the young ones but watch out, if you are a beginner, yo*uœ$#"u*+"`$7*|DM**$$><$~# x$ ><$~+ x$|}$?&7:,#z/W{/_!9~#fo! ! ! ! ! ! !9~#A"s!`*"!"!Y">2>2>22!"!o` !\&!7*!"&*!"&"!, !\&!TELk7 #*K͞+) (35'+FÎr ͖ 8{ Ăw#w#w^#V#*~#fo^#*~#fo^#V#*n^#* ^#Vr+sn`is{ `in} ­ ͐! t ͐`in&t #| !  ! !9 !9DM͐͐ 1!͐^#Vu should run this on a 2.5 MHz machine, at 4 MHz you have to be quick. (Best to keep this one hidden if you plan to continue u*$:*%}|2q H%>%:qw9%! {w7*!9& 6C#6O#6M"!@"!" ʞ!F#x±~#±!b2r~# "2r+}|~#G:rx"2rZ%s"7*^#V#z#+V+^+#*#!:#!##Broken pipe 7,2q*&:q):ʄ#=ʄ#=n^#V# ~#fo^#& ~#fo!+!#!+!#!+!+}|z{|}|zr+s͐ !͐0&!͐7s!&|!͐ ͐͐ ͉͐ `is͐ ͐͐ )͐ `in&#&|!!sing your system.) CBIOS for TANDON drives This is for all you who want to use the new Tandon slimline drives on your sys‰%*|Ÿ%!\&ñ%!\&*|±%!!l&!~#fo%> +%#~%##%a{ !p&!*w#%:+w# +6#!6#2w2x*s!>r<o&F=-` r'~h6!+`W?_r:qo&7:)~:,"s!"u*|#**s#! ~#6*u*+"*"*u#"u7||7zZZ)|/g}/o#|͉k|/g}/o#ɯ2qZZk:q|/g}/o#|/g}/o#:q<2qqDM!xxGyO9!9DM! n&0ͯڰ!! n&9ͯú!Å!!9DM`iw#w͐~#fon&ͷ!}"͐ ?͐^#Vr+snѯg`tem. They're small, quiet, require no AC, and turn themselves off. And this is the problem. The Big Board assumes they are on i** &*!ѷ! , FNxg>Goyc&$:!~7z?` :>ª@w#G.¶ww#?*>?w#> w#.7:77##$É"H#7*$\!* $7:)~:,"s!"u*|*uʜ$*~#s$"*s)v|͔`i|)Öxڷz/W{/_ѯzW{_=yOxGæ2qZZ͉M|}ȯ|g}o)|/g}/ois#r!͐"!9"B !9DM! n&"|D"! n&I"! n&7*+++:G_*DM!n"o& 7:O*f it hasn't turned them off. Robert Edison's new CBIOS should fix all that and operate your parallel printer port too. You caB !a{   `OE!y6$ -7rBo&))T])))!y ! ~#fo! !> ö `i^#Vr+s] ! ~#foG !9 BAD COUNT %s Output drive =%s ERROR - Ignoring %s Can't acceppes. Omit other parameters for help and prompt Parameters are from command line or one-at-a-time from standard input and are oucksum error in %s Á$+$!9DM*)}P! )`is{ M! )`ise!`is{e`in}t!Þ`in} –`i6@"<*<~*<*21>:21>21`! s#rzʜ!' ~#fo*05Ҝ! ~#fo|g}o! s! n& Y! n&~ҍ! n} v y ʄ ʄÇÙ!' ^#V!>15:<15>{15Y/e56!'":}15Y/!:&1515\0!:</"͞) :<@"ͧ*͞)Z!:<>L">15t ambiguous name %sA Iïø&Áoò)fó!9DM`i!- ~#fo #|z !- ~#fo!z! q!' wtput drives and input file names. Empty to quit. *J ÀøIxò !9DM! ~#fon}- ! ~#fo#n&8 F͝}225} *)}–! !`in&Þ!9üI+$.$!9DM{2){2){2)! ~#fo͐ ~#fo)")! 6#6`i6#6͐͐i6#6`i~#fo! ~#foC! ~#fo`i~#fo)~#foͪ`i^#Vr+s! ~#fo! !ͧ!2 !ͧ`iw#w`i~#for+sÍ! 6.! n&/ *25}ʬ! / j! ! 5 #|! !! X`i2 ! s#rz2*1! ~#fo"1)>15>@2G>)15ç"#(l'ͷ**͞)!2"ͫ#w!"1 `i# vʸ !- ~#fo!! j`i# ! s#r"5! s#r! ~#fo`i& s! ^#Vr+sn} ! 6!1ʏ ! ^#Vr+s!"05! ~#fo#n} ! ~#fo#; "05| ! ~#fo#! !> ö ! ~#fo#n}:O ! ~#fon&A |5 ! ~# ~#foҹ*)}ù! ~#fo͐)~#fon}dâ! ~#fo͐)~#fo#n}c! )! ~#fo͐)~#fo#ͪ͡! s#rz! 6 #6`i~#fo! ! ~#fos{ `i~#fo! 6`i^#Vr+st! n}! ͪ! n}aͭ!9! ! ~#fo8 #|/! !! X! ~#fo*1X! !! ! ; ! > `i> !)9Can't '-L3#ͷ&"x0e5G)͍'ͫ'ͷ**͞)b)~F9#^#V##!2)))U~,L3G~`2<2<#~2<~?>! ) !"5! ) ! !- ~#fo!, `i# ! s#r! ~#fo|^ ! ~#fox !- ~#fo!! j!"1!fo##n}2 !"05! ~#fo! D ! ~#fon}21ö O ! ~#fo! !> ö ! ~#fo`is#r`i~#fon}ʩ `i~#fon}*ʃ `i~#fon}?#|¯! ~#fo͐)~#fo#!!ͭͰ>2)!! ~#fo͐)~#foͳ|*)&|g}o}2)!)4! ~#fo͐)1.5 08/02/81File unsqueezer version %s by Richard Greenlaw 251 Colony Ct. Gahanna, Ohio 43230 Accepts redirection and piopen %s %s is not a squeezed file %s -> %s: %s has invalid decode tree size Can't create %s Write error in %s ERROR - cheT#=2<#^#V#^#V#"<^#V"<:<~#*<!:<@ʏ#"<*<#w"<*<~ʫ#¶#,L3;+"<*<+"! ~#fo`i^#Vr+sn};!j! ~#fo͐n! ~#fo͐nѯgWj!9 #{"õ# n&!File output error; disk full? !"5!c"5]!9DM*5*5+"5* 5TT! ~#fo`is#r!͐~#fo2%!͐##6#6͐͐s#r͐^#Vr+s! ns&r%@&Ñ&!9DM͐s#r! ~#fo͐ ~#fo)w#wí! ^#Vr+s`i^#Vr+s!9Can't open %s &*~#&"*s*u>&#"u*+"&7*|DM**͋&o&><&~`is#r#͐$!97:O*o`  !\&!7*!m$&*!}$&m$!, )v|͔`i|)Öxڷz/W{/_ѯzW{_=yOxGæ2qZZ͉M|}ȯ|g}o)|/g}/ois{="`in} "͐! !͐`in&!#|:"!C"!!C"!9!9DM! n&aͯw"! n&zͯ!9 ! 6! ~#fo! n&! ^#Vr+s~#fo! vѯgs#r ! ^#Vr+s! ^#Vr+s~#fos! ^#Vr+s ! n+ x&|}×&'7:,*͔&:*ʹ&}|2q &&:qw&! {w#!\&!TELk7î$&I+$7*^#V#z¶$+V+^+$*ͥ$!$!ͨ$ë$Broken pipe 7,2q*#z/W{/_!9~#fo! ! ! ! ! ! !9~#A"s!`*"!"!Y">2>2>22!"!DM! n&0ͯڦ"! n&9ͯ!9DM! n&Aͯ"! n&Zͯ"!9DM͐n} #! ^#Vr+sn&*K͞+655O'+FÎr ͖ 8{ Ăw#w#w^#V#*~#fo^#*~#fo^#V#*n^#*}Ž ! 6#6! ^#Vr+s~#fo! s#r͐n} ͐| ! ^#Vr+s! ^#Vr+sns! ^#Vr+s! ^#Vr+sé ͐6! !7*!9& 6C#6O#6M.'*|D'!\&V'!\&*|V'!!l&!~#foʎ'> +ͅ'#~s'&:q):)%=)%=r:qo&7:)~:,"s!"u*|ʇ%**sŒ%! ~"!@"!" ʞ!F#x±~#±!b2r~# "2r+}|~#G:rx"2r""# #!9DM͐͐ a#͐^#Vr+s͐ N#͐0V#͐7s!&ì#͐ ͐͐ ͉͐#n^#V# ~#fo^#& ~#fo!+!#!+!#!+!+}|z{|}|z s#r! n}J!! ^#Vr+s!J!! ^#Vr+s! n}A!!0D!! s!͐! ^#Vr+sns{s!! ^#Vr+sJ!! n}ʤ!!##g'a{ !p'!*w#›':**ʲ'*!ѷ! , FNxg>GE +w# +6#!6#2w2x*s!>r<o&F=-` r'~h6!+`W?_fon&5 | ! ~#fo##n} ! ~#fo!; 8 ! ~#fon}2>2 ! ~#fo!M !; 2 ! ~#fo`is#r`i~#fon}8 `i~#fon}͡! s#rzœ! 6 #6`i~#fo! ! ~#fos{ `i~#fo! 6`i^#Vr+ss! n}! ͪ! n}`ͭ!9`is{ ! 6`is2!`is{2`in}A!k`in} c`i6 *6}c! !`in&k!9ÉÜ&Û%ó1'-L3#ͷ&"x0e5G)͍'ͫ'ͷ**͞)b)~F9#^#V##!2)))U~,L3G~`2<2<#~2<~?> ! ~#fo!S!ͬ >!  ! ~#foͯ #|Z ! ~#fo!s!ͬ ! Ͳ >!">!ͦ ͵ ! ͸ ! Ͳ !!~7z?` :>ª@w#G.¶ww#?*>?w#> w#.7:77* `i~#fon}?, ! ~#fo!b !; 2 `i^#Vr+s ! 6!>! > ! ~#fo#n}:i ! ~#fo##q ! ~#fo! > ! 1.5 08/29/81File squeezer version %s by Richard Greenlaw 251 Colony Ct. Gahanna, Ohio 43230 Accepts redirection and pipes*ö1&!9DM{26{26{26! ~#fo͐ ~#fo)"6! 6#6`i6#6͐͐ ~#fo҆*6}Æ! ~#fo͐)~#fon}<T#=2<#^#V#^#V#"<^#V"<:<~#*<!:<@ʏ#"<*<#w"<*<~ʫ#¶#,L3;+"<*<+"1o! ~#fo͐)~#fo#n}0L! 6! ~#fo͐)~#fo#w#||! ~#fo͐)~#fo#!!z}>2@"<*<~*<*2>! ! !ͧ!c !ͧ>2>>:2>>2>`i ~#fo!!ͬ # !ͦ ! Ͳ !  !  Ͳ !9 %s -> %s: Can't open %s for input pass 1 Can't create !>15:<15>{15Y/e56!'":}15Y/!:&1515\0!:</"͞) :<@"ͧ*͞)Z!:<>L">156Q `i^#Vr+sÆ ! ! > ! ! ~#foA !9 Output drive =%s ERROR - Ignoring %s Ambiguous name %s ignored %st drives and input file names. Empty to quit. *D % &Û%:&ã !9DM! ~#fon}-j *>}͝}2>2 ! ~#fo#n}: ! ~#6!! ~#fo͐)~#fò|¶*6&|g}o}26!64! ~#fo͐)~#fo#"6! ~#fo͐)~#fo#n}! ~#fo͐)6#6`i~#fo! ~#foB! ~#fo`i~#fo)~#foͪ`i^#Vr+s! ~#fo! !ͧ!/ !ͧ`iw#w`i~#fo%s analyzing, squeezing, Can't open %s for input pass 2 ERROR - write failure in %s done.)à1ó1!9DM*6}! 6)>15>@2G>)15ç"#(l'ͷ**͞)!2"ͫ ignored ( already squeezed?).QQQ &Ü&Û%&:'!ßcNk'è(!9DM! ~#fo! ~#fo!Gͦ ! ! ~#foͩ #|F !s#r! ~#fo͐)"61*6&|g}o}26! ~#fo͐)~#fo#n}\!!z}! ~#fo͐)~#fo#̓!:! ~#‹`in&Ï`in*3O! ng|g}os*3O! nѯg"3O*2O! nѯgW}22O`in&Ï*2O&+`in*3O! ngf! ~#fo*>f! ~#fo#n}:¸! ~#fo##s#r! ~#fo! ~#fon&i! ^#Vr+sn}¸*)Lͩ!*)L`i^#Vr+ss#r! ~#fo###! ~#fos#r! ~#fo! ~#fos#r! ~#fo! ~#fok">~#fo! ~#fok">~#fos#r!`i^#Vr+ss#r! ~#fo###! ~#fos#r! ~#fo! ~#fos#r! ~#fo! ~#fok">~#fo! ~#fok">~#fos#r!k">~#fo! s#r! ~#fo! ~#foa! ~#fo|a! ~#fok">! ~#fos#r! 6! ^#Vr+s! n}+! ~#ffo͐)~#fo#͆#|! ~#fo͐)~#fo#!!z}!64*6}F͐! s#r͐͐ ~#fo'! ~#fo͐)!|g}os! n*2OѯgWs*0OU>22O! n}M!R`in&Ï! ~#foQ"0O#|q!"0O*0O),M~#fo"3O! s#r! ~#fo! ~#fof! w#w*)L`is#r! ~#fo! ~#foE`i~#fok">###~#fo! s#r`i~#fok">~#fo ~#fo##! ~#fok">##n&! ~#fok">##n&Ns! ~#fo+!! ~#foK`! ~#fo~#fo")L! 9!! s#r~#fo#|#! ~#fo^#Vr+s`i~#foͨ!  6#6!  ~#fo#|T!Oͫ!  ~#foͮ!  ~#fo͉s#rͨ! o! w#w! ~#fo! ~#fok">~#fo! ~#fo͉s#r! ^#Vr+sÒ! 9ý!9DM! ~#fo++ ~#fo͐#)~#fos#r! ^#Vr+s͐ ^#Vr+s`i^#Vr+s*6++"6l͐ ͐s#r! ~#fo͐ ~#fo)w#wz! ^#Vr+s`i^#V*0O+Ln}22Of!9!9DM`iw#w`i~#fo`i~#fok">w#w`i~#fok">##6`i~#fok">###6#6`i~#fok! s#r! ~#foͩҫ! ~#fo#ü*)L! ~#fo! s#r! ~#foͩ! ~#fo#*)L! ~#fo! s#r9DM`iw#w`i~#fo3`i~#fo+L6`i^#Vr+s !9B<!9DM! ~#fok">###~#fo`is#r! ~#fok">~s#r! s#r! ~#fo! ~#fok">~#fo|! ~#fok">##6! ^#Vr+s)! ! ~#fos#r! ^#Vr+sÊ! `is#r`i~#fo|?! ~#fo+`i~#fo! ~#fo`i^#Vr+s!9Qý !9DM`i6#6! ~#fo! ~#fo~#fo!r+s!9Can't open %s 6#6`i^#Vr+sæ!9!9DM! s#r! s#r! s#r! ~#fo! ~#fok">~#fo! ~#fo! ~#fo! ~#fo! ~#fof! ~#fo! ~#fof! ^#Vr+s`i^#Vr+s1! 9T !!9DM`i6! 6*2O! nѯgW! n}#fo! s#r`i~#fo#|! ~#fo#|! ~#fo+L! ~#fos! ~#fo),M*.O! ~#fo|g}os#r! ~#fo~#fo! ͱ! ~#fo! ʹͷ*)L!ͺ#|>ͽ>22O!"0O! 9*** rescaling ***, l*"Ó"!9DM! ~#fo!v s#r! ~#fo! ~#fo! ^#Vr+s)~#fos#r! ~#fo+!! ~#foK! ~#fo~#fo! s#r`i~#fok">! s#r! ~#fo} ! 6!q*6}o!:!!:!:!|!*6}o*6!s#r*6w#w*6*6tempin.$$$tempғ! ^#Vr+s! ~#fo! ~#fok">~#fos#r! ^#Vr+sC! ~#fo#! s#r! 6! w#w! ~#foo! ~#foG ! !ôî`i~#fo#|`*.O! ~#fo}/o|/g|g}o".O`i~#fo! ~#fo#?#|`!ô! ~#fo#|ʮ*.O! ~#fofo͐k">##n&͐k">~#fo͐!W% $`i^#Vr+s2$!u% $`iw#w͐3%͐+Ln&'%͐),Me error in putw() ß"k'Û%ó1!9DM! ~#fo! ~#fo͖"#|"!"!͙"!͜"Write error in putc() ")!9DM`is#r͐͐͐~#foͫ(͐5)!)͐+?`is#r͐##~#fo|)!͐͐͐ͮ(͐##~ҋ !&! ~#fok">~#fo! ~#fok">~#fo ! ~#fok">##n! ~#fok">##nѯgW !&!&s#rz '!͐͐s#r͐##6#6͐~#fo@'2!9DM͐Z'!͐~#fo='w'2à13!9DM|g}o".O! ~#fo! ~#fo#?#|®!ô!ô!9H ý!9DM! ~#fo?#`is#r! ~#fo! ~#fo)~#fo! ~#fo͐+Ln&͐͐!% $`i^#Vr+s$!9 Encoding tree - root=%3d %3d w=%5u d=%3d l=%3d r=%3d Huffman co! ~#fo"`is#r`i~#fo#|.#*>`i~#fo">`i~#fo7#!9I#r+ &!9DM*>}#!#C#`iw#w͐Һ#͐|#fo͐s#r͐~#fo͐s#r!!͐~#foͱ()͐##6#6͐͐s#r!)!9*à1A>2!>!"r+ó1!9DM*!>};!R!!!">2!>! ~#fo!">*>>a!>p!>m!>z!!>2!>!!!+|—'! n&n'͐++|µ'! n&!q'͐+++|'! n&!q'͐++++| (! n} '! !q'! n&s#r`i~#fo! ~#fo `i~#fo! ~#foq! ~#fo`i~#fo#)~#fo! ~#fo`i~#fo)~#fo|q`i^#Vr+s! ~#fo`i~#fodes %3d %4X l=%2d c=%4x ä%+d/!y9DM! `i͞%͐`i͡%%!9%//!9DM! n&%|ͣ&! n&’#͐!#F#͐k">~#fo!$F#`i^#Vr+sg#!$C#!9 Counts after 1st algorithm and maybe scaling %4X 4!9DM͐|*)*͐+++|/*!)*͐##^#Vr+szY*͐^#Vr+sn&*!͐͐~#fo)`is#r!">! ~#fo!">*>¶!*>Ҷ!*>#">Å!*>>!>!>!>!!*>">>2!>*>>2!>!>2!>*>">>2!q'͐##^#Vr+sz=(͐^#Vr+s! ns&!͐͐~#fot'g(!͐##6#6͐͐)~#fo! ~#fo| ! ~#fo! ~#fo)! ~#fo`i~#fo)~#fos#r! ~#fo`i~#fo)! ~#fos#r! ~#fo`i~#fo! ~%|ͣ&+r+!y9DM! `i&`i&!9!9DM͐`is#r͐n}d&! ^#Vr+sL&! ^#Vr+s͐ns! ^#V%5u $ &!9DM*>}3%*)L!<% $`iw#w͐$͐k">~#fo|ʼ$͐k">~#fo͐k">###~#ږ*͐##^#Vr+s*͐##͐?+s#r͐͐s#r͐^#Vr+sn&*!9!9DM`iw#w! ~#fo͐!>*>!"!!!Bug - bad state 6"ä+Û%ó1!9DM! ~#fo! ~#fo-"! ~#foz"!|"!0"!3"Writs#r͐^#Vr+s! ns&ô(3Å33!9DM͐(!)͐##~#fo(!)͐##~#fo#fo!9!9DM! n! nѯgWͩ= ! n&B ! n&!9DM! ~#fok">~#fo! ~#fok">~#for+sn}d&͐Ó&!9â&u2!9DM͐!͐͟&s#rz&!͐##w#w͐~#fo&ù2!9DM͐͐&H n! ~#fo͐n}=+! ~#fo`i^#Vr+sn}:+!i+*! ~#fo͐n! ~#fo͐nѯgWi+!9x+2!9DM1|ʕ1! n&Ú1! n&7:O*o`  !\&!7*!1&*!2&1!,`is{ʿ/`in}  /͐! g/͐`in&g/#|¼/!/r/!/!9!9DM! n&Aͯ/! n&Zͯ! 6Ì-! 6! ~#fo! n&! ^#Vr+s~#fo! +ѯgs#ru.! ^#Vr+s! ^#Vr+s~#fos! ^#Vr+su.!|2q /4%4:qw 4! {w7:)~:,"s!"u*|ʗ4**s͐n}ʢ+! ^#Vr+sn&u+À+ê+k'!9DM͐͐)ͧ+|+͉͐͐ͧ+|+͐!,,00 !\&!TELk762÷4Û%ó17*^#V#z>2+V+^+I2*-2!g2!0232Broken pipe 7,29DM! n&aͯ(0! n&zͯ20,0!9DM͐͐ ҂0͐^#Vr+s͐ o0͐0w0͐7s!& n}.! 6#6! ^#Vr+s~#fo! s#r͐n}u.͐|u.! ^#Vr+s! ^#Vr+sns! ^#Vr+s! ^#Vr+s+.͐6! œ4! ~—46*u*+"*"*u#"uc47*!9& 6C#6O#6M4*|4!\&5!\1h1!h9DM! ^#Vr+s~#fo! s#r͐! s#r! ^#Vr+sn`is{U/`in}%?/! ! s#r! 6#6! s! s! s͐n}q*&:q):ʱ2=ʱ2=r:qo&2ö1u27*ͼ2\!*Ϳ2#  3 >0͐ ͐͐ ͉͐/0`is͐ ͐͐ )͐/0`in&#&0!9!9DM! n&0ͯ1! n&9ͯ! s#r! n}.! ^#Vr+s!.! ^#Vr+s! n}.!0.! sÑ.͐! ^#Vr+sns{.! ^#Vr+s.! n}&/!&*|5!!l&!~#foF5> +=5#~+5##5a{ !pr5!*w#S5:**j5*!-”,! ^#Vr+s! 4͐n}0¤,! 4͐n&+},! +,!! s#r! ^#Vr+sn`is{. -! +! s#r! 4! ^# _ 37:)~:,"s!"u*|*uʃ3*~#Z3"*s*uƒ3#"u*+" 10!9DM`iw#w͐~#fon&1}X1͐ ?͐^#Vr+snѯg`is#r1͐_1!9n1/!9DM! n&k ^#Vr+s!&/! ^#Vr+s6 .Goy5$Vr+sn`is`in&,}D8-Ut-X}-Oʆ-C-S-)/͐~#fo|t-! ^#Vr+s6-͐͐~#fos#r! ^#Vr+s! 6 Ì-!G37*|DM**3ڴ3><3~# x¨3 ><3~+ x3|}3Ü57:,*3:*3}I  Pittsburgh Pittsburgh, PA 15261 PACMAN.COM - A pacman type game written in BDS - C and adapted for the PACMAN.DOC Big Boles squeeze (sq.com) and unsqueeze (usq.com) SQ.COM files so they take up less room. It's just USQ.COM sq filename.s a lifesaver VERIFY.DOC for him. It checks the disk and tries to restore bad sectors. (How's that for fancy?) It repo with color crayons, they'll love it. Better yet, make an extra copy for yourself and "borrow" the crayons  out the shift lock "feature" on the Big Board so you can send nulls to other systems etc. without casing yard. Note: if the game freezes up you are probably PACMAN.C entering illegal commands or in lower case. PACMAN.DOC PACMasm creates filename.aqm usq filename.aqm creates filename.asm typesq filename.dqc unsqueezes and trts any sectors it is unable to restore. Simply enter VERIFY and select a disk and away it goes. It for an evening. UNLOAD.COM - a nifty utility that recreates a .HEX file from a .COM file. Useful in sending files byour own system. (I'm sorry, bad pun.) Stay tuned for more from Gordon in future disks. -z. ------------------------------------------------------------------------- The following were submitted by: GaONST.C PACUTIL.C FAST.COM - Gordon says that this little screamer buffers FAST.DOC the disk track by track for reads, wrypes file on the console. --------------------------------------------------------------------------- The following were sleaves the data intact (or even more intact) on the disk. FORMAT4.COM - Brett also sent this update of the Jones formatter. T MODEM.COM DIF.COM - These are CPMug routines to help folks pass along software updates DIF.DOC without having to pass a Gordon Banks 1360 Scaife Hall Univ of Pittsburgh Pittsburgh, PA 15261 ------ry Kaufman 206 S. 13th Street Apt 810 Philadelphia, PA 19107 (215) 735-2841 MODEM7A.COM - Modem7 adaptedites, and directory accesses which doubles the speed of programs like ASM, MAC, etc which bang the disk ubmitted by Gordon Banks MD (PACMAN.DOC file submitted by Gary Kaufman) Dr. Gordon Banks MD 1360 Scaife Hall University ofhis one can also be assembled by the Crowe assembler. -------------------------------------------------------long the whole file each time. SSED.COM This software is especially useful for phone data transfers. TYPESQ.COM - These fi-------------------------------------------------------------------- VERIFY.COM - Brett Berg sent me this one which he says i for port a MODEM7B.COM - Modem7 adapted for port b SNOOPY.TXT - What else ? (list this to a printer and turn the kids loosea lot. See the .DOC file for more exciting information. NOLOCK.COM - This is another nice utility. It NOPs J x }I~24~21~25nf"2>(>2Knf"/*~624~72125n8&"2n5&"/BK80)xo*2>2:͟0 x ;::=2: >2:~2;#:;2;*1,&̓xGyOzW{_ #q#!Y!YO and tries to restore bad sectors. (How's that for fancy?) T{(#">:29262827:6!8_!@0:7( {@:>!8w:78:(*1&#))*/#) !|, !y9) /|B#|/W}/_*2#;?k) UNUSED Entries/Bytes: *A}/o|/g#* file for a list of commands and example command lines. Denny modified this routine so it works faster|}/o|/g# ~˿(~#(_0~#OF#|  {0} (>- x( 8G( sL1Y_--------------------- Denny Fox 6616 Sheridan Ave S Richfield Mn 55423 DUMPX.COM - This is a powerful little disk utilit/#?/z?k USED Files/Bytes: *@&?/*<;?k [810504]ɯ26"E!@0*E[C:6(<~264 on the Big Board than the original version. ---------------------------------------------------------------------------:@( =Gw {L!>2K"<!]~  ?N >?2h!\~(_00A2ɯ2@!"A\0*A#"A) on the disk. FORMAT4.COM - Brett also sent this update of the Jones formatter. This one can also be assembley by S.J. Singer. DUMPX.DOC See the .DOC file for a list of commands and example command lines. Denny modified tww*C#[E *C:K( ~#( ( #:6yw~(#.~(#~^*<"<;?k` PACUTIL.C VERIFY.COM - Brett Berg sent me this one which he says is a lifesaver VERIFY.DOC for him. It checks the disk `ƀo&"C0y"Ey *E8 x[E8x8 g x(x0}MyD8yx~w*@&[d by the Crowe assembler. ---------------------------------------------------------------------------- Denny Fox 6616 ShK his routine so it works faster on the Big Board than the original version. ------------------------------------- "@ "B *D T!P "> *>    "> :@2 X: XXXXXXXX.XXX :  m mBXʤRʧD P Send file to Punch Device C Copy file to another Disk R Rename file ce ++  =  Replace ?  Ym  t  ++ Destination Directory Full ++m*+*F  A MAP OF THE GROUP ALLOCATIONS FOR THE ENTIRE DISK OR THE DIRECTORY SORTED ALPHABETICALLY. DUMP TRACK 3 SECTOR 7 DUMP *>     5 ++ Not Found ++m Deleted*>  "> *D f Q"D P m*> m --------------------------------------VʗLʤPʩC>Sʵ e*> \ U Beginning of List *D  ">  < *>  "> Û *> *D ›D Delete file X Exit to CP/M B Backup one file in List S Restart   x  ++ No Memory Available for Copy Buffer ++mi`"J 2O !"L *F "H *H   *H "H *L #"L 1 e:] 0:e 0!%] 0???????????2h2|\ ++ Not Found ++ä MICRO RESOURCES DIR List Emptyä >ë>ë>2N *>    ! 6#  ++ File Cannot Be Opened ++ION IN THIS MODE IS SIMILAR TO OTHER UTILITIES LIKE PIP OR DDT. THE OPERATION DESIRED MAY THEN BE TYPED IN AS FOLLOWS: DU End of List !P "> Û*>     New Name ?   !! Fm#~ w! 6# 6 #!! N# on another Drive sp or cr Forward to next file in List H or anything else Display this help message !P "> *J  >2O *F "H *L |z +"L *H "H    ++ Disk or Directory Full or error on Write ++m:O ECTORY "WASH UTILITY" Ver 1.3 Command Function ------- ---------------------------- m2  m!~m_:N O #*>    ! 6#T2 !!   £ ++ MP FILE.NAM DUMP A:FILE.NAM DUMP B:FILE.NAM OR DUMP MAY BE TYPED SEPARATELY AS: DUMP *FILE.NAM *B:FILE.NA  i&6   d.=w# d d.=*!  X X.Xw#B! 6#] !  G>w# l: 2O! :\:  "> \*> "D "F \ ʕ!P "@  "B *B *@  F  P *B  "B *D T*@   m ++ Destination Close Error ++m New Drive ?  mA<2\> 2]2ez{}o|g~# V View file at Console (any key aborts) L Print file to List Device Source File Cannot Be Opened ++m Destination Drive ?  A<2 G:  ++ Cannot Select Same Disk as SourM (THE * IS A PROGRAM PROMPT) THE PROGRAM MAY ALSO BE USED TO DUMP DISK SECTORS DIRECTLY, DUMP ANY CP/M EIGHT SECTOR GROUP,  !  ! 6#‘  ++ Name Already Exists ++ *>  !   m ++ Not Found ++mL  ~_#  `_ _D =D :D ;D D 7#F Nwy#P Full or error on Write ++m:O ìALTERNATE SECTOR VALIDATE D. FOX 5/80 $ û *$ >2 1 2 !" !s#  >!\!s#  ULD BE SELF EXPLANATORY.  >! Z#WRITE*! 6Z:STOP c!0T O)))) C @}v.q |€}  m ++ Destination Close Error ++m New Drive ?  mA<2\> 2]2ez{}o|g~##!A:1!)+B:8W2 =>2 Kx~# @!@@wx?Gr#_ 7!@q "   è͚Ɛ'@'_: ͑: ͑  * ~͑  ! s#   > @}.Ð :  ~_#  `_ZÏVALIDATE!@ZçGROUP !@ZüG  !@ZMAPg !@ZDIR !@ZTRACKROR WILL BE DISPLAYED. WHEN VALIDATING THE PROGRAM READS EVERY SECOND SECTOR FOR SPEED. AS WITH OTHER CP/M UTILITIES ^S "FR!@ZT f#~!#:F0 ?))) O /+}" 2 !@`ZfSECTOR~!@yZ{S V!9" 1 2 :):og,w!L CP/M DUMP UTILITY VERS 1.3A $, xCOPYRIGHT 1978 BY S. J. SINGER $W EEZES" THE DISPLAY, AND ^C RETURNS TO THE MONITOR. DUMP CONTAINS MANY ERROR AND CONSISTANCY CHECKS. THE RESULTING MESSAGES SHO:+}" 2 2 " @Zâ-:+}" 2 ! G~2 p8 * @ZEDIT8 EDIT - $ !  s#