Subversion Repositories pentevo

Rev

Rev 1120 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.  
  2. ; LAST UPDATE: 13.11.2024 savelij
  3.  
  4. VIEW_CHS        EQU 1
  5.  
  6. HDD_DETECTOR    LD IX,.HDDDETECT
  7.         RST8 _WINW
  8.                 LD HL,ADR_CAT
  9.         RST8 _COM_DEV,_COMHDDN,_DEV_INIT
  10.                 LD A,H
  11.                 AND A
  12.                 JR Z,.MASTER_FOUND
  13.                 DEC A
  14.                 CALL Z,.CDDVDFOUNDM
  15.                 JR Z,.SLAVE
  16.                 PUSH HL
  17.                 LD HL,.MASTERNONE
  18.         RST8 _PRINT_MESSAGE
  19.                 POP HL
  20.                 JR .SLAVE
  21.  
  22. .MASTER_FOUND   LD C,1
  23.                 CALL .HDD_INFO
  24. .SLAVE          LD A,L
  25.                 AND A
  26.                 JR Z,.SLAVE_FOUND
  27.                 DEC A
  28.                 CALL Z,.CDDVDFOUNDS
  29.                 JP Z,.ENDTEST
  30.                 LD HL,.SLAVENONE
  31.         RST8 _PRINT_MESSAGE
  32.                 JR .ENDTEST;.SD_TEST
  33.  
  34. .SLAVE_FOUND    LD C,2
  35.                 CALL .HDD_INFO
  36.  
  37. ;.SD_TEST       CALL .GET_SD_INFO
  38.  
  39. .ENDTEST        LD HL,.TXTANYKEY
  40.         RST8 _PRINT_MESSAGE
  41. .WAITENTER      EI
  42.                 HALT
  43.                 BIT 5,(IY+1)
  44.                 JR Z,.WAITENTER
  45.                 LD A,(LAST_K)
  46.                 CP 0X0D
  47.                 JR NZ,.WAITENTER
  48.                 JP RESTART
  49.  
  50. .HDD_INFO       PUSH HL
  51.                 DEC C
  52.                 LD HL,.MASTERFOUND
  53.                 JR Z,.HDDI1
  54.                 LD HL,.SLAVEFOUND
  55. .HDDI1
  56.         RST8 _PRINT_MESSAGE
  57.                 LD A,C
  58.                 EX AF,AF'
  59.                 LD HL,ADR_CAT
  60.         RST8 _COM_DEV,_COMHDDN,_DEV_READID
  61.                 LD HL,ADR_CAT+46
  62.                 PUSH HL
  63.                 LD B,0X18
  64. .MF01           LD A,(HL)
  65.                 INC HL
  66.                 LD E,(HL)
  67.                 DEC HL
  68.                 LD (HL),E
  69.                 INC HL
  70.                 LD (HL),A
  71.                 INC HL
  72.                 DJNZ .MF01
  73.                 LD HL,ADR_CAT+46+42
  74.         IF VIEW_CHS
  75.                 LD (HL),"\r"
  76.                 INC HL
  77.         ENDIF
  78.                 LD (HL),0
  79.                 POP HL
  80.         RST8 _PRINT_MESSAGE             ;имя винта
  81.         IF VIEW_CHS
  82.                 LD HL,.CHS
  83.         RST8 _PRINT_MESSAGE
  84.                 LD HL,ADR_CAT+0X200
  85.                 LD DE,(ADR_CAT + 1 * WORD)      ;количество цилиндров
  86.         RST8 _MATH,_HEX2DECTXT
  87.         RST8 _PRINT_MESSAGE
  88.                 LD A,"/"
  89.         RST8 _PRINT_A
  90.                 LD DE,(ADR_CAT + 3 * WORD)      ;количество головок
  91.         RST8 _MATH,_HEX1DECTXT
  92.         RST8 _PRINT_MESSAGE
  93.                 LD A,"/"
  94.         RST8 _PRINT_A
  95.                 LD DE,(ADR_CAT + 6 * WORD)      ;количество секторов
  96.         RST8 _MATH,_HEX1DECTXT
  97.         RST8 _PRINT_MESSAGE
  98.         ENDIF
  99.                 LD HL,.TXTSIZE
  100.         RST8 _PRINT_MESSAGE
  101.                 LD IXL,0                        ; текст "MB"
  102. ;               LD HL,.NEWLINE
  103. ;               RST8 _PRINT_MESSAGE
  104. ; проверка бита поддержки LBA48
  105.                 LD HL,(ADR_CAT + 83 * WORD)
  106.                 LD A,H
  107.                 AND %00000100                   ; бит 10 в слове 83
  108.                 JR Z,.LBA28
  109. ; для LBA48
  110. .LBA48          LD HL,(ADR_CAT + 100 * WORD + 1); размер в секторах /256
  111.                 LD DE,(ADR_CAT + 101 * WORD + 1)
  112.                 LD BC,(ADR_CAT + 102 * WORD + 1)
  113.                 LD B,3
  114.                 CALL .DIV_LBA
  115.                 LD A,C
  116.                 AND A
  117.                 JR Z,.L3
  118.                 LD IXL,1                        ; текст "GB"
  119.                 LD B,2
  120.                 LD L,H
  121.                 LD H,E
  122.                 LD E,D
  123.                 LD D,C
  124.                 LD C,0
  125.                 CALL .DIV_LBA
  126.                 JR .L3
  127.  
  128. ; для LBA28
  129. .LBA28
  130.                 LD HL,(ADR_CAT + 60 * WORD + 1)
  131.                 LD DE,(ADR_CAT + 61 * WORD + 1) ; размер в LBA секторах
  132.                 LD BC,3 << 8 + 0
  133.                 CALL .DIV_LBA
  134. .L3             LD B,D
  135.                 LD C,E
  136.                 EX DE,HL
  137.                 LD HL,ADR_CAT+0X200
  138.         RST8 _MATH,_HEX4DECTXT
  139.         RST8 _PRINT_MESSAGE
  140.                 LD A,IXL
  141.                 AND A
  142.                 LD HL,.TXTMB
  143.                 JR Z,.L4
  144.                 LD HL,.TXTGB
  145. .L4
  146.         RST8 _PRINT_MESSAGE
  147.                 POP HL
  148.                 RET
  149.  
  150. .DIV_LBA
  151. .L1             SRL C
  152.                 RR D
  153.                 RR E
  154.                 RR H
  155.                 RR L
  156.                 DJNZ .L1
  157.                 RET
  158.  
  159. .CDDVDFOUNDS    PUSH HL
  160.                 LD HL,.SLAVECDDVD
  161.                 JR .CDDVDFOUND
  162.  
  163. .CDDVDFOUNDM    PUSH HL
  164.                 LD HL,.MASTERCDDVD
  165. .CDDVDFOUND     PUSH AF
  166.         RST8 _PRINT_MESSAGE
  167.                 POP AF
  168.                 POP HL
  169.                 RET
  170.  
  171. .GET_SD_INFO
  172.         RST8 _COM_DEV,_CONTROL_SD
  173.                 AND A
  174.                 JR Z,.GSI01
  175. ; SD карта не найдена
  176.                 LD HL,.SD_NOT_FOUND
  177.         RST8 _PRINT_MESSAGE
  178.                 RET
  179.  
  180. .GSI01
  181.                 RET
  182.  
  183. .HDDDETECT      DB 0,0,24,32,0X07,0X1F,%01010000,0
  184.                 DW 0,0,.TXTHDDDET,0,0,0
  185.  
  186. .TXTHDDDET      DZ "\1\x17\XFF\3Device detector\r"
  187.  
  188. .TXTSIZE        DZ "\rSize:"
  189. .TXTMB          DZ " MB\r"
  190. .TXTGB          DZ " GB\r"
  191. .MASTERFOUND    DZ "\rHDD master found\r"
  192. .SLAVEFOUND     DZ "\rHDD slave found\r"
  193. .MASTERNONE     DZ "\rHDD master not found\r"
  194. .SLAVENONE      DZ "\rHDD slave not found\r"
  195. .MASTERCDDVD    DZ "\rCD/DVD-ROM master found\r"
  196. .SLAVECDDVD     DZ "\rCD/DVD-ROM slave found\r"
  197. .CHS            DZ "C/H/S: "
  198. .SD_NOT_FOUND   DZ "SD Card not found\r"
  199. .NEWLINE        DZ "\r"
  200. .TXTANYKEY      DZ "\x16\x17\0\3Press ENTER to main menu"
  201.  
  202.         IF 0
  203. ;[получение размера карты в секторах]
  204. GET_SD_SIZE     PUSH IX
  205.                 PEC_OFF M_SHADOW_BF
  206.         IFDEF UNREAL
  207.                 LD BC,0X3C;0
  208.                 LD DE,0X1800;29120
  209.         ELSE
  210.                 PUSH HL
  211.                 PUSH HL
  212.                 LD A,CMD_09
  213.                 CALL OUT_COM
  214.                 CALL IN_OOUT
  215.                 CP 0XFE
  216.                 JR NZ,$-5
  217.                 LD BC,P_DATA
  218.                 POP HL
  219.                 POP IX
  220.                 LD B,0X14
  221.                 INIR
  222.                 BIT 6,(IX+0)
  223.                 JR Z,SDVERS_10
  224. ;спецификация версия 2.0
  225. ;C_SIZE (22 bit) 69:48 0x45:30
  226. ;00 01 02 03 04    05       06       07       08       09
  227. ;xx xx xx xx xx xxxx1111 xxxxxxxx xx111111 11111111 11111111
  228.                 LD BC,1
  229.                 LD L,(IX+9)
  230.                 LD H,(IX+8)
  231.                 LD A,(IX+7)
  232.                 AND %00111111
  233.                 LD E,A
  234.                 LD D,B          ;DEHL=C_SIZE (22 БИТА)
  235.                 ADD HL,BC
  236.                 EX DE,HL
  237.                 LD C,B
  238.                 ADC HL,BC
  239.                 EX DE,HL
  240.                 REPT 2
  241.                 ADD HL,HL
  242.                 EX DE,HL
  243.                 ADC HL,HL
  244.                 EX DE,HL
  245.                 ENDM
  246.                 LD B,H
  247.                 LD C,L          ;BCDE=количество секторов
  248.                 CALL EXIT_SDREAD
  249.                 POP IX
  250.                 RET
  251.  
  252. ;спецификация версия 1.0
  253. ;C_SIZE (12 bit) 73:62 0x49:3E
  254. ;C_SIZE_MULT (3 bit) 49:47 0x31:2F
  255. ;00 01 02 03 04    05       06       07        08      09        0A
  256. ;xx xx xx xx xx xxxx1111 xxxxxx11 11111111 11xxxxxx xxxxxx11 1xxxxxxx
  257. SDVERS_10       LD L,(IX+7)
  258.                 LD A,(IX+6)
  259.                 AND %00000011
  260.                 LD H,A
  261.                 ADD HL,HL
  262.                 ADD HL,HL
  263.                 LD A,(IX+8)
  264.                 RLCA
  265.                 RLCA
  266.                 AND %00000011
  267.                 OR L
  268.                 LD L,A
  269.                 EX DE,HL        ;DE=C_SIZE
  270.                 LD L,(IX+10)
  271.                 LD H,(IX+9)
  272.                 ADD HL,HL
  273.                 LD A,H
  274.                 AND %00000111
  275.                 ADD A,2
  276.                 LD B,A          ;B=C_SIZE_MULT+2
  277.                 LD HL,1
  278.                 ADD HL,HL
  279.                 DJNZ $-1
  280.                 INC DE
  281.                 LD B,H
  282.                 LD C,L
  283.                 CALL MULTIPLY
  284.                 LD B,H
  285.                 LD C,L          ;количество секторов
  286.         ENDIF
  287.                 CALL EXIT_SDREAD
  288.                 POP IX
  289.                 RET
  290.         ENDIF
  291.