Subversion Repositories pentevo

Rev

Rev 312 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

  1. ;
  2. ;--------------------------------------
  3. ;
  4. MSG_TSD_OUT:
  5.         .DB     $0D,$0A,"out ",0,0
  6. MSG_TSD_IN:
  7.         .DB     ", in ",0
  8.  
  9. MSG_TSD_CMD:
  10.         .DB     $0D,$0A,$3B,"CMD",0,0
  11.  
  12. MSG_TSD_ACMD41:
  13.         .DB     $0D,$0A,$3B,"ACMD41",0
  14.  
  15. MSG_TSD_CSUP:
  16.         .DB     $0D,$0A,"CS up",0
  17. MSG_TSD_CSDOWN:
  18.         .DB     $0D,$0A,"CS down",0
  19.  
  20. MSG_TSD_MMC:
  21.         .DB     "MMC",0
  22. MSG_TSD_SDV1:
  23.         .DB     "SD v1",0
  24. MSG_TSD_SDSC:
  25.         .DB     "SD v2+ Standard Capacity",0,0
  26. MSG_TSD_SDHC:
  27.         .DB     "SD v2+ High Capacity",0,0
  28.  
  29. MSG_TSD_OCR:
  30.         .DB     "OCR: ",0
  31. MSG_TSD_CSD:
  32.         .DB     "CSD: ",0
  33. MSG_TSD_CID0:
  34.         .DB     "CID: ",0
  35. MSG_TSD_CID1:
  36.         .DB     "Manufacturer ID    ",0
  37. MSG_TSD_CID2:
  38.         .DB     "OEM/Application ID ",0
  39. MSG_TSD_CID3:
  40.         .DB     "Product name       ",0
  41. MSG_TSD_CID4:
  42.         .DB     "Product revision   ",0
  43. MSG_TSD_CID5:
  44.         .DB     "Product serial #   ",0
  45. MSG_TSD_CID6:
  46.         .DB     "Manufacturing date ",0
  47. MSG_TSD_CID6B:
  48.         .DB     ".20",0
  49. MSG_TSD_CID6C:
  50.         .DB     ".19",0
  51. MSG_TSD_CRC:
  52.         .DB     "CRC=",0,0
  53. MSG_TSD_READSECTOR:
  54.         .DB     $0D,$0A,$3B,"Read sector ",0
  55. MSG_TSD_SKIP:
  56.         .DB     $0D,$0A,$3B,"512 operations is skiped",0
  57.  
  58. WIND_TSD1:
  59.         .DB     10,10,32,4,$9F,$01
  60. WIND_TSD2:
  61.         .DB     0,2,53,22,$DF,$00
  62. ;
  63. ;--------------------------------------
  64. ;
  65. .EQU    TSD_BLS0        =4
  66. .EQU    TSD_BLS1        =5
  67. .EQU    TSD_ARG_ACMD41  =18
  68. .EQU    TSD_CARDTYPE    =19
  69. .EQU    TSD_Y           =20
  70. ;
  71. ;--------------------------------------
  72. ;
  73. TESTSD: GETMEM  21
  74. ;
  75. T_SD00: CBR     FLAGS1,0B00000011
  76.         SBR     FLAGS1,0B00000100
  77.  
  78.         CALL    SCR_FADE
  79.         LDI     XL,0
  80.         LDI     XH,1
  81.         CALL    SCR_SET_CURSOR
  82.         LDI     DATA,$20
  83.         LDI     TEMP,$7F
  84.         LDI     COUNT,53
  85.         CALL    SCR_FILL_CHAR_ATTR
  86.  
  87.         LDIZ    WIND_TSD1*2
  88.         CALL    WINDOW
  89.         LDIZ    MLMSG_TSD_MENU*2
  90.         CALL    SCR_PRINTMLSTR
  91.  
  92. T_SD02: STH     TSD_Y,NULL
  93. T_SD04: RCALL   T_SD_PUTCURSOR
  94. T_SD01: RCALL   T_SD_SENSORS
  95.         CALL    INKEY
  96.         BREQ    T_SD01
  97.         CPI     DATA,KEY_UP
  98.         BREQ    T_SD02
  99.         CPI     DATA,KEY_DOWN
  100.         BREQ    T_SD03
  101.         CPI     DATA,KEY_ENTER
  102.         BREQ    T_SD0E
  103.         SBRC    TEMP,PS2K_BIT_EXTKEY
  104.         RJMP    T_SD01
  105.         CPI     DATA,KEY_ESC
  106.         BRNE    T_SD01
  107.         CBR     FLAGS1,0B00001000
  108.         FREEMEM 21
  109.         RET
  110. ;
  111. T_SD03: STH     TSD_Y,ONE
  112.         RJMP    T_SD04
  113. ;
  114. T_SD0E: LDH     DATA,TSD_Y
  115.         TST     DATA
  116.         BREQ    T_SD10
  117.         LDI     DATA,0B00001000
  118.         EOR     FLAGS1,DATA
  119.         RJMP    T_SD04
  120. ; - - - - - - - - - - - - - - - - - - -
  121. T_SD10:
  122.         CBR     FLAGS1,0B00000101
  123.         SBR     FLAGS1,0B00000010
  124.         RCALL   T_SD_CRLF_DC
  125.         RCALL   T_SD_CRLF_DC
  126.         LDIZ    MSG_TITLE1*2
  127.         CALL    PRINTSTRZ
  128.         CALL    PRINT_SHORT_VERS
  129.         RCALL   T_SD_CRLF_DC
  130.         SBR     FLAGS1,0B00000110
  131.         RCALL   T_SD_SENSORS
  132.  
  133.         LDIZ    WIND_TSD2*2
  134.         CALL    WINDOW
  135.         LDI     XL,1
  136.         LDI     XH,3
  137.         STH     TSD_Y,XH
  138.         CALL    SCR_SET_CURSOR
  139.         RCALL   T_SD_CRLF_DC
  140.         LDIZ    MLMSG_TSD_INIT*2
  141.         CALL    PRINTMLSTR
  142.  
  143.         STS     SD_CARDTYPE,NULL
  144.         STH     TSD_CARDTYPE,NULL
  145.  
  146.         RCALL   T_SD_CSUP
  147.         LDI     TEMP,SD_CS1
  148.         SER     DATA
  149.         CALL    FPGA_REG
  150.         LDI     TEMP,32
  151.         CALL    SD_RD_DUMMY
  152.  
  153.         RCALL   T_SD_CSDOWN
  154.         LDI     TEMP,SD_CS0
  155.         SER     DATA
  156.         CALL    FPGA_REG
  157.         SER     COUNT
  158. T_SD11:
  159.         LDI     DATA,0
  160.         RCALL   T_SD_CMDXX
  161.         LDIZ    CMD00*2     ;CMD0 (go_idle_state)
  162.         CALL    SD_WR_PGM_6
  163.         DEC     COUNT
  164.         BRNE    T_SD12
  165.  
  166.         RCALL   T_SD_SCR_CRLF_DC
  167.         LDIZ    MLMSG_TSD_NOCARD*2
  168.         CALL    PRINTMLSTR
  169.         RJMP    T_SD90
  170. T_SD12:
  171.         CPI     DATA,$01
  172.         BRNE    T_SD11
  173.  
  174.         LDI     DATA,8
  175.         RCALL   T_SD_CMDXX
  176.         LDIZ    CMD08*2     ;CMD8 (send_if_cond)
  177.         CALL    SD_WR_PGM_6
  178.         LDI     WL,$00
  179.         SBRS    DATA,2
  180.         LDI     WL,$40
  181.         STH     TSD_ARG_ACMD41,WL
  182.         LDI     TEMP,4
  183.         CALL    SD_RD_DUMMY
  184.  
  185. T_SD13: RCALL   T_SD_ACMD41
  186.         LDI     DATA,$40|55 ;CMD55
  187.         CALL    SD_WR_CMD
  188.         LDI     TEMP,2
  189.         CALL    SD_RD_DUMMY
  190.         LDI     DATA,$40|41 ;ACMD41 (sd_send_op_cond)
  191.         CALL    SD_EXCHANGE
  192.         LDH     DATA,TSD_ARG_ACMD41
  193.         CALL    SD_EXCHANGE
  194.         CALL    SD_WR_CMX4
  195.         TST     DATA
  196.         BREQ    T_SD15
  197.         SBRS    DATA,2
  198.         RJMP    T_SD13
  199.  
  200. T_SD14: LDI     DATA,1
  201.         RCALL   T_SD_CMDXX
  202.         LDI     DATA,$40|1  ;CMD1 (send_op_cond)
  203.         CALL    SD_WR_CMD
  204.         TST     DATA
  205.         BRNE    T_SD14
  206.         RCALL   T_SD_CRC_OFF
  207.         RCALL   T_SD_SETBLKLEN
  208.         LDI     TEMP,0B00010000
  209.         LDIZ    MSG_TSD_MMC*2
  210.         RJMP    T_SD18
  211.  
  212. T_SD15: RCALL   T_SD_CRC_OFF
  213.         RCALL   T_SD_SETBLKLEN
  214.  
  215.         LDI     TEMP,0B00000001
  216.         LDIZ    MSG_TSD_SDV1*2
  217.         LDH     DATA,TSD_ARG_ACMD41
  218.         TST     DATA
  219.         BREQ    T_SD18
  220.         LDI     DATA,58
  221.         RCALL   T_SD_CMDXX
  222.         LDI     DATA,$40|58 ;CMD58 (read_ocr)
  223.         CALL    SD_WR_CMD
  224.         MOVW    XL,YL
  225.         LDI     COUNT,6
  226. T_SD16: CALL    SD_RECEIVE
  227.         ST      X+,DATA
  228.         DEC     COUNT
  229.         BRNE    T_SD16
  230.  
  231.         LDI     TEMP,0B00000010
  232.         LDIZ    MSG_TSD_SDSC*2
  233.         LDH     DATA,0
  234.         SBRS    DATA,6
  235.         RJMP    T_SD18
  236.         LDI     TEMP,0B00000110
  237.         LDIZ    MSG_TSD_SDHC*2
  238.  
  239. T_SD18: STS     SD_CARDTYPE,TEMP
  240.         STH     TSD_CARDTYPE,TEMP
  241.         PUSHZ
  242.         RCALL   T_SD_SCR_CRLF_DC
  243.         LDIZ    MLMSG_TSD_FOUNDCARD*2
  244.         CALL    PRINTMLSTR
  245.         POPZ
  246.         CALL    PRINTSTRZ
  247.  
  248.         LDH     TEMP,TSD_CARDTYPE
  249.         SBRS    TEMP,1
  250.         RJMP    T_SD20
  251.         RCALL   T_SD_SCR_CRLF_DC
  252.         LDIZ    MSG_TSD_OCR*2
  253.         CALL    PRINTSTRZ
  254.         MOVW    XL,YL
  255.         LDI     COUNT,4
  256. T_SD19: LD      DATA,X+
  257.         CALL    HEXBYTE_FOR_DUMP
  258.         DEC     COUNT
  259.         BRNE    T_SD19
  260. ;
  261. T_SD20: LDI     TEMP,SD_CS0
  262.         SER     DATA
  263.         CALL    FPGA_REG
  264.         LDI     DATA,9
  265.         RCALL   T_SD_CMDXX
  266.         LDI     DATA,$40|9  ;CMD9 (send_csd)
  267.         CALL    SD_WR_CMD
  268.         TST     DATA
  269.         BRNE    T_SD30
  270.         CALL    SD_WAIT_NOTFF
  271.         CPI     DATA,$FF
  272.         BREQ    T_SD30
  273.         MOVW    XL,YL
  274.         LDI     COUNT,18
  275. T_SD21: CALL    SD_RECEIVE
  276.         ST      X+,DATA
  277.         DEC     COUNT
  278.         BRNE    T_SD21
  279.  
  280.         RCALL   T_SD_SCR_CRLF_DC
  281.         LDIZ    MSG_TSD_CSD*2
  282.         CALL    PRINTSTRZ
  283.         MOVW    XL,YL
  284.         LDI     COUNT,15
  285. T_SD22: LD      DATA,X+
  286.         CALL    HEXBYTE_FOR_DUMP
  287.         DEC     COUNT
  288.         BRNE    T_SD22
  289.  
  290. T_SD30: LDI     TEMP,SD_CS0
  291.         SER     DATA
  292.         CALL    FPGA_REG
  293.         LDI     DATA,10
  294.         RCALL   T_SD_CMDXX
  295.         LDI     DATA,$40|10 ;CMD10 (send_cid)
  296.         CALL    SD_WR_CMD
  297.         TST     DATA
  298.         BRNE    T_SD39
  299.         CALL    SD_WAIT_NOTFF
  300.         CPI     DATA,$FF
  301.         BRNE    T_SD31
  302. T_SD39: RJMP    T_SD90
  303. T_SD31: MOVW    XL,YL
  304.         LDI     COUNT,18
  305. T_SD32: CALL    SD_RECEIVE
  306.         ST      X+,DATA
  307.         DEC     COUNT
  308.         BRNE    T_SD32
  309.  
  310.         RCALL   T_SD_SCR_CRLF_DC
  311.         LDIZ    MSG_TSD_CID0*2
  312.         CALL    PRINTSTRZ
  313.         MOVW    XL,YL
  314.         LDI     COUNT,15
  315. T_SD33: LD      DATA,X+
  316.         CALL    HEXBYTE_FOR_DUMP
  317.         DEC     COUNT
  318.         BRNE    T_SD33
  319.  
  320.         RCALL   T_SD_SCR_CRLF_DC
  321.         LDIZ    MSG_TSD_CID1*2
  322.         CALL    PRINTSTRZ
  323.         LDH     DATA,0
  324.         CALL    HEXBYTE
  325.         RCALL   T_SD_SCR_CRLF_DC
  326.         LDIZ    MSG_TSD_CID2*2
  327.         CALL    PRINTSTRZ
  328.         LDH     BITS,TSD_CARDTYPE
  329.         LDH     DATA,1
  330.         SBRS    BITS,4
  331.         CALL    PUTCHAR_FOR_DUMP
  332.         SBRC    BITS,4
  333.         CALL    HEXBYTE
  334.         LDH     DATA,2
  335.         SBRS    BITS,4
  336.         CALL    PUTCHAR_FOR_DUMP
  337.         SBRC    BITS,4
  338.         CALL    HEXBYTE
  339.         RCALL   T_SD_SCR_CRLF_DC
  340.         LDIZ    MSG_TSD_CID3*2
  341.         CALL    PRINTSTRZ
  342.         MOVW    XL,YL
  343.         ADIW    XL,3
  344.         LDI     COUNT,5
  345.         SBRC    BITS,4
  346.         LDI     COUNT,6
  347. T_SD34: LD      DATA,X+
  348.         CALL    PUTCHAR
  349.         DEC     COUNT
  350.         BRNE    T_SD34
  351.         RCALL   T_SD_SCR_CRLF_DC
  352.         LDIZ    MSG_TSD_CID4*2
  353.         CALL    PRINTSTRZ
  354.         LDH     DATA,8
  355.         SBRC    BITS,4
  356.         LDH     DATA,9
  357.         SWAP    DATA
  358.         CALL    HEXHALF
  359.         LDI     DATA,$2E ;"."
  360.         CALL    PUTCHAR
  361.         LDH     DATA,8
  362.         SBRC    BITS,4
  363.         LDH     DATA,9
  364.         CALL    HEXHALF
  365.         RCALL   T_SD_SCR_CRLF_DC
  366.         LDIZ    MSG_TSD_CID5*2
  367.         CALL    PRINTSTRZ
  368.         MOVW    XL,YL
  369.         ADIW    XL,9
  370.         SBRC    BITS,4
  371.         ADIW    XL,1
  372.         LDI     COUNT,4
  373. T_SD35: LD      DATA,X+
  374.         CALL    HEXBYTE
  375.         DEC     COUNT
  376.         BRNE    T_SD35
  377.         RCALL   T_SD_SCR_CRLF_DC
  378.         LDIZ    MSG_TSD_CID6*2
  379.         CALL    PRINTSTRZ
  380.         LDH     DATA,14
  381.         SBRC    BITS,4
  382.         SWAP    DATA
  383.         ANDI    DATA,$0F
  384.         CALL    DECBYTE
  385.         LDIZ    MSG_TSD_CID6B*2
  386.         LDH     DATA,14
  387.         SBRC    BITS,4
  388.         RJMP    T_SD36
  389.         LDH     TEMP,13
  390.         ANDI    DATA,$F0
  391.         ANDI    TEMP,$0F
  392.         OR      DATA,TEMP
  393.         SWAP    DATA
  394.         PUSH    DATA
  395.         CALL    PRINTSTRZ
  396.         POP     DATA
  397.         CALL    DECBYTE
  398.         RJMP    T_SD38
  399. T_SD36: ANDI    DATA,$0F
  400.         SUBI    DATA,3
  401.         BRCC    T_SD37
  402.         ADDI    DATA,100
  403.         LDIZ    MSG_TSD_CID6C*2
  404. T_SD37: PUSH    DATA
  405.         CALL    PRINTSTRZ
  406.         POP     DATA
  407.         CALL    DECBYTE
  408. T_SD38:
  409. ; - - - - - - - - - - - - - - - - - - -
  410.         RCALL   T_SD_SCR_CRLF_DC
  411.         LDIZ    MLMSG_TSD_DETECT*2
  412.         CALL    PRINTMLSTR
  413.  
  414.         IN      TEMP,SPL
  415.         STS     GLB_STACK+0,TEMP
  416.         IN      TEMP,SPH
  417.         STS     GLB_STACK+1,TEMP
  418.         STS     GLB_Y+0,YL
  419.         STS     GLB_Y+1,YH
  420.         LDIZ    T_SD_ERRORHANDL
  421.         STSZ    FAT_ERRHANDLER
  422.         LDI     TEMP,SD_CS0
  423.         SER     DATA
  424.         CALL    FPGA_REG
  425.         CALL    WC_FAT
  426.  
  427.         PUSHX
  428.         PUSHW
  429.         RCALL   T_SD_SCR_CRLF_DC
  430.         LDIZ    MLMSG_TSD_FOUNDFAT*2
  431.         CALL    PRINTMLSTR
  432.         LDS     TEMP,FAT_CAL_FAT
  433.         LDI     DATA,$12
  434.         TST     TEMP
  435.         BREQ    T_SDF01
  436.         LDI     DATA,$16
  437.         DEC     TEMP
  438.         BREQ    T_SDF01
  439.         LDI     DATA,$32
  440. T_SDF01:CALL    HEXBYTE
  441.         POPW
  442.         POPX
  443. ; - - - - - - - - - - - - - - - - - - -
  444. ;поиск файла в директории
  445.         LDIW    0               ;номер описателя файла
  446.         CALL    RDDIRSC
  447.         RJMP    T_SD_FNDF_2
  448. T_SD_FNDF_1:
  449.         ADIW    WL,1            ;номерописателя++
  450.         ADIW    ZL,$20          ;следующий описатель
  451.         CPI     ZH,HIGH(BUF4FAT+512);
  452.                                 ;вылезли за сектор?
  453.         BRNE    T_SD_FNDF_2     ;нет ещё
  454.         CALL    RDDIRSC         ;считываем следующий
  455.         BRNE    T_SD_FNDF_E     ;кончились сектора в директории
  456. T_SD_FNDF_2:
  457.         LD      TEMP,Z          ;первый символ
  458.         CPI     TEMP,$E5        ;удалён?
  459.         BREQ    T_SD_FNDF_1
  460.         TST     TEMP            ;пустой описатель? (конец списка)
  461.         BREQ    T_SD_FNDF_E
  462.         LDD     DATA,Z+$0B      ;атрибуты
  463.         ANDI    DATA,0B11011000
  464.         BRNE    T_SD_FNDF_1
  465.         PUSH    ZL
  466.         MOVW    XL,ZL
  467.         LDIZ    T_SD_FILENAME*2
  468. T_SD_DALSHE:
  469.         LPM     DATA,Z+
  470.         TST     DATA
  471.         BREQ    T_SD_NASHEL
  472.         LD      TEMP,X+
  473.         CP      DATA,TEMP
  474.         BREQ    T_SD_DALSHE
  475.         MOV     ZH,XH
  476.         POP     ZL
  477.         RJMP    T_SD_FNDF_1
  478. T_SD_NASHEL:
  479.         MOV     ZH,XH
  480.         POP     ZL
  481.         LDD     WL,Z+$1C
  482.         LDD     WH,Z+$1D
  483.         LDD     XL,Z+$1E
  484.         LDD     XH,Z+$1F
  485.         MOV     DATA,WL
  486.         OR      DATA,WH
  487.         OR      DATA,XL
  488.         OR      DATA,XH
  489.         BRNE    T_SD_FNDF_9     ;пустой файл
  490. T_SD_FNDF_E:
  491.         RJMP    T_SD90
  492. T_SD_FILENAME:
  493.         .DB     "TESTFILEBIN",0
  494. T_SD_FNDF_9:
  495.         LDI     TMP2,LOW(511)
  496.         LDI     TMP3,HIGH(511)
  497.         CALL    HLDEPBC
  498.         STH     TSD_BLS0,WL
  499.         STH     TSD_BLS1,WH
  500.         CALL    BCDE200         ;кол-во секторов
  501.         SBIW    WL,1
  502.         SBC     XL,NULL
  503.         SBC     XH,NULL
  504.         LDS     DATA,FAT_BYTSSEC
  505.         DEC     DATA
  506.         AND     DATA,WL
  507.         INC     DATA
  508.         STS     FAT_MPHWOST,DATA    ;кол-во секторов в последнем кластере
  509.         LDS     DATA,FAT_BYTSSEC
  510.         CALL    BCDE_A
  511.         STSW    FAT_KOL_CLS+0
  512.         STSX    FAT_KOL_CLS+2
  513.         STS     FAT_NUMSECK,NULL
  514.         LDD     WL,Z+$1A
  515.         LDD     WH,Z+$1B
  516.         LDD     XL,Z+$14
  517.         LDD     XH,Z+$15        ;номер первого кластера файла
  518.         STSW    FAT_TFILCLS+0
  519.         STSX    FAT_TFILCLS+2
  520. ; - - - - - - - - - - - - - - - - - - -
  521.         RCALL   T_SD_SCR_CRLF_DC
  522.         LDIZ    MLMSG_TSD_READFILE*2
  523.         CALL    PRINTMLSTR
  524.  
  525.         STS     NEWFRAME,NULL
  526.         LDI     DATA,0B00000010
  527.         MOV     INT6VECT,DATA
  528.         LDI     TEMP,INT_CONTROL
  529.         CALL    FPGA_REG
  530.  
  531.         CALL    CRC32_INIT
  532. T_SD_RDFILE1:
  533.         CALL    NEXTSEC
  534.         TST     DATA
  535.         BREQ    T_SD_RDFILE2
  536.         LDIZ    BUFSECT
  537.         LDIX    512
  538.         CALL    RAM_CRC32_UPDATE
  539.         LDS     DATA,NEWFRAME
  540.         TST     DATA
  541.         BREQ    T_SD_RDFILE1
  542.         STS     NEWFRAME,NULL
  543.         LDI     XL,30
  544.         LDH     XH,TSD_Y
  545.         STH     TSD_Y,XH
  546.         CALL    SCR_SET_CURSOR
  547.         PUSH    FLAGS1
  548.         CBR     FLAGS1,0B00000011
  549.         SBR     FLAGS1,0B00000100
  550.         LDS     DATA,FAT_KOL_CLS+3
  551.         CALL    HEXBYTE
  552.         LDS     DATA,FAT_KOL_CLS+2
  553.         CALL    HEXBYTE
  554.         LDS     DATA,FAT_KOL_CLS+1
  555.         CALL    HEXBYTE
  556.         LDS     DATA,FAT_KOL_CLS+0
  557.         CALL    HEXBYTE
  558.         POP     FLAGS1
  559.         RJMP    T_SD_RDFILE1
  560.  
  561. T_SD_RDFILE2:
  562.         LDIZ    BUFSECT
  563.         LDH     XL,TSD_BLS0
  564.         LDH     XH,TSD_BLS1
  565.         ANDI    XH,$01
  566.         ADIW    XL,1
  567.         CALL    RAM_CRC32_UPDATE
  568.         CALL    CRC32_RELEASE
  569.         CLR     INT6VECT
  570.         CLR     DATA
  571.         LDI     TEMP,INT_CONTROL
  572.         CALL    FPGA_REG
  573.         LDI     XL,30
  574.         LDH     XH,TSD_Y
  575.         STH     TSD_Y,XH
  576.         CALL    SCR_SET_CURSOR
  577.         LDI     DATA,$20
  578.         LDI     COUNT,8
  579.         CALL    SCR_FILL_CHAR
  580.         RCALL   T_SD_SCR_CRLF_DC
  581.         LDIZ    MSG_TSD_CRC*2
  582.         CALL    PRINTSTRZ
  583.         LDH     DATA,3
  584.         CALL    HEXBYTE
  585.         LDH     DATA,2
  586.         CALL    HEXBYTE
  587.         LDH     DATA,1
  588.         CALL    HEXBYTE
  589.         LDH     DATA,0
  590.         CALL    HEXBYTE
  591.  
  592.         RJMP    T_SD90
  593. ; - - - - - - - - - - - - - - - - - - -
  594. T_SD_ERRORHANDL:
  595.         CLI
  596.         LDS     TEMP,GLB_STACK+0
  597.         OUT     SPL,TEMP
  598.         LDS     TEMP,GLB_STACK+1
  599.         OUT     SPH,TEMP
  600.         LDS     YL,GLB_Y+0
  601.         LDS     YH,GLB_Y+1
  602.         SEI
  603.         PUSH    DATA
  604.         RCALL   T_SD_SCR_CRLF_DC
  605.         POP     DATA
  606.         LDIZ    MLMSG_FL_SDERROR1*2
  607.         CPI     DATA,1
  608.         BREQ    T_SD_ERRHNDL1
  609.         LDIZ    MLMSG_FL_SDERROR2*2
  610.         CPI     DATA,2
  611.         BREQ    T_SD_ERRHNDL1
  612.         LDIZ    MLMSG_FL_SDERROR3*2
  613.         CPI     DATA,3
  614.         BREQ    T_SD_ERRHNDL1
  615.         LDIZ    MLMSG_FL_SDERROR4*2
  616.         CPI     DATA,4
  617.         BREQ    T_SD_ERRHNDL1
  618.         LDIZ    MLMSG_FL_SDERRORX*2
  619. T_SD_ERRHNDL1:
  620.         CALL    PRINTMLSTR
  621. ; - - - - - - - - - - - - - - - - - - -
  622. T_SD90: RCALL   T_SD_SCR_CRLF_DC
  623.         LDIZ    MLMSG_TSD_COMPLETE*2
  624.         CALL    PRINTMLSTR
  625.         CBR     FLAGS1,0B00000011
  626.         SBR     FLAGS1,0B00000100
  627. T_SD99: RCALL   T_SD_SENSORS
  628.         CALL    INKEY
  629.         BREQ    T_SD99
  630.         RJMP    T_SD00
  631. ;
  632. ;--------------------------------------
  633. ;
  634. T_SD_PUTCURSOR:
  635.         CLR     COUNT
  636. TSD_PC2:MOV     XH,COUNT
  637.         ADDI    XH,11
  638.         LDI     XL,11
  639.         CALL    SCR_SET_CURSOR
  640.         PUSH    COUNT
  641.         LDH     DATA,TSD_Y
  642.         LDI     TEMP,$9F
  643.         CP      COUNT,DATA
  644.         BRNE    TSD_PC1
  645.         LDI     TEMP,$F0
  646. TSD_PC1:LDI     COUNT,30
  647.         CALL    SCR_FILL_ATTR
  648.         POP     COUNT
  649.         INC     COUNT
  650.         CPI     COUNT,2
  651.         BRNE    TSD_PC2
  652.  
  653.         LDI     XL,13
  654.         LDI     XH,12
  655.         CALL    SCR_SET_CURSOR
  656.         LDI     DATA,$20 ;" "
  657.         SBRC    FLAGS1,3
  658.         LDI     DATA,$FB ;"√"
  659.         CALL    SCR_PUTCHAR
  660.         RET
  661. ;
  662. ;--------------------------------------
  663. ;
  664. T_SD_SETBLKLEN:
  665.         LDI     DATA,16
  666.         RCALL   T_SD_CMDXX
  667.         LDIZ    CMD16*2     ;CMD16 (set_blocklen)
  668.         CALL    SD_WR_PGM_6
  669.         TST     DATA
  670.         BRNE    T_SD_SETBLKLEN
  671.         RET
  672. ;
  673. ;--------------------------------------
  674. ;
  675. T_SD_CRC_OFF:
  676.         LDI     DATA,59
  677.         RCALL   T_SD_CMDXX
  678.         LDI     DATA,$40|59 ;CMD59 (crc_on_off)
  679.         CALL    SD_WR_CMD
  680.         TST     DATA
  681.         BRNE    T_SD_CRC_OFF
  682.         RET
  683. ;
  684. ;--------------------------------------
  685. ;
  686. T_SD_CMDXX:
  687.         SBRS    FLAGS1,3
  688.         RET
  689.         PUSH    FLAGS1
  690.         CBR     FLAGS1,0B00000101
  691.         SBR     FLAGS1,0B00000010
  692.         PUSH    DATA
  693.         LDIZ    MSG_TSD_CMD*2
  694.         CALL    PRINTSTRZ
  695.         POP     DATA
  696.         CALL    DECBYTE
  697.         POP     FLAGS1
  698.         RET
  699. ;
  700. ;--------------------------------------
  701. ;
  702. T_SD_ACMD41:
  703.         SBRS    FLAGS1,3
  704.         RET
  705.         PUSH    FLAGS1
  706.         CBR     FLAGS1,0B00000101
  707.         SBR     FLAGS1,0B00000010
  708.         LDIZ    MSG_TSD_ACMD41*2
  709.         CALL    PRINTSTRZ
  710.         POP     FLAGS1
  711.         RET
  712. ;
  713. ;--------------------------------------
  714. ;
  715. T_SD_CSUP:
  716.         SBRS    FLAGS1,3
  717.         RET
  718.         PUSH    FLAGS1
  719.         CBR     FLAGS1,0B00000101
  720.         SBR     FLAGS1,0B00000010
  721.         LDIZ    MSG_TSD_CSUP*2
  722.         CALL    PRINTSTRZ
  723.         POP     FLAGS1
  724.         RET
  725. ;
  726. ;--------------------------------------
  727. ;
  728. T_SD_CSDOWN:
  729.         SBRS    FLAGS1,3
  730.         RET
  731.         PUSH    FLAGS1
  732.         CBR     FLAGS1,0B00000101
  733.         SBR     FLAGS1,0B00000010
  734.         LDIZ    MSG_TSD_CSDOWN*2
  735.         CALL    PRINTSTRZ
  736.         POP     FLAGS1
  737.         RET
  738. ;
  739. ;--------------------------------------
  740. ;
  741. T_SD_CRLF_DC:
  742.         RCALL   UART_CRLF
  743.         SBRS    FLAGS1,3
  744.         RET
  745.         LDI     DATA,$3B ;";"
  746.         RJMP    UART_PUTCHAR
  747. ;
  748. ;--------------------------------------
  749. ;
  750. T_SD_SCR_CRLF_DC:
  751.         LDI     XL,1
  752.         LDH     XH,TSD_Y
  753.         INC     XH
  754.         STH     TSD_Y,XH
  755.         CALL    SCR_SET_CURSOR
  756.         RCALL   UART_CRLF
  757.         SBRS    FLAGS1,3
  758.         RET
  759.         LDI     DATA,$3B ;";"
  760.         RJMP    UART_PUTCHAR
  761. ;
  762. ;--------------------------------------
  763. ;
  764. T_SD_SENSORS:
  765.         LDI     XL,0
  766.         LDI     XH,1
  767.         CALL    SCR_SET_CURSOR
  768.         LDI     TEMP,$7F
  769.         CALL    SCR_SET_ATTR
  770.         LDIZ    MLMSG_SENSORS*2
  771.         CALL    PRINTMLSTR
  772.         LDI     TEMP,$7A
  773.         LDIZ    MLMSG_S_NOCARD*2
  774.         SBIC    PINB,5
  775.         RJMP    T_SDSENS1
  776.         LDI     TEMP,$7C
  777.         LDIZ    MLMSG_S_INSERTED*2
  778. T_SDSENS1:
  779.         CALL    SCR_SET_ATTR
  780.         CALL    PRINTMLSTR
  781.         LDI     TEMP,$7A
  782.         LDIZ    MLMSG_S_READONLY*2
  783.         SBIC    PINB,4
  784.         RJMP    T_SDSENS2
  785.         LDI     TEMP,$7C
  786.         LDIZ    MLMSG_S_WRITEEN*2
  787. T_SDSENS2:
  788.         CALL    SCR_SET_ATTR
  789.         CALL    PRINTMLSTR
  790.         RET
  791. ;
  792. ;--------------------------------------
  793. ;
  794.