home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols100 / vol161 / oztokpro.asm < prev    next >
Encoding:
Assembly Source File  |  1994-07-13  |  6.9 KB  |  250 lines

  1.     TITLE    'KAYPRO II DOUBLE DENSITY DISK ENABLE'
  2.     PAGE    54
  3. *
  4. *    John S Robison
  5. *    MAY 17, 1983
  6. *
  7. *    THIS PROGRAM WILL DYNAMICALLY MODIFY THE OSBORNE I
  8. *    WITH 1.4 CBIOS AND 1.43 ROM TO PERMIT READ AND
  9. *    WRITE OF KAYPRO II DOUBLE DENSITY DISKETTES.
  10. *
  11. *    KAYPRO II SINGLE SIDED DOUBLE DENSITY DISKETTES
  12. *    ARE FORMATTED AS FOLLOWS:
  13. *
  14. *        40 TRACKS
  15. *        10 BLOCKS PER TRACK
  16. *        512 BYTES PER BLOCK
  17. *        BLOCKS NUMBERED FROM 0 THROUGH 9
  18. *        BLOCKS HARD INTERLACED AS FOLLOWS:
  19. *            0,8,3,6,1,9,4,7,2,5
  20. *        1 SYSTEM TRACK
  21. *        64 ENTRY DIRECTORY
  22. *
  23. *    EQUATES TO 1.4 CBIOS LOCATIONS
  24. *
  25. SIGNON    EQU    0E561H    ;LOCATION OF SIGN-ON MESSAGE
  26. DPH0DPB    EQU    0E20AH    ;DRIVE 0 DPB ADDRESS POINTER
  27. DPH0CSV    EQU    0E20CH    ;DRIVE 0 DPH CHECK SUM VECTOR ADDRESS
  28. DPH0ALV    EQU    0E20EH    ;DRIVE 0 DPH ALLOCATION VECTOR ADDRESS
  29. DPH1DPB    EQU    0E21AH    ;DRIVE 1 DPB ADDRESS POINTER
  30. DPH1CSV    EQU    0E21CH    ;DRIVE 1 DPH CHECK SUM VECTOR ADDRESS
  31. DPH1ALV    EQU    0E21EH    ;DRIVE 1 DPH ALLOCATION VECTOR ADDRESS
  32. XTAB6AD    EQU    0E22AH    ;ADDRESS FOR USER DEFINED XLATE TABLE
  33. USERDPB    EQU    0E2EEH    ;ADDRESS FOR USER DEFINED DPB
  34. NSEKTYP    EQU    0E90CH    ;NEW LOCATION FOR SEKTYP
  35. NHSTTYP    EQU    0E90DH    ;NEW LOCATION FOR HSTTYP
  36. NXLTKEY    EQU    0E90EH    ;NEW LOCATION FOR XLTKEY
  37. ALV0    EQU    0E910H    ;NEW ALLOCATION VECTOR DRIVE 0
  38. ALV1    EQU    ALV0+25    ;NEW ALLOCATION VECTOR DRIVE 1
  39. CSV0    EQU    ALV1+25    ;NEW CHECK VECTOR DRIVE 0
  40. CSV1    EQU    CSV0+16    ;NEW CHECK VECTOR DRIVE 1
  41. ACTSEC    EQU    0EF14H    ;ACTIVE SECTOR
  42. ACTDSK    EQU    0EF17H    ;ACTIVE DISK
  43. *
  44. *    CP/M EQUATES
  45. *
  46. BDOS    EQU    5    ;ENTRY TO BDOS
  47. WRSTR    EQU    9    ;STRING TO CONSOLE FUNCTION
  48. RESET    EQU    13    ;RESET ALL DRIVES
  49. *
  50.     ORG    100H
  51.     MACLIB    Z80        ;Z80 MNEMONICS
  52. $*MACRO
  53.     PAGE
  54. *
  55. *    VALIDATE WE ARE USING 1.4 CBIOS
  56. *
  57.     LXI    H,SIGNON    ;MESSAGE IN CBIOS
  58.     LXI    D,SIGNMSG    ;MESSAGE IN THIS PROGRAM
  59.     MVI    B,SIGNL+1    ;LENGTH OF MESSAGE
  60. SIGNLOP    LDAX    D    ;GET BYTE FROM PROGRAM
  61.     CMP    M    ;DOES CBIOS MATCH?
  62.     JNZ    REJECT    ;NO
  63.     INX    H    ;YES
  64.     INX    D
  65.     DJNZ    SIGNLOP
  66.     JMP    ACCEPT    ;CBIOS IS CORRECT ONE
  67. REJECT    LXI    D,REJMSG    ;WRONG VERSION OF CBIOS
  68.     MVI    C,WRSTR    ;STRING TO CONSOLE
  69.     CALL    BDOS    ;INFORM OPERATOR
  70.     RET        ;BACK TO CCP
  71. REJMSG    DB    0DH,0AH,'THIS PROGRAM IS VALID ONLY '
  72.     DB    0DH,0AH
  73.     DB    'FOR THE 1.4 CBIOS AND A 59K SYSTEM$'
  74. ACCEPT    LXI    H,0
  75.     SHLD    XTAB6AD    ;NO TRANSLATE TABLE
  76.     LXI    H,DPB    ;NEW DISK PARAMETER BLOCK
  77.     LXI    D,USERDPB ;USER DPB IN CBIOS
  78.     LXI    B,16    ;BLOCK IS 16 BYTES LONG
  79.     LDIR        ;LOAD USER DPB
  80.     LXI    H,ALV0    ;NEW ALV0 ADDRESS
  81.     SHLD    DPH0ALV    ;PUT IN DPH
  82.     LXI    H,CSV0    ;NEW CSV0 ADDRESS
  83.     SHLD    DPH0CSV    ;PUT IN DPH
  84.     LXI    H,ALV1    ;NEW ALV1 ADDRESS
  85.     SHLD    DPH1ALV    ;PUT IN DPH
  86.     LXI    H,CSV1    ;NEW CSV1 ADDRESS
  87.     SHLD    DPH1CSV    ;PUT IN DPH
  88.     LXI    D,NSEKTYP    ;NEW ADDRESS OF SEKTYP
  89.     LXI    H,SEKTYP    ;ADDRESS OF TABLE
  90.     MVI    B,SEKTYPN    ;LENGTH OF TABLE
  91.     CALL    SPRAY        ;TRANSFER VALUES
  92.     LXI    D,NHSTTYP    ;NEW ADDRESS OF HSTTYP
  93.     LXI    H,HSTTYP    ;ADDRESS OF TABLE
  94.     MVI    B,HSTTYPN    ;LENGTH OF TABLE
  95.     CALL    SPRAY        ;TRANSFER VALUES
  96.     LXI    D,NXLTKEY    ;NEW ADDRESS OF XLTKEY
  97.     LXI    H,XLTKEY    ;ADDRESS OF TABLE
  98.     MVI    B,XLTKEYN    ;LENGTH OF TABLE
  99.     CALL    SPRAY        ;TRANSFER VALUES
  100.     PAGE
  101. *
  102. *    PATCH TO INTERCEPT INCORRECT NUMBER OF BLOCKS
  103. *    PER TRACK (6) AND SUBSTITUTE CORRECT NUMBER (10)
  104. *
  105.     LXI    H,PATCH1    ;EXECUTION ADDRESS FOR PATCH 1
  106.     SHLD    CPATCH1+1    ;SET INTERCEPT IN CBIOS
  107.     MVI    A,(JMP)
  108.     STA    CPATCH1
  109.     LXI    H,PAT1CODE    ;CODE FOR PATCH 1
  110.     LXI    D,PATCH1    ;DESTINATION FOR PATCH 1
  111.     LXI    B,LPATCH1    ;LENGTH OF PATCH 1
  112.     LDIR            ;MOVE PATCH 1
  113. ;
  114. *    PATCH TO NOT INCREMENT BLOCK NUMBER IF DRIVE
  115. *    IN QUESTION IS THE KAYPRO DRIVE
  116. *
  117.     LXI    H,PATCH2    ;EXECUTION ADDRESS FOR PATCH 2
  118.     SHLD    CPATCH2+1    ;SET INTERCEPT IN CBIOS
  119.     MVI    A,(JMP)
  120.     STA    CPATCH2
  121.     LXI    H,PAT2CODE    ;CODE FOR PATCH 2
  122.     LXI    D,PATCH2    ;DESTINATION FOR PATCH 2
  123.     LXI    B,LPATCH2    ;LENGTH OF PATCH 2
  124.     LDIR            ;MOVE PATCH 2
  125.     MVI    C,RESET
  126.     CALL    BDOS    ;RESET DRIVES
  127.     LXI    D,COMPMSG
  128.     MVI    C,WRSTR
  129.     CALL    BDOS    ;ACKNOWLEDGE SUCCESSFUL COMPLETION
  130.     RET        ;RETURN TO CCP
  131. COMPMSG    DB    0DH,0AH,'Kaypro II Double Density '
  132.     DB    'Diskettes are now valid.$'
  133.     PAGE
  134. *
  135. *    SUBROUTINE TO PUT NEW VALUE AT ADDRESSES SECURED
  136. *    FROM A TABLE
  137. *
  138. *        DE = NEW VALUE
  139. *        HL = ADDRESS OF TABLE
  140. *        B  = NUMBER OF ENTRIES IN TABLE
  141. *
  142. SPRAY    PUSH    D    ;SAVE NEW VALUE
  143. SPRAY1    MOV    E,M    ;GET LOW BYTE OF ADDRESS
  144.     INX    H
  145.     MOV    D,M    ;GET HIGH BYTE OF ADDRESS
  146.     INX    H
  147.     XTHL        ;HL = NEW VALUE, ADDR TABLE ON STACK
  148.     XCHG        ;HL = DESTINATION, DE = NEW VALUE
  149.     MOV    M,E    ;LOW BYTE OF NEW VALUE TO MEMORY
  150.     INX    H
  151.     MOV    M,D    ;HIGH BYTE OF NEW VALUE TO MEMORY
  152.     XCHG        ;HL = NEW VALUE
  153.     XTHL        ;HL = TABLE ADDRESS, NEW VALUE ON STACK
  154.     DJNZ    SPRAY1    ;PROCESS NEXT TABLE ENTRY
  155.     POP    D    ;FIX STACK
  156.     RET
  157. *
  158. *    KAYPRO II DISK PARAMETER BLOCK (DPB)
  159. *
  160. DPB    DB    8    ;OSBORNE CODE FOR DD 512 BYTE BLOCKS
  161.     DW    40    ;40 128 BYTE RECORDS PER TRACK
  162.     DB    3    ;1K BLOCK SHIFT FACTOR
  163.     DB    7    ;1K BLOCK MASK
  164.     DB    0    ;1K EXTENT MASK
  165.     DW    194    ;195K - 1 DISK CAPACITY
  166.     DW    63    ;64 - 1 DIRECTORY ENTRIES
  167.     DB    0F0H    ;ALLOCATION 0 (2 BLKS RESERVED FOR CBIOS)
  168.     DB    0    ;ALLOCATION 1
  169.     DW    16    ;CHECK VECTOR
  170.     DW    1    ;SYSTEM TRACKS
  171.     PAGE
  172. *
  173. *    SIGN-ON MESSAGE FOR 1.4 CBIOS (59K)
  174. *
  175. SIGNMSG    DB    SIGNL    ;LENGTH OF MESSAGE
  176.     DB    'Z'-40H
  177.     DB    'Osborne Computer System'
  178.     DB    0DH,0AH
  179.     DB    '59k CP/M vers 2.2'
  180.     DB    0DH,0AH
  181.     DB    'CBIOS 1.4'
  182.     DB    0DH,0AH
  183. SIGNL    EQU    $-SIGNMSG-1
  184. *
  185. *    TABLE OF ADDRESSES USING LABEL SEKTYP WHICH
  186. *    MUST BE MOVED TO MAKE ROOM FOR EXPANDED VECTORS
  187. *
  188. SEKTYP    DW    0E37BH
  189.     DW    0E5DAH
  190.     DW    0E648H
  191.     DW    0E67BH
  192.     DW    0E6B0H
  193. SEKTYPN    EQU    ($-SEKTYP)/2    ;NUMBER OF ENTRIES
  194. *
  195. *    TABLE OF ADDRESSES USING LABEL HSTTYP WHICH
  196. *    MUST BE MOVED TO MAKE ROOM FOR EXPANDED VECTORS
  197. *
  198. HSTTYP    DW    0E678H
  199.     DW    0E6B3H
  200.     DW    0E6DCH
  201. HSTTYPN    EQU    ($-HSTTYP)/2    ;NUMBER OF ENTRIES
  202. *
  203. *    TABLE OF ADDRESSES USING LABEL XLTKEY WHICH
  204. *    MUST BE MOVED TO MAKE ROOM FOR EXPANDED VECTORS
  205. *
  206. XLTKEY    DW    0E7BDH
  207.     DW    0E7ECH
  208. XLTKEYN    EQU    ($-XLTKEY)/2    ;NUMBER OF ENTRIES
  209.     PAGE
  210. *
  211. *    PATCH 1 TO FIX NUMBER OF BLOCKS PER TRACK
  212. *
  213. PAT1CODE CALL    0E490H    ;GET DENSITY OF DRIVE
  214.     JNZ    0E48AH    ;UNFORMATTED DISKETTE
  215.     MVI    A,6    ;IS THIS A KAYPRO II?
  216.     CMP    B
  217.     JNZ    CPATCH1+5    ;NO, RELEASE INTERCEPT
  218.     MVI    B,10    ;YES, SET CORRECT NUMBER OF BLOCKS
  219.     JMP    CPATCH1+5    ;RELEASE INTERCEPT
  220. LPATCH1    EQU    $-PAT1CODE    ;LENGTH OF PATCH
  221. CPATCH1    EQU    0E431H    ;INTERCEPT LOCATION FOR PATCH 1
  222. PATCH1    EQU    0E980H    ;EXECUTION ADDRESS FOR PATCH 1
  223. *
  224. *    PATCH 2 TO MAKE PHYSICAL SECTOR START AT 0 INSTEAD OF 1
  225. *
  226. PAT2CODE PUSH    PSW    ;SAVE A & FLAGS
  227.     PUSH    D
  228.     LXI    H,DPH0DPB    ;ADDRESS OF DRV 0 DPB POINTER
  229.     LDA    ACTDSK        ;GET ACTIVE DISK NUMBER
  230.     CPI    0        ;DISK 0?
  231.     JRZ    PAT2C1        ;YES, POINTER IS CORRECT
  232.     LXI    H,DPH1DPB    ;NO, ADDR OF DRV 1 DPB POINTER
  233. PAT2C1    MOV    E,M        ;GET ACTIVE DPB ADDRESS
  234.     INX    H
  235.     MOV    D,M
  236.     LXI    H,USERDPB+1    ;ADDR OF KAYPRO DPB
  237.     DSBC    D        ;DO THEY MATCH?
  238.     POP    D        ;RESTORE DE
  239.     LXI    H,ACTSEC    ;POINT TO ACTIVE SECTOR
  240.     JRZ    PAT2C2        ;YES, THEY MATCH
  241.     POP    PSW        ;NO, NORMAL OSBORNE DISK
  242.     JMP    CPATCH2+3    ;RESUME NORMAL PROCESSING
  243. PAT2C2    POP    PSW
  244.     JMP    CPATCH2+4    ;KAYPRO, BYPASS SECTOR INCREMENT
  245. LPATCH2    EQU    $-PAT2CODE    ;LENGTH OF PATCH
  246. CPATCH2    EQU    0E6EDH    ;INTERCEPT LOCATION FOR PATCH 2
  247. PATCH2    EQU    PATCH1+LPATCH1    ;EXECUTION ADDRESS FOR PATCH 2
  248.     END
  249.  OF PATCH
  250. CPATCH2    EQU    0E6EDH    ;INTERCEPT LOCATION FOR PA