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