?login_element?

Subversion Repositories NedoOS

Rev

Rev 1134 | Blame | Compare with Previous | Last modification | View Log | Download

  1.         device zxspectrum128
  2.  
  3.         ; Compile from this file with sjasmplus !!!!!!!!!!!
  4.  
  5. DEBUG = 0
  6. ;MACHINE = 9            ; 9k version with basic loader
  7. ; MACHINE = 16          ; 16k cartrige version
  8. ; MACHINE = 48          ; 48k full version
  9. MACHINE = 1024          ; ATM2+ with NedoOS
  10. //--------------------------------------------------------------------------
  11.  
  12.         include "code/struct.asm"
  13.  
  14.         if MACHINE == 9
  15.                 include "code/basic.asm"        ; for basic loader
  16.         endif
  17.  
  18.         if MACHINE == 16
  19.                 include "code/rom.asm"          ; for cartrige
  20.         endif
  21.  
  22.         if MACHINE == 1024
  23.         include "../../_sdk/sys_h.asm"  
  24.  
  25. STACK=0x4000;0x61a8
  26. GAMESTACK=0x4000;0xFFFF
  27. L_FDFD=0xfdfd
  28. L_FE00=0xfe00
  29.  
  30. scrbase=0x4000+4
  31. sprmaxwid=32
  32. sprmaxhgt=32
  33. scrwid=160 ;double pixels
  34. scrhgt=192;200
  35. INTSTACK=0x3f80
  36. tempsp=0x3f86 ;6 bytes for prspr
  37. ;UVSCROLL_SCRWID=320 ;8*(TILEMAPWID-2)
  38. ;UVSCROLL_SCRHGT=192 ;(делится на 16!!!) ;8*(TILEMAPHGT-2) ;чтобы выводить всегда 12 метатайлов (3 блока по 8) по высоте
  39.  
  40. ;screenYtable=0x8b00
  41.  
  42. EGA=1
  43.  
  44.         org PROGSTART
  45. begin
  46.         ;jp begin2 ;/prsprqwid (sprites in file are made so that they return here)
  47. ;begin2
  48.         OS_HIDEFROMPARENT
  49.  
  50.         ld e,3+0x80 ;6912+keep
  51.         ;ld e,0+0x80 ;EGA+keep
  52.         ;OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode)
  53.         call setgfx
  54.  
  55.         ld e,0 ;color byte
  56.         OS_CLS
  57.  
  58.         OS_GETMAINPAGES
  59. ;dehl=pages in 0000,4000,8000,c000
  60.         ld a,e
  61.         ld (pgmain4000),a
  62.         ld a,h
  63.         ld (pgmain8000),a
  64.         ld a,l
  65.         ld (pgspr),a
  66.  
  67.         ld hl,wassprites
  68.         ld de,0xc000
  69.         ld bc,sz_sprites
  70.         ldir
  71.  
  72.         ;OS_NEWPAGE
  73.         ;ld a,e
  74.         ;ld (pgmain4000),a
  75.  
  76.        if 1==0
  77.         ld de,res_path
  78.         OS_CHDIR
  79.  
  80.         call setpgsscr40008000
  81.  
  82.         ld de,emptypal
  83.         OS_SETPAL
  84.         ;ld de,bmpfilename
  85.         ;call openstream_file
  86.         ;call readbmphead_pal
  87.         ;call readbmpscr
  88.         ;call closestream_file
  89.         ;ld de,path
  90.         ;OS_CHDIR
  91.         ;ld a,(pgscrdata0)
  92.         ld de,filename0 ;имя файла
  93.         ld hl,0x4000 ;куда грузим
  94.         call loadfile_in_hl ;загрузили один экранный файл в одну страницу
  95.         ;ld a,(pgscrdata1)
  96.         ld de,filename1 ;имя файла
  97.         ld hl,0x8000 ;куда грузим
  98.         call loadfile_in_hl ;загрузили другой экранный файл в другую страницу
  99.         ld hl,0x4000+8000 ;там в картинке палитра (по байту на цвет)
  100.         ld de,pal
  101.         ld b,16
  102. copypal0
  103.         ld a,(hl)
  104.         inc hl
  105.         ld (de),a
  106.         inc de
  107.         ld (de),a
  108.         inc de
  109.         djnz copypal0 ;скопировали палитру в pal (по 2 байта на цвет)
  110.         ld de,pal
  111.         OS_SETPAL
  112.        
  113.         call setpgsmain40008000
  114.  
  115.         ;ld b,50
  116.         ;halt
  117.         ;djnz $-1
  118.         YIELDGETKEYLOOP
  119.  
  120.         ld e,3+8+0x80 ;6912+noturbo+keep
  121.         OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode)
  122.         ld e,0 ;color byte
  123.         OS_CLS
  124.         ld de,standardpal
  125.         OS_SETPAL
  126.         YIELD
  127.        endif
  128.  
  129.        if 0
  130.         call setpgsscr40008000_current
  131.        
  132.         ld de,floor_2
  133.         ld hl,0x4000
  134.         ld bc,0x1008
  135. ;b=hgt,c=wid (/2)
  136. ;de=gfx
  137. ;hl=scr
  138.         call primgega_onescreen
  139.         ;jr $
  140.        endif
  141.  
  142.         ld a,(user_scr0_high) ;ok
  143.         SETPG16K
  144.        
  145.         call swapimer
  146.  
  147.        if 0;EGA
  148.         ld hl,prsprqwid
  149.         ld (0x0101),hl ;sprites in file are made so that they return in 0x0100
  150.        endif
  151.  
  152.         ld sp,STACK
  153.         ;YIELDGETKEYLOOP
  154.        
  155.         ;jp GO
  156. code:
  157.         include "includes.asm"
  158.         include "mem.asm"
  159.         include "int.asm"
  160.  
  161. curgfxmode
  162.         db 0
  163.  
  164. setgfx
  165.        ld a,e
  166.        ld (curgfxmode),a
  167.         OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode)
  168.         ret
  169.  
  170. set6912
  171.         ld de,emptypal
  172.         OS_SETPAL
  173.         ld e,3+0x80 ;6912+keep
  174.         call setgfx
  175.         ld a,(user_scr0_high) ;ok
  176.         SETPG16K
  177.         ld e,0
  178.         OS_CLS
  179.         ld de,standardpal
  180.         OS_SETPAL
  181.         ret
  182.  
  183. setEGA
  184.         ld de,emptypal
  185.         OS_SETPAL
  186.         ld e,0+0x80 ;EGA+keep
  187.         call setgfx
  188.         ld e,0 ;color byte
  189.         OS_CLS
  190.         call setpgsscr40008000_current
  191.         ld de,pal
  192.         OS_SETPAL
  193.         ret
  194.  
  195. primgega_onescreen
  196. ;b=hgt,c=wid (/2)
  197. ;de=gfx
  198. ;hl=scr
  199.        push ix
  200. primgega0
  201.         push bc
  202.         ld hx,b
  203.         push hl
  204.         ld bc,40
  205. primgegacolumn0
  206.         ld a,(de)
  207.         inc de
  208.         ld (hl),a
  209.         add hl,bc
  210.         dec hx
  211.         jr nz,primgegacolumn0
  212.         pop hl
  213.         ld a,0x9f;0xa0
  214.         cp h
  215.         ld bc,0x4000
  216.         adc hl,bc
  217.         jp pe,primgegacolumn0q ;в половине случаев
  218. ;8000->с000 (надо 6000) или a000->e001 (надо 4001)
  219.          inc a
  220.         xor h
  221.         ld h,a
  222. primgegacolumn0q
  223.         pop bc
  224.         dec c
  225.         jr nz,primgega0
  226.        pop ix
  227.         ret
  228.  
  229. prbgforspr
  230. ;de=scr
  231. ;(ix+oData.x)
  232. ;(ix+oData.y)
  233.        ld a,(ix+oData.drawMethod)
  234.        cp 2
  235.        ret z
  236.        
  237.     if 1
  238.         ld a,(ix+oData.y)
  239.         cp (ix+oData.preY)
  240.         jr c,$+5
  241.         ld a,(ix+oData.preY)
  242.         ld l,a
  243.         ld e,(ix+oData.x)
  244. ; L = Y; E = X (in pixels)
  245.        push hl ;l=minY
  246.         call getScrAddrByCoords ;hl=scraddr
  247.         ex de,hl
  248.        pop hl ;l=minY
  249.         ld a,(ix+oData.y)
  250.         cp (ix+oData.preY)
  251.         jr nc,$+5
  252.         ld a,(ix+oData.preY)
  253.         add a,16 ;a=maxY
  254.         sub l
  255.        push af ;hsb=hgt
  256.        ld c,l ;minY
  257.         ld a,(ix+oData.x)
  258.         rra
  259.         and 4
  260.         ld l,a
  261.         ld h,0
  262.         add hl,hl
  263.         add hl,hl
  264.         add hl,hl
  265.         add hl,hl
  266.         add hl,hl
  267.         add hl,hl
  268.        ld a,c ;minY
  269.         and 15
  270.         ld c,a
  271.         ld b,0
  272.         add hl,bc
  273.         ld bc,megafloor
  274.         add hl,bc
  275.        pop bc ;hsb=hgt
  276.         ld c,8
  277. ;hl=gfx
  278. ;de=scr
  279. ;b=hgt,c=8
  280.     else    
  281.        
  282.         ld e,(ix+oData.x)
  283.         ld a,(ix+oData.y)
  284.         and 0xf0
  285.         ld l,a
  286. ; L = Y; E = X (in pixels)
  287.         call getScrAddrByCoords ;hl=scraddr
  288.         ex de,hl
  289.  
  290.         ld a,(ix+oData.x)
  291.         rra
  292.         and 4
  293.         ld l,a
  294.         ld h,0
  295.         add hl,hl
  296.         add hl,hl
  297.         add hl,hl
  298.         add hl,hl
  299.         add hl,hl
  300.         add hl,hl
  301.         ;ld a,(ix+oData.y)
  302.         ;and 15
  303.         ;ld c,a
  304.         ;ld b,0
  305.         ;add hl,bc
  306.         ld bc,megafloor
  307.         add hl,bc
  308.         ld bc,0x1008
  309.        ;ld a,(ix+oData.y)
  310.        ;and 7
  311.        ;jr z,$+3
  312.        ;  inc b
  313.         ;ld a,(ix+oData.direction)
  314.         ;and 4+8 ;up+down
  315.           ld a,(ix+oData.y)
  316.           cp (ix+oData.preY)
  317.         jr z,.nogovert
  318. ;на случай, когда приезжаем вниз и втыкаемся в стену
  319. ;это движение вниз + круглый y
  320. ;при этом не расширяем область очистки
  321.           ld a,(ix+oData.y)
  322.           cp (ix+oData.preY)
  323.           jr c,.nogodown
  324.           ld a,(ix+oData.y)
  325.           and 15
  326.           jr z,.godownskipbigmask
  327. .nogodown
  328.           ld a,b
  329.           add a,16
  330.           ld b,a
  331. .godownskipbigmask
  332. ;на случай, когда мы выехали из тайла, а остались ноги
  333.           ld a,(ix+oData.preY)
  334.           and 0x0f
  335.           jr z,.nogovert
  336.           ld a,(ix+oData.y)
  337.           xor (ix+oData.preY)
  338.           and 0xf0
  339.           jr z,.nogovert
  340.         ;ld a,(ix+oData.direction)
  341.         ;and 8 ;down
  342.           ld a,(ix+oData.y)
  343.           cp (ix+oData.preY)
  344.         jr c,.nogovertdown
  345.         ex de,hl
  346.         push bc
  347.         ld bc,-(40*16)
  348.         add hl,bc
  349.         pop bc
  350.         ex de,hl
  351. .nogovertdown
  352.           ld a,b
  353.           add a,16
  354.           ld b,a
  355. .nogovert
  356.  
  357.    endif
  358. ;hl=gfx
  359. ;de=scr
  360. ;b=hgt
  361.  
  362.        ld a,(ix+oData.x)
  363.        and 7
  364.        jr z,$+4
  365.          ld c,12
  366.         ex de,hl
  367. prmegaimgega
  368.         ;ret
  369. ;b=hgt,c=wid (/2)
  370. ;de=gfx
  371. ;hl=scr
  372. prmegaimgega0
  373.         push bc
  374.         ld hx,b
  375.         push hl
  376.         ld bc,40
  377. prmegaimgegacolumn0
  378.         ld a,(de)
  379.         inc de
  380.         ld (hl),a
  381.         add hl,bc
  382.         dec hx
  383.         jr nz,prmegaimgegacolumn0
  384.         pop hl
  385.         ld a,0x9f;0xa0
  386.         cp h
  387.         ld bc,0x4000
  388.         adc hl,bc
  389.         jp pe,prmegaimgegacolumn0q ;в половине случаев
  390. ;8000->с000 (надо 6000) или a000->e001 (надо 4001)
  391.          inc a
  392.         xor h
  393.         ld h,a
  394. prmegaimgegacolumn0q
  395.         pop bc
  396.         ld a,64
  397.         sub b
  398.        add a,e
  399.        ld e,a
  400.        jr nc,$+3
  401.        inc d
  402.         dec c
  403.         jr nz,prmegaimgega0
  404.         ret
  405.  
  406. setpgsprc000
  407. pgspr=$+1
  408.         ld a,0
  409.         SETPGC000
  410.         ret
  411. SEED
  412.         dw 0
  413. cartrigeFont
  414.         incbin "font/font.SpecCHR"
  415.         include "variables.asm"
  416.         include "prspr.asm"
  417.        
  418.         display $,"<0x3f00"
  419.        
  420. wassprites
  421.        disp 0xc000
  422.         include "sprites.ast"
  423.         include "pal.ast"
  424. standardpal
  425.         STANDARDPAL
  426. emptypal
  427.         ds 32,0xff        
  428.        if EGA
  429. ss:
  430.         include "sprites/storage.asm"
  431. ess        
  432.         ;display enemy_1-enemy_0
  433.        endif
  434.        ent
  435. sz_sprites=$-wassprites
  436.         display sz_sprites,"<=0x4000"
  437.         endif
  438.  
  439.     display "level CELLS address: ",/A,levelCells
  440.     display "getDrawData address: ",/A,getDrawData
  441.     display "object data size: ",/A,OBJECT_DATA_SIZE
  442.     display "OBJECTS DATA : ",/A,objectsData
  443.  
  444.     display "LEVELS_MAP: ",/A,LEVELS_MAP
  445.     display "LEVELS_BEGIN: ",/A,LEVELS_BEGIN
  446.  
  447.     display "SPRITE_STORAGE: ",/A,SPRITE_MAP
  448.  
  449.  
  450.     display "::::::::: ",/A,PASS.input.printNext
  451.  
  452.         display "SPRITE STORAGE SIZE = ",/A, ess - ss
  453.         display "ALL LEVELS SIZE = ",/A, elds - lds
  454.  
  455.         if MACHINE == 48 || MACHINE == 9
  456.         display "CODE SIZE = ",/A, vars - basic
  457.         display "FULL SIZE = ",/A, $ - basic
  458.         endif
  459. end
  460.  
  461.     display "LAST ADDRESS = ",/A, $
  462.  
  463.         if MACHINE == 9 && __ERRORS__ == 0
  464.                 SHELLEXEC "P:\ZX\Emulators\ue\unreal.exe Wow.tap"
  465.         endif
  466.  
  467.         if MACHINE == 16 && __ERRORS__ == 0
  468.                 SHELLEXEC "P:\ZX\Emulators\xpeccy_0.6.20210407_win32\xpeccy.exe Wow.bin"
  469.         endif
  470.  
  471.         if MACHINE == 1024 && __ERRORS__ == 0
  472.         display "Size ",/d,end-begin," bytes"
  473.         savebin "wow.com",begin,end-begin
  474.         LABELSLIST "../../../us/user.l"
  475.         endif
  476.