?login_element?

Subversion Repositories NedoOS

Rev

Rev 815 | 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_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,(user_scr0_high) ;ok
  321.          ;SETPG16K ;TODO redraw screen when retake focus???
  322. Imer_nofocus
  323.         ;LD     A,(stoptimer)
  324.         ;OR     A
  325.         ;CALL   Z,DecTimer
  326.         pop iy
  327.         pop ix
  328.         pop hl
  329.         pop de
  330.         pop bc
  331.         pop af
  332.         ex af,af' ;'
  333.         exx
  334.         pop hl
  335.         pop bc
  336.         pop af        
  337. on_int_sp=$+1
  338.         ld sp,0
  339.         pop de
  340.         ei
  341. on_int_jp=$+1
  342.         jp 0
  343. ;
  344. ;
  345. RIGHTPIX=0x38;0xb8;%10111000
  346. LEFTPIX=0x07;0x47;%01000111
  347.         macro FONTBYTE
  348.         ld a,(de)
  349.         ld c,a
  350.         xor a
  351.         rl c
  352.         jr nc,$+4
  353.          or LEFTPIX
  354.         rl c
  355.         jr nc,$+4
  356.          or RIGHTPIX
  357.         ld (hl),a
  358.         ld a,h
  359.         add a,0x40
  360.         ld h,a
  361.         xor a
  362.         rl c
  363.         jr nc,$+4
  364.          or LEFTPIX
  365.         rl c
  366.         jr nc,$+4
  367.          or RIGHTPIX
  368.         ld (hl),a
  369.         ld a,h
  370.         add a,0x20-0x40
  371.         ld h,a
  372.         xor a
  373.         rl c
  374.         jr nc,$+4
  375.          or LEFTPIX
  376.         rl c
  377.         jr nc,$+4
  378.          or RIGHTPIX
  379.         ld (hl),a
  380.         ld a,h
  381.         add a,0x40
  382.         ld h,a
  383.         xor a
  384.         rl c
  385.         jr nc,$+4
  386.          or LEFTPIX
  387.         rl c
  388.         jr nc,$+4
  389.          or RIGHTPIX
  390.         ld (hl),a
  391.         endm
  392.  
  393. PrintCharA_EGA
  394.         push bc
  395.         push de
  396.         push hl
  397.         push ix
  398.        push af
  399.         ld d,c
  400.         ld e,b
  401.         call setpgsscr40008000
  402.         ;LD     DE,(curprintyx)
  403.         sla e
  404.         sla e
  405.         sla e
  406.         ld a,d ;x
  407.          add a,4
  408.         ld l,e ;y
  409.         ld h,0
  410.         ld d,h
  411.         ld e,l
  412.         add hl,hl
  413.         add hl,hl
  414.         add hl,de ;*5
  415.          add hl,hl
  416.          add hl,hl
  417.          add hl,hl ;*40
  418.         add a,l
  419.         ld l,a
  420.         ld a,h
  421.         adc a,0x40
  422.         ld h,a
  423.        pop af
  424.         PUSH    HL
  425.         LD      DE,Font-256;L_BE02
  426.         LD      H,#00
  427.         LD      L,A
  428.         ADD     HL,HL
  429.         ADD     HL,HL
  430.         ADD     HL,HL
  431.         ADD     HL,DE
  432.         EX      DE,HL
  433.         POP     HL
  434.         LD      hx,#08
  435. PrintCharA_EGA0
  436.         FONTBYTE
  437.         ld bc,40-0x6000
  438.         add hl,bc
  439.         INC     DE
  440.         dec hx
  441.         jr nz,PrintCharA_EGA0
  442.         if 1==0
  443.         LD      DE,(curprintyx)
  444.         INC     D
  445.         LD      A,D
  446.         CP      #20
  447.         JR      NZ,PrintCharA_EGAq
  448.         INC     E
  449.         LD      D,#00
  450.         LD      A,E
  451.         CP      #18
  452.         JR      NZ,PrintCharA_EGAq
  453.         LD      E,#00
  454. PrintCharA_EGAq
  455.         LD      (curprintyx),DE
  456.         endif
  457.         call setpgsmain40008000
  458.         pop ix
  459.         pop hl
  460.         pop de
  461.         pop bc
  462.         ret
  463.        
  464.         if 1==0
  465. PrintCharA
  466.         PUSH    DE
  467.         PUSH    HL
  468.         PUSH    BC
  469.         PUSH    AF
  470.         LD      DE,(curprintyx)
  471.         LD      A,E
  472.         AND     #18
  473.         OR      #40
  474.         LD      H,A
  475.         LD      A,E
  476.         AND     #07
  477.         OR      A
  478.         RRA
  479.         RRA
  480.         RRA
  481.         RRA
  482.         ADD     A,D
  483.         LD      L,A
  484.         POP     AF
  485.         PUSH    HL
  486.         LD      DE,Font-256;L_BE02
  487.         LD      H,#00
  488.         LD      L,A
  489.         ADD     HL,HL
  490.         ADD     HL,HL
  491.         ADD     HL,HL
  492.         ADD     HL,DE
  493.         EX      DE,HL
  494.         POP     HL
  495.         LD      B,#08
  496. L_C6EB  LD      A,(DE)
  497.         LD      (HL),A
  498.         INC     H
  499.         INC     DE
  500.         DJNZ    L_C6EB
  501.         if 1==1
  502.         LD      DE,(curprintyx)
  503.         INC     D
  504.         LD      A,D
  505.         CP      #20
  506.         JR      NZ,L_C705
  507.         INC     E
  508.         LD      D,#00
  509.         LD      A,E
  510.         CP      #18
  511.         JR      NZ,L_C705
  512.         LD      E,#00
  513. L_C705  LD      (curprintyx),DE
  514.         endif
  515.         POP     BC
  516.         POP     HL
  517.         POP     DE
  518.         RET
  519. ;
  520. curprintyx       DW       #0000
  521. ;
  522. PrintStringHL
  523.         LD      A,(HL)
  524.         OR      A
  525.         RET     Z
  526.         CP      #16
  527.         JR      Z,L_C71C
  528.         CALL    PrintCharA
  529.         INC     HL
  530.         JR      PrintStringHL
  531. L_C71C  INC     HL
  532.         LD      E,(HL)
  533.         INC     HL
  534.         LD      D,(HL)
  535.         INC     HL
  536.         LD      (curprintyx),DE
  537.         JR      PrintStringHL
  538. ;
  539. PrintStringHL_EGA
  540.         LD      A,(HL)
  541.         OR      A
  542.         RET     Z
  543.         CP      #16
  544.         JR      Z,L_C71C_EGA
  545.         CALL    PrintCharA_EGA
  546.         INC     HL
  547.         JR      PrintStringHL_EGA
  548. L_C71C_EGA
  549.         INC     HL
  550.         LD      E,(HL)
  551.         INC     HL
  552.         LD      D,(HL)
  553.         INC     HL
  554.         LD      (curprintyx),DE
  555.         JR      PrintStringHL_EGA
  556.         endif
  557.  
  558. setpgsmain40008000
  559. pgmain4000=$+1
  560.         ld a,0
  561.         SETPG16K
  562. pgcode8000=$+1
  563.         ld a,0
  564.         SETPG32KLOW
  565.         ret
  566.  
  567. setpgsscr40008000;_current
  568.         call getuser_scr_low_cur
  569.         SETPG16K
  570.         call getuser_scr_high_cur
  571.         SETPG32KLOW
  572.         ret
  573.  
  574. setpgsscr40008000_buf
  575.         call getuser_scr_low
  576.         SETPG16K
  577.         call getuser_scr_high
  578.         SETPG32KLOW
  579.         ret
  580.  
  581. getuser_scr_low
  582. getuser_scr_low_patch=$+1
  583. getuser_scr_low_patchN=0xff&(user_scr0_low^user_scr1_low)
  584.         ld a,(user_scr1_low) ;ok
  585.         ret
  586.  
  587. getuser_scr_high
  588. getuser_scr_high_patch=$+1
  589. getuser_scr_high_patchN=0xff&(user_scr0_high^user_scr1_high)
  590.         ld a,(user_scr1_high) ;ok
  591.         ret
  592.  
  593. getuser_scr_low_cur
  594. getuser_scr_low_cur_patch=$+1
  595. getuser_scr_low_cur_patchN=0xff&(user_scr0_low^user_scr1_low)
  596.         ld a,(user_scr0_low) ;ok
  597.         ret
  598.  
  599. getuser_scr_high_cur
  600. getuser_scr_high_cur_patch=$+1
  601. getuser_scr_high_cur_patchN=0xff&(user_scr0_high^user_scr1_high)
  602.         ld a,(user_scr0_high) ;ok
  603.         ret
  604.  
  605. changescrpg_current
  606.         ld hl,getuser_scr_low_patch
  607.         ld a,(hl)
  608.         xor getuser_scr_low_patchN
  609.         ld (hl),a
  610.         ld hl,getuser_scr_high_patch
  611.         ld a,(hl)
  612.         xor getuser_scr_high_patchN
  613.         ld (hl),a
  614.         ld hl,getuser_scr_low_cur_patch
  615.         ld a,(hl)
  616.         xor getuser_scr_low_cur_patchN
  617.         ld (hl),a
  618.         ld hl,getuser_scr_high_cur_patch
  619.         ld a,(hl)
  620.         xor getuser_scr_high_cur_patchN
  621.         ld (hl),a
  622.  
  623.         ld a,1
  624. curscrnum=$+1
  625.         xor 0
  626.         ld ($-1),a
  627.         ret
  628.        
  629.         if 1==0
  630. changescrpg
  631.         call changescrpg_current
  632.         ld (curscrnum_int),a
  633.         ret
  634.         endif
  635.  
  636. primgega_buf
  637. ;b=hgt,c=wid (/2)
  638. ;de=gfx
  639. ;hl=scr
  640.         push bc
  641.         call setpgsscr40008000_buf
  642.         jr primgega_go
  643.  
  644. primgega
  645. ;b=hgt,c=wid (/2)
  646. ;de=gfx
  647. ;hl=scr
  648.         push bc
  649.         call setpgsscr40008000
  650. primgega_go
  651.         call setpggfxc000
  652.         pop bc
  653. primgega0
  654.         push bc
  655.         ld hx,b
  656.         push hl
  657.         ld bc,40
  658. primgegacolumn0
  659.         ld a,(de)
  660.         inc de
  661.         ld (hl),a
  662.         add hl,bc
  663.         dec hx
  664.         jr nz,primgegacolumn0
  665.         pop hl
  666.         ld a,0x9f;0xa0
  667.         cp h
  668.         ld bc,0x4000
  669.         adc hl,bc
  670.         jp pe,primgegacolumn0q ;т яюыютшэх ёыєўрхт
  671. ;8000->ё000 (эрфю 6000) шыш a000->e001 (эрфю 4001)
  672.          inc a
  673.         xor h
  674.         ld h,a
  675. primgegacolumn0q
  676.         pop bc
  677.         dec c
  678.         jr nz,primgega0
  679.         call setpgcodec000
  680.         jp setpgsmain40008000
  681.  
  682. copyimgega_curtodefault
  683. ;d=hgt,e=wid (/8)
  684. ;hl=scr
  685.         call getuser_scr_low_cur
  686.         SETPG16K ;set "from" page in 4000
  687.         call getuser_scr_low
  688.         SETPG32KHIGH ;set "to" page in c000
  689.         call copyimgegalayer
  690.         call getuser_scr_high_cur
  691.         SETPG16K ;set "from" page in 4000
  692.         call getuser_scr_high
  693. copyimgegaq
  694.         SETPG32KHIGH ;set "to" page in c000
  695.         call copyimgegalayer
  696.         call setpgcodec000
  697.         jp setpgsmain40008000
  698.  
  699. copyimgega_defaulttocur
  700. ;d=hgt,e=wid (/8)
  701. ;hl=scr
  702.         call getuser_scr_low
  703.         SETPG16K ;set "from" page in 4000
  704.         call getuser_scr_low_cur
  705.         SETPG32KHIGH ;set "to" page in c000
  706.         call copyimgegalayer
  707.         call getuser_scr_high
  708.         SETPG16K ;set "from" page in 4000
  709.         call getuser_scr_high_cur
  710.         jr copyimgegaq ;set "to" page in c000, copy
  711.  
  712. copyimgegalayer
  713.         push hl
  714.         ld hx,e ;wid/8
  715. copyimgega0
  716.         push de
  717.         push hl
  718.         ld b,d ;hgt
  719.         ld de,40-0x8000
  720. copyimgegacolumn0
  721.         ld a,(hl)
  722.         set 5,h
  723.         ld c,(hl)
  724.         set 7,h
  725.         ld (hl),c
  726.         res 5,h
  727.         ld (hl),a
  728.         add hl,de
  729.         djnz copyimgegacolumn0
  730.         pop hl
  731.         pop de
  732.         inc hl
  733.         dec hx
  734.         jr nz,copyimgega0
  735.         pop hl
  736.         ret
  737.  
  738. clsega
  739.         call setpgsscr40008000
  740.         ld hl,0x4000
  741.         ld de,0x4001
  742.         ld bc,0x7fff
  743.         ld (hl),l;0
  744.         ldir
  745.         jp setpgsmain40008000
  746.  
  747.         if EGA
  748. RestoreSpriteEGA
  749.         push ix
  750.         ;LD     A,(spritey)
  751.         ld a,(ix+14) ;y2
  752.         cp -16
  753.         jr c,$+3
  754.          xor a
  755.         cp (scrhgt-16)/2
  756.         jr c,$+4
  757.          ld a,(scrhgt-16)/2
  758.         ld l,a ;y
  759.         ;LD     A,(spriteX)
  760.         ld a,(ix+13) ;X
  761.          add a,4 ;x
  762.          cp 40
  763.          jr c,$+4
  764.          ld a,40
  765.         ld h,0
  766.         ld b,h
  767.         ld c,l
  768.         add hl,hl
  769.         add hl,hl
  770.         add hl,bc ;*5
  771.          add hl,hl
  772.          add hl,hl
  773.          add hl,hl ;*40
  774.          ;add hl,hl
  775.          ;add hl,hl
  776.          add hl,hl
  777.         add a,l
  778.         ld l,a
  779.         ld a,h
  780.         adc a,0x40
  781.         ld h,a
  782.         ld de,0x1003 ;hgt,wid/8
  783.         call copyimgega_defaulttocur
  784.         pop ix
  785.         ret
  786.         endif
  787.  
  788.         if EGA
  789. DrawTileEGA
  790. ;a=tile
  791. ;bc=YX
  792.         push bc
  793.         push de
  794.         push hl
  795.         push ix
  796.         ld e,b
  797.         ld d,c
  798.         call DrawTile_A_XYDE
  799.         jr DrawTileEGA_go
  800. DrawTileEGA_twoscr
  801. ;a=tile
  802. ;bc=YX
  803.         push bc
  804.         push de
  805.         push hl
  806.         push ix
  807.         ld e,b
  808.         ld d,c
  809.         call DrawTile_A_XYDE
  810.         push bc
  811.         push de
  812.         push hl
  813.         call primgega_buf
  814.         pop hl
  815.         pop de
  816.         pop bc
  817. DrawTileEGA_go
  818.         call primgega
  819.         pop ix
  820.         pop hl
  821.         pop de
  822.         pop bc
  823.         ret
  824. ;DrawTile_A_X2Y2DE
  825.         ;sla    D
  826.         ;sla    E
  827. DrawTile_A_XYDE
  828.         LD      H,a
  829.         LD      L,0
  830.         srl h
  831.         rr l
  832.         LD      bc,tilegfx
  833.         ADD     HL,bc
  834.         ex de,hl
  835. ;hl=xy
  836.         ld a,h ;x
  837.          add a,4
  838.         ;ld l,l ;y
  839.         ld h,0
  840.         ld b,h
  841.         ld c,l
  842.         add hl,hl
  843.         add hl,hl
  844.         add hl,bc ;*5
  845.          add hl,hl
  846.          add hl,hl
  847.          add hl,hl ;*40
  848.          add hl,hl
  849.          add hl,hl
  850.          add hl,hl
  851.         add a,l
  852.         ld l,a
  853.         ld a,h
  854.         adc a,0x40
  855.         ld h,a
  856.         ld bc,0x1008 ;b=hgt,c=wid (/2)
  857. ;de=gfx
  858. ;hl=scr
  859.         ret
  860.         endif
  861.  
  862.        if EGA
  863. DrawSpriteEGA
  864.         push bc
  865.         push de
  866.         push hl
  867.         push ix
  868.         push iy
  869.        
  870.         LD      A,(IX+#05) ;phase
  871.         INC     A
  872.         LD      iy,#0000
  873.         LD      BC,412;#0060 ;sprite size
  874. L_6D43_ ADD     iy,BC
  875.         DEC     A
  876.         JR      NZ,L_6D43_
  877.         LD      C,(IX+#0B) ;
  878.         LD      B,(IX+#0C) ;sprites base
  879.         ADD     iy,BC
  880.  
  881.         LD      A,(spriteX) ;x?
  882.          ld (ix+13),a ;X
  883.         add a,a
  884.         add a,a
  885.         ;add a,a
  886.         ld d,a
  887.         LD      A,(spritey) ;y
  888.          ld (ix+14),a ;y2
  889.         add a,a
  890.         ;add a,8
  891.         ld e,a
  892.  
  893. ;DrawSprite_Akeep_DExy
  894.         ;LD     (cursprite),A
  895. ;DrawSprite_A_DExy
  896. ;A=sprnum
  897. ;DE=xy
  898.         ;push bc
  899.         ;push de
  900.         ;push iy
  901.         ;add a,a
  902.         ;ld l,a
  903.         ;ld h,0xc0
  904.         ;call setpggfxc000
  905.         ;ld a,(hl)
  906.         ;ld ly,a
  907.         ;inc l
  908.         ;ld a,(hl)
  909.         ;ld hy,a
  910.         call setpgsscr40008000
  911.         ld c,e ;y
  912.         ld a,d ;x
  913.         ;srl a
  914.         add a,sprmaxwid-1
  915.         ld e,a
  916. ;e=x = -(sprmaxwid-1)..159 (ъюфшЁєхЄё  ъръ x+(sprmaxwid-1))
  917. ;c=y = -(sprmaxhgt-1)..199 (ъюфшЁєхЄё  ъръ хёЄ№)
  918.         cp scrwid+sprmaxwid-1
  919.         call c,prspr
  920.         call setpgcodec000
  921.         call setpgsmain40008000
  922.         pop iy
  923.         pop ix
  924.         pop hl
  925.         pop de
  926.         pop bc
  927.         ret
  928.        endif
  929.  
  930.         include "prspr.asm"
  931.  
  932.        if 1==0;EGA
  933. GetBuf24x16_DExy
  934. ;e=y
  935. ;d=x
  936.         push bc
  937.         push de
  938.         ld bc,0x100c ;b=hgt,c=wid (/2)
  939.         ld hl,rebuf24x16
  940. GetBuf2CxB_DExy_ToHL
  941.         push hl ;gfx
  942.         ld a,d ;x
  943.         srl a
  944.         srl a
  945.         srl a
  946.          add a,4
  947.         ld l,e ;y
  948.         ld h,0
  949.         ld d,h
  950.         ld e,l
  951.         add hl,hl
  952.         add hl,hl
  953.         add hl,de ;*5
  954.          add hl,hl
  955.          add hl,hl
  956.          add hl,hl ;*40
  957.         add a,l
  958.         ld l,a
  959.         ld a,h
  960.         adc a,0x40
  961.         ld h,a
  962.         pop de ;gfx
  963. ;de=gfx
  964. ;hl=scr
  965.         push bc
  966.         call setpgsscr40008000
  967.         pop bc
  968. getimgega0
  969.         push bc
  970.         ld hx,b
  971.         push hl
  972.         ld bc,40
  973. getimgegacolumn0
  974.         ld a,(hl)
  975.         ld (de),a
  976.         inc de
  977.         add hl,bc
  978.         dec hx
  979.         jr nz,getimgegacolumn0
  980.         pop hl
  981.         ld a,0x9f;0xa0
  982.         cp h
  983.         ld bc,0x4000
  984.         adc hl,bc
  985.         jp pe,getimgegacolumn0q ;т яюыютшэх ёыєўрхт
  986. ;8000->ё000 (эрфю 6000) шыш a000->e001 (эрфю 4001)
  987.          inc a
  988.         xor h
  989.         ld h,a
  990. getimgegacolumn0q
  991.         pop bc
  992.         dec c
  993.         jr nz,getimgega0
  994.         call setpgsmain40008000
  995.         pop de
  996.         pop bc
  997.         ret
  998.        endif
  999.  
  1000.        if 1==0;EGA
  1001. ReBuf24x16_DExy
  1002. ;e=y
  1003. ;d=x (width 16 if multiple of 8)
  1004.         push bc
  1005.         push de
  1006.         ld bc,0x1008 ;b=hgt,c=wid (/2)
  1007.         ld a,d
  1008.         and 7
  1009.         jr z,$+4
  1010.          ld c,0x0c
  1011.         ld a,d ;x
  1012.         srl a
  1013.         srl a
  1014.         srl a
  1015.          add a,4
  1016.         ld l,e ;y
  1017.         ld h,0
  1018.         ld d,h
  1019.         ld e,l
  1020.         add hl,hl
  1021.         add hl,hl
  1022.         add hl,de ;*5
  1023.          add hl,hl
  1024.          add hl,hl
  1025.          add hl,hl ;*40
  1026.         add a,l
  1027.         ld l,a
  1028.         ld a,h
  1029.         adc a,0x40
  1030.         ld h,a
  1031.         ld de,rebuf24x16
  1032. ;de=gfx
  1033. ;hl=scr
  1034.         call primgega
  1035.         pop de
  1036.         pop bc
  1037.         ret
  1038.  
  1039. buf24x16
  1040.         ds 12*16
  1041. buf24x16_2
  1042.         ds 12*16
  1043. gettilebuf2
  1044.         ds 8*16
  1045. rebuf24x16
  1046.         ds 12*16
  1047.        endif
  1048.  
  1049.        if 1==0;EGA
  1050. DrawSprite16x16_HL_DExy
  1051. ;hl=gfx
  1052. ;e=y
  1053. ;d=x (pixel perfect!)
  1054.         push bc
  1055.         push de
  1056.         ex de,hl
  1057.         ld b,0
  1058.         ld a,h ;x
  1059.         srl a
  1060.         ;ld l,l ;y
  1061.         ld c,l
  1062.         srl a ;x bit 0
  1063.         ;ld h,0x40/32/2
  1064.         ;jr nc,$+4 ;x bit 0
  1065.         ; ld h,0x80/32/2
  1066.          ld h,b;0
  1067.          rl h
  1068.          inc h ;0x40/32/2 шыш 0x80/32/2
  1069.         srl a ;x bit 1
  1070.          rl h
  1071.         add hl,hl
  1072.         add hl,hl
  1073.         add hl,bc
  1074.         add hl,hl
  1075.         add hl,hl
  1076.         add hl,hl ;y*40+scrbase
  1077.          if scrbase&0xff
  1078.          add a,scrbase&0xff
  1079.          endif
  1080. ;a=x/4
  1081.         add a,l
  1082.         ld l,a
  1083.         adc a,h
  1084.         sub l
  1085.         ld h,a ;hl=scr
  1086. ;de=gfx
  1087. ;hl=scr
  1088.         ld bc,0x1008 ;b=hgt,c=wid (/2)
  1089.         call primgega
  1090.         pop de
  1091.         pop bc
  1092.         ret
  1093.        endif
  1094.  
  1095. res_path
  1096.         db "montana2",0
  1097. bmpfilename
  1098.         db "montana2.bmp",0
  1099.         include "../../_sdk/file.asm"
  1100.  
  1101.         include "sprites.ast"
  1102.         include "tiles.ast"
  1103.         display "xxx=",$
  1104. killablescraddr
  1105.         ds 3
  1106. timer
  1107.         db 0
  1108.  
  1109.         ds 0x3f00-$
  1110.         ds 0x4000-$
  1111.         incbin "montana2.scr"
  1112.  
  1113.         if USEINT
  1114.         if EGA
  1115.         ds 0x8000-$
  1116.         else
  1117.         ds 0x6000-$
  1118.         endif
  1119.         else
  1120.         ds 0x6000-$;0x61C1+3-$
  1121.         endif
  1122.         include "MJ2.ASM"
  1123. end
  1124.  
  1125.         display "End=",end
  1126.         ;display "Free after end=",/d,#c000-end
  1127.         display "Size ",/d,end-begin," bytes"
  1128.         savebin "montana2.com",begin,end-begin
  1129.         LABELSLIST "../../../us/user.l"
  1130.