***************************************************************** * * * MORROW DESIGNS CP/M VERS 2.2 COLD BOOT LOADER. * * CBIOS REVISION E.2, 3/4/82. * * * * THE FOLLOWING ROUTINES WILL BOOT CP/M FROM THE * * DISK JOCKEY 2D REV. B 8 INCH DISK CONTROLLER (DJ2D/B), * * * * 8 INCH FLOPPY DISK BOOT LOADER FOR THE * * MORROW DESIGNS DISK JOCKEY 2D/B (DJ2DB) * * * * THE 'ORDER' COLUMN IS THE INTERLEAVE SEQUENCE USED BY THE * * LOADER DURING THE LOAD. * * * * TRACK SECTOR SYSGEN LOAD ORDER NAME * * * * 0 1 900 FF00 0 BOOT LOADER * * 0 2 980 UNUSED * * 0 3 A00 * * 0 4 A80 * * 0 5 B00 9100 1 CCP * * 0 6 B80 9180 12 * * 0 7 C00 9200 2 * * 0 8 C80 9280 13 * * 0 9 D00 9300 3 * * 0 10 D80 9380 14 * * 0 11 E00 9400 4 * * 0 12 E80 9480 15 * * 0 13 F00 9500 5 * * 0 14 F80 9580 16 * * 0 15 1000 9600 6 * * 0 16 1080 9680 17 * * 0 17 1100 9700 7 * * 0 18 1180 9780 18 * * 0 19 1200 9800 8 * * 0 20 1280 9880 19 * * 0 21 1300 9900 9 BDOS * * 0 22 1380 9980 20 * * 0 23 1400 9A00 10 * * 0 24 1480 9A80 21 * * 0 25 1500 9B00 11 * * 0 26 1580 9B80 22 * * * * TRACK 1 IS RECORDED IN DOUBLE DENSITY FORMAT. THERE ARE * * 1024 BYTES PER SECTOR. * * * * 1 1 1600 9C00 4 * * 1 2 1A00 A000 1 * * 1 3 1E00 A400 5 CBIOS (@ A700H) * * 1 4 2200 A800 2 * * 1 5 2600 AC00 6 * * 1 6 2A00 B000 3 * * 1 7 2E00 B400 7 * * 1 8 3200 B800 UNUSED * * * * THREE SPARE SECTORS (TRACK 0, SECTORS 2 TO 4) HAVE BEEN * * PROVIDED FOR A MORE ADVANCED BOOT LOADER AT A LATER DATE. * * * * THE WARM BOOT LOADER STARTS ON TRACK 0, SECTOR 5 AND * * CONTINUES THROUGH TO TRACK 1 SECTOR 3. ONLY THE FIRST * * 3/4 K BYTES OF TRACK 1, SECTOR 3 IS LOADED SINCE CP/M * * REQUIRES THAT THE WARM BOOT LOADER LOAD UP TO THE START * * OF (BUT NOT PAST) THE CBIOS JUMP TABLE. * * * ***************************************************************** ***************************************************************** * * * THE FOLLOWING TABLE GIVES A GENERAL IDEA AS TO WHERE THE * * VARIOUS PARTS OF OF THE OPERATING SYSTEM ARE IN MEMORY. * * * * THE ONLY CHANGES TO THE MAP THAT I SEE IN THE FUTURE IS * * THE INCREASING THE SPACE FOR THE UNINITIALIZED TABLES * * FOLLOWING THE CBIOS. THE AMOUNT OF CODE AND TABLE SPACE * * THAT CAN ACTUALLY BE LOADED FROM THE DISK IS FIXED BY THE * * AMOUNT OF SPACE AVAILABLE ON THE SYSTEM TRACKS. * * * * OUR MOST RESTRICTIVE (SMALLEST) DRIVE IS THE 5 1/4 INCH * * 'MINNIE FLOPPY'. THIS DRIVE HAS 20 512 BYTE SECTORS FOR * * A TOTAL OF 10K BYTES ON THE SYSTEM TRACKS. THE 8 INCH * * FLOPPY DISK DRIVE IS ALSO VERY CLOSE TO BEING FILLED UP. * * * * SINCE 512 BYTES ARE RESERVED FOR THE COLD BOOT LOADER WE * * HAVE A TOTAL OF 9.5K BYTES FOR THE OPERATING SYSTEM. OUT * * OF THIS 5.5K BYTES ARE USED BY THE (CCP + BDOS) LEAVING * * US WITH A TOTAL OF 4K BYTES OF LOADED CODE AND DATA SPACE * * TO PLAY WITH. RIGHT NOW WE ARE USING ALL OF THIS SPACE * * SO ANY MAJOR ADDITIONS WILL HAVE TO RESULT IN A LITTLE * * (LOT?) OF CODE SHUFFELING OR IN THE CREATION OF A CBIOS * * THAT SIMPLY WILL NOT FIT ON A SMALL DISK DRIVE. * * * * SYSGEN 48K 56K 60K 62K 64K * * IMAGE CP/M CP/M CP/M CP/M CP/M * * * * 900 ~~~~ ~~~~ ~~~~ ~~~~ ~~~~ LOADER * * B00 9500 B500 C500 CD00 D500 CCP * * 1300 9D00 BD00 CD00 D500 DD00 BDOS * * 2100 AB00 CB00 DB00 E300 ED00 CBIOS * * 3100 BB00 DB00 EB00 F300 FB00 TABLES * * 35FF BFFF DFFF EFFF F7FF FFFF THE END * * * * ~~~~ 8D00 AD00 BD00 C500 CD00 DDT * * * ***************************************************************** 0038 = MSIZE EQU 56 ;MEMORY SIZE OF TARGET CP/M 0010 = BIOSLN EQU 10H ;BIOS LENGTH 0011 = CODLEN EQU 11H ;CODE LENGTH 0800 = CCPLN EQU 800H 0E00 = BDOSLN EQU 0E00H E000 = SIZE EQU (MSIZE*1024) BA00 = CCP EQU SIZE-(BIOSLN*100H+CCPLN+BDOSLN) C200 = BDOS EQU CCP+CCPLN D000 = BIOS EQU CCP+CCPLN+BDOSLN D000 = CBOOT EQU BIOS ;COLD BOOT ADDRESS FOR CP/M BA00 = LOADDR EQU CCP ;LOAD ADDRESS FOR FLOPPY 000A = RETRIES EQU 10 ;MAXIMUM # OF DISK RETRIES ***************************************************************** * * * THE FOLLOWING EQUATES ARE FOR THE DISK JOCKEY 2D/B. * * * ***************************************************************** E000 = ORIGIN EQU 0E000H ;ORGIN OF DJ 2D MOD B PROM E400 = DJRAM EQU ORIGIN+400H ;DISK JOCKEY 2D MOD B ROUTINES E009 = TKZERO EQU ORIGIN+9H ;TRACK 0 SEEK E00C = TRKSET EQU ORIGIN+0CH ;SET TRACK E00F = SETSEC EQU ORIGIN+0FH ;SET SECTOR E012 = SETDMA EQU ORIGIN+12H ;SET DMA ADDRESS E015 = DREAD EQU ORIGIN+15H ;READ SECTOR E024 = DMAST EQU ORIGIN+24H ;GET DMA ADDRESS E027 = STATUS EQU ORIGIN+27H ;DISK STATUS E02A = DSKERR EQU ORIGIN+2AH ;FLASH ERROR LIGHT E02D = SETDEN EQU ORIGIN+2DH ;SET DENSITY E700 = BOOT EQU DJRAM+300H ;UPPER 3/4 OF ON BOARD FLOPPY RAM 2200 = OFFSET EQU 900H-BOOT ;DDT OFFSET E700 ORG BOOT ***************************************************************** * * * COLD BOOT LOADER FOR THE DISK JOCKEY 2D REVISION B CONTROLLER * * * ***************************************************************** E700 3E03 T0BOOT MVI A,5-2 ;FIRST SECTOR - 2 E701 = NEWSEC EQU $-1 E702 3C INR A ;UPDATE SECTOR # E703 3C INR A E704 FE1B CPI 27 ;SIZE OF TRACK IN SECTORS + 1 E705 = TRKSIZ EQU $-1 E706 DA14E7 JC NOWRAP ;SKIP IF NOT AT END OF TRACK E709 C23FE7 JNZ T1BOOT ;DONE WITH THIS TRACK E70A = EXIT EQU $-2 E70C D615 SUI 27-6 ;BACK UP TO SECTOR 6 E70D = BACKUP EQU $-1 E70E 2180B9 LXI H,LOADDR-80H ;MEMORY ADDRESS OF SECTOR - 100H E70F = NXTDMA EQU $-2 E711 221CE7 SHLD NEWDMA E714 3201E7 NOWRAP STA NEWSEC ;SAVE THE UPDATED SECTOR # E717 4F MOV C,A E718 CD0FE0 CALL SETSEC ;SET UP THE SECTOR E71B 2100B9 LXI H,LOADDR-100H ;MEMORY ADDRESS OF SECTOR - 100H E71C = NEWDMA EQU $-2 E71E 110001 LXI D,100H ;UPDATE DMA ADDRESS E71F = SECSIZ EQU $-2 E721 19 DAD D E722 221CE7 NOWRP SHLD NEWDMA ;SAVE THE UPDATED DMA ADDRESS E725 44 MOV B,H E726 4D MOV C,L E727 CD12E0 CALL SETDMA ;SET UP THE NEW DMA ADDRESS E72A 01000A LXI B,RETRIES*100H+0;MAXIMUM # OF ERRORS, TRACK # E72B = NXTRTY EQU $-2 E72D C5 FREAD PUSH B E72E CD0CE0 CALL TRKSET ;SET UP THE PROPER TRACK E731 CD15E0 CALL DREAD ;READ THE SECTOR E734 C1 POP B E735 D200E7 JNC T0BOOT ;CONTINUE IF NO ERROR E738 05 DCR B E739 C22DE7 JNZ FREAD ;KEEP TRYING IF ERROR E73C C32AE0 JMP DSKERR ;TOO MANY ERRORS, FLASH THE LIGHT E73F 2100D0 T1BOOT LXI H,CBOOT ;WE JUMP TO CBOOT NEXT TIME E742 220AE7 SHLD EXIT E745 0E01 MVI C,1 ;SELECT DOUBLE DENSITY E747 CD2DE0 CALL SETDEN E74A AF XRA A ;FIRST SECTOR - 2 E74B 3201E7 STA NEWSEC E74E 3E08 MVI A,8 ;SIZE OF (LOGICAL) TRACK + 1 E750 3205E7 STA TRKSIZ E753 3D DCR A ;NUMBER OF SECTORS TO BACK UP E754 320DE7 STA BACKUP E757 2100C1 LXI H,LOADDR+0700H ;DMA START ADDRESS FOR FIRST REVOLUTION - 2048 E75A 221CE7 SHLD NEWDMA E75D 2100BD LXI H,LOADDR+0300H ;DMA START ADDRESS FOR SECOND REVOLUTION - 2048 E760 220FE7 SHLD NXTDMA E763 210008 LXI H,2048 ;DIFFERENCE BETWEEN DMA ADDRESSES E766 221FE7 SHLD SECSIZ E769 21010A LXI H,RETRIES*100H+1;MAXIMUM # OF ERRORS, TRACK # E76C 222BE7 SHLD NXTRTY E76F C300E7 JMP T0BOOT ;GO LOAD IN TRACK 1 E772 END