?login_element?

Subversion Repositories NedoOS

Rev

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