-   
- ;LAST UPDATE: 21.11.2013 savelij 
-   
- ;.Z80 
- ;        CSEG 
-   
- ;        TITLE   'BIOS' 
-   
- ;PRINT   MACRO   A1,A2 
- ;IF1 
- ;.PRINTX /A1 A2/ 
- ;ENDIF 
- ;        ENDM 
-   
- ;INCLUDE DEFINES.INC 
-   
-         PHASE  0EA00H 
- ;CCP     EQU     $-1600H 
- BDOS    EQU     CCP+806H 
- CDISK   EQU     0004H           ;CURRENT DISK 
- ;IOBYTE  EQU     0003H           ;I/O BYTE ADDRESS 
- ;BIOS    EQU     $ 
-   
- ; 
- ; MC1207-MONITOR ENTRY POINTS 
- ; 
- ;_RUN    EQU     0F800H          ; 
- ;_CI     EQU     0F803H          ; 
- ;_RI     EQU     0F806H          ; 
- ;_CO     EQU     0F809H          ; 
- ;_PO     EQU     0F80CH          ; 
- ;_LO     EQU     0F80FH          ; 
- ;_CSTS   EQU     0F812H          ; 
- ;_IOCHK  EQU     0F815H          ; 
- ;_IOSET  EQU     0F818H          ; 
- ;_MEMCK  EQU     0F81BH          ; 
- ;_IODEF  EQU     0F81EH          ; 
- ;_REST   EQU     0F821H          ; 
- ;_RQDIO  EQU     0F824H          ; 
- ;_RQRES  EQU     0F827H          ; 
- ;_RQSET  EQU     0F82AH          ; 
- ;_RQCHK  EQU     0F82DH          ; 
- ;_MUX    EQU     0F830H          ; C=81H - LOAD CPM 
- ;--------------------- 
-   
-         JP      BOOT            ; 00 
- WBOT1:  JP      WBOOT           ; 03 
-         JP      CONST           ; 06 
-         JP      CONIN           ; 09 
-         JP      CONOUT_          ; 0C 
-         JP      LIST            ; 0F 
-         JP      PUNCH           ; 12 
-         JP      READER          ; 15 
-         JP      HOME            ; 18 
-         JP      SELDSK          ; 1B 
-         JP      SETTRK          ; 1E 
-         JP      SETSEC          ; 21 
-         JP      SETDMA          ; 24 
-         JP      READ            ; 27 
-         JP      WRITE           ; 2A 
-         JP      LISTST          ; 2D 
-         JP      SECTRAN         ; 30 
-   
-         JP      ASSIGN          ; 33 
-         JP      GETCH           ; 36 
-         JP      BMUX            ; 39 
- ;*********************** 
- ; 0FFH - SYMBOL PRESENT. 
- ;   0H - NO SYMBOL 
- ; 
- CONST: 
-         JP      _CSTS 
-   
- ;*********************** 
- ; INTERNAL MUX 
- ; C-CODE (HI BIT - MON'S MUX) 
- BMUX:   BIT     7,C 
-         RES     7,C 
-         JP      NZ,_MUX 
-         INC     C 
-         DEC     C 
-         JR      Z,SET_CIOERR 
-         LD      A,0FFH 
-         RET 
-   
- SET_CIOERR:                             ; SET CRIT IO ERROR HANDLER (HL) 
-         LD      DE,(CIOERR_A)           ; RET PREVIOS HANDLER (HL) 
-         LD      (CIOERR_A),HL 
-         EX      DE,HL 
-         XOR     A 
-         RET 
-   
- ;*********************** 
- ; INPUT FROM BUFER 
- ; 
- CONIN: 
-         JP      _CI 
-   
- ;************************* 
- ;  CONSOL OUTPUT 
- ; 
- CONOUT_: 
-         JP      _CO 
-   
- ;************************** 
- ;  TYPE MESSAGE GIVEN BY (HL) 
- ; 
- TYPMSG: 
-         LD      A,(HL) 
-         OR      A 
-         RET     Z 
-         LD      C,A 
-         CALL    CONOUT_ 
-         INC     HL 
-         JP      TYPMSG 
-   
- ;************************** 
- ;  LIST STATUS 
- ; 
- LISTST: 
- ;       IF ROM 
- LPORT_  EQU     0FBH 
- ;       ELSE 
- ;LPORT_ EQU     7BH 
- ;       ENDIF 
-         IN A,(LPORT_) 
-         RLCA;RRCA 
-         CCF 
-         SBC A,A 
-         RET 
-   
- ;************************** 
- ;  LIST CHAR FROM REG. C 
- ; 
- LIST: 
-         JP      _LO 
-   
- ;************************** 
- ;  PUNCH CHAR FROM C 
- ; 
- PUNCH: 
-         JP      _PO 
-   
- ;************************** 
- ;  READ CHAR INTO A 
- ; 
- READER: 
-         JP      _RI 
-   
- ;*************************** 
- ;  COLD START 
- ; 
- BOOT: 
-         LD      SP,80H 
-         EI 
-         CALL    ASSIG1 
-   
- ;        LD      DE,BRQ          ; FORMAT EDISK 
- ;        LD      C,1 
- ;        CALL    _RQDIO 
-   
- ;        LD      DE,BRQ          ; RESET FLOPPY 
- ;        XOR     A 
- ;        LD      C,A 
- ;        LD      (COM),A 
- ;        CALL    _RQDIO 
-   
-         LD      C,0 
-         CALL    SELDSK 
-         XOR     A 
-         LD      (IOBYTE),A 
-         LD      (CDISK),A 
-         LD      (DISKNO),A 
-         LD      HL,MES_1 
-         CALL    TYPMSG 
-         JP      GOCPM_ 
-   
- ;************************* 
- ;  WARM START 
- ; 
- WBOOT: 
-         LD      SP,80H 
-         EI 
-         LD      C,1H 
-         CALL    _MUX 
-   
- GOCPM_ 
-         LD      A,0C3H          ; 'JMP' COMMAND 
-         LD      (0000),A 
-         LD      HL,WBOT1        ; WARM BOOT ADDRESS 
-         LD      (1),HL          ; 
-         LD      (5),A           ; 'JMP' COMMAND 
-         LD      HL,BDOS         ; BDOS ENTRY POINT 
-         LD      (6),HL 
-         LD      BC,0080H        ; BDOS DMA ADDRESS 
-         CALL    SETDMA          ; SET IT 
-         LD      A,(CDISK)       ; CURRENT DRIVE FOR CCP 
-         LD      C,A 
-         JP      CCP             ; START CPM 
-   
- ;************************ 
- ;  MOVE TO THE TRACK 00 POSITION OF 
- ; CURRENT DRIVE 
- ; 
- HOME: 
-         LD      HL,0 
-         LD      (TRACK),HL 
-         LD      BC,0100H        ; SEEK COMMAND + 0 BLN 
-         JP      EXEC 
-   
- ;************************ 
- ;  SELECT DISK GIVEN BY REG. C 
- ; 
- SELDSK: LD      A,C 
-         CP      TOT_DSK 
-         JP      NC,SELERR 
-         LD      HL,DSKTAB 
-         LD      B,0 
-         ADD     HL,BC 
-         LD      A,(HL) 
-         OR      A               ; CHANAL ASSIGNED ? 
-         JP      P,SEL1          ; O'KEY 
- SELERR: LD      HL,0 
-         LD      A,(DISKNO)      ; OLD DISK 
-         LD      (CDISK),A       ; SELECT IT 
-         RET                     ; ERROR 
- SEL1: 
-         LD      (CHAN),A        ; UPDATE REQUEST BLOCK 
-         LD      A,C 
-         LD      (DISKNO),A      ; STORE NEW DISK NUMBER 
-         LD      L,C 
-         LD      H,0 
-         ADD     HL,HL 
-         ADD     HL,HL 
-         ADD     HL,HL 
-         ADD     HL,HL 
-         LD      DE,DPBASE 
-         ADD     HL,DE 
-         RET                     ; O'KEY. (HL<>0) 
- ;********************** 
- ;  SET TRACK GIVEN BY REG. C 
- ; 
- SETTRK: 
-         LD      HL,TRACK 
-         LD      (HL),C 
-         INC     HL 
-         LD      (HL),B 
-         XOR     A 
-         RET 
-   
- ;       LXI     B,0100H         ; SEEK COMMAND + 0 BLN 
- ;       JMP     EXEC            ; EXECUTE IT. 
-   
- ;********************** 
- ;  SET SECTOR GIVEN BY REG. C 
- ; 
- SETSEC: 
-         LD      A,C 
-         LD      (BLOCK),A 
-         XOR     A               ; O'KEY 
-         RET 
-   
- ;********************** 
- ;  TRANSLATE THE SECTOR GIVEN BY BC 
- ; USING THE TRANSLATE TABLE GIVEN BY DE 
- ; 
- SECTRAN: 
-         LD      HL,1 
-         ADD     HL,BC 
-         RET 
-   
- ;********************** 
- ;  SET DMA ADDRESS GIVEN BY REG. B & C 
- ; 
- SETDMA: 
-         LD      L,C 
-         LD      H,B 
-         LD      (DMA),HL 
-         RET 
-   
- ;************************* 
- ;  WRITE ONE SECTOR 
- ; 
- WRITE:  LD      BC,0601H        ; WRITE 1 SECTOR 
-         JP      EXEC 
-   
- ;********************** 
- ;  READ ONE SECTOR 
- ; 
- READ:   LD      BC,0401H 
-         CALL    EXEC 
-   
- ;       PUSH    PSW 
- ;       LHLD    DMA 
- ;       MVI     B,128 
- ;       CALL    DUMP 
- ;       LXI     H,CRLF 
- ;       CALL    TYPMSG 
- ;       POP     PSW 
-   
-         RET 
-   
- ;*********************** 
- MS:     EX      (SP),HL 
-         CALL    TYPMSG 
-         INC     HL 
-         EX      (SP),HL 
-         RET 
-   
- ;********************** 
- ;  EXECUTION OF COMMAND 
- ;    (B) - COMMAND 
- ;    (C) - NUMBER OF BLOCKS 
- ; 
- EXEC: 
-         LD      HL,BRQ+1 
-         LD      (HL),B          ; COMMAND 
-         INC     HL 
-         LD      (HL),C          ; # OF BLOCKS 
-   
- ;       LXI     H,CRLF 
- ;       CALL    TYPMSG 
- ;       LDA     BRQ 
- ;       CALL    HEX 
- ;       CALL    MS 
- ;       DB 'CHANAL  ',0 
- ;       LDA     BRQ+1 
- ;       CALL    HEX 
- ;       CALL    MS 
- ;       DB 'COMMAND  ',0 
- ;       LDA     TRACK 
- ;       CALL    HEX 
- ;       CALL    MS 
- ;       DB 'TRACK  ',0 
- ;       LDA     BLOCK 
- ;       CALL    HEX 
- ;       CALL    MS 
- ;       DB 'BLOCK',0DH,0AH,0 
- ;       CALL    _CI 
-   
- AGAIN: 
-         LD      DE,BRQ 
-         LD      A,(DE) 
-         LD      C,A             ; CHANAL 
-         CALL    DISK_            ; EXECUTION OF COMMAND 
-         OR      A               ; O'KEY ? 
-         RET     Z               ; YES. RETURN 
-         LD      BC,BRQ 
-         CALL    DEF_CIO         ; IN: A-ERROR, BC-REQ BLOCK 
- CIOERR_A EQU $-2                ; OUT: (C) 0-ABORT, 1-RETRY, 2-IGNORE, 3-FAIL 
-         LD      A,C 
-         OR      A 
-         JP      Z,WBOT1 
-         DEC     A 
-         JR      Z,AGAIN1 
-         DEC     A 
-         RET 
- AGAIN1: LD      HL,COM 
-         LD      A,(HL) 
-         PUSH    AF 
-         LD      (HL),3 
-         LD      DE,BRQ 
-         LD      A,(DE) 
-         LD      C,A             ; CHANAL 
-         CALL    DISK_            ; EXECUTION OF COMMAND 
-         POP     AF 
-         LD      (COM),A 
-         JR      AGAIN 
-   
- DEF_CIO:PUSH    AF 
-         LD      HL,ERRMS1 
-         CALL    TYPMSG 
-         POP     AF 
-         CALL    HEX             ; ERROR CODE 
-         LD      HL,ERRMS2 
-         CALL    TYPMSG 
-         LD      A,(CHAN) 
-         CALL    HEX             ; CHANAL 
-         LD      A,(COM) 
-         CALL    HEX             ; COMMAND 
-         LD      A,(TRACK) 
-         CALL    HEX             ; TRACK 
-         LD      A,(BLOCK) 
-         CALL    HEX             ; BLOCK 
- ASK:    LD      HL,ASKMSG 
-         CALL    TYPMSG 
-         CALL    CONIN 
-         CP 3 
-         JR Z,ABORT_CLR 
-         CALL    UPCASECHAR 
-         LD      C,A 
-         CALL    CONOUT_ 
-         LD      HL,RSTR 
-         LD      BC,4 
-         CPIR 
-         JR      NZ,ASK 
-         RET 
-   
- ABORT_CLR       XOR A 
-         LD (4),A 
-         LD C,A 
-         RET 
-   
- RSTR:   DB "FIRA" 
-   
- ; 
- ; TYPE BYTE IN HEX FROM (A) & ":" AFTER IT 
- ; 
- HEX: 
-         PUSH    AF 
-         RRCA 
-         RRCA 
-         RRCA 
-         RRCA 
-         CALL    DHEX_ 
-         POP     AF 
-         CALL    DHEX_ 
-         LD      C,":" 
-         JP      CONOUT_ 
-   
- DUMP:   LD      A,(HL) 
-         CALL    HEX 
-         INC     HL 
-         DEC     B 
-         JP      NZ,DUMP 
-         RET 
-   
- ; 
- ; TYPE ONE HEX DIGIT 
- ; 
- DHEX_   AND     0FH 
-         ADD     A,90H 
-         DAA 
-         ADC     A,40H 
-         DAA 
-         LD      C,A 
-         JP      CONOUT_ 
- ; 
- ; 
- UPCASECHAR: 
-         CP      60H 
-         RET     C 
-         SUB     20H 
-         RET 
- ; 
- ; DISK SYSTEM CALL 
- ; 
- DISK_ 
-         LD      A,C             ; REQUESTED CHANAL 
-         JP      _RQDIO          ; EXECUTE 
-   
- ; 
- ; GET LOGICAL DISK DESCRIPTOR BY ITS DISK NUMBER 
- ; 
- ;  INPUT : 
- ;     C  - DISK NUMBER 
- ;   (DE) - BUFFER FOR 34-BYTE DESCRIPTOR 
- ;  OUTPUT : 
- ;     A  - ERROR CODE 
- ;     C  - CHANAL NUMBER 
- ; BUFFER - DESCRIPTOR (34 BYTES) 
- ; 
- GETCH: 
-         LD      HL,DSKTAB 
-         LD      B,0 
-         ADD     HL,BC 
-         LD      A,(HL) 
-         OR      A 
-         RET     M       ; RETURN WITH 0FFH IF NOT ASSIGNED 
-         LD      C,A 
-         PUSH    BC 
-         CALL    _RQCHK 
-         POP     BC 
-         RET 
- ; 
- ; ASSIGN CHANAL GIVEN  BY 
- ; 
- ;  INPUT : 
- ;    (B) - DISK NUMBER       (hi bit - not rebuild disk system) 
- ;    (C) - CHANAL NUMBER     (-1 - passivate) 
- ;   (DE) - DESCRIPTOR        (0  - not assign disk chanal) 
- ;  OUTPUT : 
- ;    (A) - ERROR CODE 
- ; 
- ;    IMPORTANT WARNING : 
- ;      WARM REBOOT OR BDOS FUNCTION "RESET DISK SYSTEM" (#13) 
- ;      HIGLY RECOMMENDED TO BE PERFORMED AFTER CALLING THIS BIOS FUNCTION ! 
- ; 
- ASSIGN: 
-         PUSH    BC 
-         PUSH    DE 
-                 LD A,D 
-                 OR E 
-                 CALL NZ,_RQSET 
-         POP     DE 
-         POP     BC 
-         OR      A 
-         RET     NZ              ; SET CHANAL SUCCESS ? 
-         LD      HL,DSKTAB       ; STORE CHANAL NUMBER IN DISK TABLE 
-         LD      A,C 
-                 BIT 7,B 
-                 RES 7,B 
-         LD      C,B 
-         LD      B,0 
-         ADD     HL,BC 
-         LD      (HL),A          ; UPDATE DISK TABLE 
-   
-                 RLA 
-                 LD A,0 
-                 RET NZ 
-                 RET C 
-   
- ASSIG1: LD      HL,MEM          ; RESET OF MEMORY ALLOCATION 
-         LD      (MEMPTR),HL 
-         LD      C,0             ; LOOP BY DISKS 
-         LD      HL,DSKTAB 
-         LD      (ASSDSK),HL 
-         LD      HL,DPBASE 
-         LD      (ASSDPA),HL 
-   
- ASS1:   PUSH    BC 
-         LD      HL,(ASSDSK) 
-         LD      A,(HL) 
-         OR      A 
-         JP      M,ASS7          ; DISK NOT ASSIGNED ? 
-         LD      C,A             ; CHANAL 
-         LD      DE,CH           ; 
-         CALL    _RQCHK          ; GET CHANAL DESCRIPTOR 
-         JP      Z,ASS_OK 
-         LD      (HL),0FFH       ; ERROR - PASSIVATE CHANAL 
-         JP      ASS7 
- ASS_OK: 
-   
-         LD      HL,(ASSDPA)     ; BLOCK OF POINTERS 
-         LD      C,8             ; CLEAR 8 BYTES FOR BDOS 
-         XOR     A 
- ASS2:   LD      (HL),A 
-         INC     HL 
-         DEC     C 
-         JP      NZ,ASS2 
-         INC     HL              ; DIRECTORY BUFFER 
-         INC     HL 
-         LD      E,(HL)          ; DPB ADDRESS 
-         INC     HL 
-         LD      D,(HL) 
-         INC     HL 
-         PUSH    HL              ; ---- PREPARING DPB ---- 
-         LD      HL,(DBLTR)      ; BLOCKS PER TRACK 
-         EX      DE,HL           ; DPB ADDRESS 
-         LD      (HL),E          ; SPT 
-         INC     HL 
-         LD      (HL),D 
-         PUSH    HL 
-         LD      HL,0            ; MAKING TRACK OFFSET FOR CP/M 
-         LD      C,0             ; OFFSET 
-         LD      A,(DALTCYL) 
-         OR      A 
-         JP      Z,ASS31 
- ASS3:   ADD     HL,DE           ; HL+=SPT 
-         INC     C               ; OFFSET++ 
-         DEC     A 
- ;       CPI     64              ; SIZE OF SYSTEM IN BLOCKS 
-         JP      NZ,ASS3         ; 
- ASS31:  EX      DE,HL           ; DE:=OFFSET*DBLTR 
-         POP     HL              ; DPB+1 
-         LD      A,C 
-         LD      BC,12           ; OFFSET 
-         ADD     HL,BC 
-         LD      (HL),A 
-         PUSH    HL 
-         LD      HL,(DBLDR)      ; BLOCKS PER DRIVE 
-         LD      A,L             ; DSM=(DBLDR-OFFSET*DBLTR) DIV 16 - 1 
-         SUB     E 
-         LD      L,A 
-         LD      A,H 
-         SBC     A,D 
-         LD      H,A 
-         LD      A,L 
-         RRCA 
-         RRCA 
-         RRCA 
-         RRCA 
-         AND     0FH 
-         LD      L,A 
-         LD      A,H 
-         RRCA 
-         RRCA 
-         RRCA 
-         RRCA 
-         LD      H,A 
-         AND     0F0H 
-         OR      L 
-         LD      L,A 
-         LD      A,H 
-         AND     0FH 
-         LD      H,A 
-         DEC     HL 
-         EX      DE,HL           ;DE=DSM 
-         POP     HL 
-         LD      BC,-8 
-         ADD     HL,BC 
-         LD      (HL),E          ;DSM 
-         INC     HL 
-         LD      (HL),D 
-         DEC     HL 
-         DEC     HL              ;IF DSM<256 THEN EXM:=1 ELSE DSM:=0 
-         LD      (HL),0 
-         LD      A,D 
-         OR      A 
-         JP      NZ,ASS5         ;<>0 ? 
-         INC     (HL) 
- ASS5:   XOR     A               ;ALVSIZ=DSM/8+1 
-         EX      DE,HL 
-         ADD     HL,HL 
-         RLA 
-         ADD     HL,HL 
-         RLA 
-         ADD     HL,HL 
-         RLA 
-         ADD     HL,HL 
-         RLA 
-         ADD     HL,HL 
-         RLA 
-         LD      L,H 
-         LD      H,A 
-         INC     HL 
-         LD      (ALVSIZ),HL 
-         EX      DE,HL 
-         PUSH    HL 
-         LD      HL,(DDIRENT) 
-         DEC     HL 
-         EX      DE,HL 
-         POP     HL 
-         INC     HL 
-         INC     HL 
-         INC     HL 
-         LD      (HL),E  ;DRM=DDIRENT-1 
-         INC     HL 
-         LD      (HL),D 
-         PUSH    HL 
-         EX      DE,HL   ;DE=DDIRENT-1 
-         ADD     HL,HL   ;H=DRM*32/2048 (32 BYTES PER DIRECTORY ENTRY) 
-         ADD     HL,HL   ;              (2048 BYTES PER LOGICAL BLOCK) 
-         LD      DE,0    ;RESERVED BLOCKS (LOGICAL) FOR DIRECTORY 
-         INC     H 
- ASS4:   SCF 
-         LD      A,D 
-         RRA 
-         LD      D,A 
-         LD      A,E 
-         RRA 
-         LD      E,A 
-         DEC     H 
-         JP      NZ,ASS4 
-         POP     HL 
-         INC     HL 
-         LD      (HL),D  ;AL0 
-         INC     HL 
-         LD      (HL),E  ;AL1 
-         INC     HL 
-         EX      DE,HL 
-         LD      A,(DHEADR);CHANGED HEADS PRESENT ? 
-         OR      A 
-         LD      HL,0 
-         JP      Z,ASS6  ;NO. CHECK AREA = 0 
-         LD      HL,(DDIRENT);YES. CHECK AREA = DDIRENT/4 
-         XOR     A 
-         LD      A,H 
-         RRA 
-         LD      H,A 
-         LD      A,L 
-         RRA 
-         LD      L,A 
-         XOR     A 
-         LD      A,H 
-         RRA 
-         LD      H,A 
-         LD      A,L 
-         RRA 
-         LD      L,A 
- ASS6:   EX      DE,HL 
-         LD      (HL),E  ;CKS 
-         INC     HL 
-         LD      (HL),D  ; --- DPB READY NOW --- 
-         LD      HL,(MEMPTR) 
-         EX      DE,HL 
-         EX      (SP),HL ; HL=CSV 
-         LD      (HL),E  ; CSV=MEMPTR 
-         INC     HL 
-         LD      (HL),D 
-         INC     HL 
-         EX      (SP),HL ;HL=CKS 
-         ADD     HL,DE   ;MEMPTR=MEMPTR+CKS 
-         POP     DE      ;DE=ALV 
-         EX      DE,HL 
-         LD      (HL),E 
-         INC     HL 
-         LD      (HL),D 
-         LD      HL,(ALVSIZ) 
-         ADD     HL,DE 
-         LD      (MEMPTR),HL;MEMPTR=MEMPTR+ALVSIZ 
- ASS7: 
-         LD      HL,(ASSDSK) 
-         INC     HL 
-         LD      (ASSDSK),HL 
-         LD      HL,(ASSDPA) 
-         LD      BC,16 
-         ADD     HL,BC 
-         LD      (ASSDPA),HL 
-         POP     BC      ;C=DISK NUMBER 
-         INC     C 
-         LD      A,C 
-         CP      10 
-         JP      NZ,ASS1 
-   
-         XOR     A       ;ASSIGN O"KEY 
-         RET 
-   
- ;------------------------------ 
- MES_1           DB "CP/M  V2.2     COPYRIGHT(C)  BY  DIGITAL RESEARCH" 
-                 DB 0DH,0AH,"BIOS  V",VERSBIOS," COPYRIGHT(C)  BY  XVR - PRODUCT" 
- CR_LF:   DB      0DH,0AH,0 
- ERRMS1: DB      0DH,0AH,"BIOS ERROR ",0 
- ERRMS2: DB      " AT ",0 
- ASKMSG: DB      0DH,0AH 
-         DB      " SELECT ((R)ETRY, (I)GNORE, (A)BORT, (F)AIL) :" 
-         DB      0 
-   
- BRQ:                    ; REQUEST BLOCK FOR МMC1207-MONITOR 
- CHAN:   DB      1       ; CHANAL 
- COM:    DB      2       ; COMMAND 
- BLN:    DB      0E5H    ; NUMBER OF BLOCKS 
- TRACK:  DW      1       ; TRACK NUMBER 
- BLOCK:  DW      0       ; BLOCK NUMBER 
- DMA:    DW      80H     ; BUFFER ADDRESS 
-   
- DISKNO: DB 0;    1       ; DISK NUMBER 
-   
- DSKTAB: 
-         DB      1,0,2,0FFH,0FFH 
-         DB      0FFH,0FFH,0FFH,0FFH,0FFH 
- TOT_DSK EQU     $-DSKTAB 
-   
- DPBASE: 
-         DW      0,0 
-         DW      0,0 
-         DW      DIRBF,DPB0 
-         DW      0,0 
-   
-         DW      0,0 
-         DW      0,0 
-         DW      DIRBF,DPB1 
-         DW      0,0 
-   
-         DW      0,0 
-         DW      0,0 
-         DW      DIRBF,DPB2 
-         DW      0,0 
-   
-         DW      0,0 
-         DW      0,0 
-         DW      DIRBF,DPB3 
-         DW      0,0 
-   
-         DW      0,0 
-         DW      0,0 
-         DW      DIRBF,DPB4 
-         DW      0,0 
-   
-         DW      0,0 
-         DW      0,0 
-         DW      DIRBF,DPB5 
-         DW      0,0 
-   
-         DW      0,0 
-         DW      0,0 
-         DW      DIRBF,DPB6 
-         DW      0,0 
-   
-         DW      0,0 
-         DW      0,0 
-         DW      DIRBF,DPB7 
-         DW      0,0 
-   
-         DW      0,0 
-         DW      0,0 
-         DW      DIRBF,DPB8 
-         DW      0,0 
-   
-         DW      0,0 
-         DW      0,0 
-         DW      DIRBF,DPB9 
-         DW      0,0 
- ; 
- ; 
- ; 
- DPB0:   DW      0 
-         DB      4 
-         DB      15 
-         DB      0 
-         DW      0 
-         DW      0 
-         DW      0 
-         DW      0 
-         DW      0 
- DPB1:   DW      0 
-         DB      4 
-         DB      15 
-         DB      0 
-         DW      0 
-         DW      0 
-         DW      0 
-         DW      0 
-         DW      0 
- DPB2:   DW      0 
-         DB      4 
-         DB      15 
-         DB      0 
-         DW      0 
-         DW      0 
-         DW      0 
-         DW      0 
-         DW      0 
- DPB3:   DW      0 
-         DB      4 
-         DB      15 
-         DB      0 
-         DW      0 
-         DW      0 
-         DW      0 
-         DW      0 
-         DW      0 
- DPB4:   DW      0 
-         DB      4 
-         DB      15 
-         DB      0 
-         DW      0 
-         DW      0 
-         DW      0 
-         DW      0 
-         DW      0 
- DPB5:   DW      0 
-         DB      4 
-         DB      15 
-         DB      0 
-         DW      0 
-         DW      0 
-         DW      0 
-         DW      0 
-         DW      0 
- DPB6:   DW      0 
-         DB      4 
-         DB      15 
-         DB      0 
-         DW      0 
-         DW      0 
-         DW      0 
-         DW      0 
-         DW      0 
- DPB7:   DW      0 
-         DB      4 
-         DB      15 
-         DB      0 
-         DW      0 
-         DW      0 
-         DW      0 
-         DW      0 
-         DW      0 
- DPB8:   DW      0 
-         DB      4 
-         DB      15 
-         DB      0 
-         DW      0 
-         DW      0 
-         DW      0 
-         DW      0 
-         DW      0 
- DPB9:   DW      0 
-         DB      4 
-         DB      15 
-         DB      0 
-         DW      0 
-         DW      0 
-         DW      0 
-         DW      0 
-         DW      0 
-   
- BIOS_LEN  EQU  $-BIOS 
- ;PUBLIC    BIOS_LEN 
- ;PRINT <BIOS LENGTH > %(BIOS_LEN) 
-   
- ;DPB0: 
- ;0      DW      32              ; SPT  SECT. PER TRACK 
- ;2      DB      4               ; BSH  BLOCK SHIFT FACTOR 
- ;3      DB      15              ; BLM  BLOCK MASK 
- ;4      DB      0               ; EXM  EXTENT MASK 
- ;5      DW      315             ; DSM  DISK SIZE -1 
- ;7      DW      127             ; DRM  DIRECTORY ENTRYES 
- ;9      DB      11000000B       ; AL0  ALLOC 0 
- ;10     DB      00000000B       ; AL1  ALLOC 1 
- ;11     DW      32              ; CKS  CHECK SIZE 
- ;13     DW      2               ; OFFS TRACK OFFSET 
-   
- NSECT   EQU   $ 
- WBSPT   EQU   NSECT+   1 
- MEMPTR  EQU   WBSPT+   1 
- ASSDSK  EQU   MEMPTR+  2 
- ASSDPA  EQU   ASSDSK+  2 
- ALVSIZ  EQU   ASSDPA+  2 
-   
- ;CH:                    ; КАНАЛЬНЫЙ ОПИСАТЕЛЬ (ПОМЕСТИТЬ В ПЗУ) 
- DTYP    EQU   ALVSIZ+    2       ;КОД УСТРОЙСТВА 
- CH      EQU   DTYP 
- DUS     EQU   DTYP+      1       ;НОМЕР ПРИВОДА 
- DDTYP   EQU   DUS+       1       ;КОД ПРИВОДА 
- DHEADF  EQU   DDTYP+     1       ;ЧИСЛО ФИКСИРОВАННЫХ ГОЛОВОК 
- DHEADR  EQU   DHEADF+    1       ;ЧИСЛО СМЕННЫХ ГОЛОВОК 
- DCYLN   EQU   DHEADR+    1       ;ЧИСЛО ЦИЛИНДРОВ НА ДИСКЕ 
- DSECTT  EQU   DCYLN+     2       ;ЧИСЛО СЕКТОРОВ НА ДОРОЖКЕ 
- DBYTES  EQU   DSECTT+    1       ;ЧИСЛО БАЙТОВ В СЕКТОРЕ 
- DALTCYL EQU   DBYTES+    2       ;ЧИСЛО АЛЬТЕРНАТИВНЫХ ЦИЛИНДРОВ 
- DBEGCYL EQU   DALTCYL+   1       ;НОМЕР НАЧАЛЬНОГО ЦИЛИНДРА 
- DBLDR   EQU   DBEGCYL+   2       ;ЧИСЛО БЛОКОВ НА ДИСКЕ 
- DBLTR   EQU   DBLDR+     2       ;ЧИСЛО БЛОКОВ НА ДОРОЖКЕ 
- DTRACK  EQU   DBLTR+     2       ;ЧИСЛО ДОРОЖЕК НА ДИСКЕ 
- DSEKTL  EQU   DTRACK+    2       ;ДЛИНА НОМЕРА БЛОКА В СЕКТОРЕ 
- DDIRENT EQU   DSEKTL+    1       ;ЧИСЛО ЗАПИСЕЙ В ДИРЕКТОРИИ 
- DIF0    EQU   DDIRENT+   2       ;РАЗМЕТКА ПЕРВОЙ ДОРОЖКИ 
- DIF1    EQU   DIF0+      1       ;РАЗМЕТКА ВТОРОЙ ДОРОЖКИ 
- DIF2    EQU   DIF1+      1       ;РАЗМЕТКА ВСЕХ ОСТАВШИХСЯ ДОРОЖЕК 
- DTIF    EQU   DIF2+      1       ;СМЕЩЕНИЕ ПЕРВОГО СЕКТОРА 
- DF8     EQU   DTIF+      1       ;ПРИЗНАК 8-ДЮЙМОВОГО ДИСКА 
-                                 ;ИЛИ НОМЕР НАЧАЛЬНОЙ ГОЛОВКИ 
- DFMFM   EQU   DF8+       1       ;ПЛОТНОСТЬ ЗАПИСИ 
- DFN     EQU   DFMFM+     1       ;РАЗМЕР СЕКТОРА 
- DFGPL   EQU   DFN+       1       ;GAP3 ДЛЯ ЧТЕНИЯ/ЗАПИСИ 
- DFGPF   EQU   DFGPL+     1       ;GAP3 ДЛЯ ФОРМАТА 
- DFSRHUT EQU   DFGPF+     1       ;ВРЕМЯ ШАГА 
-                                 ;ИЛИ ВРЕМЯ ШАГА ПРИ SEEK 
- DFHLT   EQU   DFSRHUT+   1       ;ВРЕМЯ ОПУСКАНИЯ ГОЛОВКИ 
-                                 ;ИЛИ ВРЕМЯ ШАГА ПРИ RECALIBRATE 
- DFMOTOR EQU   DFHLT+     1       ;ПРИЗНАК ВКЛЮЧЕНИЯ МОТОРА 
-   
-   
- DIRBF   EQU   DFMOTOR+   1       ; DIRECTORY BUFFER 
- MEM     EQU   DIRBF+     128 
-   
-                 DEPHASE 
-