?login_element?

Subversion Repositories NedoOS

Rev

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

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