Subversion Repositories NedoOS

Rev

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

  1.         ;org #7a46
  2.        
  3.         if 1==1
  4. driver_curdrive=fatfs.tabl+10
  5. driver_curdmaaddr=driver_curdrive+1
  6. driver_curpblockpars=driver_curdmaaddr+2
  7. driver_curnsectors=driver_curpblockpars+2
  8. ;driver_tempword=#7a4c ;..7a4d
  9. ;driver_buf8=#7a4d
  10. ;driver_counter=#7a51
  11. ;device_states=#7a53
  12.        
  13.         else
  14.        
  15. driver_curdrive ;#7a46
  16.         db #01
  17. driver_curdmaaddr ;#7a47
  18.         dw #4000
  19. driver_curpblockpars ;#7a49
  20.         dw 0
  21. driver_curnsectors ;#7a4b
  22.         db 0
  23. driver_tempword ;??? #7a4c..7a4d
  24.         db 0
  25. driver_buf8 ;??? #7a4d
  26.         ds 4
  27. driver_counter ;??? #7a51
  28.         dw 0
  29.        
  30.         endif
  31.        
  32. device_states ;#7a53
  33.         db 1
  34.         db 1
  35.         db 1
  36.         db 1
  37. disk_status:
  38.         ld d,0
  39.         ld hl,device_states
  40.         add hl,de
  41.         ld a,(hl)
  42.                 ret
  43. ;???????????????????????? т√ч√трхЄё  т #58cb
  44. devices_init
  45.         xor a
  46.         ld d,a
  47.         ld hl,device_states
  48.         add hl,de
  49.         cp (hl)
  50.         ret z
  51.         ld h,b
  52.         ld l,c
  53.         or e ;a=e
  54.         jr nz,devices_init_noSD
  55.         if atm==3
  56.         call SD_INIT
  57.         else
  58.         ld a,1
  59.         endif
  60.         ld (device_states),a
  61.         ret  
  62. devices_init_noSD
  63.         dec a
  64.         jr nz,devices_init_noIDEmaster
  65.         ld a,#e0
  66.         call IDE_INIT
  67.         ld (device_states+1),a
  68.         ret  
  69. devices_init_noIDEmaster
  70.         dec a
  71.         jr nz,devices_init_noIDEslave
  72.         ld a,#f0
  73.         call IDE_INIT
  74.         ld (device_states+2),a
  75.         ret  
  76. devices_init_noIDEslave
  77.         dec a
  78.         jr nz,devices_init_noGS
  79.         call GS_INIT
  80.         ld (device_states+3),a
  81.         ret  
  82. devices_init_noGS
  83.         ld a,#01 ;эхЄ Єръюую єёЄЁющёЄтр
  84.         ret  
  85.  
  86. diskgetpars
  87.         ld hl,(driver_curpblockpars)
  88.         ld e,(hl)
  89.         inc hl
  90.         ld d,(hl)
  91.         inc hl
  92.         ld c,(hl)
  93.         inc hl
  94.         ld b,(hl)
  95.         ld hl,(driver_curdmaaddr)
  96.         ld a,(driver_curnsectors)
  97.         exa  
  98.         ld a,(driver_curdrive)
  99.         or a
  100.         ret
  101.        
  102. ;?????????????????????????????? ўЄхэшх ёхъЄюЁют, т√ч√трхЄё  шч #443e
  103. devices_read
  104.         call diskgetpars
  105.         jp z,readsectorsSD
  106.         dec a
  107.         jr nz,readsectors_noIDEmaster
  108.         ld a,#e0 ;master ;яюўхьє bit6=1???
  109. ;b+a=head+device
  110. ;c=cylHI
  111. ;d=cylLO
  112. ;e=sec
  113. ;a'=count      
  114.         jp readsectorsIDE
  115. readsectors_noIDEmaster
  116.         dec a
  117.         jr nz,readsectors_noIDEslave
  118.         ld a,#f0 ;slave ;яюўхьє bit6=1???
  119. ;b+a=head+device
  120. ;c=cylHI
  121. ;d=cylLO
  122. ;e=sec
  123. ;a'=count      
  124.         jp readsectorsIDE
  125. readsectors_noIDEslave
  126.         dec a
  127.         jp z,readsectorsGS
  128.         ld a,#01
  129.         ret  
  130.  
  131. ;?????????????????????????????? чряшё№ ёхъЄюЁют, т√ч√трхЄё  шч #4433
  132. devices_write
  133.         call diskgetpars
  134.         jp z,writesectorsSD
  135.         dec a
  136.         jr nz,writesectors_noIDEmaster
  137.         ld a,#e0 ;master ;яюўхьє bit6=1???
  138. ;b+a=head+device
  139. ;c=cylHI
  140. ;d=cylLO
  141. ;e=sec
  142. ;a'=count      
  143.         jp writesectorsIDE
  144. writesectors_noIDEmaster
  145.         dec a
  146.         jr nz,writesectors_noIDEslave
  147.         ld a,#f0 ;slave ;яюўхьє bit6=1???
  148. ;b+a=head+device
  149. ;c=cylHI
  150. ;d=cylLO
  151. ;e=sec
  152. ;a'=count      
  153.         jp writesectorsIDE
  154. writesectors_noIDEslave
  155.         dec a
  156.         jp z,writesectorsGS
  157.         ld a,#01
  158.         ret  
  159.  
  160. ;;;;;;;;;;;;;;;;;;;;;;;;;;; IDE
  161.        
  162. IDE_INIT
  163. ;a=device (#e0/f0)
  164.         push hl
  165.         call readidentIDE
  166.         pop hl
  167.         and a
  168.         ret nz
  169.         ;jp checkidentIDE
  170. checkidentIDE
  171. ;чрўхь ёюїЁрэ Є№ hl? TODO єсЁрЄ№
  172.         push hl
  173.         ld d,h
  174.         ld e,l
  175.         ld hl,#0063
  176.         add hl,de
  177.         ld a,(hl)
  178.         and #02
  179.         jr z,ldaff_pophl
  180.         ;ld bc,#ff00+hddcount;????
  181.         ld bc,hddcount
  182.         ld hl,#000c
  183.         add hl,de
  184.         ld a,(hl) ;#3f???
  185.         out (C),a
  186.         ld hl,#0006
  187.         ld bc,hddhead
  188.         add hl,de
  189.         ld a,(hl)
  190.         dec a ;#0f???
  191.         out (C),a
  192.         ld bc,hddcmd
  193.         ld a,#91
  194.         out (C),a
  195.         ld de,#1000
  196. nobsywithtimeout0
  197.         dec de
  198.         ld a,d
  199.         or e
  200.         jr z,ldaff_pophl
  201.         in a,(C)
  202.         and #80
  203.         jr nz,nobsywithtimeout0
  204.         pop hl
  205.         ret  
  206. ldaff_pophl    
  207.         ld a,#ff
  208.         pop hl
  209.         ret
  210.  
  211. readsectorsIDE 
  212. ;b+a=head+device
  213. ;c=cylHI
  214. ;d=cylLO
  215. ;e=sec
  216. ;a'=count      
  217.         add a,b
  218.         ld b,a
  219. ;b=head
  220. ;c=cylHI
  221. ;d=cylLO
  222. ;e=sec
  223. ;a'=count      
  224.         call setblockparsIDE
  225.         exa  
  226.         ld bc,hddcmd
  227.         ld a,#20
  228.         out (C),a
  229.         ld bc,hddstat
  230. waitDRQ0
  231.         in a,(C)
  232.         and #88
  233.         cp #08
  234.         jr nz,waitDRQ0 ;юцшфрэшх уюЄютэюёЄш яхЁхфрўш фрээ√ї
  235.         exa  
  236. readsectorsIDE0
  237.         exa  
  238.         call readsecIDE
  239.         ld bc,hddstat
  240. nobsy0
  241.         in a,(C)
  242.         and #80
  243.         jr nz,nobsy0
  244.         exa  
  245.         dec a
  246.         jr nz,readsectorsIDE0
  247.         jr lda0
  248.  
  249. writesectorsIDE
  250. ;b+a=head+device
  251. ;c=cylHI
  252. ;d=cylLO
  253. ;e=sec
  254. ;a'=count      
  255.         add a,b
  256.         ld b,a
  257. ;b=head
  258. ;c=cylHI
  259. ;d=cylLO
  260. ;e=sec
  261. ;a'=count      
  262.         call setblockparsIDE
  263.         exa  
  264.         ld bc,hddcmd
  265.         ld a,#30
  266.         out (C),a
  267.         ld bc,hddstat
  268. waitDRQ01
  269.         in a,(C)
  270.         and #88
  271.         cp #08
  272.         jr nz,waitDRQ01 ;юцшфрэшх уюЄютэюёЄш яхЁхфрўш фрээ√ї
  273.         exa  
  274. writesectorsIDE0
  275.         exa  
  276.         call writesecIDE
  277.         ;inc h
  278.         ;inc h
  279.         ld bc,hddstat
  280. nobsy01
  281.         in a,(C)
  282.         and #80
  283.         jr nz,nobsy01
  284.         exa  
  285.         dec a
  286.         jr nz,writesectorsIDE0
  287. lda0   
  288.         xor a;ld a,#00
  289.         ret
  290.  
  291. readsecIDE
  292.         ;jr $
  293.         xor a;ld a,0
  294. readsecIDE0
  295.         ld bc,hdddatlo
  296.         in e,(C)
  297.         ld bc,hdddathi
  298.         in d,(C)
  299.         ld (hl),e
  300.         inc hl
  301.         ld (hl),d
  302.         inc hl
  303.         dec a
  304.         jr nz,readsecIDE0
  305.         ret
  306.        
  307. writesecIDE
  308.         ;jr $
  309.         if (hdddatlo != #10)
  310.         xor a
  311. writesecIDE0
  312.         ld e,(hl)
  313.         inc hl
  314.         ld d,(hl)
  315.         inc hl
  316.         ld bc,hdddathi
  317.         out (c),d
  318.         ld bc,hdddatlo
  319.         out (c),e
  320.         dec a
  321.         jr nz,writesecIDE0
  322.         else
  323.         ld bc,#0000 + hdddathi
  324. writesecIDE0
  325.         ld a,(hl)
  326.         inc hl
  327.         outi
  328.         out (hdddatlo),a
  329.         ld a,(hl)
  330.         inc hl
  331.         outi
  332.         out (hdddatlo),a
  333.         ld a,(hl)
  334.         inc hl
  335.         outi
  336.         out (hdddatlo),a
  337.         ld a,(hl)
  338.         inc hl
  339.         outi
  340.         out (hdddatlo),a
  341.         jr nz,writesecIDE0
  342.         endif
  343.         ret
  344.        
  345. setblockparsIDE
  346. ;b=head
  347. ;c=cylHI
  348. ;d=cylLO
  349. ;e=sec
  350. ;a'=count      
  351.         push de
  352.         ld d,b
  353.         ld e,c
  354.         ;ld bc,#ff00+hddhead ;чрўхь ff???
  355.         ld bc,hddhead
  356.         out (C),d ;head
  357.         ld bc,hddstat
  358. nobsy02
  359.         in a,(C)
  360.         and #80
  361.         jr nz,nobsy02
  362.         ld bc,hddcylhi
  363.         out (C),e ;cylHI
  364.         pop de
  365.         ld bc,hddcyllo
  366.         out (C),d ;cylLo
  367.         ld bc,hddsec
  368.         out (C),e ;sec
  369.         ld bc,hddcount
  370.         exa  
  371.         out (C),a ;count
  372.         ret
  373.        
  374. readidentIDE
  375.         ;jr $
  376.         ;ld bc,#ff00+hddhead ;чрўхь ff???
  377.         ld bc,hddhead
  378.         out (C),a
  379.         ld bc,hddstat
  380.         ld d,#1a
  381. LL7c06  ;ei  
  382.         halt  
  383.         ;di  
  384.         dec d
  385.         jr z,ldaff
  386.         in a,(C)
  387.         bit 7,a
  388.         jr nz,LL7c06
  389.         and a
  390.         jr z,ldaff
  391.         inc a
  392.         jr z,ldaff
  393.         xor a
  394.         ld bc,hddcylhi
  395.         out (C),a
  396.         ld bc,hddcyllo
  397.         out (C),a
  398.         ld a,#ec
  399.         ld bc,hddcmd
  400.         out (C),a
  401.         ld bc,hddstat
  402. LL7c29  in a,(C)
  403.         and a
  404.         jr z,ldaff
  405.         inc a
  406.         jr z,ldaff
  407.         dec a
  408.         rrca  
  409.         jr c,LL7c3c
  410.         rlca  
  411.         and #88
  412.         cp #08
  413.         jr nz,LL7c29
  414. LL7c3c  ld bc,hddcyllo
  415.         in e,(C)
  416.         ld bc,hddcylhi
  417.         in d,(C)
  418.         ld a,d
  419.         or e
  420.         jp z,readsecIDE
  421.         ld hl,#eb14 ;???
  422.         sbc hl,de
  423.         ld a,#01
  424.         ret z
  425. ldaff  
  426.         ld a,#ff
  427.         ret  
  428.        
  429. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Z-Controller (SD-card) ;;;;;;;;;;;;;;;;
  430.  
  431. SD_INIT
  432.         call cs_highSD ;тъы■ўрхь яшЄрэшх ърЁЄ√ яЁш ёэ Єюь т√сюЁх
  433.         ld bc,#0057
  434.         ld de,#20ff
  435. LL7c5d  out (C),e
  436.         dec d
  437.         jr nz,LL7c5d ;чряшё√трхь т яюЁЄ ьэюую хфшэшўхъ
  438.         xor a
  439.         exa  
  440. LL7c64  ld hl,cmd00SD ;GO_IDLE_STATE ;ъюьрэфр ёсЁюёр ш яхЁхтюфр ърЁЄ√ т SPI Ёхцшь яюёых тъы■ўхэш  яшЄрэш 
  441.         call outcom_hlSD ;¤Єющ ъюьрэфющ ърЁЄюўър яхЁхтюфшЄё  т Ёхцшь SPI
  442.         call read32byteswaitnoffSD
  443.         exa  
  444.         dec a
  445.         jr z,errexitSD ;хёыш ърЁЄр 256 Ёрч эх юЄтхЄшыр, Єю ърЁЄ√ эхЄ
  446.         exa  
  447.         dec a
  448.         jr nz,LL7c64
  449.         ld hl,cmd08SD ;SEND_IF_COND ;чряЁюё яюффхЁцштрхь√ї эряЁ цхэшщ
  450.         call outcom_hlSD
  451.         call read32byteswaitnoffSD
  452.         in h,(C)
  453.         nop  
  454.         in h,(C)
  455.         nop  
  456.         in h,(C)
  457.         nop  
  458.         in h,(C)
  459.         ld hl,0
  460.         bit 2,a
  461.         jr nz,LL7c92
  462.         ld h,#40
  463. LL7c92  ld a,#77 ;чряєёърхь яЁюЎхёё тэєЄЁхээхщ шэшЎшрышчрЎшш
  464.         call outcom_zeroparsSD
  465.         call read32byteswaitnoffSD
  466.         ld a,#69
  467.         out (C),a ;сшЄ 6 єёЄрэютыхэ фы  шэшЎшрышчрЎшш SDHC ърЁЄ√
  468.         nop  
  469.         out (C),h
  470.         nop  
  471.         out (C),l
  472.         nop  
  473.         out (C),l
  474.         nop  
  475.         out (C),l
  476.         ld a,#ff
  477.         out (C),a
  478.         call read32byteswaitnoffSD ;цфхь яхЁхтюфр ърЁЄ√ т Ёхцшь уюЄютэюёЄш
  479.         and a ;тЁхь  юцшфрэш  яЁшьхЁэю 1 ёхъєэфр
  480.         jr nz,LL7c92
  481. LL7cb4  ld a,#7b ;яЁшэєфшЄхы№эю юЄъы■ўрхь CRC16
  482.         call outcom_zeroparsSD
  483.         call read32byteswaitnoffSD
  484.         and a
  485.         jr nz,LL7cb4
  486. LL7cbf  ld hl,cmd16SD ;SET_BLOCKEN ;ъюьрэфр шчьхэхэш  ЁрчьхЁр сыюър
  487.         call outcom_hlSD ;яЁшэєфшЄхы№эю чрфрхь ЁрчьхЁ сыюър 512 срщЄ
  488.         call read32byteswaitnoffSD
  489.         and a
  490.         jr nz,LL7cbf
  491. ;тъы■ўхэшх яшЄрэш  ърЁЄ√ яЁш ёэ Єюь ёшуэрых т√сюЁр ърЁЄ√
  492. cs_highSD
  493.         push af
  494.         ld a,#03
  495.         ld bc,#8057
  496.         out (C),a ;тъы■ўрхь яшЄрэшх, ёэшьрхь т√сюЁ ърЁЄ√
  497.         xor a
  498.         dec b
  499.         out (C),a ;юсэєы хь яюЁЄ фрээ√ї
  500. ;юсэєыхэшх яюЁЄр ьюцэю эх фхырЄ№, яЁюёЄю яюёыхфэшщ чряшёрээ√щ сшЄ тёхуфр 1, р яЁш ёсЁюёх ўхЁхч т√тюф фрээ√ї ърЁЄ√ эряЁ цхэшх яюярфрхЄ эр т√тюф яшЄрэш  ърЁЄ√ ш ётхЄюфшюф эр яшЄрэшш яюфётхўштрхЄё 
  501.         pop af
  502.         xor a;ld a,#00
  503.         ret  
  504.  
  505. errexitSD      
  506.         call SD_OFF
  507.         ld a,#03
  508.         ret  
  509.  
  510. SD_OFF 
  511.         xor a
  512.         ld bc,#8057
  513.         out (C),a ;т√ъы■ўхэшх яшЄрэш  ърЁЄ√
  514.         dec b
  515.         out (C),a ;юсэєыхэшх яюЁЄр фрээ√ї
  516.         ret  
  517.  
  518. ;т√сшЁрхь ърЁЄє ёшуэрыюь 0
  519. cs_lowSD       
  520.         push af
  521.         ld a,#01
  522.         ld bc,#8057
  523.         out (C),a
  524.         pop af
  525.         ret  
  526.  
  527. ;чряшё№ т ърЁЄє ъюьрэф√ ё эхшчьхэ хь√ь ярЁрьхЄЁюь шч ярь Єш
  528. ;рфЁхё ъюьрэф√ т HL
  529. outcom_hlSD
  530.         call cs_lowSD
  531.         ld bc,#0657
  532.         otir  
  533.         ret  
  534.  
  535. ;чряшё№ т ърЁЄє ъюьрэф√ ё эєыхт√ьш рЁуєьхэЄрьш
  536. ;└=ъюф ъюьрэф√, рЁуєьхэЄ ъюьрэф√ Ёртхэ 0
  537. outcom_zeroparsSD
  538.         call cs_lowSD
  539.         ld bc,#0057
  540.         out (C),a
  541.         xor a
  542.         out (C),a
  543.         nop  
  544.         out (C),a
  545.         nop  
  546.         out (C),a
  547.         nop  
  548.         out (C),a
  549.         dec a
  550.         out (C),a
  551.         ret  
  552.  
  553. ;чряшё№ ъюьрэф√ ўЄхэш /чряшёш ё эюьхЁюь ёхъЄюЁр т BCDE фы  ърЁЄ ёЄрэфрЁЄэюую ЁрчьхЁр
  554. ;яЁш шчьхэ хьюь ЁрчьхЁх ёхъЄюЁр эюьхЁ ёхъЄюЁр эєцэю єьэюцрЄ№ эр хую ЁрчьхЁ, фы  ърЁЄ
  555. ;SDHC, ьшэш ш ьшъЁю ЁрчьхЁ ёхъЄюЁр эх ЄЁхсєхЄ єьэюцхэш 
  556. setcmdparsSD
  557.         push hl
  558.         push de
  559.         push bc
  560.         push af
  561.         push bc
  562.         ld a,#7a ;READ_OCR
  563.         ld bc,#0057
  564.         call outcom_zeroparsSD
  565.         call read32byteswaitnoffSD
  566.         in a,(C)
  567.         nop  
  568.         in h,(C)
  569.         nop  
  570.         in h,(C)
  571.         nop  
  572.         in h,(C)
  573.         bit 6,a ;яЁютхЁ хь 30 сшЄ ЁхушёЄЁр OCR (6 сшЄ т л└╗)
  574.         pop hl       ;яЁш єёЄрэютыхээюь сшЄх єьэюцхэшх эюьхЁр ёхъЄюЁр
  575.         jr nz,LL7d40 ;эх ЄЁхсєхЄё 
  576.         exd       ;яЁш ёсЁю°хээюь сшЄх ёююЄтхЄёЄтхээю
  577.         add hl,hl ;єьэюцрхь эюьхЁ ёхъЄюЁр эр 512 (#200)
  578.         exd  
  579.         adc hl,hl
  580.         ld h,l
  581.         ld l,d
  582.         ld d,e
  583.         ld e,#00
  584. LL7d40  pop af ;чруюЄютыхээ√щ эюьхЁ ёхъЄюЁр эрїюфшЄё  т HLDE
  585.         out (C),a ;ъюьрэфр
  586.         nop  
  587.         out (C),h ;;яш°хь эюьхЁ ёхъЄюЁр юЄ ёЄрЁ°хую
  588.         nop  
  589.         out (C),l
  590.         nop  
  591.         out (C),d
  592.         nop  
  593.         out (C),e ;фю ьырф°хую срщЄр
  594.         ld a,#ff
  595.         out (C),a ;яш°хь яєёЄющ CRC7 ш ёЄюяют√щ сшЄ
  596.         pop bc
  597.         pop de
  598.         pop hl
  599.         ret
  600.        
  601. ;ўЄхэшх юЄтхЄр ърЁЄ√ фю 32 Ёрч, хёыш юЄтхЄ эх #FF - эхьхфыхээ√щ т√їюф
  602. read32byteswaitnoffSD
  603.         push de
  604.         ld de,#20ff
  605.         ld bc,#0057
  606. LL7d5e  in a,(C)
  607.         cp e
  608.         jr nz,LL7d66
  609.         dec d
  610.         jr nz,LL7d5e
  611. LL7d66  pop de
  612.         ret  
  613.  
  614. cmd00SD
  615. ;GO_IDLE_STATE
  616. ;ъюьрэфр ёсЁюёр ш яхЁхтюфр ърЁЄ√ т SPI Ёхцшь яюёых тъы■ўхэш  яшЄрэш 
  617.         db #40
  618.         db #00
  619.         db #00
  620.         db #00
  621.         db #00
  622.         db #95
  623. cmd08SD
  624. ;SEND_IF_COND
  625. ;чряЁюё яюффхЁцштрхь√ї эряЁ цхэшщ
  626.         db #48
  627.         db #00
  628.         db #00
  629.         db #01
  630.         db #aa
  631.         db #87
  632. cmd16SD
  633. ;SET_BLOCKEN
  634. ;ъюьрэфр шчьхэхэш  ЁрчьхЁр сыюър
  635.         db #50
  636.         db #00
  637.         db #00
  638.         db #02
  639.         db #00
  640.         db #ff
  641.  
  642. readsecSDcard  
  643.         push bc
  644.         ld bc,#7f57
  645.         inir  
  646.         ld b,#7f
  647.         inir  
  648.         ld b,#7f
  649.         inir  
  650.         ld b,#7f
  651.         inir  
  652.         ld b,#04
  653.         inir  
  654.         nop  
  655.         in a,(C)
  656.         nop  
  657.         in a,(C)
  658.         pop bc
  659.         ret
  660.  
  661. writesecSDcard 
  662.         push bc
  663.         ld bc,#0057
  664.         out (C),a
  665.         ld b,#80
  666.         otir  
  667.         ld b,#80
  668.         otir  
  669.         ld b,#80
  670.         otir  
  671.         ld b,#80
  672.         otir  
  673.         ld a,#ff
  674.         out (C),a
  675.         nop  
  676.         out (C),a
  677.         pop bc
  678.         ret
  679.  
  680. readsectorsSD
  681.         ld a,#52
  682.         call setcmdparsSD
  683.         exa  
  684. LL7dbd  exa  
  685. LL7dbe  call read32byteswaitnoffSD
  686.         cp #fe
  687.         jr nz,LL7dbe
  688.         call readsecSDcard
  689.         exa  
  690.         dec a
  691.         jr nz,LL7dbd
  692.         ld a,#4c
  693.         call outcom_zeroparsSD
  694. LL7dd1  call read32byteswaitnoffSD
  695.         inc a
  696.         jr nz,LL7dd1
  697.         jp cs_highSD
  698.  
  699. writesectorsSD 
  700.         ld a,#59
  701.         call setcmdparsSD
  702. LL7ddf  call read32byteswaitnoffSD
  703.         inc a
  704.         jr nz,LL7ddf
  705.         exa  
  706. LL7de6  exa  
  707.         ld a,#fc
  708.         call writesecSDcard
  709. LL7dec  call read32byteswaitnoffSD
  710.         inc a
  711.         jr nz,LL7dec
  712.         exa  
  713.         dec a
  714.         jr nz,LL7de6
  715.         ld c,#57
  716.         ld a,#fd
  717.         out (C),a
  718. LL7dfc  call read32byteswaitnoffSD
  719.         inc a
  720.         jr nz,LL7dfc
  721.         jp cs_highSD
  722.  
  723. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;NeoGS
  724. writesectorsGS
  725.         ld a,#05
  726. ;b=head
  727. ;c=cylHI
  728. ;d=cylLO
  729. ;e=sec
  730. ;a'=count      
  731.         call setblockparsGS
  732.         exa  
  733.         push de
  734.         push bc
  735.         ld bc,#00b3
  736. writesectorsGS0
  737.         exa  
  738.         out (#bb),a
  739.         call loop_errGS
  740.         ld de,#0200
  741. writesecGS200
  742.         outi  
  743.         call no_bsyGS
  744.         dec de
  745.         ld a,d
  746.         or e
  747.         jr nz,writesecGS200
  748.         exa  
  749.         dec a
  750.         jr nz,writesectorsGS0
  751.         call wait_bsyGS
  752. writesecGS_waitready0
  753.         in a,(C)
  754.         cp #77
  755.         jr nz,writesecGS_waitready0 ;??? юцшфрхь эхяюэ Єэю ўхую
  756.         pop bc
  757.         pop de
  758.         xor a
  759.         ret
  760.        
  761. readsectorsGS
  762.         ld a,#03
  763. ;b=head
  764. ;c=cylHI
  765. ;d=cylLO
  766. ;e=sec
  767. ;a'=count      
  768.         call setblockparsGS
  769.         exa  
  770.         push de
  771.         push bc
  772.         ld bc,#00b3
  773. readsectorsGS0
  774.         exa  
  775.         out (#bb),a
  776.         call loop_errGS
  777.         ld de,#0200
  778. readsecGS0
  779.         call wait_bsyGS
  780.         ini  
  781.         dec de
  782.         ld a,d
  783.         or e
  784.         jr nz,readsecGS0
  785.         exa  
  786.         dec a
  787.         jr nz,readsectorsGS0
  788.         call wait_bsyGS
  789. readsecGS_waitready0
  790.         in a,(C)
  791.         cp #77
  792.         jr nz,readsecGS_waitready0 ;??? юцшфрхь эхяюэ Єэю ўхую
  793.         pop bc
  794.         pop de
  795.         xor a
  796.         ret  
  797.  
  798. ;??????? not used        
  799.         db #3e,#01 ;ld a,#01
  800.         db #18,#01 ;jr LL7e68
  801.        
  802. GS_INIT
  803.         call writesecGS
  804.         or a
  805.         ret nz
  806.         xor a
  807. ;b=head
  808. ;c=cylHI
  809. ;d=cylLO
  810. ;e=sec
  811. ;a'=count      
  812.         call setblockparsGS
  813.         call wait_bsyGS
  814.         in a,(#b3)
  815.         cp #77 ;ъръюх-Єю ёюёЄю эшх GS???
  816.         jr nz,lda1
  817.         xor a
  818.         ret  
  819. lda1   
  820.         ld a,#01
  821.         ret  
  822.  
  823. setblockparsGS 
  824. ;a=? 0/3/5
  825. ;b=head
  826. ;c=cylHI
  827. ;d=cylLO
  828. ;e=sec
  829. ;a'=count      
  830.         out (#b3),a
  831.         ld a,#1e
  832.         out (#bb),a
  833.         call loop_errGS
  834.         ld a,b
  835.         out (#b3),a
  836.         call no_bsyGS
  837.         ld a,c
  838.         out (#b3),a
  839.         call no_bsyGS
  840.         ld a,d
  841.         out (#b3),a
  842.         call no_bsyGS
  843.         ld a,e
  844.         out (#b3),a
  845.         call no_bsyGS
  846.         exa  
  847.         out (#b3),a
  848.         exa  
  849.         nop  
  850.         nop  
  851.         nop  
  852.         nop  
  853.         nop  
  854.         nop  
  855.         nop  
  856.         nop  
  857.         nop  
  858.         ret
  859.  
  860. ;юцшфрэшх юётюсюцфхэш  єёЄЁющёЄтр
  861. no_bsyGS       
  862.         in a,(#bb)
  863.         rla  
  864.         jr c,no_bsyGS
  865.         ret  
  866. wait_bsyGS     
  867.         in a,(#bb)
  868.         rla  
  869.         jr nc,wait_bsyGS
  870.         ret  
  871. loop_errGS     
  872.         in a,(#bb)
  873.         rra  
  874.         jr c,loop_errGS ;c=error???
  875.         ret
  876.  
  877. writesecGS     
  878.         ld a,#80
  879.         out (#33),a
  880.         ;ei  
  881.         halt  
  882.         halt  
  883.         ;di  
  884.         ld a,#f3
  885.         ld b,#30 ;ъюышўхёЄтю яютЄюЁют (*1/50 ё)
  886.         out (#bb),a
  887. waitGS0
  888.         ;ei  
  889.         halt  
  890.         ;di  
  891.         dec b
  892.         jr z,lda1
  893.         in a,(#bb)
  894.         rra  
  895.         jr c,waitGS0
  896.         ld bc,#00b3
  897.         in a,(C)
  898.         ld de,#0300
  899.         ld hl,#5b00
  900.         out (C),e
  901.         ld a,#14
  902.         out (#bb),a
  903.         call loop_errGS
  904.         out (C),d
  905.         call no_bsyGS
  906.         out (C),l
  907.         call no_bsyGS
  908.         out (C),h
  909.         call no_bsyGS
  910.         ld hl,(#0006)
  911. writesecGS300  
  912.         outi  
  913.         call no_bsyGS
  914.         dec de
  915.         ld a,d
  916.         or e
  917.         jr nz,writesecGS300
  918.         ld hl,#5b00
  919.         out (C),l
  920.         ld a,#13
  921.         out (#bb),a
  922.         call loop_errGS
  923.         out (C),h
  924.         ;ei  
  925.         halt  
  926.         halt  
  927.         ;di  
  928.         in a,(#b3)
  929.         cp #77
  930.         jp nz,lda1
  931.         xor a
  932.         ret  
  933.  
  934. get_fattime:
  935. ;de=buf
  936.         ld hl,sys_time_date
  937.         ldi
  938.         ldi
  939.         ldi
  940.         ldi
  941.         ret
  942. sys_time_date
  943.         ds 4
  944.  
  945.         if 1==0
  946. ;????????????????????????? рфЁхёєхЄё  т #549d
  947. ;ёяшёюъ эхяюффхЁцштрхь√ї ёшьтюыют т шьхэш Їрщыр, 0 ъюэхЎ
  948.         db #22
  949.         db #2a
  950.         db #2b
  951.         db #2c
  952.         db #3a
  953.         db #3b
  954.         db #3c
  955.         db #3d
  956.         db #3e
  957.         db #3f
  958.         db #5b
  959.         db #5d
  960.         db #7c
  961.         db #7f
  962.         db 0
  963.         endif
  964.