IMD 1.15: 15/05/2007 14:14:53 fog mis 004   \X COPYRIGHT (C) 1979, DIGITAL RESEARCH _͌> ͒> Ò> Ò͘~#͌ì _2<ϯ2 Ї!ֶ2:2a{_:ַʖ:ַ>Ľʖ:=2–!B!6#5ʖ:ַĽ!ͬʧ )!F#xʺ~0wëw!" !~6ͽ:ý(!#͘*~ "ѷ"͌#>?͌͘ =_.:;<> Oхo$>!Y2*O"ʉ@G:ʐ:wÖx2p0ʹ#*©6?ëw˜0ï#6 ¹.0#*6?w0#6 #6" #~?  xDIR ERA TYPESAVEREN USERS!yO#< Ty#O 3ү21y_͸2y2ͽ:Ϸ˜1͘A͌>>͌92^ :ַ¥.!_~#fow]ԭՎե!v"!çREAD ERRORçNO FILE^:ַ ! ~ 3#0 Wx x р т G ~ # 3x~#B!Y~ɯ2:ַ=!־ý:ַ=!־:ý^T!~  6?#ˆ:`O> K{͘A͒>:͒͢>:͒͢xK > K > ͒x  ͢ØÆ^ BRͧ9!5‚#~Y‚#"T<ÆALL (Y/N)?^ Tʧ͘!6!~ڇ ԯw4!Y~ʆ͌†t=ʆf ^ T ԯ2o&)|+!<ͧÆNO SPACE^ :Ty!B*O=?_s#"^sG!~Yոpsp2mÆÆf ͧÆFILE EXISTS _: É: :ַʉ=2)ͽÉ T!@k!}|q=qf^!~2>`~2֯2\!!B!~> >#0~O#Cx2͘1)ͽÂf zͧÆBAD LOADCOMf^: !ֶ Â$$$ SUBSיץ׫ױ"C{2!"E9"1Aگ22!ty)K!G_^#V*Cِ~E ,&-AGMSڛ!!ô!ô!Bdos Err On : $Bad Sector$Select$File R/O$:BA2!~6 O͐  :ڷE B 2>: ڷb# : ڷy! 4 5~yy5 6yҐ^H@Oy H H: –ͬ  #H: ! ھ Hù H H $O͐: 2 *CN#   x: 2 p&x~+é7د2 H! >w_: ! ھ5ͤNkͱ¦ͱxʊ#Nx: ڷ! ږ2 ͤ! 5™#wO~x½p Hy<< ʑ :!qMD#2E>! ^#V w#P:BO|^#V#"##"##"##"!O*!O*|!6ʝ6>*w#w*w#w'û*! J*""!N#F*^#V*~#foyx*{_zW+*yx#*DM*s#r*s#ryOxG*0MD!!N: EG>O: \۷Sۀ*C :qn& ^#V>O^"*}:*)=":O:䡵o"*C *C!ͮ~2~2ͦ:2ͮ:ۯO:w:w |g}o*䯆#  ):BO!yoxg*:BO}!N#F "*#*s#r^ ~!J! J*:o$*C~i6iw**{#zr+s{ozg**͕** ܾ,w͜͸Ͳ!!N#F$**O!~#:Aھ#~$=2Ek͌::/GyO>2!q*C"͡ʔ*JҔ^:Oyʃ?|x | sޖ-|N-# S:2E!~Яw>T D^6k-äPYy 5*{zBK5ڋ>*Cw~#+w#w+ɯ2E22i^ *C :~w~͔͔# #  w ~>2!E5T*C!"C"C!w# F! w͌xܯ2͢*C ~<wʃG:!ʎì 4~ʶ¬:<ʶ$ʶïZͻۯx>2>2ͻ:!Z2:Eڷẅ́͊Ͳ>2>2T*CGͻ:ẅ́n>2;O ^DM;}H>"*C ::ddslO s#r:Eڷ͊:==»y==»*Ww#*"͸*:G#š"͸:!w4 iw:Z!E~=26ۯ2*C!!~~#~O~G#n,-.‹! w! yG!x͢.:E<ʄ! q!pQ:E<. ʄ$.:E<ʄi6}2ExN! ~态O>G~G!~G} *C!r#r#r ^ͥ_y#x#{  s+p+q-*C ͥ!!q#p#w*:BOYG}*MD "ã:!Bھw!>2*C~=2u:B2~2wE:A*Cڶw>"!""2B!"!rQQQâ~?ͦ~?rQ*"CQ-Q͜QüQrQ$Q*):B"*)*)Q;*"E:;:A2AQÓQÜQ*C}/_|/*W}_*"}o|g":ʑ*C6:ʑw:2E**E}DQ>2 4 %-ßð5OjcccccccccccccÄÎ@UAUTOST [v]pip a:=pip b:=xdir a:b:*.*789   50$5@*-?Oy2:Oy{o{_"!91*>2͚>2ͪ2P2R22y2i&))))Cxj!:2C*S}O|ȯ2Ry2 C:Uy2Vi`n&G>2x21:f2:iO<:j2l>1͟j >!"2`<2>22!"!"!c"@!:(;~(7O8Osborne Computer System 60K CP/M 2.2A >(!!:O2RK:"ȯ2Py2# >2R*"S:V<!R~*5:U< *S#"S2U>K>2Q:":#̪:"2!!:0)2*!P~6(! #ͪ:22*"":22:!>!Q~6:2*":2>_!'" !4>2* j2":= 2"ɯ2": 2~#O !N!V!^=!n=!^=!V=!f=:_^#fkv@IN7lT: :^!~( *~4 h'_!knf^VSR}2:` y :h/2h h:h*Z)>d8 :aȯ:adZ} }d !6w:b +w++N#S͎͎hhN:g > NI @II y2*:, O:*߱:ʭ:@OKh Qh}(2_Kh :ͣ(!~6: OKh Nh ?Kh : >*2)>2)>.2)>2)>2)>2)>2)>2 : >*2)>2)>.2)>2)>2)>2)> 2)>2 :)@(=:~ :)2~((2~:)/Ol(y/2)>"2)>2)>2>2  -FOG/MIS004INFO CPM INFO CPMNOTES VANBKSPACE DOCWSTIPS TXTQUOTES PRNd !"#$%&EPSONWS DOCN'()*+DISK DOC ,R MSG #: TO RETRIEVE (C/R WHEN DONE)?30 MSG 00030 IS 630 LINE(S) ON 02/22/81 FROM SYSOP TO ALL RE: -CPMNET.JAN >>>>>>>>>>>>>>>>>>>>> CP/M-NET NEWS <<<<<<<<<<<<<<<<<<<<<<<< ============================================================ NUMBER 1 JANUARY, 1980 VOLUME 1, ISSUE 1 ============================================================ PRINTED MONTHLY (AT WORST QUARTERLY) TO INFORM USER'S OF RCPM SYSTEMS TO THE LATEST SOFTWARE NEWS, INFORMATION, AND UPDATES OF   PUBLIC DOMAIN SOFTWARE ACCESSIBLE VIA TELEPHONE/MODEM TRANSFER. YEARLY SUBSCRIPTION FOR COPIES OF THE CP/M-NET NEWS MAY BE OBTAINED BY MAILING $18.00 (CHECK OR MONEY ORDERS ONLY) TO KELLY SMITH, CP/M-NET, 3055 WACO AVENUE, SIMI VATHOUGHT THAT IT MAY BE OF SOME INTEREST TO THOSE OF YOU THAT USE THE MODEM/XMODEM FILE TRANSFER CAPABILITY OF THE CP/M-NET, TO GET A LITTLE INSIGHT AS TO THE COMMUNICATIONS PROTOCOL (I.E. "HANDSHAKING METHOD") USED BY THE SYSTEM. HEREILLEY, CALIFORNIA 93063. CP/M-NET IS A NON- PROFIT ORGINIZATION AND ALL MONEY RECEIVED ON SUBSCRIPTIONS ARE UTILIZED FOR THE SUSTAINING AND ENHANCMENTS OF THE CP/M- NET SYSTEM. IF YOU WOULD LIKE TO CONTRIBUTE AN ARTICLE, INCLUDE A COLUMN N LIES THE DETAILS OF A VERY GOOD (NOT PERFECT) DATA COMMUNICATIONS PROTOCOL THAT HAS BECOME THE "DE FACTO" STANDARD FOR VARIOUS REMOTE CP/M SYSTEMS (RCPM'S) THAT ARE ACCESSIBLE ACROSS THE COUNTRY (REFER TO RCPMLST4.DOC ON ALL RCPM'S FOCONTAINING YOUR AREA OF INTEREST AND EXPERTISE, OR PARTICIPATE IN AN OPEN FORUM FOR CONVERSATION AND TRANSFER OF IDEAS, FEEL FREE TO SEND IT TO THE CP/M-NET SYSTEM AND INDICATE THAT YOU WOULD LIKE IT TO BE INCLUDED IN THE CP/M- NET NEWS...IR ACCESS NUMBERS AND NOTE THAT THE "DIGIT NUMBER" IN THAT LIST CHANGES AS NEW SYSTEM ARE LISTED). I ALSO WISH TO GIVE CREDIT TO WARD CHRISTENSEN (THE "ORIGINAL" CBBS) FOR WRITING MODEM.ASM (CPMUG VOLUME 25.11) AND KEITH PETERSEN, BRUCE RATOFF, F POSSIBLE, USE WORDSTAR (TRADEMARK, MICROPRO INTERNATIONAL) OR ELECTRIC PENCIL (TRADEMARK, MICHEAL SHRAYER) IN 60 COLUMN FORMAT. ============================================================ CP/M IS A REGISTERD TRADEMARK OF DIGITAL DAVE HARDY, ROD HART, TOM "C" (WE KNOW WHO YOU ARE TOM!), AND OTHERS, FOR ENHANCEMENTS TO WARD'S ORIGINAL PROGRAM THAT WE NOW CALL XMODEM (EXTERNAL MODEM). DATA IS SENT IN 128 BYTE BLOCKS WITH SEQUENTIALLY NUMBERED BLOCKS, AND APPENDED BY A SIRESEARCH ============================================================ MODEM/XMODEM PROTOCOL EXPLAINED BY KELLY SMITH, CP/M-NET "SYSOP" JANUARY 8,1980 I NGLE CHECKSUM AT THE END OF EACH BLOCK. AS THE RECEIVING COMPUTER ACQUIRES THE INCOMING DATA, IT PERFORMS IT'S OWN CHECKSUM AND UPON EACH COMPLETION OF A BLOCK, IT COMPARES IT'S CHECKSUM RESULT WITH THAT OF THE SENDING COMPUTERS. IF THE REC  EIVING COMPUTER MATCHES THE CHECKSUM OF THE SENDING COMPUTER, IT TRANSMITS AN ACK (ASCII CODE PROTOCOL CHARACTER FOR ACKNOWLEDGE (04 HEX, CONTROL-F)) BACK TO THE SENDING COMPUTER. THE ACK THEREFORE MEANS "ALLS WELL ON THIS END, SEND SOME MOING THE SOH, THE BLOCK NUMBER, THE BLOCK NUMBER 2'S COMPLEMENT, AND THE 128 BYTES OF DATA. RECEIVING COMPUTER: ----/NAK/------------------------/ACK/---------------------- 15H 06H SENDING COMPUTER: --------RE...". NOTICE IN THE FOLLOWING EXAMPLE, THAT THE SENDING COMPUTER WILL TRANSMIT AN "INITIAL NAK" (ASCII PROTOCOL CHARACTER FOR NEGATIVE ACKNOWLEDGE (15 HEX, CONTROL-U))...OR, "THAT WASN'T QUITE RIGHT, PLEASE SEND AGAIN". DUE TO THE AS/SOH/BLK#/BLK#/DATA/CSUM/---/SOH/BLK#/BLK#/DATA/ETC. 01H 001H 0FEH 8BIT 8BIT 01H 002H 0FDH 8BIT .... THIS PROCESS CONTINUES, WITH THE NEXT 128 BYTES, IF THE BLOCK WAS ACK'ED BY THE RECEIVING COMPUTER, AND THEN THE NEXT SEQUEYNCHRONOUS NATURE OF THE INITIAL "HOOK-UP" BETWEEN THE TWO COMPUTERS, THE RECEIVING COMPUTER WILL "TIME-OUT" LOOKING FOR DATA, AND SEND THE NAK AS THE "CUE" FOR THE SENDING COMPUTER TO BEGIN TRANSMISSION. THE SENDING COMPUTER KNOWS THNTIAL BLOCK NUMBER AND IT'S 2'S COMPLEMENT, ETC. BUT WHAT HAPPENS IF THE BLOCK IS NAK'ED?...EASY, THE SENDING COMPUTER JUST RE-SENDS THE PREVIOUS BLOCK. NOW THE HARD PART...WHAT IF THE SENDING COMPUTER TRANSMITS A BLOCK, THE RECEIVING AT THE RECEIVING COMPUTER WILL "TIME-OUT", AND USES THIS FACT TO "GET IN SYNC"...THE SENDING COMPUTER RESPONDS TO THE "INITIAL NAK" WITH A SOH (ASCII CODE PROTOCOL CHARACTER FOR START OF HEADING (01 HEX, CONTROL-A)), SENDS THE FIRST BCOMPUTER GETS IT AND SENDS AN ACK, BUT THE SENDER DOES NOT SEE IT?...THE SENDING COMPUTER THINKS THAT IT HAS FAILED AND AFTER 10 SECONDS RE-TRANSMITS THE BLOCK...ARGH!...THE RECEIVING COMPUTER HAS "STASHED" THE DATA IN MEMORY ORLOCK NUMBER, SENDS THE 2' COMPLEMENT OF THE BLOCK NUMBER (VERY IMPORTANT, I WILL DISCUSS THIS LATER...), SENDS 128 BYTES OF 8 BIT DATA (THATS WHY WE CAN TRANSFER ".COM" FILES), AND FINALLY A CHECKSUM, WHERE THE CHECKSUM IS CALCULATED BY SUMM ON DISK (DATA IS WRITTEN TO DISK AFTER RECEIVING 16 BLOCKS), THE RECEIVING COMPUTER IS NOW 1 BLOCK AHEAD OF THE TRANSMITING COMPUTER! HERE COMES THE OPERATION OF THE BLOCK NUMBERS...THE RECEIVER DETECTS THAT THIS IS THE LAST BLOCK (ALL OVER   AGAIN), AND TRANSMITS BACK AN ACK, THROWS AWAY THE BLOCK, AND (EFFECTIVELY) "CATCHES UP"...CLEVER! WHATS MORE, THE INTEGRITY OF THE BLOCK NUMBER IS VERIFIED BY THE RECEIVING COMPUTER, BECAUSE IT "SUMS" THE SOH (01 HEX) WITH THE BLOCPUTER: ----/ACK/---/ACK/"TRANSFER COMPLETE"/A>(OR B>) 06H 06H ................................ SENDING COMPUTER: CSUM/---/EOT/---/A>(OR B>) 8BIT 04H ............. IN SOME CASE, WHERE THE TELEPHONE TRANSMISSION IS REPK NUMBER PLUS THE 2'S COMPLEMENT OF THE BLOCK NUMBER), AND THE RESULT MUST BE ZERO FOR A PROPER TRANSFER (E.G. 01+01+FE HEX = 00, ON THE FIRST BLOCK). THE SEQUENCE OF EVENTS THEN, LOOKS LIKE THIS: RECEIVING COMPUTER: ----/ACK/----EATEDLY "TRASHED" (WEAK SIGNALS, MULTIPLE NOISE "HITS", ETC.), THE RECEIVING COMPUTER (AND OPERATOR) WILL BE PROVIDED THE OPTION TO QUIT. HERE, THE OPERATOR ENTERS "R" OR "Q" IN RESPONSE TO "RETRY OR QUIT?" (AFTER 10 RETRIES), AND IF-------------------/NAK/----------------------- 06H 15H SENDING COMPUTER: CSUM/---/SOH/BLK#/BLK#/DATA/CSUM/---/SOH/BLK#/BLK#/DATA/ETC. 8BIT 01H 003H 0FCH 8BIT 8BIT 01H 003H 0FCH 8BIT .... NORMAL COMPLETION QUIT IS ENVOKED BY THE OPERATOR, A CAN (ASCII CODE PROTOCOL CANCEL, 18 HEX, CONTROL-X) IS SENT BY THE RECEIVING COMPUTER TO CANCEL THE ENTIRE TRANSFER SESSION (NOTE: IS IS POSSIBLE TO "GARBLE" AN ACK TO A CAN, AND ABORT PREMATURLEY OF DATA TRANSFERS WILL THEN CONCLUDE WITH AN EOT (ASCII CODE PROTOCOL END OF TRANSMISSION, 04 HEX, CONTROL-D) FROM THE SENDING COMPUTER, AND A FINAL ACK FROM THE RECEIVING COMPUTER. UNFORTUNATELY, IF THE RECEIVING COMPUTER MISSES THE E): RECEIVING COMPUTER: ----/NAK/...NAK'S TEN TIMES.../"RETRY OR QUIT?"(Q)/CAN/A>... 15H 18H SENDING COMPUTER: CSUM/---/...GARBLED DATA....../-----------------------/A>... 8BIT A FINAL CONSIDEOT, IT WILL CONTINUE TO WAIT FOR THE NEXT BLOCK (SENDING NAK'S EVERY 10 SECONDS, UP TO 10 TIMES) AND EVENTUALLY "TIME-OUT". THIS IS RARELY THE CASE HOWEVER, AND ALTHOUGH NOT "BULLET-PROOF", IT IS A VERY WORKABLE PROTOCOL. RECEIVING COMRATIONS WHEN USING THE MODEM PROGRAM, IS A TIMING RELATED PROBLEMS WHEN TRANSFER STATUS MESSAGES AND/OR TEXTUAL DATA IS DIRECTED TO THE SCREEN OF A SLOW (4800 BAUD OR LESS) TERMINAL OR TO A HARD COPY PRINTER. THIS PROBLEM IS READILY APPARENT (M  ULTIPLE NAK'S) WHEN USING MODEM FOR THE FIRST TIME, AND CAN USUALLY BE "CURED" BY NOT SPECIFYING THE "V" (VIDEO) SUB-OPTION WHEN SENDING OR RECEIVING FILES. USERS OF LIFEBOAT ASSOCIATES BSTAM ENCOUNTER THE SAME PROBLEM, BUT THIS IS EAS KELLY SMITH, CP/M-NET "SYSOP" JANUARY 8, 1980 IN MY TRAVELS THROUGH THE SOFTWARE WRITTEN BY OTHERS (ARTICLES, DISASSEMBLIES, ETC.), I OCCASIONALY FIND SOME "TRICKS" INCORPORATED TO EITHER OPTIMIZEILY FIXED WITH THE FILES TQPATCH.ASM AND RQPATCH.ASM (TRANSFER QUIET/RECEIVE QUIET) THAT KEITH PETERSEN (ROYAL OAK CP/M, "CALL-BACK" REMOTE SYSTEM, (313)- 588-7054) WROTE TO SOLVE THE PROBLEM OF LOW SPEED TERMINAL I/O. FOR USERS OF CBBS'S  THE STORAGE REQUIREMENTS OF THE CODE (TYPICALLY ROM BASED) OR TO ATTEMPT TO CONFUSE DISASSEMBLY...ALTHOUGH THEY ARE NOT RECOMMENDED ROUTINES, I THINK YOU MAY FIND THEM OF INTEREST... THE LXI TRICK MANY LARGE MAINFRTHAT DO NOT HAVE MODEM.ASM (BUT DO HAVE A CP/M DISK SYSTEM...ESSENTIAL!), LET ME SUGGEST THAT YOU "DATA CAPTURE" THE FILE MBOOT3.ASM FROM ONE OF THE RCPM'S (IT'S A SMALL 8 KILO-BYTE FILE THAT "FITS" IN MOST SYSTEM'S MEMORY) TO GET THE LARGERAME COMPUTERS (MINI'S AND MAXI'S) HAVE A SKIP INSTRUCTION...BUT MOST MICRO'S ARE MULTI-BYTE INSTRUCTION ORIENTED, AND THEREFORE IT IS DIFFICULT TO PROVIDE A SKIP WHEN THE INSTRUCTION LENGTH IS INDETERMINATE. FIRST, A MODEM.ASM (40 KILO-BYTES). CHECK IT VERY CAREFULLY FOR ERRORS USING THE "DATA CAPTURE" (READ ERROR PRONE METHOD HERE). THEN EDIT AND ASSEMBLE FOR YOUR MODEM CONFIGURATION. IF YOU ARE TIRED OF BUYING SOFTWARE WHERE THE ADVERTISMENT IS WN EXAMPLE OF "STRAIGHT" CODING: ERROR1: MVI A,1 ; SET-UP ERROR CODE 1 JMP ERROR$HANDLER ERROR2: MVI A,2 ; SET-UP ERROR CODE 2 JMP ERROR$HANDLER ERROR3: MVI A,3 ; SET-UP ERROR CODE 3, AND FALL INTO IT ; ERROR$HANDLRITTEN BETTER THAN THE PROGRAM, THEN THE RCPM'S ARE JUST WHAT YOU HAVE BEEN LOOKING FOR...AND FREE! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SOFTWARE TRICKS FOR THE 8080/Z80 BY ER: ; ALL ERROR CODES COME HERE ; LXI D,ERROR$MESSAGE ; POINT TO ERROR MESSAGE, ; ERROR CODE IN A REG. . . . THIS IS EASY ENOUGH TO UNDERSTAND (RIGHT?), BUT    CONSIDER THIS: LXIB EQU 1 ; EQUATE FIRST BYTE OF LXI B,NNNN ; ERROR1: MVI A,1 ; SET-UP ERROR CODE 1 DB LXIB ; FIRST BYTE OF LXI B,NNNN ERROR2: MVI A,2 ; SET-UP ERROR CODE 2 DB LXIB ; FIRST BYTE OF LXI B,NO SOMETHING...ANYTHING! . . . BUT CONSIDER THE FOLLOWING: ORI EQU 0F6H ; EQUATE FIRST BYTE OF ORI N ; AND$FUNCTION: ; INDICATE BOOLEAN AND ; DB ORI ; SET FLAGS WITH A REG. NOT ZERONNN ERROR3: MVI A,3 ; SET-UP ERROR CODE 3 LXI D,ERROR$MESSAGE ; POINT TO ERROR MESSAGE, ; ERROR CODE IN A REG. . . . IF A JUMP IS MADE TO ERROR1, THE E REG. IS , ; FIRST BYTE OF ORI OR$FUNCTION: ; INDICATE BOOLEAN OR ; XRA A ; SET FLAGS TO ZERO, THIS IS OR ; DO$BOOLEAN: ; BOOLEAN FUNCTIONS COME HERE ; YOUR CODE... ; IS EVERYONE CONFUSED? SET-UP, THEN THE LXIB WILL BE EXECUTED, THE B&C REGS. WILL BE GIVEN "GARBAGE" CODE THAT FOLLOWS IT, AND FINALLY THE PROGRAM COUNTER WILL BE INCREMENTED PAST THE NEXT INSTRUCTION...IT SKIP'S AND FALLS INTO THE EVENTUAL OUTPUT ROUTINE...I . . . THIS ONE IS PARTICULARY CLEVER; WHEN ENTERING AT AND$FUCTION, THE ORI PICKS-UP THE "XRA A" AS F6 HEX, AND AUTOMATICALLY SET'S THE FLAGS NON-ZERO. LET ME SUGGEST THAT IF YOU ACTUALLY USE THE LXINSIDIOUS TO DISASSEMBLERS! THIS WAS ONE OF THE "FAVORITE'S" AT MITS (REMEMBER THE ALTAIR?). THE ORI TRICK YOU MIGHT CODE: AND$FUNCTION: ; INDICATE BOOLEAN AND ; MVI A,1 ; SET FLAGS TO NON-ZER OR ORI TRICK...COMMENT IT WELL IN YOUR SOURCE CODE...YOU MAY HAVE TO PATCH YOUR PROGRAM YEARS LATER, AND WILL THIS LOOK STRANGE !?! USING XTHL A "CUTE" (NOT FAST) EXAMPLE FOR REGISTER "SWAPPING" WHEN AO, THIS IS AND JMP DO$BOOLEAN; DO BOOLEAN FUNCTION ; OR$FUNCTION: ; INDICATE BOOLEAN OR ; XRA A ; SET FLAGS TO ZERO, THIS IS OR ; DO$BOOLEAN: ; BOOLEAN FUNCTIONS COME HERE ; YOUR CODE... ; DLL REGISTERS ARE USED AND MUST BE SAVED, IS SHOWN AS FOLLOWS: EXCHANGE$BC$WITH$HL: ; EXCHANGE B&C REGS. WITH H&L REGS. ; PUSH B ; PUT B&C REGS. ON THE STACK XTHL ; H&L REGS. = TOP STACK ENTRY = B&C REGS.    POP B ; B&C REGS. = ORIGINAL H&L REGS. VERY OFTEN YOU WILL CODE A ROUTINE TO PASS A CONSTANT TO A SUBROUTINE, SUCH AS: MVI C,1 CALL DUMB$SUBROUTINE . . . MVI C,2  ; DUMB$SUBROUTINE: ; USE ARGUMENT PASSED IN THE C REG. ; . . . THE "INDIRECT JUMP" VIA THE STACK TRY THIS TRICK TO SAVE A FEW BYTES, BY FAKING A "INDIRECT JUMP" VIA THE STACK...YOU MIGHT CO CALL DUMB$SUBROUTINE . . . MVI C,3 CALL DUMB$SUBROUTINE . . . ; DUMB$SUBROUTINE: ; USE ARGUMENT PASSED IN C REG. . . . DE THIS ROUTINE: CALL GET$DATA$WORD JMP USE$DATA$WORD ; GET$DATA$WORD: ; GET WORD INTO H&L REGS. ; LHLD MY$DATA$WORD ; FETCH MY DATA WORD RET ; USE$DATA$WORD: ; USE DATA WORD IN H&L REGS. BUT A MOBY MANIPULATING THE RETURN ADDRESS, YOU CAN SAVE ONE BYTE PER CALL AS FOLLOWS: CALL TRICK$SUBROUTINE DB 1 ; PUT CONSTANT IN "RETURN" LOCATION . . . CALL TRICK$SUBROUTINE RE "ELEGANT" (THOUGH OBTUSE) METHOD COULD BE CODED AS THIS: LXI H,USE$DATA$WORD ; MAKE "INDIRECT ADDRESS" PUSH H ; SAVE IT ON THE STACK ; GET$DATA$WORD: ; GET WORD INTO H&L REGS. ; LHLD MY$DATA$WORD ; FETC DB 2 ; PUT CONSTANT IN "RETURN" LOCATION . . . CALL TRICK$SUBROUTINE DB 3 ; PUT CONSTANT IN "RETURN" LOCATION . . . ; TRICK$SUBROUTINE: ; TH MY DATA WORD RET ; POP STACK FOR ADDRESS AND "JUMP" THIS CAN LEAD TO EVEN TRICKIER MANIPULATIONS ON THE STACK FOR RETURN ADDRESS'S...EVERYONE (AT ONE TIME OR ANOTHER) HAS CODED A ROUTINE TO "FILTER" KEYBOARD CHARACTERS, ANRICK SUBROUTINE TO GET CONSTANT ; XTHL ; H&L REGS. = RETURN ADDRESS MOV C,M ; GET CONSTANT POINTED TO BY H&L REGS. INX H ; BUMP FOR RETURN ADDRESS XTHL ; RESTORE THE RETURN ADDRESS AND H&L REGS. D IT USUAL LOOKS LIKE THIS: CPI '.' ; PERIOD CHARACTER? JZ FILTER CPI ',' ; COMMA CHARACTER? JZ FILTER CPI ';' ; SEMICOLON CHARACTER? JZ FILTER CPI ':' ; COLON   CHARACTER? JZ FILTER . . . BUT WE NEED TO SAVE SOME BYTES, SO WE GET TRICKY WITH CODING LIKE THIS: LXI B,FILTER ; MAKE "FILTER" ADDRESS PUSH B ; PUT "FILTER" ADDRESS OUT THE OBVIOUS WAY (AND FASTER) IS JUST: MOV D,B MOV E,C A REALLY TRICKY PROGRAMMER COULD USE THE PUSH/POP METHOD TO AFFECT THE CONDITION CODE...THIS "BLOWS-AWAY" EVEN EXPERIENCED PROGRAMMERS WHEN THEY ENCOUNTN THE STACK CPI '.' ; PERIOD CHARACTER? RZ ; POP STACK AND GO, IF MATCH CPI ',' ; COMMA CHARACTER? RZ ; POP STACK AND GO, IF MATCH CPI ';' ; SEMICOLON CHARACTER? RZ ER IT IN SOMEONES CODE!...WATCH THIS: MVI C,081H ; THE "FLAGS" . . . PUSH B ; USE "CUNNING SET-UP" TO CONFUSE . . . POP PSW ; DO IT T ; POP STACK AND GO, IF MATCH CPI ':' ; COLON CHARACTER? RZ ; POP STACK AND GO, IF MATCH POP B ; NO MATCH...ADJUST THE STACK . . . A POPULAR METHOD FOR "IN LINE" PRINTING OO IT! . . . THIS HAS THE EFFECT OF MOVING THE B REG. INTO THE A REG., AND MOVING THE C REG. INTO THE PSW (FLAGS), WITH THE CARRY AND SIGN BITS SET (SIGN IS MINUS), AND ALL OTHER FLAGS RESET TO ZERO'S...THIS TRIF ESSAGES IN CP/M APPLICATIONS PROGRAM, IS AS FOLLOWS: CALL START ; GO TO START, AFTER MESSAGE DB 'MY JUNK PROGRAM, VERSION 1$' ; START: POP D ; GET ADDRESS OF MESSAGE STRING MVI C,9 ; CP/M PRINT STRINGCK CAUSES MOST PROGRAMMERS TO MUMBLE FOR HOURS... ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ HELPFUL CP/M TIP-OF-THE-MONTH HAVE YOU EVER FIRED-UP DIGITAL RESEARCH'S DDT OR SID PROGRAM DEBUGGER'S, SPECI FUNCTION CALL 5 ; LET CP/M DO THE WORK . . . REGISTER "MOVING" THE TRICKY WAY TO MOVE THE D&E REGS. TO B&C REGS MIGHT BE AS FOLLOWS: PUSH D POP B BFYING THE PROGRAM TO DEBUG...IT'S LOADS, THEN GOES '?' , BECAUSE IT CAN'T FIND THE FILE, AND IT'S REALLY ON THE OTHER DISKETTE (LET'S SAY B:) IN YOUR SYSTEM !?! SO YOU CONTROL-C OUT (BACK TO CP/M) AND PIP THE PROGRAM TO THE PROPER DISKETTE.  ..ARGH! SO USE DDT OR SID, TO CHANGE THE LOGGED IN DRIVE NUMBER TO GET TO THE FILE YOU WANT...LET'S ASSUME THAT WE ARE LOGGED ON TO THE A: DRIVE, AND OUR TARGET FILE TO DEBUG IS ON B:...FOLLOW ALONG: A>DDT BUMBFILE.COM DDT VERS 2>>>>>>>>>>>>> CP/M-NET NEWS <<<<<<<<<<<<<<<<<<<<<<<< ============================================================ NUMBER 2 FEBRUARY,1980 VOLUME 1, ISSUE 2 ============================================================ PRINTED MO.0 ? - SO HERE WE SIT (NOT THE LEAST BIT AMUSED), CONTEMPLATING OUR NAVELS...DO THIS! -IBUMBFILE.COM [SET-UP TEMPORARY FCB WITH FILENAME.TYP] -S5C [SUBSTITUTE STARTING AT ADDRESS 5C HEX] 005C 00 02 [SET DRIVE NUNTHLY (AT WORST QUARTERLY) TO INFORM USER'S OF RCPM SYSTEMS TO THE LATEST SOFTWARE NEWS, INFORMATION, AND UPDATES OF PUBLIC DOMAIN SOFTWARE ACCESSIBLE VIA TELEPHONE/MODEM TRANSFER. YEARLY SUBSCRIPTION FOR COPIES OF THE CP/M-NET NEMBER 2 (B: DISK)] 005D 42 . [QUIT SUBSTITUTING] -R [READ BUMBFILE.COM] AS IF BY MAGIC, THE DEBUGGER WILL LOG ON TO THE B: DISK, GRAB THE FILE, AND READ IT IN FOR YOUR DEBUG SESSION! ALL YOU HAVE TO REMEMBER, IS THWS MAY BE OBTAINED BY MAILING $18.00 (CHECK OR MONEY ORDERS ONLY) TO KELLY SMITH, CP/M-NET, 3055 WACO STREET, SIMI VALLEY, CALIFORNIA 93063. CP/M-NET IS A NON- PROFIT ORGINIZATION AND ALL MONEY RECEIVED ON SUBSCRIPTIONS ARE UTILIZED FOR THE AT AT ADDRESS 5C HEX IS THE START OF THE TEMPORARY FILE CONTROL BLOCK, AND THAT: 01 EQUALS A: DISK 02 EQUALS B: DISK 03 EQUALS C: DISK . . . SO ON, AND SO ON FOR UP TO 16 DISK DRIVES... +++++++++++++++++++SUSTAINING AND ENHANCMENTS OF THE CP/M- NET SYSTEM. IF YOU WOULD LIKE TO CONTRIBUTE AN ARTICLE, INCLUDE A COLUMN CONTAINING YOUR AREA OF INTEREST AND EXPERTISE, OR PARTICIPATE IN AN OPEN FORUM FOR CONVERSATION AND TRANSFER OF IDEAS, +++++++++++++++++++++++++++++++++++++++++ CP/M-NET "SWAPPER/SHOPPER" ADVERTISING HAS BEEN DELETED MSG #: TO RETRIEVE (C/R WHEN DONE)?31 MSG 00031 IS 650 LINE(S) ON 02/22/81 FROM SYSOP TO ALL RE: -CPMNET.FEB >>>>>>>> FEEL FREE TO SEND IT TO THE CP/M-NET SYSTEM AND INDICATE THAT YOU WOULD LIKE IT TO BE INCLUDED IN THE CP/M- NET NEWS...IF POSSIBLE, USE WORDSTAR (TRADEMARK, MICROPRO INTERNATIONAL) OR ELECTRIC PENCIL (TRADEMARK, MICHEAL SHRAYER) IN 60 C  OLUMN FORMAT. ============================================================ CP/M IS A REGISTERD TRADEMARK OF DIGITAL RESEARCH ============================================================ ON THE STACK ATIBLE] REPORTED BY: KELLY SMITH, JANUARY 11, 1980 APPLICATION: ANY WHEN UTILIZING THE SAVE FUNCTION UNDER MBASIC.COM VERSION 5.03, DO NOT USE LOWER CASE FOR THE FILENAME...IT WILL BE PLACED IN THE CP/M DIRECTORY IN LOWER CASE, AND ============ MANY THANKS TO THE FOLLOWING SUPPORTING SUBSCRIBERS TO THE CP/M-NET NEWS: BRENT CRABLE, CRABLE ENTERPRISES EDDIE CURRIE JOHN T. POWERS, JR. PETE MACK, MACK ASSOCIATES NOTE: BACK ISSUES FOR THE CP/M-NET NEWS LETTER ANY SUBSEQUENT ATTEMPT TO "READ-IT-IN" AGAIN WITH MBASIC WILL RESULT IN A "FILE NOT FOUND" ERROR! THE ONLY WAY TO GET RID OF IT (KILL IT IN THE DIRECTORY) IS TO ERA *.BAS, AND THIS WILL (OF COURSE) CLOBBER ALL OTHER ".BAS" FILES. SA ARE AVAILABLE FOR TWO DOLLARS EACH. BACK ISSUES CURRENTLY AVAILABLE ARE: JANUARY 1980, NUMBER 1, VOLUME 1, ISSUE 1 MODEM/XMODEM PROTOCOL EXPLAINED SOFTWARE TRICKS FOR THE 8080/Z80 CP/M TIP-OF-THE-MONTH, 'CHANGING LOGGED DISKS IM SINGER'S DUMP.COM (CPMUG VOLUME 14.7) PROGRAM CAN ALSO BE USED TO "ERRADICATE" THE FILE... ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ WHAT TO DO ABOUT CP/M'S "SYNCRONIZATION ERROR" (SYSGENING CP/M VERSION 2.2N DDT OR SID' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ [NOTE: THE OFFICIAL VERSION OF CP/M-NET.FEB INCLUDES RCPM- LST6.DOC, A LISTING OF FREE PUBLIC SYSTEMS THAT OFFER CP/M SOFTWARE FOR DOWNLOADING VIA MODEMS. AS A RECENT VER, FROM VERSION 1.4) BY KELLY SMITH, CP/M-NET "SYSOP" QUESTION: "HOW IN THE #*@%! DO I SYSGEN CP/M VERSION 2.2 ON MY CP/M 1.4 SYSTEM, WHEN USING IT'S MOVCPM (TO GENERATE A NEW SYSTEM IMAGE), ASION OF RCPMLIST IS AVAILABLE AS A SEPARATE FILE ON THIS SYSTEM, IT HAS BEEN DELETED HERE.] ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SOFTWARE "BUG" REPORT MICROSOFT MBASIC.COM VERSION 5.03 [CP/M COMPND THE &%#"*@ THING KEEPS COMING BACK WITH SYNCRONIZATION ERROR, AND THEN PROMPTLY HALTS!" THE PROBLEM: THOSE CLEVER PEOPLE AT DIGITAL RESEARCH HAVE EMBEDDED THE SERIAL NUMBER (ISSUED TO YOU I HOPE!) IN MOVCPM.COM, TO DISCOURAGE    THE "RIP-OFF" OF CP/M BY SOMEONE OTHER THAN THE RIGHTFUL OWNER...WHEN MOVCPM IS EXECUTED, IT LOOKS FOR A MATCH OF IT'S SERIAL NUMBER TO THAT OF THE HOST SYSTEM (YOUR CP/M VERSION 1.4) AS IT APPEARS IN YOUR SYSTEM MEMORY, DETECTS THAT A SION 2.2, AND IT'S BEEN SYSGEN'D FOR SOMETHING OTHER THAN A 20 KILO-BYTE SYSTEM...DOUBLE ARGH! ALL IS NOT LOST HOWEVER, JUST FOLLOW THE (LESS THAN SIMPLE) SEQUENCE THAT FOLLOWS USING THE MOVPATCH.ASM FILE THAT IS LISTED AFTER T"MISMATCH" HAS OCCURRED, AND PROMPTLY LOCKS- UP YOUR COMPUTER...ARGH! "YOU MEAN I HAVE TO WRITE THAT CRUMMY "GETSY" AND "PUTSYS" STUFF TO SYSGEN FROM 1.4 TO 2.2 ???" WE ASK OURSELVES... THE SOLUTION: FAKE-OUT #1...YOUR CP/M VERSION 2.2 HE SYSGEN SEQUENCE... A WORD OF CAUTION HOWEVER! SOME IMPLEMENTATIONS OF MOVCPM.COM NOT DIRECTLY SUPPLIED BY DIGITAL RESEARCH HAVE BEEN "FIDDLED"...THE ADDRESS REFERENCED IN MOVPATCH.ASM THAT FOLLOWS WILL NOT BE THE SAME...LIFEBOAT ASSOCIATAS SUPPLIED BY DIGITAL RESEARCH, IS SYSGEN'D FOR A 20 KILO-BYTE INTEL MDS 800 SYSTEM...SO WRITE A 20 KILOBYTE BIOS (AND BOOT LOADER), THEN DO AS FOLLOWS TO GET A 20 KILO-BYTE CP/M 2.2 SYSTEM IMAGE... A>B: <--- SWITCH FROM A (CP/M 1.4)ES HAS MODIFIED MOST VERSIONS OF MOVCPM.COM THAT I HAVE SEEN, FOR PARTICULAR APPLICATIONS (I.E., DOUBLE DENSITY, ETC.). A>DDT B:MOVCPM.COM <--- GET THE CP/M 2.2 MOVCPM IN... DDT VERS 1.4 NEXT PC 2800 0100 -IMOVPATCH.HEX <--- SET-UP  TO B (CP/M 2.2) B>SYSGEN <--- USE CP/M 2.2'S SYSGEN TO GET A SYSTEM IMAGE SYSGEN VER 2.0 SOURCE DRIVE NAME (OR RETURN TO SKIP)B <--- GET IT... FUNCTION COMPLETE DESTINATION DRIVE NAME (OR RETURN TO REBOOT) <--- RETURN A>SAVE 34 B:CPMTHE MOVCPM PATCH -R <--- READ IT IN NEXT PC 2800 0000 -XP <--- WE NEED TO RESET THE PROGRAM COUNTER P=0000 100 <--- SET IT BACK TO ADDRESS 0100 HEXADECIMAL -G <--- GO EXECUTE MOVCPM... CONSTRUCTING 56K CP/M VERS 2.2 <--- MAKING MY20.COM <--- SAVE THE CP/M 2.2 SYSTEM IMAGE O.K., NOW SYSGEN NORMALLY ON THE B DRIVE, WITH YOUR 20 KILO-BYTE BIOS (AND BOOT LOADER)... FAKE-OUT #2...AH HAH, SO THIS IS NOT YOUR COPY (I KNOW, YOUR DOING THIS FOR A FRIEND...) OF CP/M VER SYSTEM SIZE... READY FOR "SYSGEN" OR "SAVE 34 CPM56.COM" A>B: <--- IT WAS FAKED-OUT, SWITCH TO DRIVE B B>SAVE 34 CPM56.COM <--- SAVE THE CP/M 2.2 SYSTEM IMAGE B>DDT CPM56.COM <--- BRING IN THE NEW SYSTEM IMAGE DDT VERS 2.2 <--- THE "NEW" D  DT ANNOUNCING ITSELF... NEXT PC 2300 0100 -ISBOOT56.HEX <--- MY BOOT LOADER -R900 <--- OFFSET REQUIRED FOR BOOT LOADER POSITION NEXT PC 2300 0000 -ICBIOS56.HEX <--- MY 56 KILO-BYTE BIOS -R4580 <--- OFFSET FOR 56 KILO-BYTE BIOS POSHAT ARE NOT SUPPLIED BY DIGITAL RESEARCH. MSIZE EQU 56 ; PUT YOUR MEMORY SIZE HERE... ORG 05CH ; ABSOLUTE FILE CONTROL BLOCK ADDRESS DB 20H,'0'+MSIZE/10,'0'+MSIZE MOD 10,20H ORG 232H ; SITION NEXT PC 2300 0000 -G0 <--- "WARM BOOT" YOUR CP/M 1.4 SYSTEM... B>SYSGEN <--- USE CP/M 2.2 SYSGEN TO GENERATE THE SYSTEM SYSGEN VER 2.0 <--- THE "NEW" SYSGEN ANNOUNCING ITSELF... SOURCE DRIVE NAME (OR RETURN TO SKIP) <--- RETURN DEERIAL NUMBER STRING LENGTH CHECK XRA A ; SET FLAGS ORG 2C4H ; SERIAL NUMBER MATCH CHECK LXI H,1200H ; FORCE MOVCPM TO LOOK AT IT'S ; OWN SERIAL NUMBER... END ++++STINATION DRIVE NAME (OR RETURN TO REBOOT)B <--- PUT ON B DESTINATION ON B, THEN TYPE RETURN <--- RETURN FUNCTION COMPLETE DESTINATION DRIVE NAME (OR RETURN TO REBOOT) <--- RETURN A> <--- RETURN TO YOUR "OLD" CP/M VERSION 1.4... O.K., NOW ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ LOADING DDT WITHOUT 'CLOBBERING' THE CCP BY KELLY SMITH, CP/M-NET "SYSOP" JANUARY 25, 1980 FROM TIME REMOVE THE CP/M 1.4 DISK FROM THE A DRIVE, AND REMOVE THE CP/M 2.2 FROM THE B DRIVE, INSERT IT IN THE A DRIVE AND DO A "COLD BOOT"...HEREAFTER, MOVCPM WILL OPERATE NORMALLY, SO NO NEED TO GO THRU THE MOVPATCH ROUTINE... MOVPATCH.ATO TIME, I NEED TO DO SOME 'SPECIAL TRICKS' WITHIN CP/M ITSELF TO MODIFY IT'S OPERATION TO DO SOMETHING OTHER THAN WHAT DIGITAL RESEARCH HAD INTENDED. IF YOU ATTEMPT TO LOAD DDT 'NORMALLY', IT 'CLOBBERS' THE CONSOLE COMMAND PROCESSSM FOR MOVCPM.COM CP/M VERSION 2.2 NOTE: YOU MUST SET "MSIZE" FOR YOUR INTENDED SYSTEM MEMORY SIZE TO MAKE THIS WORK...ASSEMBLE NORMALLY WITH THE CP/M VERSION 1.4 "ASM.COM" FILE. MOVPATCH.ASM MAY NOT WORK WITH COPIES OF MOVCPM.COM TOR BY OVERLAYING IT WITH DDT...MAKING MODIFICATION (USING DDT) IMPOSSIBLE. THIS PROGRAM WILL LOAD DIGITAL RESEARCH'S DYNAMIC DEBUGGING TOOL (DDT) WITHOUT OVERLAYING THE CP/M CONSOLE COMMAND PROCESSOR, AND WORKS FOR CP/M VERSION 1.4 AND   2.0 THROUGH 2.2...BE SURE AND SET THE EQUATE MSIZE FOR YOUR PARTICULAR CP/M SYSTEM SIZE, FOR PROPER OPERATION...NAME IT TO SOMETHING LIKE 'DDTLOAD.ASM', ASSEMBLE AND LOAD...THEN EXECUTE IT AS FOLLOWS: A>DDTLOAD  BASE+6 MVI M,JMP ; MAKE 'JUMP' OPCODE TO NEW BASE ADDRESS LXI H,'3D'-'0' ; CREATE DDT COMMAND IN ; CONSOLE INPUT BUFFER SHLD CBASE+BIAS+7 LXI H,'DT' SHLD  DDT WILL NOW LOAD INTO MEMORY 'NOMALLY', BUT WILL BE RELOCATED BELOW THE CCP. HERE'S THE SOFTWARE TO DO IT... TRUE EQU -1 ; DEFINE TRUE FALSE EQU NOT TRUE; DEFINE FALSE CPM14 EQU FALSE ; TRUE IF CP/M VERS 1.4 CPM CBASE+BIAS+9 XRA A ; MAKE 'EOL' AS NULL FOR MESSAGE END STA CBASE+BIAS+11 MVI A,8 ; RESET COMMAND POINTER STA CBASE+BIAS+136 LDA BASE+4 ; SELECT CURRENT DRIVE MOV C,22 EQU TRUE ; TRUE IF CP/M VERS 2.2 ; MSIZE EQU 56 ; MUST BE SET FOR YOUR CP/M SYSTEM SIZE ; BASE EQU 0 ; CP/M SYSTEM BASE ADDRESS ; IF CPM14 CBASE EQU BASE+2900H ; BASE OF 16K CP/M 1.4 CCP A JMP CBASE+BIAS ; ALL PARAMETERS SET, LOAD DDT END ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ USING CP/M'S UNDOCUMENTED "AUTOLOAD" FEATURE BY KELLYBIAS EQU (MSIZE-16)*1024 ; OFFSET FOR SYSTEM NBASE EQU CBASE+BIAS-10H ; NEW BASE ADDRESS ENDIF ; IF CPM22 CBASE EQU BASE+3400H ; BASE OF 20K CP/M 2.X CCP BIAS EQU (MSIZE-20)*1024 ; OFFSET FOR SYST SMITH, CP/M-NET "SYSOP" EVER WISHED YOU COULD JUST SLAM A DISKETTE INTO YOUR DRIVE, BOOT IT, AND HAVE IT IMMEDIATELY START EXECUTING A PROGRAM FOR YOU...OR THE KIDS WANT TO PLAY SOME NIFTY GAME, BUT YOUR TIRED OF HAVING YOUR DISKETTES TRASHEDEM NBASE EQU CBASE+BIAS-10H ; NEW BASE ADDRESS ENDIF ; ORG BASE+100H ; LHLD BASE+6 ; MOVE OLD BDOS ADDRESS TO NEW BDOS ENTRY SHLD NBASE+1 ; SWAP NEW BASE ADDRESS INTO ORIGINAL BASE SHLD  'CAUSE YOUR 14 YEAR OLD BOY DOES NOT UNDERSTAND THE FULL IMPLICATIONS OF ERA *.*...?!? WELL HERE'S A LITTLE KNOWN FEATURE OF CP/M THAT'S WORTH KNOWING...IT HAS A BUILT IN AUTOLOAD! I DON'T KNOW WHY DIGITAL RESEARCH FAILS TO DOCUMENT THIS  , FOR PUBLIC CONSUMPTION (?), THEY INCLUDE THE INFORMATION IN THEIR OEM DISTRIBUTION DOCUMENTATION, BUT NOT ANYWHERE ELSE...AND HOW MANY OF US ARE OEM DISTRIBUTERS? WELL, HERE ARE THE DETAILS OF "AUTOLOAD", AND HOW TO IMPLEMENT IT ON  \ \ \ \ \ .___ NUMBER OF CHARACTERS IN FILENAME \ \ \ \ \ \ \ \ .___ START OF FILENAME TO "AUTOLOAD" \ \ \ \ \ \ \ \ \ \ 0A00 C3 5C 03 YOUR CP/M SYSTEM. FIRST, TAKE A "SCRATCH" DISKETTE AND DO A FULL DISK COPY OF YOUR CP/M SYSTEM DISKETTE (THIS INCLUDES THE SYSTEM TRACKS). IF YOU DON'T HAVE A DISK COPY PROGRAM, SYSGEN THE "SCRATCH" DISKETTE AND PIP ALL THE STUFF TO IT. NOW,C3 58 03 7F 00 20 20 20 20 20 20 20 20 .\..X... 0A10 20 20 20 20 20 20 20 20 43 4F 50 59 52 49 47 48 COPYRIGH 0A20 54 20 28 43 29 20 31 39 37 39 2C 20 44 49 47 49 T (C) 1979, DIGI 0A30 54 41 4C 20 52 45 53 45 41 52 43 48 20 20 00 00 TAL  STICK THE NEW DISKETTE (TO BE SET-UP FOR "AUTOLOAD") IN DRIVE A:, "WARM BOOT" IT (CONTROL-C) AND LET'S ASSUME THAT WE WANT TO "AUTOLOAD" MICROSOFT'S MBASIC AND HAVE IT EXECUTE STARTREK...HERE'S WHAT YOU DO: A>DDT MOVCPM.RESEARCH .. 0A40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0A50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0A60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0A70 00 00 00 00 00 00 00 00 COM <--- WE NEED TO "PATCH" MOVCPM.COM DDT VERS 2.2 NEXT PC 2800 0100 <--- WRITE DOWN '2800' SOMEPLACE -D0A00 <--- DUMP STARTING AT ADDRESS 0A00 HEX HERE IS THE START OF CP/M (THIS IS CP/M VERSION 2.2, BUT THI0000 00 00 00 00 00 00 ................ . . . O.K., NOW THAT WE SEE THAT MUCH, LET'S PATCH MOVCPM.COM TO DO THE "AUTOLOAD" OF MBASIC.COM AND STARTREK.BAS... -S0A07 <--- SUBSTITUTE, STARTING AT ADDRESS 0A07 HEX 0A07 00 0F <--- 15S "METHOD" WILL WORK FOR CP/M VERSION 1.4 JUST AS WELL): .___ CCP JUMP ENTRY (NORMAL ENTRY) \ \ .___ CCP JUMP ENTRY TO BYPASS "AUTOLOAD" \ \ \ \ .___ 128 CHARACTERS ALLOWED FOR COMMAND \  CHARACTERS IN FILENAMES TO "AUTOLOAD" 0A08 20 4D <--- ASCII 'M' 0A09 20 42 <--- ASCII 'B' 0A0A 20 41 <--- ASCII 'A' 0A0B 20 53 <--- ASCII 'S' 0A0C 20 49 <--- ASCII 'I' 0A0D 20 43 <--- ASCII 'C' 0A0E 20 <--- WE   NEEDED A 'SPACE', SO LEAVE AS IS... 0A0F 20 53 <--- ASCII 'S' 0A10 20 54 <--- ASCII 'T' 0A11 20 41 <--- ASCII 'A' 0A12 20 52 <--- ASCII 'R' 0A13 20 53 <--- ASCII 'T' 0A14 20 54 <--- ASCII 'R' 0A15 20 45 <--- ASCII JUST AS WELL "AUTOLOAD" AND ENVOKE SUBMIT FILES (INCLUDING COMMAND STRINGS), WHATEVER, AND CAN COMPLETELY "OVERLAY" DIGITAL RESEARCH'S COPYRIGHT NOTICE AND USE AS MANY ASCII CHARACTER ENTRIES AS ARE REQUIRED...DON'T SUBSTITUTE PASSED ADDRESS 0A'E' 0A16 20 4B <--- ASCII 'K' 0A17 20 . <--- QUIT SUBSTITUTING -D0A00 <--- LET'S "DUMP" WHAT WE JUST ENTERED... .___ 15 CHARACTERS IN MBASIC STARTREK \ 7F HEX HOWEVER! NOW EXIT DDT (CONTROL-C OR G0), AND LET'S LOOK AT THE NUMBER THAT YOU WROTE DOWN...IT'S THERE ON THAT PIECE OF PAPER, NEXT TO THE BEER CAN... HMMM...SAYS 2800...O.K., MULTIPLY THE 2 BY 16 (FOR THOSE THAT ARE O \ .___ START OF MBASIC STARTREK \ \ \ \ 0A00 C3 5C 03 C3 58 03 7F 0F 4D 42 41 53 49 43 20 53 .\..X...MBASIC.S 0A10 54 41 52 54 52 45 4A 20 43 4F 50 59 52 49 47 48 TARTREK.COPYRIGH 0A20 54 20 2N BEER NUMBER 7, THAT'S 32...THE NUMBER 7 IS (AS EVERYONE KNOWS) "KELLY'S KONSTANT"). NOW SINCE THE 8 ENDS IN TWO ZEROS, SUBTRACT 1 FROM 8 (THAT LEAVES 7, FOR THOSE OF YOU THAT SMOKE THE "FUNNY STUFF")...NOW ADD 32 AND 7 TOGETHER...E8 43 29 20 31 39 37 39 2C 20 44 49 47 49 T (C) 1979, DIGI 0A30 54 41 4C 20 52 45 53 45 41 52 43 48 20 20 00 00 TAL RESEARCH .. 0A40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0A50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ..RRR...AHHHH...FAR OUT!...39! NOW FOLLOW ALONG CLOSELY: A>SAVE 39 TREKLOAD.COM WE JUST SAVED 39 PAGES (256 BYTES/PAGE) OF THE PATCHED MOVCPM.COM...AND FOR REFERENCE, RENAMED IT TO TREKLOAD.COM...NOW SYSGEN YOUR DIS.............. 0A60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0A70 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ . . . KEEP IN MIND, THAT YOU ARE NOT LIMITED TO JUST FILENAMES...YOU COULD KETTE (HOWEVER YOU DO THAT) WITH TREKLOAD INSTEAD OF MOVCPM, AND "COLD BOOT" THE DISKETTE. IT SHOULD "BOOT" WITH MBASIC BEING EXECUTED, THEN MBASIC TAKES OVER AND LOADS IN STARTREK, AND THEN YOU ARE READY TO "ZAP" SOME KLINGONS! ++++  ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ A SIMPLE SUBROUTINE TO CHECK FOR "STACK OVERFLOW" BY KELLY SMITH, CP/M-NET "SYSOP" HERE IS A SIMPLE SUBROUTINE TO BE CALLED IREMEMBER THAT THE STACK WORKS DOWN TOWARDS (TYPICALLY) YOUR APPLICATIONS PROGRAM...LEAVE SUFFICIENT CODE BETWEEN THE "STACK$END" AND "OLDSTK" SO (AT WORST) YOU CAN EXIT ON STACK OVERFLOW "GRACEFULLY"...YOU CLOBBER "OLDSTK", AND ALN YOUR APPLICATIONS PROGRAM TO CHECK FOR A POSSIBLE "STACK OVERFLOW" CONDITION. THIS SUBROUTINE MIGHT BE ESPECIALLY HELPFUL DURING THE "DEBUG STAGE" OF YOUR SOFTWARE WHERE YOU MAY NOT BE SURE OF YOUR TOTAL STACK REQUIREMENTS...YOU CL BETS ARE OFF. ; ; THIS IS THE TEST FOR "CHECK$STACK"...WITH 'DEBUG' FALSE, ; THE PROGRAM WILL EXIT TO CP/M WITH THE STACK OVERFLOW ; MESSAGE. ; TRUE EQU -1 ; DEFINE TRUE FALSE EQU NOT TRUE; DEFINE FALSE DEBUG EQU OULD MAKE CALLS TO "CHECK$STACK" FROM NUMEROUS PLACES IN YOUR SOFTWARE AS A MONITOR OF STACK ALLOCATION, AND BY USING CONDITIONAL ASSEMBLIES, REMOVE ALL THE CALLS WHEN YOUR DEBUG IS COMPLETED. OTHER APPLICATIONS, INCLUDE STACK ORIENTED FALSE ; DEFINE DEBUG (IF TRUE, MAKES SUFFICIENT STACK) ORG 100H LXI H,0 ; SAVE "OLD" CP/M STACK POINTER DAD SP SHLD OLDSTK LXI SP,STACK; SET "LOCAL" STACK CALL TEST  LANGUAGES SUCH AS STOIC, FORTH OR PASCAL WHERE SOME HEAVILY "COMPUTE BOUND" APPLICATIONS PROGRAMS COULD EVENTUALLY "GOBBLE UP" MEMORY AND CLOBBER THE OPERATING SYSTEM. I WROTE A SIMPLE TEST PROGRAM WITH WHICH YOU CAN USE TO VERIFY  LHLD OLDSTK SPHL RET ; TEST: CALL TEST1 CALL CHECK$STACK TEST1: CALL TEST2 CALL CHECK$STACK TEST2: CALL TEST3 CALL CHECK$STACK RET TEST3: RET ; ; END OF TEST ONTHE OPERATION OF "CHECK$STACK"...THE EXIT ON "BLOW UP", RESETS THE STACK POINTER TO THE "OLD STACK" POINTER, THEN DISPLAYS 'STACK OVER-FLOW, DEPTH = NN' (WHERE NN EQUALS THE "STACK DEPTH" IN HEXADECIMAL FOR UP TO 256 STACK "LEVELS").  "CHECK$STACK", INCORPORATE THE FOLLOWING CODE ; FOR YOUR PARTICULAR APPLICATION...WITH A LITTLE MORE THOUGHT, ; YOU COULD ALSO DISPLAY THE ADDRESS OF THE LAST CALL PRIOR TO ; THE "STACK OVERFLOW", AND THEREBY LET YOUR PROGRAM TELL YOU ;    WHERE IT BLEW UP...I WILL LEAVE THAT EXERCISE FOR YOU. ; CHECK$STACK: ; CHECK TO SEE IF STACK POINTER IS BELOW STACK$END ; PUSH H ; SAVE H$L REGS. LXI H,-STACK$END ; WON'T WORK FOR STACK$END = 0000  HEXADECIMAL DIGIT RAR ! RAR ! RAR ! RAR ; DISPLAY HIGH NIBBLE FIRST... ; HEXASCII: ; CONVERT 1 DIGIT HEXADECIMAL TO 1 DIGIT ASCII ; ANI 0FH ; MASK FOR LOW NIBBLE POSITION ADI 90H ; CONVERT HEX DAD SP POP H ; RESTORE H$L REGS. RC ; RETURN IF STILL O.K. ; ; COME HERE ON STACK OVER-FLOW ; LXI H,0 ; CLEAR H&L REGS. DAD SP ; STACK POINTER TO H&L REGS. LXI DDIGIT TO ASCII DIGIT DAA ACI 40H DAA MOV E,A ; PASS TO CP/M IN E REG. MVI C,2 ; DISPLAY CHARACTER FUNCTION CALL 5 ; LET CP/M DO THE WORK... POP D ! POP B ; GET "S,STACK ; GET ORIGINAL STACK TOP ADDRESS MOV A,E ; DO 16 BIT SUBTRACT, TO CALCULATE "STACK DEPTH" SUB L MOV E,A MOV A,D SBB H MOV D,A ; 16 BIT RESULT IN D&E REGS. TACK DEPTH" AND DIGIT COUNT DCR C ; DEBUMP DIGIT COUNT RZ ; RETURN TO CP/M, IF BOTH DIGITS DISPLAYED PUSH B ! PUSH D ; NOT YET, SO DISPLAY SECOND DIGIT MOV A,E ; GET HEXADECIMAL DIGIT  LHLD OLDSTK ; RESTORE "OLD" CP/M STACK POINTER SPHL PUSH D ; SAVE "STACK DEPTH" LXI D,STACK$OVERFLOW$MESSAGE MVI C,9 ; DISPLAY STRING FUNCTION CALL 5 ; LET CP/M DO THE WORK...  JMP HEXASCII; DISPLAY AND EXIT TO CP/M, NEXT TIME THRU... ; STACK$OVERFLOW$MESSAGE: ; INDICATE STACK OVERFLOW ; DB 0DH,0AH,'STACK OVER-FLOW, DEPTH = $' ; OLDSTK: DS 2 ; STORAGE FOR "OLD" CP/M STACK POINTER ;  POP D ; RECOVER "STACK DEPTH" ; DISPLAY$STACK$DEPTH: ; DISPLAY UP TO 256 DEEP STACK DIGITS ; MVI C,2 ; DISPLAY 2 DIGITS PUSH B ! PUSH D ; SAVE 2 DIGIT COUNT AND "STACK DEPTH" MOV A,E ; GETDS 32 ; "DUMMY" PROGRAM STORAGE ; STACK$END EQU $ ; STACK END IF DEBUG ; IF DEBUG, DS 32 ; 16 LEVEL STACK ELSE ; ELSE, DS 2 ; 1 LEVEL STACK EN  DIF STACK EQU $ ; STACK STARTS HERE ; END ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ CP/M-NET "TIP-OF-THE-MONTH" EVER WISHED YOU COULD REPEAT A PROGRAM OVER-AND-OVER, WITHOUT HAX (WHERE THE PREVIOUS FILE IS STILL IN MEMORY), AND EXECUTES THE "OLD" FILE...SIMPLE! ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ CP/M-NET "SWAPPER/SHOPPER" ADVERTISING DELETED. MSG #: TO RETRIEVE (C/R VING TO GO THROUGH TYPING IN THE FILENAME AND WAITING FOR IT TO LOAD? THIS "PROGRAM" USES NO MEMORY SPACE, AND "LOADS" VERY FAST...IT WILL NOT WORK HOWEVER ON PROGRAMS THAT REQUIRE SECONDARY COMMANDS (E.G., WHERE THE PROGRAM IS INSTRUCTED TO WHEN DONE)?32 MSG 00032 IS 03 LINE(S) ON 02/08/81 FROM JOHN WOOD TO ALL RE: CP/M-NET JOURNAL FOR MARCH ----- NOT YET RECEIVED ----- MSG #: TO RETRIEVE (C/R WHEN DONE)?40 MSG 00040 IS 09 LINE(S) ON 03/15/81 FROM JOHN WOOD TO ALL RE: TIME SAVOPERATE ON SOME FILE OR PARAMETER, AFTER THE INVOCATION OF THE INITIAL PROGRAM NAME AT THE CP/M SYSTEM PROMPT). LET'S ASSUME THAT YOU ARE LOGGED ON TO DRIVE A:, THEN: A>SAVE 0 @.COM <--- SAVE THE ARBITRARY FILENAME "@.COM" A>FORMAT ING CBBS TIP YOU CAN NOW USE THE SEMICOLON CHARACTER ";" TO SEPARATE ANSWERS WHILE ANSWERING QUESTIONS FROM CBBS IN ADVANCE OF THEIR BEING ASKED. THIS SAVES CONNECT TIME FOR THE MORE EXPERIENCED USER. FOR EXAMPLE, TO RETRIEVE A SUMMARY STARTING AT 5 <--- WE WANT TO FORMAT A STACK OF DISKETTES A>@ <--- WE WANT TO DO IT AGAIN... A>@ <--- ...AND AGAIN... A>@ <--- ......AND AGAIN! WHAT HAPPENS, IS THAT THE CONSOLE COMMAND PROCESSOR (CCP) PICKS-UP THE 00, YOU GIVE THE S COMMAND, THEN PRESS RETURN, THEN TYPE IN 500. WELL, YOU KNOW IT'S GOING TO ASK FOR THE MESSAGE NUMBER, SO JUST TYPE: S;500. LIKEWISE, WHEN YOU LOG ON, CBBS ASKS (1) FIRST TIME USER? (2) FIRST NAME (3) LAST NAME, ETC. SO, REPLY: N;FILENAME "@"...PASSES IT TO THE BASIC DISK OPERATING SYSTEM (BDOS), THE BDOS "MATCHES" IT AS BEING A VALID FILE IN THE DIRECTORY OF YOUR DISKETTE, LOADS IT (NOTHING TO LOAD, BECAUSE IT HAS "0" FILE SIZE), THEN JUMPS TO ADDRESS 100 HELARRY;HOLMES;... AND SO ON. MSG #: TO RETRIEVE (C/R WHEN DONE)?51 00051 NOT FOUND. MSG #: TO RETRIEVE (C/R WHEN DONE)?1058 MSG 01058 IS 15 LINE(S) ON 03/04/81 FROM JOHN WOOD TO ALL RE: EFFICIENCY CBBS TIP GREETINGS. HERE'S A TIP FOR RAPID   USE OF THIS SYSTEM. IF YOU FIND THAT YOU REVIEW THE SUMMARY AND THEN OFTEN RETRIEVE MOST OF THE NEW MESSAGES, IT IS OFTEN QUICKER JUST TO USE THE MULTIPLE RETRIEVAL TO DO BOTH. AFTER YOU SEE THE MESSAGE HEADER (WHICH IS WHAT THE SUMMARY WOULD SHOW),  LIKE THIS. PERHAPS THE SYSTEM WOULD SELL BETTER IF ADVERTISED AS 5 AND 5/6THS CENTS PER MINUTE. RIGHT NOW THE SYSTEM HAS TO COMPETE WITH FREE BBS. WHY PAY FOR CABLE WHEN YOU CAN WATCH ALL THE ASPIRIN ADS YOU EVER DREAMED OF FOR FREE ON THE NETWORKS? JUST TYPE CONTROL-C TO SKIP IT IF YOU ARE NOT INTERESTED IN THAT MSG, AND THE NEXT MESSAGE WILL START TO PRINT, ETC. THIS LETS YOU MAKE ONE PASS OVER THE MESSGES INSTEAD OF TWO (ONE FOR SUMMARY , ONE FOR RETRIEVALS.) IF YOU HAVE TROUBLE DOING THIS 'OALSO, I USE 8BBS AS OPPOSED TO THIS ONE BECAUSE IT HAS 80 CHAR, 1200 BAUD CAPABILITY AND A LARGE FOLLOWING. I'VE NOTICED THAT TRAFFIC HERE HAS INCREASED SINCE 8BBS DEVELOPED MESSAGE CANCER. MSG #: TO RETRIEVE (C/R WHEN DONE)?2144 MSG 02144 IS 06 N THE FLY' JUST REMEMBER TO USE CONTROL-S TO FREEZE THE DISPLAY WHILE YOU DECIDE IF YOU WANT TO READ THE MSG. (OR YOU COULD USE THE (N)ULLS CMD TO SET A LARGE NUMBER OF NULLS, WHICH EFFECTIVELY SLOWS DOWN THE SPEED OF OUTPUT TO YOU.) LET ME KNOW HOW TLINE(S) ON 08/09/81 FROM ERIC STROHMEYER TO ALL RE: ** MORE ABOUT DIALOG MORE INFORMATION WILL BE PROVIDED FOR ANYONE THAT IS INTERESTED ABOUT DIALOG BY CALLING (415) 858-2700. THE DIALOG SERVICE WAS RECENTLY WRITTEN UP IN JUNE'S BYTE MAGAZINE. LEAVEHIS WORKS FOR YOU. MSG #: TO RETRIEVE (C/R WHEN DONE)?1051 01051 NOT FOUND. MSG #: TO RETRIEVE (C/R WHEN DONE)?2099 MSG 02099 IS 14 LINE(S) ON 07/30/81 FROM STEVE GABRIEL TO JOHN WOOD RE: TELEMAIL HOW FINE DOES TELEMAIL SLICE TIME? CAN ONE BE ANY MESSAGES ON THIS SYSTEM AND I WILL ANSWER THEM FOR YOU. THANKS FOR YOUR INTEREST.........ERIC STROHMEYER MSG #: TO RETRIEVE (C/R WHEN DONE)?R;2156 --INVALID NUMBER-- MSG #: TO RETRIEVE (C/R WHEN DONE)?2156 MSG 02156 IS 16 LINE(S) ON 08 CHARGED FOR FRACTIONS OF A MINUTE? IF SOMEONE LOGS ON FOR 3 MINUTES AND 1 SECOND WILL HE BE CHARGED $3.50 (1 HOUR), $0.175 (3 MINUTES), $0.175972 (3 ' 1 "), $0.18 (ROUND-UP OF LAST TWO) OR SOMETHING ELSE? WE CHEAP BASTARDS ARE CONCERNED WITH MATTERS/12/81 FROM MIKE MARIANT TO ALL RE: PARTS/ ELECTRONIC ******* NEED ELECTRONIC PARTS? ******* ******* I MAY HAVE IT ******* WILL SELL AT A COST LESS THAN ANY SURPLUS ELECTRONIC PARTS STORE...........CALL AT THE NUMBER ON NEXT MESSAGE    T H A N K Y O U A N D G O O D B Y E ******************* END MESSAGE ************** MSG #: TO RETRIEVE (C/R WHEN DONE)?2157 MSG 02157 IS 07 LINE(S) ON 08/12/81 FROM MIKE MARIANT TO ALL RE: ELE MSG #: TO RETRIEVE (C/R WHEN DONE)?2102 MSG 02102 IS 15 LINE(S) ON 07/31/81 FROM JOHN WOOD TO STEVE GABRIEL RE: TELEMAIL Q'S ANSWERED TELEMAIL BILLS TO THE NEAREST MINUTE. YOU DO NOT GET STUCK $3.50 FOR JUST ONE MINUTE OF USE. YES, I AGREE FRECRONIC PARTS NUMBER CONT. HERE IS THE NUMBER YOU NEEDED TO MESSAGE #2156 (408) 987-0045 ***ON MONDAYS ONLY-FROM 1700-1800*** ********* END MESSAGE ******* MSG #: TO RETRIEVE (C/R WHEN DONE)?2038 MSG 02038 IS 14 LINEE CBBS/8BBS SYSTEMS ARE NICE. SOME OF THE ADVANTAGES OF TELEMAIL (AND WORTH PAYING FOR) ARE: MULTI-USER (HUNDREDS OF SIMULTANEOUS USERS CAN DIAL-IN) LOCAL ACCESS PHONE CALLS FOR ALMOST ANYWHERE IN U.S. UNLIMITED PRIVATE FILE STORAGE (ONE PENNY / 1(S) ON 07/20/81 FROM INTERACTIVE BUSINESS TO ALL USERS RE: ACCESS/TELEMAIL INFO ACCESS/TELEMAIL IS A GLOBAL, MULTI-USER COMMUNICATIONS SYSTEM FEATURING PRIVATE PERSON-TO-PERSON ELECTRONIC MAIL, MULTIPLE, SUBJECT-ORIENTED BULLETIN BOARDS, AND FILE TRANK / DAY ) MANY BULLETIN BOARDS NAMED BY SUBJECT CONTENT FOR RAPID SELECTION OF MSGS THAT INTEREST YOU COMMERCIAL ADS ENCOURAGED; YOU CAN TRY TO MAKE A BUCK! TRUE PRIVATE PERSON-TO-PERSON MESSAGES EVENTUALLY WILL HAVE TELEX/TWX CAPABILITY SFER CAPABILITIES. FOR A VERY REASONABLE COST OF ONLY $3.50 PER HOUR (NON-PRIME TIME) EACH SUBSCRIBER CAN COMMUNICATE WITH ANYONE ELSE USING THE SYSTEM. NEVER A BUSY SIGNAL AND AVAILABLE FOR A LOCAL PHONE CALL IN ALMOST EVERY MAJOR CITY OR AREA IN TH MUCH CHEAPER THAN DIRECT DIAL LONG DISTANCE MODEM-TO-MODEM MORE *DIVERSE* USERS, NOT JUST LOCAL CALLERS! INTERNATIONAL ACCESS (IF YOU CAN AFFORD IT) MSG #: TO RETRIEVE (C/R WHEN DONE)?2184 MSG 02184 IS 06 LINE(S) ON 08/16/81 FROM JIM MAY TE UNITED STATES. TRANSFER MESSAGES OR DATA CROSS-COUNTRY FOR ONLY $3.50 PER HOUR! POST YOUR OWN MESSAGE OR *COMMERICAL* ADS ON OUR BULLETIN BOARDS. DUST-OFF THAT PROGRAM LISTING AND BECOME A MOONLIGHTING ENTREPENEUR! REACH OUT AND TOUCH EVERYONE!! O TELEMAIL/IBS USERS RE: TELEMAIL TODAY I GOT NOTICE THAT TELEMAIL/IBS WAS GOING AWAY. I HOPE THAT THERE WILL BE SOMETHING THAT WILL BE ABLE TO REPLACE IT FOR THOSE WHO HAVE BECOME DEPENDENT UPON IT. WHAT MORE CAN I SAY? HAVE A NICE DAY --- JIM MAY -  -- MSG #: TO RETRIEVE (C/R WHEN DONE)?.___ NUMBER OF CHARACTERS IN FILENAME \ \ \ \ \ \ TITLE SECRETS OF CP/M VERSION 1.4 FILENAME SECRET14.DOC AUTHOR Robert A. Van Valzah 4/27/78 M Y S T E R Y B D O S F U N C T I O N S FUNC ACTION ---- ------ 28 MAKE CURRENT DRIVE READ ONLY (R/O) 29 RETURN R/O VECTOR. RETURNS A BYTE VALUE (IN REG A) WITH A "1" IN BIT POSITIONS OF R/O DISKS, LEAST SIGNIFICANT BIT CORRESPONDING TO DRIVE A. 30 SET DIRECTORY I/O DMA ADDRESS. INITIALLY SET TO 80H. DISK DATA I/O CONTINUES AT THE LAST ADDRESS SET BY FUNCTION 26. B O O   T A N D G O M O D F O R C C P There are some dedicated CP/M applications where it would be nice if a cold start would load CP/M and then load a transient and give it control. This could be used to make a disk which would always power up iPatch the length of your command into location 987H. 3) Patch the ASCII of the command into memory starting at location 988H, following it with the Digital Research copyright message "COPYRIGHT (C) 1978, DIGITAL RESEARCH ". 4) Perform stn BASIC, for instance. This capability has been built into CP/M version 1.4. THEORY ------ When the CCP is loaded, it checks its console input buffer to see if a command is waiting. As supplied by Digital Research, this buffer is empty and the Cep 4 above. 988H, following it with the Digital Research copyright message "COPYRIGHT (C) 1978, DIGITAL RESEARCH ". 4) Perform stCP simply signs on and prompts the user for input. The task at hand, therefore, is to fill this buffer so its contents will be executed as a CCP command as the CCP is loaded. Assuming you have SID and desire a command length of <=16 characters, this is quite simple: 1) Load an image of your operating system into low memory (ready for SYSGEN). EX: SID CPMnn.COM 2) Type "I" followed by the command line as you like CCP to execute it. EX: ISTAT.COM 3) Type M80,90,987 4) Boot and SYSGEN a disk in the normal manner. The disk will now boot and execute the command typed in step 2 above. If you don't have SID or desire a command line longer than 16 characters: 1) Perform step 1 above (use DDT if needed). 2)   are able to do real backspaces, both CP/M and Microsoft Disk BASIC assume that all of us are stupid enough to buy ASR33's. Also, each of the above two processors handles backspaces differently. The flowchart below shows how I have been able to get rid of the annoying backslashes and echoed deletions in both CP/M and BASIC. I have chosen to use the DEL key for backspacing, but another can be substituted if desired. This scheme does not make TAB corrections on backspacing (an exercise for the student--and PLEASE tell me if you are able to add in this feature!) ENTRY ! IS DF=1? :y____________ n !  ! IS DATUM='\'? :y___ IS SF=1? :n____ n ! y ! ! SET SF=1 ! ! IS DATUM=DEL? y__! SET  FLOWCHART FOR BACKSPACE HANDLING IN CP/M AND MICROSOFT BASIC R.C. Minnick Box 306 Ouray CO 81427 Unfortunately for those of us who SF=0 ! n ! ! ! ! ! ! ! SET DATUM=DEL ! ! ! ! ! ! !______!    ! ! ! ! ! DISPLAY DATUM ! ! ! ! ! SET DF=0 !  RET VDMCC: CPI 7FH ;DELETE? MVI A,7FH JNZ VDMCB POP H RET VDMCB: CALL VDM MOV A,M ANI 7FH ;DF=0 MOV M,A POP H RET  ! ! ! !_________________!_____________! ! EXIT SF=BACKSLASH FLAG DF=DELETE FLAG  ====================================== Code fragment for the above flow chart DF is bit 7 & SF is bit 6 of IOCKBD ====================================== ; ; VDM OUTPUT DRIVER - DATUM IN C - HANDLE ; DELETE FLAG (DF) & BACKSLASH FLAG (SF) VDMC: PUSH H LXI H,IOCKBD MOV A,M RLC ;CY=1 IF DF=1 JC VDMCA RLC ;CY=1 IF SF=1 MOV A,C ;DATUM JNC VDMCB MOV A,M ANI 0BFH ;SF=0 MOV M,A POP H RET VDMCA: MOV A,C CPI 5CH ;BACKSLASH JNZ VDMCC MOV A,M ORI 40H ;SF=1 MOV M,A POP H   H FO THOS O YO WH WIS T FURTHE MODIF WORDSTA BEYON JUS GETTIN YOU PRINTE T WORK THER I ON PROBLE THA QUIT FE OF THE LABELS YOU WOULD NEED TO MAKE YOUR VERSION PRETTIE AREN' GIVE YO I TH REGULA DOCUMENTATION S JUS CHANGIN TH INITIA WA WORDSTA COME UP. ITHELP: SET TO 0,1,2,3 TO GET THE INITIAL HELP LEVEL YOU WISH WHEN YOU BOOT UP REM ^J YOU CAN RESET THE LEVEL HIGHER WHEN YOU NEED TO. ITITOG T HAV INSERTIO OF F T HAV INSERTION ON ^THAT YOU GOT WITH YOUR MACHINE. THI ARTIC MA NO B O AN INTRES T PEOPL WH HAVEN' USE INSTAL YET I YO HAVEN'T USED INSTALL YET GET TO KNOW IT FIRST. THI ARTIC I INTENDE T FO THOS WH GE T TH EN O INSTAL AN TH B TO TOGGLE WHEN RUNNING HAVE HYPEN HELP ON. INITLM INITRM TH INITIA LEF AN RIGH MARGI DEFAULT ALS TH PLAC YOU PRINTE START PRINTIN FRO THI VALU I I HE TYPICALY SET AT 40H 30H SEEMS ABOUT RIGHT FOR THE RIGH MARGI O THE G O T TH PATCHER AT THE END OF THE INSTALL PROGRAM. TYP I TH LABE COLO AN TH PATCHE WIL RETURN THE ADDRESS TO BE PATCHED LIKE THIS PALT: ADDRESS: XXXX OLD VALUE:XXH NEW VALUE: YO THE ENTE TH NE VAL CURREN O YOUL HAV T DECIDE ON THE LEFT MARGIN. INITWF: 0385: FF WORDWRAP FLAG ^OW 0386: FF JUSTIFY FLAG ^OJ 0387 F VARIABL TAB FLA WIL US FIL TAB ^OV 0388: 00 SOFT HYPEN ENTRY ^OE 0389 F HYPE HEL ^O FO ^ NO T ALLO U AN THE HI RETUR AFTE ADDIN IT TO ENTER IT. TH FIRS ON ISN LABE BU RATHE A ADDRESS FO THOS O YO WH DON' LIK TH WA WORDSTA WRAP TH RULE BA AROUN AN UNDE TH ABOV ONE ON WIDE MARGINS. ADDRESS: 0249 OLD VA USER TO HYPENATE 038A: FF PRINT CONTROL AND SOFT HYPEN DISPLAY ^OD 038B: FF DISPLAY RULER ANDTAB STOPS 0 NOT TO ^OZ 038C: FF DYNAMIC PAGE BREAK DISPLAY 038D: FF "" 038E: 01 INITIAL LINE SPACING 1,2,3, ETC. PRINT OPTIONS 0LUE:50 NEW VALUE: 80 PRESTO THAT'S DONE. NEX I THI ARTICL I'L GIV YO TH LABEL O ADDRESSE I'V S FA FOUN FO TH TOGGLE AN PRIN OPTION O HO WORDSTA COME U WHE YO BOO THES AR ESPECIALL USEFUL BECAUS THER HARMLE3CA: 00 DISK FILE OUTPUT 03CB: 00 USE FORM FEEDS 03CC: 00 SUPPRESS PAGE FORMATTING 03CD: 00 PAUSE BETWEEN PAGES 03D3: 00 INITIAL OMIT PAGE NUMBERS FLAG 03D4 0 INITIA MICROJUSTIF SWITCH T SUPPRESS 03D5 0 INITIA BIDIRECTIONA PRIN SWITC   T DISABLE THI I FA FRO COMPLET TABL O TH SWITCHE POSSIBL WIT WORDSTA BU PRINTER VAR GREA DEA AN TEX OVERLAY ET AR RATHE TECNICAL FOR MOST OF US. If a programmer is found to be indispensable, the best thing to do is to get rid of him as quickly as possible. -The Psychology of Computer Programming, Gerald M. Weinberg, (Van Nostrand Reinhold Co., 1971) Some years ago, when COBOL was the great white programming hope, one heard much talk of the possibility of executives being able to read programs ... nobody can seriously have believed [this] ... even programmers do not read programs. -Weinberg, p.5 There are ... programs that should be thrown away before ever being used. -Weinberg, p.20 Asking for efficiency and adaptibility in the same program is like asking for a beautiful and modest wife ... we'll probably have to settle for one or the other. -Weinberg, p.22 If the programmer is working in a language that allows only three dimensions, we are not likely to observe m  ore than three. -Weinberg, p.31 Putting a bunch of people to work on the same problem doesn't make them a team. -Weinberg, p.35 The systems designer suffer[s] because the better his system does i no employer, if he appreciates the quality of work, will ask a craftsman to accept them. -Weinberg, p.204 Another effect [of not having a spoken form] is the difficulty with which we can talk about a programming languagets job, the less its users know of its existence. -Weinberg, p.124 ... each program has an appropriate level of care and sophistication dependent on the uses to which it will be put. -Weinberg, p. without a blackboard or pencil and paper. Every programming office should have a blackboard, chalk, and many erasers. -Weinberg, p.207 'Programming' - like 'loving' - is a single word that encompasses an in127 To detect errors, the programmer must have a conniving mind, one that delights in uncovering flaws where beauty and perfection were once thought to lie. -Weinberg, p.136 For locating errors, however, finitude of activities. -Weinberg, p.121 The important thing is not to stop questioning. Curiosity has its own reason for existing. -Albert Einstein Programming shares with prayer the feature ofwe want a person who has the persistence of a mother-in-law and the collecting instincts of a pack rat. -Weinberg, p.136 -1- If the poor workman hates his tools, the directional transmission and broadcast reception. -Weinberg, p.207 ... in some terminal systems ... the user can keep his program from being pushed down in the priority stack by fiddling with the shift key w good workman hates poor tools. The work of the workingman is, in a sense, defined by his tools. -Weinberg, p.203 No craftsman, if he aspires to the highest work in his profession, will accept [inferior] tools; andhile he is thinking. -Weinberg, p.209 The expert is a person who avoids the small errors as he sweeps on to the grand fallacy. -Anonymous The nature of programming being what it is, there is no   relationship between the 'size' of the error and the problems it causes. -Weinberg, p.247 When a programmer has a difficult time finding a bug, it is because he is looking in the wrong place. -Weinbenot perform very well until several releases after the first. -The Mythical Man-Month, Frederick Brooks, p. viii A ship on the beach is a lighthouse to the sea. -Dutch proverb Evrg, p.251 -2- Documentation is the castor oil of programming ... the managers know it must be good because programmers hate it so much. -Weinberg, p.262 The humeryone seems to have been surprised by the stickiness of the problem, and it is hard to discern the nature of it. -Brooks, p.4 The programmed computer has all the fascination of the pinball machine or the jukebox mechanism, can mind ordinarily operates at only ten per cent of its capacity - the rest is overhead for the operating system. -Anonymous We stand at the brink of a new age, an age made possible by the revolution that is embodied in the arried to the ultimate. -Brooks, p.7 The programmer, like the poet, works only slightly removed from pure thought-stuff. -Brooks, p.7 One types the correct incantation on a keyboard, and a display sccomputer. Standing on the brink, we could totter either way - to a golden age of liberty or a dark age of tyranny, either of which would surpass anything the world has ever known. Perhaps no individual's efforts will make any differereen comes to life, showing things that never were nor could be ... [however] if one character, one pause, of the incantation is not strictly in proper form, the magic doesn't work. -Brooks, p.8 nce in the result, but we must never cease trying, for then the result is sure to be tyranny. -Weinberg, p.279 ... [OS/360] was late, it took more memory than planned, the costs were several times the estimate, and it did  -3- ... one's authority is not sufficient for his responsibility. -Brooks, p.8 ... designing grand concepts is fun; finding nitty little bugs is just work. -Brooks, p.8    As soon as one freezes a design, it becomes obsolete in terms of its concepts. -Brooks, p.9 Good cooking takes time. If you are made to wait, it is to serve you better, and to please you. -Menu  -4- Observe that for the programmer, as for the chef, the urgency of the patron may govern the scheduled completion of the task, but it cannot govern the actual completion. -Brooks, p.21 of Restaurant Antoine, New Orleans All programmers are optimists. -Brooks, p.14 This time it will surely run. -Anonymous I just found the last bug. -Unanimous A large pr ... when [the omelette] has not set in two minutes, the customer has two choices - wait or eat it raw. -Brooks, p.21 Brooks Law: Adding manpower to a late software project makes it later. -Brookogramming effort ... consists of many tasks, some chained end-to-end. The probability that each will go well becomes vanishingly small. -Brooks, p.16 Cost does indeed vary as the product of the number of men and thes, p.25 ... the sheer number of minds to be coordinated affects the cost of the effort. -Brooks, p.30 ... conceptual integrity is the most important consideration in system design. -Brooks, p.4 number of months. Progress does not. Hence the man-month as a unit for measuring the size of a job is a dangerous and deceptive myth. -Brooks, p.16 The bearing of a child takes nine months, no matter how many women a2 The purpose of a programming system is to make a computer easy to use. -Brooks, p.43 Neither function alone nor simplicity alone defines a good design. -Brooks, p.43 Add little to littlre assigned. -Brooks, p.17 When everything has been seen to work, all integrated, you have four more months work to do. -Charles Portman International Computers Limited e and there will be a big pile. -Ovid He'll sit here and he'll say, 'Do this! Do that!' And nothing will happen. -Harry S. Truman Never go to sea with two chronometers; take one or three.    -Anonymous I know it. I know what needs to be done - but every time I try to tackle a technical problem some bloody fool wants me to make a decision about trucks - or telephones - or some damn thing. -Robert Heinleiate programming for long. -Weinberg, p.152 The programmer's national anthem is 'AAAAAAAAHHHHHHHH'. -Weinberg, p.152 When we finally see the light, we see how once again we have fallen into some fooln The Man Who Sold the Moon -5- The problem was that everybody who was working there, including myself, wanted to do really neat stuff but they didn't want neat stuff, theish assumption, some oafish practice, or some witless blunder. -Weinberg, p.152 The computer always has an excuse: the programmer never does. -Mark C. Davison The user does not know what he wants y just wanted a lot of stuff fast. -Rick Baker, make-up artist for King Kong, Star Wars, et. al. The generation of random numbers is too important to be left to chance. -Robert R. Coveyouuntil he sees what he gets. -Ed Yourdon -6- We tend to blame the physical media for most of our implementation difficulties; for the media are not 'ours'  Oak Ridge National Laboratory It's redundant! It's redundant! -R. E. Dundant I don't know any reason why we couldn't do it, but maybe we can think of one. -Mark C. Davison in the way ideas are, and our pride colors our judgement. -Anonymous Completely compatible - things that work together with less than $1000 of interfaces and less than 100 man-hours of software patches.  Bug? That's not a bug, that's a feature. -T. John Wendel The computer 'Doth make fools of us all'. -Weinberg, p.152 Any fool without the ability to share a laugh on himself will be unable to toler -Datamazing, 4/1/78 Stack manipulation - the use of inflatable falsies. -Datamazing, 4/1/78 Design of both hardware and software must be considered when doing the system design. -Proceeding!  s of the IEEE, 2/78, p.167 The job cannot be done right unless the necessary tools are available. -Proceedings of the IEEE, 2/78, p.174 I hear and I forget. I see and I remember. I do and I that are taking up all your time??? -Mark C. Davison -8-  understand. -Confucius On a clear disk you can seek forever. -Computerworld button I write all my critical routines in assembler, and my comedy routines in FORTRAN. -Anonymous It is impossible to make anything foolproof because fools are so ingenious. -Edsel Murphy, dec. It seems intuitively clear that the existence of an error in a program will not be reflected in the test result unless the program component in error is executed during the test. -J.C. Huang, 'Program Instrumentation and Software Testing', Computer, Volume II Number 4  -7- If debugging is the process of removing bugs, then programming must be the process of putting them in. -Dykstra Are you at the point where you don't have the time to find solutions to the problems"  /Epso combinatio wor i som way tha yo wouldn' expect Thi articl wil tr t fil i som o thes gaps firs summarizin instruction fo INSTALL the demonstratin th modification i action togethe wit thei oddities M setu i connecte usin paralle cabl betwee th Centronics-typ interfac o th Epso an th Osbor ne' IEEE-48 interface O th basi o limite experienc wit on othe user believ tha thi shoul wor wit seria i MODIFYING WORDSTAR FOR THE EPSON MX-80 Th Epso MX-8 i currentl th mos popula printe fo micr systems I ha lo o features suc a compresse an emphasize print whic i woul b nic t b abl t us frnterfaces bu haven' ha chanc t tes i extensively. Mos o wha i sai here b th way i i th Wordstar manual chapter 1 an (particularly 15 an i th Epso manual Th importan thin t remembe abou o Wordstar Yo ca us th INSTAL program provide wit Word star t modif i t us som o thes specia features Whe starte t loo int th mechanic o modifyin Wordstar wa abl t obtai instruction pu ou b Osborn th Wordstar manua i tha th initia installation whic i th subjec o Chapte 14 ha alread bee don b Osborne an w ar mainl concerne wit patchin fe byte t specif shor characte string t b sen t th printer fro m dealer Compute Crossroad o Columbia Th instructions however ha fe errors specifie som choice whic ma no b th bes fo everyone and mos important didn' mentio som strang quirk whic mak th Wordstar Nonetheless t ge t tha par o INSTAL w hav t ge pas th initia installatio section s wil describ tha first. T star th changes plac diskett containin INSTAL i driv A an you cop (no th original! #  o Wordstar i driv B Typ INSTALL I yo nee t ente th ne value ke i "02" th chang wil b entere i memor imple mentin o no implementin subscript an superscripts Ther i tradeof involved no everyon need superscript an subscripts an withou th abilit t generat them th printe run abou 25 faster Thi i becaus thean yo wil ge th prompt "LOCATIO T B CHANGED again A thi poin yo ca ente symboli addres agai (PALT:+1 fo example) I yo jus wan th nex locatio i sequence however al yo hav t d i hi