1 ***************************************************************** 2 * * 3 * MORROW DESIGNS CP/M VERS 2.2 COLD BOOT LOADER. * 4 * CBIOS REVISION E.2, 3/4/82. * 5 * * 6 * THE FOLLOWING ROUTINES WILL BOOT CP/M FROM THE * 7 * DISK JOCKEY 2D REV. B 8 INCH DISK CONTROLLER (DJ2D/B), * 8 * * 9 * 8 INCH FLOPPY DISK BOOT LOADER FOR THE * 10 * MORROW DESIGNS DISK JOCKEY 2D/B (DJ2DB) * 11 * * 12 * THE 'ORDER' COLUMN IS THE INTERLEAVE SEQUENCE USED BY THE * 13 * LOADER DURING THE LOAD. * 14 * * 15 * TRACK SECTOR SYSGEN LOAD ORDER NAME * 16 * * 17 * 0 1 900 FF00 0 BOOT LOADER * 18 * 0 2 980 UNUSED * 19 * 0 3 A00 * 20 * 0 4 A80 * 21 * 0 5 B00 9100 1 CCP * 22 * 0 6 B80 9180 12 * 23 * 0 7 C00 9200 2 * 24 * 0 8 C80 9280 13 * 25 * 0 9 D00 9300 3 * 26 * 0 10 D80 9380 14 * 27 * 0 11 E00 9400 4 * 28 * 0 12 E80 9480 15 * 29 * 0 13 F00 9500 5 * 30 * 0 14 F80 9580 16 * 31 * 0 15 1000 9600 6 * 32 * 0 16 1080 9680 17 * 33 * 0 17 1100 9700 7 * 34 * 0 18 1180 9780 18 * 35 * 0 19 1200 9800 8 * 36 * 0 20 1280 9880 19 * 37 * 0 21 1300 9900 9 BDOS * 38 * 0 22 1380 9980 20 * 39 * 0 23 1400 9A00 10 * 40 * 0 24 1480 9A80 21 * 41 * 0 25 1500 9B00 11 * 42 * 0 26 1580 9B80 22 * 43 * * 44 * TRACK 1 IS RECORDED IN DOUBLE DENSITY FORMAT. THERE ARE * 45 * 1024 BYTES PER SECTOR. * 46 * * 47 * 1 1 1600 9C00 4 * 48 * 1 2 1A00 A000 1 * 49 * 1 3 1E00 A400 5 CBIOS (@ A700H) * 50 * 1 4 2200 A800 2 * 51 * 1 5 2600 AC00 6 * 52 * 1 6 2A00 B000 3 * 53 * 1 7 2E00 B400 7 * 54 * 1 8 3200 B800 UNUSED * 55 * * 56 * THREE SPARE SECTORS (TRACK 0, SECTORS 2 TO 4) HAVE BEEN * 57 * PROVIDED FOR A MORE ADVANCED BOOT LOADER AT A LATER DATE. * 58 * * 59 * THE WARM BOOT LOADER STARTS ON TRACK 0, SECTOR 5 AND * 60 * CONTINUES THROUGH TO TRACK 1 SECTOR 3. ONLY THE FIRST * 61 * 3/4 K BYTES OF TRACK 1, SECTOR 3 IS LOADED SINCE CP/M * 62 * REQUIRES THAT THE WARM BOOT LOADER LOAD UP TO THE START * 63 * OF (BUT NOT PAST) THE CBIOS JUMP TABLE. * 64 * * 65 ***************************************************************** 66 67 ***************************************************************** 68 * * 69 * THE FOLLOWING TABLE GIVES A GENERAL IDEA AS TO WHERE THE * 70 * VARIOUS PARTS OF OF THE OPERATING SYSTEM ARE IN MEMORY. * 71 * * 72 * THE ONLY CHANGES TO THE MAP THAT I SEE IN THE FUTURE IS * 73 * THE INCREASING THE SPACE FOR THE UNINITIALIZED TABLES * 74 * FOLLOWING THE CBIOS. THE AMOUNT OF CODE AND TABLE SPACE * 75 * THAT CAN ACTUALLY BE LOADED FROM THE DISK IS FIXED BY THE * 76 * AMOUNT OF SPACE AVAILABLE ON THE SYSTEM TRACKS. * 77 * * 78 * OUR MOST RESTRICTIVE (SMALLEST) DRIVE IS THE 5 1/4 INCH * 79 * 'MINNIE FLOPPY'. THIS DRIVE HAS 20 512 BYTE SECTORS FOR * 80 * A TOTAL OF 10K BYTES ON THE SYSTEM TRACKS. THE 8 INCH * 81 * FLOPPY DISK DRIVE IS ALSO VERY CLOSE TO BEING FILLED UP. * 82 * * 83 * SINCE 512 BYTES ARE RESERVED FOR THE COLD BOOT LOADER WE * 84 * HAVE A TOTAL OF 9.5K BYTES FOR THE OPERATING SYSTEM. OUT * 85 * OF THIS 5.5K BYTES ARE USED BY THE (CCP + BDOS) LEAVING * 86 * US WITH A TOTAL OF 4K BYTES OF LOADED CODE AND DATA SPACE * 87 * TO PLAY WITH. RIGHT NOW WE ARE USING ALL OF THIS SPACE * 88 * SO ANY MAJOR ADDITIONS WILL HAVE TO RESULT IN A LITTLE * 89 * (LOT?) OF CODE SHUFFELING OR IN THE CREATION OF A CBIOS * 90 * THAT SIMPLY WILL NOT FIT ON A SMALL DISK DRIVE. * 91 * * 92 * SYSGEN 48K 56K 60K 62K 64K * 93 * IMAGE CP/M CP/M CP/M CP/M CP/M * 94 * * 95 * 900 ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ LOADER * 96 * B00 9500 B500 C500 CD00 D500 CCP * 97 * 1300 9D00 BD00 CD00 D500 DD00 BDOS * 98 * 2100 AB00 CB00 DB00 E300 ED00 CBIOS * 99 * 3100 BB00 DB00 EB00 F300 FB00 TABLES * 100 * 35FF BFFF DFFF EFFF F7FF FFFF THE END * 101 * * 102 * ~~~~ 8D00 AD00 BD00 C500 CD00 DDT * 103 * * 104 ***************************************************************** 105 106 107 0038 = MSIZE EQU 56 ;MEMORY SIZE OF TARGET CP/M 108 109 0010 = BIOSLN EQU 10H ;BIOS LENGTH 110 0011 = CODLEN EQU 11H ;CODE LENGTH 111 112 0800 = CCPLN EQU 800H 113 0E00 = BDOSLN EQU 0E00H 114 115 E000 = SIZE EQU (MSIZE*1024) 116 BA00 = CCP EQU SIZE-(BIOSLN*100H+CCPLN+BDOSLN) 117 C200 = BDOS EQU CCP+CCPLN 118 D000 = BIOS EQU CCP+CCPLN+BDOSLN 119 120 D000 = CBOOT EQU BIOS ;COLD BOOT ADDRESS FOR CP/M 121 BA00 = LOADDR EQU CCP ;LOAD ADDRESS FOR FLOPPY 122 123 000A = RETRIES EQU 10 ;MAXIMUM # OF DISK RETRIES 124 125 ***************************************************************** 126 * * 127 * THE FOLLOWING EQUATES ARE FOR THE DISK JOCKEY 2D/B. * 128 * * 129 ***************************************************************** 130 131 E000 = ORIGIN EQU 0E000H ;ORGIN OF DJ 2D MOD B PROM 132 E400 = DJRAM EQU ORIGIN+400H 133 ;DISK JOCKEY 2D MOD B ROUTINES 134 E009 = TKZERO EQU ORIGIN+9H ;TRACK 0 SEEK 135 E00C = TRKSET EQU ORIGIN+0CH ;SET TRACK 136 E00F = SETSEC EQU ORIGIN+0FH ;SET SECTOR 137 E012 = SETDMA EQU ORIGIN+12H ;SET DMA ADDRESS 138 E015 = DREAD EQU ORIGIN+15H ;READ SECTOR 139 E024 = DMAST EQU ORIGIN+24H ;GET DMA ADDRESS 140 E027 = STATUS EQU ORIGIN+27H ;DISK STATUS 141 E02A = DSKERR EQU ORIGIN+2AH ;FLASH ERROR LIGHT 142 E02D = SETDEN EQU ORIGIN+2DH ;SET DENSITY 143 144 E700 = BOOT EQU DJRAM+300H ;UPPER 3/4 OF ON BOARD FLOPPY RAM 145 2200 = OFFSET EQU 900H-BOOT ;DDT OFFSET 146 147 E700 ORG BOOT 148 149 ***************************************************************** 150 * * 151 * COLD BOOT LOADER FOR THE DISK JOCKEY 2D REVISION B CONTROLLER * 152 * * 153 ***************************************************************** 154 155 E700 3E03 T0BOOT MVI A,5-2 ;FIRST SECTOR - 2 156 E701 = NEWSEC EQU $-1 157 E702 3C INR A ;UPDATE SECTOR # 158 E703 3C INR A 159 E704 FE1B CPI 27 ;SIZE OF TRACK IN SECTORS + 1 160 E705 = TRKSIZ EQU $-1 161 E706 DA14E7 JC NOWRAP ;SKIP IF NOT AT END OF TRACK 162 E709 C23FE7 JNZ T1BOOT ;DONE WITH THIS TRACK 163 E70A = EXIT EQU $-2 164 E70C D615 SUI 27-6 ;BACK UP TO SECTOR 6 165 E70D = BACKUP EQU $-1 166 E70E 2180B9 LXI H,LOADDR-80H ;MEMORY ADDRESS OF SECTOR - 100H 167 E70F = NXTDMA EQU $-2 168 E711 221CE7 SHLD NEWDMA 169 E714 3201E7 NOWRAP STA NEWSEC ;SAVE THE UPDATED SECTOR # 170 E717 4F MOV C,A 171 E718 CD0FE0 CALL SETSEC ;SET UP THE SECTOR 172 E71B 2100B9 LXI H,LOADDR-100H ;MEMORY ADDRESS OF SECTOR - 100H 173 E71C = NEWDMA EQU $-2 174 E71E 110001 LXI D,100H ;UPDATE DMA ADDRESS 175 E71F = SECSIZ EQU $-2 176 E721 19 DAD D 177 E722 221CE7 NOWRP SHLD NEWDMA ;SAVE THE UPDATED DMA ADDRESS 178 E725 44 MOV B,H 179 E726 4D MOV C,L 180 E727 CD12E0 CALL SETDMA ;SET UP THE NEW DMA ADDRESS 181 E72A 01000A LXI B,RETRIES*100H+0;MAXIMUM # OF ERRORS, TRACK # 182 E72B = NXTRTY EQU $-2 183 E72D C5 FREAD PUSH B 184 E72E CD0CE0 CALL TRKSET ;SET UP THE PROPER TRACK 185 E731 CD15E0 CALL DREAD ;READ THE SECTOR 186 E734 C1 POP B 187 E735 D200E7 JNC T0BOOT ;CONTINUE IF NO ERROR 188 E738 05 DCR B 189 E739 C22DE7 JNZ FREAD ;KEEP TRYING IF ERROR 190 E73C C32AE0 JMP DSKERR ;TOO MANY ERRORS, FLASH THE LIGHT 191 192 E73F 2100D0 T1BOOT LXI H,CBOOT ;WE JUMP TO CBOOT NEXT TIME 193 E742 220AE7 SHLD EXIT 194 E745 0E01 MVI C,1 ;SELECT DOUBLE DENSITY 195 E747 CD2DE0 CALL SETDEN 196 E74A AF XRA A ;FIRST SECTOR - 2 197 E74B 3201E7 STA NEWSEC 198 E74E 3E08 MVI A,8 ;SIZE OF (LOGICAL) TRACK + 1 199 E750 3205E7 STA TRKSIZ 200 E753 3D DCR A ;NUMBER OF SECTORS TO BACK UP 201 E754 320DE7 STA BACKUP 202 E757 2100C1 LXI H,LOADDR+0700H ;DMA START ADDRESS FOR FIRST REVOLUTION - 2048 203 E75A 221CE7 SHLD NEWDMA 204 E75D 2100BD LXI H,LOADDR+0300H ;DMA START ADDRESS FOR SECOND REVOLUTION - 2048 205 E760 220FE7 SHLD NXTDMA 206 E763 210008 LXI H,2048 ;DIFFERENCE BETWEEN DMA ADDRESSES 207 E766 221FE7 SHLD SECSIZ 208 E769 21010A LXI H,RETRIES*100H+1;MAXIMUM # OF ERRORS, TRACK # 209 E76C 222BE7 SHLD NXTRTY 210 E76F C300E7 JMP T0BOOT ;GO LOAD IN TRACK 1 211 212 E772 END BACKUP E70D 165# 201 BDOS C200 37# 85 97 117# BDOSLN 0E00 113# 116 118 BIOS D000 118# 120 BIOSLN 0010 109# 116 BOOT E700 3 6 9 17 57 59 62 83 144# 145 147 151 CBOOT D000 120# 192 CCP BA00 21 85 96 116# 117 118 121 CCPLN 0800 112# 116 117 118 CODLEN 0011 110# DJRAM E400 132# 144 DMAST E024 139# DREAD E015 138# 185 DSKERR E02A 141# 190 EXIT E70A 163# 193 FREAD E72D 183# 189 LOADDR BA00 121# 166 172 202 204 MSIZE 0038 107# 115 NEWDMA E71C 168 173# 177 203 NEWSEC E701 156# 169 197 NOWRAP E714 161 169# NOWRP E722 177# NXTDMA E70F 167# 205 NXTRTY E72B 182# 209 OFFSET 2200 145# ORIGIN E000 131# 132 134 135 136 137 138 139 140 141 142 RETRIES 000A 123# 181 208 SECSIZ E71F 175# 207 SETDEN E02D 142# 195 SETDMA E012 137# 180 SETSEC E00F 136# 171 SIZE E000 115# 116 STATUS E027 140# T0BOOT E700 155# 187 210 T1BOOT E73F 162 192# TKZERO E009 134# TRKSET E00C 135# 184 TRKSIZ E705 160# 199