?login_element?

Subversion Repositories NedoOS

Rev

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