?login_element?

Subversion Repositories NedoOS

Rev

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