?login_element?

Subversion Repositories NedoOS

Rev

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

  1.         DEVICE ZXSPECTRUM128
  2.         include "settings.asm"
  3.  
  4. music=doublescr
  5.  
  6. NTEXPGS=0
  7. ;curpg=0x5b5c
  8.  
  9. pgtmp=#04
  10. pgmusic=#06
  11.  
  12. texturesinpg=12
  13. spritesinpg=8;4
  14.  
  15. ;tcos=#5B00
  16. imer=#7F7F
  17. INTSTACK=imer
  18. imstackbegin=imer&0xff00
  19. distbuf=#7C00 ;#300 ;ID,texx,dist
  20.  
  21.         page 0
  22.         ORG #6000;,0
  23. begin
  24.         jp init
  25.        IF doublescr
  26. SETPGmusic_silent
  27.         ld a,pgmusic
  28.         jr SETPG_silent
  29. SETPG
  30.         LD (curpg),A
  31. SETPG_silent
  32. curscr=$+1
  33.         OR 0
  34.         LD BC,#7FFD
  35.         OUT (C),A
  36.         RET
  37.        ENDIF
  38.  
  39.         include "my_int.asm"
  40.         INCLUDE "WCTRL.ASM"
  41.  
  42.         include "beeper.asm"
  43.         include "beeper_sfxdata.asm"
  44.         include "anims.asm"
  45.         include "savestate.asm"
  46.  
  47. drawhud
  48. ;вызывается из ZXLOOP
  49.        IF doublescr
  50.         LD A,#17
  51.         CALL SETPG
  52.        ENDIF
  53.         ld hl,sprweapon1
  54.         ld de,0x50e0
  55.         call drawsprchr2
  56.         inc e
  57.         call drawsprchr2
  58.         inc e
  59.         call drawsprchr2
  60.         inc e
  61.         call drawsprchr2
  62.         inc e
  63.         call drawsprchr ;sprbullets
  64.         ld a,(bullets)
  65.         call draw99
  66.         inc e
  67.         call drawsprchr ;sprgrenades
  68.         ld a,(grenades)
  69.         call draw9
  70.         inc e
  71.         ld a,(leveltime+1)
  72.         call draw99
  73.         ld a,(leveltime)
  74.         call draw99
  75.         ld bc,0x52e0+21
  76.         call drawhuddot
  77.         ld bc,0x55e0+21
  78.         call drawhuddot
  79.         inc e
  80.         call drawsprchr ;sprhealth
  81. ;drawhudhealth
  82.         if doublescr
  83.         push de
  84.         call drawhudhealth_1scr
  85.         pop de
  86.         set 7,d
  87. drawhudhealth_1scr
  88.         endif
  89.         ex de,hl
  90.         inc h
  91.         ;ld hl,0x50e0+25
  92.         ld a,(health)
  93.         srl a
  94.         ld e,a
  95. drawhudhealthline0        
  96.         push hl
  97.         ld (hl),0x3f
  98.         ld b,6
  99.         inc l
  100.         ld (hl),0xff
  101.         djnz $-3
  102.         pop hl
  103.         inc h
  104.         bit 0,h
  105.         jr z,drawhudhealthline0
  106.         ld (hl),0x20
  107.         inc h
  108.  
  109.         ld a,-4
  110.         call drawhudhealthcolumncount
  111.         set 5,c
  112.         call drawhudhealthcolumn      
  113.         call drawhudhealthcolumncountdraw2
  114.         call drawhudhealthcolumncountdraw2
  115. drawhudhealthcolumncountdraw2
  116.         call drawhudhealthcolumncountdraw
  117. drawhudhealthcolumncountdraw
  118.         call drawhudhealthcolumncount
  119. drawhudhealthcolumn
  120. ;de=scraddr
  121. ;c=1100000 и т.п.
  122.         ld (hl),c
  123.         inc h
  124.         ld (hl),c
  125.         inc h
  126.         ld (hl),c
  127.         dec h
  128.         dec h
  129.         inc l
  130.         ret
  131.  
  132. drawhudhealthcolumncount
  133. ;e=health
  134. ;a=health left value
  135.         ld c,1
  136. drawhudhealthcolumncount0
  137.         cp e
  138.         rl c
  139.         inc a
  140.         jr nc,drawhudhealthcolumncount0
  141.         ret
  142.  
  143. draw99
  144.         ld bc,10-256
  145.         inc b
  146.         sub c
  147.         jr nc,$-2
  148.         add a,c
  149.         push af
  150.         ld a,b
  151.         call draw9
  152.         pop af
  153. draw9
  154.         push hl
  155.         add a,a
  156.         add a,a
  157.         add a,a
  158.         ld hl,sprdigits
  159.         add a,l
  160.         ld l,a
  161.         jr nc,$+3
  162.         inc h
  163.         call drawsprchr
  164.         pop hl
  165.         ret
  166.  
  167. drawhuddot
  168.         if doublescr
  169.         call drawhuddot_1scr
  170.         set 7,b
  171. drawhuddot_1scr
  172.         endif
  173.         ld a,(bc)
  174.         or 0x80
  175.         ld (bc),a
  176.         ret
  177.  
  178. drawsprchr2
  179.         call drawsprchr
  180. drawsprchr
  181.         if doublescr
  182.         push de
  183.         push hl
  184.         set 7,d
  185.         call drawsprchr_1scr
  186.         pop hl
  187.         pop de
  188. drawsprchr_1scr
  189.         endif
  190.         push de
  191.         ld b,8
  192. drawsprchr0
  193.         ld a,(hl)
  194.         ld (de),a
  195.         inc hl
  196.         inc d
  197.         djnz drawsprchr0
  198.         pop de
  199.         inc e
  200.         ret
  201.        
  202.  
  203. ;переменные рендера (обновляются в начале рендера)
  204. curXx
  205. curx    DB #80
  206. curX    DB #0
  207. curYy
  208. cury    DB #80
  209. curY    DB #0
  210. curxy   DW 0
  211. curyx   DW 0
  212. curYX   DW 0
  213. curangle
  214.         DW tsin
  215.        if 0
  216. demobegin
  217.        IF demoplay
  218.         INCBIN "demorec*"
  219.        ELSE
  220.         DB %00111111 ;all keys released
  221.        ENDIF
  222.        endif
  223.  
  224.         include "hud.ast"
  225.  
  226.         align 256
  227. tlogd2sca
  228.        IF scale64
  229.        IF scale64 == 3
  230.         INCBIN "logd2sc3"
  231.        ELSE
  232.         INCBIN "logd2sc2"
  233.        ENDIF
  234.        ELSE
  235.         INCBIN "logd2sc_"
  236.        ENDIF
  237. tsqr2
  238.         INCBIN "sqr2int"
  239. tlogd
  240.         INCBIN "logd" ;первые 128 байт (64 при antizalom) не используются - TODO
  241. tcorrlogd
  242.         INCBIN "corlogd_"
  243.         ORG $-256
  244.        DUP 256
  245.         DB {$+(scrtopx*8)}&0xff
  246.        EDUP
  247.        IF lores
  248.         ORG $-256
  249. _=$
  250.        DUP 128
  251.         DB {_}&0xff
  252. _=_+2
  253.        EDUP
  254.         DS 128
  255.        ENDIF
  256. tcos
  257.         DS 256
  258. tlogcos
  259.         INCBIN "pluslcos"
  260. tda
  261.         INCBIN "da"
  262.         ORG $-256
  263.        DUP 256
  264.         DB 0xff&({$}+128)
  265.        EDUP
  266.         ORG $-256
  267.        DUP 256
  268.         DB 0xff&({$+(scrtopx*8)})
  269.        EDUP
  270.        IF lores
  271.         ORG $-256
  272. _=$
  273.        DUP 128
  274.         DB {_}&0xff
  275. _=_+2
  276.        EDUP
  277.         DS 128
  278.        ENDIF
  279. tctg
  280.         INCBIN "plusctg"
  281. tsin
  282.         INCBIN "sin"
  283. cursprites
  284.         DS 256
  285.  
  286.         DISPLAY "tables end=",$
  287. tscalesw3
  288.         incbin "scalesw3"
  289.  
  290.  
  291.         ;DS #8000-$
  292.  
  293.         ds imstackbegin-$
  294.         ds imer-$
  295.         include "int.asm"
  296.  
  297.         ;DS ((IMER/256+1)<<8)-$
  298.         ;ds (IMER&0xff00)-$
  299.  
  300.         ds 0x8000-$ ;ORG #8000
  301. imvec
  302.         DS 257,imer&0xff
  303.  
  304.         INCLUDE "zxloop.asm"
  305.         INCLUDE "WSCAN10.asm"
  306.         INCLUDE "WREND.asm"
  307.  
  308. badmonstexture
  309.         db 0xc0,0xff
  310.  
  311.         align 256
  312. t1x
  313.         db 255
  314.         dup 255
  315.         db (255*2/($&0xff)+1)/2
  316.         edup
  317.  
  318.         DISPLAY "48K PROG END=",$
  319.  
  320.         ORG distbuf
  321.         include "recmap.asm"
  322.  
  323.         DS distbuf+#300-$
  324.  
  325. ;;;;;
  326.         ORG scrbuf
  327. GO
  328.         ;xor a
  329.         ;out (0xfe),a
  330.         DI
  331.         LD HL,WAStcos
  332.         LD DE,tcos
  333.        PUSH DE
  334.         LD BC,256
  335.         LDIR
  336.        POP HL
  337. REtcos0
  338.        DUP 2;4
  339.         SRA (HL)
  340.        EDUP
  341.         INC L
  342.         jr nz,REtcos0
  343.  
  344.         LD HL,imvec
  345.         LD DE,imvec+1
  346.         LD (HL),imer/256
  347.         LD B,E,C,L
  348.         LD A,H
  349.         LDIR
  350.         LD I,A
  351.         IM 2
  352.         EI
  353.        HALT
  354.         LD HL,-2
  355.         ADD HL,SP
  356.         LD (clscrbufsp),HL
  357.         LD (eorfillsp),HL
  358.         ld hl,ZXLOOP
  359.         push hl
  360.         LD BC,#FBDF
  361.         IN A,(C)
  362.         LD (mouseoldx),A       
  363.         JP RECMAP ;->ZXLOOP
  364.        
  365.         display "ZXLOOP=",ZXLOOP
  366.  
  367. WASMAP
  368.        IF invmap;atm
  369.         INCBIN "mapatm.E"
  370.        ELSE
  371.         INCBIN "map48.E"
  372.        ENDIF
  373. szMAP=$-WASMAP
  374.  
  375. WAStcos
  376.         INCBIN "cos"
  377. init
  378.         if mouse
  379.         call initmouse
  380.         endif
  381. ;prepare 48K block
  382.         DI ;IY
  383.         LD HL,#5800
  384.         LD DE,#5801
  385.         LD BC,767
  386.         LD (HL),L
  387.         LDIR
  388.         call gettexpg
  389.        if doublescr        
  390.        LD A,0x10+pgtmp
  391.        call SETPG
  392.         call gettexpg
  393.        endif
  394.        IF music && !atm
  395.         call SETPGmusic_silent
  396.         CALL #c000 ;init mus
  397.        ENDIF
  398.        if doublescr        
  399.        LD A,0x10
  400.        call SETPG
  401.        endif
  402.         LD IY,23610
  403.         EI
  404.        JP GO ;там recmap, внутри INICLS
  405.        
  406. gettexpg
  407.         ld hl,wasgoods
  408.         ld de,0x4000
  409.         ld bc,0x1000
  410.         ldir
  411.         ld de,0xb000
  412.         ld bc,0x1000
  413.         ldir
  414.         ld hl,0xffff-0x2000
  415.         ld de,0xffff
  416.         ld bc,0x2000
  417.         lddr
  418.         LD HL,0x2000+waswalls;#C000
  419.         call copyscrcolumns_2k
  420.         LD DE,#C000+0x80;maxscale+1
  421.        LD HY,d;0xc0;#FE
  422. ;4 upper textures = #09A6
  423. ;4 lower textures = #0AAC
  424.         LD HL,0x5000
  425.         CALL GETTEX
  426.         CALL GETTEX
  427.         CALL GETTEX
  428.         CALL GETTEX
  429.         LD HL,0x2000+waswalls+0x800;#C000
  430.         call copyscrcolumns_2k
  431.         LD HL,0x5000
  432.         CALL GETTEX
  433.         CALL GETTEX
  434.         CALL GETTEX
  435.         CALL GETTEX
  436.         LD HL,0x2000+waswalls+0x1000;#C000
  437.         call copyscrcolumns_2k
  438.         LD HL,0x5000
  439.         CALL GETTEX
  440.         CALL GETTEX
  441.          CALL GETTEX
  442.          CALL GETTEX
  443.         ;walls: [e2b8] (e3b4 8spr, e274 4spr?), walls2: (eef6 8spr, ec88 4spr?)
  444.         ;LD HL,wasgoods
  445.         ;call copyscrcolumns_4k
  446.       if sprites
  447.        LD HL,0x4000
  448.        CALL GETSPR
  449.        LD HL,0x4400
  450.        CALL GETSPR
  451.        LD HL,0x4800
  452.        CALL GETSPR
  453.        LD HL,0x4c00
  454.        CALL GETSPR
  455.         ;LD HL,wasgoods+0x1000;#C000
  456.         ;call copyscrcolumns_4k
  457.         ;jr $
  458.       if spritesinpg==8
  459.        LD HL,0xb000
  460.        CALL GETSPR
  461.        LD HL,0xb400
  462.        CALL GETSPR
  463.        LD HL,0xb800
  464.        CALL GETSPR
  465.        LD HL,0xbc00
  466.        CALL GETSPR
  467.       endif
  468.       endif
  469.         ;jr $ ;walls: с оптимизацией f699(f4c0) (12 шт+4 спрайта без оптимизации(с оптимизацией)), (fdbd 8spr, fb6f 4spr?) walls2: 00f4(febd), (0cc0 8spr, 07d6 4spr?)
  470.         ;jr $ ;пак 7: с оптимизацией de=ec70[ebdf] (f4c8 12 шт)
  471.         ;jr $ ;пак 3: с оптимизацией de=e1e4[de70]
  472.         ;jr $ ;пак 2: с оптимизацией de=f070[f6cd]
  473.         ;jr $ ;пак 1: с оптимизацией de=efdf[ef76, без оптимизации f256]
  474.        
  475.         if 1
  476. ;исправляем переполнения адресов текстур (адреса в ПЗУ заменяем на 0xc080, а для спрайтов на badmonstexture)
  477.         ld h,0xc0
  478. fixtexoverflow0
  479.         ld l,0x40
  480. fixtexoverflow1
  481.         ld e,(hl)
  482.         inc h
  483.         ld d,(hl)
  484.         bit 7,d
  485.         jr nz,$+5 ;не в ПЗУ
  486. badaddrpatch=$+1
  487.          ld de,0xc080
  488.         ld (hl),d
  489.         dec h
  490.         ld (hl),e
  491.         inc l
  492.         jp p,fixtexoverflow1
  493.         inc h
  494.         inc h
  495.         ld de,badmonstexture
  496.         ld a,h
  497.         cp 0xc0+(2*texturesinpg)
  498.         jr c,$+6
  499.          ld (badaddrpatch),de
  500.         cp 0xc0+(2*(texturesinpg+spritesinpg))
  501.         jr nz,fixtexoverflow0
  502.         endif
  503.  
  504. ;составляем таблицу масштабирования    
  505.         ld hl,tscalesw3
  506.         ld c,0
  507.         ld b,64
  508. initscales0
  509.         ld e,(hl)
  510.         inc hl
  511.         ld d,(hl)
  512.         inc hl
  513.         push hl
  514.         ld l,c
  515.         push bc
  516.         ld b,d
  517.         ld c,e ;adder 8.8
  518. ;надо из 0040...0400 сделать 78..00 до начала(0x80 -08..-80) = 0x80 - adder*32
  519. ;надо из 0040...0400 сделать 78..04 в начале (0x80 -08..-7c) = 0x80 - adder*31
  520. ;...
  521. ;надо из 0040...0400 сделать 87..f4          (0x80 +07..+74)
  522. ;надо из 0040...0400 сделать 88..f8 в конце  (0x80 +08..+78)
  523.         dup 5
  524.         sla e
  525.         rl d
  526.         edup
  527.         xor a
  528.         sub e
  529.         ld e,a
  530.         ld a,0x80
  531.         sbc a,d
  532.         ld d,a ;0x80 - adder*32
  533.         ld h,0xc0
  534.         ld (hl),0 ;зачем? при d виснет из-за спрайтов
  535.         inc h
  536. initscales1
  537.         ex de,hl
  538.         add hl,bc
  539.         ex de,hl
  540.         ld (hl),d ;Ys=(Y/32-1)*sc
  541.         inc h
  542.         jr nz,initscales1
  543.         pop bc
  544.         inc c
  545.         pop hl
  546.         djnz initscales0
  547.         LD H,#C1
  548. INIRETAB0 ;
  549.         LD L,0
  550.         LD B,maxscale+1
  551. INIRETAB1 ;
  552.         LD A,(HL)
  553.         CP 128-(scrhgtpix/2)
  554.         jr nc,$+4
  555.         LD A,128-(scrhgtpix/2)
  556.         CP 128+(scrhgtpix/2);-1
  557.         jr c,$+4
  558.        ;LD A,128+(scrhgtpix/2)-1 ;видно линию внизу от переполн-й
  559.        LD A,0xff&(dropline-(scrbuf+(scrhgtpix/2)-128))
  560.         ADD A,+(0xff&scrbuf)+(scrhgtpix/2)-128
  561.         LD (HL),A
  562.         INC L
  563.         DJNZ INIRETAB1
  564.         INC H
  565.         LD A,H
  566.         INC A ;#C0XX,#FFXX не трогаем
  567.         jr nz,INIRETAB0
  568.        LD HL,#FF00
  569.        LD DE,#FF01
  570.        LD BC,maxscale
  571.        LD (HL),1
  572.        LDIR
  573.         ret
  574.  
  575.         if mouse
  576. initmouse
  577.         ei
  578.         halt
  579.       ;задержка, чтобы мышка успевала опознаваться - min 2500 тактов для Evo (компа с 280к тактов быстродействия)
  580.       LD B,75
  581. prosirtime
  582.       LD DE,(0)        ;20 тактов
  583.       DJNZ prosirtime  ;13 тактов
  584.   ld a, 0x90
  585.   out (0x7F), a
  586.   out (0x5F), a
  587.   ld bc, 0x0FFDF
  588.   in h, (c)
  589.   ld b, 0x0FB
  590.   in l, (c)
  591.   dec b
  592.   in a, (c)
  593.   cp l
  594.   ret nz ;jr nz, @detected
  595.   cp h
  596.   ret nz ;jr z, @comeon
  597.         LD A,0xaf ;xor a
  598.         LD (mouseon),A
  599.         ;ld hl,0x18+(256*readmousejr) ;"jr"
  600.         ;ld (readmouse_patch),hl
  601.         ret
  602.         endif
  603.  
  604. copyscrcolumns_2k
  605.         push de
  606.         ld de,0x5000
  607.         ld bc,0x800
  608.         ldir
  609.         pop de
  610.         ret
  611.  
  612. GETTEX
  613.        IF scale64
  614.         LD LY,#40
  615.        ELSE
  616.         LD LY,#80
  617.        ENDIF
  618.         LD BC,#0880 ;B=width/8, C=#80(mask)
  619. GETTEX00 ;
  620.        PUSH BC
  621. GETTEX0
  622.         push hl
  623.         CALL GETTEXLINE
  624.         pop hl
  625.         INC LY
  626.        IF scale64 == 0
  627.        INC LY
  628.        ENDIF
  629.         RRC C
  630.         jr nc,GETTEX0
  631.         ;INC L
  632.         ld bc,64
  633.         add hl,bc
  634.        POP BC
  635.         DJNZ GETTEX00
  636.        inc hy,hy;DEC HY,HY
  637.         RET
  638.  
  639. GETSPR
  640.         ;jr $
  641.        IF scale64
  642.         LD LY,#40
  643.        ELSE
  644.         LD LY,#80
  645.        ENDIF
  646.         LD BC,#0880 ;B=width/8, C=#80(mask)
  647. GETSPR00 ;
  648.        PUSH BC
  649. GETSPR0
  650.         push hl
  651.         CALL GETSPRLINE
  652.         pop hl
  653.         INC LY
  654.        IF scale64 == 0
  655.        INC LY
  656.        ENDIF
  657.         RRC C
  658.         jr nc,GETSPR0
  659.         ;INC L
  660.         ld bc,128;64
  661.         add hl,bc
  662.        POP BC
  663.         DJNZ GETSPR00
  664.        inc hy,hy;DEC HY,HY
  665.         RET
  666.  
  667. GETTEXincD
  668.         call GETincD
  669.        JR GETTEXRETRY
  670.  
  671. GETTEXLINE
  672.        PUSH HL
  673. GETTEXRETRY ;
  674.        LD (gettexDE),DE ;linelength addr
  675.        POP HL
  676.        PUSH HL
  677.         LD (IY),E
  678.        IF scale64 == 0
  679.        LD (IY+1),E
  680.        ENDIF
  681.         INC HY
  682.         LD (IY),D
  683.        IF scale64 == 0
  684.        LD (IY+1),D
  685.        ENDIF
  686.         DEC HY
  687.        inc e
  688.        dec e
  689.        jr z,GETTEXincD
  690.         INC E
  691.         ;jr z,GETTEXincD
  692.         LD LX,0;C ;bit
  693.         LD HX,17 ;17-pixels
  694.         LD B,62 ;62..1 -> 1..62
  695. GETTEX1 ;
  696.         inc hl;CALL DHL
  697.         LD A,(HL)
  698.         AND C
  699.         CP LX
  700.         LD LX,A
  701.         jr z,GETTEXN
  702.        LD A,HX
  703.        OR A
  704.        jr z,GETTEXN ;can't add more pixels
  705.        inc e
  706.        dec e
  707.        jr z,GETTEXincD
  708.         LD A,tscale/256+63
  709.         SUB B
  710.         LD (DE),A
  711.         DEC HX ;17-pixels
  712.         INC E ;todo check before write
  713.         ;jr z,GETTEXiD
  714. GETTEXN ;
  715.         DJNZ GETTEX1   
  716.         LD A,HX ;17-pixels
  717.         ADD A,A
  718.         ADD A,A
  719.         ADD A,A
  720.         SUB HX  ;(17-pixels)*7
  721.        ADD A,DWJP&0xff
  722. gettexDE=$+1
  723.         LD (0),A
  724.         ld a,17+1
  725.         sub hx ;17+1-(17-pixels)
  726.         ld (gettexB),a ;size=1+pixels (min=2 из-за линии пола)
  727.        POP HL
  728.  
  729. GETTEX_cmp ;сравнение с предыдущими столбцами
  730.          push de
  731.          push iy
  732. GETTEX_cmpnext
  733.         ld hl,(gettexDE)
  734.         ld a,ly
  735.         cp 0x40 ;ниже этого tscales
  736.         jr nz,GETTEX_cmpgo
  737.         ld a,hy
  738.         cp 0xc0
  739.         jr z,GETTEX_endcmp
  740.         ld ly,0x80;7f
  741.         dec hy,hy
  742. GETTEX_cmpgo
  743.         dec ly
  744.         ld e,(iy)
  745.         inc hy
  746.         ld d,(iy)
  747.         dec hy
  748.         ;ld a,17+1
  749.         ;sub hx ;17+1-(17-pixels)
  750. gettexB=$+1
  751.         ld b,0;a ;size=1+pixels (min=2 из-за линии пола)
  752. GETTEX_cmp1
  753.         ld a,(de)
  754.         cp (hl)
  755.         jr nz,GETTEX_cmpnext
  756.         inc hl
  757.         inc de
  758.         djnz GETTEX_cmp1
  759. ;поставить ссылку на прошлую копию
  760.         ld e,(iy)
  761.         inc hy
  762.         ld d,(iy)
  763.          pop iy
  764.          pop af;de
  765.         LD (IY),e
  766.         INC HY
  767.         LD (IY),d
  768.         DEC HY
  769.         ld de,(gettexDE) ;откатить DE
  770.         ret
  771. GETTEX_endcmp
  772.          pop iy
  773.          pop de
  774.         RET
  775.  
  776. GETSPRincD
  777.         call GETincD
  778.         JR GETSPRRETRY
  779.  
  780. GETSPRLINE
  781.        PUSH HL
  782. GETSPRRETRY ;
  783.        LD (gettexDE),DE ;linelength addr
  784.        POP HL
  785.        PUSH HL
  786.         LD (IY),E
  787.        IF scale64 == 0
  788.        LD (IY+1),E
  789.        ENDIF
  790.         INC HY
  791.         LD (IY),D
  792.        IF scale64 == 0
  793.        LD (IY+1),D
  794.        ENDIF
  795.         DEC HY
  796.        ld a,l
  797.        add a,2*62
  798.        ld l,a ;line 62
  799.         LD HX,1
  800.         ld lx,2 ;size
  801. GETSPR1 ;
  802.         CALL FIND10
  803.         jr nc,GETSPRQ ;end of column
  804.        inc e
  805.        dec e
  806.        jr z,GETSPRincD
  807.         LD A,HX
  808.         CPL
  809.         LD (DE),A ;Y
  810.          inc lx
  811.         INC E
  812.         ;jr z,GETSPRiD
  813.         CALL FIND1HEIGHT
  814.        inc e
  815.        dec e
  816.        jr z,GETSPRincD
  817.         LD A,HX
  818.         CPL
  819.         LD (DE),A ;Y2
  820.          inc lx
  821.         INC E
  822.         ;jr z,GETSPRiD
  823.         CALL FIND0HEIGHT
  824.        inc e
  825.        dec e
  826.        jr z,GETSPRincD
  827.         LD A,HX
  828.         CPL
  829.         LD (DE),A ;Y3
  830.          inc lx
  831.         INC E
  832.         ;jr z,GETSPRiD
  833.         JR GETSPR1
  834. GETSPRQ
  835.        inc e
  836.        dec e
  837.        jr z,GETSPRincD
  838.         LD A,#C0
  839.         LD (DE),A
  840.         INC E
  841.         ;jr z,GETSPRiD
  842.        inc e
  843.        dec e
  844.        jr z,GETSPRincD
  845.         LD A,#FF
  846.         LD (DE),A
  847.         INC E
  848.         ;jr nz,$+5
  849.         ; INC D
  850.         ; LD E,maxscale+1
  851.        POP HL
  852.         ld a,lx
  853.         ld (gettexB),a
  854.        
  855.         jp GETTEX_cmp ;сравнение с предыдущими столбцами
  856.  
  857. GETincD
  858.         INC D
  859.        LD E,0x80;maxscale+1
  860.        ld a,d
  861.        cp 0xc0+(2*(texturesinpg+spritesinpg))
  862.        jr c,$+4;GETSPRRETRY
  863.        ld e,0x40 ;дальше нет таблиц адресов
  864.        ret
  865.  
  866. maxVhgt=12;14;10 ;при максимальном увеличении (в 4 раза) должно отрисовывать не более maxlinehgt=59 пикселей! (TODO почему 13,14 глючат???)
  867.  
  868. ;HX=V
  869. ;HL=mask
  870. FIND10
  871.         LD A,HX
  872.         CP 63
  873.         RET Z ;CY=0: end of column
  874.         CALL GETPIXEL
  875.         RET C ;CY=1: pixel
  876.         dec hl;CALL UHL
  877.          dec hl
  878.         INC HX ;V
  879.         JR FIND10
  880. FIND1HEIGHT
  881.        ;LD LX,HX ;oldV
  882.         LD B,0
  883. F1H0    CALL GETPIXEL
  884.         RET NC ;transparent
  885.         RET Z ;0
  886.         dec hl;CALL UHL
  887.          dec hl
  888.         INC HX ;V
  889.         INC B
  890.         LD A,B
  891.         CP maxVhgt
  892.         jr c,F1H0
  893.         RET
  894. FIND0HEIGHT
  895.        ;LD LX,HX ;oldV
  896.         LD B,0
  897. F0H0    CALL GETPIXEL
  898.         RET NC ;transparent
  899.         RET NZ ;1
  900.         dec hl;CALL UHL
  901.          dec hl
  902.         INC HX ;V
  903.         INC B
  904.         LD A,B
  905.         CP maxVhgt
  906.         jr c,F0H0
  907.         RET
  908.  
  909. GETPIXEL
  910.         LD A,HX
  911.         CP 63
  912.         RET Z ;CY=0: transparent
  913.         inc l;set 1,h;SET 3,L
  914.         LD A,(HL)
  915.         dec l;res 1,h;RES 3,L
  916.         AND C
  917.         RET NZ ;CY=0: transparent
  918.         LD A,(HL)
  919.         AND C
  920.         SCF ;CY=1: pixel (Z)
  921.         RET
  922.        
  923.         if 0
  924. UHL
  925.         LD A,H
  926.         DEC H
  927.         AND 7
  928.         RET NZ
  929.         LD A,L
  930.         SUB #20
  931.         LD L,A
  932.         RET C
  933.         LD A,H
  934.         ADD A,8
  935.         LD H,A
  936.         RET
  937.         endif
  938. ;endall
  939.         display "end init=",$
  940.  
  941.         DS 0xb000-$
  942.         DS #C000-$
  943.  
  944.         if 0
  945.         ;ORG #C000
  946.        IF scale64
  947.        IF scale64 == 3
  948.         INCBIN "tscale3"
  949.        ELSE
  950.         INCBIN "tscale2"
  951.        ENDIF
  952.        ELSE
  953.         INCBIN "tscale"
  954.        ENDIF
  955.         endif
  956.  
  957. ;hicode_begin
  958.         ;ds 0x10000-0x1800-0x0800-$ ;0xс040..7f содержит таблицы адресов текстуры (16 текстур?)
  959.         ds 0x10000-0x1800-0x2000-$ ;0xс040..7f содержит таблицы адресов текстуры (16 текстур?)
  960. waswalls
  961.         incbin "walls.bin"
  962. wasgoods
  963.         incbin "goods.bin"
  964. ;hicode_end
  965. end
  966.  
  967.         page pgtmp
  968.         org 0xc000
  969. hicode_begin
  970.         ds 0x10000-0x1800-0x2000-$
  971. ;waswalls
  972.         incbin "walls2.bin"
  973. ;wasgoods
  974.         incbin "goods2.bin"
  975. hicode_end
  976.  
  977.         page pgmusic
  978.         org 0xc000
  979. hicode2_begin
  980.         include "../../_sdk/ptsplay.asm"
  981. MDLADDR
  982.         incbin "testmusi.pt3"
  983. hicode2_end
  984.  
  985.         page 0
  986.        if doublescr
  987.         savebin "code.c",begin,end-begin
  988.         page pgtmp
  989.         savebin "hicode.c",hicode_begin,hicode_end-hicode_begin
  990.         page pgmusic
  991.         savebin "hicode2.c",hicode2_begin,hicode2_end-hicode2_begin
  992.        else
  993.         savebin "code.c",begin,hicode_end-begin
  994.        endif
  995.  
  996.         LABELSLIST "../../../us/user.l",1
  997.