?login_element?

Subversion Repositories NedoOS

Rev

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

  1.         DEVICE ZXSPECTRUM128
  2.         include "../../_sdk/sys_h.asm"  
  3.  
  4. STACK=0x4000;0x61a8
  5. GAMESTACK=0x4000;0xFFFF
  6. L_FDFD=0xfdfd
  7. L_FE00=0xfe00
  8.  
  9. scrbase=0x4000+4
  10. sprmaxwid=32
  11. sprmaxhgt=32
  12. scrwid=160 ;double pixels
  13. scrhgt=192;200
  14. THESTACK=0x3d00
  15. INTSTACK=0x3c00
  16. tempsp=0x3c06 ;6 bytes for prspr
  17. ;UVSCROLL_SCRWID=320 ;8*(TILEMAPWID-2)
  18. ;UVSCROLL_SCRHGT=192 ;(фхышЄё  эр 16!!!) ;8*(TILEMAPHGT-2) ;ўЄюс√ т√тюфшЄ№ тёхуфр 12 ьхЄрЄрщыют (3 сыюър яю 8) яю т√ёюЄх
  19.  
  20. CODE            EQU $7BE0
  21.  
  22. ;*****************************************************************************
  23. ;** SPECTRUM MIDNIGHT RESISTANCE ALL IN ONE SOURCE                          **
  24. ;*****************************************************************************
  25.  
  26.                 ;OCMD "#SP 7BE0"
  27.                 ;OCMD "K0"
  28.  
  29. ;*****************************************************************************
  30.  
  31. MUSICALSO       EQU 0
  32.  
  33.                 IF MUSICALSO=1
  34. STARTLEV        EQU 0
  35.                 ENDIF
  36.  
  37.                 IF MUSICALSO=0
  38. STARTLEV        EQU 1
  39. AUTO            EQU 1 ; ORIG = EQU 0
  40.                 ENDIF
  41.  
  42.                 ;IF STARTLEV=1
  43.                 ;org #4000
  44.                 ;insert "midnight.scr"
  45.                 ;ENDIF
  46.  
  47.                 IF MUSICALSO=0
  48.  
  49. STARTLIVES      EQU 6-1
  50.  
  51. INFLIF          EQU 0             ;255
  52. INFAMM          EQU 0             ;255
  53. WEPSEL          EQU 0             ;255
  54. SPACETOKILL     EQU 0             ;255
  55.  
  56. ;*****************************************************************************
  57. ;** MEMORY MAP                                                              **
  58. ;*****************************************************************************
  59.  
  60. BACKSCR         EQU $5B00               ; REAL COPYS
  61. BACKATR         EQU BACKSCR+($100*16)
  62. BACKEND         EQU BACKATR+($20*16)
  63. BACKLEN         EQU BACKEND-BACKSCR
  64.  
  65. BACKSCR2        EQU BACKEND             ; BACK SCREEN (COPY TO BACKSCR)
  66. BACKATR2        EQU BACKSCR2+($D0*16)
  67. BACKEND2        EQU BACKATR2+($1A*16)
  68. BACKLEN2        EQU BACKEND2-BACKSCR2
  69.  
  70. MENUSTART       EQU $7000               ; MENU ROUTINES + CHEAT MODE ROUTINE
  71. ;THESTACK        EQU $7BE0
  72. ;CODE            EQU $7BE0
  73.  
  74. MIRPAGE         EQU $FD00               ; FD00 - FDFF
  75. INTPAGE         EQU $FE00               ; FE00 - FF00
  76. PAGE0           EQU $FF01               ; FF01 - FFF0
  77. INTJP           EQU $FFF4               ; FFF4 - FFFF
  78.  
  79. MUSRESETSOUND   EQU $E000
  80. MUSDOMUSIC      EQU $E003
  81. MUSINITTUNE     EQU $E006
  82.  
  83. ;***************************************
  84. ;** EQUATES                           **
  85. ;***************************************
  86.  
  87. ;PRHEX8          EQU 5
  88. ;PRHEX16         EQU 6
  89. PRKEY           EQU 7
  90. PRCLS           EQU 12
  91. PRFONT          EQU 14
  92. PRMULTY         EQU 15
  93. PRINK           EQU 16
  94. PRSIZE          EQU 17
  95. PRGAMECLS       EQU 18
  96. PRPAUSE         EQU 19
  97. PRINK2          EQU 20
  98. PRAT            EQU 22
  99. PREOF           EQU 255
  100.  
  101. KEYB            EQU 0
  102. KEMP            EQU 1
  103. FACE            EQU 2
  104. CURS            EQU 3
  105. CONT            EQU FACE
  106.  
  107. POKE            EQU $80                   ; POKE ADDRESS, VALUE (MAP DATA)
  108.  
  109. HIGHTUNE        EQU 9
  110.  
  111. ;***************************************
  112.  
  113. NOBUL           EQU 32
  114. BULX            EQU 0
  115. BULY            EQU 1
  116. BULP            EQU 2
  117. BULT            EQU 3
  118. BULLEN          EQU 4
  119.  
  120. NOEXP           EQU 8
  121. EXPX            EQU 0
  122. EXPY            EQU 1
  123. EXPP            EQU 2
  124. EXPLEN          EQU 3
  125.  
  126. NOFLAMES        EQU 10
  127.  
  128. NOBAD           EQU 12
  129. XPOS            EQU 0
  130. YPOS            EQU 1
  131. TYPE            EQU 2
  132. PHASE           EQU 3
  133. ACTION          EQU 4
  134. COUNT           EQU 5
  135. TEMP            EQU 6
  136. BADLEN          EQU 7
  137.  
  138. JUMPBIT         EQU 0
  139. KEYBIT          EQU 1
  140.  
  141. JUMP            EQU 1
  142. KEY             EQU 2
  143.  
  144. FIN             EQU 255
  145.  
  146.                 ENDIF
  147.  
  148. ;screenYtable=0x8b00
  149.  
  150. EGA=1
  151.         ;slot 3
  152.         ;page 0
  153.         org PROGSTART
  154. begin
  155.         jp begin2 ;/prsprqwid (sprites in file are made so that they return here)
  156. begin2
  157.         ld sp,STACK
  158.         OS_HIDEFROMPARENT
  159.  
  160.         ld e,0+0x80 ;EGA+keep
  161.         OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode)
  162.  
  163.         ;ld e,1
  164.         ;OS_SETSCREEN
  165.         ld e,0 ;color byte
  166.         OS_CLS
  167.         ;ld e,0
  168.         ;OS_SETSCREEN
  169.         ;ld e,0 ;color byte
  170.         ;OS_CLS
  171.  
  172.         OS_GETMAINPAGES
  173. ;dehl=pages in 0000,4000,8000,c000
  174.         ld a,e
  175.         ld (pggfx),a
  176.         ld a,h
  177.         ld (pgcode8000),a
  178.         ld a,l
  179.         ld (pgcodec000),a
  180.         ;jr $
  181.         ;OS_NEWPAGE
  182.         ;ld a,e
  183.         ld (tpgs+0),a
  184.         OS_NEWPAGE
  185.         ld a,e
  186.         ld (tpgs+1),a
  187.         OS_NEWPAGE
  188.         ld a,e
  189.         ld (tpgs+3),a
  190.         OS_NEWPAGE
  191.         ld a,e
  192.         ld (tpgs+4),a
  193.         OS_NEWPAGE
  194.         ld a,e
  195.         ld (tpgs+6),a
  196.         OS_NEWPAGE
  197.         ld a,e
  198.         ld (tpgs+7),a
  199.  
  200.         OS_NEWPAGE
  201.         ld a,e
  202.         ld (pgmain4000),a
  203.  
  204.         if 1==1
  205.         ld de,res_path
  206.         OS_CHDIR
  207.  
  208.         call setpgsscr40008000
  209.  
  210.         ld de,emptypal
  211.         OS_SETPAL
  212.         ld de,filename0 ;шь  Їрщыр
  213.         ld hl,0x4000 ;ъєфр уЁєчшь
  214.         call loadfile_in_hl ;чруЁєчшыш юфшэ ¤ъЁрээ√щ Їрщы т юфэє ёЄЁрэшЎє
  215.         ld de,filename1 ;шь  Їрщыр
  216.         ld hl,0x8000 ;ъєфр уЁєчшь
  217.         call loadfile_in_hl ;чруЁєчшыш фЁєующ ¤ъЁрээ√щ Їрщы т фЁєує■ ёЄЁрэшЎє
  218.         ld hl,0x4000+8000 ;Єрь т ърЁЄшэъх ярышЄЁр (яю срщЄє эр ЎтхЄ)
  219.         ld de,pal
  220.         ld b,16
  221. copypal0
  222.         ld a,(hl)
  223.         inc hl
  224.         ld (de),a
  225.         inc de
  226.         ld (de),a
  227.         inc de
  228.         djnz copypal0 ;ёъюяшЁютрыш ярышЄЁє т pal (яю 2 срщЄр эр ЎтхЄ)
  229.         ld de,pal
  230.         OS_SETPAL
  231.        
  232.         call setpgsmain40008000
  233.  
  234.         ;ld b,50
  235.         ;halt
  236.         ;djnz $-1
  237.         YIELDGETKEYLOOP
  238.  
  239.         ld e,3+8+0x80 ;6912+noturbo+keep
  240.         OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode)
  241.         ld e,0 ;color byte
  242.         OS_CLS
  243.         ld de,standardpal
  244.         OS_SETPAL
  245.         YIELD
  246.         endif
  247.  
  248.         ld de,res_path
  249.         OS_CHDIR
  250.         ld de,muzfilename
  251.         call openstream_file
  252.         ld a,7
  253.         call setpg
  254.         ld de,music
  255.         ld hl,music_sz
  256.         call readstream_file
  257.         call closestream_file
  258.        
  259.         ld hl,levelfilenames
  260. loadlevels0
  261.         ld a,(hl) ;pg
  262.         inc hl
  263.         cp -1
  264.         jr z,loadlevels0q
  265.         call setpg
  266.         ld e,(hl)
  267.         inc hl
  268.         ld d,(hl)
  269.         inc hl
  270.         push hl
  271.         push de ;addr
  272.         ex de,hl
  273.         call openstream_file
  274.         pop de
  275.         ld hl,0x2000
  276.         call readstream_file
  277.         call closestream_file
  278.         pop hl
  279.         xor a
  280.         ld b,a
  281.         ld c,a
  282.         cpir ;hl=after #0
  283.         jr loadlevels0
  284. loadlevels0q
  285.  
  286.         if 1==1
  287.         ld a,(user_scr0_high) ;ok
  288.         SETPG16K
  289.         ;ld a,(pggfx)
  290.         ;SETPG32KLOW
  291.         call setpggfxc000
  292.         ld hl,0xc000
  293.         ld de,0x4000
  294.         ld bc,0x4000
  295.         ldir
  296.         ;ld a,(user_scr0_high)
  297.         ;SETPG16K
  298.         ;ld a,(pgcode8000)
  299.         ;SETPG32KLOW
  300.         call setpgcodec000
  301.         endif
  302.         ;ld a,(user_scr0_high) ;ok
  303.         ;SETPG16K
  304.        
  305.         call swapimer
  306.  
  307.         if EGA
  308.         ld hl,prsprqwid
  309.         ld (0x0101),hl ;sprites in file are made so that they return in 0x0100
  310.         endif
  311.  
  312.         YIELDGETKEYLOOP
  313.        
  314.         xor a
  315.         call setpg
  316.         ;call CheatMenu
  317.         jp START
  318.  
  319. setpg
  320.         push bc
  321.         and 7
  322.          cp 2
  323.          jr z,$
  324.          cp 5
  325.          jr z,$
  326.         ld ($+4),a
  327.         ld a,(tpgs)
  328.         SETPG32KHIGH
  329.         pop bc
  330.         ret
  331.  
  332.         align 256
  333. tpgs
  334.         ds 256
  335.  
  336.         ;include "pal.ast" ;slabpal
  337. standardpal
  338.         STANDARDPAL
  339. pal
  340.         ds 32,0xff
  341. emptypal
  342.         ds 32,0xff
  343.  
  344. jphl
  345.         jp (hl)
  346.  
  347. CheckBreak
  348.         ld a,0xfe
  349.         in a,(0xfe)
  350.         rra
  351.         ret c
  352.         ld a,0x7f
  353.         in a,(0xfe)
  354.         rra
  355.         ret
  356. ReadKeysCheckQuit
  357.         call CheckBreak
  358.         jp c,READKEYS ;ret c
  359. quiter
  360.         if 1==0
  361.         halt
  362. pgmuznum=$+1
  363.         ld a,0
  364.         SETPG32KHIGH
  365.           ld hl,muz
  366.           OS_SETMUSIC
  367.         halt
  368.         endif
  369.         call swapimer
  370.         im 1
  371.         call killmuz ;because we played music not by OS
  372.         QUIT
  373.  
  374. killmuz
  375.         ld a,0xfe
  376.         call shut1ay
  377.         ld a,0xff
  378. shut1ay
  379.         ld bc,0xfffd
  380.         out (c),a
  381.         ld de,0x0e00
  382. shutay0
  383.         dec d
  384.         ld b,0xff
  385.         out (c),d
  386.         ld b,0xbf
  387.         out (c),e
  388.         jr nz,shutay0
  389.         ret
  390.  
  391. redattr_killable2b
  392.         dw 0
  393.  
  394. ;L_5B00 ;= #5b00
  395. ;        db 0
  396.  
  397. setpggfxc000
  398. pggfx=$+1
  399.         ld a,0
  400.         SETPG32KHIGH
  401.         ret
  402. setpgcodec000
  403. pgcodec000=$+1
  404.         ld a,0
  405.         SETPG32KHIGH
  406.         ret
  407.  
  408. swapimer
  409.         di
  410.         ld de,0x0038
  411.         ld hl,oldimer
  412.         ld bc,3
  413. swapimer0
  414.         ld a,(de)
  415.         ldi ;[oldimer] -> [0x0038]
  416.         dec hl
  417.         ld (hl),a ;[0x0038] -> [oldimer]
  418.         inc hl
  419.         jp pe,swapimer0
  420.         ei
  421.         ret
  422. oldimer
  423.         jp on_int ;чрьхэшЄё  эр ъюф шч 0x0038
  424.         jp 0x0038+3    
  425.  
  426. reter
  427.         ret
  428.  
  429. tstarttime       DB       #00,#00,#00
  430. curgametimer       DB       #00,#00,#00
  431. stoptimer       DB       #00
  432. curtimerlow       DB       #00
  433. ;
  434. on_int
  435. ;restore stack with de
  436.         EX DE,HL
  437.         EX (SP),HL ;de="hl", stack contains "de"
  438.         LD (on_int_jp),HL
  439.         LD (on_int_sp),SP
  440.         LD SP,INTSTACK
  441.         push af
  442.         push bc
  443.         push de ;"hl"
  444.         exx
  445.         ex af,af' ;'
  446.         push af
  447.         push bc
  448.         push de
  449.         push hl
  450.         push ix
  451.         push iy
  452.          ld a,(curpg16k) ;ok
  453.          push af
  454.          ld a,(curpg32klow) ;ok
  455.          push af
  456.          call setpgsmain40008000
  457.         ;DI
  458. ;curscrnum_int=$+1
  459. ;        ld e,0
  460. ;        OS_SETSCREEN
  461.         call INTS
  462.         call oldimer ;ei
  463.          GET_KEY
  464.          jr nz,Imer_nofocus
  465.          ;ld a,(user_scr0_high) ;ok
  466.          ;SETPG16K ;TODO redraw screen when retake focus???
  467. Imer_nofocus
  468.         ;LD     A,(stoptimer)
  469.         ;OR     A
  470.         ;CALL   Z,DecTimer
  471.          pop af
  472.          SETPG32KLOW
  473.          pop af
  474.          SETPG16K
  475.         pop iy
  476.         pop ix
  477.         pop hl
  478.         pop de
  479.         pop bc
  480.         pop af
  481.         ex af,af' ;'
  482.         exx
  483.         pop hl
  484.         pop bc
  485.         pop af        
  486. on_int_sp=$+1
  487.         ld sp,0
  488.         pop de
  489.         ei
  490. on_int_jp=$+1
  491.         jp 0
  492. ;
  493. ;
  494. RIGHTPIX=0x38;0xb8;%10111000
  495. LEFTPIX=0x07;0x47;%01000111
  496.         macro FONTBYTE
  497.         ld a,(de)
  498.         ld c,a
  499.         xor a
  500.         rl c
  501.         jr nc,$+4
  502.          or LEFTPIX
  503.         rl c
  504.         jr nc,$+4
  505.          or RIGHTPIX
  506.         ld (hl),a
  507.         ld a,h
  508.         add a,0x40
  509.         ld h,a
  510.         xor a
  511.         rl c
  512.         jr nc,$+4
  513.          or LEFTPIX
  514.         rl c
  515.         jr nc,$+4
  516.          or RIGHTPIX
  517.         ld (hl),a
  518.         ld a,h
  519.         add a,0x20-0x40
  520.         ld h,a
  521.         xor a
  522.         rl c
  523.         jr nc,$+4
  524.          or LEFTPIX
  525.         rl c
  526.         jr nc,$+4
  527.          or RIGHTPIX
  528.         ld (hl),a
  529.         ld a,h
  530.         add a,0x40
  531.         ld h,a
  532.         xor a
  533.         rl c
  534.         jr nc,$+4
  535.          or LEFTPIX
  536.         rl c
  537.         jr nc,$+4
  538.          or RIGHTPIX
  539.         ld (hl),a
  540.         endm
  541.  
  542. PrintCharA_EGA
  543.         push bc
  544.         push de
  545.         push hl
  546.        push af
  547.         call setpgsscr40008000
  548.         LD      DE,(curprintyx)
  549.         sla e
  550.         sla e
  551.         sla e
  552.         ld a,d ;x
  553.          add a,4
  554.         ld l,e ;y
  555.         ld h,0
  556.         ld d,h
  557.         ld e,l
  558.         add hl,hl
  559.         add hl,hl
  560.         add hl,de ;*5
  561.          add hl,hl
  562.          add hl,hl
  563.          add hl,hl ;*40
  564.         add a,l
  565.         ld l,a
  566.         ld a,h
  567.         adc a,0x40
  568.         ld h,a
  569.        pop af
  570.         PUSH    HL
  571.         LD      DE,font-256;L_BE02
  572.         LD      H,#00
  573.         LD      L,A
  574.         ADD     HL,HL
  575.         ADD     HL,HL
  576.         ADD     HL,HL
  577.         ADD     HL,DE
  578.         EX      DE,HL
  579.         POP     HL
  580.         LD      hx,#08
  581.  
  582. PrintCharA_EGA0
  583.         FONTBYTE
  584.         ld bc,40-0x6000
  585.         add hl,bc
  586.         INC     DE
  587.         dec hx
  588.         jr nz,PrintCharA_EGA0
  589.        
  590.         LD      DE,(curprintyx)
  591.         INC     D
  592.         LD      A,D
  593.         CP      #20
  594.         JR      NZ,PrintCharA_EGAq
  595.         INC     E
  596.         LD      D,#00
  597.         LD      A,E
  598.         CP      #18
  599.         JR      NZ,PrintCharA_EGAq
  600.         LD      E,#00
  601. PrintCharA_EGAq
  602.         LD      (curprintyx),DE
  603.         call setpgsmain40008000
  604.         pop hl
  605.         pop de
  606.         pop bc
  607.         ret
  608.        
  609. PrintCharA
  610.         PUSH    DE
  611.         PUSH    HL
  612.         PUSH    BC
  613.         PUSH    AF
  614.         LD      DE,(curprintyx)
  615.         LD      A,E
  616.         AND     #18
  617.         OR      #40
  618.         LD      H,A
  619.         LD      A,E
  620.         AND     #07
  621.         OR      A
  622.         RRA
  623.         RRA
  624.         RRA
  625.         RRA
  626.         ADD     A,D
  627.         LD      L,A
  628.         POP     AF
  629.         PUSH    HL
  630.         LD      DE,font-256;L_BE02
  631.         LD      H,#00
  632.         LD      L,A
  633.         ADD     HL,HL
  634.         ADD     HL,HL
  635.         ADD     HL,HL
  636.         ADD     HL,DE
  637.         EX      DE,HL
  638.         POP     HL
  639.         LD      B,#08
  640. L_C6EB  LD      A,(DE)
  641.         LD      (HL),A
  642.         INC     H
  643.         INC     DE
  644.         DJNZ    L_C6EB
  645.         LD      DE,(curprintyx)
  646.         INC     D
  647.         LD      A,D
  648.         CP      #20
  649.         JR      NZ,L_C705
  650.         INC     E
  651.         LD      D,#00
  652.         LD      A,E
  653.         CP      #18
  654.         JR      NZ,L_C705
  655.         LD      E,#00
  656. L_C705  LD      (curprintyx),DE
  657.         POP     BC
  658.         POP     HL
  659.         POP     DE
  660.         RET
  661. ;
  662. curprintyx       DW       #0000
  663. ;
  664. PrintStringHL
  665.         LD      A,(HL)
  666.         OR      A
  667.         RET     Z
  668.         CP      #16
  669.         JR      Z,L_C71C
  670.         CALL    PrintCharA
  671.         INC     HL
  672.         JR      PrintStringHL
  673. L_C71C  INC     HL
  674.         LD      E,(HL)
  675.         INC     HL
  676.         LD      D,(HL)
  677.         INC     HL
  678.         LD      (curprintyx),DE
  679.         JR      PrintStringHL
  680. ;
  681. PrintStringHL_EGA
  682.         LD      A,(HL)
  683.         OR      A
  684.         RET     Z
  685.         CP      #16
  686.         JR      Z,L_C71C_EGA
  687.         CALL    PrintCharA_EGA
  688.         INC     HL
  689.         JR      PrintStringHL_EGA
  690. L_C71C_EGA
  691.         INC     HL
  692.         LD      E,(HL)
  693.         INC     HL
  694.         LD      D,(HL)
  695.         INC     HL
  696.         LD      (curprintyx),DE
  697.         JR      PrintStringHL_EGA
  698.  
  699. font
  700.        DB       #00,#00,#00,#00,#00,#00,#00,#00       ;........
  701.        DB       #00,#18,#3C,#18,#00,#18,#18,#00       ;..<.....
  702.        DB       #00,#36,#36,#6C,#00,#00,#00,#00       ;.66l....
  703.        DB       #00,#00,#00,#00,#00,#00,#00,#00       ;........
  704.        DB       #00,#00,#00,#00,#00,#00,#00,#00       ;........
  705.        DB       #00,#00,#00,#00,#00,#00,#00,#00       ;........
  706.        DB       #00,#00,#00,#00,#00,#00,#00,#00       ;........
  707.        DB       #00,#1C,#38,#00,#00,#00,#00,#00       ;..8.....
  708.        DB       #00,#0E,#1C,#1C,#1C,#1C,#0E,#00       ;........
  709.        DB       #00,#70,#38,#38,#38,#38,#70,#00       ;.p8888p.
  710.        DB       #00,#00,#00,#00,#00,#00,#00,#00       ;........
  711.        DB       #00,#00,#00,#00,#00,#00,#00,#00       ;........
  712.        DB       #00,#00,#00,#00,#00,#18,#18,#30       ;.......0
  713.        DB       #00,#00,#00,#3C,#3C,#00,#00,#00       ;...<<...
  714.        DB       #00,#00,#00,#00,#00,#18,#18,#00       ;........
  715.        DB       #00,#06,#0E,#1C,#38,#70,#60,#00       ;....8p`.
  716.        DB       #00,#3C,#72,#76,#7A,#72,#3C,#00       ;.<rvzr<.
  717.        DB       #00,#1C,#3C,#1C,#1C,#1C,#7E,#00       ;..<...~.
  718.        DB       #00,#7C,#0E,#0E,#3C,#70,#7E,#00       ;.|..<p~.
  719.        DB       #00,#7C,#0E,#3C,#0E,#0E,#7C,#00       ;.|.<..|.
  720.        DB       #00,#4E,#4E,#4E,#3E,#0E,#0E,#00       ;.NNN>...
  721.        DB       #00,#7C,#60,#7C,#0E,#0E,#7C,#00       ;.|`|..|.
  722.        DB       #00,#3C,#70,#7C,#72,#72,#3C,#00       ;.<p|rr<.
  723.        DB       #00,#7E,#06,#0E,#1C,#18,#18,#00       ;.~......
  724.        DB       #00,#3C,#72,#3C,#72,#72,#3C,#00       ;.<r<rr<.
  725.        DB       #00,#3C,#4E,#4E,#3E,#0E,#3C,#00       ;.<NN>.<.
  726.        DB       #00,#18,#18,#00,#00,#18,#18,#00       ;........
  727.        DB       #00,#18,#18,#00,#00,#18,#18,#30       ;.......0
  728.        DB       #00,#00,#00,#00,#00,#00,#00,#00       ;........
  729.        DB       #00,#00,#00,#00,#00,#00,#00,#00       ;........
  730.        DB       #00,#00,#00,#00,#00,#00,#00,#00       ;........
  731.        DB       #7C,#0E,#0E,#0E,#1C,#00,#18,#00       ;|.......
  732.        DB       #00,#00,#00,#00,#00,#00,#00,#00       ;........
  733.        DB       #00,#3C,#72,#72,#7E,#72,#72,#00       ;.<rr~rr.
  734.        DB       #00,#7C,#72,#7C,#72,#72,#7C,#00       ;.|r|rr|.
  735.        DB       #00,#3E,#70,#70,#70,#70,#3E,#00       ;.>pppp>.
  736.        DB       #00,#7C,#72,#72,#72,#72,#7C,#00       ;.|rrrr|.
  737.        DB       #00,#3E,#70,#7C,#70,#70,#3E,#00       ;.>p|pp>.
  738.        DB       #00,#3E,#70,#7C,#70,#70,#70,#00       ;.>p|ppp.
  739.        DB       #00,#3E,#70,#70,#76,#72,#3C,#00       ;.>ppvr<.
  740.        DB       #00,#72,#72,#7E,#72,#72,#72,#00       ;.rr~rrr.
  741.        DB       #00,#7F,#1C,#1C,#1C,#1C,#7F,#00       ;........
  742.        DB       #00,#0E,#0E,#0E,#4E,#4E,#3C,#00       ;....NN<.
  743.        DB       #00,#72,#72,#7C,#72,#72,#72,#00       ;.rr|rrr.
  744.        DB       #00,#70,#70,#70,#70,#70,#3E,#00       ;.ppppp>.
  745.        DB       #00,#3E,#75,#75,#75,#75,#75,#00       ;.>uuuuu.
  746.        DB       #00,#7C,#72,#72,#72,#72,#72,#00       ;.|rrrrr.
  747.        DB       #00,#3C,#72,#72,#72,#72,#3C,#00       ;.<rrrr<.
  748.        DB       #00,#7C,#72,#72,#7C,#70,#70,#00       ;.|rr|pp.
  749.        DB       #00,#3C,#72,#72,#72,#7A,#3C,#08       ;.<rrrz<.
  750.        DB       #00,#7C,#72,#72,#7C,#72,#72,#00       ;.|rr|rr.
  751.        DB       #00,#3C,#70,#3C,#0E,#0E,#7C,#00       ;.<p<..|.
  752.        DB       #00,#7F,#1C,#1C,#1C,#1C,#1C,#00       ;........
  753.        DB       #00,#72,#72,#72,#72,#72,#3C,#00       ;.rrrrr<.
  754.        DB       #00,#72,#72,#72,#72,#34,#18,#00       ;.rrrr4..
  755.        DB       #00,#71,#71,#75,#75,#75,#3E,#00       ;.qquuu>.
  756.        DB       #00,#72,#72,#3C,#72,#72,#72,#00       ;.rr<rrr.
  757.        DB       #00,#4E,#4E,#4E,#3E,#0E,#3C,#00       ;.NNN>.<.
  758.        DB       #00,#7E,#0E,#1C,#38,#70,#7E,#00       ;.~..8p~.
  759.        DB       #00,#1E,#1C,#1C,#1C,#1C,#1E,#00       ;........
  760.        DB       #00,#60,#70,#38,#1C,#0E,#06,#00       ;.`p8....
  761.        DB       #00,#78,#38,#38,#38,#38,#78,#00       ;.x8888x.
  762.        DB       #00,#08,#1C,#3E,#5D,#1C,#1C,#00       ;...>]...
  763.        DB       #00,#78,#38,#3C,#3A,#3A,#3C,#00       ;.x8<::<.
  764.        DB       #00,#76,#79,#79,#79,#79,#76,#00       ;.vyyyyv.
  765.        DB       #00,#3C,#72,#72,#7E,#72,#72,#00       ;.<rr~rr.
  766.        DB       #00,#7C,#70,#7C,#72,#72,#7C,#00       ;.|p|rr|.
  767.        DB       #00,#4E,#4E,#4E,#4E,#4E,#3E,#02       ;.NNNNN>.
  768.        DB       #00,#1E,#2E,#2E,#2E,#2E,#7E,#42       ;......~B
  769.        DB       #00,#3E,#70,#7C,#70,#70,#3E,#00       ;.>p|pp>.
  770.        DB       #00,#3E,#5D,#5D,#3E,#1C,#1C,#00       ;.>]]>...
  771.        DB       #00,#3E,#70,#70,#70,#70,#70,#00       ;.>ppppp.
  772.        DB       #00,#72,#72,#3C,#72,#72,#72,#00       ;.rr<rrr.
  773.        DB       #00,#72,#72,#76,#7A,#72,#72,#00       ;.rrvzrr.
  774.        DB       #08,#72,#72,#76,#7A,#72,#72,#00       ;.rrvzrr.
  775.        DB       #00,#72,#72,#7C,#72,#72,#72,#00       ;.rr|rrr.
  776.        DB       #00,#3E,#4E,#4E,#4E,#4E,#4E,#00       ;.>NNNNN.
  777.        DB       #00,#71,#7B,#75,#71,#71,#71,#00       ;.q{uqqq.
  778.        DB       #00,#72,#72,#7E,#72,#72,#72,#00       ;.rr~rrr.
  779.        DB       #00,#3C,#72,#72,#72,#72,#3C,#00       ;.<rrrr<.
  780.        DB       #00,#7E,#4E,#4E,#4E,#4E,#4E,#00       ;.~NNNNN.
  781.        DB       #00,#3E,#4E,#4E,#3E,#4E,#4E,#00       ;.>NN>NN.
  782.        DB       #00,#7C,#72,#72,#7C,#70,#70,#00       ;.|rr|pp.
  783.        DB       #00,#3E,#70,#70,#70,#70,#3E,#00       ;.>pppp>.
  784.        DB       #00,#7F,#1C,#1C,#1C,#1C,#1C,#00       ;........
  785.        DB       #00,#4E,#4E,#4E,#3E,#0E,#3C,#00       ;.NNN>.<.
  786.        DB       #00,#5D,#5D,#3E,#5D,#5D,#5D,#00       ;.]]>]]].
  787.        DB       #00,#7C,#72,#7C,#72,#72,#7C,#00       ;.|r|rr|.
  788.        DB       #00,#70,#70,#7C,#72,#72,#7C,#00       ;.pp|rr|.
  789.        DB       #00,#72,#72,#7C,#72,#72,#7C,#00       ;.rr|rr|.
  790.        DB       #00,#7C,#0E,#3C,#0E,#0E,#7C,#00       ;.|.<..|.
  791.        DB       #00,#75,#75,#75,#75,#75,#3E,#00       ;.uuuuu>.
  792.        DB       #00,#7C,#0E,#3E,#0E,#0E,#7C,#00       ;.|.>..|.
  793.        DB       #00,#75,#75,#75,#75,#75,#3F,#01       ;.uuuuu?.
  794.        DB       #00,#4E,#4E,#4E,#3E,#0E,#0E,#00       ;.NNN>...
  795.        DB       #00,#00,#3E,#70,#70,#3E,#00,#00       ;..>pp>..
  796.  
  797. copypage
  798. ;hl=from
  799. ;de=to
  800. ;bc=size
  801. ;hx=frompg
  802. ;lx=topg
  803.         push bc
  804.         ld a,hx ;frompg
  805.         and 7
  806.         ld ($+4),a
  807.         ld a,(tpgs)
  808.         SETPG16K
  809.         ld a,lx ;to
  810.         and 7
  811.         ld ($+4),a
  812.         ld a,(tpgs)
  813.         SETPG32KLOW
  814.         pop bc
  815.         res 7,h
  816.         res 6,d
  817.         ldir
  818.         jp setpgsmain40008000
  819.  
  820. setpgsmain40008000
  821. pgmain4000=$+1
  822.         ld a,0
  823.         ld a,(user_scr0_high) ;ok
  824.         SETPG16K
  825. pgcode8000=$+1
  826.         ld a,0
  827.         SETPG32KLOW
  828.         ret
  829.  
  830. setpgsscr40008000;_current
  831.         call getuser_scr_low_cur
  832.         SETPG16K
  833.         call getuser_scr_high_cur
  834.         SETPG32KLOW
  835.         ret
  836.  
  837.         if 1==0
  838. setpgsscr40008000
  839.         call getuser_scr_low
  840.         SETPG16K
  841.         call getuser_scr_high
  842.         SETPG32KLOW
  843.         ret
  844.         endif
  845.  
  846. getuser_scr_low
  847. getuser_scr_low_patch=$+1
  848. getuser_scr_low_patchN=0xff&(user_scr0_low^user_scr1_low)
  849.         ld a,(user_scr1_low) ;ok
  850.         ret
  851.  
  852. getuser_scr_high
  853. getuser_scr_high_patch=$+1
  854. getuser_scr_high_patchN=0xff&(user_scr0_high^user_scr1_high)
  855.         ld a,(user_scr1_high) ;ok
  856.         ret
  857.  
  858. getuser_scr_low_cur
  859. getuser_scr_low_cur_patch=$+1
  860. getuser_scr_low_cur_patchN=0xff&(user_scr0_low^user_scr1_low)
  861.         ld a,(user_scr0_low) ;ok
  862.         ret
  863.  
  864. getuser_scr_high_cur
  865. getuser_scr_high_cur_patch=$+1
  866. getuser_scr_high_cur_patchN=0xff&(user_scr0_high^user_scr1_high)
  867.         ld a,(user_scr0_high) ;ok
  868.         ret
  869.  
  870. changescrpg_current
  871.         ld hl,getuser_scr_low_patch
  872.         ld a,(hl)
  873.         xor getuser_scr_low_patchN
  874.         ld (hl),a
  875.         ld hl,getuser_scr_high_patch
  876.         ld a,(hl)
  877.         xor getuser_scr_high_patchN
  878.         ld (hl),a
  879.         ld hl,getuser_scr_low_cur_patch
  880.         ld a,(hl)
  881.         xor getuser_scr_low_cur_patchN
  882.         ld (hl),a
  883.         ld hl,getuser_scr_high_cur_patch
  884.         ld a,(hl)
  885.         xor getuser_scr_high_cur_patchN
  886.         ld (hl),a
  887.  
  888.         ld a,1
  889. curscrnum=$+1
  890.         xor 0
  891.         ld ($-1),a
  892.         ret
  893.        
  894.         if 1==0
  895. changescrpg
  896.         call changescrpg_current
  897.         ld (curscrnum_int),a
  898.         ret
  899.         endif
  900.  
  901. primgega
  902. ;b=hgt,c=wid (/2)
  903. ;de=gfx
  904. ;hl=scr
  905.         push bc
  906.         call setpgsscr40008000
  907.         call setpggfxc000
  908.         pop bc
  909. primgega0
  910.         push bc
  911.         ld hx,b
  912.         push hl
  913.         ld bc,40
  914. primgegacolumn0
  915.         ld a,(de)
  916.         inc de
  917.         ld (hl),a
  918.         add hl,bc
  919.         dec hx
  920.         jr nz,primgegacolumn0
  921.         pop hl
  922.         ld a,0x9f;0xa0
  923.         cp h
  924.         ld bc,0x4000
  925.         adc hl,bc
  926.         jp pe,primgegacolumn0q ;т яюыютшэх ёыєўрхт
  927. ;8000->ё000 (эрфю 6000) шыш a000->e001 (эрфю 4001)
  928.          inc a
  929.         xor h
  930.         ld h,a
  931. primgegacolumn0q
  932.         pop bc
  933.         dec c
  934.         jr nz,primgega0
  935.         call setpgcodec000
  936.         jp setpgsmain40008000
  937.  
  938. clsega
  939.         call setpgsscr40008000
  940.         ld hl,0x4000
  941.         ld de,0x4001
  942.         ld bc,0x7fff
  943.         ld (hl),l;0
  944.         ldir
  945.         jp setpgsmain40008000
  946.  
  947.         if 1==0;EGA
  948. DrawTile_A_X2Y2DE
  949.         sla     D
  950.         sla     E
  951. DrawTile_A_XYDE
  952.         LD      H,a
  953.         LD      L,0
  954.         srl h
  955.         rr l
  956.         LD      bc,tilegfx
  957.         ADD     HL,bc
  958.         ex de,hl
  959. ;hl=xy
  960.         ld a,h ;x
  961.          add a,4
  962.         ;ld l,l ;y
  963.         ld h,0
  964.         ld b,h
  965.         ld c,l
  966.         add hl,hl
  967.         add hl,hl
  968.         add hl,bc ;*5
  969.          add hl,hl
  970.          add hl,hl
  971.          add hl,hl ;*40
  972.          add hl,hl
  973.          add hl,hl
  974.          add hl,hl
  975.         add a,l
  976.         ld l,a
  977.         ld a,h
  978.         adc a,0x40
  979.         ld h,a
  980.         ld bc,0x1008 ;b=hgt,c=wid (/2)
  981. ;de=gfx
  982. ;hl=scr
  983.         jp primgega
  984.         endif
  985.  
  986.        if EGA
  987. ;DrawSprite_Akeep_DExy
  988.         ;LD     (cursprite),A
  989. DrawSprite_A_DExy
  990. ;A=sprnum
  991. ;DE=xy
  992.         push bc
  993.         push de
  994.         push iy
  995.         add a,a
  996.         ld l,a
  997.         ld h,0xc0
  998.         call setpggfxc000
  999.         ld a,(hl)
  1000.         ld ly,a
  1001.         inc l
  1002.         ld a,(hl)
  1003.         ld hy,a
  1004.         call setpgsscr40008000
  1005.         ld c,e ;y
  1006.         ld a,d ;x
  1007.         srl a
  1008.         add a,sprmaxwid-1
  1009.         ld e,a
  1010. ;e=x = -(sprmaxwid-1)..159 (ъюфшЁєхЄё  ъръ x+(sprmaxwid-1))
  1011. ;c=y = -(sprmaxhgt-1)..199 (ъюфшЁєхЄё  ъръ хёЄ№)
  1012.         call prspr
  1013.         pop iy
  1014.         call setpgcodec000
  1015.         call setpgsmain40008000
  1016.         pop de
  1017.         pop bc
  1018.         ret
  1019.        endif
  1020.  
  1021.         include "prspr.asm"
  1022.  
  1023.         if EGA
  1024. gettilebuf
  1025.        ds 128
  1026.         endif
  1027.        if EGA
  1028. GetTileToHL_DEXY
  1029. ;hl=addr
  1030. ;e=Y
  1031. ;d=X
  1032.         push bc
  1033.         push de
  1034.         sla d
  1035.         sla d
  1036.         sla d
  1037.         sla e
  1038.         sla e
  1039.         sla e        
  1040.         ld bc,0x1008 ;b=hgt,c=wid (/2)
  1041.         jr GetBuf2CxB_DExy_ToHL
  1042.        if 1==0
  1043.        ld b,12*8
  1044. gettilefake0
  1045.        ld a,r
  1046.        ld (hl),a
  1047.        inc hl
  1048.        djnz gettilefake0
  1049.        pop de
  1050.        pop bc
  1051.        ret
  1052.        endif
  1053. GetBuf24x16_DExy
  1054. ;e=y
  1055. ;d=x
  1056.         push bc
  1057.         push de
  1058.         ld bc,0x100c ;b=hgt,c=wid (/2)
  1059.         ld hl,rebuf24x16
  1060. GetBuf2CxB_DExy_ToHL
  1061.         push hl ;gfx
  1062.         ld a,d ;x
  1063.         srl a
  1064.         srl a
  1065.         srl a
  1066.          add a,4
  1067.         ld l,e ;y
  1068.         ld h,0
  1069.         ld d,h
  1070.         ld e,l
  1071.         add hl,hl
  1072.         add hl,hl
  1073.         add hl,de ;*5
  1074.          add hl,hl
  1075.          add hl,hl
  1076.          add hl,hl ;*40
  1077.         add a,l
  1078.         ld l,a
  1079.         ld a,h
  1080.         adc a,0x40
  1081.         ld h,a
  1082.         pop de ;gfx
  1083. ;de=gfx
  1084. ;hl=scr
  1085.         push bc
  1086.         call setpgsscr40008000
  1087.         pop bc
  1088. getimgega0
  1089.         push bc
  1090.         ld hx,b
  1091.         push hl
  1092.         ld bc,40
  1093. getimgegacolumn0
  1094.         ld a,(hl)
  1095.         ld (de),a
  1096.         inc de
  1097.         add hl,bc
  1098.         dec hx
  1099.         jr nz,getimgegacolumn0
  1100.         pop hl
  1101.         ld a,0x9f;0xa0
  1102.         cp h
  1103.         ld bc,0x4000
  1104.         adc hl,bc
  1105.         jp pe,getimgegacolumn0q ;т яюыютшэх ёыєўрхт
  1106. ;8000->ё000 (эрфю 6000) шыш a000->e001 (эрфю 4001)
  1107.          inc a
  1108.         xor h
  1109.         ld h,a
  1110. getimgegacolumn0q
  1111.         pop bc
  1112.         dec c
  1113.         jr nz,getimgega0
  1114.         call setpgsmain40008000
  1115.         pop de
  1116.         pop bc
  1117.         ret
  1118.  
  1119. ReBuf24x16_DExy
  1120. ;e=y
  1121. ;d=x (width 16 if multiple of 8)
  1122.         push bc
  1123.         push de
  1124.         ld bc,0x1008 ;b=hgt,c=wid (/2)
  1125.         ld a,d
  1126.         and 7
  1127.         jr z,$+4
  1128.          ld c,0x0c
  1129.         ld a,d ;x
  1130.         srl a
  1131.         srl a
  1132.         srl a
  1133.          add a,4
  1134.         ld l,e ;y
  1135.         ld h,0
  1136.         ld d,h
  1137.         ld e,l
  1138.         add hl,hl
  1139.         add hl,hl
  1140.         add hl,de ;*5
  1141.          add hl,hl
  1142.          add hl,hl
  1143.          add hl,hl ;*40
  1144.         add a,l
  1145.         ld l,a
  1146.         ld a,h
  1147.         adc a,0x40
  1148.         ld h,a
  1149.         ld de,rebuf24x16
  1150. ;de=gfx
  1151. ;hl=scr
  1152.         call primgega
  1153.         pop de
  1154.         pop bc
  1155.         ret
  1156.  
  1157. buf24x16
  1158.         ds 12*16
  1159. buf24x16_2
  1160.         ds 12*16
  1161. gettilebuf2
  1162.         ds 8*16
  1163. rebuf24x16
  1164.         ds 12*16
  1165.        endif
  1166.  
  1167.        if EGA
  1168. DrawSprite16x16_HL_DExy
  1169. ;hl=gfx
  1170. ;e=y
  1171. ;d=x (pixel perfect!)
  1172.         push bc
  1173.         push de
  1174.         ex de,hl
  1175.         ld b,0
  1176.         ld a,h ;x
  1177.         srl a
  1178.         ;ld l,l ;y
  1179.         ld c,l
  1180.         srl a ;x bit 0
  1181.         ;ld h,0x40/32/2
  1182.         ;jr nc,$+4 ;x bit 0
  1183.         ; ld h,0x80/32/2
  1184.          ld h,b;0
  1185.          rl h
  1186.          inc h ;0x40/32/2 шыш 0x80/32/2
  1187.         srl a ;x bit 1
  1188.          rl h
  1189.         add hl,hl
  1190.         add hl,hl
  1191.         add hl,bc
  1192.         add hl,hl
  1193.         add hl,hl
  1194.         add hl,hl ;y*40+scrbase
  1195.          if scrbase&0xff
  1196.          add a,scrbase&0xff
  1197.          endif
  1198. ;a=x/4
  1199.         add a,l
  1200.         ld l,a
  1201.         adc a,h
  1202.         sub l
  1203.         ld h,a ;hl=scr
  1204. ;de=gfx
  1205. ;hl=scr
  1206.         ld bc,0x1008 ;b=hgt,c=wid (/2)
  1207.         call primgega
  1208.         pop de
  1209.         pop bc
  1210.         ret
  1211.        endif
  1212.  
  1213.        if EGA
  1214. ClearTile_DExy
  1215.         ;ret
  1216. ;E=y
  1217. ;D=x (width 24 if not multiple of 8)
  1218.         push bc
  1219.         push de
  1220.         ld bc,0x1008 ;b=hgt,c=wid (/2)
  1221.         ld a,d ;x
  1222.         and 7
  1223.         jr z,$+4
  1224.          ld c,0x0c ;wid (/2)
  1225.         ld a,d
  1226.         srl a
  1227.         srl a
  1228.         srl a
  1229.          add a,4
  1230.         ld l,e ;y
  1231.         ld h,0
  1232.         ld d,h
  1233.         ld e,l
  1234.         add hl,hl
  1235.         add hl,hl
  1236.         add hl,de ;*5
  1237.          add hl,hl
  1238.          add hl,hl
  1239.          add hl,hl ;*40
  1240.         add a,l
  1241.         ld l,a
  1242.         ld a,h
  1243.         adc a,0x40
  1244.         ld h,a
  1245.         ld de,zeros24x16
  1246. ;de=gfx
  1247. ;hl=scr
  1248.         call primgega
  1249.         pop de
  1250.         pop bc
  1251.         ret
  1252. zeros24x16
  1253.         ds 12*16
  1254.        endif
  1255.  
  1256. readbmphead_pal
  1257.         ld de,bgpush_bmpbuf
  1258.         ld hl,14+2;54+(4*16)
  1259. ;de=buf
  1260. ;hl=size
  1261.         call readstream_file
  1262.         ld de,bgpush_bmpbuf
  1263.         ld hl,(bgpush_bmpbuf+14)
  1264.         dec hl
  1265.         dec hl
  1266. ;de=buf
  1267. ;hl=size
  1268.         call readstream_file
  1269.         ld de,bgpush_bmpbuf
  1270.         ld hl,+(4*16)
  1271. ;de=buf
  1272. ;hl=size
  1273.         call readstream_file
  1274.  
  1275.         ld hl,bgpush_bmpbuf;+54
  1276.         ld ix,pal
  1277.         ld b,16
  1278. recodepal0
  1279.         ld e,(hl)
  1280.         inc hl
  1281.         ld d,(hl)
  1282.         inc hl
  1283.         push hl
  1284.         ld l,(hl) ;e=B, d=G, l=R
  1285.         call readfile_rgbtopal
  1286.         pop hl
  1287.         inc hl
  1288.         inc hl
  1289.         djnz recodepal0
  1290.         ret
  1291.  
  1292.         macro RECOLOR
  1293.         ld a,(de)
  1294.         inc de
  1295.         ld ($+4),a
  1296.         ld a,(trecolor)
  1297.         ld (hl),a
  1298.         endm
  1299. readbmpscr
  1300.         ld hl,0x4000+(199*40)
  1301.         ld b,200
  1302. readbmpscr0
  1303.         push bc
  1304.         push hl
  1305.         ld de,bgpush_bmpbuf
  1306.         ld hl,320/2
  1307. ;de=buf
  1308. ;hl=size
  1309.         push de
  1310.         call readstream_file
  1311.         pop de
  1312.         pop hl
  1313.         push hl
  1314.         ld b,40
  1315. readbmpscr00        
  1316.         RECOLOR
  1317.         ld a,h
  1318.         add a,0x40
  1319.         ld h,a
  1320.         RECOLOR
  1321.         ld a,h
  1322.         add a,0x20-0x40
  1323.         ld h,a
  1324.         RECOLOR
  1325.         ld a,h
  1326.         add a,0x40
  1327.         ld h,a
  1328.         RECOLOR
  1329.         ld a,h
  1330.         sub 0x60
  1331.         ld h,a
  1332.         inc hl
  1333.         djnz readbmpscr00
  1334.         pop hl
  1335.         ld bc,-40
  1336.         add hl,bc
  1337.         pop bc
  1338.         djnz readbmpscr0
  1339.         ret
  1340.  
  1341. readfile_rgbtopal
  1342. ;e=B, d=G, l=R
  1343.         call calcRGBtopal_pp
  1344.         ld (ix+1),a
  1345.         call calcRGBtopal_pp
  1346.         ld (ix),a
  1347.         inc ix
  1348.         inc ix
  1349.         ret
  1350.  
  1351. calcRGBtopal_pp
  1352. ;e=B, d=G, l=R
  1353. ;DDp palette: %grbG11RB(low),%grbG11RB(high), ??oN????N
  1354.         xor a
  1355.         rl e  ;B
  1356.         rra
  1357.         rl l  ;R
  1358.         rra
  1359.         rrca
  1360.         rrca
  1361.         rl d  ;G
  1362.         rra
  1363.         rl e  ;b
  1364.         rra
  1365.         rl l  ;r
  1366.         rra
  1367.         rl d  ;g
  1368.         rra
  1369.         cpl
  1370.         ret
  1371.  
  1372. ;------------------
  1373. ; Keyboard scanning
  1374. ;------------------
  1375. ; from keyboard and s-inkey$
  1376. ; returns 1 or 2 keys in DE, most significant shift first if any
  1377. ; key values 0-39 else 255
  1378.  
  1379. ;; KEY-SCAN
  1380. L028E   LD      L,$2F           ; initial key value
  1381.                                 ; valid values are obtained by subtracting
  1382.                                 ; eight five times.
  1383.         LD      DE,$FFFF        ; a buffer for 2 keys.
  1384.  
  1385.         LD      BC,$FEFE        ; the commencing port address
  1386.                                 ; B holds 11111110 initially and is also
  1387.                                 ; used to count the 8 half-rows
  1388. ;; KEY-LINE
  1389. L0296   IN      A,(C)           ; read the port to A - bits will be reset
  1390.                                 ; if a key is pressed else set.
  1391.         CPL                     ; complement - pressed key-bits are now set
  1392.         AND     $1F             ; apply 00011111 mask to pick up the
  1393.                                 ; relevant set bits.
  1394.  
  1395.         JR      Z,L02AB         ; forward to KEY-DONE if zero and therefore
  1396.                                 ; no keys pressed in row at all.
  1397.  
  1398.         LD      H,A             ; transfer row bits to H
  1399.         LD      A,L             ; load the initial key value to A
  1400.  
  1401. ;; KEY-3KEYS
  1402. L029F   INC     D               ; now test the key buffer
  1403.         RET     NZ              ; if we have collected 2 keys already
  1404.                                 ; then too many so quit.
  1405.  
  1406. ;; KEY-BITS
  1407. L02A1   SUB     $08             ; subtract 8 from the key value
  1408.                                 ; cycling through key values (top = $27)
  1409.                                 ; e.g. 2F>   27>1F>17>0F>07
  1410.                                 ;      2E>   26>1E>16>0E>06
  1411.         SRL     H               ; shift key bits right into carry.
  1412.         JR      NC,L02A1        ; back to KEY-BITS if not pressed
  1413.                                 ; but if pressed we have a value (0-39d)
  1414.  
  1415.         LD      D,E             ; transfer a possible previous key to D
  1416.         LD      E,A             ; transfer the new key to E
  1417.         JR      NZ,L029F        ; back to KEY-3KEYS if there were more
  1418.                                 ; set bits - H was not yet zero.
  1419.  
  1420. ;; KEY-DONE
  1421. L02AB   DEC     L               ; cycles 2F>2E>2D>2C>2B>2A>29>28 for
  1422.                                 ; each half-row.
  1423.         RLC     B               ; form next port address e.g. FEFE > FDFE
  1424.         JR      C,L0296         ; back to KEY-LINE if still more rows to do.
  1425.  
  1426.         LD      A,D             ; now test if D is still FF ?
  1427.         INC     A               ; if it is zero we have at most 1 key
  1428.                                 ; range now $01-$28  (1-40d)
  1429.         RET     Z               ; return if one key or no key.
  1430.  
  1431.         CP      $28             ; is it capsshift (was $27) ?
  1432.         RET     Z               ; return if so.
  1433.  
  1434.         CP      $19             ; is it symbol shift (was $18) ?
  1435.         RET     Z               ; return also
  1436.  
  1437.         LD      A,E             ; now test E
  1438.         LD      E,D             ; but first switch
  1439.         LD      D,A             ; the two keys.
  1440.         CP      $18             ; is it symbol shift ?
  1441.         RET                     ; return (with zero set if it was).
  1442.                                 ; but with symbol shift now in D
  1443.  
  1444. loadfile_in_hl
  1445. ;de=шь  Їрщыр
  1446. ;hl=ъєфр уЁєчшь (0xc000)
  1447.         ;SETPG32KHIGH ;тъы■ўшыш ёЄЁрэшЎє A т 0xc000
  1448.         push hl ;ъєфр уЁєчшь
  1449.         OS_OPENHANDLE
  1450.         pop de ;ъєфр уЁєчшь
  1451.         push bc ;b=handle
  1452.         ld hl,0x4000 ;ёЄюы№ъю уЁєчшь (хёыш ёЄюы№ъю хёЄ№ т Їрщых)
  1453.         OS_READHANDLE
  1454.         pop bc ;b=handle
  1455.         OS_CLOSEHANDLE
  1456.         ret;jp setpgmainc000 ;тъы■ўшыш ёЄЁрэшЎє яЁюуЁрьь√ т c000, ъръ с√ыю
  1457.  
  1458.  
  1459.         align 256
  1460. trecolor
  1461. ;%00003210 => %.3...210
  1462.         dup 256
  1463. _3=$&8
  1464. _210=$&7
  1465. _3L=($>>4)&8
  1466. _210L=($>>4)&7
  1467.         db (_3L*0x08) + (_210L*0x01) + (_3*0x10) + (_210*0x08)
  1468.         edup
  1469.  
  1470. bgpush_bmpbuf
  1471.         ds 320
  1472.  
  1473. res_path
  1474.         db "midnight",0
  1475. filename0
  1476.         db "0midnigh.bmx",0
  1477. filename1
  1478.         db "1midnigh.bmx",0
  1479.  
  1480. ;bmpfilename
  1481.         ;db "solkey.bmp",0
  1482. muzfilename
  1483.         db "music.o",0
  1484. levelfilenames
  1485.         db 1
  1486.         dw 0xc000
  1487.         db "level2.o",0
  1488.         db 1
  1489.         dw 0xe000
  1490.         db "level1.o",0
  1491.         db 3
  1492.         dw 0xc000
  1493.         db "level3.o",0
  1494.         db 3
  1495.         dw 0xe000
  1496.         db "level4.o",0
  1497.         db 4
  1498.         dw 0xc000
  1499.         db "level5.o",0
  1500.         db 4
  1501.         dw 0xe000
  1502.         db "level6.o",0
  1503.         db 6
  1504.         dw 0xc000
  1505.         db "level7.o",0
  1506.         db 6
  1507.         dw 0xe000
  1508.         db "level8.o",0
  1509.         db 7
  1510.         dw 0xc000
  1511.         db "level9.o",0
  1512.         db -1
  1513.  
  1514.         include "../../_sdk/file.asm"
  1515.  
  1516.         ds 0x3d00-$
  1517.         incbin "font88"
  1518.         ds 0x4000-$
  1519.         incbin "midnight.scr"
  1520.         ;incbin "slabage/sprdata.bin"
  1521. ;tilegfx=$+0x8000
  1522.         ;incbin "slabage/tiles.bin"
  1523. ;panelgfx=$+0x8000
  1524.         ;incbin "slabage/panel.bin"
  1525.  
  1526.         ds MENUSTART-$
  1527.         include "Mirror.a80"
  1528.  
  1529.         ds CODE-$;0x5b00-$
  1530.         include "Game.a80"
  1531.  
  1532.         org LEVELDATA
  1533.         ;ds LEVELDATA-$
  1534. level1
  1535.         include "Level_01.a80"
  1536. level1_sz=$-level1
  1537.         include "Page1_FF00.a80"
  1538.  
  1539.         ds MIRPAGE-$
  1540. ;****************************************************************************
  1541. ;** MIRROR PAGE                                                            **
  1542. ;****************************************************************************
  1543.  
  1544.                 IF MUSICALSO=0
  1545.  
  1546.                 ;ORG MIRPAGE
  1547.  
  1548.                 DB #00,#80,#40,#C0,#20,#A0,#60,#E0,#10,#90,#50,#D0,#30,#B0,#70,#F0
  1549.                 DB #08,#88,#48,#C8,#28,#A8,#68,#E8,#18,#98,#58,#D8,#38,#B8,#78,#F8
  1550.                 DB #04,#84,#44,#C4,#24,#A4,#64,#E4,#14,#94,#54,#D4,#34,#B4,#74,#F4
  1551.                 DB #0C,#8C,#4C,#CC,#2C,#AC,#6C,#EC,#1C,#9C,#5C,#DC,#3C,#BC,#7C,#FC
  1552.                 DB #02,#82,#42,#C2,#22,#A2,#62,#E2,#12,#92,#52,#D2,#32,#B2,#72,#F2
  1553.                 DB #0A,#8A,#4A,#CA,#2A,#AA,#6A,#EA,#1A,#9A,#5A,#DA,#3A,#BA,#7A,#FA
  1554.                 DB #06,#86,#46,#C6,#26,#A6,#66,#E6,#16,#96,#56,#D6,#36,#B6,#76,#F6
  1555.                 DB #0E,#8E,#4E,#CE,#2E,#AE,#6E,#EE,#1E,#9E,#5E,#DE,#3E,#BE,#7E,#FE
  1556.                 DB #01,#81,#41,#C1,#21,#A1,#61,#E1,#11,#91,#51,#D1,#31,#B1,#71,#F1
  1557.                 DB #09,#89,#49,#C9,#29,#A9,#69,#E9,#19,#99,#59,#D9,#39,#B9,#79,#F9
  1558.                 DB #05,#85,#45,#C5,#25,#A5,#65,#E5,#15,#95,#55,#D5,#35,#B5,#75,#F5
  1559.                 DB #0D,#8D,#4D,#CD,#2D,#AD,#6D,#ED,#1D,#9D,#5D,#DD,#3D,#BD,#7D,#FD
  1560.                 DB #03,#83,#43,#C3,#23,#A3,#63,#E3,#13,#93,#53,#D3,#33,#B3,#73,#F3
  1561.                 DB #0B,#8B,#4B,#CB,#2B,#AB,#6B,#EB,#1B,#9B,#5B,#DB,#3B,#BB,#7B,#FB
  1562.                 DB #07,#87,#47,#C7,#27,#A7,#67,#E7,#17,#97,#57,#D7,#37,#B7,#77,#F7
  1563.                 DB #0F,#8F,#4F,#CF,#2F,#AF,#6F,#EF,#1F,#9F,#5F,#DF,#3F,#BF,#7F,#FF
  1564.                
  1565.                 ENDIF
  1566.  
  1567. ;***************************************
  1568. ;** PAGE 0 DATA                       **
  1569. ;***************************************
  1570.  
  1571.                 ;ORG PAGE0
  1572.                 ds PAGE0-$
  1573.  
  1574. YBOUNCE         DB #FF,#00,#01,#00
  1575.  
  1576. INFLIVES        DB INFLIF
  1577. INFAMMO         DB INFAMM
  1578. WEPSELECT       DB WEPSEL
  1579. SPACEBARCHEAT   DB SPACETOKILL
  1580.  
  1581. SCORETEXT       DB PRAT,21,20,PRSIZE
  1582.                 INC D:NOP
  1583.                 DB PRINK,$45,PRINK2,$47
  1584. SCORE           DB "00000000",PRSIZE,0,PREOF
  1585.  
  1586. PD              EQU 8
  1587. XADDS           DB 0+00,0+PD,0+PD,0+PD,0+00,0-PD,0-PD,0-PD
  1588. YADDS           DB 0-PD,0-PD,0+00,0+PD,0+PD,0+PD,0+00,0-PD
  1589.  
  1590. V               EQU 4
  1591. W               EQU V*2
  1592. XADS            DB 00,+V,+W,+W,+W,+W,+W,+V,00,-V,-W,-W,-W,-W,-W,-V
  1593. YADS            DB -W,-W,-W,-V,00,+V,+W,+W,+W,+W,+W,+V,00,-V,-W,-W
  1594.  
  1595. JADDS           DB #00,#08,#00,#00,#00,#00,#00,#00
  1596.                 DB #F8,#00,#08,#00,#08,#00,#08,#00
  1597.  
  1598. DAMAGETAB       DB 01,01,03,02,00,06,03,03
  1599.                 DB 01,02,06,04,00,06,03,03
  1600.                 DB 02,01
  1601.  
  1602. NORET           EQU 0
  1603. LOSELIFE        EQU 1
  1604. NXTLEV          EQU 2
  1605. ;BREAK           EQU 3
  1606.  
  1607. RETMODE         DB NORET
  1608.  
  1609. RETMODES        DW GAMEOVER
  1610.                 DW NEXTLEVEL
  1611. ;                DW TESTLOADLEV1
  1612.  
  1613. BADDAT          DS NOBAD*BADLEN,0
  1614.  
  1615. FLAMEDIR        DS NOFLAMES,2
  1616. FLAMEXYS        DS NOFLAMES*2,0
  1617.  
  1618. PAGEEND
  1619.  
  1620. end
  1621.         ;page 0
  1622.         savebin "midnight.com",begin,end-begin
  1623.         savebin "midnight/level1.o",level1,level1_sz
  1624.  
  1625.         slot 3
  1626.         page 1
  1627.         org #C000
  1628. level2
  1629.         include "Level_02.a80"
  1630. level2_sz=$-level2
  1631.         ;org #E000
  1632.         ;include "Level_01.a80"
  1633.  
  1634.         page 3
  1635.         org #C000
  1636. level3
  1637.         include "Level_03.a80"
  1638. level3_sz=$-level3
  1639.         org #E000
  1640. level4
  1641.         include "Level_04.a80"
  1642. level4_sz=$-level4
  1643.  
  1644.         page 4
  1645.         org #C000
  1646. level5
  1647.         include "Level_05.a80"
  1648. level5_sz=$-level5
  1649.         org #E000
  1650. level6
  1651.         include "Level_06.a80"
  1652. level6_sz=$-level6
  1653.  
  1654.         page 6
  1655.         org #C000
  1656. level7
  1657.         include "Level_07.a80"
  1658. level7_sz=$-level7
  1659.         org #E000
  1660. level8
  1661.         include "Level_08.a80"
  1662. level8_sz=$-level8
  1663.  
  1664.         page 7
  1665.         org #C000
  1666. level9
  1667.         include "Level_09.a80"
  1668. level9_sz=$-level9
  1669.         org #E000
  1670. music
  1671.         include "Music.a80"
  1672. music_sz=$-music
  1673.  
  1674.         display "End=",end
  1675.         ;display "Free after end=",/d,#c000-end
  1676.         display "Size ",/d,end-begin," bytes"
  1677.         page 1
  1678.         savebin "midnight/level2.o",level2,level2_sz
  1679.         page 3
  1680.         savebin "midnight/level3.o",level3,level3_sz
  1681.         savebin "midnight/level4.o",level4,level4_sz
  1682.         page 4
  1683.         savebin "midnight/level5.o",level5,level5_sz
  1684.         savebin "midnight/level6.o",level6,level6_sz
  1685.         page 6
  1686.         savebin "midnight/level7.o",level7,level7_sz
  1687.         savebin "midnight/level8.o",level8,level8_sz
  1688.         page 7
  1689.         savebin "midnight/level9.o",level9,level9_sz
  1690.         savebin "midnight/music.o",music,music_sz
  1691.         LABELSLIST "../../../us/user.l"
  1692.