;LAST UPDATE: 31.12.2016 savelij
 
 
 
;        MAIN   "DOSI*",0XC6
 
;        ORG    0X321C
 
SETERRAD
 
;call из 0X246
 
;вместо 0X21D
 
        LD      A,0X0D
 
        LD      (0X5D20),A
 
        JP      0X21D
 
POSIT
 
;call из 0X20CC
 
;вместо 0X3E44
 
        PUSH    HL
 
        PUSH    BC
 
        PUSH    AF
 
        PUSH    DE
 
        LD      A,0XED
 
        LD      (0X5C86),A
 
        LD      A,0X0C
 
        LD      (0X5C8A),A
 
        LD      A,E
 
         JR     LL323d
 
LL3235
 
        LD      A,(HL)
 
        CP      0XFF
 
        RET     Z
 
        RST     0X10
 
        INC     HL
 
        JR      LL3235
 
LL323d
 
        LD      B,"0"
 
LL323f  SUB     10
 
         JR     C,LL3246
 
        INC     B
 
         JR     LL323f
 
LL3246
 
        PUSH    AF
 
        LD      A,B
 
        RST     0X10
 
        POP     AF
 
                ADD A,0X30+10;        ADD       A,"0"+10
 
        RST     0X10
 
        POP     DE
 
        POP     AF
 
        POP     BC
 
        POP     HL
 
        EI      
 
        JP      0X3E44 ;позиционирование
 
 
 
       ;DS 3,0XFF
 
 
 
TFormTS
 
        DB      "Format track       Side",0
 
 
 
       ;DS 3,0XFF
 
 
 
TFile
 
        DB      0X16,0,0
 
        DB      "File ",34
 
        DB      0X13,1,0XFF
 
TExists
 
        DB      0X13,0
 
        DB      34,0XD
 
       ;DB "Exists... Over write?(Y/N)"
 
        DB      "Exists!Overwrite?(Y/N/Add)"
 
        DB      0XFF
 
TComplete
 
        DB      "Complete"
 
        DB      0XD
 
        DB      "Name:",0
 
TFORMAT
 
        DB      "FORMAT:   1 - Normal   "
 
        DB      0XD,0X17,0XA
 
        DB      " 2 - Turbo"
 
        DB      0XD,0X17,0XA
 
        DB      " 3 - Fast turbo"
 
        DB      0
 
 
 
       ;DS 6,0XFF
 
CHECKON
 
;call из 0X20C1
 
;вместо XOR A:INC HL:LD (HL),A ;0X5CD8
 
        INC     HL
 
        LD      A,(0X5CE8)
 
        LD      (HL),A
 
        XOR     A
 
        RET     
 
PRHD1
 
;call из 0X20DE
 
;вместо 0X330F
 
        PUSH    AF
 
        LD      A,"1"
 
        JR      LL32f9
 
PRHD0
 
;call из 0X20D2
 
;вместо 0X32DD
 
        PUSH    AF
 
        LD      A,"0"
 
LL32f9
 
        PUSH    AF
 
        LD      A,0XF8
 
        LD      (0X5C86),A
 
        LD      A,0X17
 
        LD      (0X5C8A),A
 
        POP     AF
 
        RST     0X10
 
        POP     AF
 
        JP      0X1FFD ;форматирование дорожки
 
LL330a
 
;кнопка для Overwrite
 
        CALL    0X1D9F ;очистка низа экрана
 
        LD      HL,TFile
 
        CALL    LL3235
 
        CALL    LL3329
 
        LD      HL,TExists
 
        CALL    LL3235
 
        LD      HL,0X4000
 
LL331f  DEC     HL
 
        LD      A,H
 
        OR      L
 
        JR      NZ,LL331f
 
        CALL    0X1052 ;ввод клавиши с ожиданием
 
        JR      LL3338
 
LL3329
 
        LD      A,(0X5CF6)
 
        ADD     A,"A"
 
        RST     0X10
 
        LD      A,":"
 
        RST     0X10
 
        LD      HL,0X5CDD ;адрес имени
 
        JP      0X2938 ;печать имени с расширением
 
LL3338
 
        PUSH    AF
 
        CALL    0X1D9F ;очистка низа экрана
 
        POP     AF
 
        CP      "Y"
 
        RET     Z
 
        CP      "A";0XD
 
        RET     
 
LL3343
 
;если при записи есть такой файл
 
;из 1AC1, SVNASTRDSK
 
        CALL    0X165D ;перенос описателя из буфера в память
 
        LD      HL,0X5CE5
 
        SET     7,(HL) ;включает overwrite=ON
 
        RET     
 
FORMDISK
 
;call из 0X1F1B
 
;вместо 0X20BD
 
        CALL    0X1D9F ;очистка низа экрана
 
        LD      HL,TFormTS
 
        RST     0X18
 
        CALL    0X20BD ;форматирование диска
 
        CALL    0X1D9F ;очистка низа экрана
 
        LD      HL,TComplete
 
        RST     0X18
 
        RET     
 
TPressR
 
;для ASKREPFORM
 
        DB      "Press R to repeat";,"."+0X80,0
 
                DC "."
 
                DB 0
 
SAVEFIL
 
;jp из 0X290C
 
;еще jr ниже
 
;вместо 0X1B53
 
        CALL    0X1D9F ;очистка низа экрана
 
        CALL    0X3E11 ;выборка типа дисковода
 
         RET    
 
SELFORMAT
 
;call из 0X1EDD
 
;вместо 0X3200
 
        CALL    0X1D9F ;очистка низа экрана
 
        LD      HL,TFORMAT
 
        RST     0X18
 
LL337f  CALL    0X1052 ;ввод клавиши с ожиданием
 
        CP      0X11
 
        JR      Z,LL3395
 
         CP     0X12
 
        JR      Z,LL33a1
 
         CP     0X13
 
        JR      Z,LL33a6
 
         CP     0
 
        JP      Z,0X01D3 ;п/п завершения
 
         JR     LL337f
 
LL3395
 
        LD      HL,0X1FB9 ;табл.секторов SLOW диска
 
LL3398  XOR     A
 
LL3399  LD      (0X5CE8),A
 
        LD      (0X5CE6),HL
 
        JR      SAVEFIL
 
LL33a1
 
        LD      HL,LL33ad ;табл.сект.FAST
 
        JR      LL3398
 
LL33a6
 
        LD      A,0X01
 
        LD      HL,LL33ad ;табл.сект.FAST
 
        JR      LL3399
 
LL33ad
 
;надо 0X325A
 
        DB      1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,1
 
SUB14
 
        LD      A,L
 
        SUB     0X0E
 
        LD      L,A
 
        RET     NC
 
        DEC     H
 
        RET     
 
 
 
       ;DS 9,0XFF
 
 
 
PARAMZAG
 
;call из 0X18AB
 
;вместо a,(0X5CD6)
 
;якобы фикс PEEK, но заглючивает Wolfed
 
        LD      A,(0X5CE5)
 
        CP      "B"
 
        JR      Z,LL33e2
 
        CP      "D"
 
        JR      Z,LL33e2
 
        CP      "#"
 
        JR      Z,LL33e2
 
        LD      A,"C"
 
       ;LD (0X5CE5),A ;зачем???
 
LL33e2  LD      A,(0X5CD6)
 
        RET     
 
SVNASTRDSK
 
        CALL    0X1CF0 ;поиск файла
 
        CALL    Z,LL3343 ;перенос опис.из буф.в пам.и вкл.Overwr=ON
 
LL33ec  CALL    0X0405 ;настр.на диск.Меняет перем-ю с типом диск-да
 
        CALL    0X1AC4 ;проверка =128 файлов
 
        JP      0X1B53 ;запись файла и инфы о нем
 
SAVER
 
;call из 0X1B53
 
;было 0X1B59
 
        LD      HL,0X5CE5 ;тип файла + "file exist" flag
 
        BIT     7,(HL)
 
        RES     7,(HL)
 
        ;JR NZ,LL33ff
 
        JP      Z,0X1B59
 
LL33ff
 
        CALL    LL330a ;Y/N
 
        JP      NZ,0X01D3 ;п/п завершения
 
       CP       "A"
 
       JP       Z,0X1B59
 
        LD      DE,(0X5CD9)
 
       DEC      DE
 
       INC      D
 
       ;LD A,E
 
       ;OR A
 
       ;JR Z,$+3
 
       ;INC D
 
        LD      A,(0X5CEA)
 
        CP      D
 
        JR      Z,LL341b
 
        CALL    0X2926 ;стирание файла
 
        JR      LL33ec
 
 
 
LL341b  LD      B,D
 
        LD      HL,(0X5C59)
 
        LD      (HL),0XAA
 
        INC     HL
 
        LD      DE,(0X5CD1)
 
        LD      (HL),E
 
        INC     HL
 
        LD      (HL),D
 
        LD      C,0X06
 
        LD      HL,(0X5CDB)
 
        LD      (0X5CE8),HL
 
        LD      HL,(0X5CD7)
 
        LD      (0X5CE6),HL
 
        LD      DE,(0X5CEB)
 
        CALL    0X1E4D
 
        LD      BC,(0X5D1E)
 
        CALL    0X1BBF
 
         CALL   0X1665
 
         RET    
 
OBROSH
 
;jp из 0X3D17
 
;вместо 0X2F69
 
        EI      
 
        JP      0X2F69
 
 
 
                IF 0;       IFN 0
 
bootkus2
 
;       DISP    bootst2
 
         NOP    ;посл.байт DEC (IX)
 
         LD     A,(IX+0X00)
 
        CP      0XFF
 
        JR      NZ,LL345b
 
        LD      A,(0XF86F)
 
         LD     (IX+0X00),A
 
LL345b  CALL    0XF7FA
 
        CALL    0XF816
 
        JP      0XF646
 
 
 
        CALL    0XF870
 
        CALL    0XF826
 
         INC    (IX+0X00)
 
        LD      A,(0XF86F)
 
        INC     A
 
         CP     (IX+0X00)
 
         LD     A,(IX+0X00)
 
        JR      NZ,LL347d
 
        XOR     A
 
         LD     (IX+0X00),A
 
LL347d  CALL    0XF7FA
 
        CALL    0XF816
 
        JP      0XF646
 
 
 
        CALL    0XF870
 
        CALL    0XF826
 
         DEC    (IX+0X00)
 
         DEC    (IX+0X00)
 
         DEC    (IX+0X00)
 
         BIT    7,(IX+0X00)
 
         LD     A,(IX+0X00)
 
        JR      Z,LL34b3
 
LL349e  LD      B,0X03
 
        ADD     A,B
 
        LD      B,A
 
        PUSH    BC
 
        LD      A,(0XF86F)
 
        SUB     B
 
        JR      C,LL34ac
 
        POP     AF
 
        JR      LL349e
 
LL34ac
 
        POP     AF
 
         DEC    A
 
         DEC    A
 
         DEC    A
 
        LD      (IX+0X00),A
 
LL34b3  CALL    0XF7FA
 
        CALL    0XF816
 
        JP      0XF646
 
 
 
        CALL    0XF870
 
        CALL    0XF826
 
         INC    (IX+0X00)
 
         INC    (IX+0X00)
 
         INC    (IX+0X00)
 
        LD      A,(0XF86F)
 
         SBC    A,(IX+0X00)
 
         LD     A,(IX+0X00)
 
        JR      NC,LL34e1
 
        LD      B,0X03
 
LL34d8  SUB     B
 
        JR      NC,LL34d8
 
         INC    A
 
         INC    A
 
         INC    A
 
        LD      (IX+0X00),A
 
LL34e1  CALL    0XF7FA
 
        CALL    0XF816
 
        JP      0XF646
 
 
 
        CALL    0X0D6B
 
        LD      A,0X03
 
        CALL    0XF8CB
 
        JP      0XF556
 
 
 
        LD      BC,0XFFFD
 
        LD      A,0X07
 
        OUT     (C),A
 
        LD      B,0XBF
 
        LD      A,0XFF
 
        OUT     (C),A ;глушит AY
 
        CALL    0XF870
 
        LD      A,0X07
 
        LD      (0X5C48),A
 
        LD      (0X5C8D),A
 
        CPL     
 
        LD      (0X5D3B),A
 
        LD      HL,0X3C00
 
        LD      (0X5C36),HL
 
        LD      L,(IX+0X00)
 
         LD     H,0X00
 
        ADD     HL,HL
 
        ADD     HL,HL
 
        ADD     HL,HL
 
        LD      DE,0XA000
 
        ADD     HL,DE
 
        LD      DE,0XF7F0
 
        LD      BC,0X0008
 
        LDIR    
 
        LD      HL,(0XF632)
 
        LD      (0X5C3D),HL
 
        LD      HL,0XF7EC
 
        LD      (0X5C5D),HL
 
        CALL    0X0D6B
 
        DI      
 
        POP     HL
 
        EXX     
 
        POP     BC
 
        POP     DE
 
        POP     HL
 
        POP     AF
 
        CALL    0X3D03
 
        JP      PE,0XF73A
 
        LD      (0X6F62),HL
 
        LD      L,A
 
        LD      (HL),H
 
         JR     NZ,LL356e
 
         JR     NZ,LL3570
 
         LD     (0XD50D),HL
 
        INC     A
 
        LD      HL,0X5802
 
        LD      DE,0X000A
 
LL355a  DEC     A
 
        JR      Z,LL356c
 
        ADD     HL,DE
 
        DEC     A
 
        JR      Z,LL356c
 
        ADD     HL,DE
 
        DEC     A
 
        JR      Z,LL356c
 
        INC     DE
 
        INC     DE
 
        ADD     HL,DE
 
        DEC     DE
 
        DEC     DE
 
        JR      LL355a
 
LL356c
 
        POP     DE
 
        RET     
 
LL356e
 
        PUSH    HL
 
        EXX     
 
LL3570  POP     HL
 
        LD      A,0X70
 
        PUSH    HL
 
        POP     DE
 
        INC     DE
 
        LD      BC,0X0007
 
        LD      (HL),A
 
        LDIR    
 
        EXX     
 
        RET     
 
 
 
        PUSH    HL
 
        EXX     
 
        POP     HL
 
        LD      A,0X42
 
        PUSH    HL
 
        POP     DE
 
        INC     DE
 
        LD      BC,0X0007
 
        LD      (HL),A
 
        LDIR    
 
        EXX     
 
        RET     
 
 
 
        PUSH    HL
 
        PUSH    DE
 
        SBC     HL,DE
 
        LD      A,(HL)
 
        LD      B,0X20
 
        SBC     A,B
 
        JR      C,LL35c3
 
        LD      IX,0XF981
 
        PUSH    HL
 
        LD      BC,0X0800
 
LL35a0  LD      A,(HL)
 
        CP      (IX+0X00)
 
        JR      NZ,LL35a7
 
        INC     C
 
LL35a7  INC     HL
 
        INC     IX
 
        DJNZ    LL35a0
 
        LD      A,C
 
        CP      0X08
 
        JR      NZ,LL35b4
 
        POP     HL
 
        JR      LL35c3
 
LL35b4
 
        EXX     
 
        POP     HL
 
        LD      BC,0X0008
 
        LDIR    
 
        EXX     
 
        LD      A,(0XF86E)
 
        INC     A
 
        LD      (0XF86E),A
 
LL35c3  POP     DE
 
        POP     HL
 
        RET     
 
 
 
        NOP     
 
        NOP     
 
 
 
        PUSH    AF
 
        PUSH    BC
 
        LD      B,0XD2
 
LL35cc  PUSH    BC
 
        XOR     A
 
        OUT     (0XFE),A
 
        RR      B
 
LL35d2  DJNZ    LL35d2
 
        SET     4,A
 
        OUT     (0XFE),A
 
        POP     BC
 
        DEC     B
 
        DJNZ    LL35cc
 
        POP     BC
 
        POP     AF
 
        RET     
 
 
 
        XOR     A
 
        CP      (IY+0X47)
 
        JP      NZ,0XF556
 
        CALL    0X0D6E
 
        LD      A,0X02
 
        CALL    0X1601
 
        XOR     A
 
        CALL    0XF8CB
 
        LD      A,0X01
 
        CALL    0X1601
 
        LD      (IY+0X47),0XFE
 
        JP      0XF795
 
 
 
        XOR     A
 
        CP      (IY+0X47)
 
        JP      NZ,0XF556
 
        CALL    0X0D6E
 
        LD      A,0X02
 
        CALL    0X1601
 
        LD      A,0X01
 
        CALL    0XF8CB
 
        LD      A,0X3F
 
        LD      (0XF86E),A
 
        LD      BC,0XFFFF
 
LL361a  NOP     
 
        DJNZ    LL361a
 
        DEC     C
 
        JR      NZ,LL361a
 
        JP      0XF5B4
 
 
 
        LD      DE,0XF8D1
 
        JP      0X0C0A
 
 
 
        DB      0X80
 
        DB      0X16,0X0A,0X05
 
        DB      "!!! NO  PROGRAMS !!!"
 
                DC " ";        DB       " "+0X80
 
 
 
        DB      0X16,0X0A,0X03,0X10,0X04
 
        DB      "MORE THAN 63 BASIC FILES"
 
;than!!!
 
                DC " ";        DB       " "+0X80
 
 
 
        DB      0X11,0X00,0X10,0X04,0X13,0X01
 
        DB      "     -=New ROM boot v1.06=-"
 
        DB      0X06
 
        DB      "Remix by CompoWellcome 05.02.99"
 
                DC ".";        DB       "."+0X80
 
 
 
        DB      0X10,0X02,0X13,0X01
 
        DB      "       INSERT NEW DISK"
 
        DB      0X06
 
        DB      "     FOR READING CATALOGUE."
 
;catalogue!
 
                DC " ";        DB       " "+0X80
 
 
 
        DB      "boot    "
 
 
 
        LD      HL,0X5AE1
 
        PUSH    HL
 
        POP     DE
 
        DEC     DE
 
        LD      BC,0X001F
 
        LDIR    
 
        LD      HL,0X5AFF
 
        LD      A,(0XF9BA)
 
        OR      A
 
        JR      Z,LL3703
 
        LD      A,(HL)
 
        AND     0X07
 
        INC     A
 
        CP      0X08
 
        JR      NZ,LL3710
 
        XOR     A
 
        LD      (0XF9BA),A
 
        LD      A,0X07
 
LL3703  LD      A,(HL)
 
        AND     0X07
 
        DEC     A
 
        OR      A
 
        JR      NZ,LL3710
 
        CPL     
 
        LD      (0XF9BA),A
 
        LD      A,0X01
 
LL3710  LD      (HL),A
 
        RET     
 
LL3712
 
         NOP    
 
        LD      A,0XC3
 
        LD      (0X5CC2),A
 
        LD      HL,0XF9E6
 
        LD      (0X5CC3),HL
 
        LD      IX,0X2FC1
 
        CALL    0XFA20
 
        LD      A,0X08
 
        LD      C,0X1F
 
        LD      IX,0X2A53
 
        CALL    0XFA20
 
        LD      (0XF9E7),SP
 
        LD      DE,0X0000
 
        LD      IX,0X2740
 
        CALL    0XFA20
 
        LD      SP,0X0000
 
        LD      IX,0X1FF3
 
        CALL    0XFA20
 
        LD      IX,0X1FEB
 
        CALL    0XFA20
 
        LD      IX,0X2FC1
 
        CALL    0XFA20
 
        LD      A,0XC9
 
        LD      (0X5CC2),A
 
        LD      A,(0X5CCD)
 
        AND     0X40
 
        RET     
 
LL3761
 
        LD      A,0X30
 
        INC     A
 
        CP      0X33
 
        LD      (0XFA0A),A
 
        JP      NZ,0XF6D0
 
        LD      A,0X30
 
        LD      (0XFA0A),A
 
        JR      LL3761
 
 
 
        DI      
 
        LD      IX,0X0000
 
        PUSH    IX
 
        JP      0X3D2F
 
                DUPL 3,0XFF;        DS  3,0XFF
 
bootln2 := $-bootst2
 
;       ENT     
 
;        ORG    ROM
 
;       DISP    0
 
;        ORG    bootkus2+bootln2
 
       ENDIF    
 
POSITPP
 
;jp из 0X3E4E
 
        PUSH    AF
 
        LD      A,(0X5CCE) ;0=READ,0XFF=WRITE
 
        OR      A
 
        JR      Z,POSppRD
 
        POP     AF
 
        PUSH    BC
 
        LD      B,A
 
        IN      A,(0X3F)
 
         CP     B ;в 0X3E52 это уже есть!
 
         POP    BC
 
        JP      POSITCONT;0X3E54
 
POSppRD
 
        POP     AF
 
        IN      A,(0X1F)
 
        AND     0X80
 
         JP     POSITCONT;0X3E54
 
       ;DB 0XFF
 
 
 
                IF resident=1;       IFN        resident
 
PPNORESC000
 
;если нет резидента 0XC000
 
;jp из 0X3C48
 
    ;проверка резидента 0XFFF0
 
        LD      HL,0XFFF0
 
        XOR     A
 
LL379e  XOR     (HL)
 
        ADC     A,H
 
        INC     L
 
        JR      NZ,LL379e
 
        CP      0X06 ;"RESIDENTPRESENT!"
 
               ;идиотизм - опять 8bit!
 
        JP      Z,0XC000
 
       IF       atm-3
 
        JP      9
 
       ELSE     
 
        XOR     A
 
        CALL    MEMDRV_
 
    ;проверка недокументированного резидента 0X5B00
 
        LD      B,0X13
 
        LD      H,0X5B
 
        XOR     A
 
LL37b1  XOR     (HL)
 
        ADC     A,L
 
        ADC     A,(HL)
 
        INC     L
 
        DJNZ    LL37b1
 
        CP      0X68
 
               ;идиотизм - опять 8bit!
 
       ;JP NZ,A7JP9;0X3C4B
 
       LD       A,7
 
       JP       NZ,9
 
        XOR     A
 
        LD      (0X5B04),A
 
        LD      (0X5B0D),A
 
                IF madrom=1;       IFN  madrom
 
        LD      HL,0XFE00
 
       ELSE     
 
        LD      HL,0X00C7
 
       ENDIF    
 
        LD      (0X5B11),HL
 
        JP      0X5B00
 
       ENDIF    ;~atm3
 
       ENDIF    ;resident
 
 
 
       ;DB 0XFF
 
 
 
USEmovSPD
 
;call из 0X3EBF
 
;вместо 0X3E44
 
        PUSH    HL
 
        PUSH    AF
 
        CALL    0X3E08 ;взять время перемещ.головки тек.дисковода
 
        LD      B,A
 
        POP     AF
 
        POP     HL
 
        JP      0X3E44
 
NEWER
 
;вместо 0X1DCD
 
        LD      HL,(0X5D11)
 
        INC     HL
 
        LD      A,(HL)
 
        CP      0XD
 
        JR      Z,NEWRel
 
        CALL    0X1DCD ;NEW new,old
 
        JP      L53D
 
NEWRel
 
        LD      HL,TRel
 
        RST     0X18
 
        JP      0X01D3 ;п/п завершения
 
TRel
 
       ;DB "Rel: 08.10.99",0XD,0
 
        DB      "Rel: 10.04.06",0XD,0
 
 
 
       ;DS 0X3800-$,0XFF
 
       ;ORG 0X3800
 
TCH1
 
;1-ая основная точка входа
 
        LD      A,(0X5CF6)
 
        CP      0X03
 
        JR      Z,L1
 
        LD      A,(0X5CCE)
 
        CALL    0X1E36 ;загрузка регистра дорожки
 
        JP      TCH1Q;0X1E70
 
L1
 
        PUSH    DE
 
        CALL    TEST_R
 
        JP      NZ,0X3EE1;NO DISK
 
        POP     DE
 
        POP HL
 
        POP BC
 
        XOR     A
 
        OR      B
 
        RET     Z
 
RD_SV
 
        PUSH    BC
 
        PUSH HL
 
        CALL    SECTR
 
        POP     HL
 
        INC     H
 
        PUSH    HL
 
        LD      HL,0X5CF4
 
        LD      A,0X10
 
        INC     (HL)
 
        CP      (HL)
 
        JR      NZ,LL3838
 
        LD      (HL),0X00
 
        INC     HL
 
        INC (HL)
 
LL3838  POP     HL
 
        POP BC
 
        DJNZ    RD_SV
 
        RET     
 
 
 
;Тест наличия Ram-Disk'а
 
;точнее, памяти под него
 
;для 128K - вроде как дисковод D
 
TEST_R
 
        DI      
 
       IF       atm=0
 
        LD      HL,0XFF10
 
        CALL    FPG
 
        OUT     (C),L
 
        LD      D,(HL)
 
        LD      (HL),H
 
        LD      A,0X90
 
        OUT     (C),A
 
        LD      E,(HL)
 
        LD      (HL),L
 
        OUT     (C),L
 
        LD      B,H
 
        LD      A,B
 
        CP      (HL)
 
        JR      NZ,L2
 
        LD      B,0X7F
 
        LD      (HL),D
 
        LD      A,0X90
 
        OUT     (C),A
 
        LD      (HL),E
 
        OUT     (C),L
 
       ENDIF    
 
        LD      A,0X08
 
        LD      B,0X83
 
L2
 
        PUSH    AF
 
        LD      (0X5CFD),A
 
        LD      A,B
 
        LD      (0X5CCB),A
 
        XOR     A
 
        OUT     (0XFF),A
 
        LD      A,(0X5CF6)
 
        ADD     A,0X3C
 
        LD      (0X5D16),A
 
        OUT     (0XFF),A
 
        LD      A,0XD0
 
        OUT     (0X1F),A
 
       IF       atm=0
 
        LD      A,(F_PAGE)
 
        LD      BC,0X7FFD
 
        OUT     (C),A
 
       ENDIF    
 
        POP     AF
 
        RET     
 
SECTR
 
        LD      DE,(0X5CF4)
 
        LD      A,H
 
        CP      0XBF
 
        JR      C,RED_SAV
 
        LD      A,0XFF
 
        CALL    LL38A6
 
        LD      A,(0X5CCE)
 
        AND     A
 
        JR      Z,LL38C0
 
        LD      DE,0X5D25
 
        LD BC,0X0100
 
        LDIR    
 
        LD      HL,0X5D25
 
        LD DE,(0X5CF4)
 
        CALL    RED_SAV
 
LL38A4  LD      A,0X00
 
LL38A6          EX AF,AF';  EXA 
 
        LD      A,(0X5CCE)
 
                EX AF,AF';        EXA   
 
        LD      (0X5CCE),A
 
        PUSH    HL
 
        PUSH DE
 
        LD      HL,0X5D25
 
        LD DE,0X000F
 
        CALL    RED_SAV
 
        POP     DE
 
        POP HL
 
        EX      AF,AF'
 
        LD      (0X5CCE),A
 
        RET     
 
LL38C0
 
        PUSH    HL
 
        LD      HL,0X5D25
 
        CALL    RED_SAV
 
        LD      HL,0X5D25
 
        POP     DE
 
        LD      BC,0X0100
 
        LDIR    
 
        JR      LL38A4
 
 
 
;Собственно чтение-запись из/в RAM-DISK
 
RED_SAV
 
        DI      
 
        CALL    FPG ;ищем тек.страницу на каждом секторе...
 
                 ;BC=7ffd (для ATM BC=fff7)
 
        LD      A,D ;лог.дорожка
 
;---Если RD расположен в верхних 512К---
 
                IF 0;       IFN 0
 
       CPL      ;растет сверху
 
        RLCA    
 
        AND     0XC0
 
        LD      C,A
 
        LD      A,D
 
        RRCA    
 
        RRCA    
 
        AND     0X07
 
        OR      0X30
 
        OR      C
 
        LD      C,0XFD
 
        OUT     (C),A
 
       ENDIF    
 
;----Если RD расположен во всех 896К----
 
                IF 1;       IFN 1
 
;               IF atm=1;       IFN     atm
 
       IF       atm=3
 
        RRCA    
 
        RRCA    
 
        AND     0X3F
 
       ADD      A,RAM_DATARAMD;9 ;Savelij RAMDISK
 
       ;OR 64 ;ОЗУ, не 7ffd
 
        OUT     (C),A
 
        LD      B,0XF7
 
        OUT     (C),A
 
       ELSE     ;atm2
 
        RRCA    
 
        RRCA    
 
        AND     0X3F
 
        OR      64 ;ОЗУ, не 7ffd
 
        OUT     (C),A
 
       ENDIF    
 
       ELSE     
 
       CPL      ;растет сверху
 
        RRCA    
 
        RRCA    
 
        AND     0X3F
 
      ;ADD A,8
 
        PUSH    AF
 
        AND     0X27
 
        OR      0X10
 
        LD      C,A
 
        POP     AF
 
        RLCA    
 
        RLCA    
 
        RLCA    
 
        AND     0XC0
 
        OR      C
 
        LD      C,0XFD
 
        OUT     (C),A
 
       ENDIF    
 
;       ENDIF   
 
;----Если RD размером 384К (при 512К)---
 
                IF 0;       IFN 0
 
        RRCA    
 
        RRCA    
 
        AND     0X3F
 
        ADD     A,8
 
        LD      C,A
 
        OR      0X10
 
        SLA     C
 
        SLA     C
 
        SLA     C
 
        OR      C
 
        AND     0XD7
 
        LD      C,0XFD
 
        OUT     (C),A
 
       ENDIF    
 
;---------------------------------------
 
 
 
        LD      A,D
 
        RLCA    
 
        RLCA    
 
        RLCA    
 
        RLCA    
 
        AND     0X30
 
        ADD     A,E
 
        OR      0XC0
 
        LD      D,A
 
        LD E,0X00
 
        LD      A,(0X5CCE)
 
        AND     A
 
        JR      NZ,LL38F9
 
        EX      DE,HL
 
LL38F9  LD      BC,0X0100
 
        LDIR    
 
;               IF atm=1;       IFN     atm
 
       IF       atm=3
 
;адресация по 7FFD (FFF7, F7F7 неизвестно как восстановить)
 
        LD      A,0XFF ;7ffd used
 
        LD      BC,0XFFF7
 
        OUT     (C),A
 
        LD      A,(F_PAGE)
 
        LD      BC,0X7FFD
 
        OUT     (C),A
 
       ELSE     ;atm2
 
        LD      A,(F_PAGE)
 
        AND     0XF
 
        OR      0X10
 
        LD      BC,0X7FFD
 
        OUT     (C),A
 
        LD      A,(F_PAGE)
 
        AND     0XE0 ;5,7,6
 
        LD      C,A
 
        RRA     
 
        RRA     
 
        RRA     
 
        OR      C
 
        AND     0X38 ;5,4,3
 
        CPL     ;7ffd used
 
        LD      BC,0XFFF7
 
        OUT     (C),A
 
       ENDIF    
 
;       ELSE    
 
;        LD     A,(F_PAGE)
 
;        LD     BC,0X7FFD
 
;        OUT    (C),A
 
;       ENDIF   
 
        EI      
 
        RET     
 
 
 
                IF resident=1;       IFN        resident
 
MEMDRV_
 
;Драйвер памяти (используется HONEY резидентом /и не только/)
 
;6.05 %00abcdef
 
;6.11 %bca0?def (7FFD)
 
                IF atm=1;       IFN     atm
 
       IF       atm-3
 
        XOR     0X7F
 
        LD      BC,0XFFF7
 
        OUT     (C),A ;7ffd off
 
;а кто будет включать 7ffd обратно?
 
       ELSE     ;atm2
 
        PUSH    AF
 
        AND     0XF
 
        OR      0X10
 
        LD      BC,0X7FFD
 
        OUT     (C),A
 
        POP     AF
 
        AND     0XE0 ;5,7,6
 
        LD      C,A
 
        RRA     
 
        RRA     
 
        RRA     
 
        OR      C
 
        AND     0X38 ;5,4,3
 
        CPL     ;7ffd used
 
        LD      BC,0XFFF7
 
        OUT     (C),A
 
       ENDIF    
 
       ELSE     
 
       ;AND 0XDF  ;Если памяти полметра.
 
        OR      0X10
 
        LD      BC,0X7FFD
 
        OUT     (C),A
 
       ENDIF    
 
        RET     
 
       ENDIF    
 
 
 
TCH2
 
;2-ая точка входа - инициализация
 
        LD      (0X5CF6),A
 
        CP      0X03
 
        JP      NZ,TCH2Q;0X3DCE
 
        CALL    TEST_R
 
        JP      NZ,0X3EE1 ;ошибку игнорировать?etc
 
        RET     
 
 
 
TCH3
 
;3-я точка входа - форматирование
 
        CALL    0X1C57 ;установка имени файла
 
        LD      A,(0X5CF6)
 
        CP      0X03
 
        RET     NZ
 
        POP     AF
 
        CALL    FILL
 
        LD      DE,0X0000
 
        LD      (0X5CF4),DE
 
        LD      BC,0X0010
 
FORMT
 
        PUSH    BC
 
        LD      A,0XFF
 
        LD      (0X5CCE),A
 
        LD HL,0X5D25
 
        LD B,0X01
 
        CALL    RD_SV
 
        POP     BC
 
        DEC     BC
 
        LD      A,B
 
        OR      C
 
        JR      NZ,FORMT
 
  ;free=...
 
       ;LD HL,0X05F0  ;для 384К
 
        LD      HL,0X07F0  ;для 512К
 
       ;LD HL,0X0DF0  ;для 896К
 
 
 
        LD      A,0X16
 
        JP      0X1F55 ;продолж.FORMAT после LD HL,2544
 
FILL
 
        LD      HL,0X5D25
 
        LD DE,0X5D26
 
        LD      BC,0X00FF
 
        LD (HL),B
 
        LDIR    
 
        RET     
 
 
 
FPG
 
;Определение текущей PAGE 0-31 памяти
 
                IF 0;       IFN 0
 
        PUSH    DE
 
        PUSH HL
 
        LD      DE,(0XC000)
 
        LD      BC,0X7FFD
 
        LD      (0XC000),BC
 
        LD      A,0XD7
 
FPG1    INC     A
 
        BIT     3,A
 
        JR      Z,$+4
 
        ADD     A,0X38
 
        OUT     (C),A
 
        LD      HL,(0XC000)
 
        AND     A
 
        SBC     HL,BC
 
        JR      NZ,FPG1
 
        LD      (0XC000),DE
 
        LD      (F_PAGE),A
 
        POP     HL
 
        POP DE
 
        RET     
 
       ELSE     
 
        PUSH    DE
 
        PUSH HL
 
        LD      DE,(0XC000)
 
        LD      HL,(0XFFFD)
 
        PUSH    HL
 
                IF atm=3;       IFN     atm
 
        LD      BC,0XFFF7
 
       ELSE     
 
        LD      BC,0X7FFD
 
       ENDIF    
 
        LD      (0XC000),BC
 
        LD      (0XFFFD),BC
 
                IF atm=3;       IFN     atm
 
        LD      A,0X7F+1 ;D6=1 (ОЗУ), D7=0 (no 7ffd)
 
       ELSE     
 
        XOR     A
 
       ENDIF    
 
FPG1
 
                IF atm=3;       IFN     atm
 
        DEC     A
 
        OR      A ;CY=0
 
       ELSE     
 
        AND     0XC7
 
        DEC     A
 
        AND     0XC7
 
        OR      16
 
       ENDIF    
 
        OUT     (C),A
 
        LD      HL,(0XC000)
 
        SBC     HL,BC
 
        JR      NZ,FPG1
 
        LD      HL,(0XFFFD)
 
        SBC     HL,BC
 
        JR      NZ,FPG1
 
        LD      (0XC000),DE
 
        POP     HL
 
        LD      (0XFFFD),HL
 
                IF atm=3;       IFN     atm
 
       ;%01abcdef (abcdef inverted)
 
  ;надо %bca10def
 
        CPL     ;7ffd used
 
        LD      L,A
 
        AND     0X38 ;5,4,3
 
        LD      H,A
 
        RLA     
 
        RLA     
 
        RLA     
 
        OR      H
 
        XOR     L
 
        AND     0XE0 ;5,7,6
 
        XOR     L
 
        AND     0XE7
 
        OR      0X10
 
       ENDIF    
 
        LD      (F_PAGE),A
 
        POP     HL
 
        POP DE
 
        RET     
 
       ENDIF    
 
 
 
TCH4
 
;Установка типов дисководов 80DS (а-ля 5.04)
 
;Убрать,если необходимо автоопределение (а-ля 5.03)
 
        LD      HL,0X8383
 
        LD      (0X5CC8),HL
 
        LD (0X5CCA),HL
 
 
 
;Выбор дисковода при сбросе
 
        LD      A,0XF7
 
        IN      A,(0XFE)
 
        LD      B,0
 
        RRA     
 
        JR      NC,DRV11
 
        INC     B
 
        RRA     
 
        JR      NC,DRV11
 
        INC     B
 
        RRA     
 
        JR      NC,DRV11
 
        INC     B
 
        RRA     
 
        JR      NC,DRV11
 
                IF cmos=1;       IFN    cmos
 
        LD      BC,0XEFF7
 
      ;IN A,(C) ;если есть чтение из EFF7
 
      ;PUSH AF
 
        LD      A,0X80
 
        OUT     (C),A
 
        LD      B,0XDF,A,0X10
 
        OUT     (C),A
 
        LD      B,0XBF
 
        IN      A,(C)
 
                EX AF,AF';        EXA   
 
        LD      B,0XEF
 
        XOR     A
 
      ;POP AF
 
        OUT     (C),A
 
                EX AF,AF';        EXA   
 
        LD      B,A
 
       ELSE     
 
        JR      L3
 
       ENDIF    
 
DRV11
 
        LD      A,B
 
        LD (0X5CF6),A
 
        LD (0X5D19),A
 
        OR      0X3C
 
        LD      (0X5D16),A
 
        OUT     (0XFF),A
 
L3      JP      0X106E ;вывод цветных полос для заставки
 
                IF 0;       IFN 0
 
                DUPL 0X3ADB-$,0XFF;        DS   0X3ADB-$,0XFF
 
;        ORG    0X3ADB
 
BOOTER
 
;выполнялка ком."8"
 
;вместо 0X29AE
 
        LD      BC,0XF4FF
 
        RST     0X20
 
        DW      0X1EAF ;CLEAR_RUN
 
        LD      A,1
 
        RST     0X20
 
       ;DW 0X229C ;нет такой точки!
 
       DW       0X229B ;border и 23624
 
        DI      
 
        LD      HL,bootkus1;0XE00
 
        LD      DE,0XF500
 
        LD      BC,bootln1;0X1F5
 
        PUSH    DE
 
        LDIR    
 
        LD      HL,bootkus2;0X344D
 
        LD      BC,$;bootln2+1;0X334
 
        LDIR    
 
        SET     3,(IY+0X01)
 
        RET     
 
       ENDIF    
 
MOVEPP
 
        LD      HL,(0X5CE1)
 
LL3b03  LD      A,(HL)
 
         CP     0X00
 
        RET     Z
 
         CP     0X01
 
         JR     Z,LL3b0e
 
         CALL   LL3b14
 
LL3b0e  LD      DE,0X0010
 
        ADD     HL,DE
 
        JR      LL3b03
 
LL3b14  PUSH    HL
 
        LD      DE,0X000D
 
        ADD     HL,DE
 
        LD      C,(HL)
 
        INC     HL
 
        LD      E,(HL)
 
        INC     HL
 
        LD      D,(HL)
 
        LD      HL,(0X5CD7)
 
        AND     A
 
        SBC     HL,DE
 
        ADD     HL,DE
 
        JR      Z,LL3b56
 
        LD      (0X5CD5),DE
 
        LD      A,C
 
        LD      (0X5CD3),A
 
        CALL    0X17A5 ;перемещение файла
 
LL3b32  POP     HL
 
        PUSH    HL
 
        LD      DE,(0X5CDF)
 
        LD      BC,0X0010
 
        LDIR    
 
        LD      (0X5CDF),DE
 
                EX DE,HL;        EXD    
 
        LD      DE,(0X5CDD)
 
        DEC     HL
 
        LD      (HL),D
 
        DEC     HL
 
        LD      (HL),E
 
        LD      HL,(0X5CD7)
 
        LD      (0X5CDD),HL
 
        LD      HL,0X5CE3
 
        INC     (HL)
 
        POP     HL
 
        RET     
 
LL3b56
 
        LD      A,C
 
        AND     0X0F
 
        ADD     A,E
 
        BIT     4,A
 
        RES     4,A
 
        LD      E,A
 
        JR      Z,$+3
 
        INC     D
 
        LD      A,C
 
 
 
;        RRC    A
 
;        RRC    A
 
;        RRC    A
 
;        RRC    A
 
                REPT 4
 
                DB 0XCB
 
                RRCA
 
                ENDM
 
 
 
        AND     0X0F
 
        ADD     A,D
 
        LD      D,A
 
        LD      (0X5CD7),DE
 
        JR      LL3b32
 
 
 
       ;DS 0X3B80-$,0XFF
 
GETCOM
 
;jp из 0X2154
 
;вместо 0X1D90 - зачем???
 
        RES     5,(IY+0X01)
 
        RST     0X20
 
        DW      0X15D4 ;WAIT_KEY
 
        CP      7
 
        JR      NZ,LL3bad
 
        LD      HL,0X00C8
 
        LD      D,H
 
        LD      E,(IY-0X01)
 
        RST     0X20
 
        DW      0X3B5 ;beep
 
        CALL    0X212A ;восстановление командной строки
 
        LD      HL,(0X5C59)
 
        LD      A,0X0D
 
         LD     BC,0
 
        CPIR    
 
        DEC     HL
 
        LD      (0X5C5B),HL
 
        INC     HL
 
        INC     HL
 
        LD      (HL),0X80
 
LL3baa  RST     0X20
 
        DW      0X15D4 ;WAIT_KEY
 
LL3bad
 
        PUSH    AF
 
        LD      HL,0X00C8
 
        LD      D,H
 
        LD      E,(IY-0X01)
 
        RST     0X20
 
        DW      0X3B5 ;beep
 
        POP     AF
 
        CP      0X18
 
        JR      NC,LL3bca
 
        CP      0X07
 
        JR      C,LL3bca
 
        CP      0X10
 
        JR      C,LL3bcf
 
        RST     0X20
 
        DW      0XF58 ;в ED_LOOP: sym>=16
 
        JR      LL3baa
 
LL3bca
 
        RST     0X20
 
        DW      0XF81 ;ADD_CHAR
 
        JR      LL3baa
 
LL3bcf
 
        CP      0X07
 
        JR      Z,LL3baa
 
        CP      0X0D
 
        RET     Z
 
        CP      0X0A
 
        JR      Z,LL3baa
 
        CP      0X0B
 
        JR      Z,LL3baa
 
        RST     0X20
 
        DW      0XF92 ;ED_KEYS
 
        JR      LL3baa
 
 
 
       ;DS 0X3BF0-$,0XFF
 
WHOD
 
;вход в TR-DOS
 
;jp из 0X3D35
 
;вместо 0X239
 
        CALL    0X1D9F ;очистка низа экрана
 
        JP      0X239 ;вход в командный процессор
 
 
 
       ;DS 0X3C00-$,0XFF
 
       ;тут стоят дубли 0X3D00/3D03
 
       ;дубля 0X3D13 нет и не было
 
       ;ORG 0X3C10
 
OUTDE
 
        LD      C,D
 
        OUT     (C),E
 
        RET     
 
INED
 
        LD      C,D
 
        IN      E,(C)
 
        RET     
 
JPWRITE
 
        LD      C,0X7F
 
        JP      16314
 
JPREAD
 
        LD      C,0X7F
 
        JP      16341