?login_element?

Subversion Repositories NedoOS

Rev

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