Subversion Repositories pentevo

Rev

Blame | Last modification | View Log | Download | RSS feed | ?url?

  1.  
  2. ; LAST UPDATE: 26.07.2023 savelij
  3.  
  4.                 include macros.a80
  5.                 include global_vars.a80
  6.                 include basic_tokens.a80
  7.                 include ports_ide.a80
  8.  
  9. HDD_TIME_OUT    EQU 0x0000
  10.  
  11.  INIT_VAR 0x6000
  12.  SETVAR BUFTSC,                 0x200
  13.  SETVAR BUFSEC,                 0x200
  14.  SETVAR TXT_HEX,                0x20
  15.  SETVAR TXT_DEC,                0x20
  16.  
  17. _MASTER         EQU %00000000
  18. _SLAVE          EQU %00010000
  19. _CHS            EQU %00000000
  20. _LBA            EQU %01000000
  21.  
  22.                 ORG 0x8000
  23.                 DI
  24.                 CALL FADRTSC
  25.                 CALL CLS
  26.                 LD HL,TEXT.TITLE
  27.                 CALL PRINT_MSG
  28.                 LD HL,TEXT.SELECTIDE
  29.                 CALL PRINT_MSG
  30. .WAITKEY        CALL KEYS
  31.                 CP '1'
  32.                 JR C,.WAITKEY
  33.                 CP '6'
  34.                 JR NC,.WAITKEY
  35.                 SUB '1'
  36.                 ADD A,A
  37.                 ADD A,LOW (HDDTABL)
  38.                 LD L,A
  39.                 ADC A,HIGH (HDDTABL)
  40.                 SUB L
  41.                 LD H,A
  42.                 LD A,(HL)
  43.                 INC HL
  44.                 LD H,(HL)
  45.                 LD L,A
  46.                 LD (COMHDD.TYPE),HL
  47.                 CALL CLS
  48. .RESTART        LD HL,TEXT.TITLE
  49.                 CALL PRINT_MSG
  50.                 LD IXH,0
  51. ; поиск HDD MASTER
  52.                 LD A,_MASTER + _CHS
  53.                 EX AF,AF'
  54.                 LD HL,BUFSEC
  55.                 CALL COMHDD
  56.                 DB 0
  57.                 LD C,_MASTER
  58.                 AND A
  59.                 JR NZ,.NOMASTER
  60. ; вывод информациии HDD MASTER
  61.                 INC IXH
  62.                 CALL .HDD_INFO
  63.                 JR .SLAVE
  64.  
  65. .NOMASTER       LD HL,TEXT.MASTERNONE
  66.                 CALL PRINT_MSG
  67. ; поиск HDD SLAVE
  68. .SLAVE          LD A,_SLAVE + _CHS
  69.                 EX AF,AF'
  70.                 LD HL,BUFSEC
  71.                 CALL COMHDD
  72.                 DB 0
  73.                 LD C,_SLAVE
  74.                 AND A
  75.                 JR NZ,.NOSLAVE
  76. ; вывод информации HDD SLAVE
  77.                 INC IXH
  78.                 CALL .HDD_INFO
  79.                 JR .ENDFOUND
  80.  
  81. .NOSLAVE        LD HL,TEXT.SLAVENONE
  82.                 CALL PRINT_MSG
  83. ; окончание поиска
  84. .ENDFOUND       LD A,IXH
  85.                 AND A
  86.                 LD HL,TEXT.DEVNOTFOUND
  87.                 CALL Z,PRINT_MSG
  88.                 LD HL,TEXT.RESET
  89.                 CALL PRINT_MSG
  90.                 JR $
  91.  
  92. .HDD_INFO       LD A,C
  93.                 LD (VVARS.HDDTYPE),A
  94.                 CP _MASTER
  95.                 LD HL,TEXT.MASTERFOUND
  96.                 JR Z,.HI1
  97.                 LD HL,TEXT.SLAVEFOUND
  98. .HI1            CALL PRINT_MSG
  99.                 LD HL,BUFSEC + 23 * WORD
  100.                 PUSH HL
  101.                 LD B,0x18
  102. .MF01           LD A,(HL)
  103.                 INC HL
  104.                 LD E,(HL)
  105.                 DEC HL
  106.                 LD (HL),E
  107.                 INC HL
  108.                 LD (HL),A
  109.                 INC HL
  110.                 DJNZ .MF01
  111.                 LD HL,BUFSEC + 23 * WORD + 21 * WORD   
  112.                 LD (HL),"\r"
  113.                 INC HL
  114.                 LD (HL),0
  115.                 POP HL
  116.                 CALL PRINT_MSG                  ; имя винта
  117.                 LD HL,TEXT.CHS
  118.                 CALL PRINT_MSG
  119.                 LD HL,BUFSEC + 0x200
  120.                 LD DE,(BUFSEC + 1 * WORD)       ; количество цилиндров
  121.                 CALL FHEX2DEC
  122.                 CALL PRINT_MSG
  123.                 LD A,"/"
  124.                 CALL PRINT_A_
  125.                 LD DE,(BUFSEC + 3 * WORD)       ; количество головок
  126.                 CALL FHEX1DEC
  127.                 CALL PRINT_MSG
  128.                 LD A,"/"
  129.                 CALL PRINT_A_
  130.                 LD DE,(BUFSEC + 6 * WORD)       ; количество секторов
  131.                 CALL FHEX1DEC
  132.                 CALL PRINT_MSG
  133.                 LD HL,(BUFSEC + 49 * WORD)
  134.                 LD A,H
  135.                 AND %00000010                   ; бит 9 в слове 49
  136.                 JR NZ,.LBATYPE
  137. ; LBA режим не поддерживается
  138.                 LD HL,TEXT.LBANOTSUPP
  139.                 JP PRINT_MSG
  140.  
  141. ; проверка бита поддержки LBA48
  142. .LBATYPE        LD HL,(BUFSEC + 83 * WORD)
  143.                 LD A,H
  144.                 AND %00000100                   ; бит 10 в слове 83
  145.                 JR Z,.LBA28
  146. ; для LBA48
  147. .LBA48          LD HL,(BUFSEC + 100 * WORD); размер в секторах
  148.                 LD DE,(BUFSEC + 101 * WORD)
  149.                 LD BC,(BUFSEC + 102 * WORD)
  150.                 LD (.CH1),BC
  151.                 LD (.CH2),DE
  152.                 LD (.CH3),HL
  153.                 LD B,11
  154.                 CALL .DIV_LBA
  155.                 LD IXL,0                        ; текст "MB"
  156.                 LD A,C
  157.                 AND A
  158.                 JR Z,.L3
  159.                 LD IXL,1                        ; текст "GB"
  160.                 LD B,2
  161.                 LD L,H
  162.                 LD H,E
  163.                 LD E,D
  164.                 LD D,C
  165.                 LD C,0
  166.                 CALL .DIV_LBA
  167.                 JR .L3
  168.  
  169. ; для LBA28
  170. .LBA28          LD HL,0
  171.                 LD (.CH1),HL
  172.                 LD HL,(BUFSEC + 60 * WORD)
  173.                 LD DE,(BUFSEC + 61 * WORD)      ; размер в LBA секторах
  174.                 LD (.CH2),DE
  175.                 LD (.CH3),HL
  176.                 LD BC,11 << 8 + 0
  177.                 CALL .DIV_LBA
  178.                 LD IXL,0
  179. .L3             LD B,D
  180.                 LD C,E
  181.                 EX DE,HL
  182.                 LD HL,BUFSEC + 0x200
  183.                 CALL FHEX4DEC
  184.                 CALL PRINT_MSG
  185.                 LD A,IXL
  186.                 AND A
  187.                 LD HL,TEXT.TXTMB
  188.                 JR Z,.L4
  189.                 LD HL,TEXT.TXTGB
  190. .L4             CALL PRINT_MSG
  191.                 LD HL,TEXT.SIZE
  192.                 CALL PRINT_MSG
  193.                 EXX
  194.                 LD DE,0
  195. .CH1            EQU $-2
  196.                 EXX
  197.                 LD BC,0
  198. .CH2            EQU $-2
  199.                 LD DE,0
  200. .CH3            EQU $-2
  201.                 CALL FHEX6DEC
  202.                 CALL PRINT_MSG
  203.                 LD HL,TEXT.SECTORS
  204.                 JP PRINT_MSG
  205.  
  206. .DIV_LBA
  207. .L1             SRL C
  208.                 RR D
  209.                 RR E
  210.                 RR H
  211.                 RR L
  212.                 DJNZ .L1
  213.                 RET
  214.  
  215. CLS             LD HL,0x4000
  216.                 LD DE,0x4001
  217.                 LD BC,0x1800
  218.                 LD (HL),L
  219.                 LDIR
  220.                 LD (HL),%00000111
  221.                 LD BC,0x2FF
  222.                 LDIR
  223.                 RET
  224.  
  225. KEYS            EI
  226.                 HALT
  227.                 DI
  228.                 BIT 5,(IY+1)
  229.                 JR Z,KEYS
  230.                 LD A,(IY-0x32)
  231.                 RES 5,(IY+1)
  232.                 RET
  233.  
  234. ; HDD DRIVER
  235. COMHDD          EX AF,AF'
  236.                 LD (.TMP_NUMHDD),A
  237.                 EX (SP),HL
  238.                 LD A,(HL)
  239.                 INC HL
  240.                 EX (SP),HL
  241.                 ADD A,A
  242.                 PUSH HL
  243.                 LD HL,0
  244. .TYPE           EQU $-2
  245.                 ADD A,L
  246.                 LD L,A
  247.                 ADC A,H
  248.                 SUB L
  249.                 LD H,A
  250.                 LD A,(HL)
  251.                 INC HL
  252.                 LD H,(HL)
  253.                 LD L,A
  254.                 LD A,0
  255. .TMP_NUMHDD     EQU $-1
  256.                 EX AF,AF'
  257.                 EX (SP),HL
  258.                 RET
  259.  
  260. HDDTABL         DW IDE_NEMO
  261.                 DW IDE_ATM2
  262.                 DW IDE_SMUC
  263.                 DW IDE_DIVIDE
  264.                 DW IDE_PROFI
  265.  
  266. HDDTYPE := HDD_NEMO
  267. IDE_NEMO        include drv_hdd.a80
  268.  
  269. HDDTYPE := HDD_TURBO2
  270. IDE_ATM2        include drv_hdd.a80
  271.  
  272. HDDTYPE := HDD_SMUC
  273. IDE_SMUC        include drv_hdd.a80
  274.  
  275. HDDTYPE := HDD_DIVIDE
  276. IDE_DIVIDE      include drv_hdd.a80
  277.  
  278. HDDTYPE := HDD_PROFI
  279. IDE_PROFI       include drv_hdd.a80
  280.  
  281.                 include print.a80
  282.                 include math.a80
  283.  
  284. VVARS
  285. .PPOS_X         DB 0                    ; координата печати текста (шрифт 6х8)
  286. .PPOS_Y         DB 0                    ; координата печати текста (шрифт 6х8)
  287. .COLOR_TEXT     DB 0                    ; цвет текста
  288. .HDDTYPE        DB 0                    ; тип MASTER/SLAVE
  289.  
  290. TEXT
  291. .TITLE          DB "\x16\x05\x00\x17\x07HDD detect tool Build "
  292.                 TEXTDATE
  293.                 DB " \r\r\0"
  294. .TXTMB          DB " MB \r\0"
  295. .TXTGB          DB " GB \r\0"
  296. .MASTERFOUND    DB "\rHDD master found \r\0"
  297. .SLAVEFOUND     DB "\rHDD slave found \r\0"
  298. .MASTERNONE     DB "\rHDD master not found \r\0"
  299. .SLAVENONE      DB "\rHDD slave not found \r\0"
  300. .MASTERCDDVD    DB "\rCD/DVD-ROM master found \r\0"
  301. .SLAVECDDVD     DB "\rCD/DVD-ROM slave found \r\0"
  302. .CHS            DB "C/H/S: \0"
  303. .NEWLINE        DB "\r\0"
  304. .RESET          DB "\x16\x09\x17End detect. Press RESET \0"
  305. .LBANOTSUPP     DB "\rLBA mode not support \0"
  306. .SIZE           DB "Size: \0"
  307. .SECTORS        DB " sectors \r\0"
  308. .DEVNOTFOUND    DB "\rDevice(s) not found \0"
  309. .SELECTIDE      DB "\x16\x0A\x051.HDD Nemo \r"
  310.                 DB "\x16\x0A\x062.HDD ATM Turbo 2 \r"
  311.                 DB "\x16\x0A\x073.HDD SMUC \r"
  312.                 DB "\x16\x0A\x084.HDD DIVIDE \r"
  313.                 DB "\x16\x0A\x095.HDD Profi \r\0"
  314.  
  315. FONT            binclude altstd.fnt
  316.