Subversion Repositories NedoOS

Rev

Rev 839 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download

  1. #include <evo.h>
  2. #include "resources.h"
  3. #include "startup.h"
  4.  
  5. static u16 gl_addr;
  6. static u8 gl_page;
  7. /*
  8. void pset(u8 x,u8 y, u8 color) __naked
  9. {
  10.                 __asm
  11.                 push    ix
  12.                 ld      ix,#0
  13.                 add     ix,sp
  14.                
  15.                 ld a,(_SCREENACTIVE)//ищем нужную страницу
  16.                 bit 1,a
  17.                 jr z,secpageps
  18. frstpageps:
  19.                 ld a,#0x1
  20.                 jp dopageps
  21. secpageps:
  22.                 ld a,#0x3
  23. dopageps:
  24.                 //read  x
  25.                 ld c,#0x0
  26.                 ld b, 4 (ix)
  27.                 srl b
  28.                 push bc
  29.                 jr c,nechet
  30.                 jp done
  31. nechet:
  32.                 ld d,#0x4
  33.                 add a,d
  34.                 jp done
  35. done:          
  36.                 ld (_gl_page),a
  37.                 //page
  38.                 xor #0x7f
  39.                 ld bc,#0xbff7
  40.                 ld (_MEMSLOT2),a
  41.                 out (c),a
  42. //установили нужную страницу
  43. //найдем нужный адрес
  44.                 pop bc
  45.                 srl b
  46.                 jr nc,nechet2
  47.                 ld hl,#0x2000
  48.                 jp done2
  49. nechet2:       
  50.                 ld hl,#0x0
  51. done2:
  52.                 ld c,b
  53.                 ld b,#0x0
  54.                 add hl,bc
  55.                 push hl
  56.                
  57. //смещение по y
  58. //---------------------------          
  59.                 ld c,#0x0
  60.                 ld b, 5 (ix)
  61.                 dec b
  62.                 ld hl,#0x28
  63.                 ld de,#0x28
  64.                 jr z,zerps
  65. mulps:
  66.                 add hl,de
  67.                 djnz mulps
  68. zerps: 
  69.                 pop bc
  70.                 add hl,bc
  71.                 ld bc,#0x8000
  72.                 add hl,bc
  73. //получим цвет
  74.                 ld c,#0x0
  75.                 ld b, 6 (ix)
  76.                 ld(hl),b
  77.                
  78.                
  79.                 ld bc,#0xbff7
  80.                 ld a,#0x71
  81.                 out (c),a
  82.                 pop ix
  83.                 ret
  84.                 __endasm;
  85. }
  86.  
  87. */
  88. void do_scrolldown_sector(u8 shift,u8 start, u8 finish) __naked
  89. {
  90.                         __asm
  91.                 push    ix
  92.                 ld      ix,#0
  93.                 add     ix,sp
  94.                
  95.                 ld a,(_SCREENACTIVE)//ищем нужную страницу
  96.                 bit 1,a
  97.                 jr z,secpageds
  98. frstpageds:
  99.                 ld a,#0x1
  100.                 jp dopageds
  101. secpageds:
  102.                 ld a,#0x3
  103. dopageds:
  104.                 ld (_gl_page),a
  105. begds:         
  106.                
  107.                 //page
  108.                 ld a,(_gl_page)
  109.                 xor #0x7f
  110.                 ld bc,#0xbff7
  111.                 ld (_MEMSLOT2),a
  112.                 out (c),a
  113. beg2ds:        
  114. //---------------------------          
  115.                
  116. //read  addr
  117.                 ld c,#0x0
  118.                 ld b, 4 (ix)
  119.                 dec b
  120.                 ld hl,#0x28
  121.                 ld de,#0x28
  122.                 jr z,zerds
  123. mulds:
  124.                 add hl,de
  125.                 djnz mulds
  126. zerds:         
  127.                 ld de,(_gl_addr)
  128.                 ld b,h
  129.                 ld c,l
  130.                 //push bc//тут разница в строках
  131.                 add hl,de
  132.                 ld de,#0x1f40
  133.                 add hl,de
  134.                 push hl
  135. //-----------------------------        
  136. // write addr
  137.                 ld hl,(_gl_addr)
  138.                 ld de,#0x1f40
  139.                 add hl,de
  140.                 pop de
  141. //---------------------------
  142. //чтение и запись
  143.  
  144.         //---------------------------
  145.                 ld a,6 (ix)
  146.                 ld c,5 (ix)
  147.                 ld b,#0x0
  148.                
  149.                 add hl,bc//сдвиг от начала экрана адреса откуда
  150.                 ex de,hl
  151.                 add hl,bc// сдвиг от начала экрана адреса куда
  152.                 ex de,hl
  153.                
  154.                 sub c //теперь в А лежит ширина отрезка
  155.                
  156.                 push af//тут лежит ширина отрезка
  157.                 push bc//тут лежит сдвиг от начала экрана
  158.                
  159.                 ld b,#0xc9
  160.                
  161.  
  162. movds:
  163.                 push bc
  164.                 push hl
  165.                 push de
  166.                 ld b,#0x0
  167.                 ld c,a
  168.                 ldir//перетаскиваем байты
  169.                 pop hl//теперь сдвинем адреса на 40 байт - новую строку
  170.                 ld bc,#0x28
  171.                 sbc hl, bc
  172.                 ld d,h
  173.                 ld e,l
  174.                 pop hl
  175.                 sbc hl, bc
  176.                 pop bc
  177.                 djnz movds
  178.                
  179.         //перенесём то что сдвинулось в конец, в начало
  180.         //адр куда =_gl_addr
  181.         //адр откуда=_gl_addr+#0x8000
  182.         //скока = bc
  183.  
  184.                
  185.                 pop bc//отступ от нчала экрана
  186.                 ld hl,(_gl_addr)
  187.                 ld de,#0x1f40
  188.                 add hl,de
  189.                 add hl,bc
  190.                 ex de,hl
  191.                 ld hl,(_gl_addr)
  192.                 add hl,bc
  193.                 ex de,hl
  194.                 pop bc//ширина отрезка
  195.                 ld a,b
  196.                
  197.                 ld c,#0x0
  198.                 ld b, 4 (ix)
  199.                
  200. adcpyds:               
  201.                 push bc
  202.                 ld b,#0x0
  203.                 ld c,a
  204.                 push hl
  205.                 push de
  206.                 ldir
  207.                 pop de
  208.                 pop hl
  209.                 ld bc,#0x28
  210.                 add hl, bc
  211.                 ex de,hl
  212.                 add hl, bc
  213.                 ex de,hl
  214.                 pop bc
  215.                 djnz adcpyds
  216.                
  217. //----------------------------
  218.                                
  219.                 ld hl,(_gl_addr)//проверим адрес
  220.                 ld bc,#0x8000
  221.                 sbc hl,bc
  222.                
  223.                 jr z,addrifds
  224.                 jp nxtds
  225. addrifds:
  226.                 ld hl,#0xa000
  227.                 ld(_gl_addr),hl
  228.                 jp beg2ds
  229. nxtds:
  230.                 ld hl,#0x8000
  231.                 ld(_gl_addr),hl
  232.                
  233.                 ld a,(_gl_page)
  234.                 ld b,#0x1
  235.                 sub b
  236.                 jr z, frst_chngds
  237.                 jp next_page_ifds
  238. frst_chngds:
  239.                 ld a,#0x5
  240.                 ld (_gl_page),a
  241.                 jp begds
  242. next_page_ifds:
  243.                 ld a,(_gl_page)
  244.                 ld b,#0x3
  245.                 sub b
  246.                 jr z, sec_chngds
  247.                 jp endds
  248. sec_chngds:
  249.                 ld a,#0x7
  250.                 ld (_gl_page),a
  251.                 jp begds
  252.  
  253. endds:  ld bc,#0xbff7
  254.                 ld a,#0x71
  255.                 out (c),a
  256.                 pop ix
  257.                 ret
  258.         __endasm;
  259. }
  260. void do_scrolldown_looped(u8 shift) __naked
  261. {
  262.                 __asm
  263.                 push    ix
  264.                 ld      ix,#0
  265.                 add     ix,sp
  266.                 ld bc,#0x7ffd
  267.                 ld a,(_SCREENACTIVE)//ищем нужную страницу
  268.                 bit 1,a
  269.                 jr z,secpagedl
  270. frstpagedl:
  271.                 ld a,#0x1
  272.                 jp dopagedl
  273. secpagedl:
  274.                 ld a,#0x3
  275. dopagedl:
  276.                 ld (_gl_page),a
  277. begdl:         
  278.                
  279.                 //page
  280.                 ld a,(_gl_page)
  281.                 xor #0x7f
  282.                 ld bc,#0xbff7
  283.                 ld (_MEMSLOT2),a
  284.                 out (c),a
  285. beg2dl:        
  286. //---------------------------          
  287. //read  addr
  288.                 ld c,#0x0
  289.                 ld b, 4 (ix)
  290.                 dec b
  291.                 ld hl,#0x28
  292.                 ld de,#0x28
  293.                 jr z,zerdl
  294. muldl:
  295.                 add hl,de
  296.                 djnz muldl
  297. zerdl:         
  298.                 ld de,(_gl_addr)
  299.                 ld b,h
  300.                 ld c,l
  301.                 push bc
  302.                 add hl,de
  303.                 ld de,#0x1f40
  304.                 add hl,de
  305.                 push hl
  306. //-----------------------------        
  307. // write addr
  308.                 ld hl,(_gl_addr)
  309.                 add hl,de
  310.                 push hl
  311. //---------------------------
  312. //чтение и запись
  313.                 //pop bc
  314.                 ld hl,#0x1f40
  315.                 //sbc hl,bc
  316.                 ld b,h
  317.                 ld c,l
  318.                 inc bc
  319.                 pop hl
  320.                 pop de
  321.                
  322.                 push hl
  323.                 lddr
  324.                 pop hl
  325.                 pop bc
  326.                 ld de,(_gl_addr)
  327.                
  328.                 ldir
  329. //----------------------------
  330.                                
  331.                 ld hl,(_gl_addr)//проверим адрес
  332.                 ld bc,#0x8000
  333.                 sbc hl,bc
  334.                
  335.                 jr z,addrifdl
  336.                 jp nxtdl
  337. addrifdl:
  338.                 ld hl,#0xa000
  339.                 ld(_gl_addr),hl
  340.                 jp beg2dl
  341. nxtdl:
  342.                 ld hl,#0x8000
  343.                 ld(_gl_addr),hl
  344.                
  345.                 ld a,(_gl_page)
  346.                 ld b,#0x1
  347.                 sub b
  348.                 jr z, frst_chngdl
  349.                 jp next_page_ifdl
  350. frst_chngdl:
  351.                 ld a,#0x5
  352.                 ld (_gl_page),a
  353.                 jp begdl
  354. next_page_ifdl:
  355.                 ld a,(_gl_page)
  356.                 ld b,#0x3
  357.                 sub b
  358.                 jr z, sec_chngdl
  359.                 jp enddl
  360. sec_chngdl:
  361.                 ld a,#0x7
  362.                 ld (_gl_page),a
  363.                 jp begdl
  364.  
  365. enddl:  ld bc,#0xbff7
  366.                 ld a,#0x71
  367.                 out (c),a
  368.                 pop ix
  369.                 ret
  370.         __endasm;
  371. }
  372. void do_scrolldown(u8 shift) __naked
  373. {
  374.                 __asm
  375.                 push    ix
  376.                 ld      ix,#0
  377.                 add     ix,sp
  378.  
  379.                 ld a,(_SCREENACTIVE)//ищем нужную страницу
  380.                 bit 1,a
  381.                 jr z,secpaged
  382. frstpaged:
  383.                 ld a,#0x1
  384.                 jp dopaged
  385. secpaged:
  386.                 ld a,#0x3
  387. dopaged:
  388.                 ld (_gl_page),a
  389. begd:          
  390.                
  391.                 //page
  392.                 ld a,(_gl_page)
  393.                 xor #0x7f
  394.                 ld bc,#0xbff7//устанавливаем нужную страницу
  395.                 ld (_MEMSLOT2),a
  396.                 out (c),a
  397. beg2d:         
  398. //---------------------------          
  399. //read  addr
  400.                 ld c,#0x0
  401.                 ld b, 4 (ix)//на сколько рядов нужно сдвинуть
  402.                 dec b
  403.                 ld hl,#0x28
  404.                 ld de,#0x28
  405.                 jr z,zerd
  406. muld:
  407.                 add hl,de
  408.                 djnz muld
  409. zerd:          
  410.                 ld de,(_gl_addr)//8000
  411.                 ld b,h
  412.                 ld c,
  413.                
  414.                 add hl,de
  415.                 ld de,#0x1f40
  416.                 add hl,de
  417.                 push hl
  418. //-----------------------------        
  419. // write addr
  420.                 ld hl,(_gl_addr)
  421.                 add hl,de
  422.                 //ld de,#0x28
  423.                 //add hl,de
  424.                 push hl
  425. //---------------------------
  426. //чтение и запись
  427.                 //pop bc
  428.                 ld hl,#0x1f40
  429.                 sbc hl,bc
  430.                 ld b,h
  431.                 ld c,l
  432.        
  433.                 pop hl
  434.                 pop de
  435.                 lddr
  436.                
  437. //----------------------------
  438.                                
  439.                 ld hl,(_gl_addr)//проверим адрес
  440.                 ld bc,#0x8000
  441.                 sbc hl,bc
  442.                
  443.                 jr z,addrifd
  444.                 jp nxtd
  445. addrifd:
  446.                 ld hl,#0xa000
  447.                 ld(_gl_addr),hl
  448.                 jp beg2d
  449. nxtd:
  450.                 ld hl,#0x8000
  451.                 ld(_gl_addr),hl
  452.                
  453.                 ld a,(_gl_page)
  454.                 ld b,#0x1
  455.                 sub b
  456.                 jr z, frst_chngd
  457.                 jp next_page_ifd
  458. frst_chngd:
  459.                 ld a,#0x5
  460.                 ld (_gl_page),a
  461.                 jp begd
  462. next_page_ifd:
  463.                 ld a,(_gl_page)
  464.                 ld b,#0x3
  465.                 sub b
  466.                 jr z, sec_chngd
  467.                 jp endd
  468. sec_chngd:
  469.                 ld a,#0x7
  470.                 ld (_gl_page),a
  471.                 jp begd
  472.  
  473. endd:   ld bc,#0xbff7
  474.                 ld a,#0x71
  475.                 out (c),a
  476.                 pop ix
  477.                 ret
  478.         __endasm;
  479. }
  480.  
  481. void do_scrollup_sector(u8 shift,u8 start, u8 finish) __naked
  482. {
  483.                 __asm
  484.                 push    ix
  485.                 ld      ix,#0
  486.                 add     ix,sp
  487.        
  488.                 ld a,(_SCREENACTIVE)//ищем нужную страницу
  489.                 bit 1,a
  490.                 jr z,secpages
  491. frstpages:
  492.                 ld a,#0x1
  493.                 jp dopages
  494. secpages:
  495.                 ld a,#0x3
  496. dopages:
  497.                 ld (_gl_page),a
  498. begs:          
  499.                
  500.                 //page
  501.                 ld a,(_gl_page)
  502.                 xor #0x7f
  503.                 ld bc,#0xbff7
  504.                 ld (_MEMSLOT2),a
  505.                 out (c),a
  506. beg2s:         
  507. //---------------------------          
  508.                
  509.         //перенесём начало за концом
  510.         //адр откуда =_gl_addr
  511.         //адр куда=_gl_addr+#0x8000
  512.         //скока = bc
  513.                 ld bc,#0xA0
  514.                 ld hl,(_gl_addr)
  515.                 ld de,#0x1f40
  516.                 add hl,de
  517.                 ld d,h
  518.                 ld e,l
  519.                 ld hl,(_gl_addr)
  520.                 ldir
  521.  
  522. //read  addr
  523.                 ld c,#0x0
  524.                 ld b, 4 (ix)
  525.                 dec b
  526.                 ld hl,#0x28
  527.                 ld de,#0x28
  528.                 jr z,zers
  529. muls:
  530.                 add hl,de
  531.                 djnz muls
  532. zers:          
  533.                 ld de,(_gl_addr)
  534.                 ld b,h
  535.                 ld c,l
  536.                
  537.                 add hl,de
  538.                
  539. //-----------------------------        
  540. // write addr
  541.                 ld de,(_gl_addr)
  542.  
  543. //---------------------------
  544. //чтение и запись
  545.  
  546.         //---------------------------
  547.                 ld a,6 (ix)
  548.                 ld c,5 (ix)
  549.                 ld b,#0x0
  550.                 add hl,bc//сдвиг от начала экрана адреса откуда
  551.                 ex de,hl
  552.                 add hl,bc// сдвиг от начала экрана адреса куда
  553.                 ex de,hl
  554.                 sub c //теперь в А лежит ширина отрезка
  555.                 ld b,#0xc9
  556.                
  557.                
  558.                
  559. movs:
  560.                 push bc
  561.                 push hl
  562.                 push de
  563.                 ld b,#0x0
  564.                 ld c,a
  565.                 ldir//перетаскиваем байты
  566.                 pop hl//теперь сдвинем адреса на 40 байт - новую строку
  567.                 ld bc,#0x28
  568.                 add hl, bc
  569.                 ld d,h
  570.                 ld e,l
  571.                 pop hl
  572.                 add hl, bc
  573.                 pop bc
  574.                 djnz movs
  575. //----------------------------
  576.                                
  577.                 ld hl,(_gl_addr)//проверим адрес
  578.                 ld bc,#0x8000
  579.                 sbc hl,bc
  580.                
  581.                 jr z,addrifs
  582.                 jp nxts
  583. addrifs:
  584.                 ld hl,#0xa000
  585.                 ld(_gl_addr),hl
  586.                 jp beg2s
  587. nxts:
  588.                 ld hl,#0x8000
  589.                 ld(_gl_addr),hl
  590.                
  591.                 ld a,(_gl_page)
  592.                 ld b,#0x1
  593.                 sub b
  594.                 jr z, frst_chngs
  595.                 jp next_page_ifs
  596. frst_chngs:
  597.                 ld a,#0x5
  598.                 ld (_gl_page),a
  599.                 jp begs
  600. next_page_ifs:
  601.                 ld a,(_gl_page)
  602.                 ld b,#0x3
  603.                 sub b
  604.                 jr z, sec_chngs
  605.                 jp ends
  606. sec_chngs:
  607.                 ld a,#0x7
  608.                 ld (_gl_page),a
  609.                 jp begs
  610.  
  611. ends:   ld bc,#0xbff7
  612.                 ld a,#0x71
  613.                 out (c),a
  614.                 pop ix
  615.                 ret
  616.         __endasm;
  617. }
  618.  
  619. void do_scrollup_looped(u8 shift) __naked
  620. {
  621.         __asm
  622.                 push    ix
  623.                 ld      ix,#0
  624.                 add     ix,sp
  625.                 ld bc,#0x7ffd
  626.                 ld a,(_SCREENACTIVE)//ищем нужную страницу
  627.                 bit 1,a
  628.                 jr z,secpagel
  629. frstpagel:
  630.                 ld a,#0x1
  631.                 jp dopagel
  632. secpagel:
  633.                 ld a,#0x3
  634. dopagel:
  635.                 ld (_gl_page),a
  636. begl:          
  637.                
  638.                 //page
  639.                 ld a,(_gl_page)
  640.                 xor #0x7f
  641.                 ld bc,#0xbff7
  642.                 ld (_MEMSLOT2),a
  643.                 out (c),a
  644. beg2l:         
  645. //---------------------------          
  646. //read  addr
  647.                 ld c,#0x0
  648.                 ld b, 4 (ix)
  649.                 dec b
  650.                 ld hl,#0x28
  651.                 ld de,#0x28
  652.                 jr z,zerl
  653. mull:
  654.                 add hl,de
  655.                 djnz mull
  656. zerl:          
  657.                 ld de,(_gl_addr)
  658.                 ld b,h
  659.                 ld c,l
  660.                
  661.                 add hl,de
  662.                 push hl
  663. //---------------------------
  664. //перенесём начало за концом
  665. //адр откуда =_gl_addr
  666. //адр куда=_gl_addr+#0x8000
  667. //скока = bc
  668.  
  669.                 ld hl,(_gl_addr)
  670.                 ld de,#0x1f40
  671.                 add hl,de
  672.                 ld d,h
  673.                 ld e,l
  674.                 ld hl,(_gl_addr)
  675.                 ldir
  676. //-----------------------------        
  677. //-----------------------------        
  678. // write addr
  679.                 ld de,(_gl_addr)
  680.  
  681. //---------------------------
  682. //чтение и запись
  683.                 //pop bc
  684.                 ld hl,#0x1f40
  685.                 sbc hl,bc
  686.                 ld b,h
  687.                 ld c,l
  688.                 //ld bc,#0x1f40//блок на 8000 байт
  689.                 pop hl
  690.                 ldir
  691. //----------------------------
  692.                                
  693.                 ld hl,(_gl_addr)//проверим адрес
  694.                 ld bc,#0x8000
  695.                 sbc hl,bc
  696.                
  697.                 jr z,addrifl
  698.                 jp nxtl
  699. addrifl:
  700.                 ld hl,#0xa000
  701.                 ld(_gl_addr),hl
  702.                 jp beg2l
  703. nxtl:
  704.                 ld hl,#0x8000
  705.                 ld(_gl_addr),hl
  706.                
  707.                 ld a,(_gl_page)
  708.                 ld b,#0x1
  709.                 sub b
  710.                 jr z, frst_chngl
  711.                 jp next_page_ifl
  712. frst_chngl:
  713.                 ld a,#0x5
  714.                 ld (_gl_page),a
  715.                 jp begl
  716. next_page_ifl:
  717.                 ld a,(_gl_page)
  718.                 ld b,#0x3
  719.                 sub b
  720.                 jr z, sec_chngl
  721.                 jp endl
  722. sec_chngl:
  723.                 ld a,#0x7
  724.                 ld (_gl_page),a
  725.                 jp begl
  726.  
  727.                 //call _CONVERT_SCREEN
  728. endl:   ld bc,#0xbff7
  729.                 ld a,#0x71
  730.                 out (c),a
  731.                 pop ix
  732.                 ret
  733.         __endasm;
  734. }
  735.  
  736. void do_scrollup(u8 shift) __naked
  737. {
  738.                 __asm
  739.                 push    ix
  740.                 ld      ix,#0
  741.                 add     ix,sp
  742.                 ld bc,#0x7ffd
  743.                 ld a,(_SCREENACTIVE)//ищем нужную страницу
  744.                 bit 1,a
  745.                 jr z,secpage
  746. frstpage:
  747.                 ld a,#0x1
  748.                 jp dopage
  749. secpage:
  750.                 ld a,#0x3
  751. dopage:
  752.                 ld (_gl_page),a
  753. beg:           
  754.                
  755.                 //page
  756.                 ld a,(_gl_page)
  757.                 xor #0x7f
  758.                 ld bc,#0xbff7
  759.                 ld (_MEMSLOT2),a
  760.                 out (c),a
  761. beg2:          
  762. //---------------------------          
  763. //read  addr
  764.                 ld c,#0x0
  765.                 ld b, 4 (ix)
  766.                 dec b
  767.                 ld hl,#0x28
  768.                 ld de,#0x28
  769.                 jr z,zer
  770. mul:
  771.                 add hl,de
  772.                 djnz mul
  773. zer:           
  774.                 ld de,(_gl_addr)
  775.                 ld b,h
  776.                 ld c,l
  777.                
  778.                 add hl,de
  779.                 push hl
  780. //-----------------------------        
  781. // write addr
  782.                 ld de,(_gl_addr)
  783.  
  784. //---------------------------
  785. //чтение и запись
  786.                 //pop bc
  787.                 ld hl,#0x1f40
  788.                 sbc hl,bc
  789.                 ld b,h
  790.                 ld c,l
  791.                 //ld bc,#0x1f40//блок на 8000 байт
  792.                 pop hl
  793.                 ldir
  794. //----------------------------
  795.                                
  796.                 ld hl,(_gl_addr)//проверим адрес
  797.                 ld bc,#0x8000
  798.                 sbc hl,bc
  799.                
  800.                 jr z,addrif
  801.                 jp nxt
  802. addrif:
  803.                 ld hl,#0xa000
  804.                 ld(_gl_addr),hl
  805.                 jp beg2
  806. nxt:
  807.                 ld hl,#0x8000
  808.                 ld(_gl_addr),hl
  809.                
  810.                 ld a,(_gl_page)
  811.                 ld b,#0x1
  812.                 sub b
  813.                 jr z, frst_chng
  814.                 jp next_page_if
  815. frst_chng:
  816.                 ld a,#0x5
  817.                 ld (_gl_page),a
  818.                 jp beg
  819. next_page_if:
  820.                 ld a,(_gl_page)
  821.                 ld b,#0x3
  822.                 sub b
  823.                 jr z, sec_chng
  824.                 jp end
  825. sec_chng:
  826.                 ld a,#0x7
  827.                 ld (_gl_page),a
  828.                 jp beg
  829.  
  830. end:    ld bc,#0xbff7
  831.                 ld a,#0x71
  832.                 out (c),a
  833.                 pop ix
  834.                 ret
  835.         __endasm;
  836. }
  837.  
  838. void setTileUpdateMap(u8 x,u8 y) __naked
  839. {
  840.         __asm
  841.                 push    ix
  842.                 ld      ix,#0
  843.                 add     ix,sp
  844.                 ld a,#0x1
  845.                
  846.                 ld c,4 (ix)
  847.                 ld b,5 (ix)
  848.                 call (#0xe644)
  849.                 inc b
  850.                 call (#0xe644)
  851.                 inc b
  852.                 call (#0xe644)
  853.                 inc c
  854.                 call (#0xe644)
  855.                 inc c
  856.                 call (#0xe644)
  857.                 dec b
  858.                 call (#0xe644)
  859.                 dec b
  860.                 call (#0xe644)
  861.                 dec c
  862.                 call (#0xe644)
  863.                 inc b
  864.                 call (#0xe644)
  865.                 pop ix
  866.                 ret
  867.         __endasm;
  868. }
  869. void main(void)
  870. {
  871.         u8 a,col,c,x,y,step,bb,xx,yy,x2,y2;
  872.         i8 dx,dy,dx2,dy2;
  873.         u16 addr,addr2,b;
  874.  
  875.         gl_addr=32768;
  876.        
  877.  
  878.        
  879.         select_image(IMG_BG);
  880.         draw_tile(1,1,0);
  881.         sprites_start();
  882.         pal_select(PAL_BG);
  883.         draw_image(0,0,IMG_BG);
  884.        
  885.         do_scrolldown_sector(2,10,15);
  886.         do_scrolldown_sector(2,17,18);
  887.         do_scrolldown_sector(2,26,30);
  888.        
  889.         swap_screen();
  890.         draw_image(0,0,IMG_BG);
  891.  
  892.        
  893.        
  894.  
  895.         step=0;
  896.         x2=128;
  897.         y2=24;
  898.         x=64;
  899.         y=80;
  900.         dx=2;
  901.         dy=4;
  902.         dx2=-2;
  903.         dy2=-4;
  904.        
  905.  
  906.        
  907.         while(1)
  908.         {      
  909.                
  910.                
  911.                
  912.                 x+=dx;
  913.                 y+=dy;
  914.                 x2+=dx2;
  915.                 y2+=dy2;
  916.                 if(x>=140)dx=-dx;
  917.                 if(x<2)dx=-dx;
  918.                 if(y>182)dy=-dy;
  919.                 if(y<2)dy=-dy;
  920.                
  921.                 if(x2>=140)dx2=-dx2;
  922.                 if(x2<2)dx2=-dx2;
  923.                 if(y2>182)dy2=-dy2;
  924.                 if(y2<2)dy2=-dy2;
  925.                 set_sprite(0,x,y,0);
  926.                 set_sprite(1,x2,y2,0);
  927.  
  928.                 if(step==0)//нужно для того, чтобы спрайты не портили скролирующийся фон под собой
  929.                 {
  930.                         xx=x>>2;
  931.                         yy=y>>3;
  932.                         setTileUpdateMap(xx,yy);
  933.                         xx=x2>>2;
  934.                         yy=y2>>3;
  935.                         setTileUpdateMap(xx,yy);
  936.  
  937.                 }
  938.                 step++;
  939.                 if(step==2)step=0;
  940.  
  941.                 //do_scrolldown_sector(4,10,15);
  942.                 //do_scrolldown_sector(4,17,18);
  943.                 //do_scrolldown_sector(4,26,30);
  944.                 do_scrolldown_looped(4);
  945.                        
  946.                
  947.                 swap_screen();
  948.         }
  949. }
  950.