?login_element?

Subversion Repositories NedoOS

Rev

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

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