Advertisement
commandblockguy

Untitled

Oct 10th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .assume adl = 1
  2. segment data
  3. .def _usb_PrePower
  4. .def _usb_Cleanup
  5. .def _srl_InitDevice
  6. .def _srl_ConfigSerial
  7. .def _srl_GetLineCoding
  8. .def _srl_Write
  9. .def _srl_ReadBytes
  10.  
  11. include 'host.inc'
  12. include 'debug.inc'
  13.  
  14. ;group of equates from mateo's msd driver
  15. ;as we are not including ti84pce.inc:
  16. saveSScreen     := $0D0EA1F ; 21945 bytes
  17.  
  18. usbbuf          := saveSScreen
  19. usbbuf2         := saveSScreen + 2048
  20.  
  21. __frameset0     := $000130
  22. __ladd          := $00019C
  23. _PutC           := $0207B8
  24. _PutS           := $0207C0
  25. _DispHL_s       := $0207BC
  26. _DispHL         := $021EE0
  27. _NewLine        := $0207F0
  28. _usb_IsBusPowered   := $0003CC
  29. _usb_BusPowered     := $0003E4
  30. _usb_SelfPowered    := $0003E8
  31. _Delay10ms      := $0003B4
  32. _DelayTenTimesAms   := $0003B8
  33. _MemClear       := $0210DC
  34. _HomeUp         := $020828
  35. _ClrLCDFull     := $020808
  36.  
  37. flags           := $D00080
  38. mpTmrCtrl       := $0F20030
  39. bTmr3Enable     := 6
  40.  
  41. mathprintFlags      := $0044
  42. mathprintEnabled    := 5
  43.  
  44. pUsbRange       := $03000
  45. mpUsbRange      := $0E20000
  46. usbCapLen       := $0000
  47. pUsbCapLen      := pUsbRange + usbCapLen
  48. mpUsbCapLen     := mpUsbRange + usbCapLen
  49. usbHciVer       := 0002h
  50. pUsbHciVer      := pUsbRange + usbHciVer
  51. mpUsbHciVer     := mpUsbRange + usbHciVer
  52. usbHcsParams        := 0004h
  53. pUsbHcsParams       := pUsbRange + usbHcsParams
  54. mpUsbHcsParams      := mpUsbRange + usbHcsParams
  55. usbHccParams        := 0008h
  56. pUsbHccParams       := pUsbRange + usbHccParams
  57. mpUsbHccParams      := mpUsbRange + usbHccParams
  58. usbCmd          := 0010h
  59. pUsbCmd         := pUsbRange + usbCmd
  60. mpUsbCmd        := mpUsbRange + usbCmd
  61. usbSts          := 0014h
  62. pUsbSts         := pUsbRange + usbSts
  63. mpUsbSts        := mpUsbRange + usbSts
  64. usbInt          := 0018h
  65. pUsbInt         := pUsbRange + usbInt
  66. mpUsbInt        := mpUsbRange + usbInt
  67. usbFrIdx        := 001Ch
  68. pUsbFrIdx       := pUsbRange + usbFrIdx
  69. mpUsbFrIdx      := mpUsbRange + usbFrIdx
  70. usbPeriodicListBase := 0024h
  71. pUsbPeriodicListBase    := pUsbRange + usbPeriodicListBase
  72. mpUsbPeriodicListBase   := mpUsbRange + usbPeriodicListBase
  73. usbAsyncListAddr    := 0028h
  74. pUsbAsyncListAddr   := pUsbRange + usbAsyncListAddr
  75. mpUsbAsyncListAddr  := mpUsbRange + usbAsyncListAddr
  76. usbPortSC       := 0030h
  77. pUsbPortSC      := pUsbRange + usbPortSC
  78. mpUsbPortSC     := mpUsbRange + usbPortSC
  79. usbMisc         := 0040h
  80. pUsbMisc        := pUsbRange + usbMisc
  81. mpUsbMisc       := mpUsbRange + usbMisc
  82. usbOtgCsr       := 0080h
  83. pUsbOtgCsr      := pUsbRange + usbOtgCsr
  84. mpUsbOtgCsr     := mpUsbRange + usbOtgCsr
  85. usbOtgIsr       := 0084h
  86. pUsbOtgIsr      := pUsbRange + usbOtgIsr
  87. mpUsbOtgIsr     := mpUsbRange + usbOtgIsr
  88. usbOtgIer       := 0088h
  89. pUsbOtgIer      := pUsbRange + usbOtgIer
  90. mpUsbOtgIer     := mpUsbRange + usbOtgIer
  91. usbIsr          := 00C0h
  92. pUsbIsr         := pUsbRange + usbIsr
  93. mpUsbIsr        := mpUsbRange + usbIsr
  94. usbImr          := 00C4h
  95. pUsbImr         := pUsbRange + usbImr
  96. mpUsbImr        := mpUsbRange + usbImr
  97. usbDevCtrl      := 0100h
  98. pUsbDevCtrl     := pUsbRange + usbDevCtrl
  99. mpUsbDevCtrl        := mpUsbRange + usbDevCtrl
  100. usbDevAddr      := 0104h
  101. pUsbDevAddr     := pUsbRange + usbDevAddr
  102. mpUsbDevAddr        := mpUsbRange + usbDevAddr
  103. usbDevTest      := 0108h
  104. pUsbDevTest     := pUsbRange + usbDevTest
  105. mpUsbDevTest        := mpUsbRange + usbDevTest
  106. usbSofFnr       := 010Ch
  107. pUsbSofFnr      := pUsbRange + usbSofFnr
  108. mpUsbSofFnr     := mpUsbRange + usbSofFnr
  109. usbSofMtr       := 0110h
  110. pUsbSofMtr      := pUsbRange + usbSofMtr
  111. mpUsbSofMtr     := mpUsbRange + usbSofMtr
  112. usbPhyTmsr      := 0114h
  113. pUsbPhyTmsr     := pUsbRange + usbPhyTmsr
  114. mpUsbPhyTmsr        := mpUsbRange + usbPhyTmsr
  115. usbCxsr         := 011Ch
  116. pUsbCxsr        := pUsbRange + usbCxsr
  117. mpUsbCxsr       := mpUsbRange + usbCxsr
  118. usbCxFifo       := 0120h
  119. pUsbCxFifo      := pUsbRange + usbCxFifo
  120. mpUsbCxFifo     := mpUsbRange + usbCxFifo
  121. usbIdle         := 0124h
  122. pUsbIdle        := pUsbRange + usbIdle
  123. mpUsbIdle       := mpUsbRange + usbIdle
  124. usbGimr         := 0130h
  125. pUsbGimr        := pUsbRange + usbGimr
  126. mpUsbGimr       := mpUsbRange + usbGimr
  127. usbCxImr        := 0134h
  128. pUsbCxImr       := pUsbRange + usbCxImr
  129. mpUsbCxImr      := mpUsbRange + usbCxImr
  130. usbFifoRxImr        := 0138h
  131. pUsbFifoRxImr       := pUsbRange + usbFifoRxImr
  132. mpUsbFifoRxImr      := mpUsbRange + usbFifoRxImr
  133. usbFifoTxImr        := 013Ah
  134. pUsbFifoTxImr       := pUsbRange + usbFifoTxImr
  135. mpUsbFifoTxImr      := mpUsbRange + usbFifoTxImr
  136. usbDevImr       := 013Ch
  137. pUsbDevImr      := pUsbRange + usbDevImr
  138. mpUsbDevImr     := mpUsbRange + usbDevImr
  139. usbGisr         := 0140h
  140. pUsbGisr        := pUsbRange + usbGisr
  141. mpUsbGisr       := mpUsbRange + usbGisr
  142. usbCxIsr        := 0144h
  143. pUsbCxIsr       := pUsbRange + usbCxIsr
  144. mpUsbCxIsr      := mpUsbRange + usbCxIsr
  145. usbFifoRxIsr        := 0148h
  146. pUsbFifoRxIsr       := pUsbRange + usbFifoRxIsr
  147. mpUsbFifoRxIsr      := mpUsbRange + usbFifoRxIsr
  148. usbFifoTxIsr        := 014Ah
  149. pUsbFifoTxIsr       := pUsbRange + usbFifoTxIsr
  150. mpUsbFifoTxIsr      := mpUsbRange + usbFifoTxIsr
  151. usbDevIsr       := 014Ch
  152. pUsbDevIsr      := pUsbRange + usbDevIsr
  153. mpUsbDevIsr     := mpUsbRange + usbDevIsr
  154. usbRxZlp        := 0150h
  155. pUsbRxZlp       := pUsbRange + usbRxZlp
  156. mpUsbRxZlp      := mpUsbRange + usbRxZlp
  157. usbTxZlp        := 0154h
  158. pUsbTxZlp       := pUsbRange + usbTxZlp
  159. mpUsbTxZlp      := mpUsbRange + usbTxZlp
  160. usbIsoEasr      := 0158h
  161. pUsbIsoEasr     := pUsbRange + usbIsoEasr
  162. mpUsbIsoEasr        := mpUsbRange + usbIsoEasr
  163. usbIep1         := 0160h
  164. pUsbIep1        := pUsbRange + usbIep1
  165. mpUsbIep1       := mpUsbRange + usbIep1
  166. usbIep2         := 0164h
  167. pUsbIep2        := pUsbRange + usbIep2
  168. mpUsbIep2       := mpUsbRange + usbIep2
  169. usbIep3         := 0168h
  170. pUsbIep3        := pUsbRange + usbIep3
  171. mpUsbIep3       := mpUsbRange + usbIep3
  172. usbIep4         := 016Ch
  173. pUsbIep4        := pUsbRange + usbIep4
  174. mpUsbIep4       := mpUsbRange + usbIep4
  175. usbIep5         := 0170h
  176. pUsbIep5        := pUsbRange + usbIep5
  177. mpUsbIep5       := mpUsbRange + usbIep5
  178. usbIep6         := 0174h
  179. pUsbIep6        := pUsbRange + usbIep6
  180. mpUsbIep6       := mpUsbRange + usbIep6
  181. usbIep7         := 0178h
  182. pUsbIep7        := pUsbRange + usbIep7
  183. mpUsbIep7       := mpUsbRange + usbIep7
  184. usbIep8         := 017Ch
  185. pUsbIep8        := pUsbRange + usbIep8
  186. mpUsbIep8       := mpUsbRange + usbIep8
  187. usbOep1         := 0180h
  188. pUsbOep1        := pUsbRange + usbOep1
  189. mpUsbOep1       := mpUsbRange + usbOep1
  190. usbOep2         := 0184h
  191. pUsbOep2        := pUsbRange + usbOep2
  192. mpUsbOep2       := mpUsbRange + usbOep2
  193. usbOep3         := 0188h
  194. pUsbOep3        := pUsbRange + usbOep3
  195. mpUsbOep3       := mpUsbRange + usbOep3
  196. usbOep4         := 018Ch
  197. pUsbOep4        := pUsbRange + usbOep4
  198. mpUsbOep4       := mpUsbRange + usbOep4
  199. usbOep5         := 0190h
  200. pUsbOep5        := pUsbRange + usbOep5
  201. mpUsbOep5       := mpUsbRange + usbOep5
  202. usbOep6         := 0194h
  203. pUsbOep6        := pUsbRange + usbOep6
  204. mpUsbOep6       := mpUsbRange + usbOep6
  205. usbOep7         := 0198h
  206. pUsbOep7        := pUsbRange + usbOep7
  207. mpUsbOep7       := mpUsbRange + usbOep7
  208. usbOep8         := 019Ch
  209. pUsbOep8        := pUsbRange + usbOep8
  210. mpUsbOep8       := mpUsbRange + usbOep8
  211. usbEp1Map       := 01A0h
  212. pUsbEp1Map      := pUsbRange + usbEp1Map
  213. mpUsbEp1Map     := mpUsbRange + usbEp1Map
  214. usbEp2Map       := 01A1h
  215. pUsbEp2Map      := pUsbRange + usbEp2Map
  216. mpUsbEp2Map     := mpUsbRange + usbEp2Map
  217. usbEp3Map       := 01A2h
  218. pUsbEp3Map      := pUsbRange + usbEp3Map
  219. mpUsbEp3Map     := mpUsbRange + usbEp3Map
  220. usbEp4Map       := 01A3h
  221. pUsbEp4Map      := pUsbRange + usbEp4Map
  222. mpUsbEp4Map     := mpUsbRange + usbEp4Map
  223. usbEp5Map       := 01A4h
  224. pUsbEp5Map      := pUsbRange + usbEp5Map
  225. mpUsbEp5Map     := mpUsbRange + usbEp5Map
  226. usbEp6Map       := 01A5h
  227. pUsbEp6Map      := pUsbRange + usbEp6Map
  228. mpUsbEp6Map     := mpUsbRange + usbEp6Map
  229. usbEp7Map       := 01A6h
  230. pUsbEp7Map      := pUsbRange + usbEp7Map
  231. mpUsbEp7Map     := mpUsbRange + usbEp7Map
  232. usbEp8Map       := 01A7h
  233. pUsbEp8Map      := pUsbRange + usbEp8Map
  234. mpUsbEp8Map     := mpUsbRange + usbEp8Map
  235. usbFifo0Map     := 01A8h
  236. pUsbFifo0Map        := pUsbRange + usbFifo0Map
  237. mpUsbFifo0Map       := mpUsbRange + usbFifo0Map
  238. usbFifo1Map     := 01A9h
  239. pUsbFifo1Map        := pUsbRange + usbFifo1Map
  240. mpUsbFifo1Map       := mpUsbRange + usbFifo1Map
  241. usbFifo2Map     := 01AAh
  242. pUsbFifo2Map        := pUsbRange + usbFifo2Map
  243. mpUsbFifo2Map       := mpUsbRange + usbFifo2Map
  244. usbFifo3Map     := 01ABh
  245. pUsbFifo3Map        := pUsbRange + usbFifo3Map
  246. mpUsbFifo3Map       := mpUsbRange + usbFifo3Map
  247. usbFifo0Cfg     := 01ACh
  248. pUsbFifo0Cfg        := pUsbRange + usbFifo0Cfg
  249. mpUsbFifo0Cfg       := mpUsbRange + usbFifo0Cfg
  250. usbFifo1Cfg     := 01ADh
  251. pUsbFifo1Cfg        := pUsbRange + usbFifo1Cfg
  252. mpUsbFifo1Cfg       := mpUsbRange + usbFifo1Cfg
  253. usbFifo2Cfg     := 01AEh
  254. pUsbFifo2Cfg        := pUsbRange + usbFifo2Cfg
  255. mpUsbFifo2Cfg       := mpUsbRange + usbFifo2Cfg
  256. usbFifo3Cfg     := 01AFh
  257. pUsbFifo3Cfg        := pUsbRange + usbFifo3Cfg
  258. mpUsbFifo3Cfg       := mpUsbRange + usbFifo3Cfg
  259. usbFifo0Csr     := 01B0h
  260. pUsbFifo0Csr        := pUsbRange + usbFifo0Csr
  261. mpUsbFifo0Csr       := mpUsbRange + usbFifo0Csr
  262. usbFifo1Csr     := 01B4h
  263. pUsbFifo1Csr        := pUsbRange + usbFifo1Csr
  264. mpUsbFifo1Csr       := mpUsbRange + usbFifo1Csr
  265. usbFifo2Csr     := 01B8h
  266. pUsbFifo2Csr        := pUsbRange + usbFifo2Csr
  267. mpUsbFifo2Csr       := mpUsbRange + usbFifo2Csr
  268. usbFifo3Csr     := 01BCh
  269. pUsbFifo3Csr        := pUsbRange + usbFifo3Csr
  270. mpUsbFifo3Csr       := mpUsbRange + usbFifo3Csr
  271. usbDmaFifo      := 01C0h
  272. pUsbDmaFifo     := pUsbRange + usbDmaFifo
  273. mpUsbDmaFifo        := mpUsbRange + usbDmaFifo
  274. usbDmaCtrl      := 01C8h
  275. pUsbDmaCtrl     := pUsbRange + usbDmaCtrl
  276. mpUsbDmaCtrl        := mpUsbRange + usbDmaCtrl
  277. usbDmaLen       := 01C9h
  278. pUsbDmaLen      := pUsbRange + usbDmaLen
  279. mpUsbDmaLen     := mpUsbRange + usbDmaLen
  280. usbDmaAddr      := 01CCh
  281. pUsbDmaAddr     := pUsbRange + usbDmaAddr
  282. mpUsbDmaAddr        := mpUsbRange + usbDmaAddr
  283.  
  284. reqTypeSetLnCoding  := $20
  285. reqTypeGetLnCoding  := $21
  286.  
  287. _usb_PrePower:
  288.     call    usbBusPower
  289.     pop de
  290.     pop hl ; time in ms
  291.     push    hl
  292.     push    de
  293.     call pause
  294.     ret
  295.  
  296. _usb_Cleanup:
  297.     push    ix
  298.     push    iy
  299.     call    usbCleanup
  300.     pop iy
  301.     pop ix
  302.     ret
  303.  
  304. ; Input:
  305. ;  hl = ms
  306. ; Output:
  307. ;  bc = ?
  308. ;  af = ?
  309. ;  de = ?
  310. ; credit: PT_
  311. pause:
  312.     ld  c, 110
  313. _PauseInnerLoop1:
  314.     ld  b, 32
  315. _PauseInnerLoop2:
  316.     djnz    _PauseInnerLoop2
  317.     dec c
  318.     jr  nz, _PauseInnerLoop1
  319.     or  a, a
  320.     ld  de, -1
  321.     add hl, de
  322.     jr  c, pause
  323.     ret
  324.  
  325. ; will have to change this once hubs are supported
  326. _srl_InitDevice:
  327.     push    ix
  328.     push    iy
  329.     call    usbInit             ; init usb
  330.     call    devFirst
  331.     ld  (device),iy         ; use first device
  332.     ld  hl,usbbuf           ; get dev desc
  333.     ld  de,reqDevDesc18
  334.     call    setup
  335.     ld      hl,usbbuf+18            ; get langids
  336.     ld      de,reqGetStrDesc
  337.     call    setup
  338.     ld      hl,usbbuf+18+2
  339.     ld      de,reqGetStrDesc+4
  340.     ldi
  341.     ldi
  342.     ld  iy,(device)         ; get configuration descriptor
  343.     xor     a,a
  344.     call    getConfigDescTotalLength    ; total length of config
  345.     ld      (reqConfDesc+wLength),hl
  346.     ld      hl,usbbuf
  347.     ld      de,reqConfDesc
  348.     call    setup
  349.     ;TODO: check endpoints/if this is actually a serial device
  350.     ld  iy,(device)         ; select config
  351.     ld      ix,usbbuf
  352.     call    devSelectConfig
  353.     pop iy
  354.     pop ix
  355.     ret
  356. _srl_ConfigSerial:
  357.     pop de
  358.     pop hl
  359.     push    hl
  360.     push    de
  361.     push    ix
  362.     ld  iy,(device)
  363.     ld  de,reqLineCoding
  364.     call    controlDefaultTransfer
  365.     pop ix
  366.     ret
  367.  
  368. _srl_GetLineCoding:
  369.     pop de
  370.     pop hl
  371.     push    hl
  372.     push    de
  373.     push    ix
  374.     ld  (hl),0
  375.     ld  iy,(device)
  376.     ld  de,reqGetLineCoding
  377.     call    debugHexBlockHL
  378.     db lineCodingLen
  379.     call    debugNewLine
  380.     push    hl
  381.     call    controlDefaultTransfer
  382.     pop hl
  383.     call    debugHexBlockHL
  384.     db lineCodingLen
  385.     call    debugNewLine
  386.     pop ix
  387.     ret
  388.  
  389. _srl_Write:
  390.     pop de
  391.     pop hl ; buffer
  392.     pop bc ; length
  393.     push    bc
  394.     push    hl
  395.     push    de
  396.     push    ix
  397.     call    debugHexBlockHL
  398.     db 7
  399.     call    debugNewLine
  400.     ld  iy,(device)
  401.     ld  a,$04 ; todo - make more general
  402.     call    bulkTransfer
  403.     pop ix
  404.     ret
  405. _srl_ReadBytes:
  406.     pop de
  407.     pop hl ; buffer
  408.     pop bc ; length
  409.     push    bc
  410.     push    hl
  411.     push    de
  412.     push    ix
  413.     ld  iy,(device)
  414.     ld  a,$83 ; todo - make more general
  415.     push    hl
  416.     call    bulkTransfer
  417.     pop hl
  418.     call    debugHexBlockHL
  419.     db 1
  420.     call    debugNewLine
  421.     pop ix
  422.     ret
  423.    
  424.  
  425. ; Input:
  426. ;  de = req
  427. ;  hl = buf
  428. setup:
  429.     ld  iy,0
  430.     device := $ - 3
  431.     call    controlDefaultTransfer
  432.     jp      qhWait
  433.  
  434.  
  435. reqDevDesc18:
  436.     db  $80,reqTypeGetDesc,0,descTypeDev,0,0,18,0
  437. reqConfDesc:
  438.     db  $80,reqTypeGetDesc,1,descTypeConf,0,0,0,0,0
  439. reqGetStrDesc:
  440.     db  $80,reqTypeGetDesc,0,descTypeStr,0,0,0,1,0
  441. lineCodingLen   := 7
  442. reqLineCoding:
  443.     db  $21,reqTypeSetLnCoding,0,0,0,0,lineCodingLen,0
  444. reqGetLineCoding:
  445.     db  $A1,reqTypeGetLnCoding,0,0,0,0,lineCodingLen,0
  446. lineCoding:
  447.     db  $80,$25,0,0,0,0,8
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement