?login_element?

Subversion Repositories NedoOS

Rev

Rev 1539 | Blame | Compare with Previous | Last modification | View Log | Download

  1.         DEVICE ZXSPECTRUM128
  2.         include "../../_sdk/sys_h.asm"
  3.  
  4. BINADDR=0x4000
  5.  
  6. scrbase=0x4000
  7. sprmaxwid=32
  8. sprmaxhgt=32
  9. scrwid=160 ;double pixels
  10. scrhgt=200
  11. clswid=40 ;*8
  12. clshgt=200
  13.  
  14. STACK=0x3f80
  15. tempsp=0x3f86 ;6 bytes for prspr
  16. INTSTACK=0x4000
  17.  
  18.  
  19. SND_PAGE=0;(0^INVMASK)
  20. SPTBL_PAGE=1;(6^INVMASK)
  21. PAL_PAGE=0;2;(4^INVMASK)
  22.  
  23. SPBUF_PAGE0=3;(8^INVMASK)
  24. SPBUF_PAGE1=4;(9^INVMASK)
  25. SPBUF_PAGE2=5;(10^INVMASK)
  26. SPBUF_PAGE3=6;(11^INVMASK)
  27.  
  28. CC_PAGE1=7;(13^INVMASK)
  29. CC_PAGE2=8;(14^INVMASK)
  30. CC_PAGE3=9;(12^INVMASK)
  31.  
  32. GFX_PAGE=10;(16^INVMASK) ;и далее
  33.  
  34. ;IMG_LIST =0xd000;#1000
  35.  
  36. ;смещения в SND_PAGE
  37.  
  38. AFX_INIT =#4000
  39. AFX_PLAY =#4003
  40. AFX_FRAME=#4006
  41. PT3_INIT =#4009
  42. PT3_FRAME=#400c
  43. PT3_MUTE =#400f ;NEW for TFM
  44. TURBOFMON=#4012 ;NEW for TFM
  45.  
  46. MUS_COUNT=#49fe
  47. SMP_COUNT=#49ff
  48. SFX_COUNT=#5000
  49.  
  50. MUS_LIST =#4a00
  51. SMP_LIST =#4d00
  52. SFX_DATA =#5100
  53.  
  54. ;------------------------ addition
  55. uvscroll_scrbase=0x4000
  56. uvscroll_pushbase=0x8000
  57. uvscroll_callbase=0xc000
  58. UVSCROLL_USETILES=0
  59. UVSCROLL_USEBMP=1
  60. SCRHGT=scrhgt
  61.  
  62. UVSCROLL_WID=1024
  63. UVSCROLL_HGT=512
  64. TILEMAPWID=42 ;целые метатайлы
  65. TILEMAPHGT=24 ;целые метатайлы
  66. UVSCROLL_SCRWID=320 ;8*(TILEMAPWID-2)
  67. UVSCROLL_SCRHGT=200;192-16 ;(делится на 16!!!) ;8*(TILEMAPHGT-2) ;чтобы выводить всегда 12 метатайлов (3 блока по 8) по высоте
  68. UVSCROLL_NPUSHES=UVSCROLL_WID/2/4/2
  69. UVSCROLL_SCRNPUSHES=UVSCROLL_SCRWID/2/4/2
  70.  
  71. UVSCROLL_SCRSTART=uvscroll_scrbase+((UVSCROLL_SCRHGT-1)*40)
  72. UVSCROLL_LINESTEP=-40
  73.  
  74. UVSCROLL_NCALLPGS=4
  75.  
  76. UVSCROLL_TEMPSP=tempsp
  77.  
  78. METATILEMAPWID=256;64
  79. METATILEMAPHGT=64
  80. TILEGFX=0xc000
  81.  
  82. DELETEDYHIGH=0x7f
  83.  
  84. pushbase=0x8000;c000
  85.         macro SETPGPUSHBASE
  86.          ;ld (curpgc000),a
  87.          ;SETPG32KHIGH
  88.         ;ld (curpg8000),a
  89.         SETPG32KLOW
  90.         endm
  91.  
  92.         macro RECODEBYTE
  93.         ld a,(de)
  94.         ld ($+4),a
  95.         ld a,(trecodebyteright)
  96.         ld c,a
  97.         dec de
  98.         ld a,(de)
  99.         dec de
  100.         ld ($+4),a
  101.         ld a,(trecodebyteleft)
  102.         or c
  103.         endm        
  104. ;---------------------------------
  105.  
  106.         macro MDebug color
  107.         push af
  108.         ld a,color
  109.         out (#fe),a
  110.         pop af
  111.         endm
  112.  
  113.         macro MSetShadowScreen
  114.         call setpgsscr40008000
  115.         endm
  116.  
  117.         macro MRestoreMemMap012
  118. ;TODO переделать на (pgmain4000) и т.п. (сейчас с пересчётом по таблице)
  119.         ld a,CC_PAGE3
  120.         call setpgc000;SETPG32KHIGH
  121.         ld a,CC_PAGE1
  122.         call setpg4000;SETPG16K
  123.         ld a,CC_PAGE2
  124.         call setpg8000;SETPG32KLOW
  125.         endm
  126.  
  127.         macro MRestoreMemMap12
  128.         ld a,CC_PAGE1
  129.         call setpg4000;SETPG16K
  130.         ld a,CC_PAGE2
  131.         call setpg8000;SETPG32KLOW
  132.         endm
  133.  
  134.         org PROGSTART
  135. begin
  136.         ld sp,STACK
  137.  
  138. ;        ld b,25
  139. ;waitcls0
  140. ;        push bc
  141. ;        YIELD
  142. ;        pop bc
  143. ;        djnz waitcls0 ;чтобы nv не перехватил фокус при вызове через комстроку
  144.  
  145.         ld e,0;+128 ;+128=keep
  146.         OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode)
  147.         ld e,0
  148.         OS_SETSCREEN
  149.         ld e,0 ;color byte
  150.         OS_CLS
  151.         ld e,1
  152.         OS_SETSCREEN
  153.         ld e,0 ;color byte
  154.         OS_CLS
  155.        
  156.         OS_GETMAINPAGES
  157. ;dehl=номера страниц в 0000,4000,8000,c000
  158.         ld a,e
  159.         LD (pgmain4000),A
  160.         ld (tpages+CC_PAGE1),a
  161.         ld a,h
  162.         LD (pgmain8000),A
  163.         ld (tpages+CC_PAGE2),a
  164.         ld a,l
  165.         ld (tpages+CC_PAGE3),a
  166.  
  167. ;d=pgmain0000
  168.         call dropotherapps ;OS_HIDEFROMPARENT
  169.  
  170.         call setpgsmain40008000 ;записать в curpg...
  171.  
  172.         ld de,res_path
  173.         OS_CHDIR
  174.  
  175.         ld de,fnaddr
  176.         OS_OPENHANDLE
  177.         push bc
  178.         ld de,jpaddr ;addr
  179.         ld hl,2 ;size
  180.         OS_READHANDLE
  181.         pop bc
  182.         OS_CLOSEHANDLE
  183.  
  184.         ld hl,sndfilename
  185.         call loadpage ;CY=error
  186.         ld (tpages+0),a
  187.         ld hl,sprtblfilename
  188.         call loadpage ;CY=error
  189.         ld (tpages+1),a
  190.         ld de,palfilename
  191.         ld hl,palettes
  192.         ld bc,12*16
  193.         call loadbinpg_sizebc
  194.         ;call loadpage ;CY=error
  195.         ;ld (tpages+2),a
  196.  
  197.         call uvscroll_prepare
  198.  
  199.         ld de,tpages+GFX_PAGE
  200.  
  201.         ;ld b,NUMBER_OF_PAGES
  202. loadloop0
  203.         ;push bc
  204.         push de
  205.         ld hl,texfilename
  206.         call loadpage ;CY=error
  207.         pop de
  208.        jr c,loadloop0q
  209.         ld (de),a
  210.         inc e
  211.         ld hl,texfilename_pgnumend
  212. loadloop_nextdigit0
  213.         dec hl
  214.         ld a,(hl)
  215.         inc a
  216.         cp "0"+10
  217.         ld (hl),"0"
  218.         jr z,loadloop_nextdigit0
  219.         ld (hl),a
  220.         jr loadloop0
  221.         ;pop bc
  222.         ;djnz loadloop0
  223. loadloop0q
  224.        
  225.        if 0 ;для touhou не нужен буфер фона
  226.         ld hl,tpages+SPBUF_PAGE0
  227.         ld b,4
  228. mkpages0
  229.         push bc
  230.         push hl
  231.         OS_NEWPAGE
  232.         pop hl
  233.         ld (hl),e
  234.         inc l
  235.         pop bc
  236.         djnz mkpages0
  237.        endif
  238.  
  239.         call initsfx
  240.  
  241.         call swapimer
  242.  
  243.         call setpgsmain40008000
  244.         call RestoreMemMap3
  245.         ld de,fnbin
  246.         ld hl,0x4000
  247.         call loadbinpg
  248.         ld de,fnbin2
  249.         ld hl,0x8000
  250.         call loadbinpg
  251.         ld de,fnbin3
  252.         ld hl,0xc000
  253.         call loadbinpg
  254.        
  255.         ld de,CURPAL
  256.         OS_SETPAL
  257.  
  258.         call _swap_screen
  259. jpaddr=$+1
  260.         call 0
  261.  
  262. quit ;TODO
  263.         call swapimer
  264.         call _music_stop
  265.         halt
  266.         QUIT
  267.  
  268.         ds 0x0200-$
  269. tpages
  270.         ds 256 ;pages
  271.  
  272. dropotherapps
  273. ;d=pgmain0000
  274. ;от последних id (детей) к первым (родителям), т.к. при dropapp будится родитель
  275.         ld e,0xfe ;no id 0xff
  276. dropotherapps0
  277.         push de
  278.         OS_GETAPPMAINPAGES ;d,e,h,l=pages in 0000,4000,8000,c000, c=flags ;a!=0: no app
  279.         or a
  280.         ld a,d
  281.         pop de
  282.         jr nz,dropotherapps_skip ;no app
  283.        cp d
  284.        jr z,dropotherapps_skip ;my app
  285.         push de
  286.         ;e=id
  287.         OS_DROPAPP
  288.         pop de
  289. dropotherapps_skip
  290.         dec e
  291.         ld a,e
  292.         dec a ;no id 0 ;id 1 = idle
  293.         jr nz,dropotherapps0
  294.         ret
  295.  
  296. loadbinpg
  297.         ld bc,0x4000
  298. loadbinpg_sizebc
  299. ;de=filename
  300. ;hl=addr
  301. ;bc=size
  302.         push hl
  303.        push bc
  304.         OS_OPENHANDLE
  305.        pop hl ;size
  306.         pop de ;addr
  307.         push bc
  308.         ;ld hl,-BINADDR ;size
  309.         OS_READHANDLE
  310.         pop bc
  311.         OS_CLOSEHANDLE                
  312.         ret
  313.  
  314. loadpage
  315. ;заказывает страничку и грузит туда файл (имя файла в hl)
  316. ;out: hl=после имени файла, a=pg
  317. ;or else CY
  318.         push hl
  319.         ex de,hl
  320.         OS_OPENHANDLE
  321.         pop hl
  322.         or a
  323.         scf
  324.         ret nz
  325.         push hl
  326.        push bc
  327.         OS_NEWPAGE
  328.         or a
  329.         jr nz,$
  330.        pop bc
  331.         pop hl
  332.         ld a,e
  333.         push af ;pg
  334.        push bc
  335.         SETPGC000
  336.        pop bc
  337.         push hl
  338.         ex de,hl
  339.         ;OS_OPENHANDLE
  340.         push bc
  341.         ld de,0xc000 ;addr
  342.         ld hl,0x4000 ;size
  343.         OS_READHANDLE
  344.         pop bc
  345.         OS_CLOSEHANDLE                
  346.         pop hl
  347.         ld b,1
  348.         xor a
  349.         cpir ;after 0
  350.         pop af ;pg
  351.         or a ;CY=0
  352.         ret
  353.  
  354. CURPAL
  355. pal
  356. ;DDp palette: %grbG11RB(low),%grbG11RB(high), инверсные
  357.         STANDARDPAL
  358.  
  359. sndfilename
  360.         db "page_0.bin",0
  361. sprtblfilename
  362.         db "page_1.bin",0
  363. palfilename
  364.         db "page_2.bin",0
  365.  
  366. texfilename
  367. texfilename_pgnumend=$+7;8
  368.         db "page_10.bin",0
  369.  
  370.  
  371.  
  372.  
  373. setpgsmain40008000
  374. pgmain4000=$+1
  375.         ld a,0
  376.         SETPG4000
  377. pgmain8000=$+1
  378.         ld a,0
  379.         SETPG8000
  380.         ret
  381.  
  382. setpgsscr40008000_current
  383.         call getuser_scr_low_cur
  384.         SETPG4000
  385.         call getuser_scr_high_cur
  386.         SETPG8000
  387.         ret
  388.  
  389. setpgsscr40008000
  390.         call getuser_scr_low
  391.         SETPG4000
  392.         call getuser_scr_high
  393.         SETPG8000
  394.         ret
  395.  
  396. setpgscrlow4000
  397.         call getuser_scr_low
  398.         SETPG4000
  399.         ret
  400.  
  401. setpgscrhigh4000
  402.         call getuser_scr_high
  403.         SETPG4000
  404.         ret
  405.  
  406. getuser_scr_low
  407. getuser_scr_low_patch=$+1
  408. getuser_scr_low_patchN=0xff&(user_scr0_low^user_scr1_low)
  409.         ld a,(user_scr1_low) ;ok
  410.         ret
  411.  
  412. getuser_scr_high
  413. getuser_scr_high_patch=$+1
  414. getuser_scr_high_patchN=0xff&(user_scr0_high^user_scr1_high)
  415.         ld a,(user_scr1_high) ;ok
  416.         ret
  417.  
  418. getuser_scr_low_cur
  419. getuser_scr_low_cur_patch=$+1
  420. getuser_scr_low_cur_patchN=0xff&(user_scr0_low^user_scr1_low)
  421.         ld a,(user_scr0_low) ;ok
  422.         ret
  423.  
  424. getuser_scr_high_cur
  425. getuser_scr_high_cur_patch=$+1
  426. getuser_scr_high_cur_patchN=0xff&(user_scr0_high^user_scr1_high)
  427.         ld a,(user_scr0_high) ;ok
  428.         ret
  429.  
  430. changescrpg_current
  431.         ld hl,getuser_scr_low_patch
  432.         ld a,(hl)
  433.         xor getuser_scr_low_patchN
  434.         ld (hl),a
  435.         ld hl,getuser_scr_high_patch
  436.         ld a,(hl)
  437.         xor getuser_scr_high_patchN
  438.         ld (hl),a
  439.         ld hl,getuser_scr_low_cur_patch
  440.         ld a,(hl)
  441.         xor getuser_scr_low_cur_patchN
  442.         ld (hl),a
  443.         ld hl,getuser_scr_high_cur_patch
  444.         ld a,(hl)
  445.         xor getuser_scr_high_cur_patchN
  446.         ld (hl),a
  447.  
  448.         ld a,1
  449. curscrnum=$+1
  450.         xor 0
  451.         ld ($-1),a
  452.         ret
  453.        
  454. changescrpg
  455. ;TODO убрать
  456.         call changescrpg_current
  457.         ld e,a
  458.         OS_SETSCREEN
  459.         ret
  460.  
  461. setpg4000
  462.         ld b,tpages/256
  463.         ld c,a
  464.         ld a,(bc)
  465.         SETPG16K
  466.         ret
  467.  
  468. setpg8000
  469.         ld b,tpages/256
  470.         ld c,a
  471.         ld a,(bc)
  472.         SETPG32KLOW
  473.         ret
  474.  
  475. setpgc000
  476.         ld b,tpages/256
  477.         ld c,a
  478.         ld a,(bc)
  479.         SETPG32KHIGH
  480.         ret
  481.  
  482. setShadowScreen
  483.         MSetShadowScreen
  484.         ret
  485.  
  486. _clear_screen
  487.         and 15
  488.         ld l,a
  489.         ld h,high colorMaskTable
  490.         ld e,(hl)
  491.         call setShadowScreen
  492.         ld hl,#4000
  493.         ld (hl),e
  494.         ld de,#4001
  495.         ld bc,#7fff
  496.         call _fast_ldir
  497. RestoreMemMap12
  498.         MRestoreMemMap12
  499.         ret
  500.  
  501. _swap_screen
  502.         push ix
  503.         ;push iy
  504.  
  505.         ld a,(spritesActive)
  506.         or a
  507.         push af
  508.         jr z,.noSpr0
  509.         call setShadowScreen
  510.        ;TODO draw changed tiles to another screen (or copy them screen to screen)
  511.        call getuser_scr_low_cur
  512.        SETPGC000
  513.        ld hl,0x4000
  514.        ld de,0xc000
  515.        ld bc,0x4000
  516.        ldir
  517.        call getuser_scr_high_cur
  518.        SETPGC000
  519.        ld hl,0x8000
  520.        ld de,0xc000
  521.        ld bc,0x4000
  522.        ldir
  523.         ;call updateTilesToBuffer
  524.         ;call prspr
  525. .noSpr0
  526.  
  527.         halt
  528.  
  529.         ld a,(_screenActive)
  530.         xor 2
  531.         ld (_screenActive),a ;for select sprqueue
  532.         call changescrpg
  533.  
  534.         pop af
  535.         jr z,.noSpr1
  536.  
  537.         ;call setShadowScreen
  538.         ;call respr ;remove only for touhou
  539.         ;call updateTilesFromBuffer
  540.         call RestoreMemMap3;0
  541.         call RestoreMemMap12
  542. .noSpr1
  543.         ;pop iy
  544.         pop ix
  545.         ret
  546.  
  547. _swap_screen_scroll
  548.         push ix
  549.         ;push iy
  550.  
  551.         ld a,(spritesActive)
  552.         or a
  553.         push af
  554.         jr z,.noSpr0
  555.         call setShadowScreen
  556.         ;call updateTilesToBuffer
  557.         call prspr
  558. .noSpr0
  559.  
  560.         halt
  561.  
  562.         ld a,(_screenActive)
  563.         xor 2
  564.         ld (_screenActive),a ;for select sprqueue
  565.         ;ld e,a
  566.  
  567.         ;ld a,#10
  568.         ;bit 1,e
  569.         ;jr z,$+4
  570.         ;or #08
  571.         ;ld bc,#7ffd
  572.         ;out (c),a
  573.          call changescrpg
  574.          ;rra
  575.          ;and 1 ;+cpl?
  576.          ;ld e,a
  577.          ;OS_SETSCREEN
  578.  
  579.         pop af
  580.         jr z,.noSpr1
  581.  
  582.         call setShadowScreen
  583.         ;call respr
  584.         ;call updateTilesFromBuffer
  585.         ;MRestoreMemMap012
  586.         call RestoreMemMap3;0
  587.         call RestoreMemMap12
  588. .noSpr1
  589.         ;pop iy
  590.         pop ix
  591.         ret
  592.  
  593. pal_get_address
  594.         ld h,0
  595.         ld l,a
  596.         add hl,hl
  597.         add hl,hl
  598.         add hl,hl
  599.         add hl,hl
  600.          ;set 7,h
  601.          ;set 6,h
  602.        ld de,palettes
  603.        add hl,de
  604.  
  605.         ;ld a,PAL_PAGE
  606.         ;jp setpgc000;SETPG32KHIGH
  607.         ret
  608.  
  609. palettes
  610.         ds 12*16
  611. IMG_LIST ;was in PAL_PAGE +0x1000 ;1 image: font
  612.         db 0
  613.         db 0
  614.         db 0x10
  615.         db 0x10
  616.  
  617. _pal_select
  618.         call pal_get_address
  619.  
  620.         ld de,_palette
  621.         ld bc,16
  622.         ldir
  623.  
  624.         ld a,d
  625.         ld (_palChange),a
  626. RestoreMemMap3;0
  627.         ld a,CC_PAGE3;0
  628.         jp setpgc000;SETPG32KHIGH
  629.  
  630.  
  631.  
  632. _pal_bright
  633.         cp 7
  634.         jr c,.l1
  635.         ld a,6
  636. .l1
  637.         ld h,a
  638.         ld l,0
  639.         srl h
  640.         rr l
  641.         srl h
  642.         rr l
  643.         ld (_palBright),hl
  644.         ld a,1
  645.         ld (_palChange),a
  646.         ret
  647.  
  648.  
  649.  
  650. _pal_copy
  651.         push de
  652.         call pal_get_address
  653.  
  654.         ld de,palTemp
  655.         ld bc,16
  656.         ldir
  657.  
  658.         ld a,CC_PAGE3;0
  659.         call setpgc000;SETPG32KHIGH
  660.  
  661.         pop de
  662.         ld hl,palTemp
  663.         ld bc,16
  664.         ldir
  665.         ret
  666.  
  667.  
  668.  
  669. ;более быстрая версия ldir, эффективна при bc>12
  670. ;из статьи на MSX Assembly Page
  671. ;в отличие от нормального ldir портит A и флаги
  672. _fast_ldir
  673.         xor a
  674.         sub c
  675.         and 63
  676.         add a,a
  677.         ld (.jump),a
  678. .jump=$+1
  679.         jr nz,.loop
  680. .loop
  681.         dup 64
  682.         ldi
  683.         edup
  684.         jp pe,.loop
  685.         ret
  686.  
  687.         align 256       ;#nn00
  688. tileUpdateXTable
  689.         dup 8
  690.         db #01,#02,#04,#08,#10,#20,#40,#80
  691.         edup
  692. .x=0
  693.         dup 64
  694.         db .x>>3
  695. .x=.x+1
  696.         edup
  697.  
  698.  
  699.         align 256       ;#nn00
  700. colorMaskTable
  701.         db #00,#09,#12,#1b,#24,#2d,#36,#3f      ;для двух пикселей
  702.         db #c0,#c9,#d2,#db,#e4,#ed,#f6,#ff
  703.         db #00,#01,#02,#03,#04,#05,#06,#07      ;для ink
  704.         db #40,#41,#42,#43,#44,#45,#46,#47
  705.         ds 16,0
  706.         db #00,#08,#10,#18,#20,#28,#30,#38      ;для paper
  707.         db #80,#88,#90,#98,#a0,#a8,#b0,#b8
  708.  
  709.  
  710.         align 256
  711. _sprqueue
  712. _sprqueue0      ;формат 4 байта на спрайт, idh,idl,y,x (idh=255 конец списка)
  713.         ds 256,255
  714. _sprqueue1
  715.         ds 256,255
  716.  
  717.         align 256
  718. palBrightTable
  719.         db #ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff      ;bright 0
  720.         db #ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff
  721.         db #ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff
  722.         db #ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff
  723.         db #ff,#ff,#ff,#bf,#ff,#ff,#ff,#bf,#ff,#ff,#ff,#bf,#7f,#7f,#7f,#3f      ;bright 1
  724.         db #ff,#ff,#ff,#bf,#ff,#ff,#ff,#bf,#ff,#ff,#ff,#bf,#7f,#7f,#7f,#3f
  725.         db #ff,#ff,#ff,#bf,#ff,#ff,#ff,#bf,#ff,#ff,#ff,#bf,#7f,#7f,#7f,#3f
  726.         db #df,#df,#df,#9f,#df,#df,#df,#9f,#df,#df,#df,#9f,#5f,#5f,#5f,#1f
  727.         db #ff,#ff,#bf,#fd,#ff,#ff,#bf,#fd,#7f,#7f,#3f,#7d,#ef,#ef,#af,#ed      ;bright 2
  728.         db #ff,#ff,#bf,#fd,#ff,#ff,#bf,#fd,#7f,#7f,#3f,#7d,#ef,#ef,#af,#ed
  729.         db #df,#df,#9f,#dd,#df,#df,#9f,#dd,#5f,#5f,#1f,#5d,#cf,#cf,#8f,#cd
  730.         db #fe,#fe,#be,#fc,#fe,#fe,#be,#fc,#7e,#7e,#3e,#7c,#ee,#ee,#ae,#ec
  731.         db #ff,#bf,#fd,#bd,#7f,#3f,#7d,#3d,#ef,#af,#ed,#ad,#6f,#2f,#6d,#2d      ;bright 3
  732.         db #df,#9f,#dd,#9d,#5f,#1f,#5d,#1d,#cf,#8f,#cd,#8d,#4f,#0f,#4d,#0d
  733.         db #fe,#be,#fc,#bc,#7e,#3e,#7c,#3c,#ee,#ae,#ec,#ac,#6e,#2e,#6c,#2c
  734.         db #de,#9e,#dc,#9c,#5e,#1e,#5c,#1c,#ce,#8e,#cc,#8c,#4e,#0e,#4c,#0c
  735.         db #1f,#5d,#1d,#1d,#8f,#cd,#8d,#8d,#0f,#4d,#0d,#0d,#0f,#4d,#0d,#0d      ;bright 4
  736.         db #3e,#7c,#3c,#3c,#ae,#ec,#ac,#ac,#2e,#6c,#2c,#2c,#2e,#6c,#2c,#2c
  737.         db #1e,#5c,#1c,#1c,#8e,#cc,#8c,#8c,#0e,#4c,#0c,#0c,#0e,#4c,#0c,#0c
  738.         db #1e,#5c,#1c,#1c,#8e,#cc,#8c,#8c,#0e,#4c,#0c,#0c,#0e,#4c,#0c,#0c
  739.         db #ec,#ac,#ac,#ac,#6c,#2c,#2c,#2c,#6c,#2c,#2c,#2c,#6c,#2c,#2c,#2c      ;bright 5
  740.         db #cc,#8c,#8c,#8c,#4c,#0c,#0c,#0c,#4c,#0c,#0c,#0c,#4c,#0c,#0c,#0c
  741.         db #cc,#8c,#8c,#8c,#4c,#0c,#0c,#0c,#4c,#0c,#0c,#0c,#4c,#0c,#0c,#0c
  742.         db #cc,#8c,#8c,#8c,#4c,#0c,#0c,#0c,#4c,#0c,#0c,#0c,#4c,#0c,#0c,#0c
  743.         db #0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c      ;bright 6
  744.         db #0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c
  745.         db #0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c
  746.         db #0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c
  747.  
  748.         align 256       ;#nn00
  749. scrTable
  750. adr=#4000
  751.         dup 25
  752.         db low adr
  753. adr=adr+(40*8)
  754.         edup
  755.         align 32        ;#nn20
  756. adr=#4000
  757.         dup 25
  758.         db high adr
  759. adr=adr+(40*8)
  760.         edup
  761.  
  762.         align 256       ;#nn00
  763. tileUpdateMap   ;битовая карта обновившихся знакомест, 64x25 бит
  764.         ds 8*25,0
  765.  
  766.         export _pal_select
  767.         export _pal_copy
  768.         export _pal_bright
  769.         export _swap_screen
  770.         export _swap_screen_scroll
  771.         export _clear_screen
  772.         export _fast_ldir
  773.  
  774.         include "../_sdk/lib_int.asm"
  775.         include "../_sdk/lib_tiles.asm"
  776.         export _draw_tile
  777.         export _draw_image
  778.         export _select_image
  779.         export _draw_tile_key
  780.         export _color_key
  781.  
  782.         include "../_sdk/lib_sprites.asm"
  783.         export _sprites_start
  784.         export _sprites_stop
  785.  
  786.         include "../_sdk/lib_input.asm"
  787.         export _joystick
  788.         export _keyboard
  789.         export _mouse_apply_clip
  790.  
  791.         include "../_sdk/lib_sound.asm"
  792.         export _music_play
  793.         export _music_stop
  794.         export _sample_play
  795.         export _sfx_play
  796.         export _sfx_stop
  797.  
  798.         include "../../_sdk/file.asm"
  799.         include "../../_sdk/bmp.asm"
  800.         include "bgpush.asm"
  801.         include "bgpushxy.asm"
  802. _preparescroll=bgpush_prepare ;de=filename
  803. _incscroll=bgpush_inccurscroll ;bc=scroll (-1)
  804. _drawscroll=bgpush_draw ;359975t
  805. _setscroll=bgpush_setcurscroll ;hl=scroll
  806. _drawscrollxy=uvscroll_draw
  807. _setscrollxy=uvscroll_setscroll
  808. _prepscrollxy=uvscroll_preparebmp ;de=filename
  809.         export _preparescroll
  810.         export _incscroll
  811.         export _drawscroll
  812.         export _drawscrollxy
  813.         export _setscroll
  814.         export _setscrollxy
  815.         export _prepscrollxy
  816.  
  817. genpush_newpage
  818. ;заказывает страницу, заносит в tpushpgs, a=pg
  819.         push bc
  820.         push de
  821.         push hl
  822.         push ix
  823.         OS_NEWPAGE
  824.         pop ix
  825.         ld a,e
  826.         ld (ix),a
  827.         ld de,4
  828.         add ix,de
  829.         pop hl
  830.         pop de
  831.         pop bc
  832.         ret
  833.  
  834. ;переменные
  835.  
  836. musicPage       db 0
  837. tileOffset      dw 0
  838. spritesActive   db 0    ;1 если вывод спрайтов разрешён
  839. tileUpdate      db 0    ;1 если выводились тайлы, для системы обновления фона под спрайтами
  840. palTemp         ds 16,0
  841. keysPrevState   ds 40,0
  842.         ifdef TFM
  843. ;turboFM        db 0    ;!=0 если есть TFM
  844.         else
  845. turboSound      db 0    ;!=0 если есть TS
  846.         endif
  847.  
  848. ;экспортируемые переменные
  849.  
  850.         macro rgb222 b2,g2,r2
  851.         db (((r2&3)<<4)|((g2&3)<<2)|(b2&3))
  852.         endm
  853.  
  854.         align 16
  855. _palette
  856.         rgb222(0,0,0)
  857.         rgb222(0,0,2)
  858.         rgb222(2,0,0)
  859.         rgb222(2,0,2)
  860.         rgb222(0,2,0)
  861.         rgb222(0,2,2)
  862.         rgb222(2,2,0)
  863.         rgb222(2,2,2)
  864.         rgb222(0,0,0)
  865.         rgb222(0,0,3)
  866.         rgb222(3,0,0)
  867.         rgb222(3,0,3)
  868.         rgb222(0,3,0)
  869.         rgb222(0,3,3)
  870.         rgb222(3,3,0)
  871.         rgb222(3,3,3)
  872.  
  873. _borderCol      db 0
  874. _palBright      dw 3<<6
  875. _palChange      db 1
  876. _screenActive   db 0    ;~1 или ~3
  877. _mouse_dx       db 0
  878. _mouse_dy       db 0
  879. _mouse_x        db 80
  880. _mouse_y        db 100
  881. _mouse_cx1      db 0
  882. _mouse_cx2      db 160
  883. _mouse_cy1      db 0
  884. _mouse_cy2      db 200
  885. _mouse_btn      db 0
  886. _mouse_prev_dx  db 0
  887. _mouse_prev_dy  db 0
  888. _time           dd 0
  889.  
  890.         export _borderCol
  891.         export _palBright
  892.         export _palChange
  893.         export _sprqueue
  894.         export _screenActive
  895.         export _mouse_dx
  896.         export _mouse_dy
  897.         export _mouse_x
  898.         export _mouse_y
  899.         export _mouse_cx1
  900.         export _mouse_cx2
  901.         export _mouse_cy1
  902.         export _mouse_cy2
  903.         export _mouse_btn
  904.         export _time
  905.         export _palette
  906.  
  907. tpushpgs
  908.         ds 128 ;первая страница 0 слоя, первая страница 1 слоя, первая страница 2 слоя, первая страница 3 слоя, вторая страница 0 слоя...
  909.  
  910.         align 256
  911. trecodebyteleft
  912.         dup 256
  913. ;%00003210 => %.3...210
  914. _3=$&8
  915. _210=$&7
  916.         db (_3*0x08) + (_210*0x01)
  917.         edup
  918.        
  919. trecodebyteright
  920.         dup 256
  921. ;%00003210 => %3.210...
  922. _3=$&8
  923. _210=$&7
  924.         db (_3*0x10) + (_210*0x08)
  925.         edup
  926.  
  927. bgpush_bmpbuf ds 1024;320 ;заголовок bmp или одна строка
  928. bgpush_loadbmplinestack=bgpush_bmpbuf+1024 ;ds pushhgt*2+32
  929.        
  930. res_path
  931. ;в этом относительном пути будут лежать все загружаемые данные игры
  932.         ;db "nedoload"
  933.         include "_temp_/sets.asm"
  934.         db 0
  935. fnbin
  936.         db "page_101.bin",0
  937. fnbin2
  938.         db "page_102.bin",0
  939. fnbin3
  940.         db "page_103.bin",0
  941. fnaddr
  942.         db "addr.bin",0
  943. end
  944.         savebin "nedoload.com",begin,end-begin
  945.         LABELSLIST "..\..\..\us\user.l"
  946.