?login_element?

Subversion Repositories NedoOS

Rev

Rev 876 | Rev 941 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.         DEVICE ZXSPECTRUM128
  2.         include "../../_sdk/sys_h.asm"
  3.  
  4. BINADDR=0x4000
  5.  
  6.         include "target.asm"
  7.  
  8.         ifdef EVO
  9.  
  10.         display "EVO version"
  11.  
  12. MEM_SLOT0=#37f7
  13. MEM_SLOT1=#77f7
  14. MEM_SLOT2=#b7f7
  15. MEM_SLOT3=#f7f7
  16.  
  17. INVMASK=#ff
  18.  
  19.         else
  20.  
  21.         display "ATM version"
  22.  
  23. MEM_SLOT0=#3ff7
  24. MEM_SLOT1=#7ff7
  25. MEM_SLOT2=#bff7
  26. MEM_SLOT3=#fff7
  27.  
  28. INVMASK=#7f
  29.  
  30.         endif
  31.  
  32.         ifdef DOS
  33.         display "DOS support"
  34.         endif
  35.  
  36.  
  37.         include "pages.asm"
  38. NUMBER_OF_PAGES=10
  39.  
  40. scrbase=0x4000
  41. sprmaxwid=32
  42. sprmaxhgt=32
  43. scrwid=160 ;double pixels
  44. scrhgt=200
  45. clswid=40 ;*8
  46. clshgt=200
  47.  
  48. STACK=0x4000
  49. tempsp=0x3f06 ;6 bytes for prspr
  50. INTSTACK=0x3f00
  51.  
  52.  
  53. SCR_PAGE1=(1^INVMASK) ;TODO убрать
  54. SCR_PAGE3=(3^INVMASK)
  55. SCR_PAGE5=(5^INVMASK)
  56. SCR_PAGE7=(7^INVMASK)
  57.  
  58. SPBUF_PAGE0=(8^INVMASK)
  59. SPBUF_PAGE1=(9^INVMASK)
  60. SPBUF_PAGE2=(10^INVMASK)
  61. SPBUF_PAGE3=(11^INVMASK)
  62.  
  63. ;CC_PAGE0=(12^INVMASK)
  64. CC_PAGE1=(13^INVMASK)
  65. CC_PAGE2=(14^INVMASK)
  66. CC_PAGE3=(12^INVMASK)
  67.  
  68. SND_PAGE=0;(0^INVMASK)
  69. SPTBL_PAGE=1;(6^INVMASK)
  70. PAL_PAGE=2;(4^INVMASK)
  71. GFX_PAGE=10;(16^INVMASK)
  72.  
  73.  
  74. IMG_LIST =0xd000;#1000
  75.  
  76. ;смещения в SND_PAGE
  77.  
  78. AFX_INIT =#4000
  79. AFX_PLAY =#4003
  80. AFX_FRAME=#4006
  81. PT3_INIT =#4009
  82. PT3_FRAME=#400c
  83. PT3_MUTE =#400f ;NEW for TFM
  84. TURBOFMON=#4012 ;NEW for TFM
  85.  
  86. MUS_COUNT=#49fe
  87. SMP_COUNT=#49ff
  88. SFX_COUNT=#5000
  89.  
  90. MUS_LIST =#4a00
  91. SMP_LIST =#4d00
  92. SFX_DATA =#5100
  93.  
  94.  
  95.  
  96.         macro MDebug color
  97.         push af
  98.         ld a,color
  99.         out (#fe),a
  100.         pop af
  101.         endm
  102.  
  103.         macro MSetShadowScreen
  104.         ;ld a,(_screenActive)
  105.         ;SETPG16K
  106.         ;sub 4
  107.         ;SETPG32KLOW
  108.         call setpgsscr40008000;_current
  109.         endm
  110.  
  111.         macro MRestoreMemMap012
  112. ;TODO переделать на (pgmain4000) и т.п.
  113.         ;ld bc,MEM_SLOT3
  114.         ld a,CC_PAGE3
  115.         ;out (c),a
  116.         call setpgc000;SETPG32KHIGH
  117.  
  118.         ;ld b,high MEM_SLOT1
  119.         ld a,CC_PAGE1
  120.         ;ld (_memSlot1),a
  121.         ;out (c),a
  122.         call setpg4000;SETPG16K
  123.  
  124.         ;ld b,high MEM_SLOT2
  125.         ld a,CC_PAGE2
  126.         ;ld (_memSlot2),a
  127.         ;out (c),a
  128.         call setpg8000;SETPG32KLOW
  129.         endm
  130.  
  131.         macro MRestoreMemMap12
  132.         ;ld bc,MEM_SLOT1
  133.         ld a,CC_PAGE1
  134.         ;ld (_memSlot1),a
  135.         ;out (c),a
  136.         call setpg4000;SETPG16K
  137.  
  138.         ;ld b,high MEM_SLOT2
  139.         ld a,CC_PAGE2
  140.         ;ld (_memSlot2),a
  141.         ;out (c),a
  142.         call setpg8000;SETPG32KLOW
  143.         endm
  144.  
  145.         org PROGSTART
  146. begin
  147.         ld sp,STACK
  148.         OS_HIDEFROMPARENT
  149.  
  150. ;        ld b,25
  151. ;waitcls0
  152. ;        push bc
  153. ;        YIELD
  154. ;        pop bc
  155. ;        djnz waitcls0 ;чтобы nv не перехватил фокус при вызове через комстроку
  156.  
  157.         ld e,0+128 ;+128=keep
  158.         OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode)
  159.         ld e,0
  160.         OS_SETSCREEN
  161.         ld e,0 ;color byte
  162.         OS_CLS
  163.         ld e,1
  164.         OS_SETSCREEN
  165.         ld e,0 ;color byte
  166.         OS_CLS
  167.        
  168.         OS_GETMAINPAGES
  169. ;dehl=номера страниц в 0000,4000,8000,c000
  170.         ld a,e
  171.         LD (pgmain4000),A
  172.         ld a,h
  173.         LD (pgmain8000),A
  174.         ld a,l
  175.         LD (pgmainc000),A
  176.         call setpgsmain40008000 ;записать в curpg...
  177.  
  178.         ;OS_GETSCREENPAGES
  179. ;de=страницы 0-го экрана (d=старшая), hl=страницы 1-го экрана (h=старшая)
  180.         ;ld a,l
  181.         ;ld (setpgs_scr_low),a
  182.         ;xor e
  183.         ;ld (setpgs_scr_scrxor),a
  184.         ;ld a,h
  185.          ;ld (ttexpgs+31),a ;ld (IR128),a ;на всякой случай, для прерывания
  186.         ;xor l
  187.         ;ld (setpgs_scr_pgxor),a
  188.        
  189.         ld de,res_path
  190.         OS_CHDIR
  191.  
  192.         ld de,fnaddr
  193.         OS_OPENHANDLE
  194.         push bc
  195.         ld de,jpaddr ;addr
  196.         ld hl,2 ;size
  197.         OS_READHANDLE
  198.         pop bc
  199.         OS_CLOSEHANDLE
  200.  
  201.         ld de,fnbin
  202.         ld hl,0x4000
  203.         call loadbinpg
  204.  
  205.         ld de,fnbin2
  206.         ld hl,0x8000
  207.         call loadbinpg
  208.  
  209.         ld de,fnbin3
  210.         ld hl,0xc000
  211.         call loadbinpg
  212.  
  213.         ld hl,sndfilename
  214.         call loadpage ;CY=error
  215.         ld (tpages+0),a
  216.         ld hl,sprtblfilename
  217.         call loadpage ;CY=error
  218.         ld (tpages+1),a
  219.         ld hl,palfilename
  220.         call loadpage ;CY=error
  221.         ld (tpages+2),a
  222.  
  223.         ld de,tpages+GFX_PAGE
  224.  
  225.         ;ld b,NUMBER_OF_PAGES
  226. loadloop0
  227.         ;push bc
  228.         push de
  229.         ld hl,texfilename
  230.         call loadpage ;CY=error
  231.         pop de
  232.        jr c,loadloop0q
  233.         ld (de),a
  234.         inc e
  235.         ld hl,texfilename_pgnumend
  236. loadloop_nextdigit0
  237.         dec hl
  238.         ld a,(hl)
  239.         inc a
  240.         cp "0"+10
  241.         ld (hl),"0"
  242.         jr z,loadloop_nextdigit0
  243.         ld (hl),a
  244.         jr loadloop0
  245.         ;pop bc
  246.         ;djnz loadloop0
  247. loadloop0q
  248.        
  249.         ld a,(pgmain4000)
  250.         ld (tpages+CC_PAGE1),a
  251.         ld a,(pgmain8000)
  252.         ld (tpages+CC_PAGE2),a
  253. pgmainc000=$+1
  254.         ld a,0
  255.         ld (tpages+CC_PAGE3),a
  256.        
  257.         if 1==0
  258.         call loadpage
  259.         ld (pgmusic),a
  260.         SETPG16K
  261.         push af
  262.         call 0x4000 ;init
  263.         pop af
  264.         ld hl,0x4005 ;play
  265.         OS_SETMUSIC
  266.         endif
  267.         call setpgsmain40008000
  268.        
  269.         call swapimer
  270.  
  271.         ld de,CURPAL
  272.         OS_SETPAL
  273.  
  274.         if 1==0
  275.         ;jr $
  276.         ld c,10
  277.         ld b,2
  278.         ld de,0
  279. ;c=X, b=Y, de=tile
  280. ;координаты в тайлах
  281.         call _draw_tile
  282.         endif
  283.         call _swap_screen
  284. jpaddr=$+1
  285.         jp 0
  286. mainloop
  287.        
  288.         call changescrpg ;с этого момента можем видеть, что нарисовали
  289.        
  290. ;waitkey
  291.         halt ;в играх не юзаем YIELD, иначе может сработать чужой обработчик прерываний
  292. curkey=$+1
  293.         ld a,0
  294.         cp key_esc
  295.         jr nz,mainloop;waitkey
  296.        
  297.         call swapimer
  298. pgmusic=$+1
  299.         ld a,0
  300.         SETPG16K
  301.         ld hl,0x4008 ;stop
  302.         OS_SETMUSIC
  303.         halt
  304.         QUIT
  305.  
  306.         ds 0x0200-$
  307. tpages
  308.         ds 256 ;pages
  309.  
  310. loadbinpg
  311.         push hl
  312.         OS_OPENHANDLE
  313.         pop de ;addr
  314.         push bc
  315.          ;ld de,BINADDR ;addr
  316.          ;ld hl,0x4000 ;size
  317.          ;OS_READHANDLE
  318.          ;pop bc
  319.          ;push bc
  320.         ;ld de,BINADDR ;addr
  321.         ld hl,-BINADDR ;size
  322.         OS_READHANDLE
  323.         pop bc
  324.         OS_CLOSEHANDLE                
  325.         ret
  326.  
  327. loadpage
  328. ;заказывает страничку и грузит туда файл (имя файла в hl)
  329. ;out: hl=после имени файла, a=pg
  330. ;or else CY
  331.         push hl
  332.         ex de,hl
  333.         OS_OPENHANDLE
  334.         pop hl
  335.         or a
  336.         scf
  337.         ret nz
  338.         push hl
  339.        push bc
  340.         OS_NEWPAGE
  341.        pop bc
  342.         pop hl
  343.         ld a,e
  344.         push af ;pg
  345.        push bc
  346.         SETPG32KHIGH
  347.        pop bc
  348.         push hl
  349.         ex de,hl
  350.         ;OS_OPENHANDLE
  351.         push bc
  352.         ld de,0xc000 ;addr
  353.         ld hl,0x4000 ;size
  354.         OS_READHANDLE
  355.         pop bc
  356.         OS_CLOSEHANDLE                
  357.         pop hl
  358.         ld b,1
  359.         xor a
  360.         cpir ;after 0
  361.         pop af ;pg
  362.         or a ;CY=0
  363.         ret
  364.  
  365. CURPAL
  366. ;DDp palette: %grbG11RB(low),%grbG11RB(high), инверсные
  367.         dw 0xffff,0xfefe,0x1d1d,0x3c3c,0xcdcd,0x4c4c,0x2c2c,0xecec
  368.         dw 0xfdfd,0x2d2d,0xeeee,0x3f3f,0xafaf,0x5d5d,0x4e4e,0x0c0c
  369. ;RSTPAL
  370. ;        STANDARDPAL
  371.  
  372. sndfilename
  373.         db "page_0.bin",0
  374. sprtblfilename
  375.         db "page_1.bin",0
  376. palfilename
  377.         db "page_2.bin",0
  378.  
  379. texfilename
  380. texfilename_pgnumend=$+7;8
  381.         db "page_10.bin",0
  382.  
  383.  
  384.  
  385.  
  386. setpgsmain40008000
  387. pgmain4000=$+1
  388.         ld a,0
  389.         ;ld (curpg4000),a
  390.         SETPG16K
  391. pgmain8000=$+1
  392.         ld a,0
  393.         ;ld (curpg8000),a
  394.         SETPG32KLOW
  395.         ret
  396.  
  397. setpgsscr40008000_current
  398.         call getuser_scr_low_cur
  399.         ;ld (curpg4000),a ;TODO kill
  400.         SETPG16K
  401.         call getuser_scr_high_cur
  402.         ;ld (curpg8000),a ;TODO kill
  403.         SETPG32KLOW
  404.         ret
  405.  
  406. setpgsscr40008000
  407.         call getuser_scr_low
  408.         ;ld (curpg4000),a ;TODO kill
  409.         SETPG16K
  410.         call getuser_scr_high
  411.         ;ld (curpg8000),a ;TODO kill
  412.         SETPG32KLOW
  413.         ret
  414.  
  415. setpgscrlow4000
  416.         call getuser_scr_low
  417.         SETPG16K
  418.         ret
  419.  
  420. setpgscrhigh4000
  421.         call getuser_scr_high
  422.         SETPG16K
  423.         ret
  424.  
  425. getuser_scr_low
  426. getuser_scr_low_patch=$+1
  427. getuser_scr_low_patchN=0xff&(user_scr0_low^user_scr1_low)
  428.         ld a,(user_scr1_low) ;ok
  429.         ret
  430.  
  431. getuser_scr_high
  432. getuser_scr_high_patch=$+1
  433. getuser_scr_high_patchN=0xff&(user_scr0_high^user_scr1_high)
  434.         ld a,(user_scr1_high) ;ok
  435.         ret
  436.  
  437. getuser_scr_low_cur
  438. getuser_scr_low_cur_patch=$+1
  439. getuser_scr_low_cur_patchN=0xff&(user_scr0_low^user_scr1_low)
  440.         ld a,(user_scr0_low) ;ok
  441.         ret
  442.  
  443. getuser_scr_high_cur
  444. getuser_scr_high_cur_patch=$+1
  445. getuser_scr_high_cur_patchN=0xff&(user_scr0_high^user_scr1_high)
  446.         ld a,(user_scr0_high) ;ok
  447.         ret
  448.  
  449. changescrpg_current
  450. ;        ld a,(setpgs_scr_low)
  451. ;setpgs_scr_scrxor=$+1
  452. ;        xor 0
  453. ;        ld (setpgs_scr_low),a
  454.         ld hl,getuser_scr_low_patch
  455.         ld a,(hl)
  456.         xor getuser_scr_low_patchN
  457.         ld (hl),a
  458.         ld hl,getuser_scr_high_patch
  459.         ld a,(hl)
  460.         xor getuser_scr_high_patchN
  461.         ld (hl),a
  462.         ld hl,getuser_scr_low_cur_patch
  463.         ld a,(hl)
  464.         xor getuser_scr_low_cur_patchN
  465.         ld (hl),a
  466.         ld hl,getuser_scr_high_cur_patch
  467.         ld a,(hl)
  468.         xor getuser_scr_high_cur_patchN
  469.         ld (hl),a
  470.  
  471.         ld a,1
  472. curscrnum=$+1
  473.         xor 0
  474.         ld ($-1),a
  475.         ret
  476.        
  477. changescrpg
  478. ;TODO убрать
  479.         ;jr $
  480.         call changescrpg_current
  481.         ;ld (curscrnum_physical),a
  482.         ld e,a
  483.         OS_SETSCREEN
  484.         ret
  485.  
  486. setpg4000
  487.         ld ($+4),a
  488.         ld a,(tpages)
  489.         SETPG16K
  490.         ret
  491.  
  492. setpg8000
  493.         ld ($+4),a
  494.         ld a,(tpages)
  495.         SETPG32KLOW
  496.         ret
  497.  
  498. setpgc000
  499.         ld ($+4),a
  500.         ld a,(tpages)
  501.         SETPG32KHIGH
  502.         ret
  503.  
  504. setShadowScreen
  505.         MSetShadowScreen
  506.         ret
  507.  
  508. _clear_screen
  509.         and 15
  510.         ld l,a
  511.         ld h,high colorMaskTable
  512.         ld e,(hl)
  513.         call setShadowScreen
  514.         ld hl,#4000
  515.         ld (hl),e
  516.         ld de,#4001
  517.         ld bc,#7fff
  518.         call _fast_ldir
  519. RestoreMemMap12
  520.         MRestoreMemMap12
  521.         ret
  522.  
  523. _swap_screen
  524.         push ix
  525.         push iy
  526.  
  527.         ld a,(spritesActive)
  528.         or a
  529.         push af
  530.         jr z,.noSpr0
  531.         call setShadowScreen
  532.         call updateTilesToBuffer
  533.         call prspr
  534. .noSpr0
  535.  
  536.         halt
  537.  
  538.         ;ld a,(_screenActive)
  539.         ;xor 2
  540.         ;ld (_screenActive),a
  541.         ;ld e,a
  542.  
  543.         ;ld a,#10
  544.         ;bit 1,e
  545.         ;jr z,$+4
  546.         ;or #08
  547.         ;ld bc,#7ffd
  548.         ;out (c),a
  549.          call changescrpg
  550.          ;rra
  551.          ;and 1 ;+cpl?
  552.          ;ld e,a
  553.          ;OS_SETSCREEN
  554.  
  555.         pop af
  556.         jr z,.noSpr1
  557.  
  558.         call setShadowScreen
  559.         call respr
  560.         call updateTilesFromBuffer
  561.         ;MRestoreMemMap012
  562.         call RestoreMemMap3;0
  563.         call RestoreMemMap12
  564. .noSpr1
  565.         pop iy
  566.         pop ix
  567.         ret
  568.  
  569. pal_get_address
  570.         ld h,0
  571.         ld l,a
  572.         add hl,hl
  573.         add hl,hl
  574.         add hl,hl
  575.         add hl,hl
  576.          set 7,h
  577.          set 6,h
  578.  
  579.         ;ld bc,MEM_SLOT0
  580.         ld a,PAL_PAGE
  581.         ;out (c),a
  582.         call setpgc000;SETPG32KHIGH
  583.         ret
  584.  
  585.  
  586.  
  587. _pal_select
  588.         call pal_get_address
  589.  
  590.         ld de,_palette
  591.         ld bc,16
  592.         ldir
  593.  
  594.         ld a,d
  595.         ld (_palChange),a
  596. RestoreMemMap3;0
  597.         ;ld bc,MEM_SLOT0
  598.         ld a,CC_PAGE3;0
  599.         ;out (c),a
  600.         call setpgc000;SETPG32KHIGH
  601.         ret
  602.  
  603.  
  604.  
  605. _pal_bright
  606.         cp 7
  607.         jr c,.l1
  608.         ld a,6
  609. .l1
  610.         ld h,a
  611.         ld l,0
  612.         srl h
  613.         rr l
  614.         srl h
  615.         rr l
  616.         ld (_palBright),hl
  617.         ld a,1
  618.         ld (_palChange),a
  619.         ret
  620.  
  621.  
  622.  
  623. _pal_copy
  624.         push de
  625.         call pal_get_address
  626.  
  627.         ld de,palTemp
  628.         ld bc,16
  629.         ldir
  630.  
  631.         ;ld bc,MEM_SLOT0
  632.         ld a,CC_PAGE3;0
  633.         ;out (c),a
  634.         call setpgc000;SETPG32KHIGH
  635.  
  636.         pop de
  637.         ld hl,palTemp
  638.         ld bc,16
  639.         ldir
  640.  
  641.         ret
  642.  
  643.  
  644. prspr
  645. respr
  646.         ;TODO
  647.         ret
  648.  
  649.  
  650. ;более быстрая версия ldir, эффективна при bc>12
  651. ;из статьи на MSX Assembly Page
  652. ;в отличие от нормального ldir портит A и флаги
  653.  
  654. _fast_ldir
  655. DOSorTFM=0
  656.         ifdef DOS
  657. DOSorTFM=1
  658.         endif
  659.         ifdef TFM
  660. DOSorTFM=1
  661.         endif
  662.        
  663.         if DOSorTFM
  664.         ldir
  665.         ret
  666.         else
  667.  
  668.         xor a
  669.         sub c
  670.         and 63
  671.         add a,a
  672.         ld (.jump),a
  673. .jump=$+1
  674.         jr nz,.loop
  675. .loop
  676.         dup 64
  677.         ldi
  678.         edup
  679.         jp pe,.loop
  680.         ret
  681.  
  682.         endif ;~DOSorTFM
  683.  
  684.         align 256       ;#nn00
  685. tileUpdateXTable
  686.         dup 8
  687.         db #01,#02,#04,#08,#10,#20,#40,#80
  688.         edup
  689. .x=0
  690.         dup 64
  691.         db .x>>3
  692. .x=.x+1
  693.         edup
  694.  
  695.  
  696.         align 256       ;#nn00
  697. colorMaskTable
  698.         db #00,#09,#12,#1b,#24,#2d,#36,#3f      ;для двух пикселей
  699.         db #c0,#c9,#d2,#db,#e4,#ed,#f6,#ff
  700.         db #00,#01,#02,#03,#04,#05,#06,#07      ;для ink
  701.         db #40,#41,#42,#43,#44,#45,#46,#47
  702.         ds 16,0
  703.         db #00,#08,#10,#18,#20,#28,#30,#38      ;для paper
  704.         db #80,#88,#90,#98,#a0,#a8,#b0,#b8
  705.  
  706.  
  707.         align 256
  708. _sprqueue
  709. _sprqueue0      ;формат 4 байта на спрайт, idh,idl,y,x (idh=255 конец списка)
  710.         ds 256,255
  711. _sprqueue1
  712.         ds 256,255
  713.  
  714.         align 256
  715. palBrightTable
  716.         db #ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff      ;bright 0
  717.         db #ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff
  718.         db #ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff
  719.         db #ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff,#ff
  720.         db #ff,#ff,#ff,#bf,#ff,#ff,#ff,#bf,#ff,#ff,#ff,#bf,#7f,#7f,#7f,#3f      ;bright 1
  721.         db #ff,#ff,#ff,#bf,#ff,#ff,#ff,#bf,#ff,#ff,#ff,#bf,#7f,#7f,#7f,#3f
  722.         db #ff,#ff,#ff,#bf,#ff,#ff,#ff,#bf,#ff,#ff,#ff,#bf,#7f,#7f,#7f,#3f
  723.         db #df,#df,#df,#9f,#df,#df,#df,#9f,#df,#df,#df,#9f,#5f,#5f,#5f,#1f
  724.         db #ff,#ff,#bf,#fd,#ff,#ff,#bf,#fd,#7f,#7f,#3f,#7d,#ef,#ef,#af,#ed      ;bright 2
  725.         db #ff,#ff,#bf,#fd,#ff,#ff,#bf,#fd,#7f,#7f,#3f,#7d,#ef,#ef,#af,#ed
  726.         db #df,#df,#9f,#dd,#df,#df,#9f,#dd,#5f,#5f,#1f,#5d,#cf,#cf,#8f,#cd
  727.         db #fe,#fe,#be,#fc,#fe,#fe,#be,#fc,#7e,#7e,#3e,#7c,#ee,#ee,#ae,#ec
  728.         db #ff,#bf,#fd,#bd,#7f,#3f,#7d,#3d,#ef,#af,#ed,#ad,#6f,#2f,#6d,#2d      ;bright 3
  729.         db #df,#9f,#dd,#9d,#5f,#1f,#5d,#1d,#cf,#8f,#cd,#8d,#4f,#0f,#4d,#0d
  730.         db #fe,#be,#fc,#bc,#7e,#3e,#7c,#3c,#ee,#ae,#ec,#ac,#6e,#2e,#6c,#2c
  731.         db #de,#9e,#dc,#9c,#5e,#1e,#5c,#1c,#ce,#8e,#cc,#8c,#4e,#0e,#4c,#0c
  732.         db #1f,#5d,#1d,#1d,#8f,#cd,#8d,#8d,#0f,#4d,#0d,#0d,#0f,#4d,#0d,#0d      ;bright 4
  733.         db #3e,#7c,#3c,#3c,#ae,#ec,#ac,#ac,#2e,#6c,#2c,#2c,#2e,#6c,#2c,#2c
  734.         db #1e,#5c,#1c,#1c,#8e,#cc,#8c,#8c,#0e,#4c,#0c,#0c,#0e,#4c,#0c,#0c
  735.         db #1e,#5c,#1c,#1c,#8e,#cc,#8c,#8c,#0e,#4c,#0c,#0c,#0e,#4c,#0c,#0c
  736.         db #ec,#ac,#ac,#ac,#6c,#2c,#2c,#2c,#6c,#2c,#2c,#2c,#6c,#2c,#2c,#2c      ;bright 5
  737.         db #cc,#8c,#8c,#8c,#4c,#0c,#0c,#0c,#4c,#0c,#0c,#0c,#4c,#0c,#0c,#0c
  738.         db #cc,#8c,#8c,#8c,#4c,#0c,#0c,#0c,#4c,#0c,#0c,#0c,#4c,#0c,#0c,#0c
  739.         db #cc,#8c,#8c,#8c,#4c,#0c,#0c,#0c,#4c,#0c,#0c,#0c,#4c,#0c,#0c,#0c
  740.         db #0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c      ;bright 6
  741.         db #0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c
  742.         db #0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c
  743.         db #0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c,#0c
  744.  
  745.         align 256       ;#nn00
  746. scrTable
  747. adr=#4000
  748.         dup 25
  749.         db low adr
  750. adr=adr+(40*8)
  751.         edup
  752.         align 32        ;#nn20
  753. adr=#4000
  754.         dup 25
  755.         db high adr
  756. adr=adr+(40*8)
  757.         edup
  758.  
  759. tileUpdateMap   ;битовая карта обновившихся знакомест, 64x25 бит
  760.         ds 8*25,0
  761.  
  762.         ;export changescrpg
  763.  
  764.         export _pal_select
  765.         export _pal_copy
  766.         export _pal_bright
  767.         export _swap_screen
  768.         export _clear_screen
  769.         export _fast_ldir
  770.  
  771.         include "int.asm"
  772.         include "lib_tiles.asm"
  773.  
  774.         export _draw_tile
  775.         export _draw_image
  776.         export _select_image
  777.         export _draw_tile_key
  778.         export _color_key
  779.  
  780.         include "lib_input.asm"
  781.  
  782.         export _joystick
  783.         export _keyboard
  784.         export _mouse_apply_clip
  785.  
  786. _sample_play
  787. ;проигрывание сэмпла
  788. ;l=номер сэмпла
  789.         ld a,(curpg32khigh) ;ok
  790.         push af
  791.         ld a,SND_PAGE
  792.         call setpgc000
  793.         ld a,(SMP_COUNT|0xc000)
  794.         ld e,a
  795.         ld a,l
  796.         cp e
  797.         jr nc,.skip
  798.  
  799.         ld h,high (SMP_LIST|0xc000)
  800.         ld e,(hl)       ;lsb
  801.         inc h
  802.         ld a,(hl)       ;msb
  803.         or 0xc0
  804.         ld d,a
  805.         inc h
  806.         ld a,(hl)       ;page
  807.         cpl
  808.         inc h
  809.         ld h,(hl)       ;delay
  810.         ex de,hl ;hl=data
  811.         ld hx,d ;delay
  812.         ld e,a
  813.         ld d,tpages/256
  814. ;hl=data (0xc000+, 0x00=end), de=pagetable (0x0000+), hx=delay (18=11kHz, 7=22kHz, 1=44kHz)
  815.         OS_PLAYCOVOX
  816. .skip
  817.         pop af
  818.         SETPG32KHIGH
  819.         ret
  820.  
  821. ;выключение звука на указанном чипе
  822. ;a=0 или 1
  823. reset_ay
  824. ;используется в _sfx_stop, _music_stop
  825.         ifdef TFM
  826.         push af
  827.         di
  828.  
  829.         call turbo_off
  830.  
  831.         ld a,SND_PAGE
  832.         call setpg4000
  833.         ld a,(TURBOFMON)
  834.         or a
  835.         call nz,#400f;tfmshut
  836.         ld a,CC_PAGE1
  837.         call setpg4000
  838.         pop af
  839.         call reset_ay_ay
  840.  
  841.         call turbo_on
  842.  
  843.         ei
  844.         ret
  845.  
  846.         else
  847.  
  848.         di
  849.         call reset_ay_ay
  850.         ei
  851.         ret
  852.  
  853.         endif
  854.  
  855.         if 1==0
  856. turbo_on
  857.         ld a,%10101000 ;режим EGA с турбо
  858.         ld bc,#bd77
  859.         out (c),a
  860.         ret
  861.  
  862. turbo_off
  863.         ld a,%10100000 ;режим EGA без турбо, так как в 14 МГц скорость нестабильна
  864.         ld bc,#bd77
  865.         out (c),a
  866.         ret
  867.         endif
  868.  
  869. reset_ay_ay
  870. ;в TFM нужно для глушения AY перед выводом эффектов
  871.         push af
  872.         ifdef TFM
  873.         or %11111000
  874.         ;or %11111010           ;no wait sync
  875.         else
  876.         or #fe
  877.         endif
  878.         ld bc,#fffd
  879.         out (c),a
  880.  
  881.         xor a
  882.         ld l,a
  883. .l0
  884.         ld b,#ff
  885.         ifdef TFM
  886.         call libstartup_waitstatus
  887.         endif
  888.         out (c),a
  889.         ifdef TFM
  890.         call libstartup_waitstatus
  891.         endif
  892.         ld b,#bf
  893.         out (c),l
  894.         inc a
  895.         cp 14
  896.         jr nz,.l0
  897.         pop af
  898.         ret
  899.  
  900. ;запуск звукового эффекта
  901. _sfx_play
  902.         push bc
  903.         ld a,SND_PAGE
  904.         call setpg4000
  905.         pop bc
  906.         ld a,b
  907.         call AFX_PLAY
  908.         ld a,CC_PAGE1
  909.         jp setpg4000
  910.  
  911. ;останов звуковых эффектов
  912. _sfx_stop
  913.         xor a
  914.         jp reset_ay
  915.  
  916. ;запуск музыки
  917. _music_play
  918.         push ix
  919.         push iy
  920.         push af
  921.         ld a,SND_PAGE
  922.         call setpg4000
  923.  
  924.         ld a,(MUS_COUNT)
  925.         ld l,a
  926.         pop af
  927.  
  928.         cp l
  929.         jr nc,.skip
  930.  
  931.         ld h,high MUS_LIST
  932.         ld l,a
  933.  
  934.         ld e,(hl)
  935.         inc h
  936.         ld d,(hl)
  937.         inc h
  938.         ld a,(hl)
  939.         ex de,hl
  940.         di
  941.         ld (musicPage),a
  942.         call setpg8000
  943.         ifdef TFM
  944.         ld a,(TURBOFMON)
  945.         or a
  946.         call nz,PT3_INIT
  947.         else
  948.         ld bc,#fffd
  949.         ld a,#fe
  950.         out (c),a
  951.         call PT3_INIT
  952.         endif
  953.         ei
  954.         ld a,CC_PAGE2
  955.         call setpg8000
  956.  
  957. .skip
  958.         pop iy
  959.         pop ix
  960.  
  961.         ld a,CC_PAGE1
  962.         jp setpg4000
  963.  
  964.  
  965.  
  966. ;выключение музыки
  967. _music_stop
  968.         xor a
  969.         ld (musicPage),a
  970.         jp reset_ay
  971.        
  972.         export _music_play
  973.         export _music_stop
  974.         export _sample_play
  975.         export _sfx_play
  976.         export _sfx_stop
  977.  
  978.  
  979. ;переменные
  980.  
  981. musicPage               db 0
  982. tileOffset              dw 0
  983. spritesActive   db 0    ;1 если вывод спрайтов разрешён
  984. tileUpdate              db 0    ;1 если выводились тайлы, для системы обновления фона под спрайтами
  985. palTemp                 ds 16,0
  986. keysPrevState   ds 40,0
  987.         ifdef TFM
  988. ;turboFM                        db 0    ;!=0 если есть TFM
  989.         else
  990. turboSound              db 0    ;!=0 если есть TS
  991.         endif
  992.  
  993. ;экспортируемые переменные
  994.  
  995.         macro rgb222 b2,g2,r2
  996.         db (((r2&3)<<4)|((g2&3)<<2)|(b2&3))
  997.         endm
  998.  
  999.         align 16
  1000. _palette
  1001.         rgb222(0,0,0)
  1002.         rgb222(0,0,2)
  1003.         rgb222(2,0,0)
  1004.         rgb222(2,0,2)
  1005.         rgb222(0,2,0)
  1006.         rgb222(0,2,2)
  1007.         rgb222(2,2,0)
  1008.         rgb222(2,2,2)
  1009.         rgb222(0,0,0)
  1010.         rgb222(0,0,3)
  1011.         rgb222(3,0,0)
  1012.         rgb222(3,0,3)
  1013.         rgb222(0,3,0)
  1014.         rgb222(0,3,3)
  1015.         rgb222(3,3,0)
  1016.         rgb222(3,3,3)
  1017.  
  1018. ;_memSlot1
  1019. ;curpg4000
  1020. ;        db 0
  1021. ;_memSlot2
  1022. ;curpg8000
  1023. ;        db 0
  1024. ;_memSlot3
  1025. ;curpgc000
  1026. ;        db 0
  1027.  
  1028. _borderCol      db 0
  1029. _palBright      dw 3<<6
  1030. _palChange      db 1
  1031. _screenActive   db 0    ;~1 или ~3
  1032. _mouse_dx       db 0
  1033. _mouse_dy       db 0
  1034. _mouse_x        db 80
  1035. _mouse_y        db 100
  1036. _mouse_cx1      db 0
  1037. _mouse_cx2      db 160
  1038. _mouse_cy1      db 0
  1039. _mouse_cy2      db 200
  1040. _mouse_btn      db 0
  1041. _mouse_prev_dx  db 0
  1042. _mouse_prev_dy  db 0
  1043. _time           dd 0
  1044.  
  1045.         export _borderCol
  1046.         export _palBright
  1047.         export _palChange
  1048.         export _sprqueue
  1049.         export _screenActive
  1050.         export _mouse_dx
  1051.         export _mouse_dy
  1052.         export _mouse_x
  1053.         export _mouse_y
  1054.         export _mouse_cx1
  1055.         export _mouse_cx2
  1056.         export _mouse_cy1
  1057.         export _mouse_cy2
  1058.         export _mouse_btn
  1059.         export _time
  1060.         export _palette
  1061.  
  1062.        
  1063. res_path
  1064.         db "nedoload",0 ;в этом относительном пути будут лежать все загружаемые данные игры
  1065. fnbin
  1066.         ;db "code0.bin",0
  1067.         db "page_101.bin",0
  1068. fnbin2
  1069.         db "page_102.bin",0
  1070. fnbin3
  1071.         db "page_103.bin",0
  1072. fnaddr
  1073.         db "addr.bin",0
  1074. end        
  1075.  
  1076.         display "begin=",begin
  1077.         display "end=",end
  1078.         display "Size ",/d,end-begin," bytes"
  1079.        
  1080.         savebin "nedoload.com",begin,end-begin
  1081.        
  1082.         LABELSLIST "..\..\..\us\user.l"
  1083.