Subversion Repositories pentevo

Rev

Blame | Last modification | View Log | Download | RSS feed | ?url?

  1.  
  2. ;LAST UPDATE: 21.11.2013 savelij
  3.  
  4. ;.Z80
  5. ;        CSEG
  6.  
  7. ;        TITLE   'BIOS'
  8.  
  9. ;PRINT   MACRO   A1,A2
  10. ;IF1
  11. ;.PRINTX /A1 A2/
  12. ;ENDIF
  13. ;        ENDM
  14.  
  15. ;INCLUDE DEFINES.INC
  16.  
  17.         PHASE  0EA00H
  18. ;CCP     EQU     $-1600H
  19. BDOS    EQU     CCP+806H
  20. CDISK   EQU     0004H           ;CURRENT DISK
  21. ;IOBYTE  EQU     0003H           ;I/O BYTE ADDRESS
  22. ;BIOS    EQU     $
  23.  
  24. ;
  25. ; MC1207-MONITOR ENTRY POINTS
  26. ;
  27. ;_RUN    EQU     0F800H          ;
  28. ;_CI     EQU     0F803H          ;
  29. ;_RI     EQU     0F806H          ;
  30. ;_CO     EQU     0F809H          ;
  31. ;_PO     EQU     0F80CH          ;
  32. ;_LO     EQU     0F80FH          ;
  33. ;_CSTS   EQU     0F812H          ;
  34. ;_IOCHK  EQU     0F815H          ;
  35. ;_IOSET  EQU     0F818H          ;
  36. ;_MEMCK  EQU     0F81BH          ;
  37. ;_IODEF  EQU     0F81EH          ;
  38. ;_REST   EQU     0F821H          ;
  39. ;_RQDIO  EQU     0F824H          ;
  40. ;_RQRES  EQU     0F827H          ;
  41. ;_RQSET  EQU     0F82AH          ;
  42. ;_RQCHK  EQU     0F82DH          ;
  43. ;_MUX    EQU     0F830H          ; C=81H - LOAD CPM
  44. ;---------------------
  45.  
  46.         JP      BOOT            ; 00
  47. WBOT1:  JP      WBOOT           ; 03
  48.         JP      CONST           ; 06
  49.         JP      CONIN           ; 09
  50.         JP      CONOUT_          ; 0C
  51.         JP      LIST            ; 0F
  52.         JP      PUNCH           ; 12
  53.         JP      READER          ; 15
  54.         JP      HOME            ; 18
  55.         JP      SELDSK          ; 1B
  56.         JP      SETTRK          ; 1E
  57.         JP      SETSEC          ; 21
  58.         JP      SETDMA          ; 24
  59.         JP      READ            ; 27
  60.         JP      WRITE           ; 2A
  61.         JP      LISTST          ; 2D
  62.         JP      SECTRAN         ; 30
  63.  
  64.         JP      ASSIGN          ; 33
  65.         JP      GETCH           ; 36
  66.         JP      BMUX            ; 39
  67. ;***********************
  68. ; 0FFH - SYMBOL PRESENT.
  69. ;   0H - NO SYMBOL
  70. ;
  71. CONST:
  72.         JP      _CSTS
  73.  
  74. ;***********************
  75. ; INTERNAL MUX
  76. ; C-CODE (HI BIT - MON'S MUX)
  77. BMUX:   BIT     7,C
  78.         RES     7,C
  79.         JP      NZ,_MUX
  80.         INC     C
  81.         DEC     C
  82.         JR      Z,SET_CIOERR
  83.         LD      A,0FFH
  84.         RET
  85.  
  86. SET_CIOERR:                             ; SET CRIT IO ERROR HANDLER (HL)
  87.         LD      DE,(CIOERR_A)           ; RET PREVIOS HANDLER (HL)
  88.         LD      (CIOERR_A),HL
  89.         EX      DE,HL
  90.         XOR     A
  91.         RET
  92.  
  93. ;***********************
  94. ; INPUT FROM BUFER
  95. ;
  96. CONIN:
  97.         JP      _CI
  98.  
  99. ;*************************
  100. ;  CONSOL OUTPUT
  101. ;
  102. CONOUT_:
  103.         JP      _CO
  104.  
  105. ;**************************
  106. ;  TYPE MESSAGE GIVEN BY (HL)
  107. ;
  108. TYPMSG:
  109.         LD      A,(HL)
  110.         OR      A
  111.         RET     Z
  112.         LD      C,A
  113.         CALL    CONOUT_
  114.         INC     HL
  115.         JP      TYPMSG
  116.  
  117. ;**************************
  118. ;  LIST STATUS
  119. ;
  120. LISTST:
  121. ;       IF ROM
  122. LPORT_  EQU     0FBH
  123. ;       ELSE
  124. ;LPORT_ EQU     7BH
  125. ;       ENDIF
  126.         IN A,(LPORT_)
  127.         RLCA;RRCA
  128.         CCF
  129.         SBC A,A
  130.         RET
  131.  
  132. ;**************************
  133. ;  LIST CHAR FROM REG. C
  134. ;
  135. LIST:
  136.         JP      _LO
  137.  
  138. ;**************************
  139. ;  PUNCH CHAR FROM C
  140. ;
  141. PUNCH:
  142.         JP      _PO
  143.  
  144. ;**************************
  145. ;  READ CHAR INTO A
  146. ;
  147. READER:
  148.         JP      _RI
  149.  
  150. ;***************************
  151. ;  COLD START
  152. ;
  153. BOOT:
  154.         LD      SP,80H
  155.         EI
  156.         CALL    ASSIG1
  157.  
  158. ;        LD      DE,BRQ          ; FORMAT EDISK
  159. ;        LD      C,1
  160. ;        CALL    _RQDIO
  161.  
  162. ;        LD      DE,BRQ          ; RESET FLOPPY
  163. ;        XOR     A
  164. ;        LD      C,A
  165. ;        LD      (COM),A
  166. ;        CALL    _RQDIO
  167.  
  168.         LD      C,0
  169.         CALL    SELDSK
  170.         XOR     A
  171.         LD      (IOBYTE),A
  172.         LD      (CDISK),A
  173.         LD      (DISKNO),A
  174.         LD      HL,MES_1
  175.         CALL    TYPMSG
  176.         JP      GOCPM_
  177.  
  178. ;*************************
  179. ;  WARM START
  180. ;
  181. WBOOT:
  182.         LD      SP,80H
  183.         EI
  184.         LD      C,1H
  185.         CALL    _MUX
  186.  
  187. GOCPM_
  188.         LD      A,0C3H          ; 'JMP' COMMAND
  189.         LD      (0000),A
  190.         LD      HL,WBOT1        ; WARM BOOT ADDRESS
  191.         LD      (1),HL          ;
  192.         LD      (5),A           ; 'JMP' COMMAND
  193.         LD      HL,BDOS         ; BDOS ENTRY POINT
  194.         LD      (6),HL
  195.         LD      BC,0080H        ; BDOS DMA ADDRESS
  196.         CALL    SETDMA          ; SET IT
  197.         LD      A,(CDISK)       ; CURRENT DRIVE FOR CCP
  198.         LD      C,A
  199.         JP      CCP             ; START CPM
  200.  
  201. ;************************
  202. ;  MOVE TO THE TRACK 00 POSITION OF
  203. ; CURRENT DRIVE
  204. ;
  205. HOME:
  206.         LD      HL,0
  207.         LD      (TRACK),HL
  208.         LD      BC,0100H        ; SEEK COMMAND + 0 BLN
  209.         JP      EXEC
  210.  
  211. ;************************
  212. ;  SELECT DISK GIVEN BY REG. C
  213. ;
  214. SELDSK: LD      A,C
  215.         CP      TOT_DSK
  216.         JP      NC,SELERR
  217.         LD      HL,DSKTAB
  218.         LD      B,0
  219.         ADD     HL,BC
  220.         LD      A,(HL)
  221.         OR      A               ; CHANAL ASSIGNED ?
  222.         JP      P,SEL1          ; O'KEY
  223. SELERR: LD      HL,0
  224.         LD      A,(DISKNO)      ; OLD DISK
  225.         LD      (CDISK),A       ; SELECT IT
  226.         RET                     ; ERROR
  227. SEL1:
  228.         LD      (CHAN),A        ; UPDATE REQUEST BLOCK
  229.         LD      A,C
  230.         LD      (DISKNO),A      ; STORE NEW DISK NUMBER
  231.         LD      L,C
  232.         LD      H,0
  233.         ADD     HL,HL
  234.         ADD     HL,HL
  235.         ADD     HL,HL
  236.         ADD     HL,HL
  237.         LD      DE,DPBASE
  238.         ADD     HL,DE
  239.         RET                     ; O'KEY. (HL<>0)
  240. ;**********************
  241. ;  SET TRACK GIVEN BY REG. C
  242. ;
  243. SETTRK:
  244.         LD      HL,TRACK
  245.         LD      (HL),C
  246.         INC     HL
  247.         LD      (HL),B
  248.         XOR     A
  249.         RET
  250.  
  251. ;       LXI     B,0100H         ; SEEK COMMAND + 0 BLN
  252. ;       JMP     EXEC            ; EXECUTE IT.
  253.  
  254. ;**********************
  255. ;  SET SECTOR GIVEN BY REG. C
  256. ;
  257. SETSEC:
  258.         LD      A,C
  259.         LD      (BLOCK),A
  260.         XOR     A               ; O'KEY
  261.         RET
  262.  
  263. ;**********************
  264. ;  TRANSLATE THE SECTOR GIVEN BY BC
  265. ; USING THE TRANSLATE TABLE GIVEN BY DE
  266. ;
  267. SECTRAN:
  268.         LD      HL,1
  269.         ADD     HL,BC
  270.         RET
  271.  
  272. ;**********************
  273. ;  SET DMA ADDRESS GIVEN BY REG. B & C
  274. ;
  275. SETDMA:
  276.         LD      L,C
  277.         LD      H,B
  278.         LD      (DMA),HL
  279.         RET
  280.  
  281. ;*************************
  282. ;  WRITE ONE SECTOR
  283. ;
  284. WRITE:  LD      BC,0601H        ; WRITE 1 SECTOR
  285.         JP      EXEC
  286.  
  287. ;**********************
  288. ;  READ ONE SECTOR
  289. ;
  290. READ:   LD      BC,0401H
  291.         CALL    EXEC
  292.  
  293. ;       PUSH    PSW
  294. ;       LHLD    DMA
  295. ;       MVI     B,128
  296. ;       CALL    DUMP
  297. ;       LXI     H,CRLF
  298. ;       CALL    TYPMSG
  299. ;       POP     PSW
  300.  
  301.         RET
  302.  
  303. ;***********************
  304. MS:     EX      (SP),HL
  305.         CALL    TYPMSG
  306.         INC     HL
  307.         EX      (SP),HL
  308.         RET
  309.  
  310. ;**********************
  311. ;  EXECUTION OF COMMAND
  312. ;    (B) - COMMAND
  313. ;    (C) - NUMBER OF BLOCKS
  314. ;
  315. EXEC:
  316.         LD      HL,BRQ+1
  317.         LD      (HL),B          ; COMMAND
  318.         INC     HL
  319.         LD      (HL),C          ; # OF BLOCKS
  320.  
  321. ;       LXI     H,CRLF
  322. ;       CALL    TYPMSG
  323. ;       LDA     BRQ
  324. ;       CALL    HEX
  325. ;       CALL    MS
  326. ;       DB 'CHANAL  ',0
  327. ;       LDA     BRQ+1
  328. ;       CALL    HEX
  329. ;       CALL    MS
  330. ;       DB 'COMMAND  ',0
  331. ;       LDA     TRACK
  332. ;       CALL    HEX
  333. ;       CALL    MS
  334. ;       DB 'TRACK  ',0
  335. ;       LDA     BLOCK
  336. ;       CALL    HEX
  337. ;       CALL    MS
  338. ;       DB 'BLOCK',0DH,0AH,0
  339. ;       CALL    _CI
  340.  
  341. AGAIN:
  342.         LD      DE,BRQ
  343.         LD      A,(DE)
  344.         LD      C,A             ; CHANAL
  345.         CALL    DISK_            ; EXECUTION OF COMMAND
  346.         OR      A               ; O'KEY ?
  347.         RET     Z               ; YES. RETURN
  348.         LD      BC,BRQ
  349.         CALL    DEF_CIO         ; IN: A-ERROR, BC-REQ BLOCK
  350. CIOERR_A EQU $-2                ; OUT: (C) 0-ABORT, 1-RETRY, 2-IGNORE, 3-FAIL
  351.         LD      A,C
  352.         OR      A
  353.         JP      Z,WBOT1
  354.         DEC     A
  355.         JR      Z,AGAIN1
  356.         DEC     A
  357.         RET
  358. AGAIN1: LD      HL,COM
  359.         LD      A,(HL)
  360.         PUSH    AF
  361.         LD      (HL),3
  362.         LD      DE,BRQ
  363.         LD      A,(DE)
  364.         LD      C,A             ; CHANAL
  365.         CALL    DISK_            ; EXECUTION OF COMMAND
  366.         POP     AF
  367.         LD      (COM),A
  368.         JR      AGAIN
  369.  
  370. DEF_CIO:PUSH    AF
  371.         LD      HL,ERRMS1
  372.         CALL    TYPMSG
  373.         POP     AF
  374.         CALL    HEX             ; ERROR CODE
  375.         LD      HL,ERRMS2
  376.         CALL    TYPMSG
  377.         LD      A,(CHAN)
  378.         CALL    HEX             ; CHANAL
  379.         LD      A,(COM)
  380.         CALL    HEX             ; COMMAND
  381.         LD      A,(TRACK)
  382.         CALL    HEX             ; TRACK
  383.         LD      A,(BLOCK)
  384.         CALL    HEX             ; BLOCK
  385. ASK:    LD      HL,ASKMSG
  386.         CALL    TYPMSG
  387.         CALL    CONIN
  388.         CP 3
  389.         JR Z,ABORT_CLR
  390.         CALL    UPCASECHAR
  391.         LD      C,A
  392.         CALL    CONOUT_
  393.         LD      HL,RSTR
  394.         LD      BC,4
  395.         CPIR
  396.         JR      NZ,ASK
  397.         RET
  398.  
  399. ABORT_CLR       XOR A
  400.         LD (4),A
  401.         LD C,A
  402.         RET
  403.  
  404. RSTR:   DB "FIRA"
  405.  
  406. ;
  407. ; TYPE BYTE IN HEX FROM (A) & ":" AFTER IT
  408. ;
  409. HEX:
  410.         PUSH    AF
  411.         RRCA
  412.         RRCA
  413.         RRCA
  414.         RRCA
  415.         CALL    DHEX_
  416.         POP     AF
  417.         CALL    DHEX_
  418.         LD      C,":"
  419.         JP      CONOUT_
  420.  
  421. DUMP:   LD      A,(HL)
  422.         CALL    HEX
  423.         INC     HL
  424.         DEC     B
  425.         JP      NZ,DUMP
  426.         RET
  427.  
  428. ;
  429. ; TYPE ONE HEX DIGIT
  430. ;
  431. DHEX_   AND     0FH
  432.         ADD     A,90H
  433.         DAA
  434.         ADC     A,40H
  435.         DAA
  436.         LD      C,A
  437.         JP      CONOUT_
  438. ;
  439. ;
  440. UPCASECHAR:
  441.         CP      60H
  442.         RET     C
  443.         SUB     20H
  444.         RET
  445. ;
  446. ; DISK SYSTEM CALL
  447. ;
  448. DISK_
  449.         LD      A,C             ; REQUESTED CHANAL
  450.         JP      _RQDIO          ; EXECUTE
  451.  
  452. ;
  453. ; GET LOGICAL DISK DESCRIPTOR BY ITS DISK NUMBER
  454. ;
  455. ;  INPUT :
  456. ;     C  - DISK NUMBER
  457. ;   (DE) - BUFFER FOR 34-BYTE DESCRIPTOR
  458. ;  OUTPUT :
  459. ;     A  - ERROR CODE
  460. ;     C  - CHANAL NUMBER
  461. ; BUFFER - DESCRIPTOR (34 BYTES)
  462. ;
  463. GETCH:
  464.         LD      HL,DSKTAB
  465.         LD      B,0
  466.         ADD     HL,BC
  467.         LD      A,(HL)
  468.         OR      A
  469.         RET     M       ; RETURN WITH 0FFH IF NOT ASSIGNED
  470.         LD      C,A
  471.         PUSH    BC
  472.         CALL    _RQCHK
  473.         POP     BC
  474.         RET
  475. ;
  476. ; ASSIGN CHANAL GIVEN  BY
  477. ;
  478. ;  INPUT :
  479. ;    (B) - DISK NUMBER       (hi bit - not rebuild disk system)
  480. ;    (C) - CHANAL NUMBER     (-1 - passivate)
  481. ;   (DE) - DESCRIPTOR        (0  - not assign disk chanal)
  482. ;  OUTPUT :
  483. ;    (A) - ERROR CODE
  484. ;
  485. ;    IMPORTANT WARNING :
  486. ;      WARM REBOOT OR BDOS FUNCTION "RESET DISK SYSTEM" (#13)
  487. ;      HIGLY RECOMMENDED TO BE PERFORMED AFTER CALLING THIS BIOS FUNCTION !
  488. ;
  489. ASSIGN:
  490.         PUSH    BC
  491.         PUSH    DE
  492.                 LD A,D
  493.                 OR E
  494.                 CALL NZ,_RQSET
  495.         POP     DE
  496.         POP     BC
  497.         OR      A
  498.         RET     NZ              ; SET CHANAL SUCCESS ?
  499.         LD      HL,DSKTAB       ; STORE CHANAL NUMBER IN DISK TABLE
  500.         LD      A,C
  501.                 BIT 7,B
  502.                 RES 7,B
  503.         LD      C,B
  504.         LD      B,0
  505.         ADD     HL,BC
  506.         LD      (HL),A          ; UPDATE DISK TABLE
  507.  
  508.                 RLA
  509.                 LD A,0
  510.                 RET NZ
  511.                 RET C
  512.  
  513. ASSIG1: LD      HL,MEM          ; RESET OF MEMORY ALLOCATION
  514.         LD      (MEMPTR),HL
  515.         LD      C,0             ; LOOP BY DISKS
  516.         LD      HL,DSKTAB
  517.         LD      (ASSDSK),HL
  518.         LD      HL,DPBASE
  519.         LD      (ASSDPA),HL
  520.  
  521. ASS1:   PUSH    BC
  522.         LD      HL,(ASSDSK)
  523.         LD      A,(HL)
  524.         OR      A
  525.         JP      M,ASS7          ; DISK NOT ASSIGNED ?
  526.         LD      C,A             ; CHANAL
  527.         LD      DE,CH           ;
  528.         CALL    _RQCHK          ; GET CHANAL DESCRIPTOR
  529.         JP      Z,ASS_OK
  530.         LD      (HL),0FFH       ; ERROR - PASSIVATE CHANAL
  531.         JP      ASS7
  532. ASS_OK:
  533.  
  534.         LD      HL,(ASSDPA)     ; BLOCK OF POINTERS
  535.         LD      C,8             ; CLEAR 8 BYTES FOR BDOS
  536.         XOR     A
  537. ASS2:   LD      (HL),A
  538.         INC     HL
  539.         DEC     C
  540.         JP      NZ,ASS2
  541.         INC     HL              ; DIRECTORY BUFFER
  542.         INC     HL
  543.         LD      E,(HL)          ; DPB ADDRESS
  544.         INC     HL
  545.         LD      D,(HL)
  546.         INC     HL
  547.         PUSH    HL              ; ---- PREPARING DPB ----
  548.         LD      HL,(DBLTR)      ; BLOCKS PER TRACK
  549.         EX      DE,HL           ; DPB ADDRESS
  550.         LD      (HL),E          ; SPT
  551.         INC     HL
  552.         LD      (HL),D
  553.         PUSH    HL
  554.         LD      HL,0            ; MAKING TRACK OFFSET FOR CP/M
  555.         LD      C,0             ; OFFSET
  556.         LD      A,(DALTCYL)
  557.         OR      A
  558.         JP      Z,ASS31
  559. ASS3:   ADD     HL,DE           ; HL+=SPT
  560.         INC     C               ; OFFSET++
  561.         DEC     A
  562. ;       CPI     64              ; SIZE OF SYSTEM IN BLOCKS
  563.         JP      NZ,ASS3         ;
  564. ASS31:  EX      DE,HL           ; DE:=OFFSET*DBLTR
  565.         POP     HL              ; DPB+1
  566.         LD      A,C
  567.         LD      BC,12           ; OFFSET
  568.         ADD     HL,BC
  569.         LD      (HL),A
  570.         PUSH    HL
  571.         LD      HL,(DBLDR)      ; BLOCKS PER DRIVE
  572.         LD      A,L             ; DSM=(DBLDR-OFFSET*DBLTR) DIV 16 - 1
  573.         SUB     E
  574.         LD      L,A
  575.         LD      A,H
  576.         SBC     A,D
  577.         LD      H,A
  578.         LD      A,L
  579.         RRCA
  580.         RRCA
  581.         RRCA
  582.         RRCA
  583.         AND     0FH
  584.         LD      L,A
  585.         LD      A,H
  586.         RRCA
  587.         RRCA
  588.         RRCA
  589.         RRCA
  590.         LD      H,A
  591.         AND     0F0H
  592.         OR      L
  593.         LD      L,A
  594.         LD      A,H
  595.         AND     0FH
  596.         LD      H,A
  597.         DEC     HL
  598.         EX      DE,HL           ;DE=DSM
  599.         POP     HL
  600.         LD      BC,-8
  601.         ADD     HL,BC
  602.         LD      (HL),E          ;DSM
  603.         INC     HL
  604.         LD      (HL),D
  605.         DEC     HL
  606.         DEC     HL              ;IF DSM<256 THEN EXM:=1 ELSE DSM:=0
  607.         LD      (HL),0
  608.         LD      A,D
  609.         OR      A
  610.         JP      NZ,ASS5         ;<>0 ?
  611.         INC     (HL)
  612. ASS5:   XOR     A               ;ALVSIZ=DSM/8+1
  613.         EX      DE,HL
  614.         ADD     HL,HL
  615.         RLA
  616.         ADD     HL,HL
  617.         RLA
  618.         ADD     HL,HL
  619.         RLA
  620.         ADD     HL,HL
  621.         RLA
  622.         ADD     HL,HL
  623.         RLA
  624.         LD      L,H
  625.         LD      H,A
  626.         INC     HL
  627.         LD      (ALVSIZ),HL
  628.         EX      DE,HL
  629.         PUSH    HL
  630.         LD      HL,(DDIRENT)
  631.         DEC     HL
  632.         EX      DE,HL
  633.         POP     HL
  634.         INC     HL
  635.         INC     HL
  636.         INC     HL
  637.         LD      (HL),E  ;DRM=DDIRENT-1
  638.         INC     HL
  639.         LD      (HL),D
  640.         PUSH    HL
  641.         EX      DE,HL   ;DE=DDIRENT-1
  642.         ADD     HL,HL   ;H=DRM*32/2048 (32 BYTES PER DIRECTORY ENTRY)
  643.         ADD     HL,HL   ;              (2048 BYTES PER LOGICAL BLOCK)
  644.         LD      DE,0    ;RESERVED BLOCKS (LOGICAL) FOR DIRECTORY
  645.         INC     H
  646. ASS4:   SCF
  647.         LD      A,D
  648.         RRA
  649.         LD      D,A
  650.         LD      A,E
  651.         RRA
  652.         LD      E,A
  653.         DEC     H
  654.         JP      NZ,ASS4
  655.         POP     HL
  656.         INC     HL
  657.         LD      (HL),D  ;AL0
  658.         INC     HL
  659.         LD      (HL),E  ;AL1
  660.         INC     HL
  661.         EX      DE,HL
  662.         LD      A,(DHEADR);CHANGED HEADS PRESENT ?
  663.         OR      A
  664.         LD      HL,0
  665.         JP      Z,ASS6  ;NO. CHECK AREA = 0
  666.         LD      HL,(DDIRENT);YES. CHECK AREA = DDIRENT/4
  667.         XOR     A
  668.         LD      A,H
  669.         RRA
  670.         LD      H,A
  671.         LD      A,L
  672.         RRA
  673.         LD      L,A
  674.         XOR     A
  675.         LD      A,H
  676.         RRA
  677.         LD      H,A
  678.         LD      A,L
  679.         RRA
  680.         LD      L,A
  681. ASS6:   EX      DE,HL
  682.         LD      (HL),E  ;CKS
  683.         INC     HL
  684.         LD      (HL),D  ; --- DPB READY NOW ---
  685.         LD      HL,(MEMPTR)
  686.         EX      DE,HL
  687.         EX      (SP),HL ; HL=CSV
  688.         LD      (HL),E  ; CSV=MEMPTR
  689.         INC     HL
  690.         LD      (HL),D
  691.         INC     HL
  692.         EX      (SP),HL ;HL=CKS
  693.         ADD     HL,DE   ;MEMPTR=MEMPTR+CKS
  694.         POP     DE      ;DE=ALV
  695.         EX      DE,HL
  696.         LD      (HL),E
  697.         INC     HL
  698.         LD      (HL),D
  699.         LD      HL,(ALVSIZ)
  700.         ADD     HL,DE
  701.         LD      (MEMPTR),HL;MEMPTR=MEMPTR+ALVSIZ
  702. ASS7:
  703.         LD      HL,(ASSDSK)
  704.         INC     HL
  705.         LD      (ASSDSK),HL
  706.         LD      HL,(ASSDPA)
  707.         LD      BC,16
  708.         ADD     HL,BC
  709.         LD      (ASSDPA),HL
  710.         POP     BC      ;C=DISK NUMBER
  711.         INC     C
  712.         LD      A,C
  713.         CP      10
  714.         JP      NZ,ASS1
  715.  
  716.         XOR     A       ;ASSIGN O"KEY
  717.         RET
  718.  
  719. ;------------------------------
  720. MES_1           DB "CP/M  V2.2     COPYRIGHT(C)  BY  DIGITAL RESEARCH"
  721.                 DB 0DH,0AH,"BIOS  V",VERSBIOS," COPYRIGHT(C)  BY  XVR - PRODUCT"
  722. CR_LF:   DB      0DH,0AH,0
  723. ERRMS1: DB      0DH,0AH,"BIOS ERROR ",0
  724. ERRMS2: DB      " AT ",0
  725. ASKMSG: DB      0DH,0AH
  726.         DB      " SELECT ((R)ETRY, (I)GNORE, (A)BORT, (F)AIL) :"
  727.         DB      0
  728.  
  729. BRQ:                    ; REQUEST BLOCK FOR МMC1207-MONITOR
  730. CHAN:   DB      1       ; CHANAL
  731. COM:    DB      2       ; COMMAND
  732. BLN:    DB      0E5H    ; NUMBER OF BLOCKS
  733. TRACK:  DW      1       ; TRACK NUMBER
  734. BLOCK:  DW      0       ; BLOCK NUMBER
  735. DMA:    DW      80H     ; BUFFER ADDRESS
  736.  
  737. DISKNO: DB 0;    1       ; DISK NUMBER
  738.  
  739. DSKTAB:
  740.         DB      1,0,2,0FFH,0FFH
  741.         DB      0FFH,0FFH,0FFH,0FFH,0FFH
  742. TOT_DSK EQU     $-DSKTAB
  743.  
  744. DPBASE:
  745.         DW      0,0
  746.         DW      0,0
  747.         DW      DIRBF,DPB0
  748.         DW      0,0
  749.  
  750.         DW      0,0
  751.         DW      0,0
  752.         DW      DIRBF,DPB1
  753.         DW      0,0
  754.  
  755.         DW      0,0
  756.         DW      0,0
  757.         DW      DIRBF,DPB2
  758.         DW      0,0
  759.  
  760.         DW      0,0
  761.         DW      0,0
  762.         DW      DIRBF,DPB3
  763.         DW      0,0
  764.  
  765.         DW      0,0
  766.         DW      0,0
  767.         DW      DIRBF,DPB4
  768.         DW      0,0
  769.  
  770.         DW      0,0
  771.         DW      0,0
  772.         DW      DIRBF,DPB5
  773.         DW      0,0
  774.  
  775.         DW      0,0
  776.         DW      0,0
  777.         DW      DIRBF,DPB6
  778.         DW      0,0
  779.  
  780.         DW      0,0
  781.         DW      0,0
  782.         DW      DIRBF,DPB7
  783.         DW      0,0
  784.  
  785.         DW      0,0
  786.         DW      0,0
  787.         DW      DIRBF,DPB8
  788.         DW      0,0
  789.  
  790.         DW      0,0
  791.         DW      0,0
  792.         DW      DIRBF,DPB9
  793.         DW      0,0
  794. ;
  795. ;
  796. ;
  797. DPB0:   DW      0
  798.         DB      4
  799.         DB      15
  800.         DB      0
  801.         DW      0
  802.         DW      0
  803.         DW      0
  804.         DW      0
  805.         DW      0
  806. DPB1:   DW      0
  807.         DB      4
  808.         DB      15
  809.         DB      0
  810.         DW      0
  811.         DW      0
  812.         DW      0
  813.         DW      0
  814.         DW      0
  815. DPB2:   DW      0
  816.         DB      4
  817.         DB      15
  818.         DB      0
  819.         DW      0
  820.         DW      0
  821.         DW      0
  822.         DW      0
  823.         DW      0
  824. DPB3:   DW      0
  825.         DB      4
  826.         DB      15
  827.         DB      0
  828.         DW      0
  829.         DW      0
  830.         DW      0
  831.         DW      0
  832.         DW      0
  833. DPB4:   DW      0
  834.         DB      4
  835.         DB      15
  836.         DB      0
  837.         DW      0
  838.         DW      0
  839.         DW      0
  840.         DW      0
  841.         DW      0
  842. DPB5:   DW      0
  843.         DB      4
  844.         DB      15
  845.         DB      0
  846.         DW      0
  847.         DW      0
  848.         DW      0
  849.         DW      0
  850.         DW      0
  851. DPB6:   DW      0
  852.         DB      4
  853.         DB      15
  854.         DB      0
  855.         DW      0
  856.         DW      0
  857.         DW      0
  858.         DW      0
  859.         DW      0
  860. DPB7:   DW      0
  861.         DB      4
  862.         DB      15
  863.         DB      0
  864.         DW      0
  865.         DW      0
  866.         DW      0
  867.         DW      0
  868.         DW      0
  869. DPB8:   DW      0
  870.         DB      4
  871.         DB      15
  872.         DB      0
  873.         DW      0
  874.         DW      0
  875.         DW      0
  876.         DW      0
  877.         DW      0
  878. DPB9:   DW      0
  879.         DB      4
  880.         DB      15
  881.         DB      0
  882.         DW      0
  883.         DW      0
  884.         DW      0
  885.         DW      0
  886.         DW      0
  887.  
  888. BIOS_LEN  EQU  $-BIOS
  889. ;PUBLIC    BIOS_LEN
  890. ;PRINT <BIOS LENGTH > %(BIOS_LEN)
  891.  
  892. ;DPB0:
  893. ;0      DW      32              ; SPT  SECT. PER TRACK
  894. ;2      DB      4               ; BSH  BLOCK SHIFT FACTOR
  895. ;3      DB      15              ; BLM  BLOCK MASK
  896. ;4      DB      0               ; EXM  EXTENT MASK
  897. ;5      DW      315             ; DSM  DISK SIZE -1
  898. ;7      DW      127             ; DRM  DIRECTORY ENTRYES
  899. ;9      DB      11000000B       ; AL0  ALLOC 0
  900. ;10     DB      00000000B       ; AL1  ALLOC 1
  901. ;11     DW      32              ; CKS  CHECK SIZE
  902. ;13     DW      2               ; OFFS TRACK OFFSET
  903.  
  904. NSECT   EQU   $
  905. WBSPT   EQU   NSECT+   1
  906. MEMPTR  EQU   WBSPT+   1
  907. ASSDSK  EQU   MEMPTR+  2
  908. ASSDPA  EQU   ASSDSK+  2
  909. ALVSIZ  EQU   ASSDPA+  2
  910.  
  911. ;CH:                    ; КАНАЛЬНЫЙ ОПИСАТЕЛЬ (ПОМЕСТИТЬ В ПЗУ)
  912. DTYP    EQU   ALVSIZ+    2       ;КОД УСТРОЙСТВА
  913. CH      EQU   DTYP
  914. DUS     EQU   DTYP+      1       ;НОМЕР ПРИВОДА
  915. DDTYP   EQU   DUS+       1       ;КОД ПРИВОДА
  916. DHEADF  EQU   DDTYP+     1       ;ЧИСЛО ФИКСИРОВАННЫХ ГОЛОВОК
  917. DHEADR  EQU   DHEADF+    1       ;ЧИСЛО СМЕННЫХ ГОЛОВОК
  918. DCYLN   EQU   DHEADR+    1       ;ЧИСЛО ЦИЛИНДРОВ НА ДИСКЕ
  919. DSECTT  EQU   DCYLN+     2       ;ЧИСЛО СЕКТОРОВ НА ДОРОЖКЕ
  920. DBYTES  EQU   DSECTT+    1       ;ЧИСЛО БАЙТОВ В СЕКТОРЕ
  921. DALTCYL EQU   DBYTES+    2       ;ЧИСЛО АЛЬТЕРНАТИВНЫХ ЦИЛИНДРОВ
  922. DBEGCYL EQU   DALTCYL+   1       ;НОМЕР НАЧАЛЬНОГО ЦИЛИНДРА
  923. DBLDR   EQU   DBEGCYL+   2       ;ЧИСЛО БЛОКОВ НА ДИСКЕ
  924. DBLTR   EQU   DBLDR+     2       ;ЧИСЛО БЛОКОВ НА ДОРОЖКЕ
  925. DTRACK  EQU   DBLTR+     2       ;ЧИСЛО ДОРОЖЕК НА ДИСКЕ
  926. DSEKTL  EQU   DTRACK+    2       ;ДЛИНА НОМЕРА БЛОКА В СЕКТОРЕ
  927. DDIRENT EQU   DSEKTL+    1       ;ЧИСЛО ЗАПИСЕЙ В ДИРЕКТОРИИ
  928. DIF0    EQU   DDIRENT+   2       ;РАЗМЕТКА ПЕРВОЙ ДОРОЖКИ
  929. DIF1    EQU   DIF0+      1       ;РАЗМЕТКА ВТОРОЙ ДОРОЖКИ
  930. DIF2    EQU   DIF1+      1       ;РАЗМЕТКА ВСЕХ ОСТАВШИХСЯ ДОРОЖЕК
  931. DTIF    EQU   DIF2+      1       ;СМЕЩЕНИЕ ПЕРВОГО СЕКТОРА
  932. DF8     EQU   DTIF+      1       ;ПРИЗНАК 8-ДЮЙМОВОГО ДИСКА
  933.                                 ;ИЛИ НОМЕР НАЧАЛЬНОЙ ГОЛОВКИ
  934. DFMFM   EQU   DF8+       1       ;ПЛОТНОСТЬ ЗАПИСИ
  935. DFN     EQU   DFMFM+     1       ;РАЗМЕР СЕКТОРА
  936. DFGPL   EQU   DFN+       1       ;GAP3 ДЛЯ ЧТЕНИЯ/ЗАПИСИ
  937. DFGPF   EQU   DFGPL+     1       ;GAP3 ДЛЯ ФОРМАТА
  938. DFSRHUT EQU   DFGPF+     1       ;ВРЕМЯ ШАГА
  939.                                 ;ИЛИ ВРЕМЯ ШАГА ПРИ SEEK
  940. DFHLT   EQU   DFSRHUT+   1       ;ВРЕМЯ ОПУСКАНИЯ ГОЛОВКИ
  941.                                 ;ИЛИ ВРЕМЯ ШАГА ПРИ RECALIBRATE
  942. DFMOTOR EQU   DFHLT+     1       ;ПРИЗНАК ВКЛЮЧЕНИЯ МОТОРА
  943.  
  944.  
  945. DIRBF   EQU   DFMOTOR+   1       ; DIRECTORY BUFFER
  946. MEM     EQU   DIRBF+     128
  947.  
  948.                 DEPHASE
  949.