home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol073 / ithica1.asm < prev    next >
Encoding:
Assembly Source File  |  1984-04-29  |  3.7 KB  |  149 lines

  1. *********************************************************
  2. *                            *
  3. *    ITHICA 512 BYTE DPB INSTALLER FOR DJ2D BIOS    *
  4. *                            *
  5. *                            *
  6. *    (C) 1981, Software Tools            *
  7. *          P.O. Box 80                *
  8. *          Newport Beach                *
  9. *          NSW, 2106                *
  10. *          AUSTRALIA                *
  11. *                            *
  12. *    Written by:    Bill Bolton            *
  13. *                            *
  14. *    Date:        15/Mar/1981            *
  15. *                            *
  16. *    Version:    1.1    (Initial Release)    *
  17. *                            *
  18. *    -------------------------------------------    *
  19. *                            *
  20. *    INPUT PARAMETERS:                *
  21. *                            *
  22. *            None                *
  23. *                            *
  24. *    ACTION:                        *
  25. *                            *
  26. *            Overlays new DPB into        *
  27. *            Morrow DPB area            * 
  28. *                            *
  29. *    ------------------------------------------    *
  30. *                            *
  31. *    Assembler:    MAC.ASM (Digital Research)    *
  32. *                            *
  33. *    Support:    MACRO3.LIB (Software Tools)    *
  34. *                            *
  35. *********************************************************        
  36. ;
  37. ;    Hackers Notes:
  38. ;
  39. ;    N.B. Intersystems 2D format doesn't have Track 0 in
  40. ;    single density so watch out !!!!!!
  41. ;
  42. OFFSET1    EQU    10        ;OFFSET DPH TO DPB POINTER
  43. OFFSET2    EQU    64        ;OFFSET FROM STORE 1 TO STORE 2
  44. WBOOT    EQU    0        ;CP/M WARM BOOT ENTRY
  45. ;
  46.     MACLIB    MACRO3        ;SOFTWARE TOOLS SPECIAL MACROS
  47. ;
  48.     ORG    100H
  49. ;
  50. START:    LXI    H,0        ;Set up new stack
  51.     DAD    SP
  52.     SHLD    OLDSTAK
  53.     LXI    SP,STACK
  54. ;
  55.     PRINT    <'Software Tools - Dynamic Disk Parameter Block Modifier'>
  56.     PRINT    <CR,LF,'For Morrow Designs Disk Jockey 2D CP/M',CR,LF>
  57.     PRINT    <'This version installs Intersystems 512 DPB',CR,LF,LF>
  58. ;
  59.     DISKIO    ?DRIVE        ;GET CURRENT DRIVE
  60.     MOV    C,A        ;C <---- CURRENT DRIVE
  61.     CALLBIOS DSELDSK    ;HL POINTS TO DPH ON RETURN
  62. NEXT:
  63.     LXI    D,OFFSET1    ;DE <---- OFFSET TO DPB ADDRESS IN DPH
  64.     DAD    D        ;HL <---- POINTS TO DPB ADDRESS
  65.     CONTENTS        ;HL <---- 1024 BYTE DPB ADDRESS
  66.     MOV    A,M        ;GET SPT VALUE
  67.     CPI    64        ;SINGLE SIDED 1024 BYTE?
  68.     JNZ    DOUBLE        ;NO
  69.     LXI    D,-16        ;OFFSET TO 512 BYTE BLOCK
  70.     DAD    D        ;HL <---- POINTER TO 512 BYTE SS BLOCK
  71.     JMP    GO$ON
  72. ;
  73. DOUBLE:
  74.     CPI    128
  75.     JNZ    ERROR
  76.     LXI    D,-80        ;OFFSET TO SINGLE SIDED 512 BYTE BLOCK
  77.     DAD    D        ;HL <---- POINTER TO 512 BYTE SS BLOCK
  78. GO$ON:
  79.     LXI    D,DPB1        ;DE <---- POINTER TO NEW BLOCK
  80.     LXI    B,16        ;BC <---- LENGTH OF BLOCK
  81.     PUSH    H        ;SAVE POINTER
  82.     CALL    MOVER
  83.     POP    H
  84. ;
  85.     LXI    D,OFFSET2
  86.     DAD    D
  87.     LXI    D,DPB2
  88.     LXI    B,16
  89.     CALL    MOVER
  90. ;
  91.     PRINT    <'Intersystems DPB for 512 bytes per sector disks',CR,LF>
  92.     PRINT    <'now installed in BIOS in place of Morrow 512 byte DPB',CR,LF>
  93.     PRINT    <'A cold boot will restore all usual DPBs',CR,LF,LF>
  94. ;
  95. EXIT:
  96.     LHLD    OLDSTAK        ;Restore CP/M stack
  97.     SPHL
  98.     RET
  99. ;
  100. MOVER:
  101.     LDAX    D        ;GET A BYTE
  102.     MOV    M,A        ;PUT A BYTE
  103.     INX    D        ;ADJUST POINTERS
  104.     INX    H
  105.     DCX    B        ;DONE YET?
  106.     MOV    A,B
  107.     ORA    C
  108.     JNZ    MOVER        ;NO
  109.     RET            ;YES
  110. ;
  111. ERROR:
  112.     PRINT    <BEL,'DPB not located, no changes made to BIOS',BEL,CR,LF>
  113.     PRINT    <'This program will only function correctly if called',CR,LF>
  114.     PRINT    <'from a 1024 bytes per sector disk, with Morrow',CR,LF>
  115.     PRINT    <'CP/M 2.X',CR,LF,LF>
  116.     JMP    EXIT
  117. ;
  118. DPB1:
  119.     DW    60        ; SPT, Sectors/cylinder
  120.     DB    4        ; BSH, Block shift factor
  121.     DB    15        ; BLM, Block mask.
  122.     DB    0        ; EXM, Null mask.
  123.     DW    284        ; DSM, Number of 2048 byte blocks.
  124.     DW    191        ; DRM, Number of directory entries - 1
  125.     DB    0E0H        ; AL0, Alloc 0 ( for directory )
  126.     DB    0        ; AL1, Alloc 1 (  "     "      )
  127.     DW    48        ; CKS, Check size.
  128.     DW    1        ; OFF, Number of reserved tracks.
  129.     DB    33H        ; Morrow Special Parameter
  130. ;
  131. DPB2:
  132.     DW    120        ; SPT, Sectors/cylinder
  133.     DB    5        ; BSH, Block shift factor
  134.     DB    31        ; BLM, Block mask.
  135.     DB    1        ; EXM, Null mask.
  136.     DW    285        ; DSM, Number of 4096 byte blocks.
  137.     DW    127        ; DRM, Number of directory entries - 1
  138.     DB    80H        ; AL0, Alloc 0 ( for directory )
  139.     DB    0        ; AL1, Alloc 1 (  "     "      )
  140.     DW    32        ; CKS, Check size.
  141.     DW    1        ; OFF, Number of reserved tracks.
  142.     DB    3BH        ; Morrow Special Parameter
  143. ;
  144. OLDSTAK    DS    2        ;CP/M stack store
  145. SPACE    DS    12        ;Stack area
  146. STACK    EQU    $        ;Stack top
  147. ;
  148.     END    START
  149.