?login_element?

Subversion Repositories NedoOS

Rev

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