Subversion Repositories NedoOS

Rev

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

  1.         DEVICE ZXSPECTRUM128
  2.         include "../../_sdk/sys_h.asm"
  3.  
  4. BINADDR=0x4000
  5.  
  6.         ;include "../_sdk/target.asm"
  7.  
  8. ;MEM_SLOT0=#37f7
  9. ;MEM_SLOT1=#77f7
  10. ;MEM_SLOT2=#b7f7
  11. ;MEM_SLOT3=#f7f7
  12.  
  13. INVMASK=#ff
  14.  
  15.         ;include "_temp_/pages.asm"
  16. ;NUMBER_OF_PAGES=10
  17.  
  18. scrbase=0x4000
  19. sprmaxwid=32
  20. sprmaxhgt=32
  21. scrwid=160 ;double pixels
  22. scrhgt=200
  23. clswid=40 ;*8
  24. clshgt=200
  25.  
  26. STACK=0x3f80
  27. tempsp=0x3f86 ;6 bytes for prspr
  28. INTSTACK=0x4000
  29.  
  30.  
  31. SND_PAGE=0;(0^INVMASK)
  32. SPTBL_PAGE=1;(6^INVMASK)
  33. PAL_PAGE=0;2;(4^INVMASK)
  34.  
  35. SPBUF_PAGE0=3;(8^INVMASK)
  36. SPBUF_PAGE1=4;(9^INVMASK)
  37. SPBUF_PAGE2=5;(10^INVMASK)
  38. SPBUF_PAGE3=6;(11^INVMASK)
  39.  
  40. ;CC_PAGE0=(12^INVMASK)
  41. CC_PAGE1=7;(13^INVMASK)
  42. CC_PAGE2=8;(14^INVMASK)
  43. CC_PAGE3=9;(12^INVMASK)
  44.  
  45. GFX_PAGE=10;(16^INVMASK) ;и далее
  46.  
  47. ;IMG_LIST =0xd000;#1000
  48.  
  49. ;смещения в SND_PAGE
  50.  
  51. AFX_INIT =#4000
  52. AFX_PLAY =#4003
  53. AFX_FRAME=#4006
  54. PT3_INIT =#4009
  55. PT3_FRAME=#400c
  56. PT3_MUTE =#400f ;NEW for TFM
  57. TURBOFMON=#4012 ;NEW for TFM
  58.  
  59. MUS_COUNT=#49fe
  60. SMP_COUNT=#49ff
  61. SFX_COUNT=#5000
  62.  
  63. MUS_LIST =#4a00
  64. SMP_LIST =#4d00
  65. SFX_DATA =#5100
  66.  
  67. ;------------------------ addition
  68. uvscroll_scrbase=0x4000
  69. uvscroll_pushbase=0x8000
  70. uvscroll_callbase=0xc000
  71.  
  72. UVSCROLL_WID=1024
  73. UVSCROLL_HGT=512
  74. TILEMAPWID=42 ;целые метатайлы
  75. TILEMAPHGT=24 ;целые метатайлы
  76. UVSCROLL_SCRWID=320 ;8*(TILEMAPWID-2)
  77. UVSCROLL_SCRHGT=200;192-16 ;(делится на 16!!!) ;8*(TILEMAPHGT-2) ;чтобы выводить всегда 12 метатайлов (3 блока по 8) по высоте
  78. UVSCROLL_NPUSHES=UVSCROLL_WID/2/4/2
  79. UVSCROLL_SCRNPUSHES=UVSCROLL_SCRWID/2/4/2
  80.  
  81. UVSCROLL_SCRSTART=uvscroll_scrbase+((UVSCROLL_SCRHGT-1)*40)
  82. UVSCROLL_LINESTEP=-40
  83.  
  84. UVSCROLL_NCALLPGS=4
  85.  
  86. UVSCROLL_TEMPSP=tempsp
  87.  
  88. METATILEMAPWID=256;64
  89. METATILEMAPHGT=64
  90. TILEGFX=0xc000
  91.  
  92. DELETEDYHIGH=0x7f
  93.  
  94. pushbase=0x8000;c000
  95.         macro SETPGPUSHBASE
  96.          ;ld (curpgc000),a
  97.          ;SETPG32KHIGH
  98.         ;ld (curpg8000),a
  99.         SETPG32KLOW
  100.         endm
  101.  
  102.         macro RECODEBYTE
  103.         ld a,(de)
  104.         ld ($+4),a
  105.         ld a,(trecodebyteright)
  106.         ld c,a
  107.         dec de
  108.         ld a,(de)
  109.         dec de
  110.         ld ($+4),a
  111.         ld a,(trecodebyteleft)
  112.         or c
  113.         endm        
  114.  
  115.  
  116.  
  117.  
  118. ;---------------------------------
  119.  
  120.         macro MDebug color
  121.         push af
  122.         ld a,color
  123.         out (#fe),a
  124.         pop af
  125.         endm
  126.  
  127.         macro MSetShadowScreen
  128.         ;ld a,(_screenActive)
  129.         ;SETPG16K
  130.         ;sub 4
  131.         ;SETPG32KLOW
  132.         call setpgsscr40008000
  133.         ;call setpgsscr40008000_current
  134.         endm
  135.  
  136.         macro MRestoreMemMap012
  137. ;TODO переделать на (pgmain4000) и т.п. (сейчас с пересчётом по таблице)
  138.         ;ld bc,MEM_SLOT3
  139.         ld a,CC_PAGE3
  140.         ;out (c),a
  141.         call setpgc000;SETPG32KHIGH
  142.  
  143.         ;ld b,high MEM_SLOT1
  144.         ld a,CC_PAGE1
  145.         ;ld (_memSlot1),a
  146.         ;out (c),a
  147.         call setpg4000;SETPG16K
  148.  
  149.         ;ld b,high MEM_SLOT2
  150.         ld a,CC_PAGE2
  151.         ;ld (_memSlot2),a
  152.         ;out (c),a
  153.         call setpg8000;SETPG32KLOW
  154.         endm
  155.  
  156.         macro MRestoreMemMap12
  157.         ;ld bc,MEM_SLOT1
  158.         ld a,CC_PAGE1
  159.         ;ld (_memSlot1),a
  160.         ;out (c),a
  161.         call setpg4000;SETPG16K
  162.  
  163.         ;ld b,high MEM_SLOT2
  164.         ld a,CC_PAGE2
  165.         ;ld (_memSlot2),a
  166.         ;out (c),a
  167.         call setpg8000;SETPG32KLOW
  168.         endm
  169.  
  170.         org PROGSTART
  171. begin
  172.         ld sp,STACK
  173.  
  174. ;        ld b,25
  175. ;waitcls0
  176. ;        push bc
  177. ;        YIELD
  178. ;        pop bc
  179. ;        djnz waitcls0 ;чтобы nv не перехватил фокус при вызове через комстроку
  180.  
  181.         ld e,0;+128 ;+128=keep
  182.         OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode)
  183.         ld e,0
  184.         OS_SETSCREEN
  185.         ld e,0 ;color byte
  186.         OS_CLS
  187.         ld e,1
  188.         OS_SETSCREEN
  189.         ld e,0 ;color byte
  190.         OS_CLS
  191.        
  192.         OS_GETMAINPAGES
  193. ;dehl=номера страниц в 0000,4000,8000,c000
  194.         ld a,e
  195.         LD (pgmain4000),A
  196.         ld (tpages+CC_PAGE1),a
  197.         ld a,h
  198.         LD (pgmain8000),A
  199.         ld (tpages+CC_PAGE2),a
  200.         ld a,l
  201.         ;LD (pgmainc000),A
  202. ;pgmainc000=$+1
  203. ;        ld a,0
  204.         ld (tpages+CC_PAGE3),a
  205.  
  206. ;d=pgmain0000
  207.         call dropotherapps ;OS_HIDEFROMPARENT
  208.  
  209.         call setpgsmain40008000 ;записать в curpg...
  210.  
  211.         ;OS_GETSCREENPAGES
  212. ;de=страницы 0-го экрана (d=старшая), hl=страницы 1-го экрана (h=старшая)
  213.         ;ld a,l
  214.         ;ld (setpgs_scr_low),a
  215.         ;xor e
  216.         ;ld (setpgs_scr_scrxor),a
  217.         ;ld a,h
  218.          ;ld (ttexpgs+31),a ;ld (IR128),a ;на всякой случай, для прерывания
  219.         ;xor l
  220.         ;ld (setpgs_scr_pgxor),a
  221.        
  222.         ld de,res_path
  223.         OS_CHDIR
  224.  
  225.         ld de,fnaddr
  226.         OS_OPENHANDLE
  227.         push bc
  228.         ld de,jpaddr ;addr
  229.         ld hl,2 ;size
  230.         OS_READHANDLE
  231.         pop bc
  232.         OS_CLOSEHANDLE
  233.  
  234.         ld hl,sndfilename
  235.         call loadpage ;CY=error
  236.         ld (tpages+0),a
  237.         ld hl,sprtblfilename
  238.         call loadpage ;CY=error
  239.         ld (tpages+1),a
  240.         ld de,palfilename
  241.         ld hl,palettes
  242.         ld bc,12*16
  243.         call loadbinpg_sizebc
  244.         ;call loadpage ;CY=error
  245.         ;ld (tpages+2),a
  246.  
  247.         call uvscroll_prepare
  248.  
  249.         ld de,tpages+GFX_PAGE
  250.  
  251.         ;ld b,NUMBER_OF_PAGES
  252. loadloop0
  253.         ;push bc
  254.         push de
  255.         ld hl,texfilename
  256.         call loadpage ;CY=error
  257.         pop de
  258.        jr c,loadloop0q
  259.         ld (de),a
  260.         inc e
  261.         ld hl,texfilename_pgnumend
  262. loadloop_nextdigit0
  263.         dec hl
  264.         ld a,(hl)
  265.         inc a
  266.         cp "0"+10
  267.         ld (hl),"0"
  268.         jr z,loadloop_nextdigit0
  269.         ld (hl),a
  270.         jr loadloop0
  271.         ;pop bc
  272.         ;djnz loadloop0
  273. loadloop0q
  274.        
  275.        if 0 ;для touhou не нужен буфер фона
  276.         ld hl,tpages+SPBUF_PAGE0
  277.         ld b,4
  278. mkpages0
  279.         push bc
  280.         push hl
  281.         OS_NEWPAGE
  282.         pop hl
  283.         ld (hl),e
  284.         inc l
  285.         pop bc
  286.         djnz mkpages0
  287.        endif
  288.  
  289.         call initsfx
  290.  
  291.         call swapimer
  292.  
  293.         if 1==0
  294.         call loadpage
  295.         ld (pgmusic),a
  296.         SETPG4000
  297.         push af
  298.         call 0x4000 ;init
  299.         pop af
  300.         ld hl,0x4005 ;play
  301.         OS_SETMUSIC
  302.         endif
  303.         call setpgsmain40008000
  304.         call RestoreMemMap3
  305.         ld de,fnbin
  306.         ld hl,0x4000
  307.         call loadbinpg
  308.         ld de,fnbin2
  309.         ld hl,0x8000
  310.         call loadbinpg
  311.         ld de,fnbin3
  312.         ld hl,0xc000
  313.         call loadbinpg
  314.        
  315.         ld de,CURPAL
  316.         OS_SETPAL
  317.        ;jp testscrolluv
  318.         call _swap_screen
  319. jpaddr=$+1
  320.         call 0
  321.  
  322.  
  323. quit ;TODO
  324.         call swapimer
  325. pgmusic=$+1
  326.         ld a,0
  327.         SETPG4000
  328.         ld hl,0x4008 ;stop
  329.         OS_SETMUSIC
  330.         halt
  331.         QUIT
  332.  
  333.         ds 0x0200-$
  334. tpages
  335.         ds 256 ;pages
  336.  
  337. dropotherapps
  338. ;d=pgmain0000
  339. ;от последних id (детей) к первым (родителям), т.к. при dropapp будится родитель
  340.         ld e,0xfe ;no id 0xff
  341. dropotherapps0
  342.         push de
  343.         OS_GETAPPMAINPAGES ;d,e,h,l=pages in 0000,4000,8000,c000, c=flags ;a!=0: no app
  344.         or a
  345.         ld a,d
  346.         pop de
  347.         jr nz,dropotherapps_skip ;no app
  348.        cp d
  349.        jr z,dropotherapps_skip ;my app
  350.         push de
  351.         ;e=id
  352.         OS_DROPAPP
  353.         pop de
  354. dropotherapps_skip
  355.         dec e
  356.         ld a,e
  357.         dec a ;no id 0 ;id 1 = idle
  358.         jr nz,dropotherapps0
  359.         ret
  360.  
  361.        if 0
  362. testscrolluv
  363. ;UV scroll
  364.         ld de,bgxyfilename
  365.         call uvscroll_preparebmp
  366.          ;call uvscroll_preparetiles
  367. ;TODO обновить allscroll
  368. ;allscroll=yscroll*(UVSCROLL_WID/512)+xscroll
  369.        if 0
  370.         ld hl,-160 ;top left
  371.         ld (cameraym),hl
  372.         ld de,1024-160 ;top left
  373.         add hl,de
  374.         ld (yscroll),hl
  375.        
  376.         ld hl,-160 ;top left
  377.         ld (cameraxm),hl
  378.         ld de,2048-160 ;top left
  379.         add hl,de
  380.         ld (x2scroll),hl
  381.        endif
  382.  
  383.          ;call uvscroll_preparetilemap
  384.  
  385.         ;call importcoords
  386.         ;ld iy,bullets
  387.         ;call genbullet_terminate
  388.  
  389.         ;ld de,pal
  390.         ;OS_SETPAL
  391. mainloop_uv0
  392.  
  393.         call uvscroll_draw ;367574/391621
  394.         call setpgsmain40008000
  395.        
  396.         ;call mousetrackcamera
  397. ;d=camera dy
  398. ;e=camera dx
  399. ;l=mousekey
  400.         ;call uvscroll_scroll
  401.  
  402. cury=$+1
  403.         ld hl,0
  404.         inc hl
  405.         ld (cury),hl
  406.         ld de,0
  407. ;hl=y
  408. ;de=x
  409.         call uvscroll_setscroll
  410.  
  411.        
  412.        ld a,(_time)
  413.        push af
  414.         call changescrpg ;с этого момента (точнее, с прерывания) можем видеть, что нарисовали
  415. mainloop_uvwaittimer0
  416.         ld a,(_time)
  417. uvoldtimer=$+1
  418.         ld b,0
  419.         ld (uvoldtimer),a
  420.         sub b
  421.         ld b,a
  422.         jr z,mainloop_uvwaittimer0
  423. mainloop_uvlogic0
  424.         push bc
  425.         ;call logic
  426.         pop bc
  427.         djnz mainloop_uvlogic0
  428.  
  429. ;можем начать новую отрисовку, только если с момента changescrpg прошло хотя бы одно прерывание (возможно, внутри logic)
  430.        pop bc ;b=timer на момент changescrpg
  431. waitchangescr0
  432.         ld a,(_time)
  433.         cp b
  434.         jr z,waitchangescr0
  435.  
  436.         jp mainloop_uv0
  437.  
  438.         ret
  439.      
  440. cameraxm
  441.         dw 0
  442. cameraym
  443.         dw 0
  444.  
  445.      
  446. mousetrackcamera
  447.        ld hl,(curmouse)
  448. oldmouse=$+1
  449.        ld de,0
  450.        ld (oldmouse),hl
  451.        ld a,h
  452.        sub d
  453.        ld d,a
  454.        ld a,l
  455.        sub e
  456.        ld e,a
  457. ;de=delta (d>0: go up) (e>0: go left)
  458. ;out: d=camera dy, e=camera dx
  459.         ld hl,(cameraxm)
  460.         ld c,e
  461.         ld a,c
  462.         rla
  463.         sbc a,a
  464.         ld b,a
  465.         add hl,bc
  466.         ld (cameraxm),hl
  467.         ld hl,(cameraym)
  468.         ld c,d
  469.         ld a,c
  470.         rla
  471.         sbc a,a
  472.         ld b,a
  473.         add hl,bc
  474.         ld (cameraym),hl
  475.         ret
  476.  
  477.        
  478. bgxyfilename
  479.         db "bg1-16.bmp",0
  480.        endif
  481.  
  482. initsfx
  483.         ;определение TS
  484.         ld bc,#fffd     ;чип 0
  485.         out (c),b
  486.         xor a           ;регистр 0
  487.         out (c),a
  488.         ld b,#bf        ;значение #bf
  489.         out (c),b
  490.         ld b,#ff        ;чип 1
  491.         ld a,#fe
  492.         out (c),a
  493.         xor a           ;регистр 0
  494.         out (c),a
  495.         ld b,#bf        ;значение 0
  496.         out (c),a
  497.         ld b,#ff        ;чип 0
  498.         out (c),b
  499.         xor a           ;регистр 0
  500.         out (c),a
  501.         in a,(c)
  502.         ld (turboSound),a
  503.         ld a,SND_PAGE
  504.         call setpg4000
  505.         xor a
  506.         call reset_ay_ay
  507.         inc a
  508.         call reset_ay_ay
  509.         ld hl,SFX_DATA
  510.         jp AFX_INIT
  511.  
  512.        if 1==0
  513.  
  514. testscroll0
  515.         call bgpush_draw ;359975t
  516.  
  517.         ;ld de,spritesA+1
  518.         ;call preparedrawsprites
  519.         ;dec de
  520.         ;ld (drawsprites_data),de
  521.         ;call drawsprites
  522.        
  523.        ld a,(_time)
  524.        push af
  525.         call changescrpg ;с этого момента (точнее, с прерывания) можем видеть, что нарисовали
  526.        
  527. mainloopwaittimer0
  528.         ld a,(_time)
  529. oldtimer=$+1
  530.         ld b,0
  531.         ld (oldtimer),a
  532.         sub b
  533.         ld b,a
  534.         jr z,mainloopwaittimer0
  535. mainlooplogic0
  536.         push bc
  537.         ;call logic
  538.         pop bc
  539.         djnz mainlooplogic0
  540.        
  541. ;можем начать новую отрисовку, только если с момента changescrpg прошло хотя бы одно прерывание (возможно, внутри logic)
  542.        pop bc ;b=timer на момент changescrpg
  543. waitchangescr1
  544.         ld a,(_time)
  545.         cp b
  546.         jr z,waitchangescr1
  547.        
  548. ;waitkey
  549.         ;halt ;в играх не юзаем YIELD, иначе может сработать чужой обработчик прерываний
  550.         ;ld a,(curkey)
  551.         ;cp key_esc
  552.         jp testscroll0
  553.         ret
  554.  
  555.         endif
  556.  
  557.  
  558. loadbinpg
  559.         ld bc,0x4000
  560. loadbinpg_sizebc
  561. ;de=filename
  562. ;hl=addr
  563. ;bc=size
  564.         push hl
  565.        push bc
  566.         OS_OPENHANDLE
  567.        pop hl ;size
  568.         pop de ;addr
  569.         push bc
  570.         ;ld hl,-BINADDR ;size
  571.         OS_READHANDLE
  572.         pop bc
  573.         OS_CLOSEHANDLE                
  574.         ret
  575.  
  576. loadpage
  577. ;заказывает страничку и грузит туда файл (имя файла в hl)
  578. ;out: hl=после имени файла, a=pg
  579. ;or else CY
  580.         push hl
  581.         ex de,hl
  582.         OS_OPENHANDLE
  583.         pop hl
  584.         or a
  585.         scf
  586.         ret nz
  587.         push hl
  588.        push bc
  589.         OS_NEWPAGE
  590.         or a
  591.         jr nz,$
  592.        pop bc
  593.         pop hl
  594.         ld a,e
  595.         push af ;pg
  596.        push bc
  597.         SETPGC000
  598.        pop bc
  599.         push hl
  600.         ex de,hl
  601.         ;OS_OPENHANDLE
  602.         push bc
  603.         ld de,0xc000 ;addr
  604.         ld hl,0x4000 ;size
  605.         OS_READHANDLE
  606.         pop bc
  607.         OS_CLOSEHANDLE                
  608.         pop hl
  609.         ld b,1
  610.         xor a
  611.         cpir ;after 0
  612.         pop af ;pg
  613.         or a ;CY=0
  614.         ret
  615.  
  616. CURPAL
  617. pal
  618. ;DDp palette: %grbG11RB(low),%grbG11RB(high), инверсные
  619.         dw 0xffff,0xfefe,0x1d1d,0x3c3c,0xcdcd,0x4c4c,0x2c2c,0xecec
  620.         dw 0xfdfd,0x2d2d,0xeeee,0x3f3f,0xafaf,0x5d5d,0x4e4e,0x0c0c
  621. ;RSTPAL
  622. ;        STANDARDPAL
  623.  
  624. sndfilename
  625.         db "page_0.bin",0
  626. sprtblfilename
  627.         db "page_1.bin",0
  628. palfilename
  629.         db "page_2.bin",0
  630.  
  631. texfilename
  632. texfilename_pgnumend=$+7;8
  633.         db "page_10.bin",0
  634.  
  635.  
  636.  
  637.  
  638. setpgsmain40008000
  639. pgmain4000=$+1
  640.         ld a,0
  641.         ;ld (curpg4000),a
  642.         SETPG4000
  643. pgmain8000=$+1
  644.         ld a,0
  645.         ;ld (curpg8000),a
  646.         SETPG8000
  647.         ret
  648.  
  649. setpgsscr40008000_current
  650.         call getuser_scr_low_cur
  651.         ;ld (curpg4000),a ;TODO kill
  652.         SETPG4000
  653.         call getuser_scr_high_cur
  654.         ;ld (curpg8000),a ;TODO kill
  655.         SETPG8000
  656.         ret
  657.  
  658. setpgsscr40008000
  659.         call getuser_scr_low
  660.         ;ld (curpg4000),a ;TODO kill
  661.         SETPG4000
  662.         call getuser_scr_high
  663.         ;ld (curpg8000),a ;TODO kill
  664.         SETPG8000
  665.         ret
  666.  
  667. setpgscrlow4000
  668.         call getuser_scr_low
  669.         SETPG4000
  670.         ret
  671.  
  672. setpgscrhigh4000
  673.         call getuser_scr_high
  674.         SETPG4000
  675.         ret
  676.  
  677. getuser_scr_low
  678. getuser_scr_low_patch=$+1
  679. getuser_scr_low_patchN=0xff&(user_scr0_low^user_scr1_low)
  680.         ld a,(user_scr1_low) ;ok
  681.         ret
  682.  
  683. getuser_scr_high
  684. getuser_scr_high_patch=$+1
  685. getuser_scr_high_patchN=0xff&(user_scr0_high^user_scr1_high)
  686.         ld a,(user_scr1_high) ;ok
  687.         ret
  688.  
  689. getuser_scr_low_cur
  690. getuser_scr_low_cur_patch=$+1
  691. getuser_scr_low_cur_patchN=0xff&(user_scr0_low^user_scr1_low)
  692.         ld a,(user_scr0_low) ;ok
  693.         ret
  694.  
  695. getuser_scr_high_cur
  696. getuser_scr_high_cur_patch=$+1
  697. getuser_scr_high_cur_patchN=0xff&(user_scr0_high^user_scr1_high)
  698.         ld a,(user_scr0_high) ;ok
  699.         ret
  700.  
  701. changescrpg_current
  702. ;        ld a,(setpgs_scr_low)
  703. ;setpgs_scr_scrxor=$+1
  704. ;        xor 0
  705. ;        ld (setpgs_scr_low),a
  706.         ld hl,getuser_scr_low_patch
  707.         ld a,(hl)
  708.         xor getuser_scr_low_patchN
  709.         ld (hl),a
  710.         ld hl,getuser_scr_high_patch
  711.         ld a,(hl)
  712.         xor getuser_scr_high_patchN
  713.         ld (hl),a
  714.         ld hl,getuser_scr_low_cur_patch
  715.         ld a,(hl)
  716.         xor getuser_scr_low_cur_patchN
  717.         ld (hl),a
  718.         ld hl,getuser_scr_high_cur_patch
  719.         ld a,(hl)
  720.         xor getuser_scr_high_cur_patchN
  721.         ld (hl),a
  722.  
  723.         ld a,1
  724. curscrnum=$+1
  725.         xor 0
  726.         ld ($-1),a
  727.         ret
  728.        
  729. changescrpg
  730. ;TODO убрать
  731.         call changescrpg_current
  732.         ;ld (curscrnum_physical),a
  733.         ld e,a
  734.         OS_SETSCREEN
  735.         ret
  736.  
  737. setpg4000
  738.         ;ld ($+4),a
  739.         ;ld a,(tpages) ;нереентерабельно!
  740.         ld b,tpages/256
  741.         ld c,a
  742.         ld a,(bc)
  743.         SETPG16K
  744.         ret
  745.  
  746. setpg8000
  747.         ;ld ($+4),a
  748.         ;ld a,(tpages) ;нереентерабельно!
  749.         ld b,tpages/256
  750.         ld c,a
  751.         ld a,(bc)
  752.         SETPG32KLOW
  753.         ret
  754.  
  755. setpgc000
  756.         ;ld ($+4),a
  757.         ;ld a,(tpages) ;нереентерабельно!
  758.         ld b,tpages/256
  759.         ld c,a
  760.         ld a,(bc)
  761.         SETPG32KHIGH
  762.         ret
  763.  
  764. setShadowScreen
  765.         MSetShadowScreen
  766.         ret
  767.  
  768. _clear_screen
  769.         and 15
  770.         ld l,a
  771.         ld h,high colorMaskTable
  772.         ld e,(hl)
  773.         call setShadowScreen
  774.         ld hl,#4000
  775.         ld (hl),e
  776.         ld de,#4001
  777.         ld bc,#7fff
  778.         call _fast_ldir
  779. RestoreMemMap12
  780.         MRestoreMemMap12
  781.         ret
  782.  
  783. _swap_screen
  784.         push ix
  785.         ;push iy
  786.  
  787.         ld a,(spritesActive)
  788.         or a
  789.         push af
  790.         jr z,.noSpr0
  791.         call setShadowScreen
  792.        ;TODO draw changed tiles to another screen (or copy them screen to screen)
  793.        call getuser_scr_low_cur
  794.        SETPGC000
  795.        ld hl,0x4000
  796.        ld de,0xc000
  797.        ld bc,0x4000
  798.        ldir
  799.        call getuser_scr_high_cur
  800.        SETPGC000
  801.        ld hl,0x8000
  802.        ld de,0xc000
  803.        ld bc,0x4000
  804.        ldir
  805.         ;call updateTilesToBuffer
  806.         ;call prspr
  807. .noSpr0
  808.  
  809.         halt
  810.  
  811.         ld a,(_screenActive)
  812.         xor 2
  813.         ld (_screenActive),a ;for select sprqueue
  814.         ;ld e,a
  815.  
  816.         ;ld a,#10
  817.         ;bit 1,e
  818.         ;jr z,$+4
  819.         ;or #08
  820.         ;ld bc,#7ffd
  821.         ;out (c),a
  822.          call changescrpg
  823.          ;rra
  824.          ;and 1 ;+cpl?
  825.          ;ld e,a
  826.          ;OS_SETSCREEN
  827.  
  828.         pop af
  829.         jr z,.noSpr1
  830.  
  831.         ;call setShadowScreen
  832.         ;call respr ;remove only for touhou
  833.         ;call updateTilesFromBuffer
  834.         ;MRestoreMemMap012
  835.         call RestoreMemMap3;0
  836.         call RestoreMemMap12
  837. .noSpr1
  838.         ;pop iy
  839.         pop ix
  840.         ret
  841.  
  842. _swap_screen_scroll
  843.         push ix
  844.         ;push iy
  845.  
  846.         ld a,(spritesActive)
  847.         or a
  848.         push af
  849.         jr z,.noSpr0
  850.         call setShadowScreen
  851.         ;call updateTilesToBuffer
  852.         call prspr
  853. .noSpr0
  854.  
  855.         halt
  856.  
  857.         ld a,(_screenActive)
  858.         xor 2
  859.         ld (_screenActive),a ;for select sprqueue
  860.         ;ld e,a
  861.  
  862.         ;ld a,#10
  863.         ;bit 1,e
  864.         ;jr z,$+4
  865.         ;or #08
  866.         ;ld bc,#7ffd
  867.         ;out (c),a
  868.          call changescrpg
  869.          ;rra
  870.          ;and 1 ;+cpl?
  871.          ;ld e,a
  872.          ;OS_SETSCREEN
  873.  
  874.         pop af
  875.         jr z,.noSpr1
  876.  
  877.         call setShadowScreen
  878.         ;call respr
  879.         ;call updateTilesFromBuffer
  880.         ;MRestoreMemMap012
  881.         call RestoreMemMap3;0
  882.         call RestoreMemMap12
  883. .noSpr1
  884.         ;pop iy
  885.         pop ix
  886.         ret
  887.  
  888. pal_get_address
  889.         ld h,0
  890.         ld l,a
  891.         add hl,hl
  892.         add hl,hl
  893.         add hl,hl
  894.         add hl,hl
  895.          ;set 7,h
  896.          ;set 6,h
  897.        ld de,palettes
  898.        add hl,de
  899.  
  900.         ;ld a,PAL_PAGE
  901.         ;call setpgc000;SETPG32KHIGH
  902.         ret
  903.  
  904. palettes
  905.         ds 12*16
  906. IMG_LIST ;was in PAL_PAGE +0x1000 ;1 image: font
  907.         db 0
  908.         db 0
  909.         db 0x10
  910.         db 0x10
  911.  
  912. _pal_select
  913.         call pal_get_address
  914.  
  915.         ld de,_palette
  916.         ld bc,16
  917.         ldir
  918.  
  919.         ld a,d
  920.         ld (_palChange),a
  921. RestoreMemMap3;0
  922.         ;ld bc,MEM_SLOT0
  923.         ld a,CC_PAGE3;0
  924.         ;out (c),a
  925.         call setpgc000;SETPG32KHIGH
  926.         ret
  927.  
  928.  
  929.  
  930. _pal_bright
  931.         cp 7
  932.         jr c,.l1
  933.         ld a,6
  934. .l1
  935.         ld h,a
  936.         ld l,0
  937.         srl h
  938.         rr l
  939.         srl h
  940.         rr l
  941.         ld (_palBright),hl
  942.         ld a,1
  943.         ld (_palChange),a
  944.         ret
  945.  
  946.  
  947.  
  948. _pal_copy
  949.         push de
  950.         call pal_get_address
  951.  
  952.         ld de,palTemp
  953.         ld bc,16
  954.         ldir
  955.  
  956.         ;ld bc,MEM_SLOT0
  957.         ld a,CC_PAGE3;0
  958.         ;out (c),a
  959.         call setpgc000;SETPG32KHIGH
  960.  
  961.         pop de
  962.         ld hl,palTemp
  963.         ld bc,16
  964.         ldir
  965.  
  966.         ret
  967.  
  968.  
  969.  
  970. ;более быстрая версия ldir, эффективна при bc>12
  971. ;из статьи на MSX Assembly Page
  972. ;в отличие от нормального ldir портит A и флаги
  973.  
  974. _fast_ldir
  975. DOSorTFM=0
  976.         ifdef DOS
  977. DOSorTFM=1
  978.         endif
  979.         ifdef TFM
  980. DOSorTFM=1
  981.         endif
  982.        
  983.         if DOSorTFM
  984.         ldir
  985.         ret
  986.         else
  987.  
  988.         xor a
  989.         sub c
  990.         and 63
  991.         add a,a
  992.         ld (.jump),a
  993. .jump=$+1
  994.         jr nz,.loop
  995. .loop
  996.         dup 64
  997.         ldi
  998.         edup
  999.         jp pe,.loop
  1000.         ret
  1001.  
  1002.         endif ;~DOSorTFM
  1003.  
  1004.         align 256       ;#nn00
  1005. tileUpdateXTable
  1006.         dup 8
  1007.         db #01,#02,#04,#08,#10,#20,#40,#80
  1008.         edup
  1009. .x=0
  1010.         dup 64
  1011.         db .x>>3
  1012. .x=.x+1
  1013.         edup
  1014.  
  1015.  
  1016.         align 256       ;#nn00
  1017. colorMaskTable
  1018.         db #00,#09,#12,#1b,#24,#2d,#36,#3f      ;для двух пикселей
  1019.         db #c0,#c9,#d2,#db,#e4,#ed,#f6,#ff
  1020.         db #00,#01,#02,#03,#04,#05,#06,#07      ;для ink
  1021.         db #40,#41,#42,#43,#44,#45,#46,#47
  1022.         ds 16,0
  1023.         db #00,#08,#10,#18,#20,#28,#30,#38      ;для paper
  1024.         db #80,#88,#90,#98,#a0,#a8,#b0,#b8
  1025.  
  1026.  
  1027.         align 256
  1028. _sprqueue
  1029. _sprqueue0      ;формат 4 байта на спрайт, idh,idl,y,x (idh=255 конец списка)
  1030.         ds 256,255
  1031. _sprqueue1
  1032.         ds 256,255
  1033.  
  1034.         align 256
  1035. palBrightTable
  1036.         db #ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff      ;bright 0
  1037.         db #ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff
  1038.         db #ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff
  1039.         db #ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff
  1040.         db #ff,#ff,#ff,#bf,#ff,#ff,#ff,#bf,#ff,#ff,#ff,#bf,#7f,#7f,#7f,#3f      ;bright 1
  1041.         db #ff,#ff,#ff,#bf,#ff,#ff,#ff,#bf,#ff,#ff,#ff,#bf,#7f,#7f,#7f,#3f
  1042.         db #ff,#ff,#ff,#bf,#ff,#ff,#ff,#bf,#ff,#ff,#ff,#bf,#7f,#7f,#7f,#3f
  1043.         db #df,#df,#df,#9f,#df,#df,#df,#9f,#df,#df,#df,#9f,#5f,#5f,#5f,#1f
  1044.         db #ff,#ff,#bf,#fd,#ff,#ff,#bf,#fd,#7f,#7f,#3f,#7d,#ef,#ef,#af,#ed      ;bright 2
  1045.         db #ff,#ff,#bf,#fd,#ff,#ff,#bf,#fd,#7f,#7f,#3f,#7d,#ef,#ef,#af,#ed
  1046.         db #df,#df,#9f,#dd,#df,#df,#9f,#dd,#5f,#5f,#1f,#5d,#cf,#cf,#8f,#cd
  1047.         db #fe,#fe,#be,#fc,#fe,#fe,#be,#fc,#7e,#7e,#3e,#7c,#ee,#ee,#ae,#ec
  1048.         db #ff,#bf,#fd,#bd,#7f,#3f,#7d,#3d,#ef,#af,#ed,#ad,#6f,#2f,#6d,#2d      ;bright 3
  1049.         db #df,#9f,#dd,#9d,#5f,#1f,#5d,#1d,#cf,#8f,#cd,#8d,#4f,#0f,#4d,#0d
  1050.         db #fe,#be,#fc,#bc,#7e,#3e,#7c,#3c,#ee,#ae,#ec,#ac,#6e,#2e,#6c,#2c
  1051.         db #de,#9e,#dc,#9c,#5e,#1e,#5c,#1c,#ce,#8e,#cc,#8c,#4e,#0e,#4c,#0c
  1052.         db #1f,#5d,#1d,#1d,#8f,#cd,#8d,#8d,#0f,#4d,#0d,#0d,#0f,#4d,#0d,#0d      ;bright 4
  1053.         db #3e,#7c,#3c,#3c,#ae,#ec,#ac,#ac,#2e,#6c,#2c,#2c,#2e,#6c,#2c,#2c
  1054.         db #1e,#5c,#1c,#1c,#8e,#cc,#8c,#8c,#0e,#4c,#0c,#0c,#0e,#4c,#0c,#0c
  1055.         db #1e,#5c,#1c,#1c,#8e,#cc,#8c,#8c,#0e,#4c,#0c,#0c,#0e,#4c,#0c,#0c
  1056.         db #ec,#ac,#ac,#ac,#6c,#2c,#2c,#2c,#6c,#2c,#2c,#2c,#6c,#2c,#2c,#2c      ;bright 5
  1057.         db #cc,#8c,#8c,#8c,#4c,#0c,#0c,#0c,#4c,#0c,#0c,#0c,#4c,#0c,#0c,#0c
  1058.         db #cc,#8c,#8c,#8c,#4c,#0c,#0c,#0c,#4c,#0c,#0c,#0c,#4c,#0c,#0c,#0c
  1059.         db #cc,#8c,#8c,#8c,#4c,#0c,#0c,#0c,#4c,#0c,#0c,#0c,#4c,#0c,#0c,#0c
  1060.         db #0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c      ;bright 6
  1061.         db #0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c
  1062.         db #0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c
  1063.         db #0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c
  1064.  
  1065.         align 256       ;#nn00
  1066. scrTable
  1067. adr=#4000
  1068.         dup 25
  1069.         db low adr
  1070. adr=adr+(40*8)
  1071.         edup
  1072.         align 32        ;#nn20
  1073. adr=#4000
  1074.         dup 25
  1075.         db high adr
  1076. adr=adr+(40*8)
  1077.         edup
  1078.  
  1079.         align 256       ;#nn00
  1080. tileUpdateMap   ;битовая карта обновившихся знакомест, 64x25 бит
  1081.         ds 8*25,0
  1082.  
  1083.         ;export changescrpg
  1084.  
  1085.         export _pal_select
  1086.         export _pal_copy
  1087.         export _pal_bright
  1088.         export _swap_screen
  1089.         export _swap_screen_scroll
  1090.         export _clear_screen
  1091.         export _fast_ldir
  1092.  
  1093.         include "../_sdk/lib_int.asm"
  1094.         include "../_sdk/lib_tiles.asm"
  1095.         export _draw_tile
  1096.         export _draw_image
  1097.         export _select_image
  1098.         export _draw_tile_key
  1099.         export _color_key
  1100.  
  1101.         include "../_sdk/lib_sprites.asm"
  1102.         export _sprites_start
  1103.         export _sprites_stop
  1104.  
  1105.         include "../_sdk/lib_input.asm"
  1106.  
  1107.         export _joystick
  1108.         export _keyboard
  1109.         export _mouse_apply_clip
  1110.  
  1111.         include "../../_sdk/file.asm"
  1112.         include "bmp.asm"
  1113.         include "bgpush.asm"
  1114.         include "bgpushxy.asm"
  1115. _preparescroll=bgpush_prepare ;de=filename
  1116. _incscroll=bgpush_inccurscroll ;bc=scroll (-1)
  1117. _drawscroll=bgpush_draw ;359975t
  1118. _setscroll=bgpush_setcurscroll ;hl=scroll
  1119. _drawscrollxy=uvscroll_draw
  1120. _setscrollxy=uvscroll_setscroll
  1121. _prepscrollxy=uvscroll_preparebmp ;de=filename
  1122.         export _preparescroll
  1123.         export _incscroll
  1124.         export _drawscroll
  1125.         export _drawscrollxy
  1126.         export _setscroll
  1127.         export _setscrollxy
  1128.         export _prepscrollxy
  1129.  
  1130. genpush_newpage
  1131. ;заказывает страницу, заносит в tpushpgs, a=pg
  1132.         push bc
  1133.         push de
  1134.         push hl
  1135.         push ix
  1136.         OS_NEWPAGE
  1137.         pop ix
  1138.         ld a,e
  1139.         ld (ix),a
  1140.         ld de,4
  1141.         add ix,de
  1142.         pop hl
  1143.         pop de
  1144.         pop bc
  1145.         ret
  1146.  
  1147. _sample_play
  1148. ;проигрывание сэмпла
  1149. ;l=номер сэмпла
  1150.        push ix
  1151.         ld a,(curpg32khigh) ;ok
  1152.         push af
  1153.         ld a,SND_PAGE
  1154.         call setpgc000
  1155.         ld a,(SMP_COUNT|0xc000)
  1156.         ld e,a
  1157.         ld a,l
  1158.         cp e
  1159.         jr nc,.skip
  1160.  
  1161.         ld h,high (SMP_LIST|0xc000)
  1162.         ld e,(hl)       ;lsb
  1163.         inc h
  1164.         ld a,(hl)       ;msb
  1165.         or 0xc0
  1166.         ld d,a
  1167.         inc h
  1168.         ld a,(hl)       ;page
  1169.         cpl
  1170.         inc h
  1171.         ld h,(hl)       ;delay
  1172.         ex de,hl ;hl=data
  1173.         ld hx,d ;delay
  1174.         ld e,a
  1175.         ld d,tpages/256
  1176. ;hl=data (0xc000+, 0x00=end), de=pagetable (0x0000+), hx=delay (18=11kHz, 7=22kHz, 1=44kHz)
  1177.         OS_PLAYCOVOX
  1178. .skip
  1179.         pop af
  1180.         SETPG32KHIGH
  1181.        pop ix
  1182.         ret
  1183.  
  1184. ;выключение звука на указанном чипе
  1185. ;a=0 или 1
  1186. reset_ay
  1187. ;используется в _sfx_stop, _music_stop
  1188.         ifdef TFM
  1189.         push af
  1190.         di
  1191.  
  1192.         call turbo_off
  1193.  
  1194.         ld a,SND_PAGE
  1195.         call setpg4000
  1196.         ld a,(TURBOFMON)
  1197.         or a
  1198.         call nz,#400f;tfmshut
  1199.         ld a,CC_PAGE1
  1200.         call setpg4000
  1201.         pop af
  1202.         call reset_ay_ay
  1203.  
  1204.         call turbo_on
  1205.  
  1206.         ei
  1207.         ret
  1208.  
  1209.         else
  1210.  
  1211.         di
  1212.         call reset_ay_ay
  1213.         ei
  1214.         ret
  1215.  
  1216.         endif
  1217.  
  1218.         if 1==0
  1219. turbo_on
  1220.         ld a,%10101000 ;режим EGA с турбо
  1221.         ld bc,#bd77
  1222.         out (c),a
  1223.         ret
  1224.  
  1225. turbo_off
  1226.         ld a,%10100000 ;режим EGA без турбо, так как в 14 МГц скорость нестабильна
  1227.         ld bc,#bd77
  1228.         out (c),a
  1229.         ret
  1230.         endif
  1231.  
  1232. reset_ay_ay
  1233. ;в TFM нужно для глушения AY перед выводом эффектов
  1234.         push af
  1235.         ifdef TFM
  1236.         or %11111000
  1237.         ;or %11111010           ;no wait sync
  1238.         else
  1239.         or #fe
  1240.         endif
  1241.         ld bc,#fffd
  1242.         out (c),a
  1243.  
  1244.         xor a
  1245.         ld l,a
  1246. .l0
  1247.         ld b,#ff
  1248.         ifdef TFM
  1249.         call libstartup_waitstatus
  1250.         endif
  1251.         out (c),a
  1252.         ifdef TFM
  1253.         call libstartup_waitstatus
  1254.         endif
  1255.         ld b,#bf
  1256.         out (c),l
  1257.         inc a
  1258.         cp 14
  1259.         jr nz,.l0
  1260.         pop af
  1261.         ret
  1262.  
  1263. ;запуск звукового эффекта
  1264. _sfx_play
  1265.         push bc
  1266.         ld a,SND_PAGE
  1267.         call setpg4000
  1268.         pop bc
  1269.         ld a,b
  1270.         call AFX_PLAY
  1271.         ld a,CC_PAGE1
  1272.         jp setpg4000
  1273.  
  1274. ;останов звуковых эффектов
  1275. _sfx_stop
  1276.         xor a
  1277.         jp reset_ay
  1278.  
  1279. ;запуск музыки
  1280. _music_play
  1281.         push ix
  1282.         push iy
  1283.         push af
  1284.         ld a,SND_PAGE
  1285.         call setpg4000
  1286.  
  1287.         ld a,(MUS_COUNT)
  1288.         ld l,a
  1289.         pop af
  1290.  
  1291.         cp l
  1292.         jr nc,.skip
  1293.  
  1294.         ld h,high MUS_LIST
  1295.         ld l,a
  1296.  
  1297.         ld e,(hl)
  1298.         inc h
  1299.         ld d,(hl)
  1300.         inc h
  1301.         ld a,(hl)
  1302.         ex de,hl
  1303.         di
  1304.         ld (musicPage),a
  1305.         call setpg8000
  1306.         ifdef TFM
  1307.         ld a,(TURBOFMON)
  1308.         or a
  1309.         call nz,PT3_INIT
  1310.         else
  1311.         ld bc,#fffd
  1312.         ld a,#fe
  1313.         out (c),a
  1314.         call PT3_INIT
  1315.         endif
  1316.         ei
  1317.         ld a,CC_PAGE2
  1318.         call setpg8000
  1319.  
  1320. .skip
  1321.         pop iy
  1322.         pop ix
  1323.  
  1324.         ld a,CC_PAGE1
  1325.         jp setpg4000
  1326.  
  1327.  
  1328.  
  1329. ;выключение музыки
  1330. _music_stop
  1331.         xor a
  1332.         ld (musicPage),a
  1333.         jp reset_ay
  1334.        
  1335.         export _music_play
  1336.         export _music_stop
  1337.         export _sample_play
  1338.         export _sfx_play
  1339.         export _sfx_stop
  1340.  
  1341.  
  1342. ;переменные
  1343.  
  1344. musicPage               db 0
  1345. tileOffset              dw 0
  1346. spritesActive   db 0    ;1 если вывод спрайтов разрешён
  1347. tileUpdate              db 0    ;1 если выводились тайлы, для системы обновления фона под спрайтами
  1348. palTemp                 ds 16,0
  1349. keysPrevState   ds 40,0
  1350.         ifdef TFM
  1351. ;turboFM                        db 0    ;!=0 если есть TFM
  1352.         else
  1353. turboSound              db 0    ;!=0 если есть TS
  1354.         endif
  1355.  
  1356. ;экспортируемые переменные
  1357.  
  1358.         macro rgb222 b2,g2,r2
  1359.         db (((r2&3)<<4)|((g2&3)<<2)|(b2&3))
  1360.         endm
  1361.  
  1362.         align 16
  1363. _palette
  1364.         rgb222(0,0,0)
  1365.         rgb222(0,0,2)
  1366.         rgb222(2,0,0)
  1367.         rgb222(2,0,2)
  1368.         rgb222(0,2,0)
  1369.         rgb222(0,2,2)
  1370.         rgb222(2,2,0)
  1371.         rgb222(2,2,2)
  1372.         rgb222(0,0,0)
  1373.         rgb222(0,0,3)
  1374.         rgb222(3,0,0)
  1375.         rgb222(3,0,3)
  1376.         rgb222(0,3,0)
  1377.         rgb222(0,3,3)
  1378.         rgb222(3,3,0)
  1379.         rgb222(3,3,3)
  1380.  
  1381. ;_memSlot1
  1382. ;curpg4000
  1383. ;        db 0
  1384. ;_memSlot2
  1385. ;curpg8000
  1386. ;        db 0
  1387. ;_memSlot3
  1388. ;curpgc000
  1389. ;        db 0
  1390.  
  1391. _borderCol      db 0
  1392. _palBright      dw 3<<6
  1393. _palChange      db 1
  1394. _screenActive   db 0    ;~1 или ~3
  1395. _mouse_dx       db 0
  1396. _mouse_dy       db 0
  1397. _mouse_x        db 80
  1398. _mouse_y        db 100
  1399. _mouse_cx1      db 0
  1400. _mouse_cx2      db 160
  1401. _mouse_cy1      db 0
  1402. _mouse_cy2      db 200
  1403. _mouse_btn      db 0
  1404. _mouse_prev_dx  db 0
  1405. _mouse_prev_dy  db 0
  1406. _time           dd 0
  1407.  
  1408.         export _borderCol
  1409.         export _palBright
  1410.         export _palChange
  1411.         export _sprqueue
  1412.         export _screenActive
  1413.         export _mouse_dx
  1414.         export _mouse_dy
  1415.         export _mouse_x
  1416.         export _mouse_y
  1417.         export _mouse_cx1
  1418.         export _mouse_cx2
  1419.         export _mouse_cy1
  1420.         export _mouse_cy2
  1421.         export _mouse_btn
  1422.         export _time
  1423.         export _palette
  1424.  
  1425. tpushpgs
  1426.         ds 128 ;первая страница 0 слоя, первая страница 1 слоя, первая страница 2 слоя, первая страница 3 слоя, вторая страница 0 слоя...
  1427.  
  1428.         align 256
  1429. trecodebyteleft
  1430.         dup 256
  1431. ;%00003210 => %.3...210
  1432. _3=$&8
  1433. _210=$&7
  1434.         db (_3*0x08) + (_210*0x01)
  1435.         edup
  1436.        
  1437. trecodebyteright
  1438.         dup 256
  1439. ;%00003210 => %3.210...
  1440. _3=$&8
  1441. _210=$&7
  1442.         db (_3*0x10) + (_210*0x08)
  1443.         edup
  1444.  
  1445. ;bgpush_bmpbuf=0x4000 ;ds 1024;320 ;заголовок bmp или одна строка
  1446. bgpush_bmpbuf ds 1024;320 ;заголовок bmp или одна строка
  1447. bgpush_loadbmplinestack=bgpush_bmpbuf+1024 ;ds pushhgt*2+32
  1448.        
  1449. res_path
  1450. ;в этом относительном пути будут лежать все загружаемые данные игры
  1451.         ;db "nedoload"
  1452.         include "_temp_/sets.asm"
  1453.         db 0
  1454. fnbin
  1455.         ;db "code0.bin",0
  1456.         db "page_101.bin",0
  1457. fnbin2
  1458.         db "page_102.bin",0
  1459. fnbin3
  1460.         db "page_103.bin",0
  1461. fnaddr
  1462.         db "addr.bin",0
  1463. end        
  1464.  
  1465.         display "begin=",begin
  1466.         display "end=",end
  1467.         display "Size ",/d,end-begin," bytes"
  1468.        
  1469.         savebin "nedoload.com",begin,end-begin
  1470.        
  1471.         LABELSLIST "..\..\..\us\user.l"
  1472.