Subversion Repositories pentevo

Rev

Rev 631 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.  
  2. ;LAST UPDATE: 17.11.2013 savelij
  3.  
  4. ;ИНФА ДЛЯ СОЗДАНИЯ 9 СЕКТОРА НОВОГО ДИСКА
  5. DSKINFO         DB 0                    ;+0XE1-НОМЕР ПЕРВОГО СВОБОДНОГО СЕКТОРА
  6.                 DB 1                    ;+0XE2-НОМЕР ПЕРВОГО СВОБОДНОГО ТРЕКА
  7.                 DB 0X16                 ;+0XE3-ТИП ДИСКЕТЫ
  8.                 DB 0                    ;+0XE4-КОЛИЧЕСТВО ФАЙЛОВ НА ДИСКЕТЕ
  9. SECFREE         DW 2544                 ;+0XE5-КОЛИЧЕСТВО СВОБОДНЫХ СЕКТОРОВ
  10.                 DB 0X10                 ;+0XE7-ИДЕНТИФИКАЦИОННЫЙ КОД TRDOS
  11.                 DW 0                    ;+0XE8-2 БАЙТА 0
  12.                 DUPL 9," "              ;+0XEA-9 БАЙТ 0X20
  13.                 DB 0                    ;+0XF3-1 БАЙТ 0
  14.                 DB 0                    ;+0XF4-КОЛИЧЕСТВО УДАЛЕННЫХ ФАЙЛОВ
  15.                 DB "RAMDISKO"           ;+0XF5-ИМЯ ДИСКЕТЫ
  16. DSK_END
  17.  
  18. DISK_NONE       PUSH HL
  19.                 PUSH BC
  20.                 LD A,PAGE_RAMDISK
  21.                 LD BC,WIN_P1
  22.                 OUT (C),A
  23.                 LD HL,0X7FFF
  24.                 LD A,(HL)
  25.                 DEC H
  26.                 CP "R"
  27.                 JR NZ,DISK_NONE1
  28.                 LD A,(HL)
  29.                 CP "D"
  30. DISK_NONE1      EX AF,AF'
  31.                 LD A,0XFA
  32.                 OUT (C),A
  33.                 EX AF,AF'
  34.                 POP BC
  35.                 POP HL
  36.                 RET
  37.  
  38. SET_RWPORT0     PUSH BC
  39.                 PUSH AF
  40.                 LD BC,CMOSD_SET_ADR
  41.                 LD A,VIRT_REAL_DRIVE
  42.                 OUT (C),A
  43.                 LD B,HIGH (CMOSD_RD_WR)
  44.                 IN A,(C)
  45.                 AND 0X0F
  46.                 LD C,A
  47.                 IN A,(RW_PORT0)
  48.                 AND 0XF0
  49.                 OR C
  50.                 OUT (RW_PORT0),A
  51.                 POP AF
  52.                 POP BC
  53.                 RET
  54.  
  55. DOS2RST8        EX (SP),HL                      ;HL
  56.                 PUSH AF                         ;AF
  57.                 PUSH BC                         ;BC
  58.                 LD A,R
  59.                 JP PE,DOS2RST8_01
  60.                 LD A,R
  61. DOS2RST8_01     DI
  62.                 PUSH AF                         ;RF
  63.                 PUSH HL                         ;ADR_RET
  64.                 PUSH DE                         ;DE
  65.                 IN A,(PEVO_CONF)
  66.                 LD L,A
  67.                 OR 1
  68.                 OUT (PEVO_CONF),A
  69.                 LD BC,RD_1WINA0
  70.                 IN A,(C)
  71.                 AND 0X3E
  72.                 LD BC,RD_1WINA0
  73.                 IN H,(C)
  74.                 RES 0,H
  75.                 LD B,HIGH (RD_DOS7FFD)
  76.                 IN E,(C)
  77.                 RES 4,E
  78.                 DEC B
  79.                 IN D,(C)
  80.                 LD BC,WIN_A0
  81.                 OUT (C),A
  82.                 LD B,HIGH (WIN_P0)
  83.                 XOR A
  84.                 JP ADR_SEL_ROM
  85.  
  86. EDOS2RST8       LD BC,DOS_NOEMUL
  87.                 LD A,(BC)
  88.                 AND 0X3E
  89.                 CP E
  90.                 JR Z,EDOS2RST02
  91.                 INC BC
  92. EDOS2RST02      LD A,(BC)
  93.                 LD BC,WIN_A0
  94.                 CALL WR_BYTE_RET
  95.                 LD A,L
  96.                 OUT (PEVO_CONF),A
  97.                 POP DE
  98.                 POP HL
  99.                 POP AF
  100.                 JP PO,EDOS2RST01
  101.                 EI
  102. EDOS2RST01      POP BC
  103.                 POP AF
  104.                 EX (SP),HL
  105.                 RET
  106.  
  107. ;ABCDEFGHIJKLMNOPQRSTUVWXYZ
  108. EXTEND_COM     
  109.                 DB 2,"CD"
  110.                 DW CD
  111.                 DB 7,"CLRCMOS"
  112.                 DW CLRCMOS
  113.                 DB 3,"DIR"
  114.                 DW DIR
  115.                 DB 5,"DRIVE"
  116.                 DW DRIVE
  117.                 DB 4,"HELP"
  118.                 DW HELP
  119.                 DB 5,"MOUNT"
  120.                 DW MOUNT
  121.                 DB 6,"UMOUNT"
  122.                 DW UMOUNT
  123.                 DB 3,"VER"
  124.                 DW PRT_VERS
  125.                 DB 4,"VIRT"
  126.                 DW SET_VIRT
  127.                 DB 0
  128.  
  129. END_EXT_COM     INC DE
  130.                 LD A,(DE)
  131.                 CP ":"
  132.                 DEC DE
  133.                 JP NZ,SINTAX_ERROR
  134.                 LD A,(DE)
  135.                 AND 0DFH
  136.                 SUB "A"
  137.                 JP C,SINTAX_ERROR
  138.                 CP 4
  139.                 JR NC,SELFATDRV
  140.                 LD (TRD_5CF6),A                 ; ДИСКОВОД ДЛЯ ВРЕМЕННОЙ ОПЕРАЦИИ
  141.                 LD (TRD_5D19),A                 ; ДИСКОВОД ПО УМОЛЧАНИЮ
  142.                 LD B,A
  143.                 LD A,(TRD_5D16)                 ; КОПИЯ СИСТЕМНОГО РЕГИСТРА (ПОРТ #FF)
  144.                 AND 7CH
  145.                 OR B
  146.                 LD (TRD_5D16),A                 ; КОПИЯ СИСТЕМНОГО РЕГИСТРА (ПОРТ #FF)
  147.                 RST 0X30
  148.                 DB WOUTFF
  149.                 JP ERR_OK
  150.  
  151. SELFATDRV       SUB 4
  152.                 PUSH AF
  153.                 RST 8
  154.                 DB _COM_DEV
  155.                 DB _DEVFIND
  156.                 RST 8
  157.                 DB _COM_DEV
  158.                 DB _KOL_VOL
  159.                 POP AF
  160.                 CP E
  161.                 JP NC,SINTAX_ERROR
  162.                 RST 8
  163.                 DB _COM_DEV
  164.                 DB _SET_VOL
  165.                 JP ERR_OK
  166.  
  167. COM_DOT         CALL EXIT_IF_SINTAX
  168.                 LD HL,EXTEND_COM
  169. NEXT_CMP_COM    LD A,1
  170.                 LD (TRD_5CEF),A
  171.                 LD DE,(TRD_5D11)
  172.                 INC DE
  173.                 LD A,(HL)
  174.                 INC HL
  175.                 AND A
  176.                 JP Z,END_EXT_COM
  177.                 LD B,A
  178. LOC_C34         LD A,(DE)
  179.                 AND 0DFH
  180.                 CP (HL)
  181.                 JR NZ,PROPUSK
  182.                 INC DE
  183.                 INC HL
  184.                 DJNZ LOC_C34
  185.                 LD A,(DE)
  186.                 CP 0DH
  187.                 JR Z,NO_PARAM
  188.                 CP " "
  189.                 JR Z,GET_PARAM
  190.                 JR LOC_C58
  191.  
  192. PROPUSK         INC HL
  193.                 DJNZ PROPUSK
  194. LOC_C58         INC HL
  195.                 INC HL
  196.                 JR NEXT_CMP_COM
  197.  
  198. GET_PARAM       INC DE
  199. NO_PARAM        LD A,(HL)
  200.                 INC HL
  201.                 LD H,(HL)
  202.                 LD L,A
  203.                 PUSH HL
  204.                 LD HL,END_COMAND
  205.                 EX (SP),HL
  206.                 JP (HL)
  207.  
  208. ;ВЫВОД ИМЕНИ ВИРТУАЛЬНОГО ДИСКА ЕСЛИ НЕ УКАЗАНО ИМЯ ДЛЯ ИЗМЕНЕНИЯ
  209. PRT_NUM_VIRT    LD HL,TXT4VIRTDRV
  210.                 LD B,ETXT4VIRTDRV-TXT4VIRTDRV-1
  211.                 CALL PRT_B_HL_
  212.                 LD A," "
  213.                 RST 0X10
  214.                 LD H,VIRT_REAL_DRIVE
  215.                 CALL READCMOS
  216.                 AND 3
  217.                 ADD A,"A"
  218.                 RST 0X10
  219.                 LD A,0X0D
  220.                 RST 0X10
  221.                 RET
  222.  
  223. ;УСТАНОВКА ВИРТУАЛЬНОГО ДИСКА
  224. SET_VIRT        LD A,(DE)
  225.                 CP 0X0D
  226.                 JR Z,PRT_NUM_VIRT
  227.                 LD C,A
  228.                 INC DE
  229.                 LD A,(DE)
  230.                 CP ":"
  231.                 JP NZ,SINTAX_ERROR
  232.                 LD A,C
  233.                 CALL NUMDSK2BYTE                ;ПОЛУЧИЛИ НОВЫЙ НОМЕР ДИСКОВОДА УКАЗАННЫЙ В КОМАНДНОЙ СТРОКЕ
  234.                 LD D,A                          ;СОХРАНИЛИ ВРЕМЕННО СДВИНУТЫЙ НОВЫЙ НОМЕР ВИРТУАЛЬНОГО ДИСКОВОДА
  235.                 IN A,(RW_PORT0)
  236.                 AND %11111100
  237.                 OR D
  238.                 OUT (RW_PORT0),A
  239.                 LD H,VIRT_REAL_DRIVE
  240.                 CALL READCMOS
  241.                 AND %11111100                   ;СБРОС СТАРОГО НОМЕРА ВИРТУАЛЬНОГО ДИСКОВОДА
  242.                 OR D                            ;ДОБАВИЛИ НОВЫЙ НОМЕР ВИРТУАЛЬНОГО ДИСКОВОДА
  243.                 LD L,A
  244.                 RST 8
  245.                 DB _CMOS_RW
  246.                 DB _WRITE_CMOS
  247.                 RET
  248.  
  249. ;ПЕЧАТЬ ВЕРСИИ ДОСА И ДАТЫ КОМПИЛЯЦИИ
  250. PRT_VERS        LD HL,0X3FF8
  251.                 LD B,6
  252.                 CALL PRT_B_HL_
  253.                 LD A," "
  254.                 RST 0X10
  255.                 LD C,(HL)
  256.                 INC HL
  257.                 LD B,(HL)
  258.                 PUSH BC
  259.                 LD HL,ZASTAVKA_VER
  260.                 LD B,9
  261.                 CALL PRT_B_HL_
  262.                 LD A," "
  263.                 RST 0X10
  264.                 POP BC
  265.                 LD A,C
  266.                 AND 0X1F                        ;НУЖНЫ 5 БИТ-ЧИСЛО МЕСЯЦА
  267.                 CALL A2TXT                      ;КОНВЕРСИЯ И УКЛАДКА ДАТЫ
  268.                 SRL B
  269.                 RR C                            ;СДВИНУЛИ ДЛЯ ЦЕЛОСТНОСТИ НОМЕРА МЕСЯЦА
  270.                 LD A,"."
  271.                 RST 0X10
  272.                 LD A,C                          ;ВЗЯЛИ БИТЫ МЕСЯЦА
  273.                 RRCA
  274.                 RRCA
  275.                 RRCA
  276.                 RRCA                            ;СДВИНУЛИ В МЛАДШИЕ БИТЫ
  277.                 AND 0X0F                        ;НАМ НУЖНЫ ТОЛЬКО 4 БИТА МЕСЯЦА
  278.                 CALL A2TXT                      ;КОНВЕРСИЯ И УКЛАДКА МЕСЯЦА
  279.                 LD A,"."
  280.                 RST 0X10
  281.                 LD A,B                          ;ВЗЯЛИ НОМЕР ГОДА
  282.                 AND 0X3F                        ;НУЖНЫ ТОЛЬКО 6 БИТ
  283.                 CALL A2TXT                      ;КОНВЕРСИЯ И УКЛАДКА ГОДА
  284.                 BIT 6,B                         ;ЕСЛИ БИТ 6 (СДВИНУТЫЙ БИТ 7) УСТАНОВЛЕН
  285.                 LD HL,TXT_BETA
  286.                 RST 0X18
  287.                 LD A,0X0D
  288.                 RST 0X10
  289.                 RET
  290.  
  291. ;ПЕЧАТЬ B=КОЛИЧЕСТВО СИМВОЛОВ ИЗ HL=АДРЕС ТЕКСТА ДЛЯ ВЫВОДА
  292. PRT_B_HL_       LD A,(HL)
  293.                 INC HL
  294.                 RST 0X10
  295.                 DJNZ PRT_B_HL_
  296.                 RET
  297.  
  298. TXT_BETA        DC " beta"
  299.  
  300. ;ПЕРЕВОД "A" В ДЕСЯТИЧКУ И В ТЕКСТ
  301. A2TXT           LD L,A
  302.                 LD H,0
  303.                 LD DE,10
  304.                 XOR A
  305.                 DEC A
  306.                 INC A
  307.                 SBC HL,DE
  308.                 JR NC,$-3
  309.                 ADD HL,DE
  310.                 ADD A,"0"
  311.                 RST 0X10
  312.                 LD A,L
  313.                 ADD A,"0"
  314.                 RST 0X10
  315.                 RET
  316.  
  317. DRIVES          DC "Drives: "
  318. EDRIVES
  319.  
  320. DRIVE           RST 8
  321.                 DB _COM_DEV
  322.                 DB _DEVFIND
  323.                 RST 8
  324.                 DB _COM_DEV
  325.                 DB _KOL_VOL
  326.                 LD A,"D"
  327.                 ADD A,E
  328.                 PUSH AF
  329.                 LD HL,DRIVES
  330.                 RST 0X18
  331.                 LD A,"E"
  332.                 RST 0X10
  333.                 LD A,"-"
  334.                 RST 0X10
  335.                 POP AF
  336.                 RST 0X10
  337.                 RET
  338.  
  339. TXT_DIR         DC "<DIR> "
  340.  
  341. DIR             LD B,0
  342.                 LD A,(DE)
  343.                 INC DE
  344.                 CP "/"
  345.                 JR NZ,DIR06
  346.                 LD A,(DE)
  347.                 AND 0XDF
  348.                 CP "L"
  349.                 JR NZ,DIR06
  350.                 LD B,A
  351. DIR06           RST 8
  352.                 DB _COM_DEV
  353.                 DB _DEVFIND
  354.                 PUSH IX
  355.                 LD IXL,B
  356.                 CALL CLEAR_SCREEN
  357.                 CALL OPEN_CHAN_2
  358.                 LD A,2
  359.                 RST 8
  360.                 DB _COM_FAT
  361.                 DB _POS_FILES
  362. DIR05           LD E,0X17
  363. DIR01           PUSH DE
  364.                 PUSH BC
  365.                 LD HL,TRD_5D25
  366.                 RST 8
  367.                 DB _COM_FAT
  368.                 DB _READ_DIR
  369.                 LD DE,0X0B
  370.                 ADD HL,DE
  371.                 LD A,(HL)
  372.                 SBC HL,DE
  373.                 AND 0X10
  374.                 JR Z,DIR04
  375.                 PUSH HL
  376.                 LD HL,TXT_DIR
  377.                 RST 0X18
  378.                 POP HL
  379. DIR04           LD A,IXL
  380.                 AND A
  381.                 JR Z,DIR08
  382.                 PUSH HL
  383.                 RST 8
  384.                 DB _COM_FAT
  385.                 DB _GET_LONGNAME
  386.                 POP HL
  387. DIR03           LD A,(HL)
  388.                 AND A
  389.                 JR Z,DIR02
  390.                 INC HL
  391.                 RST 0X10
  392.                 JR DIR03
  393.  
  394. DIR08           LD B,8
  395. DIR081          LD A,(HL)
  396.                 CP " "
  397.                 JR Z,DIR082
  398.                 RST 0X10
  399.                 INC HL
  400.                 DJNZ DIR081
  401. DIR082          LD A,B
  402.                 AND A
  403.                 JR Z,DIR085
  404. DIR086          LD A,(HL)
  405.                 CP " "
  406.                 JR NZ,DIR085
  407.                 INC HL
  408.                 DJNZ DIR086
  409. DIR085          LD A,(HL)
  410.                 CP " "
  411.                 JR Z,DIR084
  412.                 LD A,"."
  413.                 RST 0X10
  414. DIR084          LD B,3
  415. DIR083          LD A,(HL)
  416.                 CP " "
  417.                 JR Z,DIR02
  418.                 RST 0X10
  419.                 INC HL
  420.                 DJNZ DIR083
  421. DIR02           LD A,0X0D
  422.                 RST 0X10
  423.                 LD A,4
  424.                 LD B,1
  425.                 RST 8
  426.                 DB _COM_FAT
  427.                 DB _POS_FILES
  428.                 POP HL
  429.                 AND A
  430.                 SBC HL,BC
  431.                 POP DE
  432.                 JR Z,DIR07
  433.                 DEC E
  434.                 JR NZ,DIR01
  435.                 JR DIR05
  436.  
  437. DIR07           POP IX
  438.                 RET
  439.  
  440. CD              PUSH DE
  441.                 RST 8
  442.                 DB _COM_DEV
  443.                 DB _DEVFIND
  444.                 POP HL
  445.                 RST 8
  446.                 DB _COM_FAT
  447.                 DB _FIND_NAME
  448.                 JP C,SINTAX_ERROR
  449.                 RST 8
  450.                 DB _COM_FAT
  451.                 DB _ENTER_DIR
  452.                 RET
  453.  
  454. NOMER_DRV       RST 8
  455.                 DB _COM_DEV
  456.                 DB _DEVFIND
  457.                 RST 8
  458.                 DB _COM_DEV
  459.                 DB _KOL_VOL
  460.                 CALL CREATE_BUF
  461.                 LD HL,TRD_5D25
  462.                 RST 8
  463.                 DB _COM_FAT
  464.                 DB _GET_PATH
  465.                 CALL PRINT2ZERO
  466.                 CALL DEL_BUF
  467.                 SCF
  468.                 RET
  469.  
  470. MOUNT           PUSH DE
  471.                 RST 8
  472.                 DB _COM_DEV
  473.                 DB _DEVFIND
  474.                 EX DE,HL
  475.                 POP HL
  476.                 PUSH HL
  477.                 RST 8
  478.                 DB _COM_FAT
  479.                 DB _FIND_NAME
  480.                 JP C,SINTAX_ERROR
  481.                 POP DE
  482.                 LD B,0X0C
  483. MOUNT02         LD A,(DE)
  484.                 CP "!"
  485.                 JR C,MOUNT01
  486.                 INC DE
  487.                 DJNZ MOUNT02
  488. MOUNT01         LD A,(DE)
  489.                 CP 0X0D
  490.                 JP Z,SINTAX_ERROR
  491.                 CP " "
  492.                 JP NZ,SINTAX_ERROR
  493.                 INC DE
  494.                 LD A,(DE)
  495.                 CP "A"
  496.                 JP C,SINTAX_ERROR
  497.                 AND 0XDF
  498.                 CP "E"
  499.                 JP NC,SINTAX_ERROR
  500.                 SUB "A"
  501.                 LD C,A
  502.                 INC DE
  503.                 LD A,(DE)
  504.                 CP ":"
  505.                 JP NZ,SINTAX_ERROR
  506.                 LD A,C
  507.                 RST 8
  508.                 DB _MOUNTER
  509.                 DB _OPEN_MOUNT
  510.                 RET
  511.  
  512. WR_RD_SEC_M     PUSH IX
  513.                 LD (TEMP_SP),SP
  514.                 LD HL,(DOS_STEK)
  515.                 LD DE,SAVED_RAM
  516.                 LD BC,0X10
  517.                 LDIR
  518.                 LD SP,HL
  519.                 IN A,(RW_PORT1)                 ;ВЗЯЛИ НОМЕР ТРЕКА
  520.                 ADD A,A                         ;СТОРОН 2
  521.                 LD D,A
  522.                 LD A,(WR_FF)
  523.                 AND 0X10                        ;ПРОВЕРКА КАКАЯ СТОРОНА ДИСКА
  524.                 JR NZ,WRRDSECM1
  525.                 INC D                           ;ДЛЯ СТОРОНЫ 1
  526. WRRDSECM1       IN A,(RW_PORT2)                 ;ВЗЯЛИ НОМЕР СЕКТОРА
  527.                 LD E,A                          ;D-ТРЕК, E-СЕКТОР
  528.                 LD HL,(REG_L)                   ;HL=АДРЕС ЧТЕНИЯ/ЗАПИСИ
  529.                 LD A,(WR_FF)
  530.                 AND 3
  531.                 LD C,A                          ;НОМЕР ДИСКОВОДА
  532.                 LD A,IXL
  533.                 AND A                           ;BIT 7=0-ЧТЕНИЕ
  534.                 JR Z,WRRDSECM2
  535.                 LD A,0X80                       ;BIT 7=1-ЗАПИСЬ
  536. WRRDSECM2       OR C
  537.                 LD IXL,A                        ;A=НОМЕР ДИСКОВОДА+БИТ ЧТЕНИЯ/ЗАПИСИ
  538.                 LD A,(TEK_ROMPAGE)
  539.                 AND 0X3E
  540.                 LD IXH,A
  541.                 LD BC,WIN_A0
  542.                 OUT (C),A
  543.                 LD A,IXL
  544.                 RST 8
  545.                 DB _MOUNTER
  546.                 DB _RDWR_MOUNT
  547.                 LD BC,WIN_A0
  548.                 LD A,IXH
  549.                 OUT (C),A
  550.                 LD B,HIGH (WIN_P0)
  551.                 LD A,PAGE_EVODOS
  552.                 OUT (C),A
  553.                 LD (REG_L),HL                   ;ОБНОВИЛИ АДРЕС ЧТЕНИЯ/ЗАПИСИ
  554.                 LD HL,SAVED_RAM
  555.                 LD DE,(DOS_STEK)
  556.                 LD BC,0X10
  557.                 LDIR
  558.                 LD SP,(TEMP_SP)
  559.                 POP IX
  560.                 RET
  561.  
  562. UMOUNT          LD A,(DE)
  563.                 INC DE
  564.                 AND 0XDF
  565.                 LD B,A
  566.                 LD A,(DE)
  567.                 INC DE
  568.                 CP ":"
  569.                 JP NZ,SINTAX_ERROR
  570.                 LD A,B
  571.                 CP "A"
  572.                 JP C,SINTAX_ERROR
  573.                 CP "E"
  574.                 JP NC,SINTAX_ERROR
  575.                 SUB "A"
  576.                 RST 8
  577.                 DB _MOUNTER
  578.                 DB _CLOSEMOUNT
  579.                 RET
  580.  
  581. CLRCMOS         RST 8
  582.                 DB _CMOS_RW
  583.                 DB _CLEAR_CMOS
  584.                 RET
  585.  
  586. HELP            CALL CLEAR_SCREEN
  587.                 CALL OPEN_CHAN_2
  588.                 LD HL,EXTEND_COM
  589. HELP4           LD C,3
  590. HELP2           LD A,(HL)
  591.                 AND A
  592.                 RET Z
  593.                 INC HL
  594.                 LD B,A
  595.                 PUSH BC
  596.                 LD A,"."
  597.                 RST 0X10
  598. HELP1           LD A,(HL)
  599.                 INC HL
  600.                 RST 0X10
  601.                 DJNZ HELP1
  602.                 INC HL
  603.                 INC HL
  604.                 POP BC
  605.                 LD A,9
  606.                 SUB B
  607.                 LD B,A
  608. HELP3           LD A," "
  609.                 RST 0X10
  610.                 DJNZ HELP3
  611.                 DEC C
  612.                 JR NZ,HELP2
  613.                 LD A,0X0D
  614.                 RST 0X10
  615.                 JR HELP4
  616.