?login_element?

Subversion Repositories NedoOS

Rev

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

  1. atm=0
  2.  
  3. ;ZX data:
  4. ;music=0;1
  5.  
  6. debug=0
  7. demorec=0
  8. demoplay=0;1
  9.  
  10. ;control:
  11. doublespeed=0;1
  12. doublerotate=1
  13. autostrafe=1
  14. kempston=0;1
  15. mouse=1
  16. mindist=111 ;max=111
  17.  
  18. colour=7
  19. ceilingcolour=0
  20. floorcolour=colour*9
  21.  
  22. showfps=1
  23. showscans=0
  24. crosshair=0
  25.  
  26. sprites=1
  27.  
  28. scale64=3;1
  29.  
  30. ;render:
  31. scrhgt=16;24 ;chr$ (10,12,...,24)
  32. scrwid=24;32 ;chr$
  33. scrhgtpix=scrhgt*8
  34. scrtopx=(32-scrwid)/2
  35. scrtop=(24-scrhgt)*16+#4000+scrtopx
  36. attrtop=(scrtop/8)&0x300+(0xff&scrtop)+0x5800
  37. lowscrtop=#4800+scrtopx
  38. lowattrtop=(lowscrtop/8)&0x300+(0xff&lowscrtop)+0x5800
  39. lowscrhgt=8 ;chr$
  40. lowscrhgtpix=lowscrhgt*8
  41.         IF scale64
  42.  maxscale=63
  43.  IF scale64-3 == 0
  44.   lowmaxscale=28 ;fit in low screen
  45.  ELSE
  46.   lowmaxscale=19 ;fit in low screen
  47.  ENDIF
  48.         ELSE
  49.  maxscale=127
  50.  lowmaxscale=25 ;fit in low screen
  51.         ENDIF
  52. mapdifbit=5;7
  53. lores=0
  54.         IF atm == 0
  55. optres=1&(1-lores) ;+22t на мелких, выигрыш на крупных
  56.         ELSE
  57. lores=1
  58. optres=0
  59.         ENDIF
  60. optfast=0
  61. loresspr=0
  62. optresspr=1&(1-loresspr) ;выигрыш на крупных
  63. loresspr_hires=loresspr&(1-lores)
  64. pixperchr=8>>lores
  65. corr_coord=1
  66. interpolate=16
  67.  
  68. doublescr=0;1
  69.  
  70. ;tcos=#5B00
  71. imer=#7F7F
  72. imstack=imer
  73. distbuf=#7C00 ;#300 ;ID,texx,dist
  74. ;imvec=#9F00
  75. scrbuf=#A040
  76. lowscrbuf=(scrhgtpix-lowscrhgtpix)/2+scrbuf
  77. scrbufflag=scrbuf&#FF00+32
  78. dropline=scrhgt*8+.scrbuf ;Y=192
  79. map=#A001 ;+0 занят dropline, +32 занят флагом высоких
  80. mapend=map+#2000
  81. invmap=1
  82.  
  83.         if atm == 0
  84. tscale=#C000 ;128x64, множители 0 и 63 выдают константы 0 и 3
  85.              ;64x64 при scale64=1
  86.         endif
  87.  
  88. pgtmp=#01
  89.  
  90.         ORG #C000,pgtmp
  91.         INCBIN "walls_bw"
  92.         INCBIN "goods_bw"
  93.  
  94.         ORG #6000,0
  95. begin
  96. tlogd2sca
  97.        IFN scale64
  98.        IF0 scale64-3
  99.         INCBIN "logd2sc3"
  100.        ELSE
  101.         INCBIN "logd2sc2"
  102.        ENDIF
  103.        ELSE
  104.         INCBIN "logd2sc_"
  105.        ENDIF
  106. tsqr2
  107.         INCBIN "sqr2int"
  108. tlogd
  109.         INCBIN "logd"
  110. tcorrlogd
  111.         INCBIN "corlogd_"
  112.         ORG $-256
  113.        DUP 256
  114.         DB {$+(scrtopx*8)}&0xff
  115.        EDUP
  116.        IF lores
  117.         ORG $-256
  118. _=$
  119.        DUP 128
  120.         DB {_}&0xff
  121. _=_+2
  122.        EDUP
  123.         DS 128
  124.        ENDIF
  125. tcos
  126.         DS 256
  127. tlogcos
  128.         INCBIN "pluslcos"
  129. tda
  130.         INCBIN "da"
  131.         ORG $-256
  132.        DUP 256
  133.         DB 0xff&({$}+128)
  134.        EDUP
  135.         ORG $-256
  136.        DUP 256
  137.         DB 0xff&({$+(scrtopx*8)})
  138.        EDUP
  139.        IF lores
  140.         ORG $-256
  141. _=$
  142.        DUP 128
  143.         DB {_}&0xff
  144. _=_+2
  145.        EDUP
  146.         DS 128
  147.        ENDIF
  148. tctg
  149.         INCBIN "plusctg"
  150. tsin
  151.         INCBIN "sin"
  152. cursprites
  153.         DS 256
  154.  
  155.         ;DISPLAY "tables end=",$
  156.  
  157.        IFN doublescr
  158. SETPG
  159.         LD (curpg),A
  160. curscr=$+1
  161.         OR 0
  162.         LD BC,#7FFD
  163.         OUT (C),A
  164.         RET
  165.        ENDIF
  166.  
  167.        IFN atmpg
  168.         INCLUDE "wctrl*",#08
  169.        ELSE
  170.         INCLUDE "wctrl*",#C2
  171.        ENDIF
  172.  
  173. ;переменные рендера (обновляются в начале рендера)
  174. curXx
  175. curx    DB #80
  176. curX    DB #0
  177. curYy
  178. cury    DB #80
  179. curY    DB #0
  180. curxy   DW 0
  181. curyx   DW 0
  182. curYX   DW 0
  183. curangle
  184.         DW tsin
  185. demobegin
  186.        IFN demoplay
  187.         INCBIN "demorec*"
  188.        ELSE
  189.         DB %00111111 ;all keys released
  190.        ENDIF
  191.  
  192.  
  193.         DS #8000-$
  194.  
  195.         ORG imer
  196. IMER
  197. ;store DE in stack
  198.         EXD
  199.         EX (SP),HL
  200.         LD (IMJP),HL
  201.         LD (IMSP),SP
  202.         LD SP,imstack
  203.         PUSH AF,BC,DE
  204.       ;PUSH HL
  205.        PUSH IX
  206.        IFN doublescr
  207.         LD A,#10 ;pgmus
  208.         LD BC,#7FFD
  209.         OUT (C),A
  210.        IFN music
  211.         CALL #8006 ;play mus
  212.        ENDIF
  213.         LD A,(newscr)
  214.         LD (curscr),A
  215. curpg=$+1
  216.         LD A,#10
  217.         CALL SETPG
  218.        ENDIF
  219. timer=$+1
  220.         LD HL,2560-25
  221.         DEC HL
  222.         LD (timer),HL
  223.        IFN showfps
  224. IMframe=$+1
  225.         LD A,1
  226.         DEC A
  227.         JNZ IMNSEC
  228.         LD DE,#4100
  229.        ;LD DE,#4100<1
  230.        ;RR D
  231. IMfps=$+1
  232.         LD A,0
  233.         LD C,10
  234.         CALL PRDIG
  235.         LD C,1
  236.         CALL PRDIG
  237.         XOR A
  238.         LD (IMfps),A
  239.         LD A,50
  240. IMNSEC
  241.         LD (IMframe),A
  242.        ENDIF
  243.         CALL CONTROL
  244.        POP IX
  245.       ;POP HL
  246.         POP DE,BC,AF
  247. IMSP=$+1
  248.         LD SP,0
  249.         POP HL
  250.         EXD
  251.         EI
  252.       ;RET
  253. IMJP=$+1
  254.         JP 0
  255.  
  256.        IF showfps
  257. PRDIG
  258.         LD L,15
  259.         INC L
  260.         SUB C
  261.         jr NC,$-2
  262.         ADD A,C
  263.         PUSH AF
  264.         LD A,L
  265.         ADD A,A
  266.         ADD A,A
  267.         ADD A,A
  268.         INC A
  269.         LD L,A
  270.         LD H,#3D
  271.         PUSH DE
  272.         LD B,6
  273.         LD A,(HL)
  274.         ld (DE),A
  275.         INC L,D
  276.         DJNZ $-4
  277.         POP DE
  278.         POP AF
  279.         INC E
  280.         RET
  281.        ENDIF
  282.  
  283.         DS (IMER/256+1)<<8-$
  284.  
  285.         ORG #8000
  286. imvec
  287.         DS 257,IMER
  288.        IF music
  289.         INCBIN "DOOM-MUS"
  290.        ENDIF
  291.  
  292. ZXLOOP
  293.        if atm
  294.        call changescrpg
  295. ;        ld a,1
  296. ;curscreen=$+1
  297. ;        xor 1
  298. ;        ld (curscreen),a
  299. ;         add a,a
  300. ;         add a,a
  301. ;         add a,a
  302. ;         ld (imer_curscreen_value),a
  303.         ld hl,(timer)
  304.         ld (endoflastredrawtimer),hl
  305.        endif
  306.  
  307.        IF atm == 0
  308.        IF doublescr
  309.         LD A,#10
  310.         CALL SETPG
  311.        ENDIF
  312.        ENDIF
  313.        ;HALT
  314.         CALL SCAN
  315.  
  316.        IF doublescr
  317. ;ждать флаг ожидания готовности экрана (включается по прерыванию)
  318. ;иначе будет так:
  319. ;фрейм 1:
  320. ;видим экран0, рисуем экран1
  321. ;фрейм 2:
  322. ;видим экран0, закончили рисовать экран1, [вот тут нужно ожидание], начали рисовать экран0 (хотя его видим)
  323. ;фрейм 3:
  324. ;видим экран1
  325. ;готовность - это когда текущий таймер != таймер конца прошлой отрисовки
  326. ;проверяем оба таймера, а то могло случиться системное прерывание
  327. EmulatePPU_waitforscreenready0
  328.         ld hl,(timer)
  329. endoflastredrawtimer=$+1
  330.         ld de,0
  331.         or a
  332.         sbc hl,de
  333.         jr z,EmulatePPU_waitforscreenready0
  334.        ENDIF
  335.  
  336.        IF atm
  337. pgscalersnum=$+1
  338.         LD A,0
  339.         setpgafast
  340.        
  341. ;        LD A,2
  342. ;setpgs_scr_xor=$+1
  343. ;        XOR 2
  344. ;        LD ($-1),A
  345. ;setpgs_scr_low=$+1
  346. ;        XOR 0xff-1;#7F-pgattr1
  347. ;        ld (curscrpg_low),a
  348. ;       PUSH AF
  349. ;        SETPG16K
  350.        call getuser_scr_low
  351.        SETPG16K
  352.         CALL DWCLSALL
  353.         xor a;LD A,0
  354.         CALL DRAWWALLS
  355.        call getuser_scr_high
  356.        SETPG16K
  357. ;       POP AF
  358. ;setpgs_scr_high_xor_low=$+1
  359. ;        XOR 4;pgattr1^pgpix1
  360. ;        SETPG16K
  361.        
  362.         CALL DWCLSALL
  363.         LD A,1
  364.         CALL DRAWWALLS
  365.  
  366.        ELSE ;~atm
  367.  
  368.         CALL CLSCRBUF
  369.         CALL DRAWWALLS
  370.         CALL CHECKHEIGHTS
  371.        IF sprites
  372.        CALL SCANMONS
  373.        CALL DRAWSPRITES
  374.        ENDIF
  375.        IF crosshair
  376.         CALL CROSSHAIR
  377.        ENDIF
  378.        IF doublescr
  379.         LD A,(curscr)
  380. newscr=$+1
  381.         CP 0
  382.         jr Z,nohalt
  383.         HALT ;if CPU is too fast
  384. nohalt
  385.         LD A,#17
  386.         CALL SETPG
  387.        ENDIF
  388.         CALL EORFILL
  389.        IF doublescr
  390.         LD A,(newscr)
  391.         XOR 8
  392.         LD (newscr),A
  393.        ENDIF
  394.        ENDIF
  395. ;-----------------------
  396.        IF showfps
  397.         LD HL,IMfps
  398.         INC (HL)
  399.        ENDIF
  400.  
  401. curkey=$+1
  402.         ld a,0
  403.         cp key_esc
  404.         jr z,ZXLOOPQUIT
  405.         cp key_redraw
  406.         call z,redraw
  407.        
  408.        ;LD A,0xfe
  409.        ;IN A,(0xFE)
  410.        ;rra ;caps shift
  411.        ;JP c,ZXLOOP
  412.        ;LD A,0x7F
  413.        ;IN A,(0xFE)
  414.        ;RRA ;space
  415.        ;JP NC,ZXLOOPQUIT
  416.        
  417.         jr ZXLOOP
  418. ZXLOOPQUIT
  419.         ret
  420.  
  421. redraw
  422.         xor a
  423.         ld (curkey),a ;чтобы redraw не повторялся
  424.         call redraw_cls
  425.         ld a,1
  426. redraw_cls
  427.         ld (curscrnum),a ;for interrupt
  428.         ld e,a
  429.         OS_SETSCREEN
  430.         ld e,0
  431.         OS_CLS
  432.         ret
  433.  
  434.         INCLUDE "WSCAN10.asm"
  435.         INCLUDE "WREND.asm"
  436.  
  437. MONSTAB
  438. ;ZOMBIEMAN
  439. DW #FC00
  440. DW #FC0B
  441. DW #FC16
  442. DW #FC20
  443. DW #FC2A
  444. DW #FC35
  445. DW 0,0
  446. ;AMMO
  447. DW #FE89 ;G
  448. DW #FE90 ;R
  449. DW #FE97 ;MEGAHEALTH
  450. DW #FE00 ;RL
  451. DW #FE9D ;AMMO
  452. DW 0,0,0
  453. ;STOLB
  454. DW #CB29
  455.  
  456.         DS ((-$)&7)&0xff
  457. MONSTRS
  458. ;Xx,Yy,TYPEphase,TIMEenergy
  459. DW #0F80,#AF80,#000,-1;ENEMY
  460. DW #2680,#A080,#000,64
  461. DW #0380,#BA80,#000,64
  462. DW #0780,#B780,#000,64
  463.  
  464. DW #0F80,#B080,#002,64
  465. DW #1380,#A080,#000,64
  466. DW #1380,#AA80,#000,64
  467. DW #1380,#B280,#000,64
  468. DW #1380,#B380,#000,64
  469. DW #1280,#B580,#002,64
  470. DW #1480,#AB80,#000,64
  471. DW #1480,#AE80,#002,64
  472.  
  473. DW #1480,#B080,#002,64
  474. DW #1480,#B380,#000,64
  475. DW #1580,#A180,#002,80
  476. DW #1680,#AD80,#002,90
  477. DW #1680,#B180,#002,100
  478. DW #2180,#AD80,#002,10
  479. DW #2380,#A080,#000,50
  480. DW #2380,#A580,#002,50
  481.  
  482. DW #2680,#A480,#003,50
  483. DW #2680,#B280,#004,50
  484. DW #2780,#A880,#005,50
  485. DW #2780,#B180,#003,64
  486.  
  487. DW #2780,#A380,#100,150
  488. DW #2080,#A580,#101,100
  489. DW #2280,#A580,#102,100
  490. DW #2580,#A080,#103,20
  491. DW #2080,#A080,#104,40
  492.  
  493. DW #1380,#A2C0,#200,0
  494. DW #1380,#A440,#200,0
  495. DW #1280,#A2C0,#200,0
  496. DW #1280,#A440,#200,0
  497. DW #1180,#A2C0,#200,0
  498. DW #1180,#A440,#200,0
  499. DW #1080,#A2C0,#200,0
  500. DW #1080,#A440,#200,0
  501. DW #0F80,#A2C0,#200,0
  502. DW #0F80,#A440,#200,0
  503. DW #0E80,#A2C0,#200,0
  504. DW #0E80,#A440,#200,0
  505. DW #0D80,#A2C0,#200,0
  506. DW #0D80,#A440,#200,0
  507. DW -1
  508. eNDMONS
  509.  
  510.         ;DISPLAY "PROG END=",$
  511.  
  512.         ORG distbuf
  513. RECMAP
  514.         LD HL,WASMAP
  515.         LD DE,#4000
  516.        PUSH DE
  517.         LD BC,szMAP
  518.         LDIR
  519.        POP HL
  520.         LD DE,level
  521.         LD BC,endlev-level
  522.         LDIR
  523.        if atm
  524.        LD A,(YX+1) ;Y
  525.        SUB #A0
  526.        SUB map/256+31
  527.        CPL
  528.        LD (IMcurYy+1),A
  529.        LD A,(YX) ;X
  530.        INC A
  531.        LD (IMcurXx+1),A
  532.        endif
  533. INImons LD A,(HL)
  534.         LDI
  535.         AND (HL)
  536.         LDI
  537.         INC A
  538.         JR Z,INImonsQ
  539.         LD BC,6
  540.         LDIR
  541.         JR INImons
  542. INImonsQ ;
  543.        EXD
  544.        if atm
  545.         LD H,map/256+31
  546.        else
  547.         LD H,map/256
  548.        endif
  549.        IF invmap
  550.        LD L,map&0xff
  551.        LD C,1
  552.        JR GETMAPL
  553.        ENDIF
  554. GETMAP0
  555.        IF invmap
  556.         LD L,0xff&(map+32)
  557.        ELSE
  558.         LD L,map&0xff
  559.        ENDIF
  560.         LD C,2
  561. GETMAPL LD B,32;33
  562. GETMAP1 LD A,(DE)
  563.         INC DE
  564.         LD (HL),0
  565.         CP 13
  566.         JR Z,GETMCR
  567.        IF atm
  568.        jr NC,GMNRLE
  569.         LD A,(DE)
  570.         INC DE
  571.        DEC A
  572. GMRLE
  573.         INC L
  574.         LD (HL),0
  575.         DEC B
  576.         DEC A
  577.         jr NZ,GMRLE
  578.         LD A,32
  579. GMNRLE
  580.        ENDIF
  581.         CP 32
  582.         JR Z,GETMAPE
  583.        IF atm
  584.       CP 64    ;
  585.       jr NC,$+4  ;
  586.       ADD A,64 ;todo kill
  587.        ADD A,128-64
  588.        ELSE
  589.        SUB "1";+128
  590.       CPL
  591.       ADD A,A
  592.      CP -20
  593.      jr NC,$+4
  594.      LD A,-20
  595.        ENDIF
  596.        LD (HL),A
  597. GETMAPE INC L
  598.         DJNZ GETMAP1
  599.         JR GETMOK
  600. GETMCR  LD (HL),0
  601.         INC L
  602.         DJNZ GETMCR
  603. GETMOK
  604.        IF invmap
  605.        LD L,map&0xff
  606.        ENDIF
  607.         DEC C
  608.         jr NZ,GETMAPL
  609.        if atm
  610.         LD A,H
  611.         DEC H
  612.         CP map/256
  613.         JR NZ,GETMAP0
  614.        else
  615.         INC H
  616.         BIT 6,H
  617.         JR Z,GETMAP0
  618.        endif
  619.  
  620.        IF atm == 0
  621.         LD HL,#4000
  622.         CALL INICLS
  623.        IF doublescr
  624.         LD A,#17
  625.         CALL SETPG
  626.         LD HL,#C000
  627.         CALL INICLS
  628.        ENDIF
  629.        ENDIF
  630.         XOR A
  631.         LD H,scrbuf/256
  632.         LD C,scrwid
  633. PRECLS  LD L,scrbuf&0xff
  634.         LD B,scrhgtpix
  635.         LD (HL),A
  636.         INC L
  637.         DJNZ $-2
  638.         INC H
  639.         DEC C
  640.         jr NZ,PRECLS
  641.         LD BC,#FBDF
  642.         IN A,(C)
  643.         LD (mouseoldx),A
  644.        JP LOOP
  645. INICLS
  646.         LD D,H
  647.         ld E,1
  648.         LD BC,#1800
  649.         LD (HL),L
  650.         LDIR
  651.         LD BC,767
  652.         LD (HL),colour
  653.         LDIR
  654.         RET
  655.         DS distbuf+#300-$
  656.  
  657.         ORG #C000
  658.        IFN scale64
  659.        IF0 scale64-3
  660.         INCBIN "tscale3"
  661.        ELSE
  662.         INCBIN "tscale2"
  663.        ENDIF
  664.        ELSE
  665.         INCBIN "tscale"
  666.        ENDIF
  667. end
  668.  
  669.         ORG scrbuf
  670. GO
  671.         DI
  672.         LD HL,WAStcos
  673.         LD DE,tcos
  674.        PUSH DE
  675.         LD BC,256
  676.         LDIR
  677.        POP HL
  678. REtcos0
  679.        DUP 2;4
  680.         SRA (HL)
  681.        EDUP
  682.         INC L
  683.         JNZ REtcos0
  684.  
  685.        IFN music
  686.         CALL #8000 ;init mus
  687.        ENDIF
  688.         LD HL,imvec
  689.         LD DE,imvec+1
  690.         LD (HL),IMER
  691.         LD B,E,C,L
  692.         LD A,H
  693.         LDIR
  694.         LD I,A
  695.         IM 2
  696.         EI
  697.        HALT
  698.         LD HL,-2
  699.         ADD HL,SP
  700.         LD (clscrbufsp),HL
  701.         LD (eorfillsp),HL
  702.         JP RECMAP ;->LOOP
  703.  
  704. WASMAP
  705.        IF atm
  706.         INCBIN "mapatm.E"
  707.        ELSE
  708.         INCBIN "map48.E"
  709.        ENDIF
  710. szMAP=$-WASMAP
  711.  
  712. level
  713.         DB "W"
  714. gfxnr   DB "0"
  715. muznr   DB "A"
  716. pol     DB #E7
  717. potolok DB #F3
  718. color   DB 7
  719. levname DS 23
  720.         DB 0
  721. monstrs DB 0
  722. prizes  DW 0 ;$$$/10
  723. EXITx   DB 23
  724. EXITy   DB 15+#A0
  725. yx      DW #8080
  726. YX      DW #BA08
  727. angle   DW 64
  728. endlev
  729. WAStcos
  730.         INCBIN "cos"
  731.  
  732. ObjTab
  733.         DB "wolfblokC"
  734.         DW begin
  735.         DW end-begin
  736.         DB #10
  737.         DW begin
  738.        IFN atmpg
  739.         INCLUDE "SAVEOBJ*",#20
  740.        ELSE
  741.         INCLUDE "SAVEOBJ*",#C0
  742.        ENDIF
  743.         ORG $,0
  744.        IFN atmpg ;{#5BE9}-#0F4F ;atm hack
  745.         LD BC,_prep
  746.         PUSH BC
  747.         LD A,#FF
  748.         LD BC,#3FF0
  749.         PUSH BC
  750.         LD BC,#FFF7
  751.         JP #3D2F
  752. _prep
  753.        ENDIF
  754. ;prepare 48K block
  755.         DI ;IY
  756.         LD H,#C1
  757. INIRETAB0 ;
  758.         LD L,0
  759.         LD B,maxscale+1
  760. INIRETAB1 ;
  761.         LD A,(HL)
  762.         CP 128-(scrhgtpix/2)
  763.         JNC $+4
  764.         LD A,128-(scrhgtpix/2)
  765.         CP 128+(scrhgtpix/2);-1
  766.         JC $+4
  767.        ;LD A,128+(scrhgtpix/2)-1 ;видно линию внизу от переполнй
  768.        LD A,dropline-(scrbuf+(scrhgtpix/2)-128)
  769.         ADD A,scrbuf+(scrhgtpix/2)-128
  770.         LD (HL),A
  771.         INC L
  772.         DJNZ INIRETAB1
  773.         INC H
  774.         LD A,H
  775.         INC A ;#C0XX,#FFXX не трогаем
  776.         JNZ INIRETAB0
  777.        LD HL,#FF00
  778.        LD DE,#FF01
  779.        LD BC,maxscale
  780.        LD (HL),1
  781.        LDIR
  782.         LD HL,#5800
  783.         LD DE,#5801
  784.         LD BC,767
  785.         LD (HL),L
  786.         LDIR
  787.        LD BC,#7FFD
  788.        LD A,pgtmp|#10
  789.        OUT (C),A
  790.         LD HL,#C000
  791.         LD DE,#4000
  792.         LD BC,#1800
  793.         LDIR
  794.        LD BC,#7FFD
  795.        LD A,#10
  796.        OUT (C),A
  797.         LD DE,#C000+maxscale+1
  798.        LD HY,#FE
  799. ;4 upper textures = #09A6
  800. ;4 lower textures = #0AAC
  801.         LD HL,#4000
  802.         CALL GETTEX
  803.         CALL GETTEX
  804.         CALL GETTEX
  805.         CALL GETTEX
  806.         LD HL,#4800
  807.         CALL GETTEX
  808.         CALL GETTEX
  809.         CALL GETTEX
  810.         CALL GETTEX
  811.         LD HL,#5000
  812.         CALL GETTEX
  813.         CALL GETTEX
  814.         PUSH DE
  815.        LD BC,#7FFD
  816.        LD A,#11
  817.        OUT (C),A
  818.         LD HL,#DB00
  819.         LD DE,#4000
  820.         LD BC,#1800
  821.         LDIR
  822.        LD BC,#7FFD
  823.        LD A,#10
  824.        OUT (C),A
  825.         POP DE
  826.        LD HL,#4008
  827.        CALL GETSPR;TEX
  828.         LD IY,23610
  829.         EI
  830.        CALL 8026
  831.        JP C,GO
  832.        JP nenado
  833.  
  834. GETTEX
  835.        IFN scale64
  836.         LD LY,#40
  837.        ELSE
  838.         LD LY,#80
  839.        ENDIF
  840.         LD BC,#0880 ;B=width/8, C=#80(mask)
  841. GETTEX00 ;
  842.        PUSH BC
  843. GETTEX0 CALL GETTEXLINE
  844.         INC LY
  845.        IF0 scale64
  846.        INC LY
  847.        ENDIF
  848.         RRC C
  849.         JNC GETTEX0
  850.         INC L
  851.        POP BC
  852.         DJNZ GETTEX00
  853.        DEC HY,HY
  854.         RET
  855.  
  856. GETSPR
  857.        IFN scale64
  858.         LD LY,#40
  859.        ELSE
  860.         LD LY,#80
  861.        ENDIF
  862.         LD BC,#0880 ;B=width/8, C=#80(mask)
  863. GETSPR00 ;
  864.        PUSH BC
  865. GETSPR0 CALL GETSPRLINE
  866.         INC LY
  867.        IF0 scale64
  868.        INC LY
  869.        ENDIF
  870.         RRC C
  871.         JNC GETSPR0
  872.         INC L
  873.        POP BC
  874.         DJNZ GETSPR00
  875.        DEC HY,HY
  876.         RET
  877.  
  878. GETTEXLINE
  879.        PUSH HL
  880. GETTEXRETRY ;
  881.        LD (gettexDE),DE ;linelength addr
  882.        POP HL
  883.        PUSH HL
  884.         LD (IY),E
  885.        IF0 scale64
  886.        LD (IY+1),E
  887.        ENDIF
  888.         INC HY
  889.         LD (IY),D
  890.        IF0 scale64
  891.        LD (IY+1),D
  892.        ENDIF
  893.         DEC HY
  894.         INC E
  895.         JNZ GETTEXniD
  896. GETTEXiD INC D
  897.        LD E,maxscale+1
  898.        JR GETTEXRETRY
  899. GETTEXniD ;
  900.         LD LX,0;C ;bit
  901.         LD HX,17 ;dots
  902.         LD B,62 ;62..1 -> 1..62
  903. GETTEX1 ;
  904.         CALL DHL
  905.         LD A,(HL)
  906.         AND C
  907.         CP LX
  908.         LD LX,A
  909.         JZ GETTEXN
  910.        LD A,HX
  911.        OR A
  912.        JZ GETTEXN
  913.         LD A,'tscale+63
  914.        SUB B
  915.        LD (DE),A
  916.        DEC HX ;17-pixels
  917.        INC E ;todo check before write
  918.        JZ GETTEXiD
  919. GETTEXN ;
  920.        DJNZ GETTEX1
  921.        LD A,HX ;17-pixels
  922.        ADD A,A
  923.        ADD A,A
  924.        ADD A,A
  925.        SUB HX  ;*7
  926.       ADD A,DWJP
  927. gettexDE=$+1
  928.        LD (0),A
  929.       POP HL
  930.        RET
  931.  
  932. GETSPRLINE
  933.       PUSH HL
  934. GETSPRRETRY ;
  935.       POP HL
  936.       PUSH HL
  937.        LD (IY),E
  938.       IF0 scale64
  939.       LD (IY+1),E
  940.       ENDIF
  941.        INC HY
  942.        LD (IY),D
  943.       IF0 scale64
  944.       LD (IY+1),D
  945.       ENDIF
  946.        DEC HY
  947.       LD A,H
  948.       OR 6
  949.       LD H,A
  950.       LD A,L
  951.       ADD A,#E0
  952.       LD L,A ;line 62
  953.        LD HX,1
  954. GETSPR1 ;
  955.        CALL FIND10
  956.        JNC GETSPRQ ;end of column
  957.        LD A,HX
  958.        CPL
  959.        LD (DE),A ;Y
  960.        INC E
  961.        JZ GETSPRiD
  962.        CALL FIND1HEIGHT
  963.        LD A,HX
  964.        CPL
  965.        LD (DE),A ;Y2
  966.        INC E
  967.        JZ GETSPRiD
  968.        CALL FIND0HEIGHT
  969.        LD A,HX
  970.        CPL
  971.        LD (DE),A ;Y3
  972.        INC E
  973.        JZ GETSPRiD
  974.        JR GETSPR1
  975. GETSPRQ
  976.        LD A,#C0
  977.        LD (DE),A
  978.        INC E
  979.        JNZ GETSPRniD
  980. GETSPRiD INC D
  981.       LD E,maxscale+1
  982.       JR GETSPRRETRY
  983. GETSPRniD ;
  984.        LD A,#FF
  985.        LD (DE),A
  986.        INC E
  987.        JNZ $+5
  988.         INC D
  989.         LD E,maxscale+1
  990.       POP HL
  991.        RET
  992.  
  993. maxVhgt=10;16?
  994.  
  995. ;HX=V
  996. ;HL=mask
  997. FIND10
  998.        LD A,HX
  999.        CP 63
  1000.        RET Z ;CY=0: end of column
  1001.        CALL GETPIXEL
  1002.        RET C ;CY=1: pixel
  1003.        CALL UHL
  1004.        INC HX ;V
  1005.        JR FIND10
  1006. FIND1HEIGHT
  1007.       ;LD LX,HX ;oldV
  1008.        LD B,0
  1009. F1H0    CALL GETPIXEL
  1010.        RET NC ;transparent
  1011.        RET Z ;0
  1012.        CALL UHL
  1013.        INC HX ;V
  1014.        INC B
  1015.        LD A,B
  1016.        CP maxVhgt
  1017.        JC F1H0
  1018.        RET
  1019. FIND0HEIGHT
  1020.       ;LD LX,HX ;oldV
  1021.        LD B,0
  1022. F0H0    CALL GETPIXEL
  1023.        RET NC ;transparent
  1024.        RET NZ ;1
  1025.        CALL UHL
  1026.        INC HX ;V
  1027.        INC B
  1028.        LD A,B
  1029.        CP maxVhgt
  1030.        JC F0H0
  1031.        RET
  1032.  
  1033. GETPIXEL
  1034.        LD A,HX
  1035.        CP 63
  1036.        RET Z ;CY=0: transparent
  1037.        LD A,(HL)
  1038.        AND C
  1039.        RET NZ ;CY=0: transparent
  1040.        RES 3,L
  1041.        LD A,(HL)
  1042.        AND C
  1043.        SET 3,L
  1044.        SCF ;CY=1: pixel (Z)
  1045.        RET
  1046.  
  1047. UHL
  1048.        LD A,H
  1049.        DEC H
  1050.        AND 7
  1051.        RET NZ
  1052.        LD A,L
  1053.        SUB #20
  1054.        LD L,A
  1055.        RET C
  1056.        LD A,H
  1057.        ADD A,8
  1058.        LD H,A
  1059.        RET
  1060.  
  1061.        DS #C000-$
  1062.