?login_element?

Subversion Repositories NedoOS

Rev

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

  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. shutay
  413.         ld de,0xe00
  414. shutay0
  415.         dec d
  416.         ld bc,0xfffd
  417.         out (c),d
  418.         ld b,0xbf
  419.         out (c),e
  420.         jr nz,shutay0
  421.         ret
  422.        
  423. texfilename
  424.         if 1;TEXBMP
  425.         db "wolftex3.bmp",0
  426.         else
  427.         db "wolftex.0",0
  428. texfilenamenum=$-2
  429.         endif
  430. sprfilename
  431.         db "wolfspr3.bmp",0
  432.  
  433.         align 256
  434. t1x
  435.         db 255
  436.         dup 255
  437.         db (255*2/($&0xff)+1)/2
  438.         edup
  439. ttexpgs
  440.         ds NTEXPGS+NSPRPGS
  441.  
  442. setpgmap4000
  443. pgmapnum=$+1
  444.         ld a,0
  445.         SETPG4000
  446.         ret
  447.  
  448.         include "int.asm"
  449.  
  450. loadpage
  451. ;заказывает страничку и грузит туда файл (имя файла в hl)
  452. ;out: hl=после имени файла, a=pg
  453.         push hl
  454.         OS_NEWPAGE
  455.         pop hl
  456.         ld a,e
  457.         push af ;pg
  458.         SETPGC000
  459.         push hl
  460.         ex de,hl
  461.         OS_OPENHANDLE
  462.         push bc
  463.         ld de,0xc000 ;addr
  464.         ld hl,0x4000 ;size
  465.         OS_READHANDLE
  466.         pop bc
  467.         OS_CLOSEHANDLE                
  468.         pop hl
  469.         ld b,1
  470.         xor a
  471.         cpir ;after 0
  472.         pop af ;pg
  473.         ret
  474.  
  475. muzfilename
  476.         db "sfx.bin",0
  477.         db "music.bin",0
  478.  
  479. wolfpal
  480.         ;dw 0xffff,0x0c0c,0x3f3f,0xdede,0xfefe,0xdfdf,0x4c4c,0xaeae
  481.         ;dw 0xbdbd,0xfdfd,0xbfbf,0xeded,0x8d8d,0x7d7d,0xecec,0x1f1f
  482.         include "pal.ast"
  483.  
  484.         include "WATM2.asm"
  485.  
  486. scale2ytop
  487. ;bc=scale
  488. ;out: de=Y, lx=y
  489.         XOR A
  490.         LD L,A
  491.         ld H,A
  492.         SBC HL,BC ;-scale = -0x40..-0x410
  493.         ADD HL,HL
  494.         ADD HL,HL
  495.         ADD HL,HL
  496.         ADD HL,HL
  497.         ADD HL,HL ;*32 = -0x800..-0x8200
  498.         EXD
  499.         LD LX,E
  500.         LD a,D
  501.         LD D,-1
  502.         ADD A,Ycenter ;0x64
  503.         LD E,A
  504.         ret nc ;jr NC,$+3
  505.         INC D
  506.         ret
  507.  
  508. YtoADDR
  509.        PUSH HL
  510.         LD H,D
  511.         ld L,E
  512.         ADD HL,HL
  513.         ADD HL,HL
  514.         ADD HL,DE ;*5
  515.         ADD HL,HL
  516.         ADD HL,HL
  517.         ADD HL,HL ;*40
  518.         LD DE,scrbase
  519.         ADD HL,DE
  520. ;genX=$+1
  521. ;        LD DE,0
  522. ;        ADD HL,DE
  523.         EXD
  524.        POP HL
  525.         RET
  526.         ;align 256;DS .(-$)
  527. tscales
  528.        IF customscales == 0
  529.         INCBIN "scalesw3" ;сначала мелкие
  530.        ELSE
  531.         DS 8,5,0
  532.         DS 7,6,0
  533.         DS 6,7,0
  534.         DS 5,8,0
  535.         DS 4,9,0
  536.         DS 3,10,0
  537.         DS 2,11,0
  538.         DS 1,12,0
  539.         DS 1,13,0
  540.         DS 1,14,0
  541.         DS 1,15,0
  542.         DS 1,16,0
  543.         DS 1,17,0
  544.         DS 1,18,0
  545.         DS 1,19,0
  546.         DS 1,20,0
  547.         DS 1,21,0
  548.         DS 1,22,0
  549.         DS 1,23,0
  550.         DS 1,24,0
  551.         DS 1,25,0
  552.         DS 1,26,0
  553.         DS 1,27,0
  554.         DS 1,28,0
  555.         DS 1,29,0
  556.         DS 1,30,0
  557.         DS 1,31,0
  558.         DS 1,32,0
  559.         DS 1,33,0
  560.         DS 1,34,0
  561.         DS 1,35,0
  562.         DS 1,36,0
  563.         DS 1,38,0
  564.         DS 1,40,0
  565.         DS 1,42,0
  566.         DS 1,44,0
  567.         DISPLAY $-tscales,"=#80"
  568.        ENDIF
  569. tscales_rev
  570.         ds 128
  571.  
  572.         include "anims.asm"
  573.         include "savestate.asm"
  574.  
  575.         align 256
  576. trecolor
  577. ;%00003210 => %.3...210
  578.         dup 256
  579. _3=$&8
  580. _210=$&7
  581. _3L=($>>4)&8
  582. _210L=($>>4)&7
  583.         db (_3L*0x08) + (_210L*0x01) + (_3*0x10) + (_210*0x08)
  584.         edup
  585.  
  586. bmpbuf
  587.  
  588.         display "free before stack=",0x3e00-$
  589.  
  590.         ds 0x8000-$
  591.  
  592.        IF atm
  593.         ;ORG #C000;,pgscalers
  594.         ;ds 0xc000-$
  595.         ;INCBIN "scalers"
  596. wasmuz
  597.         ;ds 9,201
  598.         incbin "DOOM-MUS" ;TODO load
  599. wasmuz_sz=$-wasmuz
  600.  
  601.         include "genscale.asm"
  602.  
  603.         display "WASMAP=",$
  604. WASMAP
  605.         INCBIN "mapatm.E" ;TODO load
  606. szMAP=$-WASMAP
  607.  
  608. res_path
  609.         defb "wolf3d",0
  610.      
  611.  
  612.        else ;~atm
  613.        ENDIF
  614. end
  615.  
  616.         ;display "End=",end
  617.         ;display "Free after end=",/d,#c000-end
  618.         ;display "Size ",/d,end-begin," bytes"
  619.        
  620.         savebin "wolf3d.com",begin,end-begin
  621.        
  622.         LABELSLIST "../../../us/user.l",1
  623.