?login_element?

Subversion Repositories NedoOS

Rev

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