?login_element?

Subversion Repositories NedoOS

Rev

Rev 1965 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.         DEVICE ZXSPECTRUM128
  2.         include "settings.asm"
  3.  
  4. NTEXPGS=5
  5. NSPRPGS=2;1
  6.  
  7. SPOIL6BSTACK=0x4000
  8. STACK=SPOIL6BSTACK-6
  9. INTSTACK=0x3e80
  10. ;scrbase=0x8000
  11.  
  12. addhlbc=1 ;можно scrhgt=200 и в одной странице
  13. customscales=0;1
  14.  
  15. IMPOSSIBLECOLOR=0b01000111;0x01 ;(b+w)
  16.  
  17. muz=0x8000
  18.  
  19.         org PROGSTART
  20. begin
  21.         ld sp,STACK
  22.         OS_HIDEFROMPARENT
  23.  
  24.         ld e,0;+0x80
  25.         OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+0x80=keep screen ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode)
  26.         ld e,0 ;color byte
  27.         OS_CLS
  28.         ld e,1
  29.         OS_SETSCREEN
  30.         ld e,0 ;color byte
  31.         OS_CLS
  32.                
  33.                 ld de,res_path
  34.                 OS_CHDIR
  35.  
  36.         OS_GETMAINPAGES
  37. ;dehl=номера страниц в 0000,4000,8000,c000
  38.         ld a,e
  39.         LD (pgmain4000),A
  40.         ld a,h
  41.         LD (pgmain8000),A
  42.         ld a,l
  43.         LD (pgscalersnum),A
  44.  
  45.        if 0;OLDMUZ
  46.         ld hl,wasmuz
  47.         ld de,muz
  48.         ld bc,wasmuz_sz
  49.         ldir
  50.         call muz
  51.        else
  52.         ld hl,muzfilename
  53.         call loadpage
  54.         ld (pgsfx),a
  55.         call loadpage
  56.         ld (pgmusic),a
  57.         SETPG4000
  58.        
  59. ;это относится к загрузке уровня
  60.         push af
  61.         call 0x4000 ;init
  62.        
  63.         ld a,(pgsfx)
  64.         SETPG8000
  65.         pop af
  66.         ld hl,0x4005 ;play
  67.         OS_SETMUSIC
  68.         call setpgsmain40008000
  69.         ld a,(pgscalersnum)
  70.         SETPGC000
  71.        endif
  72.        
  73.         ;pop af ;LD a,(pg8000)
  74.         ;SETPG8000
  75.  
  76.         OS_NEWPAGE
  77.         ld a,e
  78.         ld (pgmapnum),a
  79.  
  80.         if 1;TEXBMP
  81.         ld de,texfilename
  82.         call openfile_skipbmpheader
  83. ;b=handle
  84.         ld hl,ttexpgs+NTEXPGS-1
  85.         ld c,NTEXPGS
  86. gettexpgs0
  87.         push bc
  88.         push hl
  89.         call ldpgrecodebmp
  90.        
  91.         push de
  92.        
  93. ;2. проходим по hl правый верхний треугольник текстуры, а по de - левый нижний, меняем их местами
  94.         ld hl,0x4000
  95. gettexpgsrot0
  96.         push hl    
  97.         ld b,64
  98. gettexpgsrot1
  99.         push bc
  100.         push hl
  101.         ld d,h
  102.         ld e,l
  103. gettexpgsrot2
  104.         ld c,(hl)
  105.         ld a,(de)
  106.         ld (hl),a
  107.         ld a,c
  108.         ld (de),a
  109.         inc l
  110.         inc d
  111.         djnz gettexpgsrot2
  112.         pop hl
  113.         inc l
  114.         inc h
  115.         pop bc
  116.         djnz gettexpgsrot1
  117.         pop hl
  118.         ld a,l
  119.         add a,64
  120.         ld l,a
  121.         jr nz,gettexpgsrot0
  122.        
  123.         pop de
  124.         pop hl
  125.         ld (hl),e
  126.         dec hl
  127.         pop bc
  128.         dec c
  129.         jr nz,gettexpgs0
  130.  
  131.         OS_CLOSEHANDLE
  132.  
  133.         ld de,sprfilename
  134.         call openfile_skipbmpheader
  135. ;b=handle
  136.         ld hl,ttexpgs+NTEXPGS+NSPRPGS-1
  137.         ld c,NSPRPGS
  138. getsprpgs0
  139.         push bc
  140.         push hl
  141.         call ldpgrecodebmp        
  142.         pop hl
  143.         ld (hl),e
  144.         dec hl
  145.         pop bc
  146.         dec c
  147.         jr nz,getsprpgs0
  148.  
  149.         OS_CLOSEHANDLE
  150.  
  151.         else ;~TEXBMP
  152.        
  153.         ld hl,ttexpgs
  154.         ld b,5
  155. getttexpgs0
  156.         push bc
  157.         push hl
  158.         OS_NEWPAGE
  159.        
  160.         push de
  161.         ld a,e
  162.         SETPG4000
  163.         ld de,texfilename
  164.         OS_OPENHANDLE
  165.         push bc
  166.         ld de,0x4000 ;addr
  167.         ld hl,0x4000 ;size
  168.         OS_READHANDLE
  169.         pop bc
  170.         OS_CLOSEHANDLE
  171.        
  172.         ld hl,texfilenamenum
  173.         inc (hl)
  174.         pop de
  175.        
  176.         pop hl
  177.         ld (hl),e
  178.         inc hl
  179.         pop bc
  180.         djnz getttexpgs0
  181.  
  182.         endif
  183.  
  184.  
  185.         LD HL,tID
  186. REtID0  LD A,(HL)
  187.         add a,ttexpgs&0xff
  188.         ld e,a
  189.         adc a,ttexpgs/256
  190.         sub e
  191.         ld d,a
  192.         ld a,(de)
  193. ;basepggfx=$+1
  194. ;        ADD A,0
  195.         LD (HL),A
  196.         INC L
  197.         INC L
  198.         jr NZ,REtID0
  199.          ld hl,tID+128
  200.          ld de,tID
  201.          ld bc,128
  202.          ldir ;ID_DOOR < 128
  203.  
  204.         ld ix,tscales
  205.         ld hl,tscales_rev
  206.         ld b,64
  207. revscale0
  208.         push bc
  209.         push hl
  210.         ld c,(ix)
  211.         inc ix
  212.         ld b,(ix)
  213.         inc ix
  214.         ld de,256
  215. ;деление
  216. ;DE=+-7.8;BC=+7.8
  217. ;DE=DE/BC=+-8.7/2
  218.     ;BC сохраняется!!!
  219.         call MONDIV
  220.         pop hl
  221.         sla e
  222.         rl d
  223.         ld (hl),e
  224.         inc hl
  225.         ld (hl),d
  226.         inc hl
  227.         pop bc
  228.         djnz revscale0
  229.  
  230.         call genscalers
  231.  
  232.         call swapimer
  233.  
  234.         call TEXCODEGO
  235.        
  236.         call swapimer
  237.        
  238.         ;call shutay        
  239. pgmusic=$+1
  240.         ld a,0
  241.         SETPG4000
  242.         halt
  243.         ld hl,0x4000;0x4008+3 ;stop
  244.         OS_SETMUSIC
  245.         halt
  246.         QUIT
  247.  
  248. setpgsmain40008000
  249. pgmain4000=$+1
  250.         ld a,0
  251.         SETPG4000
  252. pgmain8000=$+1
  253.         ld a,0
  254.         SETPG8000
  255.         ret
  256.  
  257.         if 1==0
  258. setpgsscr40008000_current
  259.         call getuser_scr_low_cur
  260.         SETPG4000
  261.         call getuser_scr_high_cur
  262.         SETPG8000
  263.         ret
  264.  
  265. setpgsscr40008000
  266.         call getuser_scr_low
  267.         SETPG4000
  268.         call getuser_scr_high
  269.         SETPG8000
  270.         ret
  271.  
  272. setpgscrlow4000
  273.         call getuser_scr_low
  274.         SETPG4000
  275.         ret
  276.  
  277. setpgscrhigh4000
  278.         call getuser_scr_high
  279.         SETPG4000
  280.         ret
  281.         endif
  282.  
  283. getuser_scr_low
  284. getuser_scr_low_patch=$+1
  285. getuser_scr_low_patchN=0xff&(user_scr0_low^user_scr1_low)
  286.         ld a,(user_scr1_low) ;ok
  287.         ret
  288.  
  289. getuser_scr_high
  290. getuser_scr_high_patch=$+1
  291. getuser_scr_high_patchN=0xff&(user_scr0_high^user_scr1_high)
  292.         ld a,(user_scr1_high) ;ok
  293.         ret
  294.  
  295. getuser_scr_low_cur
  296. getuser_scr_low_cur_patch=$+1
  297. getuser_scr_low_cur_patchN=0xff&(user_scr0_low^user_scr1_low)
  298.         ld a,(user_scr0_low) ;ok
  299.         ret
  300.  
  301. getuser_scr_high_cur
  302. getuser_scr_high_cur_patch=$+1
  303. getuser_scr_high_cur_patchN=0xff&(user_scr0_high^user_scr1_high)
  304.         ld a,(user_scr0_high) ;ok
  305.         ret
  306.  
  307. changescrpg_current
  308. ;        ld a,(setpgs_scr_low)
  309. ;setpgs_scr_scrxor=$+1
  310. ;        xor 0
  311. ;        ld (setpgs_scr_low),a
  312.         ld hl,getuser_scr_low_patch
  313.         ld a,(hl)
  314.         xor getuser_scr_low_patchN
  315.         ld (hl),a
  316.         ld hl,getuser_scr_high_patch
  317.         ld a,(hl)
  318.         xor getuser_scr_high_patchN
  319.         ld (hl),a
  320.         ld hl,getuser_scr_low_cur_patch
  321.         ld a,(hl)
  322.         xor getuser_scr_low_cur_patchN
  323.         ld (hl),a
  324.         ld hl,getuser_scr_high_cur_patch
  325.         ld a,(hl)
  326.         xor getuser_scr_high_cur_patchN
  327.         ld (hl),a
  328.  
  329.         ld a,1
  330. curscrnum=$+1
  331.         xor 0
  332.         ld ($-1),a
  333.          ;add a,a
  334.          ;add a,a
  335.          ;add a,a
  336.          ;ld (imer_curscreen_value),a
  337.         ret
  338.        
  339. changescrpg
  340.         ;jr $
  341.         call changescrpg_current
  342.         ;ld (curscrnum_physical),a
  343.         ld e,a
  344.         OS_SETSCREEN
  345.         ret
  346.  
  347. openfile_skipbmpheader
  348.         OS_OPENHANDLE
  349.         push bc
  350.         ld de,bmpbuf;0x4000 ;addr
  351.         ld hl,14+2;0x0076 ;size
  352.         OS_READHANDLE ;b=handle
  353.         pop bc
  354.         push bc
  355.         ld de,bmpbuf;0x4000 ;addr
  356.         ld hl,(bmpbuf+14)
  357.         dec hl
  358.         dec hl
  359.         OS_READHANDLE ;b=handle
  360.         pop bc
  361.         push bc
  362.         ld de,bmpbuf;0x4000 ;addr
  363.         ld hl,4*16;0x0076 ;size
  364.         OS_READHANDLE ;b=handle
  365.         pop bc
  366.         ret
  367.  
  368. ldpgrecodebmp
  369.         push bc
  370.         OS_NEWPAGE
  371.         ld a,e
  372.         SETPG4000
  373.         pop bc ;b=handle
  374.         push de
  375.        
  376.         ld de,0x4000 ;addr
  377.         ld hl,0x4000 ;size
  378.         OS_READHANDLE
  379.  
  380.         ld hl,0x4000
  381.         ld d,trecolor/256
  382. gettexpgsrecode0
  383.         ld e,(hl)
  384.         ld a,(de)
  385.         ld (hl),a
  386.         inc hl
  387.         bit 7,h
  388.         jr z,gettexpgsrecode0
  389.  
  390. ;повернуть текстуры на 90 градусов (для стен, а для спрайтов просто перевернуть?)
  391. ;1. переворот текстур
  392.         ld hl,0x4000
  393.         ld de,0x4000+0x3f00
  394.         ld b,32
  395. gettexpgsturn0
  396. gettexpgsturn1
  397.         ld c,(hl)
  398.         ld a,(de)
  399.         ld (hl),a
  400.         ld a,c
  401.         ld (de),a
  402.         inc l
  403.         inc e
  404.         jr nz,gettexpgsturn1
  405.         inc h
  406.         dec d
  407.         djnz gettexpgsturn0
  408.        
  409.         pop de ;e=pg
  410.         ret
  411.  
  412. drawhud
  413. ;TODO
  414.         ret
  415.  
  416. shutay
  417.         ld de,0xe00
  418. shutay0
  419.         dec d
  420.         ld bc,0xfffd
  421.         out (c),d
  422.         ld b,0xbf
  423.         out (c),e
  424.         jr nz,shutay0
  425.         ret
  426.        
  427. texfilename
  428.         if 1;TEXBMP
  429.         db "wolftex3.bmp",0
  430.         else
  431.         db "wolftex.0",0
  432. texfilenamenum=$-2
  433.         endif
  434. sprfilename
  435.         db "wolfspr3.bmp",0
  436.  
  437.         align 256
  438. t1x
  439.         db 255
  440.         dup 255
  441.         db (255*2/($&0xff)+1)/2
  442.         edup
  443. ttexpgs
  444.         ds NTEXPGS+NSPRPGS
  445.  
  446. setpgmap4000
  447. pgmapnum=$+1
  448.         ld a,0
  449.         SETPG4000
  450.         ret
  451.  
  452.         include "int.asm"
  453.  
  454. loadpage
  455. ;заказывает страничку и грузит туда файл (имя файла в hl)
  456. ;out: hl=после имени файла, a=pg
  457.         push hl
  458.         OS_NEWPAGE
  459.         pop hl
  460.         ld a,e
  461.         push af ;pg
  462.         SETPGC000
  463.         push hl
  464.         ex de,hl
  465.         OS_OPENHANDLE
  466.         push bc
  467.         ld de,0xc000 ;addr
  468.         ld hl,0x4000 ;size
  469.         OS_READHANDLE
  470.         pop bc
  471.         OS_CLOSEHANDLE                
  472.         pop hl
  473.         ld b,1
  474.         xor a
  475.         cpir ;after 0
  476.         pop af ;pg
  477.         ret
  478.  
  479. muzfilename
  480.         db "sfx.bin",0
  481.         db "music.bin",0
  482.  
  483. wolfpal
  484.         ;dw 0xffff,0x0c0c,0x3f3f,0xdede,0xfefe,0xdfdf,0x4c4c,0xaeae
  485.         ;dw 0xbdbd,0xfdfd,0xbfbf,0xeded,0x8d8d,0x7d7d,0xecec,0x1f1f
  486.         include "pal.ast"
  487.  
  488.         include "WATM2.asm"
  489.  
  490. scale2ytop
  491. ;bc=scale
  492. ;out: de=Y, lx=y
  493.         XOR A
  494.         LD L,A
  495.         ld H,A
  496.         SBC HL,BC ;-scale = -0x40..-0x410
  497.         ADD HL,HL
  498.         ADD HL,HL
  499.         ADD HL,HL
  500.         ADD HL,HL
  501.         ADD HL,HL ;*32 = -0x800..-0x8200
  502.         EXD
  503.         LD LX,E
  504.         LD a,D
  505.         LD D,-1
  506.         ADD A,Ycenter ;0x64
  507.         LD E,A
  508.         ret nc ;jr NC,$+3
  509.         INC D
  510.         ret
  511.  
  512. YtoADDR
  513.        PUSH HL
  514.         LD H,D
  515.         ld L,E
  516.         ADD HL,HL
  517.         ADD HL,HL
  518.         ADD HL,DE ;*5
  519.         ADD HL,HL
  520.         ADD HL,HL
  521.         ADD HL,HL ;*40
  522.         LD DE,scrbase
  523.         ADD HL,DE
  524. ;genX=$+1
  525. ;        LD DE,0
  526. ;        ADD HL,DE
  527.         EXD
  528.        POP HL
  529.         RET
  530.         ;align 256;DS .(-$)
  531. tscales
  532.        IF customscales == 0
  533.         INCBIN "scalesw3" ;сначала мелкие
  534.        ELSE
  535.         DS 8,5,0
  536.         DS 7,6,0
  537.         DS 6,7,0
  538.         DS 5,8,0
  539.         DS 4,9,0
  540.         DS 3,10,0
  541.         DS 2,11,0
  542.         DS 1,12,0
  543.         DS 1,13,0
  544.         DS 1,14,0
  545.         DS 1,15,0
  546.         DS 1,16,0
  547.         DS 1,17,0
  548.         DS 1,18,0
  549.         DS 1,19,0
  550.         DS 1,20,0
  551.         DS 1,21,0
  552.         DS 1,22,0
  553.         DS 1,23,0
  554.         DS 1,24,0
  555.         DS 1,25,0
  556.         DS 1,26,0
  557.         DS 1,27,0
  558.         DS 1,28,0
  559.         DS 1,29,0
  560.         DS 1,30,0
  561.         DS 1,31,0
  562.         DS 1,32,0
  563.         DS 1,33,0
  564.         DS 1,34,0
  565.         DS 1,35,0
  566.         DS 1,36,0
  567.         DS 1,38,0
  568.         DS 1,40,0
  569.         DS 1,42,0
  570.         DS 1,44,0
  571.         DISPLAY $-tscales,"=#80"
  572.        ENDIF
  573. tscales_rev
  574.         ds 128
  575.  
  576.         include "anims.asm"
  577.         include "savestate.asm"
  578.  
  579.         align 256
  580. trecolor
  581. ;%00003210 => %.3...210
  582.         dup 256
  583. _3=$&8
  584. _210=$&7
  585. _3L=($>>4)&8
  586. _210L=($>>4)&7
  587.         db (_3L*0x08) + (_210L*0x01) + (_3*0x10) + (_210*0x08)
  588.         edup
  589.  
  590. bmpbuf
  591.  
  592.         display "free before stack=",0x3e00-$
  593.  
  594.         ds 0x8000-$
  595.  
  596.        IF atm
  597.         ;ORG #C000;,pgscalers
  598.         ;ds 0xc000-$
  599.         ;INCBIN "scalers"
  600. wasmuz
  601.         ;ds 9,201
  602.         incbin "DOOM-MUS" ;TODO load
  603. wasmuz_sz=$-wasmuz
  604.  
  605.         include "genscale.asm"
  606.  
  607.         display "WASMAP=",$
  608. WASMAP
  609.         INCBIN "mapatm.E" ;TODO load
  610. szMAP=$-WASMAP
  611.  
  612. res_path
  613.         defb "wolf3d",0
  614.      
  615.  
  616.        else ;~atm
  617.        ENDIF
  618. end
  619.  
  620.         ;display "End=",end
  621.         ;display "Free after end=",/d,#c000-end
  622.         ;display "Size ",/d,end-begin," bytes"
  623.        
  624.         savebin "wolf3d.com",begin,end-begin
  625.        
  626.         LABELSLIST "../../../us/user.l",1
  627.