?login_element?

Subversion Repositories NedoOS

Rev

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

  1. ;*L+
  2. ;*** IO FOR UFO2: A-N(1..) HL-START DE-LENGTH / CY=0 - ERROR
  3. SIDE    DEFB    0
  4.  
  5. POS     LD A,(SIDE)
  6.         OR A
  7.         LD      A,#3C
  8.         JR      Z,DW_SID
  9.         RES     4,A
  10. DW_SID  LD      C,#FF
  11.         CALL    RG_DOS
  12.         LD      A,D
  13.         LD      C,#7F
  14.         CALL    RG_DOS
  15.         LD      A,#18
  16.         LD      C,#1F
  17.         CALL    RG_DOS
  18.         CALL    COM_EX
  19.         DI
  20.         RET
  21.  
  22. RD_SCT  LD      BC,RD_SCT
  23.         PUSH    BC
  24.         LD      BC,#17F
  25.         LD      IX,#2090
  26.         JR      DOS
  27.  
  28. RG_DOS  LD      IX,#2A53
  29.         JR      DOS
  30.  
  31. COM_EX  LD      IX,#3EF5
  32. DOS     PUSH    IX
  33.         JP      #3D2F
  34.  
  35. ERR_RW  SCF
  36.         RET
  37.  
  38. READ1   CALL    D_READ
  39.         RET     NC
  40.         LD      A,(SIDE)
  41.         XOR #FF
  42.         LD      (SIDE),A
  43.         LD A,12
  44.         JR NZ,RTR1
  45.         NEG
  46. RTR1    ADD A,D
  47.         LD D,A
  48.         CALL    TR000
  49.         JR      READ1
  50.  
  51. TR000   CALL TR0
  52. TR0     CALL TR00
  53. TR00    DI
  54.         LD      IX,#2F5F
  55.         CALL    DOS
  56.         LD      IX,#2F65
  57.         JP      DOS
  58.  
  59. READ    ;A-No., HL - adr
  60.        if 1
  61.        push hl
  62.         call findsprfilename
  63.         ex de,hl ;de=filename
  64.         ;jr $
  65.         OS_OPENHANDLE
  66.        pop de
  67.        ld hl,#4000
  68.        push bc ;b=handle
  69.         OS_READHANDLE
  70.        pop bc ;b=handle
  71.         OS_CLOSEHANDLE
  72.         ret
  73.        else
  74.         LD D,0
  75.         CP 73
  76.         JR C,REA0
  77.         INC D ;???
  78. REA0    LD (X0),HL
  79.         LD HL,X_LEN-2
  80.         CALL WA
  81.         PUSH AF
  82.         PUSH HL
  83.         LD E,A
  84.         LD L,5
  85.         CALL DIVB2
  86.         LD A,D
  87.         LD D,E
  88.         INC D
  89.         INC D
  90.         INC D
  91.         INC D
  92.         ADD A,#F4
  93.         LD E,A
  94.         LD B,1
  95.         LD HL,(X0)
  96.         PUSH HL
  97.         XOR A
  98.         LD (SIDE),A
  99.         CALL READ1
  100.         LD (FREE16),DE
  101.         POP DE
  102.         POP HL
  103.         INC HL
  104.         PUSH HL
  105.         LD L,(HL)
  106.         LD H,0
  107.         ADD HL,HL
  108.         ADD HL,HL
  109.         PUSH HL
  110.         ADD HL,DE
  111.         LD BC,1024
  112.         PUSH BC
  113.         LDIR
  114.         POP HL
  115.         POP BC
  116.         OR A
  117.         SBC HL,BC
  118.         LD BC,(X0)
  119.         ADD HL,BC
  120.         POP DE
  121.         INC DE
  122.         LD A,(DE)
  123.         POP BC
  124.         SUB B
  125.         RET Z
  126.         LD B,A
  127.         LD DE,(FREE16)
  128.         JP READ1
  129.        endif
  130.  
  131. D_WRITE DI
  132. LOPWR   CALL    POS
  133. LOPWR1  PUSH    HL
  134.         PUSH    BC
  135.         LD      C,#5F
  136.         LD      A,E
  137.         CALL    RG_DOS
  138.         CALL    WR_SC
  139.         POP     BC
  140.         POP     HL
  141.         INC     E
  142.         INC     H
  143.         DJNZ    LOPWR
  144.         RET
  145.  
  146. WR_SC   LD      A,#A0
  147.         LD      IX,#2FC3
  148.         CALL    DOS
  149.         LD      IX,#3FCA
  150.         LD      C,#7F
  151.         JP      DOS
  152.  
  153. D_READ  DI ;E-sec,D-trk,B-sec.num,HL-mem.adr
  154.         CALL    POS
  155.         LD      A,(#5CD6)
  156.         EX      AF,AF'
  157. NXT_S   DEFB    #DD
  158.         LD      L,#3 ;retry.num
  159. NXT_SC  PUSH    HL
  160.         PUSH    BC
  161. NXC_C1  PUSH    IX
  162.         LD      C,#5F
  163.         LD      A,E
  164.         CALL    RG_DOS
  165.         CALL    RD_SCT
  166.         DI
  167.         LD      HL,#5CD6
  168.         EX      AF,AF'
  169.         CP      (HL)
  170.         POP     IX
  171.         JR      Z,GOOD
  172.         LD      (HL),A
  173.         DEFB    #DD
  174.         DEC     L
  175.         POP     BC
  176.         POP     HL
  177.         JP      Z,ERR_RW
  178.         EX      AF,AF'
  179.         JR      NXT_SC
  180. GOOD    POP     BC
  181.         POP     HL
  182.         EX      AF,AF'
  183. GOOD1   INC     E
  184.         LD      A,E
  185.         CP      #F9
  186.         JR      C,OLD_TR
  187.         LD      E,#F4
  188.         INC     D
  189.         CALL    POS
  190. OLD_TR  INC     H
  191.         INC     H
  192.         INC     H
  193.         INC     H
  194.         DJNZ    NXT_S
  195.         XOR     A
  196.         RET
  197.  
  198. ;----------------------------------------------------------
  199. S_T100  DEFW #101 ;сектор 1..16; трек 1 or 3
  200.  
  201. BUF100 ;--------- таблица защиты ---- EQU ATR+768 ---------
  202.  DEFB #43,#7E,#90,#70,#45,#C1,#22,#E0,#F5,#3B,#ED,#F0,#4C,#C4,#E2,#2D
  203.  DEFB #46,#0C,#61,#72,#88,#78,#14,#0C,#7F,#54,#6D,#93,#FD,#C1,#6E,#AB
  204.  DEFB #6E,#14,#F0,#C5,#0E,#13,#11,#7B,#4B,#B9,#E3,#3D,#06,#92,#C4,#3C
  205.  DEFB #58,#C8,#B7,#C5,#73,#A8,#69,#19,#3B,#87,#80,#89,#9B,#07,#32,#E4
  206.  
  207.  DEFB #98,#09,#1D,#0A,#88,#09,#49,#38,#98,#07,#31,#1E,#88,#07,#50,#3F
  208.  DEFB #B8,#05,#3D,#26,#98,#05,#4D,#3A,#88,#05,#5A,#49,#88,#03,#49,#38
  209.  DEFB #A0,#B5,#CE,#AC,#BC,#84,#0E,#49,#62,#76,#81,#97,#6D,#25,#30,#49
  210.  DEFB #60,#B8,#88,#2A,#25,#F7,#24,#17,#52,#25,#9D,#6B,#B1,#8F,#35,#20
  211.  
  212.  DEFB #39,#AD,#73,#C6,#11,#44,#88,#58,#12,#3D,#38,#4D,#C5,#4D,#5E,#88
  213.  DEFB #58,#FE,#D9,#27,#CB,#06,#E0,#A2,#9D,#AC,#70,#5A,#55,#69,#AB,#AF
  214.  DEFB #A3,#CF,#4D,#93,#51,#7C,#8D,#BE,#86,#48,#83,#61,#D9,#F4,#05,#39
  215.  DEFB #07,#C7,#12,#F6,#4A,#6D,#BC,#88,#8C,#60,#C0,#80,#CB,#77,#58,#E3
  216.  
  217.  DEFB #CB,#0A,#50,#82,#5E,#A6,#EC,#E7,#F0,#8B,#E3,#18,#AB,#9E,#DC,#24
  218.  DEFB #CE,#09,#02,#35,#30,#E7,#F0,#8B,#E3,#57,#8A,#94,#BB,#9C,#27,#8F
  219.  DEFB #C4,#9B,#BC,#48,#26,#51,#26,#2F,#B9,#F5,#DB,#FC,#88,#E6,#D9,#F3
  220.  DEFB #6F,#70,#0B,#63,#64,#00,#6E,#6F,#F8,#B6,#8E,#3C,#17,#24,#18,#E8,#11
  221.  
  222.  
  223. LD100   ;загр 100 бт блока в ТАВ100
  224.         LD HL,(TAB100+98)
  225.         LD BC,#ACCE
  226.         XOR A
  227.         SBC HL,BC
  228.         RET Z ;уже загружено
  229.         XOR A
  230.         LD (SIDE),A
  231. L101    LD HL,BUF100
  232.         LD B,1
  233.         LD DE,(S_T100)
  234.         CALL D_READ
  235.         JR C,L100er
  236.         LD HL,(BUF100+98)
  237.         LD BC,#ACCE ;последние два байта
  238.         XOR A
  239.         SBC HL,BC
  240.         JR Z,L100ok
  241. L100er  LD HL,(S_T100)
  242.         INC L
  243.         LD A,L
  244.         CP 16
  245.         JR C,L102
  246.         LD L,1
  247.         LD A,H
  248.         XOR %10
  249.         LD H,A
  250. L102    LD (S_T100),HL
  251.         CALL TR000
  252.         JP L101
  253. L100ok  LD DE,TAB100
  254.         LD HL,BUF100
  255.         LD BC,100
  256.         LDIR
  257.         SCF
  258.         RET
  259.  
  260. PROTEC  ;A- N нач данных
  261.         LD      HL,TAB100+64
  262.         CALL DD
  263.         LD      A,1
  264.         LD      (SIDE),A
  265.         LD A,(HL)
  266.         INC HL
  267.         LD D,(HL)
  268.         SRL D
  269.         INC HL
  270.         PUSH HL
  271.         RRCA
  272.         RRCA
  273.         RRCA
  274.         LD E,A
  275.         LD      HL,INTR
  276.         LD      B,1
  277.         PUSH    DE
  278.         CALL    D_WRITE
  279.         POP     DE
  280.         LD      HL,BUF100
  281.         LD      B,1
  282.         CALL    D_READ
  283. U102    LD      B,255
  284.         LD      DE,INTR
  285.         LD      HL,BUF100
  286. U100    LD      A,(DE)
  287.         CP      (HL)
  288.         JR      NZ,U101
  289.         INC     HL
  290.         INC     HL
  291.         INC     DE
  292.         INC     DE
  293.         DJNZ    U100
  294.         PUSH    HL
  295.         CALL    READ ;сектор целый
  296.         CALL    PT128
  297. U101    POP     HL
  298.         LD      A,B
  299.         CP      252
  300.         RET     NC ;сектор не найден /retry
  301.         ADD     A,8
  302.         SUB     (HL)
  303.         CP      20
  304.         JR      NC,U102 ;царапина не на месте
  305.         POP     HL
  306.         RET     C ;норм выход
  307.  
  308. P_BLK   DEFB 0 ;номер блока для проверки 0,1,4,5
  309. RETRY   DEFB 9 ;к-во попыток
  310.  
  311. ;*L+
  312. TR_SEC  ; ПРВЕРКА ЗАЩИТЫ - номера tr sec для PROTEC
  313.         CALL MEM7
  314.         CALL L100ok ;-------------------LD100---|
  315.        if PROTECT
  316.         CALL CHECK3
  317.        endif
  318.         RET ;---------без проверки защиты--|
  319.         CALL CLR_P
  320.         CALL RND
  321.         AND %101
  322.         LD (P_BLK),A
  323. TR_RTR  CALL PROTEC
  324.         CALL TR000
  325.         CALL CLR_P
  326.         LD A,(P_BLK)
  327.         XOR %10
  328.         LD (P_BLK),A
  329.         LD HL,RETRY
  330.         DEC (HL)
  331.         JR NZ,TR_RTR
  332.         Ms 1    ;превышено число попыток
  333.         LD DE,SCR
  334.         LDIR
  335.         CALL LDASM2
  336.         CALL MLOOP
  337.         db "эТО ОНo"
  338.  
  339. X_LEN
  340. ;*F xdisk2 ; sec_No(1), sec_Shift(1)
  341.         include "xdisk2.asm"
  342. ;3,246, 15,13  LEN=278580
  343.  
  344. CLR_P   LD HL,BUF100
  345.         LD BC,511
  346.         PUSH HL
  347.         POP DE
  348.         INC DE
  349.         LD (HL),#FE
  350.         LDIR
  351.         RET
  352.