home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol020 / disk.z80 < prev    next >
Text File  |  1984-04-29  |  5KB  |  258 lines

  1.     TITLE    DISK SUBSYSTEM FOR SYSTEM MONITOR
  2. ;
  3. ;****Donated to the Pascal/Z80 Users Group, July 1980*******
  4. ;
  5. ;    FLOPPY DISK SUBSYSTEM FOR THE SYSTEM MONITOR
  6. ;    IT INTERTIES CP/M TO THE MONITOR SO THAT BOTH
  7. ;    PACKAGES OPERATE AS AN INTEGRATED WHOLE
  8. ;
  9. ;    MODIFIED FOR C-MACRO ASSEMBLER MAY 1979
  10. ;
  11. ;    DEFINE SYMBOLS
  12. ;
  13. ;SYSTEM BASES
  14. ;MBASE IS MONITOR BASE ADDR
  15. ;CBASE IS CONSOLE SUBSYSTEM BASE ADDR
  16. ;DWBASE IS THE DISK VARIABLE RAM BASE ADDR
  17. ;FBBASE IS CP/M BIOS BASE ADDR
  18. ;
  19. ;EXTERNAL CALLS
  20. ;
  21. DCNSTA    DEFL    CBASE+3
  22. DCONIN    DEFL    CBASE+6
  23. DCNOUT    DEFL    CBASE+24
  24. DLIST    DEFL    CBASE+12
  25. DBUFFO    DEFL    CBASE+21H    ;OUTPUT A MESSAGE TO CONSOLE
  26. GOBACK    DEFL    MBASE+3        ;RESTART MONITOR
  27. LOADER    DEFL    FBBASE+2DH    ;SD SALES LOADER
  28. ;
  29. ;    THIS SUBSYSTEM WILL PATCH THE CP/M
  30. ;    BIOS VECTOR JUMP TABLE ON THE END OF BDOS OF CP/M
  31. ;    TO TRAP CONSOLE I/O FOR MONITOR INTERTIE.
  32. ;
  33. ;INTERNAL SYMBOLS
  34. ;
  35. CR    DEFL    0DH
  36. LF    DEFL    0AH
  37. EOM    DEFL    00H
  38. FCB    DEFL    DWBASE+10
  39. BDOS    DEFL    05H
  40. INITCM    DEFL    13
  41. OPENCM    DEFL    15
  42. READCM    DEFL    20
  43. SDMACM    DEFL    26
  44. STATCM    DEFL    11
  45. ;
  46. ;ENTRY VECTORS
  47. ;
  48. DBASE    EQU    $
  49. DNTRY0    JP    DINIT    ;DISK SUBSYSTEM INITIALIZATION
  50. DNTRY1    JP    DMAIN    ;DISK TRANSIENT FILE LOADER
  51. DNTRY2    JP    DTRAP    ;DISK BOOT TRAP VECTOR
  52. ;
  53. ;DEFINED CONSTANTS FOR SUBSYSTEM
  54. ;
  55. DWORK    DEFW    DWBASE    ;VARIABLE RAM ADDR POINTER
  56. ;
  57. ;    INITIALIZE THE SUBSYSTEM
  58. ;
  59. DINIT    CALL    DSETUP
  60.     LD    A,0FFH
  61.     LD    (IY-1),A
  62.     POP    IY
  63.     RET
  64. ;
  65. DSETUP    EX    (SP),IY
  66.     PUSH    IY
  67.     LD    IY,(DWORK)
  68.     RET
  69. ;
  70. ;    BOOT TRAP VECTOR
  71. ;
  72. DTRAP    CALL    DCONIN
  73.     CP    03H
  74.     JP    Z,GOBACK    ;CONTROL-C ENCOUNTER
  75.     RET            ;ELSE RETURN TO TRANSIENT
  76. ;
  77. ;    DISK SUBSYSTEM MAIN ENTRY
  78. ;
  79. DMAIN    CALL    DSETUP
  80.     PUSH    AF
  81.     PUSH    BC
  82.     PUSH    IX
  83.     LD    HL,0
  84.     ADD    HL,SP
  85.     LD    (IY-3),L
  86.     LD    (IY-2),H
  87.     JP    BOOT
  88. ;
  89. ;    CONTINUE WITH LOADING REQUESTED UTILITY
  90. ;
  91. DBACK    LD    L,(IY-3)
  92.     LD    H,(IY-2)
  93.     LD    SP,HL
  94.     POP    IX
  95.     POP    BC
  96.     PUSH    IY
  97.     POP    DE
  98.     XOR    A
  99.     LD    (DE),A
  100.     INC    DE
  101.     POP    AF
  102.     OR    A
  103.     JP    Z,DCOPY
  104.     JP    DVERFY
  105. ;
  106. ;    COPY COMMAND FILE SET
  107. ;
  108. DCOPY    LD    HL,CPYBLK
  109.     JP    BFCB
  110. ;
  111. ;    VERIFY COMMAND FILE SET
  112. ;
  113. DVERFY    LD    HL,VFYBLK
  114. ;
  115. ;    BUILD FILE CONTROL BLOCK
  116. ;
  117. BFCB    PUSH    BC    ;BUILD COPY OR VRFY
  118.     LD    BC,4
  119.     LDIR
  120.     POP    BC    ;BUILD SOURCE/DESTINATION CODE
  121.     LD    A,B
  122.     LD    (DE),A
  123.     INC    DE
  124.     LD    A,C
  125.     LD    (DE),A
  126.     LD    A,20H
  127.     INC    DE
  128.     LD    (DE),A
  129.     INC    DE
  130.     LD    (DE),A
  131.     INC    DE    ;BUILD FILE TYPE 'SMC'
  132.     LD    HL,COMBLK
  133.     LD    BC,3
  134.     LDIR
  135.     XOR    A
  136.     LD    (DE),A
  137.     LD    (IY+32),A
  138. ;
  139. ;    INITIALIZE CP/M AND OPEN FILE
  140. ;
  141.     LD    C,INITCM
  142.     CALL    BDOS
  143.     PUSH    IY    ;OPEN FILE
  144.     POP    DE
  145.     LD    C,OPENCM
  146.     CALL    BDOS
  147.     INC    A
  148.     JP    Z,NOFILE  ;IF NO FILE IS FOUND
  149.     LD    HL,DMSG1 ;SEND MESSAGE 'FOUND FILE'
  150.     CALL    DBUFFO
  151. ;
  152. ;    LOAD FILE INTO MEMORY STARTING AT 0100H
  153. ;
  154.     LD    HL,0100H
  155.     PUSH    HL
  156. ;
  157. LOOP    POP    DE    ;GET    NEXT RECORD ADDRESS
  158.     PUSH    DE    ;SAVE IT
  159.     LD    C,SDMACM;GIVE IT TO CP/M
  160.     CALL    BDOS
  161.     PUSH    IY
  162.     POP    DE
  163.     LD    C,READCM;GET NEXT RECORD
  164.     CALL    BDOS
  165.     OR    A
  166.     JP    NZ,DDONE   ;IF COMPLETE OR READ ERROR
  167.     POP    DE    ;INC TO NEXT RECORD BLOCK
  168.     LD    HL,128      ;GET NO OF BYTES PER RECORD
  169.     ADD    HL,DE
  170.     PUSH    HL    ;SAVE NEW RECORD ADDRESS
  171.     JP    LOOP
  172. ;
  173. ;    LOADING IS COMPLETE OR ERROR ENCOUNTERED
  174. ;
  175. DDONE    DEC    A
  176.     JP    NZ,DERROR   ;IF ERROR
  177.     LD    HL,GOBACK ;LOAD RESTART ADDRESS
  178.     EX    (SP),HL ;PUSH IT ONTO THE STACK
  179.     JP    0100H    ;JUMP TO THE TRANSIENT ROUTINE
  180. ;
  181. ;    ERROR MESSAGE AND VECTOR BACK TO MONITOR
  182. ;
  183. DERROR    LD    HL,DMSG2
  184. VBACK    CALL    DBUFFO
  185.     LD    HL,GOBACK
  186.     JP    (HL)
  187. ;
  188. ;    ESCAPE    ..  A KEY WAS PRESSED
  189. ;
  190. DGTOUT    LD    HL,DMSG3
  191.     JP    VBACK
  192. ;
  193. ;    NO FILE MESSAGE
  194. ;
  195. NOFILE    LD    HL,DMSG4
  196.     JP    VBACK
  197. ;
  198. ;    MESSAGE MACROS
  199. ;
  200. DMSG1    DEFB    CR,LF,'FOUND FILE',EOM
  201. ;
  202. DMSG2    DEFB    CR,LF,'DISK READ ERROR',EOM
  203. DMSG3    DEFB    CR,LF,'ESCAPE',EOM
  204. ;
  205. DMSG4    DEFB    CR,LF,'FILE NOT FOUND',EOM
  206. ;
  207. ;    FILE NAME AND EXTENT BLOCKS
  208. ;
  209. CPYBLK    DEFB    'COPY'
  210. VFYBLK    DEFB    'VRFY'
  211. COMBLK    DEFB    'SMC'
  212. ;
  213. ;    BOOT UP CP/M SYSTEM AND MODIFY
  214. ;    (THIS BOOT IS FOR SD SALES VERSAFLOOPY)
  215. ;    SET AT REAR OF DISK SUBSYSTEM FOR EASY MODIFICATION
  216. ;
  217. BOOT    LD    SP,80H           ;SET BOOT STACK
  218.     LD    HL,80H
  219.     LD    (40H),HL    ;DMA ADDRESS (0000H)
  220.     XOR    A
  221.     LD    (42H),A        ;LOAD DRIVE NO
  222.     LD    (44H),A        ;LOAD TRACK NO
  223.     INC    A
  224.     LD    (43H),A        ;LOAD SECTOR NO
  225.     LD    (45H),A        ;NO OF SECTORS TO LOAD
  226.     CALL    LOADER        ;CALL SD VF LOADER
  227.     JP    NZ,BTERR    ;BAD LOAD
  228.     LD    HL,BRETN    ;LD RETURN VECTOR
  229.     LD    (0C1H),HL
  230.     JP    80H
  231. ;
  232. BRETN    LD    HL,(06H)    ;RETURNED SUCCESSFULLY
  233.     LD    L,00        ;GET JUMP VECTOR LOCATION
  234.     LD    BC,0D07H    ;FOR CONIN MONITORING
  235.     ADD    HL,BC
  236.     LD    DE,DCNSTA
  237.     CALL    BRETNL
  238.     LD    DE,DTRAP    ;SET UP TRAP
  239.     CALL    BRETNL
  240.     LD    DE,DCNOUT
  241.     CALL    BRETNL
  242.     LD    DE,DLIST
  243.     CALL    BRETNL
  244.     JP    DBACK
  245. ;
  246. BRETNL    LD    (HL),E
  247.     INC    HL
  248.     LD    (HL),D
  249.     INC    HL
  250.     INC    HL
  251.     RET
  252. ;
  253. BTERR    LD    HL,DMSG5
  254.     JP    VBACK
  255. ;
  256. DMSG5    DEFB    CR,LF,'BOOT LOADING ERROR',EOM
  257. ;
  258.