********************************************************* * * * ITHICA 512 BYTE DPB INSTALLER FOR DJ2D BIOS * * * * * * (C) 1981, Software Tools * * P.O. Box 80 * * Newport Beach * * NSW, 2106 * * AUSTRALIA * * * * Written by: Bill Bolton * * * *18/Jun/82 Version 1.2 Updated for Godbout Disk 1 * * systems.WFB * * * *15/Mar/82 Version 1.1 (Initial Release) for Morrow * * DJ2D systems.WFB * * * * ------------------------------------------- * * * * INPUT PARAMETERS: * * * * None * * * * ACTION: * * * * Overlays new DPB into * * Godbout DPB area * * * * ------------------------------------------ * * * * Assembler: MAC.ASM (Digital Research) * * * * Support: MACRO3.LIB (Software Tools) * * * ********************************************************* ; ; Hackers Notes: ; ; N.B. Intersystems 2D format doesn't have Track 0 in ; single density so watch out !!!!!! ; OFFSET1 EQU 10 ;OFFSET DPH TO DPB POINTER OFFSET2 EQU 16 ;OFFSET FROM STORE 1 TO STORE 2 DSMOFF EQU 5 WBOOT EQU 0 ;CP/M WARM BOOT ENTRY ; MACLIB MACRO3 ;SOFTWARE TOOLS SPECIAL MACROS ; ORG 100H ; START: LXI H,0 ;Set up new stack DAD SP SHLD OLDSTAK LXI SP,STACK ; PRINT <'Software Tools - Dynamic Disk Parameter Block Modifier'> PRINT PRINT <'This version installs Intersystems 512 DPB',CR,LF,LF> ; DISKIO ?DRIVE ;GET CURRENT DRIVE MOV C,A ;C <---- CURRENT DRIVE CALLBIOS DSELDSK ;HL POINTS TO DPH ON RETURN NEXT: LXI D,OFFSET1 ;DE <---- OFFSET TO DPB ADDRESS IN DPH DAD D ;HL <---- POINTS TO DPB ADDRESS CONTENTS ;HL <---- 1024 BYTE DPB ADDRESS PUSH H LXI D,DSMOFF ;Add offset to point to # dir enteries DAD D MOV A,M ;GET DSM VALUE CPI 02BH ;SINGLE SIDED 1024 BYTE? JNZ DOUBLE ;NO POP H LXI D,-32 ;OFFSET TO 512 BYTE BLOCK DAD D ;HL <---- POINTER TO 512 BYTE SS BLOCK JMP GO$ON ; DOUBLE: POP H CPI 057H JNZ ERROR LXI D,-48 ;OFFSET TO SINGLE SIDED 512 BYTE BLOCK DAD D ;HL <---- POINTER TO 512 BYTE SS BLOCK GO$ON: LXI D,DPB1 ;DE <---- POINTER TO NEW BLOCK LXI B,15 ;BC <---- LENGTH OF BLOCK PUSH H ;SAVE POINTER CALL MOVER POP H ; LXI D,OFFSET2 DAD D LXI D,DPB2 LXI B,15 CALL MOVER ; PRINT <'Intersystems DPB for 512 bytes per sector disks',CR,LF> PRINT <'now installed in BIOS in place of Godbout 512 byte DPB',CR,LF> PRINT <'A cold boot will restore all usual DPBs',CR,LF,LF> ; EXIT: LHLD OLDSTAK ;Restore CP/M stack SPHL RET ; MOVER: LDAX D ;GET A BYTE MOV M,A ;PUT A BYTE INX D ;ADJUST POINTERS INX H DCX B ;DONE YET? MOV A,B ORA C JNZ MOVER ;NO RET ;YES ; ERROR: PRINT PRINT <'This program will only function correctly if called',CR,LF> PRINT <'from a 1024 bytes per sector disk, with Godbout',CR,LF> PRINT <'CP/M 2.X',CR,LF,LF> JMP EXIT ; DPB1: DW 60 ; SPT, Sectors/cylinder DB 4 ; BSH, Block shift factor DB 15 ; BLM, Block mask. DB 0 ; EXM, Null mask. DW 284 ; DSM, Number of 2048 byte blocks. DW 191 ; DRM, Number of directory entries - 1 DB 0E0H ; AL0, Alloc 0 ( for directory ) DB 0 ; AL1, Alloc 1 ( " " ) DW 48 ; CKS, Check size. DW 1 ; OFF, Number of reserved tracks. ; DPB2: DW 60 ; SPT, Sectors/cylinder DB 5 ; BSH, Block shift factor DB 31 ; BLM, Block mask. DB 1 ; EXM, Null mask. DW 285 ; DSM, Number of 4096 byte blocks. DW 127 ; DRM, Number of directory entries - 1 DB 80H ; AL0, Alloc 0 ( for directory ) DB 0 ; AL1, Alloc 1 ( " " ) DW 32 ; CKS, Check size. DW 1 ; OFF, Number of reserved tracks. ; OLDSTAK DS 2 ;CP/M stack store SPACE DS 12 ;Stack area STACK EQU $ ;Stack top ; END START