Home

CPM 14 Manual - Altair 8800 Clone

image

Contents

1. LIST LIST CHARACTER FROM REGISTER C 3ED1 79 MOV CHARACTER TO REGISTER A 3ED2 C9 RET NULL SUBROUTINE r PUNCH PUNCH CHARACTER FROM REGISTER C 3ED3 79 MOV CHARACTER TO REGISTER A 3ED4 C9 RET NULL SUBROUTINE r READER READ CHARACTER INTO REGISTER A FROM READER DEVICE 3ED5 1 MVI A 1AH ENTER END OF FILE FOR NOW REPLACE LATER 3ED7 E67F ANI TO STRIP PARITV BIT 3ED9 C9 RET I O DRIVERS FOR THE DISK FOLLOW FOR NOW WE WILL SIMPLY STORE THE PARAMETERS AWAY FOR USE IN THE READ AND WRITE SUBROUTINES r HOME MOVE TO THE TRACK 00 POSITION OF CUPRENT DRIVE TPANSLATE THIS CALL INTO SETTRK CALL WITH PARAMETER 00 3EDA OEOO MVI c 0 SELECT TRACK 0 3EDC CDFS3E CALL SETTRK 3EDF C9 RET WE WILL MOVE TO 00 ON FIRST READ WRITE E SELDSK SELECT DISK GIVEN BY REGISTER 3EEO 79 MOV A C 1 324600 STA DISKNO 3EE4 DS 10H SPACE FOR DISK SELECTION ROUTINE 3EF4 C9 RE SETTRK SET TRACK GIVEN BY REGISTER C
2. MDS COLD START LOADER FOR CP M FALSE EQU 0 RUE EQU NOT FALSE TESTING EQU FALSE IF TRUE THEN GO TO MON80 ON MSIZE EQU 16 MEMORY SIZE IN KILOBYTES CBASE EQU MSIZE 8 1024 CPM BASE BDOSB EQU CBASE 900H BASE OF DOS BDOS EQU CBASE 1206H ENTRY OF DOS BDOSE EQU MSIZE 1024 END OF DOS LOAD BOOT EQU BDOSE 2 256 COLD STAR RBOCT EQU BOOT 3 WARM STAR ORG 80H LOADED DOWN FROM HARDWARE BOOT A r BDOSL EQU BDOSE BDOSB NTRKS EQU 2 NUMBER OF TRACKS TO READ BDOSS EC U BDOSL 128 NUMBER OF SECTORS IN DOS BDOS0 EQU 25 NUMBER OF BDOS SECTORS ON BDOS1 EQU BDOSS BDOSO NUMBER OF SECTORS MON80 EQU OF800H INTEL MONITOR BASE RMON8 0 EQU OFFOFH RESTART LWATION FOR MON80 BASE EQU 078H BASE USED BY CONTROLLER RTYPE EQU BASE 1 RESULT TYPE RBYTE EQU BASE 3 RESULT BYTE RESET EQU BASE 7 RESET CONTROLLER r DSTAT EQU BASE DISK STATUS PORT LOW EQU BASE 1 LOW IOPB ADDRESS HIGH EQU BASE 2 HIGH IOPB ADDRESS RECAL EQU 3H RECALIBRATE SELECTED DRIVE READF EQU 4H DISK READ FUNCTION STACK EQU 100E USE END CF BOOT FOR STACK RSTART LXI SP STACK IN CASE OF CALL TO MON80 CLEAR THE CONTROLLER OUT RESE LOGIC CLEARED MVI NTRKS
3. BOOT COLD STAR WBOOT WARM START SAVE I 0 BYTE BOOT AND WBOOT ARE THE SAME FOR MDS CONST CONSOLE STAIUS REG A 00 IF NO CHARACTER READY REG A FF IF CHARACTER READY CONIN CONSOLE CHARACTER IN RESULT IN REG A CONOUT CONSOLE CHARACTER OUT CHAR IN REG C LIST LIST OUT CHAR IN REG C PUNCH PUNCH OUT CHAR IN REG C READER PAPER TAPE READER IN RESULT TO REG A HOME MOVE TO TRACK 00 E THE FOLLOWING CALLS SET UP THE IO PARAMETER BLOCK FOR THE MDS WHICH IS USED TO PERFORM SUBSEQUENT READS AND WRITES SELDSK SELECT DISK GIVEN BY REG C 0 1 2 SETTRK SET TRACK ADDRESS 0 76 FOR SUBSEQUENT READ WRITE SETSEC SET SECTOR ADDRESS 1 26 FOR SUBSEQUEN READ WRITE SETDMA SET SUBSEQUENT DMA ADDRESS INITIALLY 80H r READ AND WRITE ASSUME PREVIOUS CALLS TO SET UP THE IO PARAMETERS T READ READ TRACK SECTOR TO PRESET DMA ADDRESS A WRITE TRACK SECTOR FROM PRESET DMA ADDRESS u A H BOOT E00 E06 E09 EOC EOF E12 E15 Q QQ QQ ww www ww www 0002 00FD OOFC 00F3 0071 HH F800 FFOF ERROR F
4. WREADV NOT READV TREAT AS ERROR FOR NOW 3FC6 DB7B IN RBYTE CLEAR RESULT BYTE 3FC8 C3CB3F JMP TRYCOUNT r WERROR RETURN HARDWARE MALFUNCTION CRC TRACK SEEK ETC THE MDS CONTROLLER HAS RETURNED A BIT IN EACH POSITION OF THE ACCUMULATOR CORRESPONDING TO THE CONDITIONS 0 DELETED DATA ACCEPTED AS OK ABOVE 1 CRC ERROR 2 SEEK ERROR 3 ADDRESS ERROR HARDWARE MALFNCTICN 4 DATA OVER UNDER FLOW HARDWARE MALFUNCTION 75 WRITE PROTECT TREATED AS NOT READY 6 WRITE ERROR HARDWARE MALFUNCTION 57 NOT READY ACCUMULATOR BITS ARE NUMBERED 7 6 5 4 3 2 1 0 r IT MAY BE USEFUL TO FILTER OUT THE VARIOUS CONDITIONS BUT WE WILL GET A PERMANENT ERROR MESSAGE IF IT IS NOT RECOVERABLE IN ANY CASE THE NOT READY CONDITION IS TREATED AS A SEPARATE CONDITION FOR LATER IMPROVEMENT TRYCOUNT REGISTER C CONTAINS RETRY COUNT DECREMENT TIL ZERO 3FCB OD DCR C 3FCC C29B3F JNZ REWAIT FOR ANOTHER TRY r CANNOT RECOVER FROM ERROR 3E01 MVI A 1 ERROR CODE 3FD1 C9 RE r DATA AREAS MUST BE IN RAM 3FD2 00 DISKN DB 0 CURRENT DISK 3FD3 00 DISKR DB 0 TEMP FOR CURRENT DISK DURING WARM START ICPB IO PARAMETER BLOCK 3FD4 80 DB 80H NORMAL 1 0 OPERATION 3FD5 04 IOF DB READF IO FUNCTION INITIAL READ 3FD6 01 ION DB 1 NUMBER OF SECTORS TO READ 3FD7 02 IOT DB OFFSET TRACK NUMBER 3FD8 01 IOS DB 1 SECTOR NUMBER 3FD9 8000 I
5. DCR D SECTS SECTS 1 JZ BOOT BIAS GO TO BOOT LOADER AT 3E00H BIAS MORE SECTORS TO LOAD USE SP FOR SCRATCH REGISTER TO HOLD LOAD ADDRESS INCREMENT LXI SP 128 DAD SP HL HL 128 TO NEXT LOAD ADDRESS INR SECTOR SECTOR 1 MOV A C MOVE SECTIOR COUNT TO A FOR CPI 27 END OF CURRENT TRACK JC LECT CARRY GENERATED IF SECTOR lt 27 END OF TRACK MOVE TO NEXT TRACK MVI el SECTOR 1 INR B TRACK TRACK 1 JMP LSECT FOR ANOTHER SECTOR END CP M SXMBOLIC INSTRUCTION DEBUGGER USER S GUIDI CJ NB This is an old SID for CP M Version 1 3 However I doubt much changed in later SID s DIGITAL RESEARCH SID Symbolic Instruction Debugger USER S GUIDE Copyright c 1978 and 1981 Digital Research P O Box 579 801 Lighthouse Avenue Pacific Grove CA 93950 408 649 3896 TWX 910 360 5001 All Rights Reserved COPYRIGHT Copyright c 1978 and 1981 by Digital Research All rights reserved No Part of this publication may be reproduced transmitted transcribed stored in a retrieval system or translated into any language or computer language in any form or by any means electronic mechanical magnetic optical chemical manual or otherwise without the prior written permission of Digital Research Post Office Box 579 Pacific Grove California 93950 DISCLAIMER Digital Research makes
6. G FE PASS 0100 SORT Here s the first pass through SORT Z P A 00 B 006A D 0007 H 013E S 0100 P 0100 LXI H 013E SW FF PASS 012F Switching at address 161 looks OK I A 05 B 006A D 0000 H 0161 S 0100 P 012F MOV C M FE PASS 012F Switching at 162 looks good I A 05 B 0003 D 0001 H 0162 S 0100 P 012F MOV C M FD PASS 012F 164 is the next to switch looks good I A 0A B 0004 D 0003 H 0164 S 0100 P 012F MOV C M FC PASS 012F 166 is probably the next one E A 82 B 0008 D 0005 H 0156 S 0160 P 012F MOV C M DL30 So what s wrong This section of code seems to work Clear all the pass points and 1 ISORT HEX the machine code for another test R NEXT PC END 0169 0100 55B7 L CONT 5 0121 NOP 0122 LXI H 0160 LIST 0125 DAD 0126 MOV A M Here s the code where the element 0127 INX H switching occurs lets watch the 0128 CMP program switch the first element 0129 JC 0137 INCI 012 JZ 0137 INCI 012F MOV C M 0130 MOV M A 0131 DCX H G 129 0129 OK here we are ready to test And T10 switch if necessary 1 A 05 B 0000 D 0000 H 0161 S 0100 P 0129 JC 0137 INCI I A 05 B 0000 D 0000 H 0161 S 0100 P 012C JZ 0137 INCI I A 05 B 0000 D 0000 H 0161 S 0100 P 012F MOV C M I A 05 B 0003 D 0000 H 0161 S 0100 P 0130 MOV M A 1 A 05 B 0003 D 0000 H 0161 S 0100 P 0131 DCX H 1 A 05 B 0003 D 0000 M 0160 S 0100 P 0132 MOV M C LIST I A 05 B 0003 D 0000 H 0160 S
7. DBUFF OC 20 20 41 41 2A 21 20 44 3A 0 42 3F 43 E Note that the I command is used in conjunction with the R command to read program files and symbol tables after SID has initially loaded Details of the use of I in this situation are given with the R command which follows Additional valid I commands are given below I x dat Ix inp y out Ia x inp b y out p ITEST COM I TEST HEX TEST SYM 3 8 The List Code L Command The L command disassembles machine code in the memory of the machine with symbolic labels and operands placed in the appropriate fields where possible The forms of the L command are 25 SID Users Guide Section 3 a Ls b Ls f c L d Ls e Ls f L Form a lists disassembled machine code starting at symbolic location s for 1 2 CRT screen 12 lines Form b specifies an exact range for disassembly s specifies the starting location and f gives the final disassembly location Form c is similar to a but disassembles from the last listed assembled s the A command traced see the T and U commands or break address see the G and P commands Since form c also lists 1 2 CRT screen it is often used following form a to continue the disassembly process through another segment of the oroaram Forms d through f parallel a through c but disable the symbolic features of SID In particular the minus prefix prevents
8. 512 RY POINT IN BIOS OF THE CP M D START EN SIZE BER OF SI CTORS TO LOAD Gl CLEAR B TO 0 SET C TO TS 7N DP BIAS UMB NEXT S COD E AT K GIVEN R GIVEN INTO ADDR RANC gt US ER SUPPLIE ESS GIVE H TO LOCATION BY REGIS ECTOR HIS POINT TO ER B BY REGIS N BY R ER ER OF SEC TORS TO LOAD IS IN D LCAD POINT IN H L ER C EGIST PAIR R 128 BY EAD ONE u ECTOR H L COLD D RE AD OP T IF AR RATION GO KAD ERROR OCCURS KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK ES H ERE SOR PRREARL ER Sa AIRE AER RRR RARER IR LER RR IS LAR IR DSR RRR AR AK SPACE Is R ESERVE JMP DS r PASTPATCH D FOR YOUR RAT PASTP 60H ATCH R EMOVE HIS J UMP WHI EN PATCHED 006B 006C 006F 0072 0073 0074 COMPARE 0075 0077 007A 01 15 CA0031 CJ 318000 39 OC 79 E1B DA0800 E01 007C 04 007D C30800 0080 GO TO NEXT SECTOR IF LCAD IS INCOMPLE ry
9. UFFFF COLLECT can be typed to disable intermediate traces In either case execution stops at the 20th BDOS call and the operator can enter the display command C DISPLAY to view the trace to this particular BDOS call Note that long typeouts can be aborted by typing any keyboard character during the display Further the ctl S key freezes the display during output Finally recall that C DISPLAY can be issued any number of times to reproduce the backtrace since the command does not clear the TRACE buffer The TRACE utility can also be used when th 48 SID Users Guide disassembler modul instruction addr mnemonics are not commands shown bel disassembler modul Section 4 le is not present In this case the sses ar listed in the trace while the included For example the sequence of ow loads the TRACE utility without the its symbol table In this SID A ITRACE UTL R IDUMP COM case the TRACE e followed by the DUMP program without Load the SID Program Remove the Disassembler Ready the TRACE Utility Read the TRACE Utility Load the DUMP Program T utilitv prints the sign on message IN EFFECT ADDRESS BACKTRACI Gl The backtrace information is subsequently displayed in the format 49 addr 255 addr 254 addr 253 addr 248 addr 247 addr 246 addr 245 addr 240 addr 007 addr 0
10. if no returned value is expected 2 1 Direct and Buffered 1 0 The BIOS entrv points are given in Table I in the case of simple character I 0 to the console the BIOS reads the console device and removes the parity bit The character is echoed back to the console and tab characters control I ar xpanded to tab positions starting at column one and separated by eight char acter positions The I 0 status byte takes the form shown in Table I and can be programmatically interrogated or changed The buffered read operation takes advantage of the CPM line edit ing facilities That is the program sends the address of a read buffer whose first byte is the length of the buffer The second byte is initially empty but is filled in by CPM to the number of characters read from the console after the operation not including the terminating carriage return The remaining posi tions are used to hold the characters read from the console The BIOS line editing functions which are performed during this oper ation are given below break line delete and transmit rubout delete last character typed and echo control C system rebout control U delet ntire lin control E return carriage but do not transmit buffer phvsical carriage return lt gt transmit buffer The read routine also detects control character sequences other than those shown above and echos them with a
11. nd subroutine structure shown below exists in a particular 2 SUBROUTINI E MOV A D Sn MOV A L MOV C L MOV D L CALL 83 MOV D H R T RI T ogram is stooped within subroutine S2 The command S3 and ntered Although this form is often more enlightening broutine level and view the above 51 in this manner easily discovered without ows If instead the command 37 SID Users Guide Section 3 TW 100 is typed while at subroutine level 51 all subsequent levels from S2 and beyond are executed in real time as if a G command had been Performed at each CALL within Sl Upon executing the RET instruction within Sl tracing resumes at the mainline level Any subroutine calls following CALL 51 at the main level are not subsequently traced Forms given by 9 parallel a through d but disable the symbolic features of SID in the same manner as form e It should be noted that SID allows tracing up to Read Only Memory ROM program code At the point ROM is entered SID stops the trace operation and runs the ROM code in real time An automatic breakpoint is set which intercepts program control when ROM code is exited The assumption however is that ROM code was entered via a subroutine call CALL or RST n or via a PCHL or JMP instruction In any case the return address following the ROM execution is taken as the topmost address in the test progra
12. INIT U RE A D R T A ADDRESS N2 15 A PEN DU RE A RE A ADDRESS E A ADDRESS RE RETURNED A DU A ADDRESS N2 20 A DBF URE A A ADDRESS 21 A RITEBF ROCE DURE HQ U ND ALL MON1 13 0 INIT SET UP FILI DECLARE FCB1 INIT FCB2 TIAL 33 INTI IAL E CONTROL 33 0 X BYT 0 NI BYTE ti ti ar VALU l 1 Rou In each case new Gl BLOCKS 0 0 0 0 FIL 0 0 0 0 for example file NEW FIL the operation is see the disk select oper using the file information in a specific FCB copies the con CALL INIT ERASE N CALL ET E N CALL MAKE IF RET ELSE h EW FIL FCB2 h DE EA E R L KI FCB2 255 THI IF I r EW FIL AND C EN CALL PRINT DO FILE SUCC CALL OPEN FCB1 IF RET 255 TH ELSE DO FILI p Pp iN CALL PRINT X Y FOUND AND OP ESSFULLY C T EXISTS ECK SUCCESS NO DIR ECTO R EAT NOW O ED 13 RY S
13. kkkkkkkkk k KA 1 lt gt 1 THEN CALL PRINT DISK RE AD ERRORS CALL PRINTNIB B AND OFH 35 00169 2 PRINTADDR PROCEDURE A 00170 3 DECLARE A ADDRESS 00171 3 CALL PRINTHEX HIGH A CALL PRINTHEX LOW A 00172 3 END PRINTADDR 00173 2 00174 2 00175 2 INTEL HEX FORMAT LOADER 00176 2 00177 2 RELOC PROCEDURE 00178 3 DECLARE RL CS RT BYTE 00179 3 DECLARE 00180 3 LA ADDRESS LOAD ADDRESS 00181 3 TA ADDRESS TEMP ADDRESS 00182 3 SA ADDRESS START ADDRESS 00183 3 FA ADDRESS FINAL ADDRESS 00184 3 NB ADDRESS NUMBER OF BYTES LOADED 00185 3 SP ADDRESS STACK POINTER UPON ENTRY TO RELOC 00186 3 00187 3 MBUFF 256 BYTE 00188 3 P BYTE 00189 3 L ADDRESS 00190 00191 3 SETMEM PROCEDURE B 00192 4 SET MBUFF TO B AT LOCATION LA MOD LENGTH MBUFF 00193 4 DECLARE B I BYTE 00194 4 IF LA lt L THEN MAY BE A RETRY RETURN 00195 4 DO WHILE LA gt L
14. SAVE CDNDITION FOR LATER 3F14 CDO9F8 CALL CO SEND THE CHARACTER MAY BE LINE FEED 3F17 FL POP PSW 3F18 CO RNZ RETURN IF IT WASN T A LINE FEED LA WAIT 13 CHARACTER TIMES AT 2400 BAUD FOR LINE FEED TO HAPPEN THIS WORKS OUT TO ABOUT 50 MILLISECS 3F19 0632 MVI B 50 NUMBER CF KILLISECS TO WikIT 3F1B OEB6 TAS MVI c 182 COUNTER TO CONTROL 1 MILLISEC LOOP SEI 3F 1 Gl U 3F21 3F22 3F25 3F26 3F29 3F2C 3F2F 3F32 3F34 3F37 3F38 3F3A 3F3D 3F40 3F41 3F42 3F43 3F44 3F46 3F47 3F4A 3F4B 3F4D 3F4E 3F4F 0D C21D3F 05 C21B3F c9 C309F8 C30FF8 C30CF8 C306F8 0E00 C3503F 79 FEO2 D40FFF 32D23F 17 1 17 ET E610 AF 21D53F TE E6CF Bl 77 c9 T2 DCR E 1 CYCLE 5 USEC JNZ T2 10 CYCLES 5 5 USEC r 5 5 USEC PER LOOP 182 1001 USEC DCR B JNZ ri FOR ANOTHER LOOP RET JMP CD LIST LIST DEVICE OUT EXACTLY THE SAME AS MDS CALL JMP LO PUNCH PUNCH DEVICE OUT EXACTLY THE SAME AS MDS CALL JMP PO r READER READER CHARACTER IN TO REG A EXACTLY THE SAME AS MDS CALL JMP RI HOME MOVE TO HOME POSITION TREAT AS TRACK 00 SEEK
15. START AT BASE OF BDOS 0007 00BE OOBF 00C0 00C1 00C2 00C3 00C5 80 04 15 01 01 8035 IOPBL IOPB1 DB DB DB DB DW QU S IOPBO B 80H EADF DOS1 SECTORS TO READ ON TRACK 1 TRACK 1 SECTOR 1 DOSB BDOS0 128 BASE OF S ECOND MDS I 0 DRIVERS FOR CP M VERSION 1 1 OCTOBER 1976 COPYRIGHT 1976 DIGITAL RESEARCH BOX 579 PACIFIC GROVE CA H 0010 MSIZE EQU 16 MEMORV SIZE IN KILOBYTES 000B VERS EQU 11 CPM VERSION NUMBER 3E00 PATCH EQU MSIZE 1024 2 256 BASE OF THIS MODULE ABOVE DOS 3E00 ORG PATCH 2000 CBASE EQU MSIZE 8 1024 BIAS FOR SYSTEMS LARGER THAN 8K 2900 CPMB EQU CBASE 900H BASE OF CPM CONSOLE PROCESSOR 3206 BDOS EQU CBASE 1206H BASIC DOS RESIDEN PORTION 1500 CPML EQU CPMB LENGTH IN BYTES OF CPM SYSTEM 002A NSECTS EQU CPML 128 NUMBER OF SECTORS TO LOAD E080 LBIAS EQU 980H CPMB LOADER BIAS VALUE USED IN SVSGEN 0002 OFFSET EQU 2 NUMBER OF DISK TRACKS USED BY CP M 0080 BUFF EQU 80H DEFAULT BUFFER ADDRESS 000A RETRY EQU 10 MAX RETRIES ON DISK 1 0 BEFORE ERROR r PERFORM FOLLOWING FUNCTIONS
16. and 7 name CBIOS tio simple console input output functions in this phase 7 Test CBIOS completelv to ensure that i character I 0 and disk reads and writes no disk write operations occur accidentiv duri that the proper track and sectors are addressed o Failure to make these checks wav cause distruc svstem after it is patched 8 step 7 placed on the diske 9 Referring between locations 31 Use PUTSXS two tracks of a bla to Figure 1 in Section 5 EOOH b and 3FFFH b Read the CP M system using GI replace the BIOS segment by the new CBIOS developed in step Be especial nq read n all operations tio 6 and This replacement is done in the memory of the machine a tte in the next step to place the patched memory image of CP M onto nk diskette for testing clear memory and read Since this program will be used along with the distribution version and write a simple version vhich performs a Use the program given in customized ns on a single drive as shown in the second part of Test the PUTSYS program using a blank uninitialized diskette by writing a portion of memory to the first two tracks Test PUTSYS completely it to of and t properly performs console ly careful to ensure that and check reads and writes n of the initialized CP M note that the BIOS is located ETSYS and tested in nd will be the first 10 Use GETSXS to bring
17. ful al zi o vtes all If a Iso successful R fields are set to zero so that the first is accessed on subsequent disk 1 0 operations EADBF fills the th the first record from X Y NI and deleting ting data the input an are initial iles as well as two These utility procedures d output files In ized to the lt filename gt es The main program then d The ne ty file for the input file X then m implie The loop w EW PIL and then re from X Y This tra data has been tran n error occurs it letes anv existing xt step is to create NEW FIL If file Y is opened If this the disk to disk copy d DMA buffer at 80H hich follows copies ports anv errors or nsfer operation con sferred or an error in reported otherwise the new file is closed and the program halts TABLE II DISK ACCESS PRIMITIVES FUNCTION NUMBER ENTRY PARAMETERS RETURNED VALUE TYPICAL CALL a PAR Nene een CALL MON2 12 0 T2 Head is lifted from current drive Initialize BDOS None None CALL MON1 13 0 and select disk Side effect is that disk A is logged Set DMA address in while all others to 80H are considered off 13 line Log in and An integer value cor None CALL MON1 14 1 select disk responding to the Disk X is considered x disk to log in on line and selec log in disk B 14 A 0 B 1 C 2 etc ted for subsequent file operations Open file Addr
18. gt ps HS HP HP PHP PP ds ds ds gt gt W WE gt W KBE AD 36 DECLARE B BYTE CS CS B READBYTE RETURN B END READCS MAKESDOUBLE PROCEDURE H L ADDRESS CREATE A BOUBLE BYTE VALUE FROM TWO SINGLE BYTES DECLARE H L BYTE RETURN SHL DOUBLE H 8 OR L END MAKESDOUBLE DIAGNOSE PROCEDURE DECLARE M BASED TA BYTE NEWLINE PROCEDURE CALL CRLF CALL PRINTADDR TA CALL PRINTCHAR CALL PRINTCHAR END NEWLINE PRINT DIAGNOSTIC INFORMATION AT THE CONSOLE CALL PRINT LOAD ADDRESS CALL PRINTADDR TA CALL PRINT ERROR ADDRESS CALL PRINTADDR LA CALL PRINT BYTES READ CALL NEWLINE DO WHILE TA lt LA IF LOW TA AND OFH 0 THEN CALL NEWLINE CALL PRINTHEX MBUFF TA L TA TA 1 CALL PRINTCHAR END CALL CRLF HALT END DIAGNOSE INITIALIZE SA FA NB 0 SP STACKPOINTER P 0 PARAGRAPH COUNT TA LA L 100H BASE ADDRESS OF TRANSIENT ROU
19. mav involve several retries 10 is a qood number if errors occur durinq the read operation the read is completed correctiv the READ subroutine should return a 00 in reqister A If the read be performed a 01 should be returned in this case CP M prints the message PERM ERROR DISK x where x is the disk number 16 WRITI CJ Write the data from the currently selected DMA address to the currently selected drive track and sector The data should be marked as non deleted data to maintain compatibility with other CP M systems The error codes given in the READ command are returned in register A with error recovery at tempts as described above 7 A SAMPLE BIOS The program shown in Appendix D can serve as a basis for your first BIOS The simplest functions are assumed in this BIOS so that you can enter it through the front panel if absolutely necessary Note that the user must alter and insert code into the subroutines for CONST CONIN CONOUT READ WRITE and WAITIO subroutines Storage is reserved for user supplied code in these regions The scratch area reserved in page zero s Section 9 for the BIOS is used in this program so that it could be imolemented in ROM if desired Once operational this skeletal version can be enhanced to print the initial sign on message and perform better error recovery he subroutines for LIST PUNCH and READ
20. 1 01 PASS 0105 SORT Oops The initial pass point is still set A 01 B 002A D 007A H 0143 S 0100 P 0105 LXI H 0143 SW 0108 Clear all pass points P HG INCI Now try agaim DLSE DNET Stopped at first entry to INCI check value of N H N N is still 8 looks good 0008 8 HG CONT Go to the CONT label then stop at INCI 0121 CONT G INCI 61 SID Users Guide Section 5 FOLIE INCL Back at INCI now Check value of N H N 0008 8 Remains at 8 If we keep this up we ll be typing P INCI 6 break addresses all dav We can run the next few passes G through INCI automatically by setting a pass count use 6 in this case then run with C to disable intermediate 01 PASS 013C traces We now stop 6 iterations Later E A 82 B 0004 D 0006 H 0143 S 0100 P 013C LXI H 0144 013F H N Check N remains at 8 then 0008 8 check I to compare passes I 0 1 2 3 4 5 6 has been H 1 executed We are now about to set I 7 but the test 0006 6 at COMP is JNZ which allows execution one too many times which we already know about 22 ED SORT ASM HAV Back to the editor change the end of LIST test 1 FLDA to compare I with N 1 rather than N 17 OLT TS LDA N LENGTH OF VECTOR Tei return to go to next line 18 CMP M CHECK FOR N I Insert the instruction before the opcode 18 DCR A iN 1 IN A REGISTER 195 NOTE THAT N MUST BE 2 OR LARGER 20 ctl Z 20 Now a little clean up work there
21. 3EF5 79 MOV A C 3EF6 324000 STA TRACK 3EF9 DS 10H SPACE FOR TRACK SELECT 3F09 C9 RET SETSEC SET SECTOR GIVEN BY REGISTER C 3FOA 79 MOV A C 3FOB 324100 STA SECTOR 3F0E DS 10H SPACE FOR SECTOR SELECT 3F1E C9 RET SETDMA SET DMA ADDRESS GIVEN BV REGISTERS B AND C 3FIF 69 MOV bi LOW ORDER ADDRESS 3F20 60 MOV H B HIGH ORDER ADDRESS 3F21 224200 SHLD DMAAD SAVE THE ADDRESS 3F24 DS 10H SPACE FOR SETTING THE DMA ADDRESS 3F34 C9 RET WRITI 3F35 3F45 3F48 ACTUAL 1 0 76 1 26 65535 00A7 CBIOS 3F58 3F5A 3F5B Gl R SO WI COMMON CODI r WRI r WAIT OP PROPI r r WILL ALLOW SPACE ry PERFORM READ D COMMAND IN WRITE 10H SE WAITIO ENTER HERE me ERATION RI TURN A OOH IN R 01H IF AN I ACTUAL 1 0 ERFORM A W OH SI FEAD AND WRITE T Gl T RATION COMPLE RITI 7 7 IN THIS CASE WE HAVE EQU EMAINING SPACE FROM THRU MSIZI E 1024 1 A 1 E 1024 1 IS AVAILABLE EMAINING IN MSIZI R CONDITION m El USUALLY THIS IS SIMILAR TO CJ 0 1 0 ECTOR 0 0
22. 45 is typed by alue The cr represents the carriage return key in this example and in the examples which follow The followi SID provide additional examples in the above XB 34EF cr data remain XD 2000 2300 D chan ng interactions with format described s unchanged ges to 23 XH 334E GAMMA XS 4323 STKPTR 100 41 4 SID UTILITIES SID Utilities are special programs which operate with SID to provide additional debugging facilities As described in Section 1 a SID Utility is loaded by initially typing SID X UTL where x is the name of a utility program described in the sections which follow Upon initiation the utility program loads relocates and prompts the console for any necessary parameters The operator then collects necessary program test data using the U or T command and displays the information using a call to the utility display subroutine The mechanisms for system initialization data collection and data display are given in detail below 4 1 Utility Operation A particular SID utility loads into memory in much the same manner as a normal test program The utilities however automatically move themselves into high memory occupying the region directly below the SID program as described in Section 1 The utility load operation can be accomplished by simply typing the utility name with the SID command as shown above or can be loaded during the SID execut
23. CP M MACRO ASSEM 2 0 016E Re assemble again 001H USE FACTOR END OF ASSEMBLY 21 SID SORT HEX SORT SYM SID VERS 1 4 We ve fixed the SW initialization problem which SYMBOLS should halt the program at the proper time but NEXT PC END we may still have a problem with the end of 016E 0100 55B7 LIST test remember that hot patch D LIST N Here s the initial data 0165 05 03 04 OA 08 82 OA 04 08 G STOP GO unmonitored to the STOP how s that for Q11E STOP confidence D LIST N We made it here s the data 0165 03 04 04 05 08 08 OA OA OB 7B 82 0170 E6 Data is sorted in ascending order but there s too SORT NEX much of it We still have the problem that N is R altered during execution NEXT PC END Let s reload and make sure we know what the 016E 0100 55B7 problem is P SORT Set a pass point at SORT check N G 01 PASS 0105 SORT Here s the first pass through SORT Z E A 01 B 0004 D 000A H 0143 S 0100 P 0105 LXI H 0143 SW 0108 Break at 0108 check value of N H N 0008 8 G OK initially continue the execution with G 01 PASS 0105 SORT We have passed through the data once A 75 B 002A D 007A H 0143 S 0100 P 0105 LXI H 0143 SW 0108 H N 007 123 N has been altered which we expected since we ISORT HEX are testing LIST N 1 against LIST N and performing R a switch if unordered NEXT PC END 016 0100 55B7 Let s reload and scope in on the problem G INCI Stop at the point where I becomes I
24. ER TO REG A EG A ROM TO CONSOLI CJ TO PUNCH ti ti o G I GGGGU ti EJ tA ri Fi IOPB LOW ADDRESS ROM C TO LIS STATUS 00 FF TO REGISTER DEVICE OF DISK COMMAND IO PORTS INPUT INPUT INPUT OUTPUT WWW WW Ww FO Il Il ODOAOA 3136 312E31 ODOAOO 310001 212D3E CD723F AF Eo CO OI KD 32D33F C3A63E E54 R WARM BOOT 318000 STACK ES7 3AD23F NOT 0 ed ESA 32D33F ESO OEOA E60 C5 010029 D5A3F E02 D553F E6B 0E00 D503F E00 OOO QAS GG AS 10 010 D373F Cl 062A C5 4B2043502F E FOR KN IF HIGH EQU BASE 2 IOPB HIGH ADDRESS OUTPUT F READF EQU 4H READ FUNCTION WRITF EQU 6H WRITE FUNCTICN RECAL EQU 3H RECALIBRATE DRIVE IORDY EQU 4H I 0 FINISHED MASK CR EQU ODH CARRIAGE RETURN LF EQU OAH LINE FEED F SIGNON SIGNON MESSAGE XXK CP M VERS Y Y DB CR LF LF DB MSIZE 10 0 MSIZE MOD 10 O
25. MVI c 0 JMP SETTRK r SELDSK SELECT DISK GIVEN BY REGISTER C CP M HAS CHECKED FOR DISK SELECT 0 OR 1 BUT WE MAY HAVE A SINGLE DRIVE MDS SYSTEM SO CHECK AGAIN AND GIVE ERROR BY CALLING MON80 MOV A C CPI NDISKS TOO LARGE CNC RMON80 GIVES ADDR MESSAGE AT CONSOLE STA DISKN SELECT DISK N RAL RAL RAL RAL ANI 10000B UNIT NUMBER IN POSITION MOV C A SAVE IT LXI H LOF IO FUNCTION MOV A M ANI 11001111B MASK OUT DISK NUMBER ORA E MASK IN NEW DISK NUMBI MOV M A SAVE IT IN IOPB RET 3F50 3F53 3F54 3F55 3F58 3F59 3F5A 3F5B 3F5C 3F5F ET 3F60 3F62 3F65 3F68 3F69 3F6B 3F6E 3F 71 3F 72 3F 73 3F 74 3F 75 3F 76 3F77 3F7A 3F7B 3F7C 3F7F 3F82 3F85 3F87 21D73F 11 9 21083F 71 c9 69 60 22D93F c9 E04 D903F D993F aaao E06 D903F D993F aaao QW 4 FI 5 4F CDO9F8 El 23 C3723F CD723F CDOA3F OEOD CD103F SET TRACK ADDRESS GIVEN BY C LXI H IOT MOV M C RE SETSEC SET SECTOR NUMBER GIVEN LXI H IOS MOV M C RET SETDMA SET DMA ADDRESS GIVEN BV REGS B C MOV L C MOV H B SHLD IOD RET READ READ NEXT DISK RECORD MVI C READE SET TO READ EDCTICN CALL SETFUNC CALL WAITIO PERFORM READ FUNCTICN RE HAVE ERROR SET IN RE WRITE DISK WRITE FUNCTION MVI C WRITF CALL SETFUNC SET TO WRITE
26. The value in each field can be in the ranqe 0 3 defining the assiqned source or destination of each Logical devic The values which can be assigned to each field are given below CONSOLE field bits 0 1 0 console is assigned to the Teletype device TTY 1 console is assiqned to the CRT device CRT 2 batch mode use the READER as the CONSOLE input and the LIST device as the CONSOLE output 3 user defined console device READER field bits 2 3 0 READER is the Teletype devic 1 READER is the high speed reader devic RDR 2 user defined reader 1 3 user defined reader 2 PUNCH field bits 4 5 O PUNCH is the Teletype devic 1 PUNCH is the high speed punch device PUN 2 user defined punch 1 3 user defined punch 2 LIST field bits 6 7 0 LIST is the Teletype devic 1 LIST is the CRT device 2 LIST is the line printer device 3 user defined list device Note agai the organization of vour CBIOS n that the impleme tolerat allows ac ICBYTE the IOBYT th xistenc cess to the TTY a E ntation of the IOBYRE No CP M systems use the IOBY excep If you do not implement the you cannot access these physical devices throuqh PIP of the IOBYTE nd CRT is optional at location 0003H devices 13 and affects only E although they t for PIP which In any case E implementation should be omitted until your basic CBIOS is fully implemented and tes
27. along with a description of vour hardware environment and the modifications which vou have made Diaital Research will make the information available to other interested parties and inform them of the prices and availabilitv of vour CBIOS It should be noted that vour svstem remains file compatible with all other CP M svstems which allows transfer of non proprietarv software between users of CP M 3 SECOND LEVEL SXSTEM GENERATION Now that you have the CP M system running you may wish to use CP M facilities in the system regeneration process In general we will first qet a memory image of CP M from the first two tracks of an initialized diskette and place this memory image into a named disk file The disk file can then be loaded examined patched and replaced using the editor assembler debugger and system generation program The SYSGEN program supplied with your diskette is first used to get a CP M memory image from the first two tracks Run the SYSGEN program as shown below SYSGEN start the SYSGEN program SYSGEN VERSION 1 0 SYSGEN siqnon messace GET SYSTEM Y N Y Answer yes to GET request SOURCE ON B THEN TYPE RETURN at this point place an initialized diskette into drive B and type a return if you are operating with a single drive answer to the GET request rather than Y and place the initialized diskette into
28. and WBOOT simple character 1 0 performed by calls on CONST CONIN CONOUT LIST PUNCH and READER and diskette 1 0 performed by calls on HOME SELDSK system re initialization which results from calls on BOOT SETTRK SETSEC SETDMA READ and WRITE 11 simple character I 0 operations are assumed to be performed in ASCII upper and lower case with high order parity bit set to zero An end of file condition is given by an ASCII control z 1AH Peripheral devices are s devices within n by CP M as logical devices and are assigned to physical the BIOS In order to operate the BDOS needs only the CONST CONIN and CONOUT subroutines LIST PUNCH and READER are used by PIP but not the BDOS for the remain Thus the initial version of CBIOS may have empty subroutines ing ASCII devices The characteristics of each device ar CONSOLE The principal interactive console which communicates with the operator accessed through CONST CONIN and CONOUT Typi cally the CONSOLE is a device such as a CRT or Teletype LIST The principal listing device if it exists on your system which is usually a hard copy device such as a printer or Teletype PUNCH The principal tape punching device if it exists which is normally a high speed paper tape punch or Teletype RFADER The p
29. breakpoint see the G command a Dass r gt oint causes SID to stop execution of the test program each time an active pass point is reached Unlike a temporary breakpoint a pass point is not automatically cleared each time it is reached during execution Further unlike a temporary breakpoint a pass point break occurs after the instruction as the pass address is executed In this way the operator can simply continue the execution of the test program under control of a G command until the next pass point is executed or until a temporary breakpoint is reached Each pass point can have an optional pass count which defaults to the value 1 The pass count enhances this facility by allowing several passes through a pass point before the break actually occurs In particular a pass count in the range 1 FF decimal 1 through 255 can be associated with a particular pass point Each time a pass point is executed its corresponding pass count is decremented The decrementing process proceeds until the pass count reaches 1 at which time the break address is printed and execution of the test program stops When a pass count reaches 1 the pass point becomes a permanent break address which halts execution each time the instruction is executed Note that a pass count does not change once it has reached 1 Form a sets a pass point at address p with a pass count of 1 causing address p to become a permanent breakpoi
30. nt BIOS customized packaqe D which can form the the user must write a simpl ng system into memory of GETSYS of CP M back onto the diskette nqinq the disk read commands into dis ETSYS and PUTSYS programs are described in Section 3 The purpose of this tchinq the new BIOS i however rite th is revers lis A I base for a le memory ted in Appendix C skeletal modified BIOS loader called n order to pa called PUTSYS tch the new tandard but vices CP M is separated into three DOS hardware to provide a ining CP M document is nto CP M ly simple software development and and can be used version of the BIOS is c In addition GETSYS which BIOS into which places PUTSYS is usually derived k write commands and In order to make the CP M system work automatically 2 FIRST LEV EL SYST EM R EG ENERNTION The procedure to ollow nces in steps Address refer denotes the hexadecim larger CP M systems following it various standard memo al radix add a bias ry sizes are 32K b 3 2K 16K 16K similar 04000H to the one provided wi A skeletal form of a cold start n Appendix F which can serve as a model for your leader loader to patch the CP M system is given below in several ach step are shown with a following H which and are given for a 16K CP M system
31. ready for load and execution in the TPA If the file does not appear on the diskette the LOAD program types SOURCE IS READER and reads an Addmaster paper tape reader which contains the hex file The LOAD program is set up to load and run in the TPA and upon com pletion return to the CCP without rebooting the system Thus the pro gram is constructed as a single procedure called LOADCOM which takes the form OFAH LOADCOM PROCEDURE LIBRARY PROCEDURES ND LIBRARY PROCEDURES M DHE DBYTE DCS mp gt gt DOUBLE IAGNOSE END RELOC U ECLARE STACK 16 ADDRESS SP ADDRESS P STACKPTR STACKPTR STACK LENGTH STACK Y CALL REIOC STACKPTR SP RETURN 0 END LOADCOM EOF 30 The label OFAH at the beginning sets the origin of the compilation which causes the first 6 bvtes of the compilation to be ignored whe LE from the COM case Since the machin file OFAH OFDH 100H RET pastsubr HLT code betw n OFA In a PL M compilation the stack pointer and branch around the subrou there is 1 one subroutine following machine memorv image for LOAD LXI SP plmstack JMP pastsubr beginning of LOADCOM procedure called LOA H and OFF DCOM SET SP TO DI EFAULT S
32. 0100 P 0133 LXI H 013E SW 1 A 05 B 0003 D 0000 M 013E S 0100 P 0136 INR M 01 SW 0137 INCI Well that went nicely elements switched SW 1 0 LIST 7 0160 03 05 04 OA 08 82 OA 04 H I The data looks good at this point 0000 REBOOT 0 G INCI Proceed to the INCI label 0137 INCI Here we are let s look at the data 0 LIST 7 0160 03 05 04 OA 08 82 OA 04 H I 0000 REBOOT 0 Looks good trace past the label and break T A 05 B 0003 D 0000 H 013E S 0100 P 0137 LXI H 013F I 013A G INCI 0137 INCI Here we are again how s the data D LIST I 0160 03 04 2 Looks good proceed past INCI T E A 05 B 0004 D 0001 H 013E S 0100 P 0137 LXI H 013F I 013A And loop again G INC 0137 INCI Here we are again how s the data D LIST I 0160 03 04 05 Looks good this is getting monotonous lets go for it Stop at either SORT or STOP 0119 STOP Egad Here we at the the STOP label Why D LIST 1 aren t we making it back to SORT 0160 01 01 03 04 04 05 07 08 08 Tsk Tsk The data s messed up again 56 SID Users Guide ISORT HEX R NEXT PC END 0169 0100 55B7 6136 43 0136 INCI 0137 013A G 136 INR M LXI H 013F I 0136 D LIST I 0160 03 U I A 05 B 0003 D 0000 H 013E S 0100 P 0136 INR M 01 Section 5 Let s reload and trv again Here s where the switch count is incremented Execute the program and break at SW SW 1 Look at data values Use
33. 0208 0E01 MVI e 1 START WRITING AT SECTOR 1 WSEC WRITE FIRST NEXT SECTOR 020A CD8003 CALL WRITESEC PERFORM THE WRITE 020D 118000 LXI D 128 MOVE DUMP ADDRESS TO NEXT 1 2 PAGE 0210 19 DAD D HL HL 128 0211 oc INR SECTOR SECTOR 1 0212 79 MOV A C CHECK FOR END OF TRACK 0213 FE1B CPI 27 SECTOR 27 0215 DAOA02 JE WRSEC CARRY GENERATED IF SECTOR lt 27 r ARRIVE HERE AT END OF TRACK MOVE TO NEXT TRACK 0218 04 INR B TRACK TRACK 1 0219 78 MOV A B TEST FOR LAST TRACK 021A FEO2 CPI 2 TRACK 2 021C A0802 JC WRTRK CARRY GENERATED IF TRACK lt 2 r ARRIVE HERE AT END OF DUMP HALT FOR NOW 021F FB EI 0220 76 HIT USER SUPPLIED SUBROUTINES FOR SECTOR READ AND SECTOR WRITE r MOVE TO NEXT PAGE FOR SECTOR READ AND SECTOR WRITE 0300 ORG 100H AND OFFOOH r READSEC READ THE NEXT SECTOR TRACK TO READ IS IN REGISTER B SECTOR TO READ IS IN REGISTER C BRANCH TO LABEL GSTART IF ERROR OCCURS READ 128 BYTES OF DATA TO ADDRESS GIVEN BY H L 0300 C5 PUSH B 0301 E5 PUSH H PLACE READ OPERATION HERE 0302 El POP H 0303 Cl POP B 0304 C9 RET MOVE TO NEXT 1 2 PAGE FOR WRITESEC SUBROUTINI E ti N 0380 0380 0381 0382 0383 0384 0385 ORG AND OFFOOH 4 80H WITESEC WRITE THE NEXT PE C I OR TRACK TO WRITE IS
34. BIAS HE HE BIOS COLD STA WHICH IS NOT USED AGAI AS THE HE EE ORIG E MEMORY ROGRAM AT BEYON BIOS 15 NOT OV IN IS 0 RT LOADI bu R BEGINS AT IS B BIOS 0000 H AFTER LOADING THE CP M CJ RANCHES N UNTIL HE h SYST EM EWRIT EN TO THE BOOT ENT RX POINT BIAS THE COLD START IS POW ER ED UP AGAIN AS LONG ASSUMING HE BASE OF M EMO HE D T IS IMPL EME DA ORG MSIZI BIAS LOADP BIOS BOOT SIZI CJ SEC BEGIN COLD 5 MVI LXI LSECT INSER FROM TRAC INLINE U U ti ti ti y 10 O ti O LOAD OP LXI D SEC LOAD 00H H LOA HE N END OF RI EAD ONLX M HE RY EMO CONTROLLER LOADS THI BIOS RY BASE 16 MSIZE 16 1024 2900H 3E00H BIOS OF MEMOR MEM LOA BAS COL BIOS 512 LOADP SIZ ERATION B 2 E 128 NUM HE COLD START S ORIGIN MUST BE IN HIGH IF THE COLD START LOADER me ORY SIZE IN KILOBYTES BIAS TO ADD TO LOAD D POINT FOR CP M SYSTEM IC 1 0 SYSTEM 2 PACES
35. CJ 14 TA E1B DA4431 AO CJ w ti D 1601 OC w Q BOOT SIMPLEST CASE IS TO JUST PERFORM PARAMETER JMP GOCPM INITIALIZE AND GO TO CP M WBOOT SIMPLEST CASE IS TO READ THE DISK UNTIL ALL SECTORS LXI SP 80H USE SPACE BELOW BUFFER FOR JMP CA0 SELECT DISK 0 CALL SELDSK CALL HOME GO TO TRACK 00 l MVI B NSECTS B COUNTS THE NUMBER OF SECTORS TO LOAD MVI c 0 C HAS THE CURRENT TRACK NUMBER MVI D 2 D HAS THE NEXT SECTOR TO READ NOTE THAT WE BEGIN BY READING TRACK 0 SECTOR 2 SINCE SECTOR 1 CONTAINS THE COLD START LOADER WHICH IS SKIPPED IN A WARM START LXI H CPMB BASE OF CP M INITIAL LOAD LOAD1 LOAD ONE MORE SECTOR PUSH B SAVE SECTOR COUNT CURRENT TRACK PUSH D SAVE NEXT SECTOR TO READ PUSH H SAVE DMA ADDRESS MOV CD GET SECTOR ADDRESS TO REGISTER C CALL SETSEC SET SECTOR ADDRESS FROM REGISTER POP B RECALL DMA ADDRESS TO B C PUSH B REPLACE ON
36. FUNCTION CALL WAITIO RET MAY HAVE ERROR SE UTILITY SUBROUTINES PRMSG PRINT MESSAGE AT H L TO 0 MOV A M ORA A ZERO RZ MORE TO PRINT PUSH H MOV C A CALL co POP H INX H JMP PRMSG ERROR ERROR MESSAGE ADDDRESSES BY H L CALL PRMSG ERROR MESSAGE WRITTEN WAIT FOR RESPONSE CALL CONIN MVI C CR CARRIAGE RETURN CALL FROM CONSOLI ASSUMING DISK TRK SEC DMA 3F8A 3F8C CD1031 3F8F C9 CJ 3F90 21D53F 3F93 7E 3F94 E6F8 3F96 Bl 3F97 77 3F98 C9 3F99 3F9B 3F9D DB 79 DB 7B 3F9F 3E04 3FA1 D379 3FA3 3E3F 3FA5 D37A OPERATION 3FA7 DB78 3FA9 E604 3FAB CAA73F 3FAE UNLINKED USED 3FBO FEO2 3FB2 CAC63F 3FBS B7 3FB6 C2CB3F 3FB9 DB7B 3FBB 17 3FBC IAC63F 3FBF 1F 3FCO E6FE 3FC2 C2CB3F 3FC5 C9 MVI C LF LINE FEED CALL CONOUT RE MAY BE RETURNING FOR ANOTHER RETRY S
37. H 012A S 0152 P 010C A 57 B 0000 D 0000 H 012A S 0152 P 0100 A 57 B 0000 D 0000 H 012A S 0152 P OIOE A 57 B 0000 D 0000 H 012A S 0152 P OIOF WRCHAR A 57 B 0000 D 0000 H 012A S 0150 P 0106 A 57 B 0002 D 0000 H 012A S 0150 0 0108 A 57 B 0002 D 0057 H 012A S 0150 P 0109 BDOS A 57 B 0002 D 0057 H 012A S 0150 P 0005 A 57 B 0002 D 0057 H 012A S 0150 P 55AA A 57 B 0002 D 0057 H 012A S 0150 P 5CA4 A 57 B 0002 D 0057 H 0112 S 0150 P 5CA5 A 57 B 0002 D 0057 H 0112 S 0150 P 5CA8 A 57 B 0002 D 0057 H 012A S 0150 P SCA9 Z E A 00 B 0000 D 0200 H 793B S 0152 P 0112 WRMSG Z E A 00 B 0000 D 0200 H 7938 S 0152 P 010C Z E A 00 B 0000 D 0200 H 7938 S 0152 P 010D Z E A 00 B 0000 D 0200 H 7938 S 0152 P 010E Z E A 00 B 0000 D 0200 H 7938 S 0154 P 011B Z E A 00 B 0000 D 0200 H 012A 5 0154 P 011E WRMSG Z E A 00 B 0000 D 0200 H 012A S 0152 P 010C Z E A 57 B 0000 D 0200 H 012A S 0152 P 010D A 57 B 0000 D 0200 H 012A S 0152 P 010E A 57 B 0000 D 0200 H 012A S 0152 P 010F WRCHAR A 57 B 0000 D 0200 H 012A S 0150 P 0106 A 57 B 0002 D 0200 H 012A S 0150 P 0108 0109 G WRMSG GO skip traces W Should be ALLA what happened 010C WRMSG TW100 Trace without call Z E A 00 B 0000 D 0200 H 793B S 0152 P 010C Z E A 00 B 0000 D 0200 H 793B S 0152 P 0100 Z E A 00 B 0000 D 0200 H 793B S 0152 P 010E Z E A 00 B 0000 D 0200 H 793B S 0154 P 0121 Z E A 00
38. LAST MBUFF WRITE A PARAGRAPH 00196 4 DO I 0 TO 127 COPY INTO BUFFER 00197 5 BUFFER I MBUFF LOW L L L 1 00198 6 END 00199 5 WRITE BUFFER ONTO DISK 00200 5 P P l 00201 5 IF DISKWRITE FCBA lt gt 0 THEN 00202 5 DO CALL PRINT DISK WRITE ERROR 00203 6 HALT 00204 6 RETRY AFTER INTERRUPT NOP 00205 6 L 128 00206 6 END 00207 5 END 00208 4 MBUFF LOW LA B 00209 4 END SETMEM 00210 3 00211 3 READHEX PROCEDURE BYTE 00212 4 READ ONE HEX CHARACTER FROM THE INPUT 00213 4 DECLARE H BYTE 00214 4 IF H GETCHAR 0 lt 9 THEN RETURN H 0 00215 4 IF H A gt 5 THEN GO TO CHARERR 00216 4 RETURN H A 10 00217 4 END READHEX 00218 8 00219 3 READBYTE PROCEDURE BYTE 00220 4 READ TWO HEX DIGITS 00221 4 RETURN SHL READHEX 4 OR READHEX 00222 4 END READBXTE 00223 3 00224 3 READCS PROCEDURE BYTE 00225 4 READ BYTE WHILE COMPUTING CHECKSUM 00226 00227 00228 00229 00230 00231 00232 00233 00234 00235 00236 00237 00238 00239 00240 0024 0024 0024 0024 0024 0024 0024 0024 00249 00250 00251 00252 00253 00254 00255 00256 00257 00258 00259 00260 00261 00262 00263 00264 00265 00266 00267 00268 00269 00270 00271 00272 00273 00274 00275 00276 00277 00278 00279 0 JOU W NH gt 0 Q QO UY Q UU ds WW QO QO QO QO QO ds
39. LXI H SW NO SWITCHES2 7E MOV A M FILL A WITH SW B7 ORA A SET FLAGS 20501 JNZ SORT CONTINUE IF NOT EQUAL END OF SORT PROCESS REBOOT C30000 STOP JMP REBOOT RESTART CCP CONTINUE THIS PASS CONT 3A4501 LDA I LOAD I TO A REGISTER 5F MOV E A LOW I TO E REGISTER 1600 MVI D 0 HIGH I 0 214601 LXI H LIST BASE OF LIST 19 DAD D ADDR LIST I 7E MOV A M LIST I IN A REGISTER 23 INX H ADDR OF LIST I 1 BE CMP M LIST I LIST I I DA3D01 JC INCI SKIP IF PROPER ORDER CHECK FOR LIST I LIST I 1 CA3D01 JZ INCI SKIP IF EQUAL ITEMS ARE OUT OF ORDER SWITCH 4E MOV C M OLD LIST I 1 TOC 77 MOV M A NEW LIST I 1 TO M 28 DCX H ADDR LIST I 71 MOV M C NEW LIST I 214401 LXI H SW SWITCH COUNT IS SW 34 INR M SW SW 1 INCI INCREMENT INDEX I 214501 LX H 1 34 INR M I 1I 1 C30F01 JMP COMP TO COMPARE I WITH N 1 DATA AREAS SW DS 1 SWITCH COUNT I DS 1 INDEX 0503040A08LIST DB 5 344 10 8 130 1054 08 N DB S LIST LENGTH OF LIST END COMP 0122 CONT 0145 I 0130 INCI 0146 LIST N 0000 REBOOT 0105 SORT 011F STOP 0144 SW 64 SID Users Guide Section 5 SID HIST UTL Start SID with he HIST utilitv SID VERS 1 4 HISTOGRAM BOUNDS 100 200 Monitor 0100 through 0200 INITIAL 522 COLLECT 5224 Entry Point addresses in HIST DISPLAY 5227 ISORT HEX SORT SYM Load the SORT program with symbols R SYMBOLS Program loaded now loading symbols NEXT PC END 0600 01
40. MVI A CALL PCHAR MOV A B CAL PHE JMP GLOOP END PSA END OF INPUT CALL CRLF LHLD OLDSP SPHL RET FILE CONTROL BLOCK DEFINITIONS EOU FCB 0 DISK NAME EQU FCB 1 FILE NAME EQU FCB 9 DISK FILE TYPE 3 CHARACTERS EOU FCB 12 FILE S CURRENT REEL NUMBER EQU FCB 15 FILE S RECORD COUNT 0 TO 128 EQU FCB 32 CURRENT NEXT RECORD NUMBER 0 TO 127 EQU FCB 33 FCB LENGTH SET UP FILE OPEN THE FILE FOR INPUT LXI D FCB MVI C OPENF CALL BOOS CHECK FOR ERRORS CPI 255 JNZ OPNOK 020 020 0211 0212 0215 0601 CD9401 AF 327C00 c9 E5D5C5 115C00 0E14 CD0500 C1D1E1 E EOO 8 FEO1 CAF701 0602 CD9401 OPNOK DISKR 28 BAD OPEN MVI B 1 OPEN ERROR CALL ERR OPEN IS OK XRA A STA FCBCR RET READ DISK FILE RECORD PUSH H PUSH D PUSH B LXI D FCB MVI C READF CALL BDOS POP BI POP DI POP H CPI 0 FOR ERRS RZ MAV BE EOF CPI 1 JZ FINIS MVI B 2 DISK READ ERROR CALL ERR END 29 The PL M program which follows implements the CP M LOAD utilitv The function is as follows The user types LOAD filename If filename HEX exists on the diskette then the LOAD utility reads the hex formatted machine code file and produces the file filename COM where the COM file contains an absolute memory image of the machine code
41. OCCUR 3E7F 2AD93F LHLD IOD INCREMENT DMA ADDRESS 3882 118000 LXI D 128 SECTOR SIZE 3E85 19 DAD D INCREMENTED DMA ADDRESS IN HL 3E86 44 MOV B H 3E87 4D MOV CAL READV FOR CALL TO SET DMA 3E88 CD5A3F CALL SETDMA 3E8B 3AD83F LDA IOS SECTOR NUMBER JUST READ 3E8E 1 CPI 26 READ LAST SECTOR 3E90 DAJC3E JC RD1 MUST BE SECTOR 26 ZERO AND GO TO NEXT TRACK 3E93 3AD73F LDA IOT GET TRACK TO REGISTER A 3E96 3C INR A 3E97 4F MOV C A READY FOR CALL 3E98 CD503F CALL SETTRK 3E9B AF XRA A CLEAR SECTOR NUMBER 3E9C 3C RD1 INR A TO NEXT SECTOR 3E9D 4F MOV C A READY FOR CALL 9 CD553F CALL SETSEC 1 Cl POP B RECALL SECTOR COUNT 3EA2 05 DCR B DONE 3EA3 C2783E JNZ RDSEC T DONE WITH THE LOAD RESET DEFAULT BUFFER ADDRESS GOCPM ENTER HERE FROM COLD START BOOT ENABLE RSTO AND RST7 3EA6 DI 3EA7 3E12 MVI A 12H INITIALIZE COMMAND 3EA9 D3FD OUT REVR 3EAB AF XRA A 3EAC D3FC OUT INTC CLEARED 3EAE 3E7E MVI A INTE RSTO AND RST7 BITS CN 3EBO D3FC OUT INTC 3EB2 AF XRA A 3EB3 D3F3 OUT ICON INTERRUPT CONTROL r SET DEFAULT BUFFER ADDRESS TO 80H 3EB5 018000 LXI B BUFF 3EB8 CD5A3F CALL SETDMA r RESET MONITOR ENTRY POINTS 3EBB 3EC3 MVI A JMP 3EBD 320000 STA 0 21033E LXI H WBOOTE 3EC3 220100 SHLD 1 JMP WBOOT AT LOCATION 00 3EC6 320500 STA 5 9 210632 LXI H BDOS 220600 SHLD 6 JMP BDOS AT LOCATICN 5 3ECF 323800 STA 7 8 JMP TO MON80 MAY HAVE BEEN CHANGED BY DDT D2 2100F8 LXI H MO
42. OPEN SFCB IF DCNT END CALL CRLF 255 THEN CALL PRINT CANNOT OPEN SOURCES CALL MOVE COM FCBA 9 3 DELETE FCBA EST CAL OVE ANY EXISTING FILE BY THIS NAME HEN OPEN A NEW FILE El IF DCNT 255 THEN CAL DO CALL R CALL CLOSE FCBA CALL oR STAC RETU END AKE FCBA FCB 32 0 CREATE AND SET NEXT RECORD PRINT NO MORE DIRECTORY SPACES ELSE IF DCNT END CRLF KPOINTER SP RN 0 OADCOM EOF 255 ELOC THEN CALL PRINT CANNOT CLOSE FILES ESTORE STACKPOINTER FOR RETURN CP M 1 4 ALTERATION GU I D ti Table of Contents Section Page la INTRODUCTION 1 Di FIRST LEVEL SYSTEM REGENERATION 1 SECOND LEVEL SYSTEM REGENERATION 5 4 SAMPLE GETSYS AND PURSYS PROGRAMS 8 Ds DISKETTE ORGANIZATION 9 6 THE BIOS ENTRY POINTS 11 CA A SAMPLE BIOS 17 8 A SAMPLE COLD START LOADER 17 ea RESERVED LOCATIONS IN PAGE ZERO 17 Appendix A HE MDS LOADER MOVE PROGRAM B HE MDS COLD START LMDER THE MDS BASIC 1 0 SYSTEM BIOS D SKELETAL CBIOS E A SKELETAL GETSYS
43. P 0201 CALL 0106 WRCHARW character Z E A 00 B 0000 D 0200 H 793B S 0150 P 0204 POP H Z E A 00 B 0000 D 0200 H 012A S 0152 P 0205 INX H Move to next Z E A 00 B 0000 D 0200 H 0128 S 0152 P 0206 JMP 010C WRMSG character WRMSG Looping beck Z E A 00 B 0000 D 0200 H 0129 S 0152 P 010C MOV A M Z E A 41 B 0000 D 0200 H 0129 S 0152 P 0100 ORA A E A 41 B 0000 D 0200 H 0128 S 0152 P 010E RZ E A 41 B 0000 D 0200 H 0123 S 0152 P 010F JMP 0200 E A 41 B 0000 D 0200 H 0128 S 0152 P 0200 PUSH H Here s the next E A 41 B 0000 D 0200 H 0129 S 0150 P 0201 CALL 0106 WRCHARA character Z E A 00 B 0000 D 0200 H 793B S 0150 P 0204 POP H A Z E A 00 B 5000 D 0200 4 012B S 0152 P 0205 INX H Z E A 00 B 0000 D 0200 4 012C S 0152 P 0206 JMP 010C WRMSG WRMSG Z E A 00 B 0000 D 0200 H 012C S 0152 P 010C MOV A M 010D Abort with return HP STOP Set a permanent break at STOP then GO from G100 the beginning of the program WALLA WASHVERS 1 4 1WALLA WASHVERS 1 4 1WASHVERS 1 451 01 PASS 0127 STOP Things look better but 00 byte missing on messages Z E A 00 B 0000 D 0200 H 013E S 0154 P 0127 JMP 0000 REBOOT 0000 REBOOT S WALLAMSG 4 Place a 00 bvte at the end of each message 012E 41 leave this value 41 A in WALLA 012F 20 0 changed to 00 from blank 013057 S WASHMSGHA Place 00 bvte at the end of the second message 0134 56 0 0135 45 G100 Break at STOP remains set GO from the beginning WALLAWALLAWASH Looks go
44. READ STARTING WITH SECTOR 1 RDSEC CALL READSEC READ NEXT SECTOR LXI D 128 CHANGE LOAD ADDRESS TO NEXT 1 2 DAD D HL HL 128 TO NEXT ADDRESS INR e SECTOR SECTOR 1 MOV A C CHECK FOR END OF TRACK CPI 27 JC RDTRK CARRY GENERATED IF C lt 27 ARRIVE HERE AT END CF TRACK MOVE TO NEXT TRACK INR B TRACK TRACK 1 MOV A B CHECK FOR LAST TRACK CPI 2 TRACK 2 JC RDTRK CARRY GENERATED IF TRACK lt 2 ARRIVE HERE AT END OF LOAD HALT FOR NOW EI HIT PUTSYS PROGRAM PLACE MEMORY STARTING 2880H BIAS BACK TO 0 AND 1 START THIS PROGRAM ON THE NEXT PAGE ORG 5 100 AND OFFOOH REGISTER USE A SCRATCH REGISTER B TRACK COUNT 0 1 SECTOR COUNT 1 26 D E SCRATCH REGISTER PAIR H L DUMP ADDRESS SP SET TO STACK ADDRESS r PSTART START OF THE PUTSYS PROGRAM 0200 318028 LXI SP 2880H BIAS SET STACK POINTER TO SCRATCH AREA 0203 218028 LXI H 2880H BIAS SET BASE DUMP ADDRESS 0206 0600 MVI B 0 START WITH TRACK 0 MTRK WRITE FIRST NEXT TRACK
45. S Sections 5 and 8 for more information on the bootstrap operation 15 Retest the new test diskette with the bootstrap loader installed by executing steps 11 12 and 13 Upon completion of these tests type a control C control and C keys simultaneously The system should then execute a warm start which reboots the system and types the A prompt 16 At this point you probably have a good version of your customized CP M system on your test diskette Use GETSYS to load CP M from your test diskette Remove the test diskette place the distribution diskette or a legal copy into the drive and use PUTSYS to replace the distribution version by your customized version Do not make this replacement if you are unsure of your patch since this step destroys the system which was sent to you from Digital Research 17 Load your modified CP M system and test it by typing DIR CP M should respond with a list of files which are provided on the initialized diskette One such file should be the memory image for the debugger called DDT COM NOTE from now on it is important that you always reboot the CP M system when the diskette is removed and replaced by another diskette unless the new diskette is read only 18 Load and test the debugger by typing DDT see the document CP M Dynamic Debugging Tool DDT for operating information and examples Take time to familiarize yourself
46. TO M DCX H ADRR LIST I MOV M C NEW LIST I LX H SW SWITCH COUNT IS SW INR M SW SW 1 INCREMENT INDEX 1 LX H I INR M I I 1 JMP COMP TO COMPARE I WITH N 1 DATA AREAS DS 1 SWITCH COUNT DS 1 INDEX DS 32 16 LEVEL STACK DB 5 7 3747 1058 130 10 4 DB S LIST LENGTH OF LIST END 52 SID Users Guide Section 5 Section 5 2 SORT SYM 010 0119 CONT 0139 I 0131 INCI OI5A LIST 0162 N 0000 REBOOT 0100 SORT 015A STACK 0116 STOP 0138 SW 3 TYPE SORT HEX 10010000213801360121390136003A6201BEC21997 10011000012138017EB7C300005F1600215A011982 100120007E23BEDA3101CA31014E772B71213801AD 080130003421390134C30A0136 09015A000503040A08820A0408E6 0000000000 4 SID SORT HEX SORT SYM Start SID with HEX and SYM files SID VERS 1 4 SYMBOLS NEXT PC END 0163 0100 55B7 Next free address is 163 Program Counter is 100 D LIST N 1 and end of TPA is 55B7 015A 05 03 04 0A 08 82 0160 04 Display initial list of items to sort G STOP Execute test program until STOP symbol address encountered 0116 STOP Now at the STOP address examine data list D LIST N 1 015A 05 03 04 OA 08 82 Hasn t changed 0160 OA 04 XP where is the program counter P 0116 100 reset PC back to beginning and try again with trace on TJO amp 01 B 0000 D 0008 H 0138 S 0100 P 0100 LXI H 0138 SW 0
47. U to move past break address 0137 P136 G INCI 01 PASS 0136 SW It s actually easier to use the pass point feature if we want to view the action of the INR M since the P command stops execution after the pass point is executed I A 05 B 0004 D 0001 H 013E S 0100 P 0136 INR M 02 X0137 INCI HD LIST I 60 03 04 S N 68 08 4 69 0 O O O G 01 PASS 0136 I A 0A B 0008 SW SW 2 looks good Data values look good Let s change N to a smaller value so the program doesn t loop so many times 4 is a good number End input with GO to pass point Here we are switch value is incremented D 0003 H 013E S 0100 P 0126 INR M 03 SW 0137 INCI Stopped at next instruction D LIST 1 0160 03 04 05 08 Data values so far H SW 0004 4 SW value at this point is 4 TFFEF Let s watch it run for a few steps A 0A B 0008 D 0003 H 013E S 0100 P 0137 LXI H 013F I gt 0 0008 0 0003 H 013F S 0100 P 013A INR M 03 si 0 B 0008 D 0003 H 013F S 0100 013 IMP 010 COMP COMP A 0A B 0008 D 0003 H 013F S 0100 P 010A LDA 0168 N A 04 B 0008 D 0003 H 013F S 0100 P 010D CMP M 04 T Z EI A 04 B 0008 D 0003 H 013F S 0100 P 010E JNZ 011C CONT Z El A 04 B 0008 D 0003 H 013F S 0100 P 0111 LXI H 013E SW amp Z El A 04 B 0008 D 0003 H 013E S 0100 P 0114 MOV A M SW Z El A 04 B 0
48. any symbol lookup operations during the disassembly The format of the L command output is 55555 oocode operand ttttt where sssss represent a symbol which labels the program location given by the hexadecimal address aaaa when the symbol exists The opcode field gives the 8080 mnemonic for the instruction at location aaaa and the operand field when present gives the hexadecimal values which follow the opcode in memory The symbol ttttt is printed when the instruction references a memory address which matches a symbol in the table Note that instructions may directly reference memory through their operand fields e g CALL JMP LDA LHLD while other instructions imply a memory address e g STAX B LDAX D Instructions which reference memory such as INR M are listed with the memory operand in the form opcode m hh where opcode is the memory referencing instruction and hh is the hexadecimal value contained in the memory address given by the HL register pair before the operation takes place When the operation code at the list address is not a valid 8080 mnemonic the output form is hh where hh is the hexadecimal value of the invalid operation code 26 SID Users Guide Section 3 Several valid L commands are listed below L100 L 1024 1034 L CRLF L ICALL 30 L PRBUFF I A 3 9 The Move Memory M Command The M command allows the operat
49. assuming A is not in ffect befor ach instruction is executed For example the command T4 traces four program steps producing the format register state 1 opcode 1 label register state 2 opcode 2 label register state 3 opcode 3 label register state 4 opcode 4 bbbb showing the register state before each corresponding operation code is executed Each operation code is written in the same format as in the L and X commands with interspersed symbolic operands decoded wherever possible The interspersed labels show program addresses when they occur in the flow of execution The final break address denoted by bbbb above shows the value of the program counter after opcode 4 is executed 36 SID Users Guide Section 3 The CPU state can optionallv be displaved at this point by typing the single character Forms c and d are us SID utilities and automatical instruction executes The val Lue utilitv entrv address for data collection use of these forms are given in however that form d step count of n da Forms given bv e paral is equival X command ed onlv in conjunction with the 1 perform a CALL c after each of c corresponds to a Details of the sections which follow Note lent to c with a single lel a through e but the preceding minus sign disables the svmbolic features of SID In particular labels are
50. been executed 20 SID Users Guide Section 3 The operator can execute through the TVPEOUT subroutine using anv of the commands G T or U One useful command in this situation is Gy which continues execution from 0302 and sets a breakpoint at the topmost stacked element given by Since the topmost stacked element must be the subroutine return address this particular G command has the effect of executing the TYPEOUT subroutine with a break upon return to the instruction following the original call to TYPEOUT Command forms g through 1 correspond directly to functions a through f except that pass points are not displayed until the corresponding pass counters reach 1 see the P command for details of intermediate pass point display Note that the essential difference between the G command and the U Untrace command is that execution proceeds unmonitored in real time with the G command while each instruction is executed in single step mode when the U command is used Fully monitored execution under the U command has the advantage that the operator can regain control at any point in the test program execution However execution time of the test program is seriously degraded in Untrace mode since automatic breakpoints are set and cleared following each instruction Examples of valid G commands are G100 G100 103 G CRLF PRINT 1024 GEJMPVEC I ENDC ERRC G
51. decoded in the trac neither the svmbol lic operands nor the svmbolic increases the operation of SID s large svmbol tables are present Forms given bv f paral process This option lightly in trace mode when el a through d but perform a trace without call f for example to trace mainline p into the subroutines which are c xecution The TW command perfo he test program in real ntered returning to fully trac urrent subroutine level Ifa t the current level i e a RI ode then tracing continues a r mainline program level For a e t c a m o a program MAINLINI SUBROUTINE 1 E EE Sl MOV A C S2 CALL S1 MOV B C MOV C D CALL 582 MOV C 1 MOV D 1 Gl d JMP 0000 R T that the test or fore the call to Suppose further subroutine Sl b T 100 would have the effect of tracing from Sl through S2 so forth until level Sn is encou of the trace could be useful it to trace only at a particular su effects of the subroutine levels an offending subroutine is often tracing non essential program fl time whenever a subrou SUBROUTINI unction It is often useful rogram code but not trace alled from the mainline rms this function by running tine is turn to the n takes place n fully traced ng subroutine suppose the mainline ed mode upon re return operatio T is executed i the encompassi example
52. example assembles a short program into the transient program area note that each command line is terminated by a carriage return A100 begin assembly at 0100 0100 MVI A 10 load A with hex 10 0102 DCR A decrement A register 0103 JNZ 100 loop until zero 0106 RST 7 return to debugger 0107 single carriage return As each successive address is Promoted the operator may either enter a mnemonic instruction or return to SID command mode by entering a single carriage return a single is also accepted to terminate inline assembly to be consistent with the S command Delimiter characters which are acceptable between mnemonic and operand fields include space or tab sequences Invalid mnemonics or ill formed operand fields produce errors In this case control returns back to command mode where the operator can proceed with another command line or simply return to assembly mode by tyoing a single A since the assumed starting address is automatically taken from the last assembled address 14 SID Users Guide Section 3 The assembler disassembler portion of SID is a separate module and can be removed to increase the available debugging space Thus form c is entered to remove the module returning approximately 1 1 2 K bytes Since the entire SID debugger requires approximately 6 K bytes this reduces SID requirements to about 4 1 2 K bytes When the assembler disassembler module is removed in th
53. however the operator can use the trace function to single step past the current address followed by a G command see the G command for actions of the trace facility Form e extends the breakpoint facility bv allowing two temporary break addresses at a and b Program execution begins at the current PC and continues until either address a or b is encountered Both temporary break addresses are cleared when SID returns to command mode Form f is similar to e except the initial value of PC is set to location p before starting the test program It should be noted that the instruction at a breakpoint address is not executed when the G command is used Suppose for example that a subroutine named TYPEOUT is located at address 0302 in a test Program consisting of the machine code TXPEOUT 0302 MOV C A 0303 MVI C 2 0305 JMP 0005 Suppose further that the operator is testing a program which makes calls on the TYPEO subroutine where a break address is to be set The command G TYPEOU is entered by the operator Test programlexecution proceeds from the current PC value and stops when the TYPEOUT subroutine is reached with the breakpoint message 0302 TYPEOUT indicating that control has returned from the test program to the SID debugger At this point the program counter of the test program is at location 0302 i e TYPEOUT and the instruction at this location has not yet
54. interaction SYSGEN Start the SYSGEN program SYSGEN VERSION 1 0 Siqnon message from SYSGEN GET SYSTEM Y N N Answer no to GET reauest PUT SYSTEM Y N Y Answer yes to PUT request DESTINATION ON B THEN TYPE RETURN Place the test diskette on drive B if you are operating with a single drive system answer A rather than Y to the PUT request then remove vour diskette and replace by the test diskette and type a return The system will be replaced on the test diskette and the system will automatically boot from drive A Test the new CP M system and place the Digital Research copyright notice on the diskette 4 be inserted bv the user SAMPLE G ETSYS AND PUTSXS Copyright c 1976 Digital Research ROGRAMS as specified in your Licensing Agreement The followirxg program provides a framework for the GEISYS and PURSYS programs referenced in Sectio n 2 The READSEC and WRITESEC subroutines must to read and write the specific sectors H GETSYS PROGRAM READ TRACKS 0 AND 1 TO MEMORY AT 2880H REGISTER USE S
55. is a tvpo in 49 OT a comment line at address 012A in the listing 49 MOV M A NEW LIST I C DI ZOLT 49 MOV M A NEW LIST I 1 TO M Looks better now 49 F32 We are not using the 8080 stack so get rid of it 64 OLT 64 DS 32 16 LEVEL STACK 64 2KT 64 x 64 Complete the edit 23 MAC SORT CP M MACRO ASSEM 2 0 014F Reassemble the source program 1 USE FACTOR END OF ASSEMBLY 24 SID SORT HEX SORT SYM SID VERS 1 4 Back to SID this should be the last time SYMBOLS NEXT PC END 014F 0100 55BF D LIST N Initial data 0146 05 03 04 OA 08 82 OA 04 08 G STOP Ok ok Let s try it with an address reference to G STOP the Label STOP 011F STOP That s better now look at the data D LIST N hooray It s finally sorted 0146 03 04 04 05 08 OA OA 82 08 H N 0008 8 Is N ok Yes it s still 8 GO Hold it The data is in ascending order but it is supposed to be in descending order This will be an easy fix 62 SID Users Guide Section 5 25 ED SORT ASM A T i SORT PROGRAM IN CP M ASSEMBLY LANGUAGE w ELEMENTS OF LIST ARE PLACED INTO DESCENDING ORDER USING BUBBLE SORT XSDESIZASCIZOLT z ASCENDING ORDER USING BUBBLE SORT SCC ZC ZOLT 7 ASCENDING ORDER USING BUBBLE SORT E Took care of that problem 26 MAC SORT S P M MACRO ASSEM 2 0 014 Re assemble with the svmbol table option 001 USE FACTOR END OF ASSEMBLY At this point w
56. less meaningful except that as the initial program counter is obtained from the last record of the hex file unless this value is zero counter is set to the beginning of the ASM and MAC manuals END it is the programmer s responsibili records do not overlay portions of Operating System errors occur in the hex format Otherwise given on the by SID statement in the If the hex fil the in which case the program the TPA As discussed in the previous paragraph are listed at the console Command form is to be included relocated as above into the TPA d In this case is used when a SID util The utilitv function is then loaded Utilitv functions are also sel and immediatelv move to the top of the TPA placing themselves direct y below the SID program address is changed to reflect th Generally Figure 4 informatio console the sectio SID Utilities the utility program prints sign o n and may or may not prompt for input from the Exact details of utility or eration are given in n entitled Ot if the program counter value can be source program tv to ensure that the hex the SID debuqger or CP M does not exist response is issued the principal program locations show Again n in litv function SID is first loaded and f relocating The BDOS entrv reduced TPA as shown in n SID Users Guide BDOS S
57. letter which governs the command actions The parameters may be counters or memory addresses and may appear in both literal and symbolic form but eventually reduce to values in the range 0 65535 four hexadecimal digits As an examole the display memory command can take the form Dssss eeee SID Users Guide Section 1 where D is the command letter and ssss and eeee are command parameters which give the starting and ending addresses for the display respectively In their simplest form ssss and eeee can be literal hexadecimal values such as D100 300 which instructs SID to print the hexadecimal and ASCII values contained in memory locations 0100 through 0300 Although the operator can usually refer to program listings to obtain absolute machine addresses SID supports more comprehensive mechanisms for quick access to machine addresses through orogram symbols In particular the command parameters can consist of symbolic expressions which are described fully in the following section 2 SID SYMBOLIC EXPRESSIONS An important facility of SID is the ability to reference absolute machine addresses through symbolic expressions Symbolic expressions may involve names obtained from the program under test which are included in the SYM file produced by the CP M Macro Assembler or may consist of literal values in hexadecimal decimal or ASCII character string form These values can then be combined with
58. loaded into 980H this is the base of the CCP and so forth through the entire CP M svstem load In a 16K svstem for example the CCP resides at the CP M address 2900H but is placed into memorv at 980H the SYSGEN program Thus the negative bias denoted by satisfies 2900H 980H or 980H 2900H Assuming two s canplement arithmetic 0E080H which can be checked by 2900H 0E080H 10980H 0980H ignoring high order overflow Note that for larger systems n satisfies 0H b 980H or 980H 2900H 4 b or 0E080H b 90 2 n n The value of n for common CP M svstems is given below memorv size bias b negative offset n 16K 0000H 0E080H 0000H OEOBOH 32K 4000H OEOBOH 4000H 0A080H 48K 8000H 0E080H 8000H 6080H 62K 0B800H 0E080H 0B800H 2880H 64K 0C000H 0E080H OCOOOH 2080H Assume for example that you want to locate the address x within the memory image loaded under DDT in a 16K system First type Hx n Hexadecimal sum and difference and DDT will respond with the value of x n sum and x n difference The first number printed by DDT will be the actual memory address in the image where the data or code will be found The input H2900 E080 for example will produce 980H as the sum which is where the CCP is located in the memorv image under DDT E00H b n H The Use the L command to disassemble portions of y
59. may then load addition symbol tables by typing I and R commands such as I MAIN SYM R I DATA SYM R in order to access symbols in the SORT MAIN and DATA modules Note that several symbol table files can be concatenated using the PIP program see the CP M Features and Facilities manual for PIP operation in command mode For example the PIP command PIP NOBUGS SXM IOMOD SXM SORT SYM MERGE SYM FORMAT SYM creates a file called NOBUGS SXM which holds the svmbols for SORT MERGE and FORMAT The SID command SID RI Gl PORT COM NOBUGS SYM loads the memory image for the report generator along with the symbol tables for these particular modules Additional symbol files can then be selectively loaded using I and R commands The symbol file for the entire memory image can then be constructed using the PIP command PIP REPORT SYM NOBUGS SYM MAIN SYM DATA SYM 33 SID Users Guide Section 3 which allows the operator to type SID REPORT COM REPORT SYM in order to load the memory image for the report generator along with the entire symbol table Recall however that the symbol table is always searched in load order and thus symbol names which are the same in two module must be distinguished using qualified symbolic names see Section 1 As mentioned above form b allows a displacement value d to be added to each program address and svmb
60. pass counts reach 1 Forms given bv f correspond to the T command exactly except that the trace display is disabled In this case the current subroutine level is run fully monitored but higher subroutine levels run in real time Forms given by g are similar to f but disable the pass point display as described above Similar to the T command execution can be aborted in untrace mode by depressing any keyboard character The break address is displayed and control returns to SID command mode Valid U commands are given below UFFFF U 10000 COLLECT UW GAMMA COLLECT 3 15 The Examine CPU State X Command The X command allows the operator to examine and alter the CPU state of the program under test The forms of the X command are a X b c Form a displays the entire CPU state in the format CZMEI A aa B bbbb D dddd H hhhh S ssss P pppp op sym where C Z M E and I represent the true or false conditions of 39 SID Users Guide Section 3 the CPU carrv zero minus even paritv and interdigit carrv respectivelv the position contains a then the corresponding flag is false otherwise the flag letter is printed The bvte value aa is the value of the A register while the double bvte values bbbb dddd hhhh 5555 and pppp give the 16 bit values of the BC DE HL Stack Pointer and Program Counter respectivelv The field marked gives the de
61. system from an initialized diskette into memory and then takes the memory image and places it on the new diskette Upon completion of the SYSGEN operation place the original diskette on drive A and the initialized diskette on drive B Reboot the system the response should be A gt indicating that drive A is active Log into drive B by typing B and CP M should respond with B gt indicating that drive B is active If the diskette in drive B is factory fresh it will contain an empty directory Non standard diskettes may however appear as full directories to CP M which can be emptied by typing ERA when the diskette to be initialized is active Do not give the ERA command if you wish to preserve files on the new diskette since all files will be erased with this command After examining disk B reboot the CP M system and return to drive A for further operations The transient commands are then copied from drive A to drive B using the PIP program The sequence of commands shown below for example copy the principal programs from a standard CP M diskette to the new diskette A gt PIP B STAT COM STAT COM B PIP COM PIP COM B LOAD COM LOAD COM B ED COM ED COM 20 B ASM COM ASM COM B SYSGEN COM SYSGEN COM B DDT COM DDT COM gt The user should then log in disk B and tvpe the command DIR to ensure that the files were transferred to driv
62. the copied memorv image from the test diskette back into memory at 2880H b and check to ensure that it has loaded ck properly clear memory if possible before the load Upon successful load branch to the CCP module at location 2900H b The CCP will call the BDOS which will call the CBIOS The CBIOS will be asked to read several sectors on track 2 twice in succession and if successful CP M will type A gt When you make it this far you are almost on the air If you have trouble use whatever debug facilities you have available to trace and breakpoint your CBIOS 11 Upon completion of step 10 CP M has prompted the console for a command input Test the disk write operation bv tvping SAVE 1 X COM recall that all commands must be followed bv a carriage return CP M should respond with another prompt after several disk accesses gt If it does not debug vour disk write functions and retrv 12 Then test the directory command by typing DIR FoF CP M should respond with X COM 13 Test th rase command by typing ERA X COM CP M should respond with the A prompt When you make it this far you have an operational system which only requires a bootstrap loader to function completely 14 Write a bootstrap loader which is similar to GETSYS and place it into read only memory or into track 0 sector 1 usinq PUTSYS again using the test diskette not the distribution diskette
63. the currently selected drive You can choose to seek the selected track at this time or delay the seek until the next read or write actually occurs Register C can take on values in the range 0 76 corresponding to valid track numbers Register C contains the sector number 1 through 26 for sub secjuent disk accesses on the currently selected drive You can choose to send this information to the controller at this point or instead delay sector selection until the read or write operation occurs Registers B and C high order 8 bits in B low order 8 bits in contain the DMA direct memory access address for sub sequent read or write operations For example if B 00H and C 80H when SETDMA is called then all subsequent read operations fill their data into 80H through OFFH and all subsequent write operations get their data from 80H through OFFH until the next call to SETDMA occurs The initial DMA address is assumed to be 80H Note that the controller need not actually support direct memory access If for example all data is received and sent through 1 0 ports the CBIOS which you construct uses the 128 byte area starting at the selected DMA address for the memory buffer during the I 0 operation Assuminq the drive has been selected the track has been set the sector has been set and the DMA address has been specified this subroutine attempts to read the selected sector The read
64. to each address which is shown with a where b is actual to the memory size 16K For b Values for b in 48K 62K 64K 1 tracks of ad location 2880 TPA as show 2 Te check to see not been alte 3 Ru B b 48K 16K 32K 08000H 62K 16K 46K 0B800H 64K 16K 48K 0C000H Review Section 4 and write a GETSYS program which ta from the diskette must begin at base of the iskette into memory H b n in st the GI that the red in a n the GETSYS loads CP M startinq at 2880H b 128 bytes later at 2900H b 4 Code GETSYS so that it starts at location 100H the first part of Appendix E reads The da E ISYS program by reading a blank diskette into memory data has been read properly ny way by the GETSYS program the first two and and that the diskette has GETSYS program using an initialized CP M diskette to see if the operating system actually starts Review Section 4 and write the PUTSYS Program which writes memory Th starting at 2880H b back onto the first two tracks of the diskett PU RSYS proqram should be located at 200H Appendix E 5 back using GE alter CP M o 6 5 similar func Appendix D as a model BIOS TSXS tudv Sections 5 the BIOS given in Appendix C n disk 6 tion for the customized environment Call this new BIOS bv the Implement onlv the primitive disk opera
65. types two default file control block names are prepared in the form DFCB1 dl fl t1 00 00 00 00 DFCB2 d2 f2 t2 00 00 00 00 00 current record field 23 SID Users Guide Section 3 If dl is empty in the original command line then dl 00 which automatically selects dl A B or D then dl respectively which properly the default drive otherwise if 01 02 03 or 04 initializes the file control block for automatic disk selection Field fl is initialized to the ASCII file name given by fl Dadded to an eight character field with ASCII blanks Similarly tl is initialized to the ASCII file type padded with blanks ina field of length three Lower case alohabetics in dl fl and tl are translated to upider case in dl fl andtl respectively Names which exceed their respective length fields are truncated on the right Finally the extent field is zeroed in preparation for file a BDOS call to open or make the The second default file control block given by d2 f2 and t2 is prepared in a simil lar fashion and stored starting at location 006C Note that the current record field at location 007C is also initial ized to 00 If any of the fields fl tl 2 and t2 are not included in the command line their corresponding fields in the default file control blocks are filled with blanks Ambiguous reference
66. with DDT it will be your best friend in later steps 19 Before making further CBIOS modifications practice using the editor see the ED user s guide and assembler s the ASM user s guide Then recode and test the GETSYS RJTSYS and CBIOS programs using ED ASM and DDT Code and test a COPY program which does a sector to sector copy from one diskette to another to obtain back up copies of the original diskette NOTE read your CP M Licensing Agreement it specifies your legal responsibilities when copying the CP M system Place the copyright notice Copyright c 1976 Digital Research on each copy vbich is made with your COPY program 20 Modify your CBIOS to include the extra functions for punches readers siqnon messages and so forth and add the facilities for a second drive if it exists on your system You can make these changes with the GETSYS and PUTSYS programs which you have developed or you can refer to the following section which outlines CP M facilities which will aid you in the regeneration process You now have a good copy of the customized CP M system Note that although the CBICS portion of CP M which you have developed belongs to you the modified version of CP M which you have created can be copied for your use only again read your Licensing Agreement and cannot be legally copied for anvone else s use If vou wish vou mav send vou name and address to Digital Research
67. x y is loaded into the TPA it is not executed until SID r asses program control to the program under test using one of the commands C Call G Go T Trace or U Untrace It is the programmer s responsibility to ensure there is enough space in the TPA to hold the test program as well as the de6ugger If the program x y does not exist on the diskette or cannot be loaded the standard error response is issued by SID If no load error occurs the SID response is NEXT PC END nnnn pppp eeee where nnnn pppp and are hexadecimal values which indicate the next fr address following the loaded program the initial value of the program counter and the logical end of the TPA respectively Thus nnnn is normally the beginning of the data area of the Drogram under test pppp is the starting program counter set to the beginning of the TPA and eeee is the last memory location available to the test program as shown in Figure 3 Although x y usually SID Users Guide contains machin th code in which case these program addresses ar Figure 3 Command form the test program is assumed to be i directly produced by ASM or MAC Section BDOS SID eeee Free SDace nnnn Test PPPP program JMP SID memory Configuration After Test Program Load c I is similar to form n Intel n this case hex b format r operator can name an ASCII file
68. 0 3 4 The Fill Memory F Command The F command fills memory with a constant byte value and takes the form Fs f d where s is the starting address for the fill f is the ending inclusive address for the fill and d is the 8 bit data item to store in locations s through f It is the 18 SID Users Guide Section 3 operator s responsibilitv to not fill memorv locations which are occupied bv the resident Portions of CP M including areas reserved for SID Examples of valid F commands are F100 3FF FF F GAMMA 100 23 F ALPHA 1 X 3 5 The GO G Command The G command is used to pass Program control to a program under test Execution proceeds in real time from the address specified bv the G command That is the G command releases processor control from SID to the program under test Execution does not return to SID until a break or pass point is reached s the command for a discussion of Pass points The operator can force a return to SID however bv interrupting the processor with a restart 7 RST 7 provided bv the program under test or forced bv external hardware such as front Panel control switches if available The several G command forms are G Gp G a Gp a G a b Gp a b G Gp G a Gp a G a b G p a b PRAUP TDQMOAA Ow A RA A RR RS Forms a through f start test proqram execution with symbolic features enabled while forms g through 1 are
69. 00 51B7 P STOP Permanent break at STOP address P SORT 3 Execute to Steady state conditions by G passing the SORT label three times before break G prevents intermediate pass traces 01 PASS 0100 A 02 B 0004 D 0006 H 013F S 0100 P 0100 LXI H 013F 0103 We re now at the third pass through SORT H P SORT Remove the pass point at SORT run monitored UFFF COLLECT from this point for OFFF steps collect data A 02 B 0004 D 0006 H 013F S 0100 P 0103 MVI M 01 SW 0127 Stopped after OFFF steps displav collected data C DISPLAXV HISTOGRAM ADDR RELATIVE FREQUENCV LARGEST VALUE 0309 01 00 kkkk 0104 04 08 kukka ark dr ae r IE IR most frequently executed address 0 OC kk k k k k k k k k k k k k k k k k k k amp k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k kk 0 0 110 Ax 114 XXXX 1c KKKKKKKKKKKK KKK KK 20 KKKKKKKK KKK KKK KKK KKK KKK KKK KKK KKK ge AAA z e z e z e z e z e z e z e KKK KKK KKK 24 kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk 28 k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k Kk Kk Kk Kk Kk k Kk Kk k K k k K k k k k k 2C KKKKXk 34 38 KKKKKKKKKKKKKKKKKKKKKKKKK KKK KKK KKK e Oo Oo SO Os Go KKKKKKKKKKK KKK KKK 0200 L10C What s happening at the most frequently executed address 010C LXI B BE30 010F JNZ 011D CONT This is where the end of LIST test takes place 0112 LX H 013F SW so it is reasona
70. 0000 D 0000 H 0000 S 0100 P 0100 LXI H 013E SW Bere A 00 B 0000 D 0000 H 013E S 0100 P 0103 M 01 SW A 00 B 0000 D 0000 H 013E S 0100 P 0105 LXI H 013F 1 ROS A 00 B 0000 D 0000 H 013F S 0100 P 0108 M 00 I COMP A 00 B 0000 D 0000 H 013F S 0100 P 010A LDA 0168 N Ao A 02 B 0000 D 0000 H 013F S 0100 P 0100 CMP M 00 I 1 A 02 B 0000 D 0000 H 013F S 0100 P 010E JNZ 011C CONT CONT I A 02 B 0000 D 0000 H 013F S 0100 P 011C LDA 013F I I A 00 B 0000 D 0000 H 013F S 0100 P 011F MOV E A 1 A 00 B 0000 D 0000 H 013F S 0100 P 0120 MVI D 00 1 A 00 B 0000 D 0000 H 013F S 0100 P 0122 LXI H 0160 LIST 1 A 00 B 0000 D 0000 H 0160 S 0100 P 0125 DAD D 1 A 00 B 0000 D 0000 H 0160 S 0100 P 0126 MOV A M LIST I A 00 B 0000 D 0000 H 0160 S 0100 P 0127 INX H I A 00 B 0000 D 0000 H 0161 S 0100 P 0128 CMP M 01 C ME A 00 B 0000 D 0000 H 0161 S 0100 P 0129 JC 0137 INCI INCI Not switched C ME A 00 B 0000 D 0000 H 0161 S 0100 P 0137 LXI H 013F I C ME A 00 B 0000 D 0000 H 013F S 0100 P 013A INR M 00 1 C A 00 B 0000 D 0000 H 013F S 0100 P 013B JMP 010A COMP COMP C A 00 B 0000 D 0000 H 013F S 0100 P 010A LDA 0168 N C A 02 B 0000 D 0000 H 013F S 0100 P 0100 CMP M 01 1 I A 02 B 0000 D 0000 H 013F S 0100 P 010E JNZ 011C CONT CONT I A 02 B 0000 D 0000 H 013F S 0100 P 011C LDA 013F I A 01 B 0000 D 0000 H 013F S 0100 P 011F MOV E A I A 01 B 0000 D 0001 H 013
71. 0000 STA 0 FOR JMP TO WBOOT ETE 21033E LXI H WBOOTE WBOOT ENTRY POINT E81 220100 SHLD 1 SET ADDRESS FIELD FOR JMP 0 r E84 320500 STA 5 FOR JMP TO BDOS E87 210632 LXI H BDOS BDOS ENTRY POINT EBA 220600 SHLD 6 ADDRESS FIELD OF JUMP AT 5 TO BDOS r E8D 018000 LXI B 80H DEFAULT DM ADDRESS IS 80H E90 CD1F3F CALL SETDMA r E93 FB ENABLE THE INTERRUPT SYSTEM FUTURE VERSIONS OF CCP WILL SELECT THE DISK GIVEN BV REGISTER C UPON ENTRY HENCE ZERO IT IN THIS VERSION OF THE BIOS FOR FUTURE COMPATIBILITY E94 0E00 MVI c 0 SELECT DISK ZERO AFTER INITIALIZATION E96 C30029 JMP CPMB GO TO CP M FOR FURTHER PROCESSING SIMPLE I 0 HANDLERS MUST BE FILLED IN BY USER IN EACH CASE THE ENTRY POINT IS PROVIDED WITH SPACE RESERVED TO INSERT YOUR OWN CODE T WWW FY CONST CONSOLE STATUS RETURN OFFH IF CHARACTER READY 00H NOT E99 DS 10H SPACE FOR STATUS SUBROUTINE EA9 3E00 MVI A 00H EAB C9 RET CONIN CONSOLE CHARACTER INTO REGISTER A EAC DS 10H SPACE FOR INPUT ROUTINE EBC E67E ANT STRIP PARITY BIT EBE C9 RET CONOUT CONSOLE CHARACTER OUTPUT FROM REGISTER C EBF 79 MOV A C GET TO ACCUMULATOR ECO DS 10H SPACE FOR OUTPUT ROUTINE EDO C9 RET
72. 00037 00038 00039 00040 0004 0004 0004 0004 0004 0004 0004 0004 0004 00050 OO OA OQ1 gt W N HH BDOS LITERALLV 0005 TRANSII NT COMMAND LOADER PROGRAM COPYRIGHT DIGITAL RES JUNE 1975 BYTE DRESS INITIAL 5CH ED FCBA 33 BYT DDRESS INITIAL 80 D BUFFA 128 BYT SFCB 33 BYTE SOURCE RA LJ R 1 0 BUFE me ROL BLOCK LY 1024 ERALLY 1AH BYTE SOURCE EOFILE yk R jix SOU LOADS TRANSIENT COMMAN ED READER PERIPHERAL E F A BYT WHICH APPEARS IN z DCOM COMMAN kkkkkkkkkkkkk k k LIBRARY PROCEDUR R DISKIO kkkkkkkkk E F A ES BYTE ENT READER DEVICE MON2 3 0 taw ror RALLY WHILE TRUE N R DD ND N NW W W N NW W W W NN NW W W W NL DD M ND DB ND NN ND ND NS ND M NN ND ND ND DD ND B S B S F 00051 00052 00053 00054 00055 00056 00057 00058 00059 00060 00061 00062 00063 0
73. 0064 00065 00066 00067 00068 00069 00070 00071 00072 00073 00074 00075 00076 00077 00078 00079 00080 00081 00082 00083 00084 00085 00086 00087 00088 00089 00090 00091 00092 00093 00094 00095 00096 00097 00098 00099 001 001 001 001 001 001 001 001 001 001 001 00 01 02 03 04 05 06 07 08 09 10 WU WN NU Y UN N YU N NW W YN NW Q NW W W ND NW W YN NW YN NN NW WWWWWDNDNWWWDNDNDW W W DB ND y LF WH PRINTC LITERALLY 33 VOM AT LITERALLY 63 HAR PROCEDURE ECLARE CHAR BYTE ON1 2 CHAR D PRINTCHAR PROCEDURE D CRLF PRINT 1 CRLF MON1 9 A D PRINT DCNT BYTE r PRINTCHAR CR PRINTCHAR LF PROCEDURE DECLARE A ADDRESS PRINT THE STRING STARTING AT ADDRESS A UNTIL THE EXT DOLLAR SIGN IS ENCOUNTERED r IZEFE PROCE DURE LL MON1 13 0 PROCEDURE ECLARE D BYTE D INITIALIZE D LL MON1 14 D SELECT OPEN D PROCEDURE FCB DC NT ECLARE FCB ADDRESS p EN D OPEN ON2 15 FCB CLOSE PROCE DE DC EN CLARE NT J O J D SEARCH D CLOSE URE FCB CB ADDRESS N2 16 FC
74. 008 D 0003 H 013E S 0100 P 0115 ORA A Hs A 04 B 0008 0 0003 H 013E S 0100 P 0116 JNZ 011C CONT CONT A 04 B 0008 D 0003 H 013E S 0100 P 011C LDA 013F I 011F Very interesting We seem to be GO going back to CONT rather than SORT Let s go back to the editor and fix it up 12 ED SORT ASM AVEORA This is a simple change append all text enter line 22 OLT verify mode find ORA and make the change 22 ORA A SET FLAGS a return to move down one line 23 JNZ CONT CONTINUE IF NOT EQUAL 23 SCONT ZSORT ZOLT Substitute SORT for CONT 23 JNZ SORT CONTINUE IF NOT EQUAL 291 e return to move down another line 24 24 return again 255 END OF SORT PROCESS REBOOT 201 E End the edit 57 SID Users Guide Section 5 13 SORT CP M MACRO ASSEM 2 0 0169 Call out MAC for another assembiv 001 USE FACTOR END OF ASSEM LY 14 LOAD SORT Just for a little variation we ll create a FIRST AODRESS 0100 SORT COM file for testing under SID LAST ADORESS 0168 BYTES READ 0047 RECORDS WRITTEN 01 15 SID SORT COM SORT SYM SID VERS 1 4 Back to SID using the COM and SYM files SYMBOLS NEXT PC END 0180 0100 55B7 P STOP Set a pass point at STOP to prevent reboot D LIST N 1 Her s the original data 0160 05 03 04 OA 08 82 OA 04 HG Unmonitored GO Oops We didn t get control back there must be on infinite loop we can get control back by 63K CP M VERS 1 3 forcing a front
75. 06 addr 005 addr 000 De SID SAMPL This section contains several xamples ar debugging sessions Th sort of a list first listed i test edit interaction with CP M type while comments on alongside in italics The dialogue which follows sequence of operations T D EBUGGING SESSIONS xamples of SID of bvte values n its first undebugged and reassemblv processes in a final debugged program ED MAC Plain ASCII based upon a The form In each case bubble bubble sort program is A series of are shown which result the operator or SID is shown in normal each of the processes ar in this file given contains the following 1 SORT PRN Lists initial SORT program 2 SORT SXM Shows the SORT svmbol table 3 SORT HEX Shows the SORT HEX file 4 SID SORT HEX SORT SYM lst debugging session 5 ED SORT ASM lst re edit of SORT Drogram 6 MAC SORT lst reassembly of SORT 7 TYPE SORT SYM Shows new symbol table 8 SID SORT HEX SORT SYM 2nd debugging session 9 ED SORT ASM 2nd re edit of SORT program 10 MAC SORT 2nd reassembly of SORT 11 SID SORT HEX SORT SYM 3rd debugging session 12 ED SORT ASM 3rd re edit of SORT 13 MAC SORT 3rd reassembly of SORT
76. 1 B 0000 D 0008 H 0138 S 0100 P 0103 M 01 SW SW 1 01 B 0000 D 0008 H 0138 S 0100 P 0105 LXI H 0139 I I 0 A 01 B 0000 D 0008 H 0139 S 0100 P 0108 MVI M 00 I COMP aa wass A 01 B 0000 D 0008 H 0139 S 0100 P 010A LDA 0162 N N I A 08 B 0000 D 0008 H 0139 S 0100 P 010D CMP M 00 I I A 08 B 0000 D 0008 H 0139 S 0100 P 010E JNZ 0119 CONT CONT No so compare I A 08 B 0000 D 0008 H 0139 S 0100 P 0119 MOV E A LIST i LIST i 1 I A 08 B 0000 D 0008 H 0139 S 0100 011 MVI D 00 I A 08 B 0000 D 0008 H 0139 S 0100 P 011C LXI H 015A LIST I A 08 B 0000 D 0008 H 015A S 0100 P 011F DAD D I A 08 B 0000 D 0008 H 0162 S 0100 P 0120 MOV A M N What s this I A 08 B 0000 D 0008 H 0162 S 0100 P 0121 INX H Why did we I A 08 B 0000 D 0008 H 0163 S 0100 P 0122 CMP M 58 fetch N C M I A 08 B 0000 D 0008 H 0163 S 0100 P 0123 JC 0131 INCI INCI C M I A 08 B 0000 D 0008 H 0163 S 0100 P 0131 LXI 4 0139 I 0134 Looks like we ve discovered a bug We have here entered at CONT GO with N in the accumulator rather than I which is expected 5 ED SORT ASM Back to the editor to make the changes Bring all the text into memory KV Enter Verifv mode for line numbers then find the place to change 1 FADDRESSING 28 OLT 28 H ADDRESSING I SO LOAD LIST I 28 KT Delete the line 28 MOV E A LOW I TO E REGISTER 28 1 29 LDA I LOAD I TO A REGISTER Insert the chan
77. 100 0010 16K Il 0000 PROGRAM 0100 31 21 06 010A CD LI 19 OC 79 ooooo G S HH O 04 78 0 0 00 oo o hj FB 76 5 0200 ti 8028 8028 00 01 0003 8000 1B CAOAO1 02 DA0801 COMBINED GETSYS AND PUTSYS PROGRAMS FROM SECTION 4 START THE PROGRAMS AT THE BASE OF THE TRANSIENT PROGRAM AREA ORG 100H MSIZE EQU 16 SIZE OF MEMORY IN KILOBYTES BIAS IS THE AMOUNT TO ADD TO ADDRESSES FOR SYSTEMS LARGER THAN REFERRED TO AS B THROUGHOUT THE TEXT BIAS EQU MSIZE 16 1024 GETSYS PROGRAM READ TRACKS 0 AND 1 TO MEMORY AT 2880H BIAS REGISTER USE A SCRATCH REGISTER B TRACK COUNT 0 76 Howie SECTOR COUNT 1 26 D E SCRATCH REGISTER PAIR Hpi LOAD ADDRESS SP SET TO STACK ADDRESS GSTART START OF THE GETSYS LXI SP 2880H BIAS SET STACK POINTER TO SCRATCH LXI H 2880H BIAS SET BASE LOAD ADDRESS MVI B 0 START WITH TRACK 00 RDTRK READ FIRST NEXT MVI et
78. 11C CONT FF PASS O111 Must be the end of one cycle Z EI A 03 B 0004 D 0002 H 013F S 0100 P 0111 LXI H 013E SW FB PASS 0205 Now back through the patch code EI A 03 B 0004 D 0002 H 013F S 0100 P 0205 JNZ 011C CONT FA PASS 0205 I A 03 B 0004 D 0000 H 013F S 0100 P 0205 JNZ 011C CONT F9 PASS 0205 1 A 03 B 0004 D 0001 H 013F S 0100 P 0205 JNZ 011C CONT F8 PASS 0205 Z EI A 03 B 0004 D 0002 H 013F S 0100 P 0205 JNZ OJJC CONT FE PASS 0111 Z EI A 03 B 0004 D 0002 H 013F S 0100 P 0111 LXI H 013E SW 0114 This is getting monontonous again so D LIST N 1 push the return key to stop the action 0160 03 04 05 OA Data looks good run in monitored mode UFFFF Z El A 03 B 0004 D 0002 H 013E S 0100 P 0114 MOV A M 0138 Push the return kev to abort early H N Value of N is still 4 that s nice 0004 4 Value of I is currently 2 This program H 1 should have stopped but didn t for some 0002 2 reason 59 SID Users Guide Section 5 18 SID SORT COM SORT SXM SID VERS 1 4 Lets trv another approach Suppose we SYMBOLS we ll set NEXT PC END ifea v trar vsioarl faPn 0180 0100 5587 LIST O EIST 1 1 H5 4 016808 2 016900 HS LIST 016005 0 016103 1 016204 P STOP Things are readv to go run completelv traced TFFFF 00
79. 12 05 2E00H b 13 2E80H b 14 06 2F00H b 15 2F80H b U 16 07 3000H b 17 3080H b kk 18 08 3100H b 00 19 3180H b CCP 00 20 09 3200H b BDOS 21 3280H b m 22 10 3300H b 23 ki 3380H b E 24 11 3400H b 25 x 3480H b 26 12 3500H b 01 01 3580H b x 02 13 3600H b u 03 3680H b y 04 14 3700H b ku 05 y 3780H b 10 ki 06 15 3800H b m kl 07 3880H b 08 16 3900H b w n 09 3980H b ji 10 17 3A00H b y 1 wi 3A80H b U 2 18 3B00H b 13 3B80H b U 14 19 3C00H b il 5 3C80H b 6 20 3D00H b 7 3D80H b BDOS 01 18 21 3E00H b BIOS i 19 b 3E80H b 20 22 3F00H b 01 21 5 3F80H b BIOS 01 22 26 not currently used 02 76 01 26 directory and data 6 HE BIOS ENTRY POINTS he entry points into the BIOS from the cold start loader and BDOS are detailed below Entry to the BIOS is throuqh a jump vector between locations 3E00H b and 3E2CH b as shown below see also Appendices pages C 2 and D 1 The jump vector is a sequence of 15 jump instructions which send program control to the individual BIOS subroutines The BIOS subroutines may be empty for certain functions i e they may contain a single RET operation during regeneration of CP M but the entries must be present in the jump vector It should be noted that there is a 16 byte area reserved in page zero see Section 9 st
80. 14 LOAD SORT Create a COM file for SORT 15 SID SORT COM SORT SYM 4th debugging session 16 SID SORT COM SORT SYM Re entry to SID for debugging 17 SID SORT COM SORT SYM Re entry to SID for debugging 18 SID SORT COM SORT SYM Re entry to SID for debugging 19 ED SORT ASM 4th re edit of SORT 20 MAC SORT 4th reassembly of SORT 21 SID SORT HEX SORT SYM 5th debugging session 22 ED SORT ASM 5th re edit of SORT 23 MAC SORT 5th reassembly of SORT 24 SID SORT HEX SORT SYM 6th debugging session 25 ED SORT ASM 6th last re edit of SORT 26 MAC SORT S 6th last reassembly Following the debugging sessions the final corrected SORT program is given in its debugged form Thr separate debugging sessions are then shown which use the HIST and TRACE the tested SORT program 27 SID HIST UTL 28 SID TRACE UTL 29 SID As a final example util Load the HIST Load the TRACE Load SID TRACE Utility Utility fol 50 ities to monitor the execution of The operations shown here include lows a simple program which calls the SID Users Guide BDOS is listed Section 5 followed bv a single debugging session The purpose of this particular example is to show the actions of SID when subroutines are traced followed bv Calls on the CP M BDOS 30 31 SID IO HI The operations in PRN EX IO SXM this case are List the IO program Enter SID for debugg
81. 140 I 01 PASS 011D CONT El A 07 B 0004 D 0001 H 0140 S 0100 P 011D LDA 0140 I 0120 Stopped on the third pass C DISPLAY Display the backtrace from CONT BACKTIRACE CONT Most recently executed instruction 011D LDA 0140 I OIOF JNZ 011D CONT OIOE CMP M 0100 DCR A COMP 010A LDA 0169 N 013C JMP O10A COMP 0138 INR M INCI 0138 LXI H 0140 I 0137 INR M 0134 LXI H 013F SW 0133 MOV M C 0132 DCX H 0131 MOV M A 0130 MOV C M 0120 JZ 0138 INCI 012 JC 0138 INCI 0129 CMP M 0128 INX H 0127 MOV A M 0126 DAD D 0123 LXI H 0161 LIST 0121 MVI D 00 0120 MOV E A CONT 0110 LDA 0140 I OIOF JNZ 011D CONT 010E CMP M 010D DCR A COMP Least recently executed instruction 010A LDA 0169 N aborted with return GO 66 u 29 A R wlan R NEXT 0600 SID SID VERS 1 4 ID Users Guide ITRACE UTL NITIAL 5921 COLLECT 5924 DISPLAY 5927 IN EFFECT SYMBOLS PC END 0100 58B7 P STOP P CONT 3 UFFFF COLLECT ADDRESS ISORT HEX SORT SXM Section 5 Start SID without loading anv programs Remove assembler disassembler package Readv the TRACE utilitv Read the TRACE package to memorv TRACE entrv point addresses BACKTRACE No assembler disassembler present Readv the SORT program Read to memorv Permanent break at STOP address pass point at CONT with pass count 3 Run monitored collect data no intermediate A 00 B 0000 D 0000
82. 803 F806 F809 UT F80C EVICE F80F F812 0078 0078 0079 C3443 C3543 C3073F C30A3F C3103F C3293F C32C3F C32F3F C3323F LJ CJ C3503F C3553F C35A3F C3603F C3693F Il RST 7 Il 007B 0079 U ZU U SU FU FU FO U FU Cr Cr IE Gy Gr CYC Gi E Gy OC p E CI U UMP VECTOR FOR INDIVIDUAL ROUTIN E O mn Z GH gt HUUUHUHOUQHOH e ti E Ss B D ti tA gt g t tn t t m m g r Q N H ti END OF CONT TICULAR OPI ARE TATLORE B E ALTERED EMAINING SUBROUTINES ENVIRONMENT AND MUST FOR ANY SYSTI ROM THE INTEL MDS T E FOLLOWING CODI EXIS gt ND USES T SUBROUTINI MONITOR ALSO ASS DRIV TS AT OF800H ES AVAILABLI ES AVAILABLE Gl ti ti El RT PORT PORT ROL PORT GGGGGLTI 0111 1110B MDS MDNITO MON80 RMON80 CI RI CO PO LO CSTS DISK PORTS AN BASE DSTA RTYPI RBYTI H td tii LOW DS MONITOR ESTART MON80 E RS 0 WARM DISK SELECT CHARACT IN EJ EJ ti O O O ti Le H CHAR FROM C 1
83. B PROCEDURE DC ECLARE FCB ADDRESS MON2 17 FCB NT EN SEARCH D SEARCH FCB N PROCEDURE EN D SEARCHN DCNT MON2 18 0 PROCEDURE D DELETE DISK ECLARE ADDRESS LL MON1 19 FCB EAD PROCEDURE FCB BYTE D DISKREAD ECLARE FCB ADDRESS ETURN MON2 20 FCB 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 001 11 12 13 14 15 16 PFPRBPWWWWWWWWWWNNNNNNNNNNE FF O JOU E WDH O JO WD HO O 1 gt PP ds HP AD JOU E W DN P gt to OY e AS Ps O O OY 1 W N N W UY WD N Q N N UY N WW Hs As BEE Q Q QO Q Y Y Y NN Ys W W W W N NN NN WW UN N W W W N 34 DISKWRITE PROCEDURE FCB BYTE DECLARE FCB ADDRESS RETURN MON2 21 FCB END DISKWRITE MAKE PROCEDURE FCB DECLARE FCB ADDRESS DCNT MO
84. B 0000 D 0200 H 0130 S 0154 P 0124 STOP Called WRMSG Z E A 00 B C000 D 0200 H 793B S 01 REBOOT abort with Z E A 00 B 0000 D 0200 H 793B S 01 7A03 It appears that the WRMSG routine is not saving the HL register pair 68 nor is HL being incremented on each loop SID Users Guide A10F 010F JMP 200 0112 A200 0200 PUSH H 0201 CALL WRCHAR 0204 POP H 0205 INX H 0206 JMP WRMSG 0209 G100 WRMSG 010 WRMSG Section 5 at the end of the WRMSG subroutine to save the HL pair call the WRCHAR subroutine restore the HL pair then increment HL We re not using the region above 200 so place patch in this region We ll put a hot patch Ok Here we are now restart the program and stop at the first call to WRMSG HL addresses the message to print which D is the default display address follow a breakpoint 012A 57 41 4 4C 41 20 WALLA message to print 0130 57 41 53 48 56 45 52 53 20 31 2E 34 24 31 00 02 WASHVERS 1 4 1 TW100 Trace without calls shows only the activity in WRMSG A 00 B 0000 D 0000 H 012A S 0152 P 010C MOV A M WALLAMSG A 57 B 0000 D 0000 H 012A S 0152 P 0100 ORA A first character A 57 B 0000 D 0000 H 012A S 0152 P 010E RZ 18 157 WN A 57 B 0000 D 0000 H 012A S 0152 P 010F JMP 0200 Now in patch A 57 B 0000 D 0000 H 012A S 0152 P 0200 PUSH H area ro mil A 57 B 0000 D 0000 H 012A S 0150
85. CALL MON1 26 2000H Interrogate Allocation 27 Address of the allo cation vector for the current disk used by STATUS com mand MON3 PROCEDURE ADDRESS gt II MON3 27 0 Interrogate Drive number 25 Disk number of currently logged disk i e the drive which will be used for the next disk operation 18 3 4 Random Access Recall that a single FCB describes up to a 16K segment of a possibly larger file Random access within the first 16K seg ment is accomplished by setting the NR field to the record number of the record to be accessed before the disk I 0 takes place Note however that if the 128th record is written then the BDOS automatically increments the extent field EX and opens the next extent if possible in this case the program must explicitly decrement the EX field and re open the previous extent If random access outside the first 16K segment is necessary then the extent number e be explicitly computed given an absol ute record number r as e up ees L 128 or equivalentiv e SHR r 7 this extent number is then placed in the EX field before the seg ment is opened The NR value n is then computed as n r mod 128 or n r AND 7FH When the programmer expects considerable cross segment accesses it may save time to create an FCB for each of the 16K segments open all segments for access and compute the relevant FCB from the absolute r
86. CP M 1 4 US ti R GU I D ABLE OF CONTENTS INTRODUCTION 1 1 1 CP M Organization 1 1 2 Operation of Transient Programs 1 1 3 Operating Svstem Facilities 3 2 BASIC 1 0 FACILITIES 4 2 1 Direct and Buffered 1 0 5 2 2 A Simple Example 5 3 DISK 1 0 FACILITIES 9 3 1 File Svstem Organization 9 3 2 File Control Block Format 10 3 3 Disk Access Primitives 12 3 4 Random Access 18 4 SYSTEM GENERATION 18 4 1 Initializing CP M from an Existing Diskette 19 5 CP M ENTRY POINT SUMMARY 20 6 ADDRESS ASSIGNMENTS 22 7 SAMPLE PROGRAMS 23 CP M INTERFACE GUIDE T INTRODUCTION This manual describes the CP M system organization including the structure of memory as well as system entry points The intention here is to provide the necessary information required to write programs which operate under CP M and which use the peripheral and disk 1 0 facilities of the system 1 4 CP M Organization CP M is logicallv divided into four parts BIOS the basic I O svstem for serial peripheral control BDOS the basic disk operating svstem primitives CCP the console command processor TPA the transient program area The BIOS and BDOS are combined into a single program with a com mon entrv point and referred to as the FDOS The CCP is a dis tinct program which uses the FDOS to provide a human oriented interface to the information which is catalog
87. CRATCH REGISTER B TRACK COUNT 0 1 SECTOR COUNT 1 2 26 DE SCRATCH REGISTER PAIR F HL LOAD ADDRESS SP SET TO STACK ADDRESS r START LXI SP 2880H SET STACK POMER TO SCRATCH AREA LXI H 2880H SET BASE LOAD ADDRESS MVI B 0 START WITH TPACK 0 RDTRK READ TRACK INITIALLY 0 MVI Gl READ STARTING WITH SECTOR 1 PDSEC READ NEXT SBCMR CALL READSEC USER SUPPLIED SUBROUTINE LXI D 128 MOVE LOAD ADDRESS TO NEXT 1 2 PAGE DAD D HL HL 128 INR C SECTOR SECTOR 1 MOV A C CHECK FOR END OF TRACK CPI 27 JC RDSEC CARRY GENERATED IF SECTOR lt 27 ARRIVE HERE AT END OF TRACK MOVE TO NEXT TRACK INR B MOV A B TEST FOR LAST TRACK CPI 2 JC RDTRK CARRY GENERATED IF TRACK lt 2 r ARRIVE HERE AT END OF LOAD HALT FOR NOW HLT H USER SUPPLIED SUBROUTINE TO READ THE DISK READSEC H ENTER WITH TRACK NUMBER IN REGISTER B H SECTOR NUMBER IN REGISTER C AND ADDRESS TO FILL IN HL PUSH B SAVE B AND C REGISTERS PUSH H SAVE HL REGISTERS perform disk read at this point branch to label START if an error occurs POP H RECOVER HL POP B RECOVER B AND C REGISTERS RET BACK TO MAIN PROGRAM END START Note that this program is assembled and listed in Appendix D for reference purposes with an assumed oriain of 100H The hexadecimal operation codes which are listed on the left may be useful if the program has to be e
88. D END The execution of this program might proceed as follows serp carriage return INPUT LINE HELLO lt cr gt OLLEH WALL WALLA WASH lt cr gt HSAW ALLAW ALLAW mom wow lt cr gt wow mom EAC system reboot E u TABLI BASIC 1 0 OP Gl H ERATIONS FUNCTION ENTRY RETURNED TYPICAL NUMBER PARAMETERS VALUE CALL Read Console None ASCII character I MON2 1 0 1 Write Console ASCII Character None CALL MON1 2 A 2 Read Reader None ASCII character I MON2 3 0 3 Write Punch ASCII Character None CALL MON1 4 B 4 Write List ASCII Character None CALL MON1 5 C 5 Get I O Status None 1 0 Status Byte IOSTAT MON2 7 0 7 Set I 0 Status I 0 Status Byte None CALL MON1 8 IOSTAT 8 Print Buffer Address of None CALL MON1 9 PRINT 9 string termi nated bv THIS TABLE I continued FUNCTION ENTRY RETURNED TYPICAL NUMBER PARAMETERS VALUE CALL Read Buffer Address of Read buffer is CALL MON1 10 10 Read Buffer filled to maxi RDBUFF mum length with console charac See Note 1 ters Interrogate None Bvte value with I MON2 11 0 Console Readv least signifi cant bit 1 true if con sole character is ready
89. D LIST 1 0 displays only LIST I Finally the command D LIST N 1 displays only the area of LIST which holds active items to sort LIST 0 LIST 1 LIST N 1 The exact manner in which symbolic expressions are used within SID is dependent upon the individual command which is issued by the operator These commands are listed in some detail in the section which follows 13 3 SID COMMANDS SID commands are entered at the console following the prompt and direct the debugging process bv allowing alteration and displav of machine functions as well as controlling execution of the program under test The commands which SID accepts are listed and described in alohabetical order in the sections which follow 3 1 The Assemble A Command The A command allows the operator to insert 8080 machine code and operands into the current memorv image using standard intel mnemonics along with svmbolic references to operands The command forms are a As b A c A where s represents any valid symbolic expression Form a begins inline assembly at the address given by s where each successive address is displayed until a null line i e a single carriage return is typed by the operator Form b is equivalent to a except the starting address for the assembly is taken from the last assembled listed or traced address see the L T and U commands The following command sequence for
90. DB K CP M VERS DB VERS 10 0 VERS MOD 10 0 DB CR LF 0 r BOOT PRINT SIGNON MESSAGE AND GO TO DOS LXI SP BUFF 80H LXI H SIGNON CALL PRMSG PRINT MESSAGE XRA A CLEAR ACCUMULATOR STA DISKT SELECT DISK 0 ON ENTRY JET GOPM GO TO CP M E WBOOT LOADER ON TRACK 0 SECTOR 1 WHICH WILL BE SKIPPED READ CP M FROM DISK ASSUMING THERE IS A 128 BYTE COLD START START r LXI SP BUFF USING DMA THUS 80 THRU FF AVAILABLI LDA DISKN CURRENTLY LOGGED DISK RETURN TO DIS STA DISKT STORE INTO DISK TEMP SINCE WE BOOT OFF MVI MAX RETRIES PUSH B WBOOTO ENTER HERE ON ERROR RETRIES LXI B CPMB SET DMA ADDRESS TO START OF DISK SYSTEM CALL SETDMA MVI 6 2 STAIRT READING SECTOR 2 CALL SETSEC MVI c 0 START RFADING TRACK 0 CALL SETTRK MVI Cro START WITH DISK 0 CALL SELDSK CHANGES DISKN TO 0 r READ SECTORS COUNT NSECTS TO ZERO POP B 10 ERROR COUNT MVI B NSECTS RDSEC READ NEXT SECTOR PUSH B SAVE SECTOR COUNT 3E79 CD603F CALL READ 3E7C C2E03E JNZ BOOTERR RETRY IF ERRORS
91. DOS uses the tbuff area to perform directory functions In a standard CP M system the following values are assumed boot 0000H bootstrap load warm start entry 0005H entry point to FDOS tfcb 005CH first default file control block tfcb 16 006CH second file name tbuff 0080H default buffer address tbase 0100H base of transient area H o 2 HH 4 96 7 8 9 LO 11 12 13 14 AB 161718 19 Figure 2 EN gt FN FT EX FIELD FCB POSITIONS ET 0 FN l 8 FT 9 11 EX 12 3 14 RC 15 DM 6 31 NR 32 li File Control Block Format 27 28 29 30 31 32 Z l RC DM NR PURPOSI CJ Entrv tvpe currentlv not used but assumed zero File name padded with ASCII blanks File tvpe padded with ASCII blanks File extent normallv set to zero Not used but assumed zero Record count is current extent Size 0 to 128 records Disk allocation map filled in and used by CP M Next record number to read or write each of formed applied tents of 3 3 Disk Access Primitives 12 Given that a program has properlv initialized the FCB s for several operations which can be per its files as shown in Table II to the currently selected disk ation in Table II The following PL M program segment the file to the ther DECLARE 7 ti N CLOSE E MAKE CJ READBF WRITEBF
92. DOUBLE READCS READCS IF SA 0 THEN SA LA READ THE RECORD TYPE NOT CURRENTLY USED RT READCS PROCESS EACH BYTE DO WHILE RL RL 1 lt gt 255 CALL SETMEM READCS LA LA 1 END IF LA gt FA THEN FA LA 1 NOW READ CHECKSUM AND COMPARE IF CS READBYTE lt gt 0 THEN DO CALL PRINT CHECK SUM ERRORS CALL DIAGNOSE END END FIN EMPTY THE BUFFERS TA LA DO WHILE L lt TA CALL SETMEM 0 LA LA 1 END PRINT FINAL STATISTICS CALL PRINT FIRST ADDRESS CALL PRINTADDR SA CALL PRINT LAST ADDRESS CALL PRINTADDR FA CALL PRINT BYTES READ CALL PRINTADDR NB CALL PRINT RECORDS WRITTEN CALL PRINTHEX P CALL CRLF ND RELOC ARRIVE HERE FROM THE SYSTEM MONITOR READY TO READ THE HEX TAPE SET UP STACKPOINTER IN THE LOCAL AREA DECLARE STACK 16 ADDRESS SP ADDRESS SP STACKPOINTER STACKPOINTER STACK LENGTH STACK SBP LENGTH SBUFF SET UP THE SOURCE FILE CALL MOVE FCBA SFCB 33 CALL MOVE HEX 0 SFCB 9 4 CALL SEARCH SFCB IF RFLAG DCNT 255 THE CALL PRINT SOURCE IS READER ELSE DO CALL PRINT SOURCE IS DISKS 00337 00338 00339 00340 0034 0034 0034 0034 0034 0034 0034 0034 00349 00350 00351 00352 00353 00354 00355 00356 00357 00358 00359 00360 JOU E WDN P RF R DD ND N N W W W N W W W RE CALL 38 CALL
93. DW PO MO Q QO Forms a through d display memory in byte format while forms e through h display memory in word format The byte format display appears as aaaa bb bb bb bb cc ce 16 SID Users Guide Section 3 where aaaa is the base address of the displav line and the sequence of up to 16 bb oairs represents the hexadecimal representation of the data stored starting at address aaaa The sequence of c s represent the same data area displayed in ASCII format where possible A period is displayed as a place holder when the data item does not correspond to a graphic character Byte mode displays are normalized to address boundaries which are a multiple of 16 That is if the starting address aaaa is not a multiple of 16 then the display line is printed to the next boundary address which is a multiple of 16 Each display line which follows contains 16 data elements until the last display line is encountered Command forms e through h display in word mode which is similar to the byte mode display described above except that the data elements are printed in a double byte format aaaa WWWW Www CC CC where aaaa is the starting address for the display line and the sequence of up to 8 wwww s represent the data items which are stored in memory beginning at aaaa Similar to the byte mode display the sequence of c s represent the decoded ASCII charact
94. E E pu DB 79 DB 7B DBFF E602 C20430 211E30 0680 118000 TE 12 23 13 05 C21330 C38000 MDS LOADER MOVE PROGRAM PLACE ORG BOOTB BOOTL MBIAS BASE RTYPI RBYTI LJ GI CLEAR DISK ti E BSW 2H COLDSTART H BOOTV B BOOTL D BOOTB MOV MOVE BOOTB BOOT LOADER PLACE S 80H MBIAS EQU S COLD START BOOT AT BOOTB WE ARE LOADED HERE ON COLD START 80H STARR OF COLD BOOT PROGRAM 80H LENGTH OF BOOT 900H BIAS TO ADD DURING LOAD 078H BASE USED BY DISK BASE 1 RESULT BASE 3 RESULI OFFH BOOT SWITCH SWITCH ON2 VIRTUAL BASE LENGTH OF BOOT DESTINATION OF BOO A M TRANSFERRED ONE BYTE TO BOOT SYSTEM E HERE AT SYSTEM GENERATICN COLD START BOOT BEGINS AT 0000 FEFE 0000 ERRORS Il 0010 2000 ADDRESS BIAS BI 2900 LOAD 3206 FOR CALLS 4000 3E00 ENTRY POINT 3E03 ENTRY POINT 0080 3000H 1700 0002 002 0019 TRACK 0015 ON TRACK 1 Il l F800 FFOF 0078 0079 007B 007F 0078 0079 007A 0003 0004 0100 0080 310001 0083 D37F 0085 0087 0602 21B700 008A 7D EYOND 8K
95. ER IS INCREMENTED SAVE THE CURRENT FILE ADDRESS PUSH H LXI H BUFF DAD D MOV A M BYTE IS IN THE ACCUMULATOR RESTORE FILE ADDRESS AND INCREMENT POP H INX H RET READ AND PRINT SUCC ESSIV BUFF ERS SETUP PSI ET UP INPUT FILI 26 a 01 7 01 9 01 01 01D2 01D3 01D4 01D6 01D9 01DC 01DF 011 Da 01 01 01 01 i Hi EJ HH 1 BE W 3E80 320DO1 21FFFF CDA801 47 7D E60F C2EB01 CD6A01 CD5101 OF DAF701 7 CD8701 CD8701 01EB E20 01ED 01F0 01F1 01F4 01F7 O1FA 01FD 01FE 005C 005D 0065 0068 006B 007C 007D 01FF 0202 0204 0207 0209 D5D01 QIAwW D8701 C3CFO1 CD6A01 2A0FO1 F9 C9 115C00 OEOF CD0500 FEFF C21102 GLOOP NONUM EPSA FINIS 27 MVI A 80H STA IBP SET BUFFER POINTER TO 80H LXI H OFFFFH SET TO 1 TO START CALL GNB MOV B A PRINT HEX VALUES CHECK FOR LINE FOLD MOV A L ANI OFH CHECK LOW 4 BITS JNZ NONUM PRINT LINE NUMBER CALL CRLF CHECK FOR BREAK KEY CALL BREAK RRC JC FINIS DON T PRINT ANY MORE MOV A H CALL PHEX mov A L CALL PHEX
96. ER can be filled out and the IOBYTE function can be implemented 8 A SAMPLE COLD START LOADER The program must be loaded shown in Appendix E can serve as a basis for your cold start loader The disk read function must be supplied by the user and the proaram somehow starting at location 0000 Note that space is reserved for your patch so that the total amount of storage required for the cold start loader is 128 bytes Eventually you will probably want to get this loader onto the first disk sector track 0 sector 1 and cause your controller to load it into memory automatically upon system start up Alternatively you may wish to place the cold start loader into ROM and place it above the CP M system In this case it will be necessary to originate the proqram at a higher address and key in a jump instruction at system start up which branches to the loader Subsequent warm starts will not require this kev in operation since the entry point WBOOT gets control thus bringing the system in from disk automatically Note also that the skeletal cold start loader has minimal error recovery which may be enhanced on later versions 9 RESERVED LOCATIONS IN PAGE ZERO Main memory page zero between locations 00H and OFFH contains several segments of code and data which are used during CP M processing The code and 17 data areas ar Locati
97. ERRSUB G ERRSUB 30 G100 10 10 3 6 The Hexadecimal Value H Command The H command is used to perform hexadecimal computations including number base conversion operations The forms of the H command are a Ha b b Ha c H Form a computes the hexadecimal sum and difference using the two operands resulting in the displav ssss dddd where ssss is the sum a b and dddd is the difference a b 21 SID Users Guide Section 3 ignoring overflow and underflow conditions Form b is used to perform number and character conversion where a is a svmbolic expression The displav format in this case is hhhh ddddd c s where hhhh is the four digit hexadecimal value of a ddddd is the up to six digit decimal value of a c is the ASCII value of a when a is graphic and s is the first svmbol in the table which matches the value a when such a svmbol exists Assume for example that the svmbol GAMMA is located at address 0100 as in previous examples The H commands shown to the left below result in the displays shown to the right below COMMAND RESULTING DISPLAY HO 1 0001 FFFF H41 0041 65 A H100 0100 256 GAMMA H GAMMA 0100 256 GAMMA H GAMMA 0001 1 H GAMMA 0201 513 HF F GAMMA 0100 256 GAMMA H A 0041 65 A H A GAMMA 0042 66 B Command form c prints the complete list of symbols along with their corresp
98. ETFUNC SE FUNCTION FOR NEXT 1 0 COMMAND IN REG C LXI H IOF IO FUNCTION ADDRESS MOV A M GET IT TO ACCUMULATOR FOR MASKING ANI 11111000B REMOVE PREVIOUS COMMAND ORA SET TO NEW COMMAND MOV M A REPLACED IN IOPB RE WAITIO MVI C RETRY MAX RETRIES BEFORE PERM ERROR RWAIT START THE I 0 FUNCTION AND WAIT FOR COMPLETION IN RTYPE IN RBYTE CLEARS THE CONTROLLER r MV I A IOPB AND OFFH LOW ADDRESS FOR IOPB OUT LOW TO THE CONTROLLER MVI A IOPB SHR 8 HIGH ADDRESS FOR IOPB OUT HIGH TO THE CONTROLLER STARTS WAITO IN DSTAT WAIT FOR COMPLETION ANI IORDY READY JZ WAITO CHECK IO COMPLETION OK IN RTYPE MUST BE 1 0 ODMPLETE 00 00 UNLINKED 1 0 COMPLETE 01 LINKED I O COMPLETE NOT 10 DISK STATUS CHANGED 11 NOT USED CPI 10B READV STATUS CHANGE JZ WREADY MUST BE 00 IN THE ACCUMULATOR ORA A JNZ WERROR SOME OTHER CONDITION RETRY CHECK 1 0 ERROR BITS IN RBYTE RAL JC WREADY UNIT NOT READY RAR ANI 11111110B ANY OTHER ERRORS DELETED DATA CK JNZ WERROR READ OR WRITE IS OK ACCUMULATOR CONTAINS ZERO RET
99. F S 0100 P 0120 MVI D 00 1 A 01 B 0000 D 0001 H 013F S 0100 P 0122 LXI H 0160 LIST I A 01 B 0000 D 0001 H 0160 S 0100 P 0125 DAD D I A 01 B 0000 D 0001 H 0161 S 0100 P 0126 MOV A M I A 01 B 0000 D 0001 M 0161 S 0100 P 0127 INX H I A 01 B 0000 D 0001 H 0162 S 0100 P 0128 CMP M 04 C M A 01 B 0000 D 0001 H 0162 S 0100 P 0129 JC 0137 INCI INCI Not switched again C M A 01 B 0000 D 0001 H 0162 S 0100 P 0137 LXI H 013F I C M A 01 B 0000 D 0001 H 013F S 0100 P 013A INR M sk C A 01 B 0000 D 0001 H 013F S 0100 P 0138 JMP 010A COMP COMP C A 01 B 0000 D 0001 H 013F S 0100 P 010A LDA 0168 N C A 02 B 0000 D 0001 H 013F S 0100 P 0100 JMP M 02 I Z EI A 02 B 0000 D 0001 H 013F S 0100 P 010E JNZ 011C CONT Z EI A 02 B 0000 D 0001 H 013F S 0100 P 0111 LXI H 013E SW Z El A 02 B 0000 D 0001 H 013E S 0100 P 0114 MOV A M SW Z EI A 01 B 0000 D 0001 H 013E S 0100 P 0115 ORA A A 01 B 0000 D 0001 H 013E S 0100 P 0116 JNZ 0100 SORT SORT No items were switched SW not set to 0 Sanah A 01 B 0000 D 0001 H 013E S 0100 P 0100 LXI H 313E SW 01T03 60 SID Users Guide Section 5 19 ED SORT ASM AVESORT ZOLT Back to the editor change the 8 SORT LXI H SW entry code to initialize SW 81 ks TEUEZ 95 MV M 1 SW 1 9 2S1 ZO ZOLT Ors MVI M 0 SW 0 9 ER 8 SORT LX H SW 8 XI 8 MV A 1 93 STA SW SW 1 FIRST TIME THRU 10 10 E 20 MAC SORT
100. H 0000 S 0100 P 0100 21 013F pass information 01 PASS 011D EI A 07 B 0004 D 000 0120 HC DISPLAY BACKTRACE 011D 0137 0129 010F 0134 0128 010E GO 30 TYPE 0100 0000 0005 0002 0100 0103 gt OC 00 OE 10F T2 Oo Sos 15 18 18 1E 21 124 127 5000 010F 010E 0134 0133 0128 0127 010E 0100 0133 0132 0127 0126 0100 010A IO PRN 315401 C31501 0E02 5F C30500 TE B7 C8 CDO601 C30C01 212A0 CDOCO1 212A01 CDOCO1 213001 CDOC31 C30000 57414C4C41 57415348 most rec 32 013 26 012 OA O11 131 013 123 012 108 010 0 0 0 0 0 0 0 SIMPLE REBOOT BOOS CONOUT U WRCHAR i WRMSG i START STOP U WALLAMSG WASHMSG STACK END 1 H 0140 S 0100 P 0110 3A 0140 Stopped on third pass through CONT ent addresses 010 013C 013B 0138 1 0130 012D 012A 3 0121 0120 011D C 0138 0138 0137 0 0120 012A 0129 1 0120 0110 010F 5 0103 0100 Least recent address BDOS OUTPUT PROGRAM ORG 100H BEGINNING OF TPA EQU OOOOH REBOOT ENTRY POINT EQU 0005H BOOS ENTRY POINT EQU 2 CONSOLE OUTPUT LXI SP STACK LOCAL STACK JMP START START EXECUTION WRITE CHARACTER FROM REGISTER A MVI C CONOUT CONSOLE OUTPUT MOV E A CHARACTE E JMP BDOS RET THROUGH BOOS WRITE MESSAGE STARTING AT HL TIL 00 MOV A M NEXT CHARACTER ORA A 002 RZ RETURN IF SO CALL WRCHAR OTHERWISE WRITE I
101. ID UTL JMP BDOS TPA JMP UTL Figure 4 Memorv Configuration Fol Section 1 lowing Utilitv Load Command form e is similar to c except that the symbol table given by u v is loaded with the program x y Symbol information is loaded from the base toward the program under test as shown in BDOS SID UTL If Present SYMBOLS JMP BDOS Free Space Test Program JMP SYMBOLS of SID downward Figure 5 Figure 5 Memory Configuration Foll owing Symbol Load The symbol table is in the format produced by the CP M Macro Assembler In particular the symbol sequence of address and symbol name pairs table must bea where the address consists of four hexadecimal digits separated by a space from the symbol which takes on this address value The symbol consists of up to 16 graphic ASCII characters terminated by one or more tabs ctl I or a carriage return line feed sequence Note that the operator can optionally create or alter a symbol table using the CP M editor as SID Users Guide Section 1 long as this format is followed see the manual ED the CP M Context Editor for editing details The response following program load will be as shown in command form b above giving essential program locations When SID begins symbol load the message SYMBOLS is printed indicating that any subsequent error is due
102. IN REGISTER B SECTOR TO WRITE IS IN REGISTER C BRANCH TO LABEL PSTART IF ERROR OCCURS WRITE 128 BYTES OF DATA FROM ADDRESS GIVEN BY H L PUSH B PUSH H PLACE WRITE OPERATION HERE POP H POP B RET END OF GETSYS PUTSYS PROGRAM END ti w 5 ESIDE YS OF LOADER ADD BYT 0000 0010 0000 RESSE 2900 3E00 ES 3E00 1700 SYSTEM TO LOAD 5 0021 CJ 0000 010200 ECTOR 2 0003 162E 0005 21002C 0008 C36B00 000B E N TRACK HIS IS A SAMPLE COLD STAR T LOAD 00 ER WHICH W mi ti N MODIFI D OR 01 TH SSUME THAT T CONTROLLER PON SYS TEM S PAGE OF R FA ie RSION XOU A EM BIAS V ti INTO ME VALUE ACCOUNTS FO RSIONS WHICH UP THIS MEMORY E FIRST SECTO HAS LOADE PROGRAM CAN BE R ON THE DISK HIS SECTOR IN KEVED IN OR ETTE WE DT B RUNNING RY AT LOA DP R EXOND T THE 1 EMORY COLD NOMI HE ADDRESS SPACE OF START LOADER BRINGS NALLY 2900H BIAS WH CI CP M HANDLE M H E LA RG SYSTEMS LARGER THM 16K AND ER MEMORY SPACE IN A 16 U A V S T C S EM THE VALUE OF
103. N2 22 FCB END MAKE RENAME PR OCEDURE FCB DECLARE FCB ADDRESS ON1 23 FCB ENAME kkkkkkk kkkkkkkkkkkk END OF LIBRARY PROCE MOVE PR6CE m E S D N DECLARE u D ADDRESS N BYTE A BASE O N BYTE B BASED D BYTE ILE N N 1 lt gt 255 A S S 1 D D 1 D B M END GETCHAR P ROCEDURE BYTE GET NEXT CHARACTER DECLARE I BXLEr IF RE IF SB RE THEN RETURN READRDR P SB lt LAST SBUFF THEN OTH DO IF QUM HWS P 1 TURN SBUFF SBP ERWISE READ ANOTHER BUFFER FULL SBP 0 TO LAST SBUFF BY 128 I DISKREAD SFCB 0 THEN CALL MOVE 80H SBUFF SBP 80H DO IF SBUFF SBP EOFILE SBP LAST SBUFF END ELSE 0 RETURN SBUFF R DECLARE STACKPOINTE PRINTNIB R LITERALLY STACKPTR PROCEDURE N DECLARE T END PRINTHEX CAL PR N gt 9 THEN CALL PRINTCHAR N A 10 PRINTCHAR N 0 PROCEDURE B DECLARE B BYTE END PR CALL PRINT INTHEX IB SHR B 4 DURES
104. N80 D5 223900 SHLD 7 8 1 LEAVE SE ti ti w PREVIOUSLY SELECTED DISK WAS B SEND PARAMETER TO CPM 3ED8 3AD33F LDA DISKT 3EDB 4F MOV A LOOKS LIKE A SINGLE PARAMETER TO CPM 3EDC FB 3EDD C30029 JMP CPMB ERROR CONDITION OCCURRED PRINT MESSAGE AND RETRY BOOTERR 3EEO Cl POP B RECALL COUNTS 1 OD DCR 3EE2 CAE93E JZ BOOTERO TRY AGAIN 3EES C5 PUSH B 3EE6 C3603E JMP WBOOTO r OTHERWISE TOO MANY RETRIES 9 21F23E LXI H BOOTMSG 3EEC CD7F3E CALL ERROR 3EEF C3543E JMP WBOOT FOR ANOTHER TRY BOOTMSG 2 2A43414E4E DB CANNOT BOOT SYSTEM 0 CONST CONSOLE STATUS TO REG A EXACTLY THE SAME AS MDS CALL 3F07 C312F8 JMP CSTS r CONIN CONSOLE CHARACTER TO REG A 3FOA CDO3F8 CALL CI 3FOD E67F ANI REMOVE BIT 3FOF C9 RET CONOUR CONSOLE CHARACTER FROM TO CONSOLE OUT SAME AS MDS CALL BUT WAIT FOR SLOW CONSOLES ON LINE FEED 3F10 79 MOV A C GET CHARACTER TO ACCUM 3F11 FEOA CPI LF END OF LINE 3F13 F5 PUSH FSW
105. NUMBER CF TRACKS TO READ LXI H IOPBO START r READ FIRST N MOV EXT TRACK INTO BDOSB Ay Ti 008B D379 OUT LOW 008D 7C MOV A H 008E D37A OUT HIGH 0090 D878 WAITO IN DSTAT 0092 E604 ANI 4 0094 CA9000 JZ WAITO r CHECK DISK STATUS 0097 DB79 IN RTYPE 0099 E603 ANI 11B 0098 FEO2 CPI 2 IF TESTING CNC RMON80 GO TO MONITOR IF 11 OR 10 ENDIF IF NOT TESTING 009D D28000 JNC RSTART RETRY THE LOAD ENDIF r 00A0 DB7B IN RBYTE I 0 COMPLETE CHECK STATUS IF NOT READY THEN GOTO MON80 00A2 17 RAL 00A3 ECOFFF CE RMON80 NOT READY BIT SET 00A6 1F RAR RESTORE 00A7 E61E ANI 11110B OVERRUN ADDR ERR SEEK CRC XXXX IF TESTING CNZ RMON80 GO TO MDNIICR ENDIF IF NOT TESTING 00A9 C28000 JNZ RSTART RETRY THE LOAD ENDIF OQAC 110700 LXI D IOPBL LENGTH OF IOPB OOAF 19 DAD D ADDRESSING NEXT IOPS 00B0 05 DCR B COUNT DOWN TPACKS 00B1 C28A00 JNZ START JMP TO BOOT TO PRINT INITIAL MESSAGE AND SET UP JMPS 00B4 C3003E JMP BOOT r PARAMETER BLOCKS 00B7 80 IOPBO DB 80H 7 IOCW NO UPDATE 00B8 04 DB READF READ FUNCTION 00B9 19 DB BDOSO SECTORS TO READ ON TRACK 0 OOBA 00 DB 0 TRACK O OOBB 02 DB 2 START WITH SECTOR 2 ON TRACK 0 00BC 0029 DW BDOSB
106. Note 1 Read buffer is a sequence of memory locations of the form m k al c2 EB ck current buffer length l Maximum buffer length Note2 The 1 0 status byte is defined as three fields A B C and D 2b 2b 2b 2b A B C D MSB LSB requiring two bits each listed from most significant to least significant bit which define the current device assignment as follows O TTY 0 TTY O TTY D 1 CRT C 1 FAST READER B 1 FAST PUNCH A 1 CRT Console 2 BATCH Reader 2 Punch 2 List 2 3 3 3 Bu DISK 1 0 FACILITIES The BDOS section of CP M provides access to files stored on diskettes The discussion which follows gives the overall file organization along with file access mechanisms 3 1 File organization CP M implements a named file structure on each diskette pro viding a logical organization which allows any particular file to contain any number of records from completely empty to the full capacity of a diskette Each diskette is logically distinct with a complete operating system disk directory and file data area The disk file names are in two parts the lt filename gt which can be from one to eight alphanumeric characters and the lt filetype gt which consists of zero through three alphanumeric characters The lt filetype gt names the generic category of a par ticular file while the lt filename gt distinguishes a particular file within the category The lt filetype gt s listed be
107. OD DW BUFF IO ADDRESS 3FDB END 0010 KILOBXTI 3E00 PATCH E n 0040 FROM 0040 TRACK 0041 SECTOR 0042 0046 3E00 0000 LARGER THAN 16K 2900 OF CCP 3206 PORTION OF CP M 1500 SYSTEM IN BYTES 002A WARM START w ti C32D31 CJ C3303 C3993 C3AC3 C38F3 C3D13 C3D33 C3D53 C3DA3 EIB C3E03 C3F53E C30A3F C31F3F C3353F C3483F FJ EJ tg td td td td DOr O i COUO a te GOCO O OO SKELETAL CBIOS FOR FIRST LEVEL OF CP M ALTERATION NOTE MSIZE DETERMINES WHERE THIS CBIOS IS LOCATED MSIZE EQU 16 CP M VERSION MEMORY SIZE IN PATCH EQU MSIZE 1024 2 256 START OF THE CBIOS iWE WILL USE THE AREA RESERVED STARTING AT LOCATION 740H IN PAGE 0 FOR HOLDING THE VALUES OF 7 LAST SELECTED TRACK SECTOR LAST SELECTED SECTOR H DMAAD LAST SELECTED DMA ADDRESS ji DISKNO LAST SELECTED DISK NUMBER NOTE THAT ALL ARE BYTE VALUES EXCEPT FOR DMAAD SCRAT EQU 40H BASE OF SCRATCH AREA TRACK EQU SCRAT CURRENTLY SELECTED SECTOR EQU SCRAT 1 CURRERILV SELECTED DMAAD EQU SCRAT 2 CURRENT DMA ADDRE
108. OS end of file 0100 0005 000F 0014 0002 0001 000B 005C 0080 0100 0103 0104 0107 010A 010D 010F 0111 0151 0151 0154 0156 0159 015C 015D 0160 0162 0163 0166 0169 016A 016C 016F 0171 0174 0175 0177 0179 210000 39 220F01 315101 C3C401 E5D5C5 0E0B CD0500 C1DIL1 c9 3 CDSDOI 3E0A c E D5DO1 E60F FEOA D28101 25 FILE DUMP PROGRAM READS AN INPUT FILE AND PRINTS IN HEX r COPYRIGHT C DIGITAL RESEARCH 1975 1976 ORG 100H BDOS EQU 0005H DOS ENTRY POINT OPENE EQU 15 FILE OPEN READE EQU 20 READ FUNCTION EQU 2 TYPE FUNCTION CONS EQU 1 READ CONSOLE BRKF EQU 11 BREAK KEY FUNCTION TRUE IF CHAR READY r FCB EQU 5CH FILE CONTROL BLOCK ADDRESS BUFF EQU 80H INPUT DISK BUFFER ADDRESS r SET UP STACK LXI H 0 DAD SP SHLD OLDSP LXI SP STKTOP JMP MAIN VARIABLES IBP DS 2 INPUT BUFFER POINTER e STACK AREA OLDSP DS 2 STACK DS 64 STKTOP EOU r SUBROUTINES r BREAK CHECK BREAK KEY ACTUALLY ANY KEY WILL DO PUSH H PUSH D PUSH B ENVIRONMENT SAVED MVI C BRKF CALL BDOS POP B POP D POP H ENVIRONMENT RESTORED RET PCHAR PRINT A CHARAC
109. PACI PI X YY EN FILE PR ESENT ENED S Fi NEXT RECOR FCB1 32 READ FILE CALL READBF DT F O Z FCB2 32 X Y UNTIL FCB1 h HILE F DO W CALL WRITI j BF ERO FOR BOTH FILES 0 R RROR 80H READ O 0 FCB2 WRIT Gl FROM IF RET CALL RI CALL P D ET lt gt 1 T hi R z IE RI ELSE DO CALL C IF RET END RE HE N GET ANOTHER REC ADBF INT H a LOS 255 THI EN CALL PRINT FCB1 ELSE DISK WRI E ROR RJ 80H ORD 1 TRAN FCB2 EN CALL PRINT Cn SE R ERROR LOSE ERROR This program consists of a number of utility procedures for opening closing are foll both cases and lt filetype gt of first initializes copy of NI a new directory en creation is success second operation is can proceed The N record of each file The first call to wi the record at 80H reads another 128 b tinues until either condition arises RI creating procedures for reading and wri lowed bv two FCB s for the first 16 bvtes the input and output fil the disk svs EW FIL before starting and emp
110. PUTSYS PROGRAM F A SKELETAL COLD START LOADER CP M Svstem Alteration Guide 1 INTRODUC development svstem TION Ler of subroutines which define the hardware operating enviornment the user can produce a diskette which operates with a non s drive controller and or peripheral d IBM compatible format In order to achi devic The standard CP M system assumes operation on an Intel MDS microcomputer but is designed so that the user can al a specific set In this way distinct modules BIOS BDOS V independence basic I 0 system which is environment depe basic disk operating system which is not dependent unon the hardware configuratio CCP of these mdules That is modules and the user only the BIOS is dependen the user can patch the distribu nden n the console command processor which uses the B t upon the particular tion version of CP M between the rema s own hardwar new BIOS which provides a customized interfac to provid he new BIOS requ ires som system a step by step procedure for pa relativ testing the curre as a model for the given in Appendix to the BIOS brings the operati CP M the user mus an altered version from GETSYS by cha Sample skeletal GI listed in Appendix E w the user must also supply a cold start loader listed in Appendices A and B CP M is given i
111. R as described below Thus the output lines appear as 0000 bb bb bb bb bb bbibb bb bb bb bb bb bb bb bb bb 0010 bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb bb until the end of file The label FINIS gets control upon end of file CRLF is called first to return the carriage from the last line output The CCP stack pointer is then reclaimed from OLDSP followed by a RET to return to the console command processor Note that a JMP 0000H could be used following the FINIS label which would cause the CP M system to be brought in again from the diskette this operation is necessary only if the CCP has been over layed by data areas The file control block format is then listed FCBDN FCBLN which overlays the fcb at location 05CH which is setup by the CCP when the DUMP program is initiated That is if the user types DUMP X Y then the CCP sets up a properly formed fcb at location 05CH for the DUMP or any other program when it goes into execution Thus the SETUP sub routine simply addresses this default fcb and calls the disk system to open it The DISKR disk read routine is called whenever GNB needs another buffer full of data The default buffer at location 80H is used along with a pointer IBP which counts bytes a they are processed Normally an end of file condition is taken as either an ASCII 1AH control z or an end of file detection by the DOS The file dump program however stops only on a D
112. SS DISKNO EQU DMAAD 4 CURRENT DISK NUMBER ORG PATCH ORGIN OF THIS PROGRAM CBASE EQU MSIZE 16 1024 BIAS FOR SYSTEMS CPMB EQU CBASE 2900H BASE OF CP M BASE BDOS EQU CBASE 3206H BASE OF RESIDENT CPML EQU CPMB LENGTH OF THE CPM NSECTS EQU CPML 128 NUMBER OF SECTORS TO LOAD ON se JUMP VECTOR FOR INDIVIDUAL SUBROUTINES JMP BOOT COLD STAR WBOOTE JMP WBOOT WARM STAR JMP CONST CONSOLE STATUS JMP CONIN CONSOLE CHARACTER IN JMP CONOUT CONSOLE CHARACTER OUT JMP LIST LIST CHARACTER OUT JMP PUNCH PUNCH CHARACTER OUT JMP READER READER CHARACTER OUT JMP HOME MOVE HEAD TO HOME POSITION JMP SELDSK SELECT DISK JMP SETTRK SET TRACK NUMBER JMP SETSEC SET SECTOR NUMBER JMP SETDMA SET DMA ADDRESS JMP READ READ DISK JMP WRITE WRITE DISK INDIVIDUAL SUBROUTINES TO PERFORM EACH FUNCTION INITIALIZATION 3E2D C3793E LOADED 3E30 STACK 3E33 0E00 3E35 CDEO3E 3E38 CD1A31 318000 CJ 062A E3D 0E00 1602 W W 3E41 210029 POINT E44 E45 E46 E47 E48 E4B E4C E4D 3E50 CD353F E53 FEOO 3E55 C2303 w 1 18000 Ww WWW Ww td td tA a Q orre to ESE CURRENT TRK 05 CA7931 w ta u r
113. STACK FOR LATER RECALL CALL SETDMA SET DMA ADDRESS FROM B C DRIVE SET TO 0 TRACK SET SECTOR SET DMA ADDRESS SET CALL READ CPI 00H ANY ERRORS JNZ WBOOT RETRV THE ENTIRE BOOT IF AN ERROR OCCURS NO ERROR MOVE TO NEXT SECTOR POP H RECALL DMA ADDRESS LXI D 128 DMA DMA 128 DAD D NEW DMA ADDRESS IS IN H L POP D RECALL SECTOR ADDRESS POP B RECALL NUMBER OF SECTORS REMAINING AND DCR B SECTORS SECTORS 1 JZ GOCPM TPANSFER TO CP M IF ALL HAVE BEEN LOADED MORE SECTORS REMAIN TO LOAD CHECK FOR TRACK CHANGE INR D MOV A D SECTOR 27 IF SO CHANGE TRACKS CPI 27 JC LOAD1 CARRY GENERATED IF SECTOR lt 27 END OF CURRENT TRACK GO TO NEXT TRACK MVI D 1 BEGIN WITH FIRST SECTOR OF NEXT TRACK INR e TRACK TRACK 1 SAVE REGISTER STATE AND CHANGE TRACKS Q Q Q Q WW WW Ww WWW w WW w w E6D C5 PUSH B E6E DS PUSH D EGF E5 PUSH H E70 CDF53E CALL SETTRK TRACK ADDRESS SET FROM REGISTER C E73 El POP H E74 DI POP D E75 POP B E76 C3443E JMP LOAD1 FOR ANOTHER SECTOR END OF LOAD OPERATION SET PARAMETERS AND GO GOCPM E79 3EC3 MVI A OC3H C3 IS A JMP INSTRUCTION E7B 32
114. Status I 0 Status Byte Alter 1 0 Status I O Status Byte Print Console Buffer Buffer Address Read Console Buffer Buffer Address Check Console Status True if character Ready HO O O 1 IE Q N O Lift Disk Head Reset Disk System Select Disk Disk number Open File FCB Address Completion Code Close File Y Search First Search Next X 19 Delete File M 20 Read Record i 21 Write Record w A 22 Create File x 23 Rename File 24 Interrogate Login Login vector 25 Interrogate Disk Selected Disk Number 30004 W N 26 Set DMA Address DMA Address 27 Interrogate Allocation Address of Allo cation vector 22 6 ADDRESS ASSIGNMENTS The standard distribution version of CP M is organized for an Intel MDS microcomputer developmental svstem with 16K of main memorv and two diskette drives Larger systems are available in 16K increments providing management of 32K 48K and 64K systems the largest MDS system is 62K since the ROM monitor provided with the MDS resides in the top 2K of the memory space For each additional 16K increment add 4000H to the values of cbase and fbase The address assignments are boot 0000 warm start operation tfcb 005 default file control block location tbuff 0080H default buffer location tbase 0100H base of transient program area cbase 2900H base of console command processor fbase 3200H base of disk operating system en
115. T JMP WRMSG FOR ANOTHER CHARACTER BEGINNING OF MAIN PROGRAM LXI H WALLAMSG PART 1 OF MESSAGE CALL WRMSG WRITE IT LXI H WALLAMSG PART 2 OF MESSAGE CALL WRMSG WRITE IT LXI H WASHMSG PART 3 OF MESSAGE CALL WRMSG JMP REBOOT STOP THE PROGRAM DATA AREAS DB WALLA DB WASH DS 32 16 LEVEL STACK 67 SI SI D Users Guide 31 SID IO HEX IO SYM D VERS 1 4 SYMBOLS NEXT PC END Section 5 MOV ORA RZ CALL MVI MOV JMP JMP JMP XTHL SHLD XTHL JMP JMP MOV ORA RZ LXI CALL MOV ORA RZ CALL MOV MOV MOV ORA RZ LXI CALL Load the test program ustng the HEX and SYM files A M WALLAMSG A 0106 WRCHAR First call to WRCHAR C 02 with 57 W E A 0005 BOOS Call to BDOS 55 Function 2 5CA4 Character W 6D52 SID code to intercept call 6E06W first character 010C WRMSG now we re back to our A M program with A another CALL H 012A WALLAMSG 010C WRMSG A M WALLAMSG A 0106 WRCHAR G B2 E A abort with return A M A H 0130 WASHMSG 010C WRMSGW printed another W and stopped 54 P 0127 JMP 0000 return REBOOT so we can restart 54 P 0000 JMP 7A03 0134 0100 55A9 G WRMSG GO from 0100 to the first call on WRMSG 010C WRMSG Now trace from the WRMSG subroutine 100 A 00 B 0000 D 0000
116. T SYM Here we go again I sure hope this is the SID VERS 1 4 last time but it probably isn t SYMBOLS NEXT PC END 0169 0100 55B7 P SORT FF Set a pass point at sort with a high count P STOP also set a pass point at STOP with count 1 this P will stop the first time through FF 0100 SORT 01 0119 STOP G Execute the test program FF PASS 0100 SORT First time through SORT label A 00 B 0000 D 0000 H 0000 S 0100 P 0100 LXI H 013E SW 01 PASS 0119 STOP Stopped cgain Arrggh Z E A 00 B 006A D 0007 H 013E S 0100 P 0119 JMP 0000 REBOOT 0000 REBOOT Let s look at some values H N 0008 8 N 8 looks better than last time D LIST N 0160 01 01 03 04 04 05 07 08 08 These values look a bit ISORT HEX strange Try again R NEXT PC END 0169 0100 55B7 D LIST N 1 Machine code reloaded display initial values 0160 05 03 04 OA 08 82 OA 04 L CONT CONT Let s take a look at the process of switching 011C LDA 013F I two data items the code appears down below 011F MOV E A the CONT label so we ll disassemble a 0120 MVI 0 00 portion of the program 0122 LXI H 0160 LIST 0125 DAD D 0126 MOV A M 0127 INX H 0128 CMP M 0129 JC 0137 INCI 012C JZ 0137 INCI 012F MOV C M Here s where the switch occurs let s set a pass P12F FF point here and watch the data addresses P FE 0100 SORT 01 0119 STOP FF 012F 55 SID Users Guide Section 5
117. TAC JUMP AROUND LOADCOM end of LOADCOM procedure execution actuallv begins at the top of LOADCOM the initialization of the SP to the default there is a declaration and i thus stack pointer befor necessarv onlv if we wish to retur otherwise the origin of the program is set LOADCOM as a procedure is not necessarv th bv simplv executing a GO TO 0000H at the end of the program boot is not great space set of procedure contains several nested subrou actually performs the ly starts on line 327 where the s The defaul SFCB initial to the local another file time I input block area the diskett stack control block befor file and the COM file line 350 if successful call to R The program then calls SI then the high speed reader is used if possible approximatelv 2 seconds svstem utilities which are used quite often The procedures listed in LOADCOM as PL M subroutines which are useful for CP M interface tines for local functions load operation when called from LOADCOM tackpointer is saved and re initialized name is copied two files mav be open at the same EX file exists it is opened for It file control t file nitializa ELOC at the end of n to the CCP without a reboot operation the declaration of tion is accomplished since EARCH to control block see if H is dele tion of a to 100H and termi
118. TER PUSH H PUSH D PUSH B SAVED MVI C TYPEF MOV E A CALL BDOS POP B POP D POP H RESTORED RET CRLF MVI A ODH CAL PCHAR MVI A OAH CAL PCHAR RET r PNIB PRINT NIBBLE IN REG A ANI OFH LOW 4 BITS CPI 10 JNC P10 017C 017E 0181 0183 0186 0187 0188 0189 018A 018B 018C 018F 0190 0193 0194 0197 0199 019C 0190 019F 01A2 01AS 0148 01AB 01AD 0180 01B3 01B4 01B5 01B7 01B8 01BB 01BC 01BF 01C0 01C1 01C2 01C3 01C4 C630 C38301 C637 CDS5DO1 C9 F5 OF OF OF OF CD7501 Fl CD7501 9 D6A01 E23 D5DO1 630 D5DO1 D6A01 C3F 701 aQQadawa 3A0DO1 C2B401 CD1602 AF 5F 1600 3C 320DO1 E5 218000 19 TE E 23 c9 CDFFO1 GNB GO MAIN LESS THAN OR EQUAL TO 9 ADI LO P PRN GREATER OR EQUAL TO 10 ADI A 10 CALL PCHAR RET PRINT HEX CHAR IN REG A PUSH PSW RRC RRC RRC RRC CAL PNIB PRINT NIBBLE POP PSW CAL PNIB RET PRINT ERROR MESSAGE CAL CRLF MVI A CAL PCHAR MOV A B ADI 0 CAL PCHAR CAL CRLF JMP FINIS GET NEXT LDA IBP CPI 80H JNZ GO READ ANOTHER BUFFER CALL DISKR XRA A READ THE BVTE AT BUFF REG MOV E A MVI D 0 INR A STA IBP POINT
119. TINES IF FALSE THEN CHARERR ARRIVE HERE IF NON HEX DIGIT IS ENCOUNTERED DO RESTORE STACKPOINTER STACKPOINTER SP CALL PRINT NON HEXADECIMAL DIGIT ENCOUNTERED CALL DIAGNOSE END READ RECORDS UNTIL 00XXXX IS ENCOUNTERED DO FOREVER SCAN THE DO WHILE lt gt END 00280 00281 00282 00283 00284 00285 00286 00287 00288 00289 00290 00291 00292 00293 00294 00295 00296 00297 00298 00299 00300 00301 00302 00303 00304 00305 00306 00307 00308 00309 00310 00311 00312 00313 00314 00315 00316 00317 00318 00319 00320 00321 00322 00323 00324 00325 00326 00327 00328 00329 00330 00331 00332 00333 00334 00335 00336 N R DD DD BB ND DN ND NN ND NN BR NN NK KRW GQ GQ Q Y Y UU da UY LY UY QO QO UY ds 01 O ds ds HPP HOP HS HS HS HS HS HS HS HS SHR HO HS HS HHH A 37 SET CHECK SUM TO ZERO AND SAVE THE RECORD LENGTH GS 0 MAY BE THE END OF TAPE IF RL READCS 0 THEN GO TO FIN NB NB RL TA LA MAKES
120. a breakpoint is taken Given that the pass point at TYPEOUT is in effect the command G starts execution of the test program with no temporary breakpoint Each time the ass point is executed the pass trace 1E PASS 0302 TYPEOUT register trace 1D PASS 0302 TYPEOUT register trace 1C PASS 0302 TYPEOU register trace 01 PASS 0302 TYPEOU register trace 303 where the register trace shows the state of the CPU registers before the MOV C A at TYPEOUT is executed s the X command for register display format Note that the final breakpoint address is 0303 which follows the MOV instruction at the pass address 0302 The operator can depress any keyboard character during the pass point trace and SID will immediately stop execution following the instruction at the pass point address If instead the command 29 SID Users Guide Section 3 G had been issued above the intermediate pass traces would not appear at the console In this particular case only the final trace 01 PASS 0302 TYPEOUT register trace 303 is printed Although the intermediate pass traces are not displayed the operator can abort execution by depressing a keyboard character if an intermediate pass point is encountered with trace disabled SID aborts execution and returns control to the keyboard Temporary breakpoints can also be set w
121. ample which arises from a sequence of instructions which are difficult to find under normal testing In this case TRACE can be used to collect program addresses as the test program executes and display these addresses and instructions in most recent to least recent order when requested by the operator Normal invocation of SID with the TRACE utility is SID TRACE UTL with the normal utility response INITIAL 1111 COLLECT cccc DISPLAY dddd In this case the TRACE utility also prints the message READY FOR SYMBOLIC BACKTRACE which indicates that the assembler disassembler portion of SID is present and will be used to disassemble instructions when the backtrace is requested The operator may then proceed to load a test program with optional symbol table The DUMP program for example could be loaded by subsequently typing 45 SID Users Guide Section 4 IDUMP COM DUMP SYM R with the usual NEXT PC END response indicating that the test program is loaded At this point the SID debugger is executing in high memorv along with the TRACE utilitv The test program is present in low memorv readv for execution The simplest backtrace is obtained by typing one of the U or T command forms shown with the HIST utility In particular a U command of the form U 500 COLLI CJ CT executes 500 decimal program steps and then automaticallv stops pro
122. any purpose in the distribution version of CP M not currently used reserved default file control block produced for a transient pro gram by the Console Command Processor not currently used reserved default 128 byte disk buffer also filled with the com mand line when a transient is loaded under the CCP Note that this information is set up for normal operation under the CP M system but can be overwritten by a transient program if the BDOS facilities are not reguired by the transient If for example a particular program 18 performs onlv simple 1 0 and must beain execution at location 0 it can be first loaded into the TPA using normal CP M move program which gets control when loaded facilities with a small memorv the memorv move program must qet control from location 100H which is the assumed beginning of all transient programs The move program can then proceed to move th ntire memory image down to location 0 and pass control to the starting address of the memory load Note that if the BIOS is overwritten warm start entry point is overwritten then or if location 0 containing the the programmer must bring the CP M system back into memory with a cold start sequence 19 3000 0080 0080 D900 0078 CONTROLLI 0079 007B OOFE 3000 3002 3004 3006 3008 300B 3001 301 301 301 301 301 301 301 301 E WowoJAdAwO 0891 80H 3011
123. arting at location 40H which is available as a scratch area in case the BIOS is implemented in ROM by the user This scratch area is never accessed by any other CP M subsystem during operation The jump vector at 3E00H b takes the form shown below where the individual jump addresses are given to the left 3E00H b JMP BOOT ARRIVE HERE FROM COLD START LOAD 3E03H b imp WBOOT ARRIVE HERE FOR WARM START 3E06H b JMP CONST CHECK FOR CONSOLE CHAR READY 3E09H b JMP CONIN READ CONSOLE CHARACTER IN 3E0CH b JMP CONOUT WRITE CONSOLE CHARACTER OU 3E0FH b JMP LIST WRITE LISTING CHARACTER OU 3E12H b JMP PUNCH WRITE CHARACTER TO PUNCH DEVICE 3E15H b JMP READER READ READER DEVICE 11 3E18H b JMP HOME MOVE TO TRACK 00 ON SELECTED DISK 3E1BH b JMP SELDSK SELECT DISK DRIVE 3ELEH b JMP SETTRK 7 SE TRACK NUMBER 3E21H b JMP SETSEC SET SECTOR NUMBER 3E24H b JMP SETDMA SE DMA ADDRESS 27 JMP READ READ SELECTED SECTOR 3E2AH b JMP WRITE WRITE SELECTED SECTOR Each jump address corresponds to a particular subroutine which performs the specific function as outlined below There are thr mjor divisions in the jump table th
124. ble that this segment of code would 0115 MOV A M be executed heavilv We could improve performance 0116 ORA A bv reducing the length of this segment The value 0117 jNZ 0100 SORT of N 1 could for example be maintained in register STOP C throughout the computations while the value of 011A JMP 0000 REBOOT I could be kept in register E with 00 in D L11C There is also heavy execution around location 011C 011C NOP CONT 0110 LDA 0140 I This is where we go on each element comparison 20 MOV E A whether we switch elements or not 21 MVI D 00 23 URE H 0161 LIST 126 DAD D MOV A M 128 INX H 129 CMP M 12 JC 0138 INCI Co OO oo Co O N N 2D JZ 0138 INCI Q 65 SID Users Guide Section 5 28 SID TRACE UTL Load the TRACE utilitv with STD SID VERS 1 4 INITIAL 5321 COLLECT 5324 TRACE entrv points DISPLAY 5327 READY FOR SYMBOLIC BACKTRACE Indicates that assembler disassembter is present ISORT HEX SORT SYM Ready the SORT program and symbol table R Load program and symbols to memory SYMBOLS NEXT PC END 0600 0100 52B7 P STOP Permanent break at the STOP label P CONT 3 Pass through CONT three times before stopping UFFFF COLLECT Untrace mode print intermediate pass points gt A 00 B 0000 D 0000 H 0000 S 0100 P 0100 LXI H 013F SW 03 PASS 011D CONT I A 07 B 0000 D 0000 H 0140 S 0100 P 011D LDA 0140 I 02 PASS 011D CONT EI A 07 B 0003 D 0000 H 0140 S 0100 P 011D LDA 0
125. block before opening the file which begins at tbase since the open operation will fill the disk map portion thus cverwriting the second name and type If no file names were specified in the original command then the fields beginning at tfcb and tfcb 16 both contain blanks 20H If one file name was specified then the field at tfcb 16 contains blanks If the filetype is omitted then the field is assumed to contain blanks In all cases the CCP translates lower case alphabetics to upper case to be consistent with the CP M file naming conventions As an added programming convenience the default buffer at tbuff is initialized to hold the entire command line past the program name Address thuff contains the number of characters and tbuff 1 tbuff 2 contain the remaining characters up to but not including the carriage return Given that the above command has been typed at the console the area beginning at thuff is set up as follows EHU EE 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 415 T2 Bl X 0 2 2 A P 2 2 where 12 is the number of valid characters in binary and bl represents an ASCII blank Characters are given in ASCII upper case with un initialized memory following the last valid character Again it is the responsibility of the program to extract the infor mation from this buffer before any file operations are performed since the F
126. by a 17 SID Users Guide Section 3 sequence of D commands of form c to continue the displav Each D command displavs another 1 2 screen of memorv Command form d is similar to b exceot the starting address is taken automaticallv as described in form c above Assume for example that decimal values 1 through 256 are stored in memorv starting at hexadecimal address 0100 The command D100 12A will produce th xpanded form of the displav shown below 0100 01 02 03 04 etc OF 10 etc 0110 11 12 13 14 etc 1E IF 20 etc 0120 21 22 23 24 etc 29 2A 2B amp ti tA Command forms e through h parallel the bvte display formats given by a through h except that the display is given in word format Form e displays in word format from location s for 1 2 screen while form f displays from location s through location f Form g displays from the last display location or from HL if there has been an immediately preceding breakpoint with no intervening display Form h is similar to g but displays through location f The command DW100 128 for example Droduces th xpanded form of the following output lines 0100 0201 0403 etc OEOD 100F etc 0110 1211 1413 etc 1E1D 201F etc 0120 2221 2423 etc 2928 2B2A amp Examples of valid D commands are DF3F D 100 200 D GAMMA DELTA 30 D GAMMA DW ALPHA 10
127. coded mnemonic instruction at location pppp unless A is in effect in which case the hexadecimal value of the operation code is printed The sym field contains a decoded operand when possible Refer to the L command for the format of the symbolic instruction decoding The single letter X command might result in a display of the form C M A 03 B 34EF D 2000 H 334E S 4323 P 0100 LDA 0223 Q which for example indicates that the carry and minus flags are true while the zero even parity and interdigit carry flags are false Further the A register contains 03 while the B C D E H and L registers contain the hexadecimal values 34 EF 20 00 33 and 4E respectively The value of the Stack Pointer register is 4323 and the Program Counter is at location 0100 The next instruction to execute at location 0100 is an accumulator load LDA from location 0233 Further the first symbol in the table which matches address 0233 is Q Form b allows the operator to change the state of the CPU flags In this case f must be one of the condition code letters C Z M E or I The present state of the flag is displayed either the flag letter if true or a if false The operator can optionally type a single carriage return which leaves the flag in its present state or may type a 1 to set the flag true or a 0 to reset the flag to false Given that the ca
128. d which is followed by the simulated command line The operator may then commence the debug run with default areas properly setup The I command specifically initializes the default file control block in low memory labelled DFCB1 which is normally located at 005C The file control block which is initialized by the I command is complete in the sense that the program can simply address DFCB1 and perform and open make or delete operation without further initialization As a convenience a second file name is initialized at location DFCB2 which is at address DFCB1 0010 hexadecimal It is the programmer s responsibility to move the second drive number file name and file type to another region of memory before performing file operations at DFCB1 since the 16 byte region at DFCB2 will be immediately overwritten by any file operation Further the default buffer labelled DBUFF is initialized to contain the entire command line with a preceding blank character In a standard CP M system the DBUFF area is assumed to be located start at 0080 and end at OOFF Note however that the I command restricts the simulated CCP command line to 63 characters since SID s line buffer is used in the simulation Given an I command of the form 1 idiot Eh a22t2 54 where dl and d2 are optional drive identifiers fl and f2 are up to eight character file names and tl and t2 are up to three character optional file
129. d Processor portion of CP M see the CP M Interface Guide and CP M Alteration Guide for a discussion of memory use conventions Memory organization before SID is loaded is shown in Figure 1 while Figure 2 shows the memory configuration after SID is loaded and relocated Due to the relocation process SID is independent of the exact memory size which CP M manages in a particular computer configuration High Memory BDOS CCP TPA Low Memory JMP BDOS Figure 1 Memory Configuration Before SID Loads SID Users Guide Section 1 BDOS SID JMP BDOS TPA JMP SID 1 Figure 2 Memorv Configuration After SID Loads After loading and relocating SID alters the BDOS entrv address to reflect the reduced memorv size as shown in Figure 2 and frees the lower portion of the TPA for use the program under test Note that although SID occupies only 6K of upper memory when operating the self relocation process necessitates a minimum 20K CP M system for initial setup leaving about 10K for the test program Command form a above loads and executes SID without loading a test program into the TPA This form is often used when the operator wishes to examine memory or write and test simple programs using the built in assembly features of SID Form b above is similar to a except that the program given by x y is automatically loaded for subsequent test Note that although
130. d by the tra n fbase as data In any Case nsient the entire CP M system must be reloaded upon the transien t s completion This system reload is accomplished by a direct branch to location boot in memory The transient uses the CP M 1 0 facilities to communicate with the operator s console and peripheral devices including the floppy disk subsystem The I O system is accessed by passing a function number and an information address to CP M through the address marked entry in Figure 1 In the case of a disk read for example the transient program sends the number corres ponding to a disk read along with the address of an FCB and CP M performs the operation returning with either a disk read complete indication or an error number indicating that the disk operation was unsuccessful The function numbers and error in dicators are given in detail in Section 3 3 1 43 Operating System Facilities CP M facilities which are available to transients are divided into two categories BIOS operations and BDOS primitives The BIOS operations are listed first Address entry contains a jump to the lowest address in the FDOS and thus entry 1 contains the first FDOS address which cannot be overlayed lusive of the disk subsystem corres ponds exactly to Intel s peripheral definition including 1 0 port assignment and status byte format see the Intel manual which discusses the Intellec MDS hardware enviro
131. d exceeds 128 the next extent is opened automatically and the NR field is reset to zero 15 TABLE II continued FUNCTION NUMBER ENTRY PARAMETERS RETURNED VALUE TYPICAL CALL Write Next Record Same as above except 0 successful write MON2 21 FCB 21 NR is set to the next 1 error in extend record to write ing file 2 end of disk data 255 no more dir ectory space see note 2 Make File Address of FCB with Byte address of dir MON2 22 FCB 22 lt filename gt and lt file ectory entry alloca type gt set Direc ted to the FCB or tory entry is cre 255 if no directory ated the file is space is available initialized to empty Rename FCB Address of FCB with Address of the dir MON2 23 FCB 23 old FN and FT in ectory entry which first 16 bytes and matches the first new FN and FT in 16 bytes The second 16 bytes lt filename gt and lt file type gt is altered 255 if no match Note 2 There are normally 64 directory entries available on each diskette can be expanded to 255 entries where one entry is required for the primary file and one for each additional extent 16 TABLE II continued Interrogate log in vector 24 Bvte value with 1 in bit positions of line disks with least signi ficant bit corres ponding to disk I MON2 24 0 Set DMA address 26 Address of 128 bvte DMA buffer None Subsequent disk I 0 takes place at spe cified address in memory
132. drive A before typing the return The program should respond with FUNCTION COMPLETE Load is complete PUT SYSTEM Y N N Answer no to PUT request system will automatically reboot at this point with the memory image loaded into memory starting at location 900H and ending at 207FH in the transient program area The memory image for CP M can then be saved if you are operating with a single drive replace your original diskette and reboot The save operation is accomplished by typing SAVE 32 CPM COM Save 20H 32 pages of memory The memory image created by the GET function is offset by a negative bias so that it loads into the free area of the TPA and thus does not interfere with the operation of CP M in higher memory This memory image can be subsequently loaded under DDT and examined or changed in preparation for a new generation of the svstem DDT is loaded with the memory image by typing DDT CPM COM Load DDT then read the CPM image DDT should respond with NEXT PC 2100 0100 Xou can then use the displav and disassemblv commands to examine portions of the memorv image between 900 and 207FH Note however that to find particular address within the memorv image vou must applv the negative bias to the CP M address to find the actual address Track 00 sector 01 is loaded to location 900H vou should find the cold start loader at 900 to 97FH track 00 sector 02 is
133. e B from drive A The various programs can then be tested on drive B to check that they were transferred properly Note that the copy operation can be simplified somewhat by creating a submit file which contains the copy commands The file could be named GEN SUB for example and might contain SYSGEN PIP B STAT COM STAT COM PIP B PIP COM PIP COM PIP B LOAD COM LOAD COM PIP B ED COM ED COM PIP B ASM COM ASM COM PIP B SYSGEN COM SYSGEN COM PIP B DDT COM DDT COM The generation of a new diskette from the standard diskette is then done by typing simply SUBMIT GEN Di CP M ENTRV POINT SUMMARX The functions shown below summarize the functions of the FDOS The function number is passed in Register first meter in PL M and the information is passed in Registers D E second PL M parameter Single byte results are returned in Register A If a double byte result is returned then the high order byte comes back in Register B normal PL M return The transient program enters the FDOS through location entry see Section 7 as shown in Section 2 for PL M or CALL entry in assembly language All registers are altered in the FDOS 21 Function Number Information Result Svstem Reset Read Console ASCII character Write Console ASCII character Read Reader ASCII character Write Punch ASCII character Write List ASCII character not used Interrogate 1 0
134. e distribution version contains two very small programs in track 0 sector 1 MBOOT a storage move program which moves LBOOT into place following the cold start Appendix A LBOOT the cold start boot loader Appendix B Upon MDS start up the 128 bvte segment on track 0 sector 1 is brouqht into 3000H The MBOOT program gets control and moves the LBOOT proqram from location 301EH down to location 80H in memory in order to qet out the the area where CP M is loaded in a 16K svstem Note that the MBOOT program would not be needed if the MDS loaded directly to 80H In general the program could be located anyvhere below the CP M load location but is most often located in the area between 000H and OFFH below the TPA After the move MBOOT transfers to LBOOT at 80H LBOOT in turn loads the remainder of track 0 and the initialized portion of track 1 to memory starting at 2900H b The user should note that MBOOT and LBOOT are of little use in a non MDS environment although it is useful to study them since some of their actions will have to be duplicated in your cold start loader Figure 1 Diskette Allocation Track Sector Page Memory Address CP M Module name 00 01 boot address Cold Start Loader 00 02 00 2900H b CCP 03 2980H b ik 04 01 2A00H b l 05 bl 2A80H b 06 02 2B00H b 07 2B80H b 08 03 2C00H b 09 2C80H b E u 10 04 2D00H b u 11 2D80H b N
135. e have checked out this particular SORT program using this particular set of data items This does not of course mean that the program is fully debugged There could be cases which are not tested properly since we have not inciuded all boundary conditions the data items 00 and FF for example should be included Further there ore program segments which could be incorrect but which have no negative effects on the program The tialization of SW to the value 1 before the label SORT for example does not affect the program but is superfluous We now have a program which appears to w but must undergo further tests before it is considered a production program 63 Section 5 SID Users Guide 00 0000 100 102 05 108 10A OD oooo QojH JJ 22 25 26 28 2B 2C 20 2E 2F OOo oo oo 32 014E SORT PROGRAM IN ELEMENTS OF Section 5 CP M ASSEMBLY LANGUAGE LIST ARE PLACED INTO ASCENDING ORDER USING BUBBLE SORT ORG 100H BEGINNING OF TPA REBOOT EQU 0000H CP M REBOOT LOCATION E 3E01 MVI A 1 324401 STA SW SW 1 FIRST TIME THRU 214401 SORT LXI H W 3600 MVI M 0 SW 0 214501 LXI H I INDEX TO SORT LIST 3600 MVI M 0 0 COMPARE 1 WITH ARRAV SIZE COMP HL ADDRESS INDEX I 3A4E01 LDA M LENGTH OF VECTOR 30 DCR A N 1 IN A REGISTER NOTE THAT N MUST BE 2 OR LARGER BE CMP M CHECK FOR N I c22201 JNZ CONT CONTINUE IF UNEQUAL i END OF ONE PASS THROUGH LIST 21440
136. e previous section the HIST utility prompts the input console with YPE HISTOGRAM BOUNDS The operator must respond with two symbolic expressions 43 SID Users Guide Section 4 separated bv a comma 1111 hhhh where 1111 is the lowest address to monitor and hhhh is the highest address In order to collect histogram information the operator must use one of the command forms Tr Te TWn c TW c SINE T y 0 TWn c TW c Un c UC UWn c UW Un c UE UWn c UW c where c is either COLLECT or the address corresponding to the COLLECT entry point Although all of these commands are optional the single form UN COLLECT is nearly always used since the trace output is disabled the test program is fully monitored and data collection takes place at each program step Following a series of data collection operations the histogram is displayed by typing C DISPLAY or Cdddd and the histogram is printed in the format HISTOGRAM ADDR RELATIVE FREQUENCY MAXIMUM VALUE mmmm aaaa kkkkk bbbb kkkkkkk cccc KKKKKKKKK XXXX kkkkkkkkkk Yyyy KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK ZZZZ KKKKKK where addresses aaaa through zzzz span the range from the low to high address range given in the initialization of HIST The maximum value mmmm is the largest number of instructions accumulated at any of the displayed addresses and the asterisks represent the bar graph of r
137. ecord number r 4 SYSTEM GENERATION As mentioned previously every diskette used under CP M is assumed to contain th ntire system excluding transient coomnds on the first two tracks The operating system need not be present however if the diskette is only used as secondary disk storage on drives B C since the CP M system is loaded only from drive A The CP M file system is organized so that an IBM compatible diskette from the factory or from a vendor which claims IBM compatibility looks like a diskette with an empty directory Thus the user must first copy a version of the CP M system from an existing diskette to the first two tracks of the new diskette followed by a sequence of copy operations using PIP which transfer the transient command files from the original diskette to the new diskette 19 NOTE before vou begin the CP M copv operation read vour Licensing Agreement It gives your exact legal obligations when making reproductions of CP M in whole or in part and specifically requires that you place the copyright notice Copyright c 1976 Digital Research on each diskette which results from the copy operation 4 1 Initializing CP M from an Existing Diskette The first two tracks are placed on a new diskette by running the tran sient command SYSGEN as described in the document An Introduction to CP M Features and Facilities The SYSGEN operation brings the CP M
138. ed on the diskette The TPA is an area of memorv i e the portion which is not used bv the FDOS and CCP where various non resident operating svstem commands are executed User programs also execute in the The organization of memory in a standard CP M system is shown in Figure 1 The lower portion of memory is reserved for system information which is detailed in later sections including user defined inter rupt locations The portion between tbase and cbase is reserved for the transient operating system commands while the portion above cbase contains the resident CCP and FDOS The last three locations of memory contain a jump instruction to the FDOS entry point which provides access to system functions 1 2 Operation of Transient Programs Transient programs svstem functions and user defined programs are loaded into the and executed as follows The operator communicates with the CCP by typing command lines following each prompt character Each command line takes one of the forms lt command gt lt command gt lt filename gt lt command gt lt cfilename gt lt filetype gt Figure 1 CP M Memorv Organization fbase FDOS cbase CCP TPA tbase Svstem Parameters boot address field of jump is fbase entrv the principal entrv point to FDOS is at location 0005 which contains a JMP to fbase The address field at location 0006 can be used to determine the size of available memory assum
139. elative instruction frequencies scaled according to the maximum value mmmm The address range is automatically scaled over 64 difference address slots aaaa bbbb zzzz above with a maximum of 64 asterisks in any particular bar of the graph Given the above display for example the hot spot is around the address range xxxx to zzzz In this case it would be worthwhile reinitializing the HIST utility by typing C INITIAL or Ciiii 44 SID Users Guide Section 4 The HIST initialization prompt and response should then be HISTOGRAM BOUNDS xxxx zzzz The operator mav then rerun the test program using the command UFFFF COLLECT After leaving enough time for the test program to reach Steady state the operator then interrupts program execution by typing a return during the monitored execution The display function is then reinvoked to expand the region between xxxx and zzzz resulting in a more refined view of the frquently executed region The L command can subsequently be used to determine the exact instructions which are most frequently executed If possible the sequence of instructions can be somewhat improved with an overall improvement in program performance 4 3 The TRACE Utility The TRACE utility is used to obtain a backtrace of the instructions which lead to a particular break address in a program under test A program may have an error condition for ex
140. en by the character con CP M and trol z or real end of file returned by 2 COM files are assumed to be absolute machine code in memory image form starting at tbase in memory In this case control z is not considered an end of file but instead is determined by the actual space allocated to the file being accessed 3 2 File Control Block Format Each file being accessed through CP M has a corresponding file control block FCB which provides name and allocation The FCB is a 33 byte area in the transient program s memory space which is set up for each file The FCB format is given in Figure 2 When accessing CP M files it is the programmer s responsibility to fill the lower 16 bytes of the FCB along with the CR field Normally the FN and FT fields are set to the ASCII lt filename gt and lt filetype gt while all other fields are set to zero Each FCB describes up to 16K bytes of a particular file 0 to 128 records of 128 bytes each and using automatic mechanisms of CP M up to 15 addi tional extensions of the file can be addressed Thus each FCB can potentially describe files up to 256K bytes which is slightly information for all file operations larger than the diskette capacity brought into central memory before fil FCB s are stored in a directory area of the diskette and are operations see the OPEN and MAKE commands then updated in memory as fi
141. ers starting at address aaaa As in the byte mode display a period is displayed as a place holder when the character in that position is non graphic Contrary to the byte mode display address normalization to modulo 16 address boundaries does not occur in the word mode display Recall that 8080 double words are stored with the least significant byte first and thus the word mode display reverses each byte pair so that the individual data items are displayed as four digit hexadecimal numbers with the most significant digits in the high order positions Command form a displays memory in byte format starting at location s for 1 2 of a standard CRT screen 12 lines This form of the command is useful when the operator wishes to view a segment of memory beginning at a particular Dosition with an indefinite ending address Command form b is similar to a but soecifies a particular ending address In this case the start address is taken as s with the display continuing through address f Recall that excessively long typeouts can be aborted by depressing any keyboard character such as a return Form c is similar to a and b exceot the starting address for the display is taken from the last displayed address or from the value of the memory address registers HL in the case that no previous display has occurred since the last breakpoint It is often convenient for example to use form a to display a segment of memory followed
142. esn t look good A 79 B 0008 D 0081 H 013B S 0100 P 0116 JMP 0000 REBOOT 0000 REBOOT We know there should have been several loops ISORT HEX through the SORT label since the data is R unordered Let s try again reload the code NEXT PC END note that the reload is necessarv here since 0166 0100 55B7 the data is initialized in the code area 01 0116 STOP What active pass points exist FE 0100 SORT Wait a minute referring back to the GO original listing it appears that the code preceding the STOP label is incomplete there should be a conditional lump back to the SORT label mavbe that s why the program never makes it back 54 SID Users Guide Section 5 9 ED SORT ASM Oh well back to the editor for a HAV quick fix Append all text A and y APS TOPS enter Verify mode V rhen find STOP 24 OLT 24 STOP JMP REBOOT RESTART CCP 24 Go up one line LI P END OF SORT PROCESS REBOOT DAT and enter insert mode I 23 JNZ CONT CONTINUE IF NOT EQUAL 24 ctl Z and return 202 E 26 wait I forgot the ctl Z now I ve got the E command in 26 my input buffer Type the ctl Z go back up one line 25 E delete the E then end the edit 25 KE 29 4 END OF SORT PROCESS REBOOT 25 E OK we mode the change now re a 3emble 10 MAC SORT Invoke the macro assembler with SORT as input CP M MACRO ASSEM 2 0 0169 001H USE FACTOR END OF ASSEMBLY 11 SID SORT HEX SOR
143. ess of the FCB Byte address of the I MON2 15 FCB 15 for the file to be FCB in the directory accessed if found or 255 if file not present The DM bytes are set by the BDOS Close file Address of an FCB Byte address of the I MON2 16 FCB 16 which has been pre directorv entrv cor viously created or responding to the opened FCB or 255 if not present FUNCTION NUMBER ENTRY PARAMETERS RETURNED VALUE TYPICAL CALL Search for file Address of FCB con Byte address of first I MON2 17 FCB 17 taining lt filename gt FCB in directory that and lt filetype gt to matches input FCB if match ASCII 2 any otherwise 255 in FCB matches any indicates no match character Search for next Same as above but Byte address of next I MON2 18 FCB occurrence called after func 18 tion 17 no other intermediate BDOS calls allowed Delete File Address of FCB con None I MON2 19 FC 19 taining lt filename gt and lt filetype gt of file to delete from diskette Read Next Record Address of FCB of a 0 successful read I MON2 20 4FCB 20 successfully OPENed 1 read past end of file with NR set file to the next record 2 reading unwritten to read see note 1 data in random access Note 1 The 1 0 operations transfer data to from address 80H for the next 128 bytes unless the DMA address has been altered see function 26 Further the NR field of the FCB is automatically incremented after the operation If the NR fiel
144. forms are 15 SID Users Guide Section 3 a Cs b Cs b c Cs b d Although the C command is designed for use with SID utilities it can be used to perform calls on test program subroutines to perform program initialization or to make CP M BDOS calls which initialize various system parameters before executing the test program Form a above performs a call on absolute location s where s is a symbolic expression In this case registers BC 0000 and DE 0000 in the call Normal exit from the subroutine is through execution of a RET instruction which returns control to SID followed by a normal system prompt Form b above is equivalent to a except that the BC register pair is set to the value of expression b while DE is set to 0000 Form c is similar to b the BC register pair is set to the value b while the DE pair is set to the value of d Several examples of valid C commands are shown below Refer also to the SID utility discussion for examples of the C command in utility initialization data collection and display functions C100 C 4096 C DISPLAY CEJMPVEC X C CRLF 34 C CRLF X X 3 3 The Display Memory D Command The D command is used to display selected segments of memory in both byte 8 bit and word 16 bit formats The display appears in both byte and ASCII form in the output The forms of the D command are Ds Ds f D DE DWs DWs f DW
145. g A valid input sequence following the command S100 is shown below where the SID prompt is given on the left and the oderator s input lines are shown to the right where cr denotes the carriage return key SID PROMPT OPERATOR INPUT 0100 3 34cr 0101 24 254cr 0102 CE cr 0103 4B ASCIIcr 0108 6E X 5cr 0109 E2 ese 010A D4 cr A valid double byte input sequence following the command SW X 30 is shown below 35 SID Users Guide Section 3 SID PROMPT OPERATOR INPUT 2300 006D 44Fcr 2302 4F32 GAMMAcr 2304 33E2 cr 2306 FF11 X 1 20cr 2308 348F 3 13 The Trace Mode T Command The T command allows the operator to single or multiple step a test program while viewing the CPU registers as thev change In addition the command can be used in conjunction with SID utilities to collect test program data for later display see the section entitled SID Utilities The forms of the T command are a rn b T c Tn c d T C e T with options a d TW with options a d g TW with otions a d Form a traces program execution from the current value of the program counter PC see the X command for PC value as well as the format of the CPU state disolav Form b is the trivial case of a with an assumed single step count of 1 In either case the SID program displays the register state along with the decoded instruction
146. ge 29 ctl Z 295 KE Terminate the editing session 53 SID Users Guide Section 5 6 SORT CP PM MACRO ASSEM 2 0 0166 Re assemble the SORT program 001 USE FACIOR ENO OF ASSEMBLY 7 TYPE SORT SYM Here s the symbol table 010A COMP 0119 CONT 013C 1 0134 INCI 015D LIST 0165 N 0000 REBOOT 0100 SORT 015D STACK 0116 STOP 0138 SW 8 SID SORT HEX SORT SYM SID VERS 1 4 Let s try again load the HEX and SYM files SYMBOLS NEXT PC END 0166 0100 55B7 P STOP Set a pass point at STOP to prevent reboot G Start unmonitored execution 01 PASS 0116 STOP We mode it to the STOP label check values RAR A 7C B 0008 D 0081 H 0138 S 0100 P 0116 JMP 0000 REBOOT 0000 REBOOT H N What s the value of the byte variable N 0082 130 130 Very strange How did that happen D LIST 7 Oh well let s look at the data values 015D 03 04 05 They are almost sorted looks like we have 0160 08 OA OA 04 08 some trouble near the end of the vector ISORT HEX lets reload the machine code and try R again NEXT PC END 0166 0100 55B7 XP P 0100 Program counter remains at 0100 what P are the active pass points 01 0116 STOP The one at STOP remains set let s also P SORT FF monitor the SORT loop point but not G break right awav FF PASS 0100 SORT Here s the first time through SORT A 7C B 0008 D 0081 H 013B S 0100 P 0100 LXI H 013B SW 01 PASS 0116 STOP It stopped immediately It do
147. gram execution The operator mav then obtain a backtrace to the stop address bv tvping C DISPLAY which causes TRACE to display the label address and mnemonic information in the form label 255 addr 255 opcode 255 svm 255 label 254 addr 254 opcode 254 sym 254 label 253 addr 253 opcode 253 sym 253 label 000 addr 000 opcode 000 svm 000 where label 255 down through label 000 represent the decoded svmbolic labels corresponding to addresses given bv addr 255 down through addr 000 when the svmbolic labels exist Opcode 255 down through opcode 000 represent the mnemonic operation codes corresponding to the backtraced addresses and svm 255 down through sym 000 denote the symbolic operands corresponding to the operation codes when the symbols exist The operation codes are displayed in the same format as the list command Note that in this display the most recently executed instruction is at location addr 255 while the least recently executed instruction is at location addr 000 TRACE will account for up to 256 instructions which accumulate in T or U mode The accumulated instructions are not affected by the DISPLAY function but are cleared by a call to reinitialize C INITIAL Full benefit of the TRACE utility requires concurrent use of TRACE with pass points see the P command In particular pass points are first set at program locations which are of in
148. hile pass points are in effect That is commands such as Ga b Ga b c G b G b c can be issued which intermix with the permanent breakpoints which are set with the P command Note however that permanent breakpoints override the temporary breakpoints which are given by b and c when they occur at the same address Further T and U command can be used to trace sections of the test program while permanent breakpoints are in effect in this case the pass counts decrement as described above with a break taken when the count reaches 1 Valid P commands are shown below P100 FF P BDOS P ICALL 30 20 P CRLF 3 11 The Read Code Symbols R Command The R command is used in conjunction with the I command to read program segments symbol tables and utility functions into the transient program area The forms of the R command are b Rd The 1 command is first used to set the file names which will be involved in the read operation Form a reads the program and or svmbol table given bv the I command without applying an offset to the load addresses Form b adds the displacement value d to each program load address and or symbol table address Note that this addition takes place without overflow checks so that negative bias values can be 30 SID Users Guide Section 3 applied As a simple case the usual initiation of SID SID X COM could be replaced by the sequence of commands SID Starts SID wi
149. hine code NEXT PC END below the COMP label 0180 0100 55B7 HL COMP COMP 010A LDA 0168 N Here s the reference to N let s change this 0100 CMP M to NI with a hot patch in memory to see 010E JNZ 011C CONT if it works then we ll go back to the 0111 LXI H 013E SW origiNal source program and make the 0114 MOV A M necessary changes We re not using the area AIOA of memory starting at 0200 so patch a lump 010A JMP 200 over the LDA instruction and fix up some 010D patch code A200 0200 LDA N Replace the LDA instruction which now has JMP 200 0203 DCR A N 1 in accumulator N better be 2 or larger 0204 CMP M and compare with memory HL addresses I 0205 JNZ CONT jump to CONT if continuing otherwise 0208 JMP 111 jump back to the next instruction in sequence 0208 after the patch P205 FF Set a pass point to watch the JNZ take place P STOP and catch any returns to the CCP P111 FF Set a pass point at the patch return addrem S N Reduce the size of V for this test to 4 0168 08 4 0169 00 G Everything is ready let s go FF PASS 0205 First pass through the patch code EI A 03 B 0000 D 0000 H 013F S 0100 P 0205 JNZ 011C CONT FE PASS 0205 Went to CONT that time second pass I A 03 B 0003 D 0000 H 013F S 0100 P 0205 JNZ 011C CONT FD PASS 0205 Went to CONT again next pass I A 03 B 0004 D 0001 H 013F S 0100 P 0205 JNZ 011C CONT FC PASS 0205 And so forth Z EI A 03 B 0004 D 0002 H 013F S 0100 P 0205 JNZ 0
150. identical in function but disable the symbolic features of SID In particular form a starts test program execution from the program counter PC given in the machine state of the program under test s the X command for machine state display In this case no breakpoints are set in the test program Form b is similar to a but initializes the test program s PC to p before starting execution Again no breakpoints are set in the test program Similar to a form c starts execution from the current value of PC but sets a breakpoint at location a The test program receives control and runs in real time until the address a is encountered Note that control will return to SID upon encountering a pass point or RST 7 as described above Upon encountering the breakpoint address a the break address is printed at the console in the form ka 8 19 SID Users Guide Section 3 where s is the first svmbol in the table which matches address a if it exists Note that the temporary breakpoint at address a is automatically cleared when SID returns to command mode see the P command for permanent breakpoints Form d combines the functions of b and c the test program PC is set to the address p and a temporary breakpoint is set at location a As above the breakpoint is cleared when location a is encountered It should be noted that an immediate breakpoint will alwavs occur if p a If this is not desired
151. ing 51 SID 1 010 010 11 14 15 19 1 1 1 20 21 22 23 SO oOo oS oS G 126 29 2A 12B 12C 2D 30 0131 34 35 0138 013A SA 62 63 Users Guide SORT PRN REBOOT 213801 SORT 3601 213901 3600 COMP 3A6201 BE C21901 213801 TE B7 C30000 SF 1600 215A01 19 TE 23 BE DA3101 CA3101 4E TATI 2B 71 213801 34 INCI 213901 34 C30A01 STACK 0503040A08LIST 08 Section 5 SORT PROGRAM IN CP M ASSEMBLY LANGUAGE ELEMENTS OF LIST ARE PLACED INTO DESCENDING ORDER USING BUBBLE SORT ORG 100H BEGINNING OF EQU 0000H CP M REBOOT LOCATION LXI H SW MVI M 1 SW 1 LXI H I INDEX TO SORT LIST MVI M 0 il 0 COMPARE WITH ARRAY SIZE HL ADDRESS INDEX I LDA N LENGTH OF VECTOR CMP M CHECK FOR N I JNZ CONT CONTINUE IF UNEQUAL END OF ONE PASS THROUGH LIST LXI H SW NO SWITCHES MOV A M FILL A WITH SW ORA A SET FLAGS END OF SORT PROCESS REBOOT JMP REBOOT RESTART CCP CONTINUE THIS PASS ADDRESSING I SO LOAD LIST I MOV E A LOW I TO E REGISTER MVI D 0 HIGH I 0 LXI H LIST BASE OF LIST DAD D ADDR LIST I MOV A M LIST I IN A REGISTER INX H ADDR OF LIST I 1 CMP M LIST I LIST I 1 JC INCI SKIP IF PROPER ORDER CHECK FOR LIST I LIST 141 JZ INCI SKIP IF EQUAL ITEMS ARE OUT OF ORDER SWITCH MOV C M OLD LIST I 1 TOC MOV M A NEW LIST I 1
152. ing the CCP is being overlayed Note The exact addresses for boot tbase chase fbase and entry vary with the CP M version see Section 6 for version correspondence Where lt command gt is either a built in command e g DIR or TYPE or the name of a transient command or program If the lt command gt is a built in function of CP M it is executed immediately other wise the CCP searches the currently addressed disk for a file by the name E lt command gt COM If the file is found it is assumed to be a memory image of a program which executes in the TPA and thus implicitly originates at tbase in memory see the CP M LOAD command The CCP loads the COM file from the diskette into memory starting at tbase and extending up to address cbase If the lt command gt is followed by either a lt filename gt or lt filename gt lt filetype gt then the CCP prepares a file control block FCB in the system information area of memory This FCB is in the form required to access the file through the FDOS and is given in detail in Section 3 2 The program then executes perhaps using the 1 0 facilities of the FDOS If the program uses no FDOS facilities then the entire remaining memory area is available for data used by the program If the FDOS is to remain in memory then the transient program can use only up to locatio if the CCP area is use
153. int the character which is in register A at the console send carriage return and line feed to the console print the hexadecimal value in register A in ASCII at the console print the byte value two ASCII characters in register A at the console print error flag fn at the console where n is 1 if file cannot be opened 2 if disk read error occurred get next byte of data from the input file If the IBP input buffer pointer exceeds the size of the input buffer then another disk record of 128 bytes is read Otherwise the next character in the buffer is returned IBP is updated to point to the next character 24 The MAIN program then appears which begins by calling SETUP The SETUP subroutine discussed below opens the input file and checks for errors If the file is opened properly the GLOOP get loop label gets control On each successive pass through the GLOOP label the next data byte is fetched using GNB and save in register B The line addresses are listed every sixteen bytes so there must be a check to see if the least signi ficant 4 bits is zero on each output If so the line address is taken from registers h and 1 and typed at the left of the line In all cases the byte which was previously saved in register B is brought back to register A following label NONUM and printed in the output line The cycle through GLOOP continues until an end of file condition is detected in DISK
154. ion as described in the I and R commands Recall however that all existing symbol information is removed when the utility loads and must therefore be reinitialized if required for the debugging run Normally a SID utility has three primary entry points one for utility re initialization called INITIAL one for data collection called COLLECT and one for data display called DISPLAY After loading the utility sets up these symbols in the table and types the entry point addresses in the format INITIAL 1111 COLLECT ccce DISPLAY dddd where iiii cccc and dddd are the hexadecimal addresses of the three entry points Note however that the three symbolic names are equivalent to these thr addresses Following initial sign on the utility may prompt the console for additional debugging parameters After the interaction is complete the operator may use the I and R commands to load test programs and symbol tables in order to proceed with the debug session During the debug run data collection takes place by running the test program in monitored mode using the U or T 42 SID Users Guide Section 4 commands Either of the commands UFFFF COLLECT or UFFFF cccc direct the SID program to run the test program from the current Program Counter for a maximum of 65535 FFFF hexadecimal steps with a call to the data collection entry point of the utility program Each instructi
155. ion of the previously accumulated value The value of the following literal or symbolic value is added and becomes the new accumulated value to this point in the evaluation If the expression begins with a unary then the immediately preceding completed taken as the initial accumulated value symbolic expression is zero is assumed at SID startup For example the command DFEOO 128 5 contains the first expression FEOO 128 which adds FEOO and decimal 128 to produce FE80 as the starting value for this display command The second expression 5 begins with a unary which indicates that the previous expression value FE80 is to be used as the base for this symbolic expression producing the value FE85 for the end of the display operation Thus the command given above is equivalent to 11 SID Users Guide Section 2 DFE80 FE85 The symbol causes SID to subtract the literal number or symbol reference from the 16 bit value accumulated thusfar in the symbolic expression If the expression begins with a minus sign then the initial accumulated value is taken as zero That is X is computed as 0 x where x is any valid symbolic expression The command DFFOO 200 512 for example is equivalent to the simple command DFDOO FEOO A special up arrow operator denoted by is present in SID to denote the top of stack in the program under tes
156. is manner the A and L commands ar ffectively removed Further the trace and untrace functions display only the hexadecimal codes and the traceback utility displays only hexadecimal addresses Any existing symbol information is also discarded at this point although such information can be reloaded s the I and R commands Examples of valid assemble commands are shown below A100 A 100 A CRLF 5 A GAMMA X I1 A 30 Given that the command A100 has been entered th following interaction could take place between SID and the operator SID PROMPT OPERATOR INPUT 0100 MVI C A B 0102 LXI H SOURCE 0105 LXI D 100 0108 MOV A M 0109 INX H 010A STAX D 010B INX D 010C DCR C 010D JNZ 108 0110 return only where A B and SOURCE are symbols which are active in the symbol table In this case SID computes the address difference between A and B as the operand for the MVI instruction The LXI H Operand becomes the address of SOURCE while the LXI D instruction receives the operand value SOURCE 100 since SOURCE was the immediately proceeding symbolic expression value This particular program segment would mo e a block of memory determined by the address values of the corresponding symbols 3 2 The Call C Command The C command performs a call to an absolute location in memory without disturbing the register state of the program under test The
157. l the operator can override this base on input by preceding the number by a symbol which indicates that the following number is in the decimal base In this case the number which follows must consist of one or more decimal digits 0 through 9 with the most significant digit on the left and the least significant digit on the right Decimal values are padded or truncated according to the rules of hexadecimal numbers as described above by converting the decimal number to the equivalent hexadecimal value SID Users Guide Section 2 The input values shown to the left below produce the internal hexadecimal values shown to the right below INPUT VALU EJ HEXADECIMAL VALUE 9 0009 10 256 0100 65535 FFFF 65545 0009 2 3 Literal Character Values As an operator convenience SID also accepts one or more graphic ASCII characters enclosed in string apostrophes as literal values in expressions Characters remain as typed within the paired apostrophes i e no case translation occurs with the leftmost character treated as the most significant and the rightmost character treated as least significant Each character is translated internally to its two hexadecimal digit ASCII encoded form Similar to hexadecimal numbers character strings of length one are padded on the left with zero while strings of length greater than two are truncated to the rightmost two characters discarding the leftm
158. le operations pro ceed and finally recorded on the diskette at the termination of the file operation see the CLOSE command This organization makes CP M file organization highly reliable since diskette fil integrity can only be disrupted in the unlikely case of hardware failure during update of a single directory entry It should be noted that the CCP constructs an FCB for all transients by scanning the remainder of the line following the transient name for a lt filename gt or lt fi lename gt lt filetype gt com bination Any field not specified is assumed to be all blanks A properly formed FCB is set up at location tfcb see Section 6 with an assumed 1 0 buffer at tbuff he transient can use tfcb as an address in subsequent input or output operations on this fil 10a In addition to the default fcb which is set up at address tfcb the CCP also constructs a second default fcb at address tfcb 16 i e the disk map field of the fcb at tbase Thus if the user types PROGNAME X ZOT Y ZAP the file PROGNAME COM is loaded to the TPA and the default fcb at tfcb is initialized to the filename X with filetype ZOT Since the user typed a second file name the 16 byte area beginning at tfcb 16D is also initialized with the filename Y and filetype ZAP It is the responsibility of the program to move this second filename and filetype to another area usually a separate file control
159. load the symbol tables for selective portions of a large program which was initially developed in small modules Suppose for example that a report generation program has been developed using MAC which consists of the several modules 31 SID Users Guide Section 3 IOMOD ASM 1 0 Module SORT ASM File Sorting Module MERGE ASM File merge Module FORMAT ASM Report Format Module MAIN ASM Main Program Module DATA ASM Common Data Definitions Suppose further that each module has been separately assembled using MAC resulting in several HEX and SYM files corresponding to the individual program segments The program segments have been brought together using SID to form a memory image by typing the sequence of commands SID Start the SID program IIOMOD HEX Initialize IOMOD R Read I 0 Module ISORT HEX Initialize SORT R Read Sort Module IMERGE HEX Initialize MERGE R Read Merge Module IFORMAT HEX Initialize FORMAT R Read Format Module IMAIN HEX Initialize MAIN R Read Main Module IDATA HEX Initialize DATA Area R Read Initialized Data Following this sequence the Transient Program Area contains the complete memorv image of the report generation program Suppose the information printed following the last R command is NEXT PC E 1B3E 0100 81 z D 00 which indicates that the high memorv address is 1 Using the H co
160. low give some generic categories which have been established although they are generally arbitrary ASM assembler source file PRN assembler listing file HEX assembler or PL M machine code in hex format BAS BASIC Source file INT BASIC Intermediate fil COM Memory image file i e Command file for transients produced by LOAD BAK Backup file produced by editor see ED manual Temporary files created and normally erased by editor and utilities Thus the name X ASM is interpreted as an assembly language source file by the CCP with lt filename gt X The files in CPM are organized as a logically contigous se quence of 128 byte records although the records may not be phys ically contiguous on the diskette which are normally read or written in sequential order Random access is allowed under CPM however as described in Section 3 4 No particular format with in records in assumed by CPM although some transients expect particular formats 10 1 Source files are considered a sequence of ASCII characters where each line of the source file is followed bv carriage return line feed characters lines of source text Thus one 128 byte CP M record could contain several logical Machine code hex tapes are also assumed to be in this for mat although the loader does not require the carriage return line feed characters End of text is giv
161. m s stack Note further that SID does not trace execution of calls through the BDOS code since these operations are often quite lengthy and may occassionally require real time operation to perform various disk functions Thus entry to the BDOS is intercepted by SID and resumed following completion of the BDOS function Tracing can be aborted at any time by depressing a keyboard character Do not use the RST instruction to terminate trace functions Valid trace commands are shown below T100 T 30 COLLECT TW I 3E03 3 14 The Untrace Mode U Command The U command is similar to the T command given above except that the CPU register state is not displayed at each step Instead the test program runs fully monitored so that program execution can be aborted at any time or for the collection of data for a SID utility function The forms of the U command parallel the T command 38 SID Users Guide Section 3 Un U Un c U U with options a d UW with options a d UW with options a d Q M0 O Forms a through d perform the analogous functions of the command forms a through d without disz laving the register state at each step Forms given by e differ from the T command however instead of disabling the symbolic features command forms Un U Un c U c disable the intermediate pass point displav see the P command until the corresponding
162. mand allows the operator to enter data into main memory The forms of the S command are 34 SID Users Guide Section 3 a Ss b SWs Form a allows data to be entered at location s in bvte 8 bit or character string mode while form b is used to store word 16 bit mode data items In either case th SID program proceeds to prompt the console with successive addresses starting at location s along with the data item presently located at that address As each line prompt occurs the operator has the option of typing a single carriage return or typing a symbolic expression followed by a carriage return which is evaluated and becomes the new data item at that location If a single carriage return is typed then the data element at that location remains unchanged The S command terminates whenever an invalid data item is detected or when the operator types a single followed by a carriage return Form a allows single byte data and produces the standard when a double byte value is entered with a non zero high order byte In addition form a also allows long ASCII string data to be entered in the format NGCCCG s s CeCcec where the sequence of c s represent graphic ASCII characters to be entered at the prompted location No translation from lower to upper case takes place during entry Further the next prompted address is automatically set to the first unfilled location following the input strin
163. mmand H1B the operator finds that 1B hexadecimal pages is the same as 27 decimal pages At this point the operator returns to CCP mode by typing either a control C warm start or GO command which leaves the memory image intact The command SAVE 27 REPORT COM is then issued to create a memory image file on the diskette The operator then re enters SID using a command of the form SID REPORT COM to load the entire module for testing Individual portions 32 SID Users Guide Section 3 of the report generator can then be symbolically accessed by selectively loading symbol tables from the original modules For example the MAIN and SORT modules could be debugged by subsequently loading the corresponding symbol information I MAIN SYM R I SORT SYM R which readies the symbol information for subsequent debugging Individual segments of the report generator are then tested and reassembled If an error is found in the SORT module for example the SORT ASM file is edited to make necessary changes and the module is reassembled with MAC resulting in new HEX and SYM files for the SORT module only Given that enough expansion area has been provided following the SORT module SID is reinitiated and the SORT module is included SID REPORT COM ISORT HEX SORT SYM R which overlays the changed SORT module in the original report generator memory image The operator
164. mpt bv RELOC If the data is within buff is m the addr from rewi LOADing is resumed bv interrupting with a NOP instruction er oved up to the poi memory image successively ess of the window checksum errors o nding the tape for ETM procedure on li EM procedure mai pure binary form which acts as a window on th If the data is to be placed above this window the default buffer at location 80H and moves each source buffer as it is read on exit next input character and updates the SBP ne 191 performs the opposite function from ntains a buffer of loaded machine code loaded cod If there to write below this window then the data is ignored the window then it is placed into MBUFF memory then the window nt where it would include the data address by writing by 128 byte buffers and moving the base Using this technique the programmer can recover n the high speed reader by stopping the reader some distance then restarting LOAD in this case Again the uses 5 EM procedur the default buffer at location 80H to perform the disk output by moving 128 byte segments to 80H through OFFH before each write 00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 00011 00012 00013 00014 00015 00016 00017 00018 00019 00020 00021 00022 00023 00024 00025 00026 00027 00028 00029 00030 00031 00032 00033 00034 00035 00036
165. na the HI Note th This The R Con to OFAH n loaded the TPA starts at location 100H and thus OFAH 0FFH are deleted these 6 bytes are used tines in the program which results i to set up In this n the ted in the load however stack has also been deleted n explicit stack and LOADCOM at is Note also that the overhead for a system re but can be bothersome for and do not need the extra library procedures are a standard ELOC and Ero CO if not the fil le The MAKI is cal led to read At the end of processing by RELOC Note that the was opened for input only recorded until the file is successfully closed H does The filetype ODM is moved to the defaul and any existing copies of filename COM files ar creating a new fil ELOC xist E operation the HEX fil the COM fil remov creates a e and produce le is closed EX file does not need to be closed since it The data written to a file is not permanently d from new 1375 proc buffer into a vector called SBUFF the GETCHAR procedure returns the sour G i Disk input characters are read through the procedure GETCHA Although the DMA 31 R on line used here the GETCHAR facilities of CP M could b dure instead uses ce buffer pointer The SETMEM The SETM is an atte
166. nd 13 The Trace Mode T Command 4 5 NO E W N 1 y 0 The Untrace Mode U Command he Examine CPU State X Command 5 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 SID UTILITIES 4 1 Utility Operation 4 4 2 The HIST Utility 3 The TRACE Utility SID SAMPLE DEBUGGING SESSIONS PAG aeret MoH OAO 00 OY gt 22 25 27 27 30 34 36 38 39 42 42 43 45 50 1 SID OPERATION UNDER CP M The CP M symbolic debugger called SID expands upon the features of the CP M standard debugger described in the manual CP M Dynamic Debugging Tool DDT User s Guide and provides greatly enhanced facilities for assembly level program checkout Specifically SID includes real time breakpoints fully monitored execution symbolic disassembly assembly and memory display and fill functions Further SID operates with utilities which can be dynamically loaded with SID to provide traceback and histogram facilities The various functions of SID are given in the sections which follow dl SID Startup The SID program is initiated bv tvping one of the following commands a SID b SID x y SID SID X UTL e SID x v u v f SID u v In each case SID loads into the topmost portion of the Transient Procram Area TPA and overlavs the Console Comman
167. nd of console inout not used in SID rubout Delete and echo last character where the ctl function indicates that the control key is held down while the particular function kev is depressed Note further that the ctl R ctl U and ctl X kevs cause CP M to type a at the end of the line to indicate that the line is being discarded Various SID commands produce long typeouts at the console see the D command which displays memory for example In this case the operator can abort the typeout before it completes by typing any key at the console a return suffices The single letter commands which direct the actions of SID are typed at the beginning of the command line The valid commands are summarized below lower case command letters are translated to upper case automatically Assemble directly to memory Call to memory location from SID Display memory in hex and ASCII Fill memory with constant value Go to test program for execution Hexadecimal arithmetic InDut CCP command line List 8080 mnemonic instructions Move memory block Pass point set reset and display Read test program and symbol table Set memory to data values Trace test program execution Untrace monitor test program Examine state of CPU registers x G dd Q iO rt H m J OQ gt Although the details of each of the commands are given in later sections nearly all of the commands accept parameters following the
168. nment The device support excl Read Console Character Write Console Character Read Reader Character Write Punch Character Write List Device Character Set 1 0 Status Interrogate Device Status Print Console Buffer Read Console Buffer Interrogate Console Status The exact details of BIOS access are given in Section 2 The BDOS primitives include the following operations Disk Svstem Reset Drive Select File Creation File Open File Close Directorv Search File Delete File Rename Read Record Write Record Interrogate Available Disks Interrogate Selected Disk Set DMA Address The details of BDOS access are given in Section 3 2 BASIC I 0 FACILITIES Access to common peripherals is accomplished by passing a function number and information address to the BIOS In general the function number is passed in Register while the informa tion address is passed in Register pair D E Note that this conforms to the PL M conventions for parameter passing and thus the following PL M procedure is sufficient to link to the BIOS when a value is returned DECLARE ENTRY LITERALLY 0005H MONITOR ENTRY T MON2 PROCEDURE FUNC INFO BYTI DECLARE FUNC BYTE INFO AD GO TO ENTRY al RESS ti ND MON2 or MON1 PROCEDURE FUNC INFO ECLARE FUNC BYTE INFO ADDRESS D D GO TO ENTRY
169. no representations or warranties with resr ect to the contents hereof and specifically disclaims any implied warranties of merchantability or fitness for any particular purpose Further Digital Research reserves the right to revise this r ublication and to make changes from time to time in the content hereof without obligation of Digital Research to notify any person of such revision or changes TRADEMARKS CP M is a registered trademark of Digital Research SID and MAC are trademarks of Digital Research The SID USER S GUIDE was Prepared using the Digital Research TEX Text Formatter KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK Third Printing Januarv 1981 KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK u ECTION TABLE OF CONTENTS SID OPERATION UNDER CPM 1 1 SID Startup 1 2 SID Command Input ID SYMBOLIC EXPRESSIONS 1 Literal Hexadecimal Numbers Literal Decimal Numbers Literal Character Values Symbolic References Qualified Symbols Symbolic Operators Sample Symbolic Expressions 5 2 2 2 2 2 2 2 JOO BE W N ID COMMANDS The Assemble A Command The Call Command The Display Memory D Command The Fill Memory F Command Go G Command The Hexadecimal Value H Command The Input Line I Command The List Code L Command The Move Memory M Command 0 The Pass Counter P Command 1 The Read Code Symbols R Command 12 The Set Memory S Comma
170. nt Form b is similar except that the pass count is initialized to c Up to eight distinct pass points can be actively set at any particular time Form c displays these active pass points in the format cc oppp sssss where cc is the hexadecimal value of the pass count which is currently associated with the pass address pppp and sssss is a symbol which matches the address pppp if such a symbol exists Form d clears the pass point at address p while form e clears all active pass points Note that the command Pp 0 28 SID Users Guide Section 3 is equivalent to form d Each time a pass point is encountered SID prints the pass information in the format cc PASS pppp sssss where cc is the current pass count at pass point pppp cc is decremented when greater than 1 As above the svmbol sssss corresponding to address pppp is printed when possible The special command forms G and U can be used to disable the intermediate pass trace as the counters are decremented down to 1 Suppose for example the TYPEOUT subroutine is a part of a program under test as shown in the G command above The command P TYPEOUT 30 is issued by the operator The effect of this particular P command is to set a pass point at the location labelled by TYPEOUT which is assumed to exist in the symbol table The pass count is set to decimal 30 which allows the pass point to execute 30 times before
171. ntered through your machine s front panel switches The PUTSYS proqram can be constructed from GETSYS by chanqing only a few operations in the GETSYS program qiven above as shown in Appendix E The register pair HL become the dump address next address to write and operations upon these registers do not change within the program The READSEC subroutine is replaced by a WITESEC subroutine which performs the opposite function data from address HL is written to the track given by register B and sector given by register C It is often useful to combine GETSYS and PUTSYS into a single program during the test and development phase as shown in the Appendix 5 DISKETRE ORGANIZATION The sector allocation for the distribution version of CP M is given here for reference purposes The first sector see Fiqure 1 contains an optional software boot section Disk controllers are often set up to bring track 0 sector 1 into memory at a specific location often location 0000H The program in this sector called LBOOT has the responsibility of bringing the rernaining sectors into memory startinq at location 2900H b If your controller does not have a built in sector load you can iqnore the program in track 0 sector 1 and beqin the load from track 0 sector 2 to location 2900H b As an example the Intel MDS hardware cold start loader brings track 0 sector 1 into absolute address 3000H Thus th
172. od we now have enough information to 01 PASS 0127 STOP go back and change the source program using ED Z E A 00 B 0000 D 0200 H 0134 S 0154 P 0127 JMP 0000 REBOOT 0000 REBOOT GO 69
173. ol value The displacement value has no effect however when the program is a SID utility file type UTL The commands IDUMP HEX DUMP SYM R1000 for example cause the DUMP program to be loaded 1000 hexadecimal locations above its normal origin with properly adjusted symbol addresses Note that the bias value can be any symbolic expression and thus the command R 200 first produces a two s complement negative number which is added to each address Since overflow from a 16 bit counter is ignored this R command has the effect of loading the program 200 hexadecimal locations below the normal load address with symbol addresses biased by this same amount Error reporting during the R command is limited to the standard response which indicates that either the program or symbol file does not exist or the program or symbol file is improperly formed Similar to the SID startup messages the respons SYMBOLS occurs following program load and appears before the symbol load Thus a error before the SYMBOLS response indicates that the error occurred during the program load while the error after the SYMBOLS message indicates that an error occurred during the symbol file load operation The exact position of a symbol file error can be found by subsequently using the H command to view the portion of the symbol table which was actually loaded 3 12 The Set Memory S Command The S com
174. on breakpoint sends information to the utility program where it is tabulated for later display Note that in this particular case the operator would most likely stop the untrace mode by depressing the return key before the sequence of 65535 steps completes Following a series of data collection operations the utility DISPLAY entry point can be called to print the accumulated data Either of the command forms which follow accomplish this function C DISPLAY or Cdddd The operator may then resume the data collection process as described above followed by additional display operations At any point the operator can reinitialize the utility by typing either C INITIAL or Ciiii which causes reinitialization of the utility tables The utility may then prompt for additional parameters to complete the reinitialization process Note that loading and executing more than one utility function during a debugging session may produce unpredictable results The functions of the SID utilities are presented individually in the remaining sections 4 2 The HIST Utility The HIST Utility creates a histogram bar graph of the relative frequency of execution in selected program segments of a program under test The purpose of the HIST utility is to allow the operator to monitor hot spots in the test program where the program is executing most frequently After initial signon as described in th
175. onding address values The list is printed from the first to last symbol loaded and can be aborted during typeout by depressing any keyboard character The Input Line Command When testing programs which run in the CP M environment it is often useful to simulate the command line which is normallv prepared bv the CCP upon program load The form of the I command is EGECEC 4 CEC where the secuence of c s reoresent ASCII characters which would normally follow the test program name in the CCP command line For example the CP M DUMP program is normally started in CCP command mode by typing DUMP X COM which causes the CCP to search for and load the DUMP COM file and pass the file name X COM as a parameter to the DUMP program In particular the CCP initializes two default file control blocks along with a default command line which contains the characters following the DUMP command 22 SID Users Guide Section 3 In order to trace and debug a program such as DUMP the SID program would normallv be invoked bv tvping SID DUMP COM which loads the command file containing the DUMP machine code If the svmbol table is available the SID invocation would be SID DUMP COM DUMP SYM In either case SID loads the DUMP program and prompts the console for a command In order to simulate the CCP s command line preparation the operator would then type IX COM where the I denotes the Input comman
176. ons from to 0000H 0002H 0003H 0003H 0004H 0004H 0005H 0007H 0008H 0027H 0030H 0037H 0038H 003AH 003BH 003FH 0040H 004FH 0050H 005BH 005CH 007CH 007DH 007FH 0080H OOFFH given below for reference purposes Contents Contains a jump instruction to the warm start entry point at location 3E03H b This allows a simple programmed restart JMP 0000H or manual restart from the front panel Contains the Intel standard IOBYTE which is optionally included in the user s CBIOS as described in Section 6 not currently used reserved Contains a jump instruction to the BDOS and serves two purposes JMP 0005H provides the primary entry coint to the BDOS as described in the manual CP M Interface Guide and LHLD 0006H brings the address field of the instruction to the HL register pair This value is the lowest address in memory used by CP M assuming the CCP is beinq overlayed Note that the DDT program will chanqe the address field to reflect the reduced memory size in debug mode interrupt locations 1 through 5 not used interrupt location 6 not currently used reserved Contains a jump instruction into the DDT program when running in debug mode for programmed breakpoints but is not otherwise used by CP M not currently used reserved 16 byte area reserved for scratch by CBIOS but is not used for
177. or to move blocks of data values from one area of memor y to another The form of the M command is Ms h d where s is the start address of the move operation h is the high last address of the move and dis the starting destination address to receive the data Data moves one byte at a time from the start address to the destination address Each time a byte value is moved the start and destination addresses are incremented by one The move process terminates when the start address increments past the final f address The command M100 1FF 3000 for example replicates th ntire block of memory from 0100 through O1FF at the destination area from 3000 through 30FF in memory The data block from 0100 through O1FF remains intact Note that data areas may overlap in the move process the command M100 1FF 101 shows an instance where the value at location 0100 is propagated throughout the entire block from 0101 through 0200 A number of valid M commands are listed below M 100 FFDO 100 M X Z Y M GAMMA FF DELTA M ALPHA X 50 100 3 10 The Pass Counter P Command The P command allows the operator to set and clear pass points and pass counts in the program under test 27 SID Users Guide Section 3 The forms of the P command are a Pp b Pp c c P d Pp e gt P A pass point is a program location to monitor during execution of t6e test program Similar to a temoorary
178. ost remaining characters Note that the enclosing apostrophes are not included in the character string nor are they included in the character count with one exception In order to include the possibility of writing strings which include apostrophes a pair of contiguous apostrophes are reduced to a single apostrophe and included in the string as a normal graphic character The strings shown to the left below produce the hexadecimal values shown to the right below For these examples note that upper case ASCII alphabetics begin at th ncoded hexadecimal value 41 lower case alphabetics begin at 61 a space is hexadecimal 20 and an apostrophe is encoded as hexadecimal 60 INPUT STRING HEXADECIMAL VALUE TAS 0041 AB 4142 ABC 4243 aA 6141 ETE A 0060 EN SAI ER 6060 La 2041 A 4120 2 4 Svmbolic References Given that a svmbol table is present during a SID debugging session the operator mav reference values SID Users Guide Section 2 associated with svmbols through three forms of a svmbol reference a S b s c S where s represents a sequence of one to sixteen characters which match a symbol in the table Form a produces the address value i e the valu associated with the symbol in the table corresponding to the symbol s Form b produces the double precision 16 bit word value contained in the two memory locations given by s while form c resul
179. ot a controller characte lected for the next RK with a p a upon your a ntry The BOOT entry point gets con and is responsible for basic ing sending a signon message the read or write assuming the e HOME subroutine may be called of the particular track and ctually perform the track 00 ristics the important point is operation and is often treated arameter of 00 a point subroutine ar trol from the cold start loader system initialization includ which can be omitted in the first version If the IOBY must be set at this point which are set by the WBOOT en and control is transferred to processing The WBOOT entry point gets co The various system E function is implemented it parameters initialized tb for further try point must be the CCP at 2900H ntrol when a warm start occurs A warm start is performed wh location 0000H or when the The CP M svstem must be loade drive A up to but not includ have completed vour patch tialized as shown below location 0 1 2 location 3 location 5 6 7 see Section 9 for complete 14 never a user program branches to PU is reset from the front panel d from the first two tracks of ing the BIOS or CBIOS if vou System parameters must be ini set to JTMP WBOOT for warm starts 0000H JMP 3E03H b set initial value of IOBYTE if implemented in your CBIOS set to JMP BDOS
180. our CBIOS located at which when you use the H command produces an actual address of 11 disassembly command would thus be O w CJ L1E80 Terminate DDT by ing a control c or GO in order to prepare the patch program Your CBIOS for example can be modified using the editor and assembled using ASM producing a file called CBIOS HEX which contains the Intel formatted machine code for CBIOS in hex format In order to integrate your new CBIOS return to DDT by typing DDT CPM COM Start DDT and load the CPM image Examine the area at 1E80H where the previous version of the CBIOS resides Then type ICBIOS HEX Ready the hex file for Loading Assume that your CBIOS is being integrated into a 16K CP M system and is thus org ed at location 3E00H In order to properly locate the CBIOS in the memory image under DDT we must apply the negative bias n for a 16K system when loading the hex file This is accomplished by typing RE080 Read the file with bias 0E080H Upon completion of the read r xamine the area where the CBIOS has been loaded use a L1E80 command to ensure that it was loaded properly When you are satisfied that the patch has been made return from DDT usinq a control c or GO canmand Now use SYSGEN to replace the patched memory imaqe back onto a diskette use a test diskette until you are sure of your patch as shown in the following
181. panel RST 7 interrupt 7 or simply bail out with a cold start 16 SID SORT COM SORT SYM SID VERS 1 4 Let s start again but be a little more selective SYMBOLS in setting breakpoints NEXT PC END 0180 0100 55B7 P STOP Set a pass point at STOP as before P SORT FF and one at SORT with a Pass count of 255 G GO with pass trace disabled 01 PASS 0100 Stopped with 255 passes through SORT too many A 01 B 006A D 00FF H 013E S 0100 P 0100 LXI H 013E 0103 D LIST N 1 How s the data 0160 03 H N Hmmm looks like n was destroyed 0000 REBOOT 0 H I 0000 REBOOT 0 G COMP There s a good possibility that we re running off the end of the LIST vector into the variable N 010A COMP lets stop at the COMP label and watch the end test T5 nos A 01 B 006A D 00FF H 013F S 0100 P 010A LDA 0168 N A 00 B 006A D 00FF H 013F S 0100 P 0100 CMP M 00 I Z El A 00 B 006A D 00FF H 013F S 0100 P 010E JNZ 011C CONT Z EI A 00 B 006A D 00FF H 013F S 0100 P 0111 LXI H 013E SW Z El A 00 B 006A D 00FF H 013E S 0100 P 0114 MOV A M SW OLL5 Hey this isn t going to work We ll be comparing GO LIST N 1 with LIST N but the last LIST element is at LIST N 1 Let s try a quick fix 58 SID Users Guide Section 5 177 SID SORT COM SORT SXM SID VERS 1 4 Let s re enter SID with a clean memorv SYMBOLS image and look at the mac
182. preceding svmbol The print entrv point allows an entire string of svmbols to be printed before returning from the BIOS The string is terminated by a symbol 2 2 A Simple Example As an example consider the following PL M procedures and procedure calls which print a heading and successively read the console buffer Each console buffer is then echoed back in reverse order PRINTCHA R PROCEDURE B SEND THE ASCII CHARACTER B TO THE CONSOLI DECLARE B BYTE c CJ A ALL MONI 2 B END PRINTCHAR CRLF PROCEDURE SEND CARRIAGE RETURN LINE PRINTCHAR ODH CALL PRINTCHAR OAH 1 RLF r ED CHARACTERS PRINT PROCEDURE A PRINT THE BUFFER STARTING AT ADDRESS A P DECLARE A ADDRESS ALL MON1 9 A END PRINT DECLARE RDBUFF 130 BYTI CJ PROCEDURE READ CONSOLE CHARACTERS INTO RDBUFF RDBUFF 128 FIRST BYTE SET TO BUFFER LENGTH CALL MON1 10 RDBUFF END READ DECLARE I BYTE CALL CRLF CALL PRINT TYPE INPUT LINES DO WHILE 1 INFINITE LOOP UNTIL CONTROL C CALL CRLF CALL PRINTCHAR PROMPT WITH CALL READ I RDBUFF 1 DO WHILE I I 1 lt gt 255 CALL PRINTCHAR RDBUFF I 2 EN
183. program executes only a few instructions before the BDOS call resulting in the break information 01 PASS 0005 BDOS ZEI A 80 B 0014 D OOSC H 0000 S 0249 P 0005 JMP CCDF CCDE showing the pass count 1 pass address 0005 symbolic location BDOS register state and break address Since execution to this point was monitored and data was collected the TRACE function can be invoked C DISPLAY which results in the display 47 SID Users Guide Section 4 BDOS 0005 JMP CCDF 01CA CALL 0005 BDOS 01C8 MVI C OF 01C5 LXI D 005C FCB 01 2 STA 007C FCBCR SETUP 01 1 010A CALL 01C1 SETUP 0107 LXI SP 0257 STKTOP 0104 SHLD 0215 OLDSP 0103 DAD SP 0100 LXI H 0000 Note that in this particular case only 11 instructions were xecuted before the BDOS call and thus the full 256 instruction capacity had not been exceeded In fact the backtrace shown above gives the complete history of the DUMP execution from the first instruction at address 0100 The operator may then proceed to execute the DUMP program further by simply typing Gl UFFFF COLLECT with a break at the following call on BDOS Given that the program execution is to stop on the 20th call on BDOS the operator can type the pass command P BDOS 20 to set the pass count at 20 decimal The command UFFFF COLLECT can be entered if intermediate passes are to be traced Alternativelv the command
184. rincipal tape reading device such as Note that a si a simple optical reader or Teletype device simulta ngle peripheral can be assigned as the LIST PUNCH and READER neously If no peripheral device is assiqned as the LIST PUNCH or READ ER device the CBIOS created by the user should qive an appropriate error message so that the system does not hang if the device is accessed by PIP or some other user program For added flexibility the user can or tionally implement the iobyte function which allows reassignment of physical and logical devices The 12 iobvte function creates a mapping of loqical to phvsical altered during CP M processing corresponds to the Intel standard as follows The definition of the i a sinqle devices which can be obvte function location in memorv currently location 0003H is maintained called IOBYTE which defines the logical to physical device mapping wbich is in effect at a particular time The mapping is performed by splitting the IOBYTE into four distinct fields of two bits each called the CONSOLE READER PUNCH and LIST fields as shown below most significant least significant IOBYTE AT 0003H LIST PUNCH READER CONSOLE bits 6 7 bits 4 5 bits 2 3 bits 0 1
185. rry flag is true for example the command XC produces the SID response followed bv a space indicating that the is currentiv set awaiting possible change by the operator Enter a carriage return to leave the flag set or a 0 to reset the carry to false Similarly if the zero flag is false the command XZ produces the SID response 40 SID Users Guide indicating that the zero flag is false Section 3 Enter a carriage return if the state is to remain unchan the zero flag to true Form c allows alteration of t registers where r is one of the regist ged or a 1 to set he individual CPU S or P In this case the current cont is displayed and the console is Prompt operator types a single carriage return r names A B D H ent of the register ed for input If the r the data value remains unchanged Otherwise the symbolic expression typed by the operator is evaluated and becom s the new value of the register Only byte values are acc form is used while double byte values ptable when the XA remaining forms Note that the BC DE must be altered as a pair The SID int is typical when the A register is alter XA 03 45cr where the XA is typed by the operator by SID as the value of the A register the operator as a replacement for A s v are accepted in the and HL registers eraction shown below ed the 03 is printed and
186. s which use the n or character are processed in the same manner as in the CCP the symbol in a name or type field causes the field to be right filled with characters The input lines shown below illustrate the default area initialization which takes place for various unambiguous and ambiguous file names The areas shown to the right give the hexadecimal values which begin at the labelled addresses where ASCII values A B C and D have the hexadecimal values 41 42 43 and 44 respectively Further the special characters and have the ASCII encoded values 3A space has the hexadecimal value 20 2E 2A and 3F while an ASCII COMMAND LINE DEFAULT DATA AREA INITIALIZATION E DFCB1 00 20 20 20 20 20 20 20 20 20 20 20 00 00 00 00 DFCB2 00 20 20 20 20 20 20 20 20 20 20 20 00 00 00 00 00 00 DBUFF 00 00 24 SID Users Guide Section 3 I A B DFCBI 00 41 20 20 20 20 20 20 20 42 20 20 00 00 00 00 DFCB2 00 20 20 20 20 20 20 20 20 20 20 20 00 00 00 00 00 00 DBUFF 05 20 20 41 2 ti 42 00 IA B C b d e DFCB1 01 42 20 20 20 20 20 20 20 43 20 20 00 00 00 00 DFCB2 02 44 20 20 20 20 20 20 20 45 20 20 00 00 00 00 00 00 DBUFF OB 41 3A 42 2E 43 20 42 3A 44 2E 45 00 I AA B C D DFCB1 00 41 41 3E SE SE 42 3F 43 00 00 00 00 DFCB2 04 20 20 20 20 20 20 20 20 20 20 20 00 00 00 00 00 00
187. svmbol in the order the svmbols appear in the input file In the case of a qualified symbol SID begins by matching the first Sl symbol then scans for a match with symbol S2 continuing until symbol Sn is matched If this search and match procedure is not successful SID prints the 2 response to the console Suppose symbol table appears as for examr le that the 0100 A 0300 B 0200 A 3E00 20F0 A 0102 A in the input file with memorv initialized as shown in the previous section The unqualified and qualified svmbol references shown to the left below produce the hexadecimal values shown to the right below SYMBOL REFERENCE A GA A A C A A C A A B A A 2264 Symbolic Operators HEXADECIMAL VALUE 0100 3E02 0200 0102 0040 20F0 Literal numbers strings and symbol references can be combined into symbolic expressions using unary and binary HC 01 and delimiters Th ntire sequence of numbers symbols and operators must be written without imbedded blanks Further the sequence is evaluated from left to right producing a four digit hexadecimal value at each step in the evaluation Overflow and underflow are both ignored as the evaluation proceeds The final value becomes the command parameter whose interpretation depends upon the particular command letter which precedes it When placed between two operands the indicates addit
188. t In general a secuence of up arrow operators extracts the nth stacked item in the test program but does not change the test program stack content or stack pointer This particular operator is used most often in conjunction with the G Go command to set a breakpoint at a return from a subroutine during test and is described fully under the G command 2 7 Sample Symbolic Expressions The formulation of SID symbolic expressions is most often closely related to the program structures in the program under test Suppose we wish to debug a sorting program which contains the data items listed below _ LIST names the base of a table of byte values to sort assuming there are no more than 255 elements denoted by LIST O LIST 1 LIST 255 N is a byte variable which gives the actual number of items in LIST where the value of N is less than 256 The items to sort are stored in LIST O through LIST N 1 r is the byte subscript which indicates the next item to compare in the sorting process That is LIST I is the next item to place in sequence where I is in the range 0 through N 1 Given these data areas the command D LIST 255 for example displays th ntire area reserved for sorting LIST O LIST 1 LIST 255 12 SID Users Guide Section 2 The command D LIST I displays the LIST vector up to and including the next item to sort LIST 0 LIST 1 LIST I The command
189. ted Disk I 0 is alwavs performed disk access subrouti sector on a particular disk involved in the 1 0 operation call is made on the Note tha llowed by a lecting ano may be a single call read or write from the selected DMA address befor operation drive fol before sel changed The write operations are performed error recovery when a read or write tra a then add the IOBYTI t through a se up the disk nes which se and After all the EAD or WRITE function to there is often a single R a the direct memory access o increase your facilities the various the track and DMA address se parameters have been set up perform the actual 1 0 call to SELDSK to select a disk quence of calls on number to access number of read or write her drive for subsequent to set the DMA address operations to the selected disk operations Similarly there followed by several calls which ck and sector subroutines ar the DMA address is d before the read and call Note howeve fails bu condition to track and sec during error recovery HOMI sector The seek dependi that track 00 has been sel in exactly the same manner as S The exact responsibilities of each e BDOT WBOOT the tor ng BDOS The BDOS then retries r tha t instead reports the error same Th a re seek address remain the following bv subroutine mav or mav n
190. terest in the backtrace The program is then 46 SID Users Guide Section 4 run to an intermediate location where the test begins At this intermediate test point the U command is used to xecute the test program in fullv monitored mode with data collection at the COLLECT entrv point of TRACE Upon encountering one of the pass points in U mode program execution breaks and the operator regains control in SID command mode The DISPLAY function of TRACE is then invoked to obtain the required backtrace information u As an example of this process suppose the DUMP program is in memory with the TRACE utility as shown above Suppose further that the operator wishes to view the actions of the DUMP program on the first call to BDOS i e the first call from DUMP to the CP M Basic Disk Operating System through location 0005 Assuming the symbol table is loaded the operator first types P BDOS which sets a pass point at the BDOS entry with corresponding pass count 1 The operator then executes DUMP in monitored mode collecting data at each instruction UFFFF COLLI GE The untrace count of FFFF 65535 instructions is of course too many in this case but the assumption is that the DUMP program will stop at the BDOS call before the instruction count is exceeded if it does not the operator can depress any keyboard character to force a program stop In this case the DUMP
191. thout a test program IX COM Initialize the input line R Read the test program to memory The response from SID in this case is exactly the same as the normal initialization with the NEXT PC END message as described in Section 1 A program and symbol file can be read by preceding the R command with an I command of the form I x y u v where x y is the program to load and u v is the symbol table file Note that y is usually the type COM x is usually the same as u and v is usually the type SYM Thus a typical command sequence of this form would be IDUMP COM DUMP SYM R which reads the DUMP COM program file into the Transient Program Area and loads the symbol table with the information given by DUMP SYM Programs with file type HEX load into the locations specified in the Intel formatted hexadecimal records while programs with file type UTL are assumed to be SID utility functions which load and relocate automatically All other file types are assumed absolute and load starting at the base of the transient area Utility functions automatically remove any existing symbol information when they relocate but in all other cases the symbol load operations are cumulative In particular the special input form B LIN R skips the program load since there is an asterisk in the program name position and loads only the symbol table file Thus a secuence of the above form could be used to
192. to the symbol load process In particular the error following the SYMBOLS response is due to a non existent or incorrectly formatted symbol file Examples of typical commands which start the SID program are shown below COMMAND FORM COMMAND EXAMPLE a SID b SID DUMP COM b SID DUMP ASM c SID SAMPLE HEX c SID DUMP HEX d SID TRACE UTL a SID HIST UTL e SID DUMP COM DUMP SXM e SID DUMP HEX DUMP SXM e SID TEST COM TEST ZOT f SID DUMP SYM 1 2 SID Command Input Command input to SID consists of a series of command lines which direct the actions of the SID program These commands allow display of memory and CPU registers and direct the execution and breakpoint operations during test program debugging SID prompts the console for input by typing when ready to accept the next command Each command is based upon a single letter followed by optional parameters and terminated by a carriage return Note that all standard line editing features of CP M are available with a maximum of 64 command command characters The CP M line editing functions are SID Users Guide Section 1 ct1 C CP M system reboot return to CCP ctl E Physical end of line ctl P Print console output on off toggle ctl R Retvpe current inidut line ctl Stop start console outidut ctixy Delete current input line Gti Same as ctl U ctl Z E
193. try 0005 entry point to disk system from user programs 7 SAMPLE 23 PROGRAMS This section contains two sample programs which interface with the CP M operating svstem The first program is written in assemblv language and is the source program for the DUMP utility The second program is the CP M LOAD utility written in PL M he assembly language program begins with a number of equates for svs tem entry points and program constants The equate BDOS EQU OOOSH for example gives the CP M entry point for peripheral I 0 functions The defualt file control block Address is also defined FCB along with the default buffer address BUFF Note that the program is set up to run at location 100H is first set up SP to the local which is the base of the transient program area The stack by saving the entry stack pointer into OLDSP and resetting stack The stack pointer upon entry belongs to the console command processor and need not be saved unless control is to return to the CCP upon exit location 0000H listed below BREAK PCHAR ti poj poj I GNB That is if the program terminates with a reboot branch to then the entry stack pointer need not be saved The program then jumps to MAIN past a number of subroutines which are when called checks to see if there is a console character ready BREAK is used to stop the listing at the console pr
194. ts in the single precision 8 bit byte value at s in memory Suppose for example that the input symbol table contains two symbols and appears as 0100 GAMMA 0102 DELTA Further suppose that memory starting at 0100 contains the following byte data values 0100 02 0101 3E 0102 4D 0103 22 Based upon this symbol table and these memory values the symbol references shown to the left below produce the hexadecimal values shown to the right below Recall that 16 bit 8080 memory values are stored with the least Significant byte first and thus the word values at 0100 and 0102 are 3E02 and 224D respectively SYMBOL REFERENCE HEXADECIMAL VALUE GAMMA 0100 DELTA 0102 GAMMA 3E02 DELTA 2240 GAMMA 0002 DELTA 0040 2 5 Qualified Symbols It should be noted that duplicate symbols can occur in the symbol table due to separately assembled or compiled modules which independently use the same name for differing subroutines or data areas Further block structured languages such as PL M allow nested name definitions which are identical but non conflicting Thus SID allows reference to qualified symbols which take the form ST S2 x A St where Sl through Sn represent symbols which are present in the table during a oarticular session SID alwavs searches the svmbol table from the first to 10 SID Users Guide Section 2 last
195. various ooerators to provide access to subscripted and indirectly addressed data or program areas The purpose of this section is to completely describe symbolic expressions so that they may be incorporated as command parameters in the individual command forms which follow this section 2 1 Literal Hexadecimal Numbers SID normally accepts and displays values in the hexadecimal number base to form 16 bit values from up to four hexadecimal digits The valid hexadecimal digits consist of the decimal digits 0 through 9 along with the hexadecimal digits A B C D E and F corresponding to the decimal values 10 through 15 respectively Note that SID translates lower case hexadecimal digits to upper case outside of string apostrophes A literal hexadecimal number in SID consists of one or more contiguous hexadecimal digits If four digits are typed then the leftmost digit is most significant while the rightmost digit is least significant If the number contains more than four digits the rightmost four are taken as significant and the remaining leftmost digits are discarded The values to the left below produce the hexadecimal and decimal values shown following the to the right below INPUT VALUE HEXADECIMAL DECIMAL 1 0001 1 100 0100 256 fffe FFFE 65534 10000 0000 0 38001 8001 32769 2 2 Literal Decimal Numbers Although SID s normal number base is hexadecima
196. which is the primary entry point to CP M for transient proqrams 0005H JMP 3206H b details of page zero use t the BIOS does not attempt given below CONST CONIN CONOUT LIST PUNCH HOME SELDSK Upon completion of the initialization the WBOOT progran must branch to the CCP at 2900H b to re start the system Upon entry to the CCP register C is set to the drive to select after system initialization normally drive A is selected by setting register C to zero Sample the status of the currently assigned console device and return a OFFH in register A if a character is ready to read and 00H in register A if no console characters are ready Read the next console character into register A and set the parity bit high order bit to zero If no console character is ready wait until a character is typed before returning Send the character from register C to the console output de vice The character is in ASCII with high order parity bit set to zero You may want to include a time out on a line feed or carriage return if your console device requires som time interval at the end of the line such as a TI Silent 700 terminal You can if you wish filter out control char acters vhich cause your console device to react in a strange way a control z causes the Lear Seigler terminal to clear the screen for example Send the character from register C to the currentl
197. y assigned listing device Ihe character is in ASCII with zero parity Send the character from register C to the currently assiqned pinch device The character is in ASCII with zero parity Read the next character from the currently assigned reader d vice into register A with zero parity high order bit must be zero an end of file condition is reported by returning an ASCII control z 1AH Return the disk head of the currently selected disk initially disk A to the track 00 position If your controller allows access to the track 0 flag from the drive step the head until the track 0 flag is detected vour controller does not support this feature you can translate the HOME call into a call on SETTRK with a parameter of 0 Select the disk drive given by register for further opera tions where reqister contains 0 for drive A and 1 for drive B the standard CP M distribution version supports a maximum of two drives vour svstem has onlv one drive you may wish to give an error message at the console and terminate execution You can if you wish type a message at the console to switch diskettes to simulate a two drive 15 SETDMA operation cannot svstem In this case vou must keep account of the current drive and tvpe an appropriate messaqe when the drive chanaes Register C contains the track number for subsequent disk accesses on

Download Pdf Manuals

image

Related Search

Related Contents

Proteção Diferencial de Barras de Alta Impedância - SEL-587Z  Manual de Instalação e Uso do PDV  DeepXcav 2011 – User`s Manual USER` S MANUAL  DuPont WFDW120009W Instructions / Assembly  Conceptronic 150N USB Wireless Adapter  Herunterladen  日本語 - キシダ化学株式会社  Produktinformation (Deutsch) - Honeywell Building Solutions  Viking F20288 User's Manual  

Copyright © All rights reserved.
Failed to retrieve file