Advertisement
DimkaM

PPAP source

Jul 23rd, 2019
311
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.77 KB | None | 0 0
  1. #include <stdio.h>
  2. #include "../mylib/mylib.h"
  3. #include <intrz80.h>
  4. #include "ff.h"
  5. #include "diskio.h"
  6. #include "string.h"
  7.  
  8. ERRORSTRINGS
  9. FATFS ffs;
  10. FIL file;
  11. unsigned int len=0;
  12. unsigned char err;
  13. const unsigned char videvo[]="PineApple.bin";
  14. extern unsigned char muzik[1024];
  15.  
  16.  
  17. interrupt[0] void myint(void){
  18. }
  19. DWORD clust2sect ( /* !=0: Sector number, 0: Failed - invalid cluster# */
  20. FATFS* fs, /* File system object */
  21. DWORD clst /* Cluster# to be converted */
  22. );
  23. DWORD get_fat ( /* 0xFFFFFFFF:Disk error, 1:Internal error, 2..0x0FFFFFFF:Cluster status */
  24. FATFS* fs, /* File system object */
  25. DWORD clst /* FAT item index (cluster#) to get the value */
  26. );
  27. char shript[2048];
  28. void mcu_init(void){
  29. RST8_GET_PATH(muzik);
  30. load_I_register(0xbf);
  31. interrupt_mode_2();
  32. memcpy(shript,mylib_font8x8,2048);
  33. mylib_font8x8=shript;
  34. scr_init(0x78);
  35. *(unsigned char*)0x6000=0x78;
  36. memcpy((void*)0x6001,(void*)0x6000,6143);
  37. output(0xeff7,0x20);
  38. output8(0xbf,1);
  39. output(0xfff7,0x7f);
  40. output(0xff77,3);
  41. //output8(0xbf,1);
  42. output(0x3ff7,0);
  43. enable_interrupt();
  44. }
  45. unsigned long int *sss;
  46. unsigned long int cl=0;
  47. unsigned char clsize;
  48. extern unsigned char sdmulsec;
  49. extern void sectorsaver(unsigned long int s);
  50. extern void videopluer(void);
  51. void load_videvo_secs(void){
  52. unsigned char p = 64;
  53. unsigned long int ss;
  54. sss=(void*)(0x4000);
  55. cl=file.sclust;
  56. while(1){
  57. ss=clust2sect(&ffs,cl);
  58. if(sss>=(void*)0x4000){
  59. sss=sss-0x1000;
  60. output(0x37f7,p);
  61. p++;
  62. }
  63. sectorsaver((sdmulsec)?(ss):(ss*512));
  64. switch (ffs.fs_type) {
  65. case FS_FAT16 :
  66. if(cl>=0x0000FFF8)goto endloop;
  67. break;
  68. case FS_FAT32 :
  69. if(cl>=0x0FFFFFF8)goto endloop;
  70. break;
  71. };
  72. cl=get_fat(&ffs,cl);
  73. }
  74. endloop:
  75. if(sss>=(void*)0x4000){
  76. sss=sss-0x1000;
  77. output(0x37f7,p);
  78. p++;
  79. }
  80. *sss=0;
  81. return;
  82. }
  83. C_task void main(void){
  84. unsigned char p = 64;
  85.  
  86. mcu_init();
  87. puts("VidevoPluer v2.14.45e");
  88. puts("Full screen 25fps video");
  89. puts("Covox 12500Hz 8bit 1ch audio");
  90.  
  91. printf("\nSD card init ...");
  92. if((err=f_mount(&ffs,"0:",1))!=0) goto fferr;
  93. if((err=f_chdir(&muzik[2]))!=0) goto fferr;
  94. else puts("OK");
  95. clsize=ffs.csize;
  96.  
  97. printf("Find video \"%s\" on sd-card current directory ...", videvo);
  98. if((err=f_open (&file, videvo, FA_READ))!=0) goto fferr;
  99. else puts("OK\nAnalising...");
  100. load_videvo_secs();
  101. output8(0xfe,0);
  102. videopluer();
  103. puts(" CINEMA KONEC ");
  104. while(1);
  105.  
  106. fferr:
  107. if(err!=0){
  108. printf("error %s \n",fserr[err]);
  109. }
  110. else{
  111. puts("Video OK!");
  112. }
  113. return;
  114. }
  115.  
  116. MODULE videopluer
  117. PUBLIC videopluer,sectorsaver,readsector,muzik
  118. EXTERN sss,clsize
  119. COVOX MACRO
  120. exx
  121. outi
  122. exx
  123. ENDM
  124. MACINIR MACRO LINIR
  125. COVOX
  126. ld b,LINIR
  127. inir
  128. ENDM
  129. INIR74 MACRO
  130. MACINIR 25
  131. MACINIR 25
  132. MACINIR 24
  133. ENDM
  134.  
  135. MAC_IN MACRO I
  136. COVOX
  137. ld b,c
  138. nop
  139. REPT I
  140. ini
  141. ENDR
  142. ENDM
  143.  
  144. RSEG CODE
  145. sectorsaver:
  146. ld hl,(sss)
  147. ld (hl),b
  148. inc hl
  149. ld (hl),c
  150. inc hl
  151. ld (hl),d
  152. inc hl
  153. ld (hl),e
  154. inc hl
  155. ld (sss),hl
  156. ret
  157.  
  158. P_DATA EQU 0x0057 ;порт данных
  159. P_CONF EQU 0x8057 ;порт конфигурации
  160. CMD_12 EQU 0x4C ;STOP_TRANSMISSION
  161. CMD_17 EQU 0x51 ;READ_SINGLE_BLOCK
  162. CMD_18 EQU 0x52 ;READ_MULTIPLE_BLOCK
  163. CMD_24 EQU 0x58 ;WRITE_BLOCK
  164. CMD_25 EQU 0x59 ;WRITE_MULTIPLE_BLOCK
  165. CMD_55 EQU 0x77 ;APP_CMD
  166. CMD_58 EQU 0x7A ;READ_OCR
  167. CMD_59 EQU 0x7B ;CRC_ON_OFF
  168. ACMD_41 EQU 0x69 ;SD_SEND_OP_COND
  169. quitnah:
  170. pop af
  171. ret
  172. readsector:
  173. ld bc,P_DATA+0x7f00
  174. ex af,af
  175. dec a
  176. jr nz,multiread
  177. ld a,(clsize)
  178. COVOX
  179. ex af,af
  180. LD A,CMD_12
  181. OUT (C),A
  182. XOR A
  183. OUT (C),A
  184. OUT (C),A
  185. OUT (C),A
  186. OUT (C),A
  187. DEC A
  188. OUT (C),A ;пишем пустой CRC7 и стоповый бит
  189. stopcmdloop:
  190. in a,(c)
  191. inc a
  192. jr nz,stopcmdloop
  193. firstread:
  194. ex de,hl
  195. ld a,h
  196. cp 0x40
  197. jr nz,noincpaga
  198. ld h,0
  199. inc ixl
  200. noincpaga:
  201. ld a,ixl
  202. ld bc,0x37f7
  203. out (c),a
  204. push hl
  205. ld a,(hl)
  206. inc hl
  207. or (hl)
  208. inc hl
  209. or (hl)
  210. inc hl
  211. or (hl)
  212. pop hl
  213. jr z,quitnah
  214. ld bc,P_DATA+0x7f00
  215. LD A,CMD_18
  216. OUT (C),A
  217. outi ;пишем номер сектора от старшего
  218. outi
  219. outi
  220. outi ;до младшего байта
  221. LD A,0xFF
  222. OUT (C),A ;пишем пустой CRC7 и стоповый бит
  223. ex de,hl
  224.  
  225. ld b,0x0d
  226. stopnull2:
  227. djnz stopnull2
  228. ex af,af
  229. multiread
  230. ex af,af
  231. cmdwaitloop:
  232. COVOX
  233. ld b,0x0d
  234. ld b,0x0d
  235. nop
  236. nop
  237. cmdnulloop:
  238. in a,(c)
  239. cp 0xfe
  240. jr z,cmdendloop
  241. djnz cmdnulloop
  242. jr cmdwaitloop
  243. cmdendloop:
  244. in a,(0xfe)
  245. in a,(0xfe)
  246. djnz cmdendloop
  247. ld a,16
  248. in_loop:
  249. MAC_IN 32
  250. dec a
  251. jr nz,in_loop
  252. in a,(c)
  253. COVOX
  254. in a,(c)
  255. ld b,0x23
  256. cmdnulloop2:
  257. djnz cmdnulloop2
  258. ret
  259.  
  260. videopluer:
  261. ld hl,muzik
  262. ld de,muzik+1
  263. ld bc,511
  264. ld (hl),0x80
  265. ldir
  266. ei
  267. halt
  268. di
  269. ld hl,sndloop
  270. ld (0xbfff),hl
  271. ld hl,0x0000
  272. ld bc,P_CONF ;включаем карту
  273. LD A,1
  274. OUT (c),A
  275. ld a,1
  276. ex af,af
  277. ld ixl,64
  278. ld de,0x00
  279. exx
  280. ld bc,0x00fb
  281. jr iymusik
  282. sndloop:
  283. pop af
  284. iymusik:
  285. ld hl,muzik+0x0000
  286. exx
  287. ld a,(iymusik+2)
  288. xor 2
  289. ld (iymusik+2),a
  290. hlmusik:
  291. ld hl,muzik+0x0200
  292. ld a,(hlmusik+2)
  293. xor 2
  294. ld (hlmusik+2),a
  295. ld bc,0x7ffd
  296. vpaga:
  297. ld a,0x18
  298. out (c),a
  299. xor 0x08
  300. ld (vpaga+1),a
  301. ld bc,0x77f7
  302. vpaga1:
  303. ld a,0xfa
  304. out (c),a
  305. xor 0x02
  306. ld (vpaga1+1),a
  307. call readsector
  308. ld hl,0x4000
  309. scrloop:
  310. call readsector
  311. ld a,0x58
  312. xor h
  313. or l
  314. jp nz,scrloop
  315.  
  316. ld hl,0x6000
  317. scr2loop:
  318. call readsector
  319. ld a,0x78
  320. xor h
  321. or l
  322. jp nz,scr2loop
  323.  
  324. exx
  325. ei
  326. ld b,21
  327. nulloop2:
  328. djnz nulloop2
  329. outi
  330.  
  331. mainnull:
  332. ld b,0x28
  333. nop
  334. nop
  335. nulloop3:
  336. djnz nulloop3
  337. outi
  338. jr mainnull
  339.  
  340. RSEG ALIGN8
  341. muzik:
  342. DEFS 1024
  343.  
  344. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement