?login_element?

Subversion Repositories NedoOS

Rev

Rev 811 | 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. STACK=0x4000;0x61a8
  5. GAMESTACK=0x4000;0xFFFF
  6. L_FDFD=0xfdfd
  7. L_FE00=0xfe00
  8.  
  9. scrbase=0x4000+4
  10. sprmaxwid=32
  11. sprmaxhgt=32
  12. scrwid=128;160 ;double pixels
  13. scrhgt=176;192;200
  14. INTSTACK=0x3f00
  15. tempsp=0x3f06 ;6 bytes for prspr
  16.  
  17. ;screenYtable=0x8b00
  18.  
  19. USEINT=1
  20. EGA=1
  21.  
  22.         org PROGSTART
  23. begin
  24.         jp begin2 ;/prsprqwid (sprites in file are made so that they return here)
  25. begin2
  26.         ld sp,STACK
  27.         OS_HIDEFROMPARENT
  28.  
  29.         ld e,3+0x80 ;6912+[8noturbo]+keep
  30.         OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode)
  31.  
  32.         ;ld e,1
  33.         ;OS_SETSCREEN
  34.         ld e,0 ;color byte
  35.         OS_CLS
  36.         ;ld e,0
  37.         ;OS_SETSCREEN
  38.         ;ld e,0 ;color byte
  39.         ;OS_CLS
  40.  
  41.         OS_GETMAINPAGES
  42. ;dehl=pages in 0000,4000,8000,c000
  43.         ld a,e
  44.         ld (pggfx),a
  45.         ld a,h
  46.         ld (pgcode8000),a
  47.         ld a,l
  48.         ld (pgcodec000),a
  49.         ;jr $
  50.  
  51.         OS_NEWPAGE
  52.         ld a,e
  53.         ld (pgmain4000),a
  54.  
  55.         if 1==0
  56.         ld de,res_path
  57.         OS_CHDIR
  58.  
  59.         call setpgsscr40008000
  60.  
  61.         ld de,emptypal
  62.         OS_SETPAL
  63.         ld de,bmpfilename
  64.         call openstream_file
  65.         call readbmphead_pal
  66.         call readbmpscr
  67.         call closestream_file
  68.         ld de,pal
  69.         OS_SETPAL
  70.        
  71.         call setpgsmain40008000
  72.  
  73.         ;ld b,50
  74.         ;halt
  75.         ;djnz $-1
  76.         YIELDGETKEYLOOP
  77.  
  78.         ld e,3+0x80 ;6912+[noturbo]+keep
  79.         OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode)
  80.         ld e,0 ;color byte
  81.         OS_CLS
  82.         ld de,standardpal
  83.         OS_SETPAL
  84.         YIELD
  85.         endif
  86.  
  87.         if 1==1
  88.         ld a,(user_scr0_high) ;ok
  89.         SETPG32KLOW
  90.         ld hl,0x4000
  91.         ld de,0x4000+0x4000
  92.         ld bc,0x4000
  93.         ldir
  94.         ;ld a,(user_scr0_high)
  95.         SETPG16K
  96.         ld a,(pgcode8000)
  97.         SETPG32KLOW
  98.         endif
  99.         ld a,(user_scr0_high) ;ok
  100.         SETPG16K
  101.        
  102.         call swapimer
  103.  
  104.         if EGA
  105.         ld hl,prsprqwid
  106.         ld (0x0101),hl ;sprites in file are made so that they return in 0x0100
  107.         endif
  108.  
  109.         if 1==0
  110.         ld l,0
  111.         LD      BC,#0000
  112. showtiles0
  113.         LD      A,l;(HL)
  114.         INC     HL
  115.         CALL    DrawTile
  116.         INC     C
  117.         INC     C
  118.         LD      A,#20
  119.         CP      C
  120.         JR      NZ,showtiles0
  121.         INC     B
  122.         INC     B
  123.         LD      A,#16
  124.         CP      B
  125.         JR      Z,$;CopyScreenToBufferScreen
  126.         LD      DE,48;#000E
  127.         ADD     HL,DE
  128.         LD      C,#00
  129.         JR      showtiles0
  130.         endif
  131.  
  132.         if 1==0
  133.         ld hl,0x4000
  134.         ld de,0x4001
  135.         ld bc,0x1800
  136.         ld (hl),-1;l;0
  137.         ldir
  138.         ld bc,0x2ff
  139.         ld (hl),7
  140.         ldir
  141.         ld hl,0x4000
  142.         ld de,0xc000
  143.         ld bc,0x1800
  144.         ldir
  145.  
  146.         ld a,24
  147.         ld (spritehgt),a
  148.        
  149.         di
  150.         xor a
  151.         ld ix,therosprites
  152.         call showspritespp
  153.         ld a,32
  154.         ld ix,talien1sprites
  155.         call showspritespp
  156.         ld a,64
  157.         ld ix,talien2sprites
  158.         call showspritespp
  159.         ei
  160.         endif
  161.  
  162.         YIELDGETKEYLOOP
  163.        
  164.         ;jr $
  165.         jp GO
  166.  
  167.         if 1==0
  168. showspritespp
  169.         ld (spritey),a
  170.         ld (ix+5),0 ;phase
  171.         xor a
  172. showsprites0
  173.         push af
  174.         ld (spriteX),a
  175.         call L_6C53
  176.         pop af
  177.         inc (ix+5)
  178.         add a,3
  179.         cp 9*3
  180.         jr nz,showsprites0
  181.         ret
  182.         endif
  183.  
  184.         include "pal.ast" ;pal
  185. standardpal
  186.         STANDARDPAL
  187. emptypal
  188.         ds 32,0xff
  189.  
  190. jphl
  191.         jp (hl)
  192.  
  193. CheckBreak
  194.         ld a,0xfe
  195.         in a,(0xfe)
  196.         rra
  197.         ret c
  198.         ld a,0x7f
  199.         in a,(0xfe)
  200.         rra
  201.         ret
  202. WaitKeyCheckQuit
  203.         call WaitKey
  204.         call CheckBreak
  205.         ret c
  206. quiter
  207.         if 1==0
  208.         halt
  209. pgmuznum=$+1
  210.         ld a,0
  211.         SETPG32KHIGH
  212.           ld hl,muz
  213.           OS_SETMUSIC
  214.         halt
  215.         endif
  216.         call swapimer
  217.         im 1
  218.         call killmuz ;because we played music not by OS
  219.         QUIT
  220.  
  221. killmuz
  222.         ld a,0xfe
  223.         call shut1ay
  224.         ld a,0xff
  225. shut1ay
  226.         ld bc,0xfffd
  227.         out (c),a
  228.         ld de,0x0e00
  229. shutay0
  230.         dec d
  231.         ld b,0xff
  232.         out (c),d
  233.         ld b,0xbf
  234.         out (c),e
  235.         jr nz,shutay0
  236.         ret
  237.  
  238. redattr_killable2b
  239.         dw 0
  240.  
  241. ;L_5B00 ;= #5b00
  242. ;        db 0
  243.  
  244. setpggfxc000
  245. pggfx=$+1
  246.         ld a,0
  247.         SETPG32KHIGH
  248.         ret
  249. setpgcodec000
  250. pgcodec000=$+1
  251.         ld a,0
  252.         SETPG32KHIGH
  253.         ret
  254.  
  255. swapimer
  256.         di
  257.         ld de,0x0038
  258.         ld hl,oldimer
  259.         ld bc,3
  260. swapimer0
  261.         ld a,(de)
  262.         ldi ;[oldimer] -> [0x0038]
  263.         dec hl
  264.         ld (hl),a ;[0x0038] -> [oldimer]
  265.         inc hl
  266.         jp pe,swapimer0
  267.         ei
  268.         ret
  269. oldimer
  270.         jp on_int ;чрьхэшЄё  эр ъюф шч 0x0038
  271.         jp 0x0038+3    
  272.  
  273. reter
  274.         ret
  275.  
  276. tstarttime       DB       #00,#00,#00
  277. curgametimer       DB       #00,#00,#00
  278. stoptimer       DB       #00
  279. curtimerlow       DB       #00
  280. ;
  281. on_int
  282. ;restore stack with de
  283.         EX DE,HL
  284.         EX (SP),HL ;de="hl", stack contains "de"
  285.         LD (on_int_jp),HL
  286.         LD (on_int_sp),SP
  287.         LD SP,INTSTACK
  288.         push af
  289.         push bc
  290.         push de ;"hl"
  291.         exx
  292.         ex af,af' ;'
  293.         push af
  294.         push bc
  295.         push de
  296.         push hl
  297.         push ix
  298.         push iy
  299. imer_addr=$+1
  300.         call reter
  301.         ;DI
  302. ;curscrnum_int=$+1
  303. ;        ld e,0
  304. ;        OS_SETSCREEN
  305.         call oldimer ;ei
  306.          GET_KEY
  307.          jr nz,Imer_nofocus
  308.          ;ld a,(user_scr0_high) ;ok
  309.          ;SETPG16K ;TODO redraw screen when retake focus???
  310. Imer_nofocus
  311.         ;LD     A,(stoptimer)
  312.         ;OR     A
  313.         ;CALL   Z,DecTimer
  314.         pop iy
  315.         pop ix
  316.         pop hl
  317.         pop de
  318.         pop bc
  319.         pop af
  320.         ex af,af' ;'
  321.         exx
  322.         pop hl
  323.         pop bc
  324.         pop af        
  325. on_int_sp=$+1
  326.         ld sp,0
  327.         pop de
  328.         ei
  329. on_int_jp=$+1
  330.         jp 0
  331. ;
  332. ;
  333. RIGHTPIX=0x38;0xb8;%10111000
  334. LEFTPIX=0x07;0x47;%01000111
  335.         macro FONTBYTE
  336.         ld a,(de)
  337.         ld c,a
  338.         xor a
  339.         rl c
  340.         jr nc,$+4
  341.          or LEFTPIX
  342.         rl c
  343.         jr nc,$+4
  344.          or RIGHTPIX
  345.         ld (hl),a
  346.         ld a,h
  347.         add a,0x40
  348.         ld h,a
  349.         xor a
  350.         rl c
  351.         jr nc,$+4
  352.          or LEFTPIX
  353.         rl c
  354.         jr nc,$+4
  355.          or RIGHTPIX
  356.         ld (hl),a
  357.         ld a,h
  358.         add a,0x20-0x40
  359.         ld h,a
  360.         xor a
  361.         rl c
  362.         jr nc,$+4
  363.          or LEFTPIX
  364.         rl c
  365.         jr nc,$+4
  366.          or RIGHTPIX
  367.         ld (hl),a
  368.         ld a,h
  369.         add a,0x40
  370.         ld h,a
  371.         xor a
  372.         rl c
  373.         jr nc,$+4
  374.          or LEFTPIX
  375.         rl c
  376.         jr nc,$+4
  377.          or RIGHTPIX
  378.         ld (hl),a
  379.         endm
  380.  
  381. PrintCharA_EGA
  382.         push bc
  383.         push de
  384.         push hl
  385.         push ix
  386.        push af
  387.         ld d,c
  388.         ld e,b
  389.         call setpgsscr40008000
  390.         ;LD     DE,(curprintyx)
  391.         sla e
  392.         sla e
  393.         sla e
  394.         ld a,d ;x
  395.          add a,4
  396.         ld l,e ;y
  397.         ld h,0
  398.         ld d,h
  399.         ld e,l
  400.         add hl,hl
  401.         add hl,hl
  402.         add hl,de ;*5
  403.          add hl,hl
  404.          add hl,hl
  405.          add hl,hl ;*40
  406.         add a,l
  407.         ld l,a
  408.         ld a,h
  409.         adc a,0x40
  410.         ld h,a
  411.        pop af
  412.         PUSH    HL
  413.         LD      DE,Font-256;L_BE02
  414.         LD      H,#00
  415.         LD      L,A
  416.         ADD     HL,HL
  417.         ADD     HL,HL
  418.         ADD     HL,HL
  419.         ADD     HL,DE
  420.         EX      DE,HL
  421.         POP     HL
  422.         LD      hx,#08
  423. PrintCharA_EGA0
  424.         FONTBYTE
  425.         ld bc,40-0x6000
  426.         add hl,bc
  427.         INC     DE
  428.         dec hx
  429.         jr nz,PrintCharA_EGA0
  430.         if 1==0
  431.         LD      DE,(curprintyx)
  432.         INC     D
  433.         LD      A,D
  434.         CP      #20
  435.         JR      NZ,PrintCharA_EGAq
  436.         INC     E
  437.         LD      D,#00
  438.         LD      A,E
  439.         CP      #18
  440.         JR      NZ,PrintCharA_EGAq
  441.         LD      E,#00
  442. PrintCharA_EGAq
  443.         LD      (curprintyx),DE
  444.         endif
  445.         call setpgsmain40008000
  446.         pop ix
  447.         pop hl
  448.         pop de
  449.         pop bc
  450.         ret
  451.        
  452.         if 1==0
  453. PrintCharA
  454.         PUSH    DE
  455.         PUSH    HL
  456.         PUSH    BC
  457.         PUSH    AF
  458.         LD      DE,(curprintyx)
  459.         LD      A,E
  460.         AND     #18
  461.         OR      #40
  462.         LD      H,A
  463.         LD      A,E
  464.         AND     #07
  465.         OR      A
  466.         RRA
  467.         RRA
  468.         RRA
  469.         RRA
  470.         ADD     A,D
  471.         LD      L,A
  472.         POP     AF
  473.         PUSH    HL
  474.         LD      DE,Font-256;L_BE02
  475.         LD      H,#00
  476.         LD      L,A
  477.         ADD     HL,HL
  478.         ADD     HL,HL
  479.         ADD     HL,HL
  480.         ADD     HL,DE
  481.         EX      DE,HL
  482.         POP     HL
  483.         LD      B,#08
  484. L_C6EB  LD      A,(DE)
  485.         LD      (HL),A
  486.         INC     H
  487.         INC     DE
  488.         DJNZ    L_C6EB
  489.         if 1==1
  490.         LD      DE,(curprintyx)
  491.         INC     D
  492.         LD      A,D
  493.         CP      #20
  494.         JR      NZ,L_C705
  495.         INC     E
  496.         LD      D,#00
  497.         LD      A,E
  498.         CP      #18
  499.         JR      NZ,L_C705
  500.         LD      E,#00
  501. L_C705  LD      (curprintyx),DE
  502.         endif
  503.         POP     BC
  504.         POP     HL
  505.         POP     DE
  506.         RET
  507. ;
  508. curprintyx       DW       #0000
  509. ;
  510. PrintStringHL
  511.         LD      A,(HL)
  512.         OR      A
  513.         RET     Z
  514.         CP      #16
  515.         JR      Z,L_C71C
  516.         CALL    PrintCharA
  517.         INC     HL
  518.         JR      PrintStringHL
  519. L_C71C  INC     HL
  520.         LD      E,(HL)
  521.         INC     HL
  522.         LD      D,(HL)
  523.         INC     HL
  524.         LD      (curprintyx),DE
  525.         JR      PrintStringHL
  526. ;
  527. PrintStringHL_EGA
  528.         LD      A,(HL)
  529.         OR      A
  530.         RET     Z
  531.         CP      #16
  532.         JR      Z,L_C71C_EGA
  533.         CALL    PrintCharA_EGA
  534.         INC     HL
  535.         JR      PrintStringHL_EGA
  536. L_C71C_EGA
  537.         INC     HL
  538.         LD      E,(HL)
  539.         INC     HL
  540.         LD      D,(HL)
  541.         INC     HL
  542.         LD      (curprintyx),DE
  543.         JR      PrintStringHL_EGA
  544.         endif
  545.  
  546. setpgsmain40008000
  547. pgmain4000=$+1
  548.         ld a,0
  549.         SETPG16K
  550. pgcode8000=$+1
  551.         ld a,0
  552.         SETPG32KLOW
  553.         ret
  554.  
  555. setpgsscr40008000;_current
  556.         call getuser_scr_low_cur
  557.         SETPG16K
  558.         call getuser_scr_high_cur
  559.         SETPG32KLOW
  560.         ret
  561.  
  562. setpgsscr40008000_buf
  563.         call getuser_scr_low
  564.         SETPG16K
  565.         call getuser_scr_high
  566.         SETPG32KLOW
  567.         ret
  568.  
  569. getuser_scr_low
  570. getuser_scr_low_patch=$+1
  571. getuser_scr_low_patchN=0xff&(user_scr0_low^user_scr1_low)
  572.         ld a,(user_scr1_low) ;ok
  573.         ret
  574.  
  575. getuser_scr_high
  576. getuser_scr_high_patch=$+1
  577. getuser_scr_high_patchN=0xff&(user_scr0_high^user_scr1_high)
  578.         ld a,(user_scr1_high) ;ok
  579.         ret
  580.  
  581. getuser_scr_low_cur
  582. getuser_scr_low_cur_patch=$+1
  583. getuser_scr_low_cur_patchN=0xff&(user_scr0_low^user_scr1_low)
  584.         ld a,(user_scr0_low) ;ok
  585.         ret
  586.  
  587. getuser_scr_high_cur
  588. getuser_scr_high_cur_patch=$+1
  589. getuser_scr_high_cur_patchN=0xff&(user_scr0_high^user_scr1_high)
  590.         ld a,(user_scr0_high) ;ok
  591.         ret
  592.  
  593. changescrpg_current
  594.         ld hl,getuser_scr_low_patch
  595.         ld a,(hl)
  596.         xor getuser_scr_low_patchN
  597.         ld (hl),a
  598.         ld hl,getuser_scr_high_patch
  599.         ld a,(hl)
  600.         xor getuser_scr_high_patchN
  601.         ld (hl),a
  602.         ld hl,getuser_scr_low_cur_patch
  603.         ld a,(hl)
  604.         xor getuser_scr_low_cur_patchN
  605.         ld (hl),a
  606.         ld hl,getuser_scr_high_cur_patch
  607.         ld a,(hl)
  608.         xor getuser_scr_high_cur_patchN
  609.         ld (hl),a
  610.  
  611.         ld a,1
  612. curscrnum=$+1
  613.         xor 0
  614.         ld ($-1),a
  615.         ret
  616.        
  617.         if 1==0
  618. changescrpg
  619.         call changescrpg_current
  620.         ld (curscrnum_int),a
  621.         ret
  622.         endif
  623.  
  624. primgega_buf
  625. ;b=hgt,c=wid (/2)
  626. ;de=gfx
  627. ;hl=scr
  628.         push bc
  629.         call setpgsscr40008000_buf
  630.         jr primgega_go
  631.  
  632. primgega
  633. ;b=hgt,c=wid (/2)
  634. ;de=gfx
  635. ;hl=scr
  636.         push bc
  637.         call setpgsscr40008000
  638. primgega_go
  639.         call setpggfxc000
  640.         pop bc
  641. primgega0
  642.         push bc
  643.         ld hx,b
  644.         push hl
  645.         ld bc,40
  646. primgegacolumn0
  647.         ld a,(de)
  648.         inc de
  649.         ld (hl),a
  650.         add hl,bc
  651.         dec hx
  652.         jr nz,primgegacolumn0
  653.         pop hl
  654.         ld a,0x9f;0xa0
  655.         cp h
  656.         ld bc,0x4000
  657.         adc hl,bc
  658.         jp pe,primgegacolumn0q ;т яюыютшэх ёыєўрхт
  659. ;8000->ё000 (эрфю 6000) шыш a000->e001 (эрфю 4001)
  660.          inc a
  661.         xor h
  662.         ld h,a
  663. primgegacolumn0q
  664.         pop bc
  665.         dec c
  666.         jr nz,primgega0
  667.         call setpgcodec000
  668.         jp setpgsmain40008000
  669.  
  670. copyimgega_curtodefault
  671. ;d=hgt,e=wid (/8)
  672. ;hl=scr
  673.         call getuser_scr_low_cur
  674.         SETPG16K ;set "from" page in 4000
  675.         call getuser_scr_low
  676.         SETPG32KHIGH ;set "to" page in c000
  677.         call copyimgegalayer
  678.         call getuser_scr_high_cur
  679.         SETPG16K ;set "from" page in 4000
  680.         call getuser_scr_high
  681. copyimgegaq
  682.         SETPG32KHIGH ;set "to" page in c000
  683.         call copyimgegalayer
  684.         call setpgcodec000
  685.         jp setpgsmain40008000
  686.  
  687. copyimgega_defaulttocur
  688. ;d=hgt,e=wid (/8)
  689. ;hl=scr
  690.         call getuser_scr_low
  691.         SETPG16K ;set "from" page in 4000
  692.         call getuser_scr_low_cur
  693.         SETPG32KHIGH ;set "to" page in c000
  694.         call copyimgegalayer
  695.         call getuser_scr_high
  696.         SETPG16K ;set "from" page in 4000
  697.         call getuser_scr_high_cur
  698.         jr copyimgegaq ;set "to" page in c000, copy
  699.  
  700. copyimgegalayer
  701.         push hl
  702.         ld hx,e ;wid/8
  703. copyimgega0
  704.         push de
  705.         push hl
  706.         ld b,d ;hgt
  707.         ld de,40-0x8000
  708. copyimgegacolumn0
  709.         ld a,(hl)
  710.         set 5,h
  711.         ld c,(hl)
  712.         set 7,h
  713.         ld (hl),c
  714.         res 5,h
  715.         ld (hl),a
  716.         add hl,de
  717.         djnz copyimgegacolumn0
  718.         pop hl
  719.         pop de
  720.         inc hl
  721.         dec hx
  722.         jr nz,copyimgega0
  723.         pop hl
  724.         ret
  725.  
  726. clsega
  727.         call setpgsscr40008000
  728.         ld hl,0x4000
  729.         ld de,0x4001
  730.         ld bc,0x7fff
  731.         ld (hl),l;0
  732.         ldir
  733.         jp setpgsmain40008000
  734.  
  735.         if EGA
  736. RestoreSpriteEGA
  737.         push ix
  738.         ;LD     A,(spritey)
  739.         ld a,(ix+14) ;y2
  740.         cp -16
  741.         jr c,$+3
  742.          xor a
  743.         cp (scrhgt-16)/2
  744.         jr c,$+4
  745.          ld a,(scrhgt-16)/2
  746.         ld l,a ;y
  747.         ;LD     A,(spriteX)
  748.         ld a,(ix+13) ;X
  749.          add a,4 ;x
  750.          cp 40
  751.          jr c,$+4
  752.          ld a,40
  753.         ld h,0
  754.         ld b,h
  755.         ld c,l
  756.         add hl,hl
  757.         add hl,hl
  758.         add hl,bc ;*5
  759.          add hl,hl
  760.          add hl,hl
  761.          add hl,hl ;*40
  762.          ;add hl,hl
  763.          ;add hl,hl
  764.          add hl,hl
  765.         add a,l
  766.         ld l,a
  767.         ld a,h
  768.         adc a,0x40
  769.         ld h,a
  770.         ld de,0x1003 ;hgt,wid/8
  771.         call copyimgega_defaulttocur
  772.         pop ix
  773.         ret
  774.         endif
  775.  
  776.         if EGA
  777. DrawTileEGA
  778. ;a=tile
  779. ;bc=YX
  780.         push bc
  781.         push de
  782.         push hl
  783.         push ix
  784.         ld e,b
  785.         ld d,c
  786.         call DrawTile_A_XYDE
  787.         jr DrawTileEGA_go
  788. DrawTileEGA_twoscr
  789. ;a=tile
  790. ;bc=YX
  791.         push bc
  792.         push de
  793.         push hl
  794.         push ix
  795.         ld e,b
  796.         ld d,c
  797.         call DrawTile_A_XYDE
  798.         push bc
  799.         push de
  800.         push hl
  801.         call primgega_buf
  802.         pop hl
  803.         pop de
  804.         pop bc
  805. DrawTileEGA_go
  806.         call primgega
  807.         pop ix
  808.         pop hl
  809.         pop de
  810.         pop bc
  811.         ret
  812. ;DrawTile_A_X2Y2DE
  813.         ;sla    D
  814.         ;sla    E
  815. DrawTile_A_XYDE
  816.         LD      H,a
  817.         LD      L,0
  818.         srl h
  819.         rr l
  820.         LD      bc,tilegfx
  821.         ADD     HL,bc
  822.         ex de,hl
  823. ;hl=xy
  824.         ld a,h ;x
  825.          add a,4
  826.         ;ld l,l ;y
  827.         ld h,0
  828.         ld b,h
  829.         ld c,l
  830.         add hl,hl
  831.         add hl,hl
  832.         add hl,bc ;*5
  833.          add hl,hl
  834.          add hl,hl
  835.          add hl,hl ;*40
  836.          add hl,hl
  837.          add hl,hl
  838.          add hl,hl
  839.         add a,l
  840.         ld l,a
  841.         ld a,h
  842.         adc a,0x40
  843.         ld h,a
  844.         ld bc,0x1008 ;b=hgt,c=wid (/2)
  845. ;de=gfx
  846. ;hl=scr
  847.         ret
  848.         endif
  849.  
  850.        if EGA
  851. DrawSpriteEGA
  852.         push bc
  853.         push de
  854.         push hl
  855.         push ix
  856.         push iy
  857.        
  858.         LD      A,(IX+#05) ;phase
  859.         INC     A
  860.         LD      iy,#0000
  861.         LD      BC,412;#0060 ;sprite size
  862. L_6D43_ ADD     iy,BC
  863.         DEC     A
  864.         JR      NZ,L_6D43_
  865.         LD      C,(IX+#0B) ;
  866.         LD      B,(IX+#0C) ;sprites base
  867.         ADD     iy,BC
  868.  
  869.         LD      A,(spriteX) ;x?
  870.          ld (ix+13),a ;X
  871.         add a,a
  872.         add a,a
  873.         ;add a,a
  874.         ld d,a
  875.         LD      A,(spritey) ;y
  876.          ld (ix+14),a ;y2
  877.         add a,a
  878.         ;add a,8
  879.         ld e,a
  880.  
  881. ;DrawSprite_Akeep_DExy
  882.         ;LD     (cursprite),A
  883. ;DrawSprite_A_DExy
  884. ;A=sprnum
  885. ;DE=xy
  886.         ;push bc
  887.         ;push de
  888.         ;push iy
  889.         ;add a,a
  890.         ;ld l,a
  891.         ;ld h,0xc0
  892.         ;call setpggfxc000
  893.         ;ld a,(hl)
  894.         ;ld ly,a
  895.         ;inc l
  896.         ;ld a,(hl)
  897.         ;ld hy,a
  898.         call setpgsscr40008000
  899.         ld c,e ;y
  900.         ld a,d ;x
  901.         ;srl a
  902.         add a,sprmaxwid-1
  903.         ld e,a
  904. ;e=x = -(sprmaxwid-1)..159 (ъюфшЁєхЄё  ъръ x+(sprmaxwid-1))
  905. ;c=y = -(sprmaxhgt-1)..199 (ъюфшЁєхЄё  ъръ хёЄ№)
  906.         cp scrwid+sprmaxwid-1
  907.         call c,prspr
  908.         call setpgcodec000
  909.         call setpgsmain40008000
  910.         pop iy
  911.         pop ix
  912.         pop hl
  913.         pop de
  914.         pop bc
  915.         ret
  916.        endif
  917.  
  918.         include "prspr.asm"
  919.  
  920.        if 1==0;EGA
  921. GetBuf24x16_DExy
  922. ;e=y
  923. ;d=x
  924.         push bc
  925.         push de
  926.         ld bc,0x100c ;b=hgt,c=wid (/2)
  927.         ld hl,rebuf24x16
  928. GetBuf2CxB_DExy_ToHL
  929.         push hl ;gfx
  930.         ld a,d ;x
  931.         srl a
  932.         srl a
  933.         srl a
  934.          add a,4
  935.         ld l,e ;y
  936.         ld h,0
  937.         ld d,h
  938.         ld e,l
  939.         add hl,hl
  940.         add hl,hl
  941.         add hl,de ;*5
  942.          add hl,hl
  943.          add hl,hl
  944.          add hl,hl ;*40
  945.         add a,l
  946.         ld l,a
  947.         ld a,h
  948.         adc a,0x40
  949.         ld h,a
  950.         pop de ;gfx
  951. ;de=gfx
  952. ;hl=scr
  953.         push bc
  954.         call setpgsscr40008000
  955.         pop bc
  956. getimgega0
  957.         push bc
  958.         ld hx,b
  959.         push hl
  960.         ld bc,40
  961. getimgegacolumn0
  962.         ld a,(hl)
  963.         ld (de),a
  964.         inc de
  965.         add hl,bc
  966.         dec hx
  967.         jr nz,getimgegacolumn0
  968.         pop hl
  969.         ld a,0x9f;0xa0
  970.         cp h
  971.         ld bc,0x4000
  972.         adc hl,bc
  973.         jp pe,getimgegacolumn0q ;т яюыютшэх ёыєўрхт
  974. ;8000->ё000 (эрфю 6000) шыш a000->e001 (эрфю 4001)
  975.          inc a
  976.         xor h
  977.         ld h,a
  978. getimgegacolumn0q
  979.         pop bc
  980.         dec c
  981.         jr nz,getimgega0
  982.         call setpgsmain40008000
  983.         pop de
  984.         pop bc
  985.         ret
  986.        endif
  987.  
  988.        if 1==0;EGA
  989. ReBuf24x16_DExy
  990. ;e=y
  991. ;d=x (width 16 if multiple of 8)
  992.         push bc
  993.         push de
  994.         ld bc,0x1008 ;b=hgt,c=wid (/2)
  995.         ld a,d
  996.         and 7
  997.         jr z,$+4
  998.          ld c,0x0c
  999.         ld a,d ;x
  1000.         srl a
  1001.         srl a
  1002.         srl a
  1003.          add a,4
  1004.         ld l,e ;y
  1005.         ld h,0
  1006.         ld d,h
  1007.         ld e,l
  1008.         add hl,hl
  1009.         add hl,hl
  1010.         add hl,de ;*5
  1011.          add hl,hl
  1012.          add hl,hl
  1013.          add hl,hl ;*40
  1014.         add a,l
  1015.         ld l,a
  1016.         ld a,h
  1017.         adc a,0x40
  1018.         ld h,a
  1019.         ld de,rebuf24x16
  1020. ;de=gfx
  1021. ;hl=scr
  1022.         call primgega
  1023.         pop de
  1024.         pop bc
  1025.         ret
  1026.  
  1027. buf24x16
  1028.         ds 12*16
  1029. buf24x16_2
  1030.         ds 12*16
  1031. gettilebuf2
  1032.         ds 8*16
  1033. rebuf24x16
  1034.         ds 12*16
  1035.        endif
  1036.  
  1037.        if 1==0;EGA
  1038. DrawSprite16x16_HL_DExy
  1039. ;hl=gfx
  1040. ;e=y
  1041. ;d=x (pixel perfect!)
  1042.         push bc
  1043.         push de
  1044.         ex de,hl
  1045.         ld b,0
  1046.         ld a,h ;x
  1047.         srl a
  1048.         ;ld l,l ;y
  1049.         ld c,l
  1050.         srl a ;x bit 0
  1051.         ;ld h,0x40/32/2
  1052.         ;jr nc,$+4 ;x bit 0
  1053.         ; ld h,0x80/32/2
  1054.          ld h,b;0
  1055.          rl h
  1056.          inc h ;0x40/32/2 шыш 0x80/32/2
  1057.         srl a ;x bit 1
  1058.          rl h
  1059.         add hl,hl
  1060.         add hl,hl
  1061.         add hl,bc
  1062.         add hl,hl
  1063.         add hl,hl
  1064.         add hl,hl ;y*40+scrbase
  1065.          if scrbase&0xff
  1066.          add a,scrbase&0xff
  1067.          endif
  1068. ;a=x/4
  1069.         add a,l
  1070.         ld l,a
  1071.         adc a,h
  1072.         sub l
  1073.         ld h,a ;hl=scr
  1074. ;de=gfx
  1075. ;hl=scr
  1076.         ld bc,0x1008 ;b=hgt,c=wid (/2)
  1077.         call primgega
  1078.         pop de
  1079.         pop bc
  1080.         ret
  1081.        endif
  1082.  
  1083. res_path
  1084.         db "montana2",0
  1085. bmpfilename
  1086.         db "montana2.bmp",0
  1087.         include "../../_sdk/file.asm"
  1088.  
  1089.         include "sprites.ast"
  1090.         include "tiles.ast"
  1091.         display "xxx=",$
  1092. killablescraddr
  1093.         ds 3
  1094. timer
  1095.         db 0
  1096.  
  1097.         ds 0x3f00-$
  1098.         ds 0x4000-$
  1099.         incbin "montana2.scr"
  1100.  
  1101.         if USEINT
  1102.         if EGA
  1103.         ds 0x8000-$
  1104.         else
  1105.         ds 0x6000-$
  1106.         endif
  1107.         else
  1108.         ds 0x6000-$;0x61C1+3-$
  1109.         endif
  1110.         include "MJ2.ASM"
  1111. end
  1112.  
  1113.         display "End=",end
  1114.         ;display "Free after end=",/d,#c000-end
  1115.         display "Size ",/d,end-begin," bytes"
  1116.         savebin "montana2.com",begin,end-begin
  1117.         LABELSLIST "../../../us/user.l"
  1118.