PHASE 0F800H
 
_RUN:   JP  RUN              ; MAIN MENU OF LOADER
 
_CI:    JP  CI               ; CONSOL IN
 
_RI:    JP  RI               ; READER IN
 
_CO:    JP  CO               ; CONSOL OUT
 
_PO:    JP  POUT             ; PUNCH OUT
 
_LO:    JP  LOUT             ; LIST OUT
 
_CSTS:  JP  CSTS             ; CONSOL STATUS
 
_IOCHK: JP  IOCHK            ; GET IO STATE
 
_IOSET: JP  IOSET            ; SET IO STATE
 
_MEMCK: JP  MEMCK            ; GET TOP OF RAM
 
_IODEF: JP  RET_RAM          ; SET USER IO
 
_REST:  JP  IRUN             ; INTERRUPT ENTRY
 
_RQDIO: JP  RQDIO            ; CALL TO DISK MONITOR
 
_RQRES: JP  RQRES            ; BUFFER RESET
 
_RQSET: JP  RQSET            ; CHANALL ASSIGN
 
_RQCHK: JP  RQCHK            ; GET CHANALL DESCRIPTION BLOCK
 
_MUX:   JP  MUX
 
 
 
; TEMPORARY
 
RI:
 
POUT:
 
 
 
RET_RAM: NOP
 
         RET
 
 
 
RUN:    CALL S_ON
 
        JP   ALL_INIT
 
 
 
IRUN:   CALL S_ON
 
        RST  0
 
 
 
MUX:    CALL    SYS_ON
 
        CALL    DO_MUX
 
        CALL    SYS_OFF
 
        EI
 
        RET
 
 
 
;       IF ROM
 
LPORT   EQU     0FBH
 
;       ELSE
 
;LPORT   EQU     7BH
 
;       ENDIF
 
 
 
LOUT:   IN A,(LPORT)
 
        RLCA
 
        JR C,LOUT
 
        LD A,C
 
        OUT (0FBH),A
 
        OUT (07BH),A
 
        OUT (0FBH),A
 
        RET
 
 
 
MEMCK:  LD      B,0F8H
 
        LD      A,0
 
        RET
 
 
 
ENTR1:  CALL    S_OFF
 
        IM      2
 
        JP      BIOS
 
 
 
ENTR2:  CALL    S_OFF
 
        IM      2
 
        CALL    BIOS+3
 
ENT_ADR EQU     $-2
 
        CALL    S_ON
 
        IM      1
 
        RET
 
 
 
;----------------------
 
RQRES:  CALL    SYS_ON
 
        LD      (IX-_BUFT),0FFH
 
        CALL    SYS_OFF
 
        EI
 
        RET
 
;-----------------------
 
RQSET:  LD      A,_SETCH
 
        JR      SETCHK
 
;-----------------------
 
RQCHK:  LD      A,_GETCH
 
SETCHK: CALL    SYS_ON
 
        CALL    PSCHK
 
 
 
;        EI
 
;        LD      (RQCOM),A
 
;        LD      (IX-_RQCHAN),C
 
;        PUSH    DE
 
;        PUSH    HL
 
;        EX      DE,HL
 
;        LD      (RQBADR),HL
 
;        LD      DE,RQCHAN
 
;        CALL    DISK
 
;        POP     HL
 
;        POP     DE
 
 
 
        CALL    SYS_OFF
 
        EI
 
        RET
 
 
 
;----------------------
 
RQDIO:  CALL    SYS_ON
 
        CALL    PDISK
 
 
 
;        LD      HL,RQCHAN
 
;        LD      (HL),C
 
;        LD      B,8
 
;        EX      DE,HL
 
;RQLP:   INC     HL
 
;        INC     DE
 
;        CALL    MOVAM
 
;        LD      (DE),A
 
;        DJNZ    RQLP
 
;        EI
 
;        CALL    DISK
 
 
 
        CALL    SYS_OFF
 
        EI
 
        RET
 
 
 
;----------------------
 
CO:     CALL    SYS_ON
 
        EI
 
        PUSH    AF
 
        LD      A,C
 
        CALL    CONOUT
 
        POP     AF
 
        CALL    SYS_OFF
 
        EI
 
        RET
 
 
 
;----------------------
 
CI:     CALL    SYS_ON
 
        EI
 
        CALL    READ_K
 
        CALL    SYS_OFF
 
        EI
 
        RET
 
 
 
;----------------------
 
CSTS:   CALL    SYS_ON
 
        CALL    STAT_K
 
        CALL    SYS_OFF
 
        EI
 
        RET
 
 
 
;----------------------
 
;УСТАНОВКА СИСТЕМЫ В/В
 
IOSET:  LD      A,C
 
        LD      (IOBYTE),A
 
        RET
 
;----------------------
 
;СОСТОЯНИЕ СИСТЕМЫ В/В
 
IOCHK:  LD      A,(IOBYTE)
 
        RET
 
 
 
;----------------------
 
;RQMOV:  CALL    S_OFF
 
 
 
;LLLL:  LD      A,0FEH
 
;       IN      A,(0FEH)
 
;       AND     1
 
;       JR      NZ,LLLL
 
 
 
;        LDIR
 
;        CALL    S_ON
 
;        EI
 
;        RET
 
 
 
;RQGET:  LD      A,(HL)
 
;        EX      DE,HL
 
;        CALL    MOVMA
 
;        EX      DE,HL
 
;        INC     HL
 
;        INC     DE
 
;        DJNZ    RQGET
 
;        EI
 
;        RET
 
 
 
;RQPUT:  CALL    MOVAM
 
;        LD      (DE),A
 
;        INC     HL
 
;        INC     DE
 
;        DJNZ    RQPUT
 
;        EI
 
;        RET
 
 
 
;----------------------
 
;ПРОЦЕДУРЫ ДЛЯ ОБМЕНА С МОНИТОРОМ
 
;MOVAM:  CALL    S_OFF
 
;        LD      A,(HL)
 
;        CALL    S_ON
 
;        RET
 
 
 
;MOVMA:  CALL    S_OFF
 
;        LD      (HL),A
 
;        CALL    S_ON
 
;        RET
 
 
 
;----------------------
 
;SYSTEM ON/OFF PROC'S
 
S_ON:   DI
 
                LD (RA_I),A
 
                LD A,0X52
 
SYS_SW          EX (SP),HL
 
        LD      (R_ADR),HL
 
        POP     HL
 
                OUT (0XFD),A
 
;        LD      (RA_I),A
 
;        LD      A,C
 
;        LD      (RC_I),A
 
;        LD      C,0
 
;FE_CPY  EQU     $-1
 
;        SET     7,C
 
;        LD      A,0
 
;BOR_CPY EQU     $-1
 
;        OUT     (C),A
 
                LD A,0
 
RA_I    EQU     $-1
 
;        LD      C,0
 
;RC_I    EQU     $-1
 
        JP      0
 
R_ADR   EQU     $-2
 
 
 
SYS_ON: DI
 
        EX      (SP),HL
 
        LD      (R_1),HL
 
        POP     HL
 
        CALL    S_ON
 
        LD      (OLD_SP),SP
 
        LD      SP,SYS_SP
 
        IM      1
 
        PUSH    IX
 
        LD      IX,IX_BASE
 
        JP      0
 
R_1     EQU     $-2
 
 
 
S_OFF:  DI
 
                LD (RA_I),A
 
                LD A,0X42
 
;        EX      (SP),HL
 
;        LD      (R_ADR),HL
 
;        POP     HL
 
;        LD      (RA_I),A
 
;        LD      A,C
 
;        LD      (RC_I),A
 
;        LD      A,(FE_IMG)
 
;        LD      (FE_CPY),A
 
;        RES     7,A
 
;        LD      C,A
 
;        LD      A,(BORDER)
 
;        LD      (BOR_CPY),A
 
;        OUT     (C),A
 
        JR      SYS_SW
 
 
 
SYS_OFF: DI
 
        EX      (SP),HL
 
        LD      (R_2),HL
 
        POP     HL
 
        POP     IX
 
        CALL    S_OFF
 
        LD      SP,(OLD_SP)
 
        IM      2
 
        JP      0
 
R_2     EQU     $-2
 
 
 
INT_R           DI
 
        LD      (OLD_SP),SP
 
        LD      SP,SYS_SP
 
        IM      1
 
        LD      (I_A_I),A
 
                LD A,0X52
 
                OUT (0XFD),A
 
;        LD      A,C
 
;        LD      (I_C_I),A
 
;        LD      A,(FE_CPY)
 
;        SET     7,A
 
;        LD      C,A
 
;        LD      A,(BOR_CPY)
 
;        OUT     (C),A
 
        CALL    DO_INT
 
                LD A,0X42
 
                OUT (0XFD),A
 
;        LD      A,(FE_IMG)
 
;        LD      (FE_CPY),A
 
;        RES     7,A
 
;        LD      C,A
 
;        LD      A,(BORDER)
 
;        LD      (BOR_CPY),A
 
;        OUT     (C),A
 
        LD      A,0
 
I_A_I   EQU     $-1
 
;        LD      C,0
 
;I_C_I   EQU     $-1
 
        DI
 
        LD      SP,(OLD_SP)
 
        IM      2
 
        EI
 
        RET
 
 
 
PM_SET_PG       LD A,(TMP_W)
 
                CP 3
 
                JP NC,PM_ERR_3
 
                POP BC
 
                CALL SYS_OFF
 
                RRCA
 
                RRCA
 
                AND 0XC0
 
                LD B,A
 
                LD A,D
 
                XOR 0X80
 
                CPL
 
                LD C,LOW (WIN_A0)
 
                OUT (C),A
 
                XOR A
 
                EI
 
                RET
 
 
 
CHTBL:  DW      CH0          ; CHANALL DESCRIPTIONS
 
        DW      CHED
 
        DW      CH2
 
        DW      CH3
 
        DW      CH4
 
        DW      CH5
 
        DW      CH6
 
        DW      CH7
 
        DW      CH8
 
        DW      CH9
 
 
 
;-----------------------
 
;ТАБЛИЦА ДРАЙВЕРОВ
 
DCTBL: DW      0       ;РЕЗЕРВ
 
        DW      0       ;PD1207
 
        DW      ED_DRV
 
        DW      FDC_DRV
 
        DW      HD_DRV       ;WD1207
 
        DW      0       ;РЕЗЕРВ
 
        DW      0       ;РЕЗЕРВ
 
        DW      0       ;РЕЗЕРВ
 
;-----------------------
 
 
 
OLD_SP          DW 0
 
 
 
QQ      EQU     $
 
 
 
                DUPL (256*HIGH($+255))-$-1,0;        DEFS    (256*HIGH($+255))-$-1
 
 
 
;PRINT <IDLE SPACE > %($-QQ)
 
 
 
INTRADR: DW     INT_R
 
 
 
;-----------------------
 
;ГИБКИЙ МАГНИТНЫЙ ДИСК 80X2
 
CH0:    DB      0FFH    ;ПРИЗНАК ДЕЙСТВИТЕЛЬНОСТИ
 
        DB      3       ;КОД УСТРОЙСТВА
 
        DB      0       ;НОМЕР ПРИВОДА
 
        DB      0       ;ЧИСЛО НЕБУФЕРИЗИРУЕМЫХ И СИСТЕМНЫХ ДОРОЖЕК
 
        DB      0       ;ЧИСЛО ФИКСИРОВАННЫХ ГОЛОВОК
 
        DB      2       ;ЧИСЛО СМЕННЫХ ГОЛОВОК
 
        DW      80      ;ЧИСЛО ЦИЛИНДРОВ НА ДИСКЕ
 
        DB      16      ;ЧИСЛО СЕКТОРОВ НА ДОРОЖКЕ
 
        DW      256     ;ЧИСЛО БАЙТОВ В СЕКТОРЕ
 
        DB      2       ;ЧИСЛО СИСТЕМНЫХ ДОРОЖЕК
 
        DW      0       ;НОМЕР НАЧАЛЬНОЙ ДОРОЖКИ
 
        DW      5120    ;ЧИСЛО БЛОКОВ НА ДИСКЕ
 
        DW      32      ;ЧИСЛО БЛОКОВ НА ДОРОЖКЕ
 
        DW      160     ;ЧИСЛО ДОРОЖЕК НА ДИСКЕ
 
        DB      8       ;ДЛИНА НОМЕРА БЛОКА В СЕКТОРЕ
 
        DW      128     ;ЧИСЛО ЗАПИСЕЙ В ДИРЕКТОРИИ
 
        DB      2       ;РАЗМЕТКА ПЕРВОЙ ДОРОЖКИ
 
        DB      2       ;РАЗМЕТКА ВТОРОЙ ДОРОЖКИ
 
        DB      2       ;РАЗМЕТКА ВСЕХ ОСТАВШИХСЯ ДОРОЖЕК
 
        DB      0       ;СМЕЩЕНИЕ ПЕРВОГО СЕКТОРА
 
        DB      0       ;ПРИЗНАК 8-ДЮЙМОВОГО ДИСКА
 
        DB      0FFH    ;ПЛОТНОСТЬ ЗАПИСИ
 
        DB      1       ;РАЗМЕР СЕКТОРА
 
        DB      80      ;GAP3 ДЛЯ ЧТЕНИЯ/ЗАПИСИ
 
        DB      80      ;GAP3 ДЛЯ ФОРМАТА
 
        DB      0       ;ВРЕМЯ ШАГА
 
        DB      0       ;ВРЕМЯ ОПУСКАНИЯ ГОЛОВКИ
 
        DB      0       ;ПРИЗНАК ВКЛЮЧЕНИЯ МОТОРА
 
 
 
MON_SIZE EQU    $-_RUN+0X3A
 
BSS_START       EQU $+0X3A
 
 
 
CH2             EQU $
 
CHED            EQU CH2+0X23
 
CH3             EQU     CHED+0X23-5
 
CH4             EQU     CH3+23H
 
CH5             EQU     CH4+23H
 
CH6             EQU     CH5+23H
 
CH7             EQU     CH6+23H
 
CH8             EQU     CH7+23H
 
CH9             EQU     CH8+23H
 
 
 
BUF_MON         EQU CH9+23H      ; DMON BUFFER (1024 BYTE)
 
BSS_END         EQU BUF_MON+1024
 
BSS_LNG         EQU BSS_END-BSS_START
 
;NXT     EQU     BUF+1024
 
 
 
;PRINT <MONITOR IMAGE SIZE - > %(MON_SIZE)
 
;PRINT <TOTAL RAM-RESIDENT PART OF RBIOS - > %(NXT-_RUN)
 
;PRINT <FREE RAM (FROM TOP) - > %(0FFFFH-NXT+1)
 
 
 
                DEPHASE