]> git.sur5r.net Git - cc65/blob - libsrc/telemon30/ch376.s
Correcting some bugs
[cc65] / libsrc / telemon30 / ch376.s
1
2         ; For XA65 compatibily in the futur
3         .FEATURE        c_comments,labels_without_colons,pc_assignment, loose_char_term
4         .export         _ch376_set_file_name
5         .export         _ch376_file_open
6         .export         _ch376_ic_get_version
7         .export         _ch376_reset
8         .export         _ch376_check_exist
9         .export         _ch376_disk_mount
10         .export         _ch376_set_usb_mode
11         .export         _ch376_file_create
12         .export         _ch376_fcreate
13         
14         ; High level function
15         .export         _ch376_fcreate
16         
17         .import         popax
18         .importzp       sp,tmp2,tmp3,tmp1
19         .include    "telemon30.inc"
20 /*
21
22 */
23 ; CODE FOR CH376_SET_USB_MODE *************************************************
24
25 CH376_SET_USB_MODE_CODE_USB_HOST_SOF_PACKAGE_AUTOMATICALLY := $06
26
27 CH376_USB_INT_DISK_READ := $1d
28 CH376_USB_INT_SUCCESS   := $14
29 CH376_ERR_MISS_FILE     := $42
30         
31
32
33 CH376_GET_IC_VER                := $01
34 CH376_SET_BAUDRATE              := $02
35 CH376_GET_ENTER_SLEEP   := $03
36 CH376_RESET_ALL                 := $05
37 CH376_CHECK_EXIST               := $06
38 CH376_GET_FILE_SIZE             := $0C
39 CH376_SET_USB_MODE              := $15
40 CH376_GET_STATUS                := $22
41 CH376_RD_USB_DATA0              := $27
42 CH376_SET_FILE_NAME             := $2f
43 CH376_DISK_CONNECT              := $30 ; check the disk connection status
44 CH376_DISK_MOUNT                := $31
45 CH376_FILE_OPEN                 := $32
46 CH376_FILE_ENUM_GO              := $33
47 CH376_FILE_CREATE               := $34
48 CH376_FILE_CLOSE                := $36
49 CH376_BYTE_READ                 := $3A
50 CH376_BYTE_RD_GO                := $3b
51 CH376_BYTE_WRITE                := $3C
52 CH376_DISK_CAPACITY     := $3E
53 CH376_DISK_RD_GO                := $55
54
55 .proc _ch376_file_create
56         lda #CH376_FILE_CREATE
57         sta CH376_COMMAND
58         jsr _ch376_wait_response
59         rts
60 .endproc
61
62 ; void _ch376_fcreate(char *filename)
63 .proc _ch376_fcreate
64         jsr _ch376_set_file_name
65         jsr _ch376_file_open
66         jsr _ch376_file_create
67 .endproc
68
69 ; void ch376_set_file_name(char *filename)
70 .proc _ch376_set_file_name
71         sta tmp1
72         stx tmp1+1
73         lda #CH376_SET_FILE_NAME ;$2f
74         sta CH376_COMMAND
75         ldy #0
76 loop:
77         lda (tmp1),y ; replace by bufnom
78         beq end ; we reached 0 value
79         sta CH376_DATA
80         iny
81         cpy #13 ; because we don't manage longfilename shortname =11
82         bne loop
83 end:    
84         sta CH376_DATA
85         rts
86 .endproc 
87         
88 ; void _ch376_file_open();
89         
90 .proc _ch376_file_open
91         lda #CH376_FILE_OPEN ; $32
92         sta CH376_COMMAND
93         jsr _ch376_wait_response
94         rts
95 .endproc 
96
97         ;CMD_GET_FILE_SIZE
98         
99 .proc _ch376_get_file_size
100         lda #CH376_GET_FILE_SIZE
101         sta CH376_COMMAND
102         lda #$68
103         sta CH376_DATA
104         ; store file leng
105         lda CH376_DATA
106         sta tmp1
107         lda CH376_DATA
108         sta tmp1+1
109         lda CH376_DATA
110         sta tmp2
111         lda CH376_DATA
112         sta tmp2+1
113         rts
114 .endproc 
115
116 ; void ch376_reset();
117         
118 .proc _ch376_reset
119         lda #CH376_RESET_ALL ; 5 
120         sta CH376_COMMAND
121         ; waiting
122         ldy #0
123         ldx #0
124 loop:
125         nop
126         inx
127         bne loop
128         iny
129         bne loop
130         rts
131 .endproc 
132
133 ; char  ch376_check_exist(char value);
134         
135 .proc _ch376_check_exist
136         sta tmp1
137         lda #CH376_CHECK_EXIST ; 
138         sta CH376_COMMAND
139         lda tmp1
140         sta CH376_DATA
141         lda CH376_DATA
142         rts
143 .endproc 
144         
145 ; char  ch376_ic_get_version(void)
146 .proc _ch376_ic_get_version
147         lda #CH376_GET_IC_VER
148         sta CH376_COMMAND
149         ldx #0
150         lda CH376_DATA
151         rts
152 .endproc 
153
154 ; void ch376_set_usb_mode(char mode)
155         
156 .proc _ch376_set_usb_mode
157 ; CH376_SET_USB_MODE_CODE_USB_HOST_SOF_PACKAGE_AUTOMATICALLY
158         pha
159         lda #CH376_SET_USB_MODE ; $15
160         sta CH376_COMMAND
161         pla
162         sta CH376_DATA
163         rts
164 .endproc 
165         
166         
167 ;       void ch376_set_bytes_write(int value);
168 .proc _ch376_set_bytes_write
169         sta tmp1
170         stx tmp1+1
171         ldx #CH376_BYTE_WRITE
172         stx CH376_COMMAND
173         lda tmp1
174         sta CH376_DATA
175         lda tmp1+1
176         sta CH376_DATA
177         jsr _ch376_wait_response
178         rts
179 .endproc        
180         
181 .proc _ch376_set_bytes_read
182         ldx #CH376_BYTE_READ
183         stx CH376_COMMAND
184         sta CH376_DATA
185         sty CH376_DATA
186         jsr _ch376_wait_response
187         rts
188 .endproc                
189
190 ; char  ch376_disk_mount();
191 .proc _ch376_disk_mount
192         lda #CH376_DISK_MOUNT ; $31
193         sta CH376_COMMAND
194         jsr _ch376_wait_response
195         ; if we read data value, we have then length of the volume name
196         ldx #0
197         rts     
198 .endproc 
199
200
201 ; char  ch376_wait_response();
202 .proc _ch376_wait_response
203 ; 1 return 1 if usb controller does not respond
204 ; else A contains answer of the controller
205         ldy #$ff
206 loop3:
207         ldx #$ff ; merci de laisser une valeur importante car parfois en mode non debug, le controleur ne rĂ©pond pas tout de suite
208 loop:
209         lda CH376_COMMAND
210         and #%10000000
211         cmp #128
212         bne no_error
213         dex
214         bne loop
215         dey
216         bne loop3
217         ; error is here
218         rts
219 no_error:
220         lda #CH376_GET_STATUS
221         sta CH376_COMMAND
222         lda CH376_DATA
223         rts
224 .endproc 
225