?login_element?

Subversion Repositories NedoOS

Rev

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

  1. ;кодировка 866
  2. ;опознаётся неправильно
  3. ;поэтому напишем много текста кириллицей
  4. ;LAST UPDATE: 30.06.2019 savelij
  5.  
  6. ;АДРЕС ЦИКЛА ОБЩЕНИЯ СО СПЕКОМ
  7. COMINT_         EQU 0X026E
  8.  
  9. _DEV_READ=2
  10. _DEV_WRITE=3
  11.  
  12.  
  13. ;АДРЕС УСТАНОВЩИКА ДРАЙВЕРА НА NeoGS
  14. SETUPSD         EQU 0X5B00
  15.  
  16. ;ДРАЙВЕР SD-CARD ДЛЯ NGS
  17.  
  18. ;ВХОДНЫЕ ПАРАМЕТРЫ ОБЩИЕ:
  19. ;HL-АДРЕС ЗАГРУЗКИ В ПАМЯТЬ
  20. ;BCDE-32-Х БИТНЫЙ НОМЕР СЕКТОРА
  21. ;A-КОЛИЧЕСТВО БЛОКОВ (БЛОК=512 БАЙТ)
  22. ;ТОЛЬКО ДЛЯ МНОГОБЛОЧНОЙ ЗАПИСИ/ЧТЕНИИ
  23.  
  24. ;ОШИБКИ ВЫДАВАЕМЫЕ НА ВЫХОДЕ:
  25. ;A=0-ИНИЦИАЛИЗАЦИЯ ПРОШЛА УСПЕШНО
  26. ;A=1-КАРТА НЕ НАЙДЕНА ИЛИ НЕ ОТВЕТИЛА
  27.  
  28. ;ЗАПИСЬ "A" СЕКТОРОВ
  29. ;SDWRMUL                EX AF,AF'
  30. writesectorsGS
  31.                 LD A,_DEV_WRITE
  32.                 CALL COMM2SD
  33.                 EX AF,AF'
  34.                 PUSH DE
  35.                 PUSH BC
  36.                 LD BC,GSDAT
  37. SDWRSN1         EX AF,AF'
  38.                 OUT (GSCOM),A
  39.                 CALL WC_
  40.                 LD DE,0X0200
  41. SDWRSN2         OUTI
  42.                 CALL WD_
  43.                 DEC DE
  44.                 LD A,D
  45.                 OR E
  46.                 JR NZ,SDWRSN2
  47.                 EX AF,AF'
  48.                 DEC A
  49.                 JR NZ,SDWRSN1
  50.                 CALL WN_
  51.                 IN A,(GSDAT)
  52.                 ;CP 0X99                                ;КАРТА ПОТЕРЯЛАСЬ ПО ВРЕМЯ ЧТЕНИЯ/ЗАПИСИ
  53.                 ;JP Z,SD_CARD_LOST
  54.                 POP BC
  55.                 POP DE
  56.                 XOR A
  57.                 RET
  58.  
  59. ;ЧТЕНИЕ "A" СЕКТОРОВ
  60. ;SDRDMUL                EX AF,AF'
  61. readsectorsGS
  62.                 LD A,_DEV_READ
  63.                 CALL COMM2SD
  64.                 EX AF,AF'
  65.                 PUSH DE
  66.                 PUSH BC
  67.                 ;LD D,A
  68.                 ;LD A,IYL
  69.                 ;BIT 1,A
  70.                 ;JR NZ,SDRDSN3
  71.                 ;AND A
  72.                 ;JR NZ,SDRDSN5
  73. ;SDRDSN3               
  74. ;               LD A,(R_7FFD)
  75.                 ;READ_7FFD
  76.                 ;AND 0X10
  77.                 ;LD BC,(B0_CPU2)
  78.                 ;JR Z,SDRDSN4
  79.                 ;LD BC,(B1_CPU2)
  80. ;SDRDSN4
  81.                ;LD A,0X37
  82.                 ;OR B
  83.                 ;LD B,A
  84.                 ;LD A,C
  85.                 ;LD C,LOW (WIN_A0)
  86.                 ;OUT (C),A
  87. ;SDRDSN5
  88.                 ;LD A,D
  89.                 LD BC,GSDAT
  90. SDRDSN1         EX AF,AF'
  91.                 OUT (GSCOM),A   ;FC
  92.                 IN A,(GSCOM)
  93.                 RRA
  94.                 JR C,$-3
  95.                 LD DE,0X0200                    ;ПРОДОЛЖАЕМ ЕСЛИ ВСЕ В ПОРЯДКЕ
  96. SDRDSN2         IN A,(GSCOM)
  97.                 RLA
  98.                 JR NC,$-3
  99.                 INI
  100.                 DEC DE
  101.                 LD A,D
  102.                 OR E
  103.                 JR NZ,SDRDSN2
  104.                 EX AF,AF'
  105.                 DEC A
  106.                 JR NZ,SDRDSN1
  107.                 IN A,(GSCOM)
  108.                 RLA
  109.                 JR NC,$-3
  110.                 IN A,(GSDAT)
  111.                 CP 0X99                         ;КАРТА ПОТЕРЯЛАСЬ ПО ВРЕМЯ ЧТЕНИЯ/ЗАПИСИ
  112.                 ;JP Z,SD_CARD_LOST
  113.                 ;LD BC,WIN_P6
  114.                 XOR A
  115.                 ;OUT (C),A
  116.                 POP BC
  117.                 POP DE
  118.                 RET
  119.                
  120.                 display "GS_INIT ",$
  121. GS_INIT
  122.        XOR A
  123.        OUT (GSDAT),A
  124.        ld a,0x23 ;Get number of RAM Pages
  125.        OUT (GSCOM),A
  126.        halt
  127.        halt
  128.        IN A,(GSDAT)
  129.        inc a
  130.        cp 3+1
  131.        jr c,SD_NO ;не может быть <3 pages or 0xff pages
  132.                
  133.                 ;в еве драйвер уже установлен ЕРСом
  134.                 if atm != 1
  135.        JP INSTSDD
  136.                 endif
  137.  
  138. ;ИНИЦИАЛИЗАЦИЯ КАРТОЧКИ
  139. GSDINIT         XOR A
  140. GSDINIT1        CALL COMM2SD
  141.                 CALL WN_
  142. GSDINIT2        IN A,(GSDAT)
  143. GSDINIT3        ;CP 0X99                                ;КАРТА ПОТЕРЯЛАСЬ ПО ВРЕМЯ ЧТЕНИЯ/ЗАПИСИ
  144.                 ;JP Z,SD_CARD_LOST
  145.                 CP 0X77
  146.                 JR NZ,SD_NO
  147.                 XOR A
  148.                 RET
  149.  
  150. SD_NO           LD A,1
  151.                 RET
  152.  
  153. ;ПЕРЕДАТЧИК КОМАНД/ПАРАМЕТРОВ В ДРАЙВЕР НА NeoGS
  154. COMM2SD         OUT (GSDAT),A           ;УШЛА КОМАНДА ДРАЙВЕРУ
  155.                 LD A,0X1E
  156.                 OUT (GSCOM),A
  157.                 CALL WC_                ;УШЛА КОМАНДА ПРОШИВКЕ
  158.                 bit 6,a ;ждет ли команда данные
  159.                 jr z,SD_DRV_PRESENT
  160.                 pop af ;снимем со стека адрес возврата
  161.                 xor a
  162.                 JR SD_NO ;если команда не ждет данные, то считаем что драйвер не установлен
  163. SD_DRV_PRESENT:
  164.                 LD A,B
  165.                 OUT (GSDAT),A
  166.                 CALL WD_                ;УШЛИ БИТЫ 31-24 ПАРАМЕТРОВ ;savelij13: тут виснет
  167.                 LD A,C
  168.                 OUT (GSDAT),A
  169.                 CALL WD_                ;УШЛИ БИТЫ 23-16 ПАРАМЕТРОВ
  170.                 LD A,D
  171.                 OUT (GSDAT),A
  172.                 CALL WD_                ;УШЛИ БИТЫ 15-8 ПАРАМЕТРОВ
  173.                 LD A,E
  174.                 OUT (GSDAT),A
  175.                 CALL WD_                ;УШЛИ БИТЫ 7-0 ПАРАМЕТРОВ
  176.                 EX AF,AF'
  177.                 OUT (GSDAT),A
  178.                 EX AF,AF'
  179.                 ds 9,0
  180.                 RET                     ;УШЛО КОЛ-ВО СЕКТОРОВ
  181.  
  182. ;ОЖИДАНИЕ КОГДА NeoGS БАЙТ ЗАБЕРЕТ
  183. WD_             IN A,(GSCOM)
  184.                 RLA
  185.                 JR C,$-3
  186.                 RET
  187.  
  188. ;ОЖИДАНИЕ КОГДА NeoGS ДАСТ БАЙТ
  189. WN_             IN A,(GSCOM)
  190.                 RLA
  191.                 JR NC,$-3
  192.                 RET
  193.  
  194. ;ОЖИДАНИЕ КОГДА NeoGS КОМАНДУ ЗАБЕРЕТ
  195. WC_             IN A,(GSCOM)
  196.                 RRA
  197.                 JR C,$-3
  198.                 RET
  199.  
  200.                 if atm != 1
  201. ;УСТАНОВЩИК ДРАЙВЕРА НА NeoGS
  202. INSTSDD
  203.                 LD BC,GSCFG0
  204.                 IN A,(C)
  205.                 CP 0xFF
  206.                 JP NZ,NEOGSINIT
  207. ;ИНИЦИАЛИЗАЦИЯ ОРИГИНАЛЬНОГО GS ПОКА НИЧЕГО НЕ ДЕЛАЕМ, 2МБ версия может резетится 10 секунд, нужно выждать перед повторным сбросом и после, перед следующими коммандами.
  208. ORGGSINIT
  209. ;               LD A,0xF4
  210. ;               OUT (GSCOM),A                   ;ПОЛНЫЙ СБРОС GS
  211.                 JP SD_NO
  212. ;ИНИЦИАЛИЗАЦИЯ NeoGS
  213. NEOGSINIT
  214.                 LD A,0X80
  215.                 OUT (GSCTR),A                   ;ПОЛНЫЙ СБРОС NEOGS
  216.                 ;EI
  217.                 HALT
  218.                 ;EI
  219.                 HALT
  220.                 ;EI
  221.                 HALT
  222.                 ;DI
  223.                 LD A,0XF3
  224.                 OUT (GSCOM),A
  225.                 LD B,0X30
  226. ISDD1           ;EI
  227.                 HALT
  228.                 ;DI
  229.                 DEC B
  230.                 JR Z,SD_NO
  231.                 IN A,(GSCOM)
  232.                 RRA
  233.                 JR C,ISDD1
  234.                 LD BC,GSDAT
  235.                 IN A,(C)
  236.                 LD DE,0X0300
  237.                 LD HL,SETUPSD
  238.                 OUT (C),E
  239.                 LD A,0X14
  240.                 OUT (GSCOM),A
  241.                 CALL WC_
  242.                 OUT (C),D
  243.                 CALL WD_
  244.                 OUT (C),L
  245.                 CALL WD_
  246.                 OUT (C),H
  247.                 CALL WD_
  248.                 LD HL,UKLAD1
  249. ISDD3           OUTI
  250.                 CALL WD_
  251.                 DEC DE
  252.                 LD A,D
  253.                 OR E
  254.                 JR NZ,ISDD3
  255.                 LD HL,SETUPSD
  256.                 OUT (C),L
  257.                 LD A,0X13
  258.                 OUT (GSCOM),A
  259.                 CALL WC_
  260.                 OUT (C),H
  261.                 ;EI
  262.                 HALT
  263.                 ;EI
  264.                 HALT
  265.                 ;DI
  266.                 LD B,3
  267.                 IN A,(GSDAT)
  268.                 DEC B
  269.                 JP Z,SD_NO
  270.                 CP 0X77
  271.                 JP NZ,SD_NO
  272.                 XOR A
  273.                 JP GSDINIT
  274.  
  275. UKLAD1  ;ОТКУДА КОД НА НГС ЗАКИДЫВАТЬ
  276.         incbin "ngssd.bin"
  277.        
  278.                 endif