Subversion Repositories pentevo

Rev

Rev 999 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

  1.  
  2. ; LAST UPDATE: 20.08.2022 savelij
  3.  
  4.                 TITLE "virtual.a80"
  5.  
  6.                 DB 0XFF                         ;DCU
  7.  
  8. CP_TYPEDRIVE    PUSH BC
  9.                 PUSH HL
  10.                 LD H,VIRT_REAL_DRIVE
  11.                 CALL READCMOS
  12.                 POP HL
  13.                 AND 3
  14.                 LD B,A
  15.                 LD A,(TRD_5CF6)
  16.                 CP B
  17.                 POP BC
  18.                 RET
  19.  
  20. ; установка переменных текущего привода
  21. SET_DRIVENAME   LD H,VIRT_REAL_DRIVE
  22.                 CALL READCMOS
  23.                 RRCA
  24.                 RRCA
  25.                 AND 3
  26.                 LD (TRD_5D19),A
  27.                 LD (TRD_5CF6),A
  28.                 OR 0X3C
  29.                 LD (TRD_5D16),A
  30.                 RET
  31.  
  32. ; форматирование RAM диска
  33. FORMAT_RAM      LD A,(TRD_5CF6)
  34.                 LD B,A
  35.                 INC B
  36.                 LD A,%00001000
  37.                 RLCA
  38.                 DJNZ $-1
  39.                 LD B,A
  40.         RST8D _MOUNTER,_GET_VIRT_BITS
  41.                 LD (COPY_VIRT_BITS),A
  42.                 AND B
  43.                 JR NZ,FORMAT_RAM3               ; если бит=1 формат примонтированного образа
  44.                 CALL CP_TYPEDRIVE
  45.                 RET NZ                          ; выход для формата рельного диска
  46.                 CALL CREATE_TRDTABL             ; формат рамдиска
  47.                 XOR A
  48.                 RET
  49.  
  50. FORMAT_RAM3     LD HL,TRD_5D25
  51.                 LD DE,TRD_5D26
  52.                 LD BC,0XFF
  53.                 LD (HL),B
  54.                 LDIR
  55.                 LD D,B
  56.                 LD E,B
  57.                 LD B,0X10
  58. FORMAT_RAM1     PUSH BC
  59.                 PUSH DE
  60.                 LD B,1
  61.                 LD HL,TRD_5D25
  62.                 CALL COM_06
  63.                 POP DE
  64.                 POP BC
  65.                 INC E
  66.                 DJNZ FORMAT_RAM1
  67.                 XOR A
  68.                 RET
  69.  
  70. ; проверка наличия маркера рамдиска
  71. CMP_RAM_DISK    CALL READ_WCPU12
  72.                 LD BC,WIN_P1
  73.                 LD A,RAM_RAMDISK
  74.                 OUT (C),A
  75.                 LD HL,CPU1+0X3FFF
  76.                 LD D,(HL)
  77.                 DEC H
  78.                 LD E,(HL)                       ; взяли байты для проверки маркера
  79.                 CALL WRITE_WCPU12
  80.                 LD HL,"RD"
  81.                 AND A
  82.                 SBC HL,DE
  83.                 RET Z                           ; если маркер на месте, то рамдиск не создаем
  84. ; создание чистого рамдиска
  85. CREATE_TRDTABL  LD BC,WIN_P1
  86.                 LD A,RAM_RAMDISK                ; нужна страница начала рамдиска, где будет таблица описателей
  87.                 OUT (C),A
  88.                 LD HL,CPU1
  89.                 PUSH HL
  90.                 LD DE,CPU1+1
  91.                 LD BC,0X3FFF
  92.                 LD (HL),L
  93.                 LDIR                            ; очистили страницу
  94.                 POP DE                          ; адрес начала
  95.                 LD HL,0                         ; смещение в блоках и страницах
  96.                 LD A,0XA0
  97. ELT2            PUSH AF
  98.                 LD BC,0X1000                    ; счетчик номеров секторов и их номера
  99.                 LD A,L
  100.                 RRCA
  101.                 RRCA
  102.                 LD (DE),A                       ; смещение в блоках дорожки в странице
  103.                 INC D
  104.                 LD A,H
  105.                 LD (DE),A                       ; смещение в страницах до дорожки
  106.                 INC D
  107. ELT1            INC C
  108.                 LD A,C
  109.                 LD (DE),A                       ; номер сектора
  110.                 INC D
  111.                 LD A,2
  112.                 LD (DE),A                       ; размер сектора
  113.                 INC D
  114.                 DJNZ ELT1                       ; вносим в таблицу все номера секторов с размерами
  115.                 LD D,HIGH (CPU1)                ; вернули указатель в начало
  116.                 INC E                           ; для следующей дорожки
  117.                 LD BC,0X40
  118.                 ADD HL,BC                       ; переход к следующей дорожке
  119.                 POP AF
  120.                 DEC A
  121.                 JR NZ,ELT2                      ; повторяем для всех дорожек
  122.                 LD HL,CPU1+0X3FFF
  123.                 LD (HL),"R"                     ; вносим маркер рамдиска
  124.                 DEC H
  125.                 LD (HL),"D"
  126.                 LD BC,WIN_P1
  127.                 LD A,RAM_DATARAMD
  128.                 OUT (C),A
  129.                 LD HL,CPU1
  130.                 LD DE,CPU1+1
  131.                 LD BC,0X0FFF
  132.                 LD (HL),L
  133.                 LDIR
  134.                 LD HL,DSKINFO
  135.                 LD DE,CPU1+0X8E1
  136.                 LD BC,DSK_END-DSKINFO
  137.                 LDIR
  138.                 LD BC,WIN_A1
  139.                 LD A,0X7A
  140.                 OUT (C),A
  141.                 RET
  142.  
  143. ; восстановление конфигурации окон проецирования 1,2
  144. WRITE_WCPU12    LD BC,(BB_CPU1)
  145.                 LD A,C
  146.                 LD C,LOW (WIN_A0)
  147.                 OUT (C),A
  148.                 LD BC,(BB_CPU2)
  149.                 LD A,C
  150.                 LD C,LOW (WIN_A0)
  151.                 OUT (C),A
  152.                 RET
  153.  
  154.                 DUPL 0x0901 - $,0xFF
  155.  
  156. ; чтение конфигурации окон проецирования 1,2
  157. READ_WCPU12     LD BC,RD_RAMNROM
  158.                 IN L,(C)                        ; биты RAM & ROM
  159.                 INC B
  160.                 IN H,(C)                        ; биты DOS & 7FFD
  161.                 ADD HL,HL
  162.                 LD B,HIGH (RD_1WINA1)
  163.                 IN A,(C)
  164.                 CP 0XC0
  165.                 JR NC,RST30_01
  166.                 LD E,A
  167.                 LD D,HIGH (WIN_P1)
  168.                 JR RST30_02
  169.  
  170. RST30_01        RLCA
  171.                 RLCA
  172.                 SLA L
  173.                 RRA
  174.                 SLA H
  175.                 RRA
  176.                 LD E,A
  177.                 LD D,HIGH (WIN_A1)
  178. RST30_02        LD (BB_CPU1),DE
  179.                 INC B
  180.                 IN A,(C)
  181.                 CP 0XC0
  182.                 JR NC,RST30_03
  183.                 LD E,A
  184.                 LD D,HIGH (WIN_P2)
  185.                 JR RST30_04
  186.  
  187. RST30_03        RLCA
  188.                 RLCA
  189.                 SLA L
  190.                 RRA
  191.                 SLA H
  192.                 RRA
  193.                 LD E,A
  194.                 LD D,HIGH (WIN_A2)
  195. RST30_04        LD (BB_CPU2),DE
  196.                 RET
  197.  
  198. DISK_NONE       PUSH HL
  199.                 PUSH BC
  200.                 CALL READ_WCPU12
  201.                 LD BC,WIN_A1
  202.                 LD A,0X40
  203.                 OUT (C),A
  204.                 LD B,HIGH (WIN_P1)
  205.                 LD A,RAM_RAMDISK
  206.                 OUT (C),A
  207.                 LD HL,CPU1+0X3FFF
  208.                 LD A,(HL)
  209.                 DEC H
  210.                 CP "R"
  211.                 SCF
  212.                 JR NZ,DISK_NONE1
  213.                 LD A,(HL)
  214.                 CP "D"
  215.                 SCF
  216.                 JR NZ,DISK_NONE1
  217.                 XOR A
  218. DISK_NONE1      PUSH AF
  219.                 CALL WRITE_WCPU12
  220.                 POP AF
  221.                 POP BC
  222.                 POP HL
  223.                 RET
  224.  
  225. TEXT4VIRTDRV    DB 0X16,ZASTV_Y+2,1
  226. TXT4VIRTDRV     DC "Virtual Drive: "
  227. ETXT4VIRTDRV
  228.