?login_element?

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download

  1.             DEVICE ZXSPECTRUM1024
  2. ;23.05.08,24.05.08
  3.  
  4. ;(C) Perspective, 2008
  5.  
  6. ;Основной загрузчик игры Вера,
  7. ;распаковщики, титульная картинка
  8.  
  9. LOADBYNAME=1
  10.  
  11.         ORG #6000
  12.  
  13.  
  14. DEHR2   EQU #6AC9  ;распаковщик, который есть внутри игры
  15. INTRO   EQU #4071  ;старт интро
  16.  
  17. PG_SPR  EQU 0+16+8 ;спрайты 2*2 512 штук
  18. PG_MAP  EQU 1+16+8 ;карта,массив,путь,скрипты,звуки
  19. PG_MISC EQU 3+16+8 ;распак. текст,ключевой кадр,
  20.                    ;упак.карта,массив
  21. PG_HERO EQU 4+16+8 ;спрайты героя
  22. PG_MUZ  EQU 6+16+8 ;Плеер,музыка
  23. PG_VIEW EQU 7+16+8 ;упак. экран
  24.  
  25. PG0=60 ;спрайты мира
  26. PG1=11 ;карта и т.д.
  27. PG31=80 ;движок
  28. PG32=64 ;всякие разности
  29. PG41=13 ;спрайты героя
  30. PG42=40 ;видео
  31. PG6=45 ;музыка и т.д.
  32. PG7=24 ;шрифт и т.д.
  33. PG00=12 ;интро
  34.  
  35. LOADER
  36.        if LOADBYNAME
  37.         ld sp,0x6000
  38.         call loadmain
  39.         ld hl,fn_vars
  40.         ld de,0x6066
  41.         ld a,0x10
  42.         call loadpage
  43.         ld hl,fn_main
  44.         ld de,0x6666
  45.         ld a,0x17 ;0x10 запорет начало спрайтов
  46.         call loadpage
  47.         jp 0x6663
  48.        
  49. fn_main
  50.         db "VERAMAINC"
  51. fn_vars
  52.         db "VERAVARSC"
  53.        
  54. loadpage
  55.         ld bc,0x7ffd
  56.         ld (0x5b5c),a
  57.         out (c),a
  58.         push de
  59.         ld c,0x13
  60.         call 0x3d13 ;copy to 5cdd
  61.         ld c,0x0a
  62.         call 0x3d13 ;find file on disk
  63.         ld a,c ;file descriptor #
  64.         ld c,8
  65.         call 0x3d13 ;load file descriptor
  66.         ld c,0x0e
  67.         ld a,3 ;"load file to hl"
  68.         pop hl ;load addr
  69.         jp 0x3d13
  70.        
  71. loadmain
  72.         xor a
  73.         out (0xfe),a
  74.         ld (0x5d10),a ;for TR-DOS find file
  75.         ld (iy+1),0xcc
  76.         ld a,9
  77.         ld (23814),a
  78.         ld hl,fn_0;main
  79.         ld de,0xc000
  80.         ld a,0x10
  81.         call loadpage
  82.         ld hl,fn_1;main
  83.         ld de,0xf000
  84.         ld a,0x11
  85.         call loadpage
  86.         ld hl,fn_3;main
  87.         ld de,0xc000
  88.         ld a,0x13
  89.         call loadpage
  90.         ld hl,fn_4;main
  91.         ld de,0xc000
  92.         ld a,0x14
  93.         call loadpage
  94.         ld hl,fn_6;main
  95.         ld de,0xc000
  96.         ld a,0x16
  97.         call loadpage
  98.         ld hl,fn_7;main
  99.         ld de,0xdb00
  100.         ld a,0x17
  101.         jp loadpage
  102.        
  103. fn_0
  104.         db "0_PAGE  C"
  105. fn_1
  106.         db "1_PAGE  C"
  107. fn_3
  108.         db "3_PAGE  C"
  109. fn_4
  110.         db "4_PAGE  C"
  111. fn_6
  112.         db "6_PAGE  C"
  113. fn_7
  114.         db "7_PAGE  C"
  115.        endif
  116.  
  117.         DISP #4000
  118.         DI
  119.         LD A,PG_VIEW-8
  120.         CALL PAGE
  121.  
  122. ;       CALL CLEANER
  123.  
  124.         LD HL,SCR
  125.         CALL LC5  ;распаковываем экран
  126.  
  127.         LD A,PG_VIEW
  128.         CALL PAGE      ;включаем видимым второй экран
  129.  
  130. ;Грузим и распаковываем спрайты мира
  131. ;0
  132.         LD HL,#6000
  133.         PUSH HL
  134.         LD B,PG0
  135.         CALL DOS
  136.         LD A,PG_SPR
  137.         CALL PAGE
  138.         POP HL
  139.         LD DE,#C000
  140.         CALL DEHRUST
  141.  
  142. ;Грузим и распаковываем карту и т.д.
  143. ;1
  144.         LD HL,#6000
  145.         PUSH HL
  146.         LD B,PG1
  147.         CALL DOS
  148.         LD A,PG_MAP
  149.         CALL PAGE
  150.  
  151. ;       CALL CLEANER
  152.  
  153.         POP HL
  154.         LD DE,#F000
  155.         CALL DEHRUST
  156.  
  157. ;Грузим и распаковываем спрайты героя и видео
  158. ;4
  159.         LD HL,#6000
  160.         PUSH HL
  161.         LD B,PG41
  162.         CALL DOS
  163.         LD A,PG_HERO
  164.         CALL PAGE
  165.  
  166. ;       CALL CLEANER
  167.  
  168.         POP HL
  169.         LD DE,#C000
  170.         CALL DEHRUST
  171.  
  172.         LD HL,#C000+6144 ;Video
  173.         LD B,PG42
  174.         CALL DOS
  175.  
  176. ;Грузим НЕ распаковывая музыку и т.д.
  177. ;6
  178.         LD A,PG_MUZ
  179.         CALL PAGE
  180.  
  181. ;       CALL CLEANER
  182.  
  183.         LD HL,#D35E
  184.         LD B,PG6
  185.         CALL DOS
  186.  
  187. ;Грузим и распаковываем шрифт и т.д.
  188. ;7
  189.         LD HL,#6000
  190.         PUSH HL
  191.         LD B,PG7
  192.         CALL DOS
  193.         LD A,PG_VIEW
  194.         CALL PAGE
  195.         POP HL
  196.         LD DE,#DB00
  197.         CALL DEHRUST
  198.  
  199. ;Грузим и распаковываем главный файл игры
  200. ;(движок и прочее)
  201. ;3
  202.         LD A,PG_MISC
  203.         CALL PAGE
  204.  
  205. ;       LD HL,#C000
  206. ;       LD BC,384
  207. ;       LD DE,0
  208. ;       CALL CLNR
  209.  
  210.         LD HL,#AEFF
  211.         PUSH HL
  212.         LD B,PG31
  213.         CALL DOS
  214.         POP HL
  215.         LD DE,#6666
  216.         CALL DEHRUST
  217.  
  218. ;Грузим НЕ распаковывая всякие разности
  219. ;3
  220.         LD HL,#C000
  221.         LD B,PG32
  222.         CALL DOS
  223.  
  224. ;Грузим, распаковываем и запускаем интро
  225. ;1
  226.         LD A,PG_MAP
  227.         CALL PAGE
  228.         LD HL,#C000
  229.         PUSH HL
  230.         LD B,PG00
  231.         CALL DOS
  232.         POP HL
  233.         LD DE,#4040
  234.         LD BC,INTRO
  235.         PUSH BC
  236.         JP DEHR2
  237.  
  238. PAGE
  239.         LD BC,#7FFD
  240.         OUT (C),A
  241.         RET
  242.  
  243. DOS
  244.         LD DE,(#5CF4)
  245.         LD C,5
  246.         JP #3D13
  247.  
  248. ;Чистилка
  249. ;заполняет память задом наперед
  250.  
  251. ;CLEANER
  252. ;       LD HL,0    ;откуда+2
  253. ;       LD D,H     ;чем
  254. ;       LD E,H
  255. ;       LD BC,256  ;сколько*32*2
  256. ;CLNR   DI
  257. ;       LD (CLN+1),SP
  258. ;       LD SP,HL
  259.  
  260. ;CLNRLOOP
  261.  
  262. ;       DUP 32
  263. ;       PUSH DE
  264. ;       EDUP
  265.  
  266. ;       DEC BC
  267. ;       LD A,B
  268. ;       OR C
  269. ;       JR NZ,CLNRLOOP
  270. ;
  271. ;CLN    LD SP,0
  272. ;       EI
  273. ;       RET
  274.  
  275. DEHRUST
  276. ;HL - FROM, DE - TO
  277.         INC HL
  278.         INC HL
  279.         INC HL ;SKIP "HR2"
  280.         LD A,(HL)
  281.         INC HL
  282.         PUSH DE
  283.         LD C,(HL)
  284.         INC HL
  285.         LD B,(HL)
  286.         INC HL
  287.         DEC BC
  288.  
  289.         EX DE,HL
  290.         ADD HL,BC
  291.         EX DE,HL
  292.  
  293.         LD C,(HL)
  294.         INC HL
  295.         LD B,(HL)
  296.         ADD HL,BC
  297.  
  298.         SBC HL,DE
  299.         ADD HL,DE
  300.         JR C,$+4
  301.         LD D,H
  302.         LD E,L
  303.         PUSH BC
  304.         LDDR
  305.         POP BC
  306.  
  307.         EX DE,HL
  308.         RLA
  309.         JR NC,DPCYES
  310.         POP DE
  311.         INC HL
  312.         LDIR
  313.         RET
  314.  
  315. DPCYES  LD DE,7
  316.         ADD HL,DE
  317.  
  318.         PUSH HL
  319.         EXX
  320.         POP HL
  321.         POP DE
  322.  
  323.         LD B,6
  324.         DEC HL
  325.         LD A,(HL)
  326.         PUSH AF
  327.         INC SP
  328.         DJNZ $-4
  329.  
  330.         EXX
  331.         LD DE,#1003
  332.         LD C,#80
  333.  
  334. DPC1    LD A,(HL)
  335.         INC HL
  336.         EXX
  337.         LD (DE),A
  338.         INC DE
  339. DPC0    EXX
  340. DPC0A   CALL SLAC
  341.         JR C,DPC1
  342.  
  343.         LD B,#01
  344. DPC4    LD A,%01000000
  345. DPC2    CALL SLAC
  346.         RLA
  347.         JR NC,DPC2
  348.  
  349.         CP E ;3
  350.         JR C,DPC3
  351.         ADD A,B
  352.         LD B,A
  353.         XOR D ;#10
  354.         JR NZ,DPC4
  355. DPC3    ADD A,B
  356.         CP 4
  357.         JR Z,DPC5 ;B<>1;B=4
  358.         ADC A,#FF
  359. DPC8A   CP 2
  360. DPC8    EXX
  361.         LD C,A
  362.         LD H,#FF
  363.         EXX
  364.         JR C,DPC9 ;B=1
  365.  
  366.         JR Z,DPC12
  367.  
  368.         CALL SLAC
  369.         JR C,DPC12
  370.  
  371.         ;B>=4
  372.         LD A,%01111111
  373.         LD B,E ;3
  374.         DJNZ DPC9A1 ;JR...B=2
  375. DPC9A2  DJNZ DPC5A2
  376.         LD B,A
  377.         SBC A,A
  378.  
  379. DPC9B   CALL SLAC
  380.         RLA
  381.         DEC A
  382.         INC B
  383.         JR NZ,DPC9B
  384.         CP #FF-30
  385.         JR NZ,$+4
  386.         LD A,(HL)
  387.         INC HL
  388.  
  389.         EXX
  390.         LD H,A
  391.         EXX
  392.  
  393. DPC12   LD A,(HL)
  394.         INC HL
  395. DPC11   EXX
  396.         LD L,A
  397.         ADD HL,DE
  398.         LDIR
  399.         JR DPC0
  400.  
  401. DPC5A2  ADD A,6
  402.         RLA
  403.         LD B,A
  404. DPC5C   LD A,(HL)
  405.         INC HL
  406.         EXX
  407.         LD (DE),A
  408.         INC DE
  409.         EXX
  410.         DJNZ DPC5C
  411.         JR DPC0A
  412.  
  413. DPC5    ;B=4
  414.         CALL SLAC
  415.         LD A,D ;%00010000
  416.         JR NC,DPC5A1
  417.  
  418.         LD A,(HL)
  419.         INC HL
  420.         CP D ;16
  421.         JR NC,DPC8A
  422.         OR A
  423.         JR Z,DPC6
  424.  
  425.         EXX
  426.         LD B,A
  427.         EXX
  428.         LD A,(HL)
  429.         INC HL
  430.         JR DPC8
  431.  
  432. DPC9    ;B=1
  433.         LD A,%00111111
  434. DPC5A1  ;B=4
  435. DPC9A1  ;B=2
  436. DPC10   CALL SLAC
  437.         RLA
  438.         JR NC,DPC10
  439.         DJNZ DPC9A2
  440.         JR DPC11
  441.  
  442. SLAC    SLA C
  443.         RET NZ
  444.         LD C,(HL)
  445.         INC HL
  446.         RL C
  447.         RET
  448.  
  449. DPC6    EXX
  450.         LD B,6
  451.         DEC SP
  452.         POP AF
  453.         LD (DE),A
  454.         INC DE
  455.         DJNZ $-4
  456.         RET
  457.  
  458. ;Распаковка...
  459. LC5
  460.        LD DE,7;SKIP "LCMP5" & LENGTH
  461.        ADD HL,DE
  462.  
  463.        LD A,(HL)
  464.        INC HL
  465.        LD E,A
  466.        ADD HL,DE
  467.  
  468.        LD A,(HL)
  469.        LD E,A;pазpыв
  470.  
  471.        AND 3
  472.        RLCA
  473.        RLCA
  474.        RLCA
  475.        OR #C000/256
  476.  
  477.        EXX
  478.        LD D,A;начало
  479.        LD E,0
  480.        EXX
  481.  
  482.        LD A,(HL)
  483.        INC HL
  484.        XOR #C000/256+#18
  485.        AND #FC
  486.        LD HX,A;конец ч/б.
  487.  
  488. DLC1   LD A,(HL)
  489.        INC HL
  490.        LD LX,#FF
  491. DLC2   EXX
  492.        JR NZ,DLC10
  493.        LD B,1
  494.  
  495. DLC3   EXA
  496.        SLA D
  497.        JR NZ,$+6
  498.        LD D,(HL)
  499.        INC HL
  500.        SLI D
  501.        DJNZ DLC7
  502.        JR C,DLC1
  503.        INC B
  504. DLC4   LD C,%01010110
  505.        LD A,#FE
  506. DLC5   SLA D
  507.        JR NZ,$+6
  508.        LD D,(HL)
  509.        INC HL
  510.        RL D
  511.        RLA
  512.        SLA C
  513.        JR Z,DLC6
  514.        JR C,DLC5
  515.        RRCA
  516.        JR NC,DLC5
  517.        SUB 8
  518. DLC6   ADD A,9
  519.        DJNZ DLC3
  520.  
  521.        CP 0-8+1
  522.        JR NZ,$+4
  523.        LD A,(HL)
  524.        INC HL
  525.  
  526.        ADC A,#FF
  527.        LD LX,A
  528.        JR C,DLC4
  529. ;      DI
  530. ;      LD A,16+8+7  ;Вкл. видимым 2-й экран
  531. ;      LD (page),A
  532. ;      LD BC,#7FFD
  533. ;      OUT (C),A
  534. ;      EI
  535.        RET
  536. DLC7   LD A,(HL)
  537.        INC HL
  538.  
  539.        EXX
  540.        LD L,A
  541.        EXA
  542.        LD H,A
  543.        ADD HL,DE
  544.  
  545.        CP #FF-2
  546.        JR NC,DLC8
  547.        DEC LX
  548. DLC8   LD A,H
  549.        CP HX
  550.        JR NC,DLC13
  551.        XOR L
  552.        AND #F8
  553.        XOR L
  554.        LD B,A
  555.        XOR L
  556.        XOR H
  557.        RLCA
  558.        RLCA
  559.        LD C,A
  560.  
  561. DLC9   EXA
  562.        LD A,(BC)
  563. DLC10  EXA
  564.        LD A,D
  565.        CP HX
  566.        JR NC,DLC14
  567.        XOR E
  568.        AND #F8
  569.        XOR E
  570.        LD B,A
  571.        XOR E
  572.        XOR D
  573.        RLCA
  574.        RLCA
  575.        LD C,A
  576.  
  577. DLC11  EXA
  578.        LD (BC),A
  579.  
  580.        INC DE
  581.        JR NC,$+4
  582.        DEC HL
  583.        DEC HL
  584.        INC HL
  585.        EXA
  586.        INC LX
  587.        JR NZ,DLC8
  588.        JP DLC2
  589.  
  590. DLC13  SCF
  591. DLC14  PUSH AF
  592.        EXX
  593.        ADD A,E
  594.        EXX
  595.        LD B,A
  596.        POP AF
  597.        LD C,E
  598.        JR NC,DLC11
  599.        LD C,L
  600.        JR DLC9
  601.  
  602. SCR
  603.         INCBIN "VeraTitl.plc"
  604.  
  605.         ENT
  606.  
  607.         DISPLAY "Длина загрузчика =",$-LOADER;#6000
  608.         DISPLAY "Старт загрузчика =",LOADER
  609.  
  610.         ;page PG_SPR
  611.         savebin "code.c",LOADER,$-LOADER
  612.