CBBSLINK.DOC 07/12/81 DOCUMENTATION ON ASSEMBLING CBBS WITH "LINKASM.COM" Due to the size of the CBBS program source, it has been¨ broken up into several smaller .ASM files, which MUST be¨ assembled with LINKASM.COM. At first, I would assemble CBBS by PIPping all the files¨ together, but this took excessive time and requires quite a bit¨ of disk space. I then wrote a program which combines the¨ files, eliminating all comments. This, eventually, also became¨ unwieldy. The final solution was to come up with an assembler which¨ could handle multiple source files so the files need not¨ physically be copied before assembling. The only alternatives readily commercially available are¨ the Microsoft ASM-80 assembler or the Digital Research RMAC,¨ which require separate assemblies, and a linkage editor to¨ combine object modules. This would not be a bad solution, but¨ has the following drawbacks: 1. CBBS users would have to buy one of the assemblers. 2. When debugging, the listing would not have the proper¨ assembly addresses, and lots of hex calculating would have to¨ be done. 3. Worst of all, no .SYM file would be generated. This would¨ significantly impede debugging using Digital Researches SID¨ (Symbolic Instruction Debugger). I would not attempt to modify¨ or maintain CBBS without SID. I rewrote the CP/M assembler version 1.0, to handle a new¨ pseudo-op code, LINK. I moved the I/O buffers out of the¨ middle of the code, to the end where they don't have to be¨ loaded with the .COM file. I also increased the buffer sizes,¨ to: 1000H .ASM BUFFER SIZE 800H .HEX BUFFER SIZE (earlier versions were 400H) 400H .PRN BUFFER SIZE Extra code (JMP tables for hand-link editing, space¨ padding for subroutine expansion and patches, etc) were¨ removed. I incorporated a patch to handle lower case¨ characters, and corrected it so it handles DB statements which¨ include double quotes like: DB 'I don''t know what you mean' Each file has a LINK pseudo op as the last instruction in¨ the file. CBBS.ASM is the first one, and results in linking to¨ all the rest. To run the assembly, execute: LINKASM CBBS.SHP [symdisk:] Where S is the source disk, H the hex disk, and P the prn disk. This is the same as the normal CP/M assembler, i.e. Z may¨ be used for either the .hex or .prn disk, and X may be used for¨ the .prn disk, to direct it's output to the console. Added is¨ the "symdisk:" (e.g. A: or B: with no filename) which¨ specifies a symbol table for use under SID will be written as¨ CBBS.SYM. It is partially sorted (all As then all Bs, etc). For example, an assembly of CBBS on a 2 disk system, with¨ LINKASM on A:, and CBBS .ASM files on B:, with the .HEX and¨ .SYM files written to B:, and the .PRN file thrown away, would¨ be: LINKASM CBBS.BBZ B: If for some reason you do not like the idea of LINKASM,¨ i.e. perhaps you insist on having Macros in it, then edit out ¨ the LINK pseudo ops from each file, and PIP the following¨ files together, in order, end-to-end. ...But the result would¨ be a relatively unwieldy .ASM file of perhaps 128K or more,¨ and over 7000 lines. Without stripping lots of comments, it¨ couldn't even be edited on 1 single density disk. The utility program "FAST" has been included on this disk. ¨ If you have a moderate amount of memory, it allows options such¨ as full track read and/or write buffering, and directory¨ buffering, on 1 or more disks. A brief overview of FAST.COM: Just say FAST before your¨ other command, such as: FAST [BY] LINKASM CBBS.BBZ B: <> This says you want B disk buffering, with the Y saying you¨ want all types (1 track read buffer, 1 track write buffer, and¨ a directory buffer (seek buffer)). See FAST.DOC for details. ¨ This excellent speeder-upper was written by Bob Van Valzah. See¨ FAST.DOC for details. ASSEMBLY ORDER FOR CBBS FILES CBBS .ASM CBBSFUNC.ASM CBBSBYE .ASM CBBSSUMM.ASM CBBSENT1.ASM CBBSENT2.ASM CBBSRTRV.ASM CBBSOPER.ASM CBBSKILL.ASM CBBSDISK.ASM ! COMPUTIME CLOCK: IF CLOCKC---> CBBSCLKC.ASM----+ ! ! SCITRONICS CLOCK: IF CLOCKS---> CBBSCLKS.ASM ! ! ! ! !<-------------+<----------+ V CBBSSUB1.ASM CBBSSUB2.ASM CBBSSUB3.ASM ! IF PMMI------>CBBSPMMI.ASM----+ ! ! IF HAYES----->CBBSHAYS.ASM--->! ! ! IF IDS------->CBBSIDS.ASM---->! ! ! IF SERMODM--->CBBSMODM.ASM--->! ! +<-------------------------+ ! V CBBSWORK.ASM