Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1.  
  2. ;=========================================
  3. ;
  4. ; Simple program to view ZX Spectrum
  5. ; screen files.
  6. ; 6912 bytes (*.scr, *.s)
  7. ; and
  8. ; 6929 bytes (*.$c) files are supported now.
  9.  
  10. ; Ïðîñòàÿ ïðîãðàììà äëÿ ïðîñìîòðà
  11. ; ôàéëîâ ýêðàíîâ ZX Spectrum.
  12. ; Ïîääåðæèâàþòñÿ ôàéëû ðàçìåðîì
  13. ; 6912 áàéò (*.scr, *.s)
  14. ; è
  15. ; 6929 áàéò (*.$c).
  16. ;
  17. ; author: Oleksandr Bogomaz
  18. ; e-mail: albom85@yandex.ru
  19. ; site: http://albom06.boom.ru/
  20. ;
  21. ;=========================================
  22.  
  23. use32
  24. org     0
  25. db      'MENUET01'
  26. dd      1
  27. dd      _start
  28. dd      _end
  29. dd      _memory
  30. dd      _stack
  31. dd      _param
  32. dd      0
  33.  
  34. ;=========================================
  35.  
  36. _start:
  37.  
  38. call    mem_init
  39. call    file_getsize
  40. call    file_read
  41. call    file_convert
  42. call    window_draw
  43.  
  44. _event_wait:
  45.  
  46. mov     eax, 10
  47. int     0x40
  48.  
  49. cmp     eax, 1
  50. je      __repaint_wnd
  51.  
  52. cmp     eax, 2
  53. je    __key
  54.  
  55. cmp     eax, 3
  56. je    __button
  57.  
  58. jmp  _event_wait
  59.  
  60. __repaint_wnd:
  61. call    window_draw
  62. jmp     _event_wait
  63.  
  64.  
  65. __key:
  66. mov     eax, 2
  67. int     0x40
  68.  
  69. cmp     ah, 27
  70. jne     _event_wait
  71.  
  72. jmp     __end
  73.  
  74. jmp     _event_wait
  75.  
  76. __button:
  77.  
  78. mov     eax, 17
  79. int     0x40
  80.  
  81. cmp     ah, 1
  82. jne     _event_wait
  83.  
  84. __end:
  85. call    mem_free
  86.  
  87. mov     eax, -1
  88. int     0x40
  89.  
  90.  
  91.  
  92. ;=========================================
  93.  
  94. window_draw:
  95. mov     eax, 12
  96. mov     ebx, 1
  97. int     0x40
  98.  
  99. xor     eax, eax
  100. mov     ebx, 10*65536+290
  101. mov     ecx, 10*65536+230
  102. mov     edx, 0x34ffffff
  103. mov     edi, _app_title
  104. int     0x40
  105.  
  106. mov     eax, 65
  107. mov     ebx, [dst]
  108. mov     ecx, 256*65536 + 192
  109. mov     edx, 5*65536 + 5
  110. mov     edi, _palette
  111. mov     esi, 8
  112. mov     ebp, 0
  113. int    0x40
  114.  
  115. mov     eax, 12
  116. mov     ebx, 2
  117. int     0x40
  118.  
  119. ret
  120.  
  121. ;=========================================
  122.  
  123. mem_init:
  124.  
  125. mov     eax, 68
  126. mov     ebx, 11
  127. int     0x40
  128.  
  129. mov     eax, 68
  130. mov     ebx, 12
  131. mov     ecx, 6144
  132. int     0x40
  133. mov     dword [src], eax
  134.  
  135. mov     eax, 68
  136. mov     ebx, 12
  137. mov     ecx, 768
  138. int     0x40
  139. mov     dword [atr], eax
  140.  
  141. mov     eax, 68
  142. mov     ebx, 12
  143. mov     ecx, 256*192
  144. int     0x40
  145. mov     dword [dst], eax
  146.  
  147. ret
  148.  
  149. ;=========================================
  150.  
  151. mem_free:
  152.  
  153. mov     eax, 68
  154. mov     ebx, 13
  155. mov     ecx, [src]
  156. int     0x40
  157.  
  158. mov     eax, 68
  159. mov     ebx, 13
  160. mov     ecx, [atr]
  161. int     0x40
  162.  
  163. mov     eax, 68
  164. mov     ebx, 13
  165. mov     ecx, [dst]
  166. int     0x40
  167.  
  168. ret
  169.  
  170. ;=========================================
  171.  
  172. file_read:
  173.  
  174. mov     eax, 70
  175. mov     ebx, _in_f1
  176. mov     ecx, [src]
  177. mov     [_in_f1+16], ecx
  178. int     0x40
  179.  
  180. mov     eax, 70
  181. mov     ebx, _in_f2
  182. mov     ecx, [atr]
  183. mov     [_in_f2+16], ecx
  184. int     0x40
  185.  
  186. ret
  187.  
  188. ;=========================================
  189.  
  190. file_getsize:
  191.  
  192. mov     eax, 68
  193. mov     ebx, 12
  194. mov     ecx, 0x5000
  195. int     0x40
  196. mov     dword [tmp], eax
  197.  
  198. mov     eax, 70
  199. mov     ebx, _in_f0
  200. mov     ecx, [tmp]
  201. mov     [_in_f0+16], ecx
  202. int     0x40
  203.  
  204. mov     [fsize], ebx
  205.  
  206. mov     eax, 68
  207. mov     ebx, 13
  208. mov     ecx, [tmp]
  209. int     0x40
  210.  
  211. cmp     [fsize], 6929
  212. jne     _ok_size
  213.  
  214. mov     dword [_in_f1+4], 17
  215. mov     dword [_in_f2+4], 6144+17
  216.  
  217. _ok_size:
  218.  
  219. ret
  220.  
  221. ;=========================================
  222.  
  223. file_convert:
  224.  
  225. xor     eax, eax
  226. mov     [I], eax
  227. mov     [J], eax
  228. mov     [K], eax
  229. mov     [L], eax
  230. mov     [M], eax
  231. mov     [N], eax
  232.  
  233. __J:
  234. __I:
  235. __K:
  236. __L:
  237.         xor     ebx, ebx
  238.         mov     eax, [J]
  239.         shl     eax, 0x0b ; eax * 2048
  240.         add     ebx, eax
  241.         mov     eax, [K]
  242.         shl     eax, 0x08 ; eax * 256
  243.         add     ebx, eax
  244.         mov     eax, [I]
  245.         shl     eax, 0x05 ; eax * 32
  246.         add     ebx, eax
  247.         add     ebx, [L]
  248.         add     ebx, [src]
  249.  
  250.         xor     eax, eax
  251.         mov     ah, [ebx]
  252.         mov     [C], ah
  253.  
  254.         __M:
  255.                 mov     ah, [C]
  256.                 and     ah, 128
  257.                 shr     ah, 7
  258.                 mov     [S], ah
  259.  
  260.                 xor     ebx, ebx
  261.                 mov     eax, [J]
  262.                 shl     eax, 0x08 ; eax * 256
  263.                 add     ebx, eax
  264.                 mov     eax, [I]
  265.                 shl     eax, 0x05 ; eax * 32
  266.                 add     ebx, eax
  267.                 add     ebx, [L]
  268.                 add     ebx, [atr]
  269.  
  270.                 xor     eax, eax
  271.                 mov     ah, [ebx]
  272.                 mov     [A], ah
  273.  
  274.                 and     ah, 64
  275.                 cmp     ah, 64
  276.                 jne     __b0
  277.                 mov     [B], 8
  278.                 jmp     __OK_b
  279.                 __b0:
  280.                 mov     [B], 0
  281.                 __OK_b:
  282.  
  283.                 mov     ah, [S]
  284.                 cmp     ah, 0
  285.                 jne     __1
  286.  
  287.                 mov     ah, [A]
  288.                 shr     ah, 3
  289.                 and     ah, 7
  290.                 add     ah, [B]
  291.                 jmp     __OK_col
  292.  
  293.                 __1:
  294.                 mov     ah, [A]
  295.                 and     ah, 7
  296.                 add     ah, [B]
  297.  
  298.                 __OK_col:
  299.                 mov     ebx, [dst]
  300.                 add     ebx, [N]
  301.                 mov     [ebx], ah
  302.                 inc     [N]
  303.  
  304.                 shl     [C], 1
  305.  
  306.                 inc     [M]
  307.                 cmp     [M], 8
  308.                 jne     __M
  309.  
  310.                 mov     [M], 0
  311.                 inc     [L]
  312.                 cmp     [L], 32
  313.                 jne     __L
  314.  
  315.                 mov     [L], 0
  316.                 inc     [K]
  317.                 cmp     [K], 8
  318.                 jne     __K
  319.  
  320.                 mov     [K], 0
  321.                 inc     [I]
  322.                 cmp     [I], 8
  323.                 jne     __I
  324.  
  325.                 mov     [I], 0
  326.                 inc     [J]
  327.                 cmp     [J], 3
  328.                 jne     __J
  329.  
  330.  
  331. ret
  332.  
  333. ;=========================================
  334.  
  335. _app_title:
  336. db 'ScrV 0.2 by O.Bogomaz', 0
  337.  
  338. _in_f0:
  339. dd      0
  340. dq      0
  341. dd      0x5000
  342. dd      0
  343. db      0
  344. dd      _param
  345.  
  346. _in_f1:
  347. dd      0
  348. dq      0
  349. dd      6144
  350. dd      0
  351. db      0
  352. dd      _param
  353.  
  354. _in_f2:
  355. dd      0
  356. dq      6144
  357. dd      768
  358. dd      0
  359. db      0
  360. dd      _param
  361.  
  362. _palette:
  363. dd      0               ; black
  364. dd      0x000000b0      ; blue
  365. dd      0x00b00000      ; red
  366. dd      0x00b000b0      ; magenta
  367. dd      0x0000b000      ; green
  368. dd      0x0000b0b0      ; cyan
  369. dd      0x00b0b000      ; yellow
  370. dd      0x00b0b0b0      ; gray
  371. dd      0               ; black
  372. dd      0x000000ff      ; light blue
  373. dd      0x00ff0000      ; light red
  374. dd      0x00ff00ff      ; light magenta
  375. dd      0x0000ff00      ; light green
  376. dd      0x0000ffff      ; light cyan
  377. dd      0x00ffff00      ; light yellow
  378. dd      0x00ffffff      ; white
  379.  
  380. src     dd      0
  381. dst     dd      0
  382. atr     dd      0
  383. tmp     dd      0
  384.  
  385. fsize   dd      0
  386.  
  387. I       dd      0
  388. J       dd      0
  389. K       dd      0
  390. L       dd      0
  391. M       dd      0
  392. N       dd      0
  393.  
  394. C       db      0
  395. A       db      0
  396. B       db      0
  397. S       db      0
  398.  
  399. _param:
  400. rb 256
  401.  
  402. _end:
  403.  
  404. align 32
  405. rb 2048
  406. _stack:
  407. _memory:
  408.  
  409. ;=========================================