Subversion Repositories NedoOS

Rev

Rev 1494 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download

  1. DrawMASK
  2.        call SetPgMask
  3.         ld hl,(MOUSEX)
  4.         ld a,l
  5.         srl h
  6.         rra
  7.         srl h
  8.         rra
  9.         srl h
  10.         rra
  11.         srl h
  12.         rra
  13.         ld de,SCRTOP
  14.         ld hl,MASK
  15.        cp MASKWID-SCRWID
  16.        jr c,$+4
  17.        ld a,MASKWID-SCRWID
  18.         ld c,a
  19.         ld b,0
  20.         add hl,bc
  21.         ld b,MASKHGT;SCRHGT
  22. DrawMASK0
  23.         push bc
  24.         push de
  25.         ld bc,SCRWID
  26.         ldir
  27.         ld bc,MASKWID-SCRWID
  28.         add hl,bc
  29.         pop de
  30.         call DDE
  31.         pop bc
  32.         djnz DrawMASK0
  33.         ret
  34.  
  35. DrawMapGfx
  36.         ld a,0xfe
  37.         in a,(0xfe)
  38.         rra
  39.         jp nc,DrawMASK
  40.  
  41.         ld iy,0
  42.         add iy,sp
  43.  
  44.        LD A,PGMAP;16
  45.        call OUTME
  46.         LD DE,MAPWID
  47.         LD hl,(MOUSEY-1) ;h ;8bit
  48.         ld L,0
  49.         LD B,8
  50. mULH00E ADD HL,HL
  51.         JR NC,$+3
  52.         ADD HL,DE
  53.         DJNZ mULH00E
  54.         LD BC,MAPDO
  55.         ADD HL,BC
  56.         LD BC,(MOUSEX)
  57.         DUP 3
  58.         SRL B
  59.         RR C
  60.         EDUP
  61.         ADD HL,BC
  62. ;HL=mapadr=MAP+MOUSEY*MAPWID+(MOUSEX>3)
  63.           ;^^^^^^^^^^^^^^^^или по табл
  64.  
  65. ;visiblehgt = SCRHGT
  66.         ld de,SCRTOP
  67.         ld b,SCRHGT
  68. ;skyhgt = DOMAP-MOUSEY
  69. ;if skyhgt>=0 then visiblehgt = visiblehgt-skyhgt; y=skyhgt
  70.         ld a,(MOUSEY)
  71.         sub SKYHGT
  72.         jp nc,DrawMap_nosky
  73.         push af
  74.         push bc
  75.         neg
  76.         ld b,a ;skyhgt
  77.          ;ld a,e
  78.          ;add a,SCRWID-1
  79.          ;ld e,a
  80.          
  81.          push bc
  82.          push de
  83.          push hl
  84.          
  85.          ld hl,skysprlist
  86.          ld de,skysprlist+1
  87.          ld bc,SKYHGT*6-1
  88.          ld (hl),0
  89.          ldir
  90.  
  91.         ld ix,WORMXY
  92. prskyworms0
  93.         ld a,(ix+5)
  94.         cp SPRLIST_END
  95.         jp z,prskyworms0q
  96.          ld a,(MOUSEY)
  97.          sub (ix+3) ;y
  98.          cpl
  99.          ;add a,7+1 ;c-MOUSEY+7 = 0..SKYHGT+6
  100.          ;cp SKYHGT+7
  101.          add a,4+1 ;с запасом сверху на 4 (не хватило на высоту червя)
  102.          cp SKYHGT+4
  103.         jp nc,prskyworms_skip
  104.         ld l,a
  105.         ld h,0
  106.         ld b,h
  107.         ld c,l
  108.         add hl,hl ;*2
  109.         add hl,bc ;*3
  110.         add hl,hl ;*6
  111.         ld bc,skysprlist-(6*4) ;с запасом сверху на 4 (не хватило на высоту червя)
  112.         add hl,bc
  113.         ex de,hl
  114.        
  115.          ;ld hl,(4+(SCRWID*8))*64 ;x ;XXXXXXXX XXx????? (TODO >>2)
  116.          ld a,(ix+0) ;x
  117.          ld l,(ix+2) ;X ;XXXXXXXX XXx????? (TODO >>2)
  118.          ld h,0
  119.          rla
  120.          adc hl,hl
  121.          rla
  122.          adc hl,hl ;000000XX XXXXXXXX
  123.          ld bc,(MOUSEX)
  124.          or a
  125.          sbc hl,bc
  126.          ld bc,8
  127.          add hl,bc
  128.          ld  c,8*(SCRWID+1)
  129.          or a
  130.          sbc hl,bc
  131.          add hl,bc
  132.          jr nc,prskyworms_skip
  133.  
  134.          ld a,l ;l = x относительно экрана!!! 0=на знакоместо левее экрана
  135.          rra
  136.          rra
  137.          rra
  138.          and 31
  139.          sub SCRWID+1
  140.          ld (prskywormx),a ;(X/8)-(SCRWID+1) !=0
  141.          
  142.          ld a,l
  143.          and 7
  144.          ld (prskywormrlpatch),a
  145.  
  146.          ld b,(ix+1) ;sprite HSB
  147.          ld a,(ix) ;sprite LSB
  148.          add a,a
  149.          add a,a
  150.          add a,a
  151.          ld c,a
  152. prskyworm0
  153.          ld a,(bc) ;gfx
  154.          ld l,a
  155.          ld h,0
  156. prskywormrlpatch=$+1
  157.          jr $+2
  158.          dup 7
  159.          add hl,hl
  160.          edup
  161.          ld a,(de) ;X/8-(SCRWID+1) == 0 значит свободно, иначе занято
  162.          or a
  163. prskywormx=$+1
  164.          ld a,0
  165.          jr nz,prskyworm0tryspr2
  166.          ld (de),a
  167.          inc e
  168.          ld a,h
  169.          ld (de),a
  170.          inc e
  171.          ld a,l
  172.          ld (de),a
  173.          inc e
  174.          inc e
  175.          jr z,prskyworms_skip ;выход за пределы skysprlist
  176.          inc e
  177.          jp prskyworm0tryspr2q
  178. prskyworm0tryspr2
  179.          inc e
  180.          inc e
  181.          inc e
  182.          ld (de),a
  183.          inc e
  184.          jr z,prskyworms_skip ;выход за пределы skysprlist
  185.          ld a,h
  186.          ld (de),a
  187.          inc e
  188.          ld a,l
  189.          ld (de),a
  190. prskyworm0tryspr2q
  191.          inc de
  192.          inc c
  193.          ld a,c
  194.          and 7
  195.          jr nz,prskyworm0
  196.          
  197. prskyworms_skip
  198.         ld bc,6
  199.         add ix,bc
  200.          jp prskyworms0
  201. prskyworms0q
  202.          
  203.          pop hl
  204.          pop de
  205.          pop bc
  206.          
  207.          
  208.          ld hl,skysprlist ;80 строк по 6 байт
  209.          
  210. DrawMap_sky0
  211.         push bc
  212.         push de
  213.        push hl
  214.         ld h,d
  215.         ld l,e
  216.         inc de
  217.         ld bc,SCRWID-1
  218.         ld (hl),b;0
  219.         ldir
  220. ;TODO надпечатать спрайты (для MEM128=0)
  221. ;допустим, уже составлен список, в каких строках что печатать
  222. ;система y,x,data16,pnext (без pnext проблема с сортировкой) займёт слишком много места (20*6*8=960)
  223. ;поэтому на каждый "y" неба (всего 80) 2 спрайта по 3 байта: (X/8)-(SCRWID+1),data16 (итого 480, плюс запасы сверху и снизу на высоту червя)
  224.        pop hl
  225.        if 1
  226.        ;первый спрайт
  227.         ld a,e ;lineaddr+SCRWID
  228.         add a,(hl) ;(X/8)-(SCRWID+1)
  229.         ld e,a
  230.         inc l
  231.         ld a,(de)
  232.         xor (hl)
  233.         ld (de),a
  234.         inc l
  235.         inc e
  236.         ld a,(de)
  237.         xor (hl)
  238.         ld (de),a
  239.         inc l
  240.        ;второй спрайт
  241.         ld a,e
  242.         or 0x1f ;FIXME - работает только при SCRWID=30!
  243.         add a,(hl) ;(X/8)-(SCRWID+1)
  244.         ld e,a
  245.         inc l
  246.         ld a,(de)
  247.         xor (hl)
  248.         ld (de),a
  249.         inc l
  250.         inc e
  251.         ld a,(de)
  252.         xor (hl)
  253.         ld (de),a
  254.         inc hl
  255.        endif
  256.        
  257.         pop de
  258.         pop bc
  259.         call DDE
  260.         djnz DrawMap_sky0
  261.          ;ld a,e
  262.          ;sub SCRWID-1
  263.          ;ld e,a
  264.         ld hl,MAP
  265.         LD BC,(MOUSEX)
  266.         DUP 3
  267.         SRL B
  268.         RR C
  269.         EDUP
  270.         ADD HL,BC
  271.         pop bc
  272.         pop af
  273.         add a,b
  274.         ld b,a
  275. DrawMap_nosky
  276.  
  277. ;waterhgt = MOUSEY-waterYwin
  278. ;if waterhgt>=0 then visiblehgt = visiblehgt-waterhgt
  279.         ld a,(MOUSEY)
  280.         sub waterYwin
  281.         jr c,DrawMap_nowater
  282.         neg
  283.         add a,b
  284.         ld b,a
  285. DrawMap_nowater
  286.  
  287.         LD A,(MOUSEX)
  288.         rra
  289.         jp nc,DrawMap_x0246
  290.         rra
  291.         jp nc,DrawMap_x15
  292.         rra
  293.         jp c,DrawMap_x7
  294.         ld a,Tshift/256 ;x=3
  295. DrawMap_x35_a
  296.         inc hl
  297.         inc hl
  298.         push hl
  299.         pop ix
  300.         ld h,a ;shift table
  301.         ld a,b ;hgt
  302.         ld b,d
  303.         ld c,e;LD bc,SCRTOP;SHADOW
  304. MAPOUT0
  305. ;ix=mapadr
  306. ;sp=mapadr
  307. ;hl=tab
  308. ;bc=screen
  309. ;a=hgt
  310.         ex af,af' ;'
  311.         ld e,(ix-2)
  312.         ld d,(ix-1)
  313.        ld sp,ix
  314.          ld l,e    ;%abcdefgh
  315.        DUP SCRWID/2
  316.         ld a,(hl) ;%defgh000
  317.         ld l,d    ;%ijklmnop
  318.         inc h
  319.         or (hl)   ;%defghijk
  320.         dec h
  321.         ld (bc),a
  322.         inc c
  323.         ld a,(hl) ;%lmnop000
  324.         pop de
  325.         ld l,e    ;%qrstuvwx
  326.         inc h
  327.         or (hl)   ;%lmnopqrs
  328.         dec h
  329.         ld (bc),a
  330.         inc c
  331.        EDUP
  332.         org $-1
  333.         ld a,c
  334.         sub SCRWID-1
  335.         ld c,a
  336.         inc b
  337.         ld a,b
  338.         and 7
  339.         jr z,MAPOUT0_chr
  340. MAPOUT0_chrq
  341.        ld sp,iy;SPOILSTACK
  342.         LD de,MAPWID
  343.         ADD ix,de
  344.         ex af,af' ;'
  345.         dec a
  346.         jp nz,MAPOUT0
  347.         ;ld sp,iy
  348.         ret
  349. MAPOUT0_chr
  350.         ld a,c
  351.         sub -32
  352.         ld c,a
  353.         sbc a,a
  354.         and -8
  355.         add a,b
  356.         ld b,a
  357.         jp MAPOUT0_chrq
  358.  
  359. DrawMap_x0
  360.         ;LD de,SCRTOP;SHADOW
  361. DrawMap_x0line
  362.        PUSH bc
  363.        PUSH de
  364. ;HL=mapadr
  365.         ld bc,SCRWID-1
  366.         ldir
  367.         ld a,(hl)
  368.         ld (de),a
  369.        POP de
  370.         CALL DDE
  371.         LD bc,MAPWID-SCRWID+1
  372.         ADD HL,bc
  373.        POP bc
  374.         djnz DrawMap_x0line
  375.         ret
  376.  
  377. DrawMap_x15
  378.         rra
  379.         ld a,Tshift/256+2 ;x=5
  380.         jp c,DrawMap_x35_a
  381. DrawMap_x1
  382. ;hl=mapadr
  383.         ld a,b
  384.         ld bc,SCRWID
  385.         add hl,bc
  386.        push de;SCRTOP
  387.         exx
  388.         LD b,a;SCRHGT
  389.        pop de
  390.        ld hl,SCRWID
  391.        add hl,de ;LD hl,SCRTOP+SCRWID;SHADOW
  392. DrawMap_x1line
  393. ;hl'=mapadr (end)
  394. ;hl=scr (end)
  395.         ld sp,hl
  396.         exx
  397.         ld a,(hl)
  398.         rla
  399.         dec hl
  400.        dup SCRWID/4
  401.         ld b,(hl)
  402.         dec hl
  403.         ld c,(hl)
  404.         dec hl
  405.         ld d,(hl)
  406.         dec hl
  407.         ld e,(hl)
  408.         rl b
  409.         rl c
  410.         rl d
  411.         rl e
  412.         push bc
  413.         push de
  414.         dec hl
  415.        edup
  416.        if (SCRWID/2)&1
  417.         ld b,(hl)
  418.         dec hl
  419.         ld c,(hl)
  420.         rl b
  421.         rl c
  422.         push bc
  423.         dec hl
  424.        endif
  425.         org $-1
  426.         ld bc,MAPWID+SCRWID
  427.         add hl,bc
  428.         exx
  429.         inc h
  430.         ld a,h
  431.         and 7
  432.         jr z,DrawMap_x1line_chr
  433. ;DrawMap_x1line_chrq
  434.         dec b
  435.         jp nz,DrawMap_x1line
  436.         ld sp,iy
  437.         ret
  438. DrawMap_x1line_chr
  439.         ld a,l
  440.         sub -32
  441.         ld l,a
  442.         sbc a,a
  443.         and -8
  444.         add a,h
  445.         ld h,a
  446.         dec b
  447.         jp nz,DrawMap_x1line
  448.         ld sp,iy
  449.         ret
  450.  
  451. DrawMap_x2
  452. ;hl=mapadr
  453.         ld a,b
  454.         ld bc,SCRWID
  455.         add hl,bc
  456.        push de;SCRTOP
  457.         exx
  458.         LD b,a;SCRHGT
  459.        pop de
  460.        ld hl,SCRWID
  461.        add hl,de ;LD hl,SCRTOP+SCRWID;SHADOW
  462. DrawMap_x2line
  463. ;hl'=mapadr (end)
  464. ;hl=scr (end)
  465.         ld sp,hl
  466.         exx
  467.         ld a,(hl)
  468.         rla ;6??????? CY="d7"
  469.         dec hl
  470.        dup SCRWID/4
  471.         ld b,(hl)
  472.         dec hl
  473.         ld c,(hl)
  474.         dec hl
  475.         ld d,(hl)
  476.         dec hl
  477.         ld e,(hl)
  478.         rl b
  479.         rl c
  480.         rl d
  481.         rl e
  482.         rla;ex af,af' ;'
  483.         rl b
  484.         rl c
  485.         rl d
  486.         rl e
  487.         push bc
  488.         push de
  489.         rra;ex af,af' ;'
  490.         dec hl
  491.        edup
  492.         org $-2
  493.        if (SCRWID/2)&1
  494.         rra;ex af,af' ;'
  495.         dec hl
  496.         ld b,(hl)
  497.         dec hl
  498.         ld c,(hl)
  499.         rl b
  500.         rl c
  501.         rla;ex af,af' ;'
  502.         rl b
  503.         rl c
  504.         push bc
  505.        endif
  506.         ld bc,MAPWID+SCRWID
  507.         add hl,bc
  508.         exx
  509.         inc h
  510.         ld a,h
  511.         and 7
  512.         jr z,DrawMap_x2line_chr
  513. ;DrawMap_x2line_chrq
  514.         dec b
  515.         jp nz,DrawMap_x2line
  516.         ld sp,iy
  517.         ret
  518. DrawMap_x2line_chr
  519.         ld a,l
  520.         sub -32
  521.         ld l,a
  522.         sbc a,a
  523.         and -8
  524.         add a,h
  525.         ld h,a
  526.         dec b
  527.         jp nz,DrawMap_x2line
  528.         ld sp,iy
  529.         ret
  530.  
  531. DrawMap_x04
  532.         rra
  533.         jp nc,DrawMap_x0
  534. DrawMap_x4
  535. ;если более 5 фреймов отпущены кнопки и мышь, то переходим на DrawMap_x5 (чтобы не мерцало) (TODO по направлению движения на 3 или 5, а при вертикальном движении переприсвоить X?)
  536.        ld a,(nokeytimer) ;счётчик фреймов, где не использовалось управление
  537.        cp 5
  538.        ld a,Tshift/256+2 ;x=5
  539.        jp nc,DrawMap_x35_a
  540.         ex de,hl;LD hl,SCRTOP;SHADOW
  541.         ld ix,3
  542.         add ix,de
  543. DrawMap_x4line
  544. ;ix=mapadr
  545.         ld a,(ix-3)
  546.         ld e,(ix-2)
  547.         ld d,(ix-1)
  548.        ld sp,ix ;mapadr+3, de is ready
  549.         ld c,l
  550.        dup SCRWID/2
  551.         ld (hl),e
  552.         rrd ;18t
  553.         inc l
  554.         ld (hl),d
  555.         rrd ;18t
  556.         inc l
  557.         pop de
  558.        edup
  559.         org $-2
  560.        ld sp,iy;SPOILSTACK
  561.        LD de,MAPWID
  562.        add ix,de
  563.         inc h
  564.         ld a,h
  565.         and 7
  566.         jr z,DrawMap_x4line_chr
  567.         ld l,c
  568. ;DrawMap_x4line_chrq
  569.         dec b
  570.         jp nz,DrawMap_x4line
  571.         ;ld sp,iy
  572.         ret
  573. DrawMap_x4line_chr
  574.         ld a,c
  575.         sub -32
  576.         ld l,a
  577.         sbc a,a
  578.         and -8
  579.         add a,h
  580.         ld h,a
  581.         dec b
  582.         jp nz,DrawMap_x4line
  583.         ;ld sp,iy
  584.         ret
  585.  
  586. DrawMap_x0246
  587.         rra
  588.         jp nc,DrawMap_x04
  589.         rra
  590.         jp nc,DrawMap_x2
  591. DrawMap_x6
  592.         ex de,hl;LD hl,SCRTOP;SHADOW
  593.         ld ix,3
  594.         add ix,de
  595.         ld a,b
  596. DrawMap_x6line
  597. ;ix=mapadr
  598.         ex af,af' ;'
  599.         ld a,(ix-3)
  600.         ld e,(ix-2)
  601.         ld d,(ix-1)
  602.        ld sp,ix ;mapadr+3, de is ready
  603.         rra ;???????1 CY="d0"
  604. x6line_startcritical=$+1
  605.        dup SCRWID/4
  606.         pop bc
  607.         rr e ;restore: -
  608.         rr d ;restore: -
  609.         rr c ;restore: rl c
  610.         rr b ;restore: rl b:rl c
  611.         rra ;restore: rla:rl b:rl c
  612.         rr e ;restore: rl e:rla:rl b:rl c
  613.         rr d ;restore: rl d:rl e:rla:rl b:rl c
  614.         rr c ;restore: rl c:rl d:rl e:rla:rl b:rl c
  615.         rr b ;restore: rl b:rl c:rl d:rl e:rla:rl b:rl c
  616.         ld (hl),e
  617.         inc l
  618.         ld (hl),d
  619.         inc l
  620.         ld (hl),c
  621.         inc l
  622.         ld (hl),b
  623.         rla ;restore: rra:rl b:rl c:rl d:rl e:rla:rl b:rl c
  624.         inc l ;20+88+28 = 136/4 = 34
  625.         pop de ;restore: -
  626.        edup
  627.         org $-3
  628.        if (SCRWID/2)&1
  629.         rla
  630.         inc l
  631.         pop de ;restore: -
  632.         rr e ;restore: rl e
  633.         rr d ;restore: rl d:rl e
  634.         rra ;restore: rla:rl d:rl e
  635.         rr e ;restore: rl e:rla:rl d:rl e
  636.         rr d ;restore: rl d:rl e:rla:rl d:rl e
  637.         ld (hl),e
  638.         inc l
  639.         ld (hl),d
  640.        endif
  641.        ld sp,iy;SPOILSTACK
  642. x6line_endcritical
  643.        LD de,MAPWID
  644.        add ix,de
  645.         ld a,l
  646.         sub SCRWID-1
  647.         ld l,a
  648.         inc h
  649.         ld a,h
  650.         and 7
  651.         jr z,DrawMap_x6line_chr
  652. ;DrawMap_x6line_chrq
  653.         ex af,af' ;'
  654.         dec a
  655.         jp nz,DrawMap_x6line
  656.         ;ld sp,iy
  657.         ret
  658. DrawMap_x6line_chr
  659.         ld a,l
  660.         sub -32
  661.         ld l,a
  662.         sbc a,a
  663.         and -8
  664.         add a,h
  665.         ld h,a
  666.         ex af,af' ;'
  667.         dec a
  668.         jp nz,DrawMap_x6line
  669.         ;ld sp,iy
  670.         ret
  671.  
  672.        if (SCRWID/2)&1
  673. ;after ld (hl)
  674.         nop
  675.         nop
  676.         nop
  677. ;after rr d
  678.         rl d
  679.         rl e
  680.         rla
  681. ;after rr d
  682.         rl d
  683.         rl e
  684.        endif
  685.        dup SCRWID/4
  686. ;after pop de
  687.         jp (hl) ;restore de
  688. ;after inc l
  689.         nop
  690. ;after rla
  691.         rra
  692. ;after ld (hl)
  693.         nop
  694.         nop
  695.         nop
  696.         nop
  697.         nop
  698.         nop
  699.         nop
  700. ;after rr b
  701.         rl b
  702.         rl c
  703.         rl d
  704.         rl e
  705.         rla
  706. ;after rr b
  707.         rl b
  708.         rl c
  709.         rl d
  710.         rl e
  711. ;after pop bc
  712. ;for x6line_startcritical
  713.         ret ;restore bc
  714.        edup
  715. x6line_restorede_startcritical=$-1
  716.  
  717. DrawMap_x7
  718.         ex de,hl;LD hl,SCRTOP;SHADOW
  719.         ld ix,3
  720.         add ix,de
  721. DrawMap_x7line
  722. ;ix=mapadr
  723.         ld a,(ix-3)
  724.         ld e,(ix-2)
  725.         ld d,(ix-1)
  726.        ld sp,ix ;mapadr+3, de is ready
  727.         ld c,l
  728.         rra
  729.        dup SCRWID/2
  730.         ld a,e
  731.         rra
  732.         ld (hl),a
  733.         inc l
  734.         ld a,d
  735.         rra
  736.         ld (hl),a
  737.         inc l
  738.         pop de
  739.        edup
  740.         org $-2
  741.        ld sp,iy;SPOILSTACK
  742.        LD de,MAPWID
  743.        add ix,de
  744.         inc h
  745.         ld a,h
  746.         and 7
  747.         jr z,DrawMap_x7line_chr
  748.         ld l,c
  749. ;DrawMap_x7line_chrq
  750.         dec b
  751.         jp nz,DrawMap_x7line
  752.         ;ld sp,iy
  753.         ret
  754. DrawMap_x7line_chr
  755.         ld a,c
  756.         sub -32
  757.         ld l,a
  758.         sbc a,a
  759.         and -8
  760.         add a,h
  761.         ld h,a
  762.         dec b
  763.         jp nz,DrawMap_x7line
  764.         ;ld sp,iy
  765.         ret
  766.  
  767. DrawWater_Amhgt_DEgfx
  768.         ld (DrawWaterSP),sp
  769.        ld c,a ;-32..-1
  770.         and 7
  771.         add a,0x50
  772.         LD H,A
  773.        ld a,c
  774.        and 0x18
  775.        add a,a
  776.        add a,a
  777.        add a,0x1f
  778.        ld l,a
  779.         ;LD L,#7F
  780. PRWAT0  LD A,(DE)
  781.         INC E
  782.         LD C,A
  783.         LD A,(DE)
  784.         LD B,A
  785.        ld a,e
  786.         inc e
  787.        xor e
  788.        and 0xf0
  789.        jr z,$+2+4
  790.          ld a,e
  791.          add a,32
  792.          ld e,a
  793.        
  794.         LD SP,HL
  795.         DUP 15
  796.         PUSH BC
  797.         EDUP
  798.         ;ld l,0x7e
  799.         ;dup 15
  800.         ;ld (hl),b
  801.         ;dec l
  802.         ;ld (hl),c
  803.         ;dec l
  804.         ;edup
  805.         ;org $-1
  806.        ;ld a,l
  807.        ;sub 30
  808.        ;ld l,a
  809.        ;ld (hl),c
  810.        ;inc l
  811.        ;ld (hl),b ;иначе запарывает 56ff и т.п.
  812.        ;add a,30
  813.        ;ld l,a
  814.        
  815.         INC H
  816.         BIT 3,H
  817.         JR Z,PRWAT0
  818.         res 3,h
  819.         ld a,l
  820.         sub -32
  821.         ld l,a
  822.         jp p,PRWAT0
  823. DrawWaterSP=$+1
  824.         LD SP,0
  825.         RET  
  826.  
  827.        if 1
  828. DDE
  829.         INC D
  830.         LD A,D
  831.         AND 7
  832.         RET NZ
  833.         LD A,E
  834.         ADD A,32
  835.         LD E,A
  836.         RET C
  837.         LD A,D
  838.         ADD A,-8
  839.         LD D,A
  840.         RET
  841.        endif
  842.        if 0
  843. DBC
  844.         INC B
  845.         LD A,B
  846.         AND 7
  847.         RET NZ
  848.         LD A,C
  849.         ADD A,32
  850.         LD C,A
  851.         RET C
  852.         LD A,B
  853.         ADD A,-8
  854.         LD B,A
  855.         RET
  856.        endif
  857.  
  858.         display "drawmapsize=",$-DrawMap,"+0x400 shifts"
  859.