?login_element?

Subversion Repositories NedoOS

Rev

Rev 791 | 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. INTSTACK=0x3f00
  15. tempsp=0x3f06 ;6 bytes for prspr
  16. ;UVSCROLL_SCRWID=320 ;8*(TILEMAPWID-2)
  17. ;UVSCROLL_SCRHGT=192 ;(фхышЄё  эр 16!!!) ;8*(TILEMAPHGT-2) ;ўЄюс√ т√тюфшЄ№ тёхуфр 12 ьхЄрЄрщыют (3 сыюър яю 8) яю т√ёюЄх
  18.  
  19. screenYtable=0x8b00
  20.  
  21. EGA=1
  22.  
  23.         org PROGSTART
  24. begin
  25.         jp begin2 ;/prsprqwid (sprites in file are made so that they return here)
  26. begin2
  27.         ld sp,STACK
  28.         OS_HIDEFROMPARENT
  29.  
  30.         ld e,0 ;EGA
  31.         OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode)
  32.  
  33.         ;ld e,1
  34.         ;OS_SETSCREEN
  35.         ld e,0 ;color byte
  36.         OS_CLS
  37.         ;ld e,0
  38.         ;OS_SETSCREEN
  39.         ;ld e,0 ;color byte
  40.         ;OS_CLS
  41.  
  42.         OS_GETMAINPAGES
  43. ;dehl=pages in 0000,4000,8000,c000
  44.         ld a,e
  45.         ld (pggfx),a
  46.         ld a,h
  47.         ld (pgcode8000),a
  48.         ld a,l
  49.         ld (pgcodec000),a
  50.         ;jr $
  51.  
  52.         OS_NEWPAGE
  53.         ld a,e
  54.         ld (pgmain4000),a
  55.  
  56.         ld de,res_path
  57.         OS_CHDIR
  58.  
  59.         call setpgsscr40008000
  60.  
  61.         ld de,emptypal
  62.         OS_SETPAL
  63.         ld de,bmpfilename
  64.         call openstream_file
  65.         call readbmphead_pal
  66.         call readbmpscr
  67.         call closestream_file
  68.         ld de,pal
  69.         OS_SETPAL
  70.        
  71.         call setpgsmain40008000
  72.  
  73.         ;ld b,50
  74.         ;halt
  75.         ;djnz $-1
  76.         YIELDGETKEYLOOP
  77.  
  78.         ld e,3+8+0x80 ;6912+noturbo+keep
  79.         OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode)
  80.         ld e,0 ;color byte
  81.         OS_CLS
  82.         ld de,standardpal
  83.         OS_SETPAL
  84.         YIELD
  85.  
  86.         if 1==0
  87.         ld a,(user_scr0_high) ;ok
  88.         SETPG32KLOW
  89.         ld hl,0x6000
  90.         ld de,0x6000+0x4000
  91.         ld bc,0x2000
  92.         ldir
  93.         ;ld a,(user_scr0_high)
  94.         SETPG16K
  95.         ld a,(pgcode8000)
  96.         SETPG32KLOW
  97.         endif
  98.         ld a,(user_scr0_high) ;ok
  99.         SETPG16K
  100.        
  101.         call swapimer
  102.  
  103.         if EGA
  104.         ld hl,prsprqwid
  105.         ld (0x0101),hl ;sprites in file are made so that they return in 0x0100
  106.         endif
  107.        
  108.         if 1==0
  109.         ld e,0+0x80 ;EGA+keep
  110.         OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode)
  111.        
  112.         call setpggfxc000
  113.  
  114.         ;call setpgsscr40008000
  115.  
  116.         call clsega
  117.         ld bc,0x1880 ;b=hgt,c=wid (/2)
  118.         ld de,panelgfx ;de=gfx
  119.         ld hl,0x4000+((192-24)*40)+4 ;hl=scr
  120.         call primgega
  121.  
  122.         xor a
  123.         ld d,a
  124.         ld e,a
  125. prtiles0
  126.         push af
  127.         push de
  128.         call DrawTile_A_X2Y2DE
  129.         ;call DrawSprite_A_DExy
  130.         pop de
  131.         ld a,d
  132.         add a,1;16
  133.         ld d,a ;x
  134.         cp 16
  135.         jr nz,prtilesny
  136.          ld d,0
  137.          ld a,e
  138.          add a,1;16
  139.          ld e,a ;y
  140. prtilesny
  141.         pop af
  142.         inc a
  143.         cp 192
  144.         jr nz,prtiles0
  145.  
  146.         xor a
  147.         ld d,a
  148.         ld e,a
  149. prsprites0
  150.         push af
  151.         push de
  152.         ;call DrawTile_A_X2Y2DE
  153.         call DrawSprite_A_DExy
  154.         pop de
  155.         ld a,d
  156.         add a,16
  157.         ld d,a ;x
  158.         jr nz,prspritesny
  159.          ld d,0
  160.          ld a,e
  161.          add a,16
  162.          ld e,a ;y
  163. prspritesny
  164.         pop af
  165.         inc a
  166.         cp 13
  167.         jr nz,prsprites0
  168.  
  169.         ;call setpgsmain40008000
  170.         call setpgcodec000
  171.        
  172.         endif
  173.         ;jr $
  174.         jp GO
  175.  
  176.         ;include "pal.ast" ;slabpal
  177. standardpal
  178.         STANDARDPAL
  179. pal
  180.         ds 32,0xff
  181. emptypal
  182.         ds 32,0xff
  183.  
  184. jphl
  185.         jp (hl)
  186.  
  187. CheckBreak
  188.         ld a,0xfe
  189.         in a,(0xfe)
  190.         rra
  191.         ret c
  192.         ld a,0x7f
  193.         in a,(0xfe)
  194.         rra
  195.         ret
  196. CheckQuit
  197.         call CheckBreak
  198.         ret c
  199. quiter
  200.         if 1==0
  201.         halt
  202. pgmuznum=$+1
  203.         ld a,0
  204.         SETPG32KHIGH
  205.           ld hl,muz
  206.           OS_SETMUSIC
  207.         halt
  208.         endif
  209.         call swapimer
  210.         QUIT
  211.  
  212. L_5B00 ;= #5b00
  213.         db 0
  214.  
  215. setpggfxc000
  216. pggfx=$+1
  217.         ld a,0
  218.         SETPG32KHIGH
  219.         ret
  220. setpgcodec000
  221. pgcodec000=$+1
  222.         ld a,0
  223.         SETPG32KHIGH
  224.         ret
  225.  
  226. swapimer
  227.         di
  228.         ld de,0x0038
  229.         ld hl,oldimer
  230.         ld bc,3
  231. swapimer0
  232.         ld a,(de)
  233.         ldi ;[oldimer] -> [0x0038]
  234.         dec hl
  235.         ld (hl),a ;[0x0038] -> [oldimer]
  236.         inc hl
  237.         jp pe,swapimer0
  238.         ei
  239.         ret
  240. oldimer
  241.         jp on_int ;чрьхэшЄё  эр ъюф шч 0x0038
  242.         jp 0x0038+3    
  243.  
  244. reter
  245.         ret
  246.  
  247. tstarttime       DB       #00,#00,#00
  248. curgametimer       DB       #00,#00,#00
  249. stoptimer       DB       #00
  250. curtimerlow       DB       #00
  251. ;
  252. on_int
  253. ;restore stack with de
  254.         EX DE,HL
  255.         EX (SP),HL ;de="hl", stack contains "de"
  256.         LD (on_int_jp),HL
  257.         LD (on_int_sp),SP
  258.         LD SP,INTSTACK
  259.         push af
  260.         push bc
  261.         push de ;"hl"
  262.         exx
  263.         ex af,af' ;'
  264.         push af
  265.         push bc
  266.         push de
  267.         push hl
  268.         push ix
  269.         push iy
  270.         ;DI
  271. ;curscrnum_int=$+1
  272. ;        ld e,0
  273. ;        OS_SETSCREEN
  274.         call oldimer ;ei
  275.          GET_KEY
  276.          jr nz,Imer_nofocus
  277.          ;ld a,(user_scr0_high) ;ok
  278.          ;SETPG16K ;TODO redraw screen when retake focus???
  279. Imer_nofocus
  280.         ;LD     A,(stoptimer)
  281.         ;OR     A
  282.         ;CALL   Z,DecTimer
  283.         pop iy
  284.         pop ix
  285.         pop hl
  286.         pop de
  287.         pop bc
  288.         pop af
  289.         ex af,af' ;'
  290.         exx
  291.         pop hl
  292.         pop bc
  293.         pop af        
  294. on_int_sp=$+1
  295.         ld sp,0
  296.         pop de
  297.         ei
  298. on_int_jp=$+1
  299.         jp 0
  300. ;
  301. ;
  302. RIGHTPIX=0x38;0xb8;%10111000
  303. LEFTPIX=0x07;0x47;%01000111
  304.         macro FONTBYTE
  305.         ld a,(de)
  306.         ld c,a
  307.         xor a
  308.         rl c
  309.         jr nc,$+4
  310.          or LEFTPIX
  311.         rl c
  312.         jr nc,$+4
  313.          or RIGHTPIX
  314.         ld (hl),a
  315.         ld a,h
  316.         add a,0x40
  317.         ld h,a
  318.         xor a
  319.         rl c
  320.         jr nc,$+4
  321.          or LEFTPIX
  322.         rl c
  323.         jr nc,$+4
  324.          or RIGHTPIX
  325.         ld (hl),a
  326.         ld a,h
  327.         add a,0x20-0x40
  328.         ld h,a
  329.         xor a
  330.         rl c
  331.         jr nc,$+4
  332.          or LEFTPIX
  333.         rl c
  334.         jr nc,$+4
  335.          or RIGHTPIX
  336.         ld (hl),a
  337.         ld a,h
  338.         add a,0x40
  339.         ld h,a
  340.         xor a
  341.         rl c
  342.         jr nc,$+4
  343.          or LEFTPIX
  344.         rl c
  345.         jr nc,$+4
  346.          or RIGHTPIX
  347.         ld (hl),a
  348.         endm
  349.  
  350. PrintCharA_EGA
  351.         push bc
  352.         push de
  353.         push hl
  354.        push af
  355.         call setpgsscr40008000
  356.         LD      DE,(curprintyx)
  357.         sla e
  358.         sla e
  359.         sla e
  360.         ld a,d ;x
  361.          add a,4
  362.         ld l,e ;y
  363.         ld h,0
  364.         ld d,h
  365.         ld e,l
  366.         add hl,hl
  367.         add hl,hl
  368.         add hl,de ;*5
  369.          add hl,hl
  370.          add hl,hl
  371.          add hl,hl ;*40
  372.         add a,l
  373.         ld l,a
  374.         ld a,h
  375.         adc a,0x40
  376.         ld h,a
  377.        pop af
  378.         PUSH    HL
  379.         LD      DE,font-256;L_BE02
  380.         LD      H,#00
  381.         LD      L,A
  382.         ADD     HL,HL
  383.         ADD     HL,HL
  384.         ADD     HL,HL
  385.         ADD     HL,DE
  386.         EX      DE,HL
  387.         POP     HL
  388.         LD      hx,#08
  389.  
  390. PrintCharA_EGA0
  391.         FONTBYTE
  392.         ld bc,40-0x6000
  393.         add hl,bc
  394.         INC     DE
  395.         dec hx
  396.         jr nz,PrintCharA_EGA0
  397.        
  398.         LD      DE,(curprintyx)
  399.         INC     D
  400.         LD      A,D
  401.         CP      #20
  402.         JR      NZ,PrintCharA_EGAq
  403.         INC     E
  404.         LD      D,#00
  405.         LD      A,E
  406.         CP      #18
  407.         JR      NZ,PrintCharA_EGAq
  408.         LD      E,#00
  409. PrintCharA_EGAq
  410.         LD      (curprintyx),DE
  411.         call setpgsmain40008000
  412.         pop hl
  413.         pop de
  414.         pop bc
  415.         ret
  416.        
  417. PrintCharA
  418.         PUSH    DE
  419.         PUSH    HL
  420.         PUSH    BC
  421.         PUSH    AF
  422.         LD      DE,(curprintyx)
  423.         LD      A,E
  424.         AND     #18
  425.         OR      #40
  426.         LD      H,A
  427.         LD      A,E
  428.         AND     #07
  429.         OR      A
  430.         RRA
  431.         RRA
  432.         RRA
  433.         RRA
  434.         ADD     A,D
  435.         LD      L,A
  436.         POP     AF
  437.         PUSH    HL
  438.         LD      DE,font-256;L_BE02
  439.         LD      H,#00
  440.         LD      L,A
  441.         ADD     HL,HL
  442.         ADD     HL,HL
  443.         ADD     HL,HL
  444.         ADD     HL,DE
  445.         EX      DE,HL
  446.         POP     HL
  447.         LD      B,#08
  448. L_C6EB  LD      A,(DE)
  449.         LD      (HL),A
  450.         INC     H
  451.         INC     DE
  452.         DJNZ    L_C6EB
  453.         LD      DE,(curprintyx)
  454.         INC     D
  455.         LD      A,D
  456.         CP      #20
  457.         JR      NZ,L_C705
  458.         INC     E
  459.         LD      D,#00
  460.         LD      A,E
  461.         CP      #18
  462.         JR      NZ,L_C705
  463.         LD      E,#00
  464. L_C705  LD      (curprintyx),DE
  465.         POP     BC
  466.         POP     HL
  467.         POP     DE
  468.         RET
  469. ;
  470. curprintyx       DW       #0000
  471. ;
  472. PrintStringHL
  473.         LD      A,(HL)
  474.         OR      A
  475.         RET     Z
  476.         CP      #16
  477.         JR      Z,L_C71C
  478.         CALL    PrintCharA
  479.         INC     HL
  480.         JR      PrintStringHL
  481. L_C71C  INC     HL
  482.         LD      E,(HL)
  483.         INC     HL
  484.         LD      D,(HL)
  485.         INC     HL
  486.         LD      (curprintyx),DE
  487.         JR      PrintStringHL
  488. ;
  489. PrintStringHL_EGA
  490.         LD      A,(HL)
  491.         OR      A
  492.         RET     Z
  493.         CP      #16
  494.         JR      Z,L_C71C_EGA
  495.         CALL    PrintCharA_EGA
  496.         INC     HL
  497.         JR      PrintStringHL_EGA
  498. L_C71C_EGA
  499.         INC     HL
  500.         LD      E,(HL)
  501.         INC     HL
  502.         LD      D,(HL)
  503.         INC     HL
  504.         LD      (curprintyx),DE
  505.         JR      PrintStringHL_EGA
  506.  
  507. font
  508.        DB       #00,#00,#00,#00,#00,#00,#00,#00       ;........
  509.        DB       #00,#18,#3C,#18,#00,#18,#18,#00       ;..<.....
  510.        DB       #00,#36,#36,#6C,#00,#00,#00,#00       ;.66l....
  511.        DB       #00,#00,#00,#00,#00,#00,#00,#00       ;........
  512.        DB       #00,#00,#00,#00,#00,#00,#00,#00       ;........
  513.        DB       #00,#00,#00,#00,#00,#00,#00,#00       ;........
  514.        DB       #00,#00,#00,#00,#00,#00,#00,#00       ;........
  515.        DB       #00,#1C,#38,#00,#00,#00,#00,#00       ;..8.....
  516.        DB       #00,#0E,#1C,#1C,#1C,#1C,#0E,#00       ;........
  517.        DB       #00,#70,#38,#38,#38,#38,#70,#00       ;.p8888p.
  518.        DB       #00,#00,#00,#00,#00,#00,#00,#00       ;........
  519.        DB       #00,#00,#00,#00,#00,#00,#00,#00       ;........
  520.        DB       #00,#00,#00,#00,#00,#18,#18,#30       ;.......0
  521.        DB       #00,#00,#00,#3C,#3C,#00,#00,#00       ;...<<...
  522.        DB       #00,#00,#00,#00,#00,#18,#18,#00       ;........
  523.        DB       #00,#06,#0E,#1C,#38,#70,#60,#00       ;....8p`.
  524.        DB       #00,#3C,#72,#76,#7A,#72,#3C,#00       ;.<rvzr<.
  525.        DB       #00,#1C,#3C,#1C,#1C,#1C,#7E,#00       ;..<...~.
  526.        DB       #00,#7C,#0E,#0E,#3C,#70,#7E,#00       ;.|..<p~.
  527.        DB       #00,#7C,#0E,#3C,#0E,#0E,#7C,#00       ;.|.<..|.
  528.        DB       #00,#4E,#4E,#4E,#3E,#0E,#0E,#00       ;.NNN>...
  529.        DB       #00,#7C,#60,#7C,#0E,#0E,#7C,#00       ;.|`|..|.
  530.        DB       #00,#3C,#70,#7C,#72,#72,#3C,#00       ;.<p|rr<.
  531.        DB       #00,#7E,#06,#0E,#1C,#18,#18,#00       ;.~......
  532.        DB       #00,#3C,#72,#3C,#72,#72,#3C,#00       ;.<r<rr<.
  533.        DB       #00,#3C,#4E,#4E,#3E,#0E,#3C,#00       ;.<NN>.<.
  534.        DB       #00,#18,#18,#00,#00,#18,#18,#00       ;........
  535.        DB       #00,#18,#18,#00,#00,#18,#18,#30       ;.......0
  536.        DB       #00,#00,#00,#00,#00,#00,#00,#00       ;........
  537.        DB       #00,#00,#00,#00,#00,#00,#00,#00       ;........
  538.        DB       #00,#00,#00,#00,#00,#00,#00,#00       ;........
  539.        DB       #7C,#0E,#0E,#0E,#1C,#00,#18,#00       ;|.......
  540.        DB       #00,#00,#00,#00,#00,#00,#00,#00       ;........
  541.        DB       #00,#3C,#72,#72,#7E,#72,#72,#00       ;.<rr~rr.
  542.        DB       #00,#7C,#72,#7C,#72,#72,#7C,#00       ;.|r|rr|.
  543.        DB       #00,#3E,#70,#70,#70,#70,#3E,#00       ;.>pppp>.
  544.        DB       #00,#7C,#72,#72,#72,#72,#7C,#00       ;.|rrrr|.
  545.        DB       #00,#3E,#70,#7C,#70,#70,#3E,#00       ;.>p|pp>.
  546.        DB       #00,#3E,#70,#7C,#70,#70,#70,#00       ;.>p|ppp.
  547.        DB       #00,#3E,#70,#70,#76,#72,#3C,#00       ;.>ppvr<.
  548.        DB       #00,#72,#72,#7E,#72,#72,#72,#00       ;.rr~rrr.
  549.        DB       #00,#7F,#1C,#1C,#1C,#1C,#7F,#00       ;........
  550.        DB       #00,#0E,#0E,#0E,#4E,#4E,#3C,#00       ;....NN<.
  551.        DB       #00,#72,#72,#7C,#72,#72,#72,#00       ;.rr|rrr.
  552.        DB       #00,#70,#70,#70,#70,#70,#3E,#00       ;.ppppp>.
  553.        DB       #00,#3E,#75,#75,#75,#75,#75,#00       ;.>uuuuu.
  554.        DB       #00,#7C,#72,#72,#72,#72,#72,#00       ;.|rrrrr.
  555.        DB       #00,#3C,#72,#72,#72,#72,#3C,#00       ;.<rrrr<.
  556.        DB       #00,#7C,#72,#72,#7C,#70,#70,#00       ;.|rr|pp.
  557.        DB       #00,#3C,#72,#72,#72,#7A,#3C,#08       ;.<rrrz<.
  558.        DB       #00,#7C,#72,#72,#7C,#72,#72,#00       ;.|rr|rr.
  559.        DB       #00,#3C,#70,#3C,#0E,#0E,#7C,#00       ;.<p<..|.
  560.        DB       #00,#7F,#1C,#1C,#1C,#1C,#1C,#00       ;........
  561.        DB       #00,#72,#72,#72,#72,#72,#3C,#00       ;.rrrrr<.
  562.        DB       #00,#72,#72,#72,#72,#34,#18,#00       ;.rrrr4..
  563.        DB       #00,#71,#71,#75,#75,#75,#3E,#00       ;.qquuu>.
  564.        DB       #00,#72,#72,#3C,#72,#72,#72,#00       ;.rr<rrr.
  565.        DB       #00,#4E,#4E,#4E,#3E,#0E,#3C,#00       ;.NNN>.<.
  566.        DB       #00,#7E,#0E,#1C,#38,#70,#7E,#00       ;.~..8p~.
  567.        DB       #00,#1E,#1C,#1C,#1C,#1C,#1E,#00       ;........
  568.        DB       #00,#60,#70,#38,#1C,#0E,#06,#00       ;.`p8....
  569.        DB       #00,#78,#38,#38,#38,#38,#78,#00       ;.x8888x.
  570.        DB       #00,#08,#1C,#3E,#5D,#1C,#1C,#00       ;...>]...
  571.        DB       #00,#78,#38,#3C,#3A,#3A,#3C,#00       ;.x8<::<.
  572.        DB       #00,#76,#79,#79,#79,#79,#76,#00       ;.vyyyyv.
  573.        DB       #00,#3C,#72,#72,#7E,#72,#72,#00       ;.<rr~rr.
  574.        DB       #00,#7C,#70,#7C,#72,#72,#7C,#00       ;.|p|rr|.
  575.        DB       #00,#4E,#4E,#4E,#4E,#4E,#3E,#02       ;.NNNNN>.
  576.        DB       #00,#1E,#2E,#2E,#2E,#2E,#7E,#42       ;......~B
  577.        DB       #00,#3E,#70,#7C,#70,#70,#3E,#00       ;.>p|pp>.
  578.        DB       #00,#3E,#5D,#5D,#3E,#1C,#1C,#00       ;.>]]>...
  579.        DB       #00,#3E,#70,#70,#70,#70,#70,#00       ;.>ppppp.
  580.        DB       #00,#72,#72,#3C,#72,#72,#72,#00       ;.rr<rrr.
  581.        DB       #00,#72,#72,#76,#7A,#72,#72,#00       ;.rrvzrr.
  582.        DB       #08,#72,#72,#76,#7A,#72,#72,#00       ;.rrvzrr.
  583.        DB       #00,#72,#72,#7C,#72,#72,#72,#00       ;.rr|rrr.
  584.        DB       #00,#3E,#4E,#4E,#4E,#4E,#4E,#00       ;.>NNNNN.
  585.        DB       #00,#71,#7B,#75,#71,#71,#71,#00       ;.q{uqqq.
  586.        DB       #00,#72,#72,#7E,#72,#72,#72,#00       ;.rr~rrr.
  587.        DB       #00,#3C,#72,#72,#72,#72,#3C,#00       ;.<rrrr<.
  588.        DB       #00,#7E,#4E,#4E,#4E,#4E,#4E,#00       ;.~NNNNN.
  589.        DB       #00,#3E,#4E,#4E,#3E,#4E,#4E,#00       ;.>NN>NN.
  590.        DB       #00,#7C,#72,#72,#7C,#70,#70,#00       ;.|rr|pp.
  591.        DB       #00,#3E,#70,#70,#70,#70,#3E,#00       ;.>pppp>.
  592.        DB       #00,#7F,#1C,#1C,#1C,#1C,#1C,#00       ;........
  593.        DB       #00,#4E,#4E,#4E,#3E,#0E,#3C,#00       ;.NNN>.<.
  594.        DB       #00,#5D,#5D,#3E,#5D,#5D,#5D,#00       ;.]]>]]].
  595.        DB       #00,#7C,#72,#7C,#72,#72,#7C,#00       ;.|r|rr|.
  596.        DB       #00,#70,#70,#7C,#72,#72,#7C,#00       ;.pp|rr|.
  597.        DB       #00,#72,#72,#7C,#72,#72,#7C,#00       ;.rr|rr|.
  598.        DB       #00,#7C,#0E,#3C,#0E,#0E,#7C,#00       ;.|.<..|.
  599.        DB       #00,#75,#75,#75,#75,#75,#3E,#00       ;.uuuuu>.
  600.        DB       #00,#7C,#0E,#3E,#0E,#0E,#7C,#00       ;.|.>..|.
  601.        DB       #00,#75,#75,#75,#75,#75,#3F,#01       ;.uuuuu?.
  602.        DB       #00,#4E,#4E,#4E,#3E,#0E,#0E,#00       ;.NNN>...
  603.        DB       #00,#00,#3E,#70,#70,#3E,#00,#00       ;..>pp>..
  604.  
  605.  
  606. setpgsmain40008000
  607. pgmain4000=$+1
  608.         ld a,0
  609.         SETPG16K
  610. pgcode8000=$+1
  611.         ld a,0
  612.         SETPG32KLOW
  613.         ret
  614.  
  615. setpgsscr40008000;_current
  616.         call getuser_scr_low_cur
  617.         SETPG16K
  618.         call getuser_scr_high_cur
  619.         SETPG32KLOW
  620.         ret
  621.  
  622.         if 1==0
  623. setpgsscr40008000
  624.         call getuser_scr_low
  625.         SETPG16K
  626.         call getuser_scr_high
  627.         SETPG32KLOW
  628.         ret
  629.         endif
  630.  
  631. getuser_scr_low
  632. getuser_scr_low_patch=$+1
  633. getuser_scr_low_patchN=0xff&(user_scr0_low^user_scr1_low)
  634.         ld a,(user_scr1_low) ;ok
  635.         ret
  636.  
  637. getuser_scr_high
  638. getuser_scr_high_patch=$+1
  639. getuser_scr_high_patchN=0xff&(user_scr0_high^user_scr1_high)
  640.         ld a,(user_scr1_high) ;ok
  641.         ret
  642.  
  643. getuser_scr_low_cur
  644. getuser_scr_low_cur_patch=$+1
  645. getuser_scr_low_cur_patchN=0xff&(user_scr0_low^user_scr1_low)
  646.         ld a,(user_scr0_low) ;ok
  647.         ret
  648.  
  649. getuser_scr_high_cur
  650. getuser_scr_high_cur_patch=$+1
  651. getuser_scr_high_cur_patchN=0xff&(user_scr0_high^user_scr1_high)
  652.         ld a,(user_scr0_high) ;ok
  653.         ret
  654.  
  655. changescrpg_current
  656.         ld hl,getuser_scr_low_patch
  657.         ld a,(hl)
  658.         xor getuser_scr_low_patchN
  659.         ld (hl),a
  660.         ld hl,getuser_scr_high_patch
  661.         ld a,(hl)
  662.         xor getuser_scr_high_patchN
  663.         ld (hl),a
  664.         ld hl,getuser_scr_low_cur_patch
  665.         ld a,(hl)
  666.         xor getuser_scr_low_cur_patchN
  667.         ld (hl),a
  668.         ld hl,getuser_scr_high_cur_patch
  669.         ld a,(hl)
  670.         xor getuser_scr_high_cur_patchN
  671.         ld (hl),a
  672.  
  673.         ld a,1
  674. curscrnum=$+1
  675.         xor 0
  676.         ld ($-1),a
  677.         ret
  678.        
  679.         if 1==0
  680. changescrpg
  681.         call changescrpg_current
  682.         ld (curscrnum_int),a
  683.         ret
  684.         endif
  685.  
  686. primgega
  687. ;b=hgt,c=wid (/2)
  688. ;de=gfx
  689. ;hl=scr
  690.         push bc
  691.         call setpgsscr40008000
  692.         call setpggfxc000
  693.         pop bc
  694. primgega0
  695.         push bc
  696.         ld hx,b
  697.         push hl
  698.         ld bc,40
  699. primgegacolumn0
  700.         ld a,(de)
  701.         inc de
  702.         ld (hl),a
  703.         add hl,bc
  704.         dec hx
  705.         jr nz,primgegacolumn0
  706.         pop hl
  707.         ld a,0x9f;0xa0
  708.         cp h
  709.         ld bc,0x4000
  710.         adc hl,bc
  711.         jp pe,primgegacolumn0q ;т яюыютшэх ёыєўрхт
  712. ;8000->ё000 (эрфю 6000) шыш a000->e001 (эрфю 4001)
  713.          inc a
  714.         xor h
  715.         ld h,a
  716. primgegacolumn0q
  717.         pop bc
  718.         dec c
  719.         jr nz,primgega0
  720.         call setpgcodec000
  721.         jp setpgsmain40008000
  722.  
  723. clsega
  724.         call setpgsscr40008000
  725.         ld hl,0x4000
  726.         ld de,0x4001
  727.         ld bc,0x7fff
  728.         ld (hl),l;0
  729.         ldir
  730.         jp setpgsmain40008000
  731.  
  732.         if EGA
  733. DrawTile_A_X2Y2DE
  734.         sla     D
  735.         sla     E
  736. DrawTile_A_XYDE
  737.         LD      H,a
  738.         LD      L,0
  739.         srl h
  740.         rr l
  741.         LD      bc,tilegfx
  742.         ADD     HL,bc
  743.         ex de,hl
  744. ;hl=xy
  745.         ld a,h ;x
  746.          add a,4
  747.         ;ld l,l ;y
  748.         ld h,0
  749.         ld b,h
  750.         ld c,l
  751.         add hl,hl
  752.         add hl,hl
  753.         add hl,bc ;*5
  754.          add hl,hl
  755.          add hl,hl
  756.          add hl,hl ;*40
  757.          add hl,hl
  758.          add hl,hl
  759.          add hl,hl
  760.         add a,l
  761.         ld l,a
  762.         ld a,h
  763.         adc a,0x40
  764.         ld h,a
  765.         ld bc,0x1008 ;b=hgt,c=wid (/2)
  766. ;de=gfx
  767. ;hl=scr
  768.         jp primgega
  769.         endif
  770.  
  771.        if EGA
  772. ;DrawSprite_Akeep_DExy
  773.         ;LD     (cursprite),A
  774. DrawSprite_A_DExy
  775. ;A=sprnum
  776. ;DE=xy
  777.         push bc
  778.         push de
  779.         push iy
  780.         add a,a
  781.         ld l,a
  782.         ld h,0xc0
  783.         call setpggfxc000
  784.         ld a,(hl)
  785.         ld ly,a
  786.         inc l
  787.         ld a,(hl)
  788.         ld hy,a
  789.         call setpgsscr40008000
  790.         ld c,e ;y
  791.         ld a,d ;x
  792.         srl a
  793.         add a,sprmaxwid-1
  794.         ld e,a
  795. ;e=x = -(sprmaxwid-1)..159 (ъюфшЁєхЄё  ъръ x+(sprmaxwid-1))
  796. ;c=y = -(sprmaxhgt-1)..199 (ъюфшЁєхЄё  ъръ хёЄ№)
  797.         call prspr
  798.         pop iy
  799.         call setpgcodec000
  800.         call setpgsmain40008000
  801.         pop de
  802.         pop bc
  803.         ret
  804.        endif
  805.  
  806.         include "prspr.asm"
  807.  
  808.         if EGA
  809. gettilebuf
  810.        ds 128
  811.         endif
  812.        if EGA
  813. GetTileToHL_DEXY
  814. ;hl=addr
  815. ;e=Y
  816. ;d=X
  817.         push bc
  818.         push de
  819.         sla d
  820.         sla d
  821.         sla d
  822.         sla e
  823.         sla e
  824.         sla e        
  825.         ld bc,0x1008 ;b=hgt,c=wid (/2)
  826.         jr GetBuf2CxB_DExy_ToHL
  827.        if 1==0
  828.        ld b,12*8
  829. gettilefake0
  830.        ld a,r
  831.        ld (hl),a
  832.        inc hl
  833.        djnz gettilefake0
  834.        pop de
  835.        pop bc
  836.        ret
  837.        endif
  838. GetBuf24x16_DExy
  839. ;e=y
  840. ;d=x
  841.         push bc
  842.         push de
  843.         ld bc,0x100c ;b=hgt,c=wid (/2)
  844.         ld hl,rebuf24x16
  845. GetBuf2CxB_DExy_ToHL
  846.         push hl ;gfx
  847.         ld a,d ;x
  848.         srl a
  849.         srl a
  850.         srl a
  851.          add a,4
  852.         ld l,e ;y
  853.         ld h,0
  854.         ld d,h
  855.         ld e,l
  856.         add hl,hl
  857.         add hl,hl
  858.         add hl,de ;*5
  859.          add hl,hl
  860.          add hl,hl
  861.          add hl,hl ;*40
  862.         add a,l
  863.         ld l,a
  864.         ld a,h
  865.         adc a,0x40
  866.         ld h,a
  867.         pop de ;gfx
  868. ;de=gfx
  869. ;hl=scr
  870.         push bc
  871.         call setpgsscr40008000
  872.         pop bc
  873. getimgega0
  874.         push bc
  875.         ld hx,b
  876.         push hl
  877.         ld bc,40
  878. getimgegacolumn0
  879.         ld a,(hl)
  880.         ld (de),a
  881.         inc de
  882.         add hl,bc
  883.         dec hx
  884.         jr nz,getimgegacolumn0
  885.         pop hl
  886.         ld a,0x9f;0xa0
  887.         cp h
  888.         ld bc,0x4000
  889.         adc hl,bc
  890.         jp pe,getimgegacolumn0q ;т яюыютшэх ёыєўрхт
  891. ;8000->ё000 (эрфю 6000) шыш a000->e001 (эрфю 4001)
  892.          inc a
  893.         xor h
  894.         ld h,a
  895. getimgegacolumn0q
  896.         pop bc
  897.         dec c
  898.         jr nz,getimgega0
  899.         call setpgsmain40008000
  900.         pop de
  901.         pop bc
  902.         ret
  903.  
  904. ReBuf24x16_DExy
  905. ;e=y
  906. ;d=x (width 16 if multiple of 8)
  907.         push bc
  908.         push de
  909.         ld bc,0x1008 ;b=hgt,c=wid (/2)
  910.         ld a,d
  911.         and 7
  912.         jr z,$+4
  913.          ld c,0x0c
  914.         ld a,d ;x
  915.         srl a
  916.         srl a
  917.         srl a
  918.          add a,4
  919.         ld l,e ;y
  920.         ld h,0
  921.         ld d,h
  922.         ld e,l
  923.         add hl,hl
  924.         add hl,hl
  925.         add hl,de ;*5
  926.          add hl,hl
  927.          add hl,hl
  928.          add hl,hl ;*40
  929.         add a,l
  930.         ld l,a
  931.         ld a,h
  932.         adc a,0x40
  933.         ld h,a
  934.         ld de,rebuf24x16
  935. ;de=gfx
  936. ;hl=scr
  937.         call primgega
  938.         pop de
  939.         pop bc
  940.         ret
  941.  
  942. buf24x16
  943.         ds 12*16
  944. buf24x16_2
  945.         ds 12*16
  946. gettilebuf2
  947.         ds 8*16
  948. rebuf24x16
  949.         ds 12*16
  950.        endif
  951.  
  952.        if EGA
  953. DrawSprite16x16_HL_DExy
  954. ;hl=gfx
  955. ;e=y
  956. ;d=x (pixel perfect!)
  957.         push bc
  958.         push de
  959.         ex de,hl
  960.         ld b,0
  961.         ld a,h ;x
  962.         srl a
  963.         ;ld l,l ;y
  964.         ld c,l
  965.         srl a ;x bit 0
  966.         ;ld h,0x40/32/2
  967.         ;jr nc,$+4 ;x bit 0
  968.         ; ld h,0x80/32/2
  969.          ld h,b;0
  970.          rl h
  971.          inc h ;0x40/32/2 шыш 0x80/32/2
  972.         srl a ;x bit 1
  973.          rl h
  974.         add hl,hl
  975.         add hl,hl
  976.         add hl,bc
  977.         add hl,hl
  978.         add hl,hl
  979.         add hl,hl ;y*40+scrbase
  980.          if scrbase&0xff
  981.          add a,scrbase&0xff
  982.          endif
  983. ;a=x/4
  984.         add a,l
  985.         ld l,a
  986.         adc a,h
  987.         sub l
  988.         ld h,a ;hl=scr
  989. ;de=gfx
  990. ;hl=scr
  991.         ld bc,0x1008 ;b=hgt,c=wid (/2)
  992.         call primgega
  993.         pop de
  994.         pop bc
  995.         ret
  996.        endif
  997.  
  998.        if EGA
  999. ClearTile_DExy
  1000.         ;ret
  1001. ;E=y
  1002. ;D=x (width 24 if not multiple of 8)
  1003.         push bc
  1004.         push de
  1005.         ld bc,0x1008 ;b=hgt,c=wid (/2)
  1006.         ld a,d ;x
  1007.         and 7
  1008.         jr z,$+4
  1009.          ld c,0x0c ;wid (/2)
  1010.         ld a,d
  1011.         srl a
  1012.         srl a
  1013.         srl a
  1014.          add a,4
  1015.         ld l,e ;y
  1016.         ld h,0
  1017.         ld d,h
  1018.         ld e,l
  1019.         add hl,hl
  1020.         add hl,hl
  1021.         add hl,de ;*5
  1022.          add hl,hl
  1023.          add hl,hl
  1024.          add hl,hl ;*40
  1025.         add a,l
  1026.         ld l,a
  1027.         ld a,h
  1028.         adc a,0x40
  1029.         ld h,a
  1030.         ld de,zeros24x16
  1031. ;de=gfx
  1032. ;hl=scr
  1033.         call primgega
  1034.         pop de
  1035.         pop bc
  1036.         ret
  1037. zeros24x16
  1038.         ds 12*16
  1039.        endif
  1040.  
  1041. readbmphead_pal
  1042.         ld de,bgpush_bmpbuf
  1043.         ld hl,14+2;54+(4*16)
  1044. ;de=buf
  1045. ;hl=size
  1046.         call readstream_file
  1047.         ld de,bgpush_bmpbuf
  1048.         ld hl,(bgpush_bmpbuf+14)
  1049.         dec hl
  1050.         dec hl
  1051. ;de=buf
  1052. ;hl=size
  1053.         call readstream_file
  1054.         ld de,bgpush_bmpbuf
  1055.         ld hl,+(4*16)
  1056. ;de=buf
  1057. ;hl=size
  1058.         call readstream_file
  1059.  
  1060.         ld hl,bgpush_bmpbuf;+54
  1061.         ld ix,pal
  1062.         ld b,16
  1063. recodepal0
  1064.         ld e,(hl)
  1065.         inc hl
  1066.         ld d,(hl)
  1067.         inc hl
  1068.         push hl
  1069.         ld l,(hl) ;e=B, d=G, l=R
  1070.         call readfile_rgbtopal
  1071.         pop hl
  1072.         inc hl
  1073.         inc hl
  1074.         djnz recodepal0
  1075.         ret
  1076.  
  1077.         macro RECOLOR
  1078.         ld a,(de)
  1079.         inc de
  1080.         ld ($+4),a
  1081.         ld a,(trecolor)
  1082.         ld (hl),a
  1083.         endm
  1084. readbmpscr
  1085.         ld hl,0x4000+(199*40)
  1086.         ld b,200
  1087. readbmpscr0
  1088.         push bc
  1089.         push hl
  1090.         ld de,bgpush_bmpbuf
  1091.         ld hl,320/2
  1092. ;de=buf
  1093. ;hl=size
  1094.         push de
  1095.         call readstream_file
  1096.         pop de
  1097.         pop hl
  1098.         push hl
  1099.         ld b,40
  1100. readbmpscr00        
  1101.         RECOLOR
  1102.         ld a,h
  1103.         add a,0x40
  1104.         ld h,a
  1105.         RECOLOR
  1106.         ld a,h
  1107.         add a,0x20-0x40
  1108.         ld h,a
  1109.         RECOLOR
  1110.         ld a,h
  1111.         add a,0x40
  1112.         ld h,a
  1113.         RECOLOR
  1114.         ld a,h
  1115.         sub 0x60
  1116.         ld h,a
  1117.         inc hl
  1118.         djnz readbmpscr00
  1119.         pop hl
  1120.         ld bc,-40
  1121.         add hl,bc
  1122.         pop bc
  1123.         djnz readbmpscr0
  1124.         ret
  1125.  
  1126. readfile_rgbtopal
  1127. ;e=B, d=G, l=R
  1128.         call calcRGBtopal_pp
  1129.         ld (ix+1),a
  1130.         call calcRGBtopal_pp
  1131.         ld (ix),a
  1132.         inc ix
  1133.         inc ix
  1134.         ret
  1135.  
  1136. calcRGBtopal_pp
  1137. ;e=B, d=G, l=R
  1138. ;DDp palette: %grbG11RB(low),%grbG11RB(high), ??oN????N
  1139.         xor a
  1140.         rl e  ;B
  1141.         rra
  1142.         rl l  ;R
  1143.         rra
  1144.         rrca
  1145.         rrca
  1146.         rl d  ;G
  1147.         rra
  1148.         rl e  ;b
  1149.         rra
  1150.         rl l  ;r
  1151.         rra
  1152.         rl d  ;g
  1153.         rra
  1154.         cpl
  1155.         ret
  1156.  
  1157.         align 256
  1158. trecolor
  1159. ;%00003210 => %.3...210
  1160.         dup 256
  1161. _3=$&8
  1162. _210=$&7
  1163. _3L=($>>4)&8
  1164. _210L=($>>4)&7
  1165.         db (_3L*0x08) + (_210L*0x01) + (_3*0x10) + (_210*0x08)
  1166.         edup
  1167.  
  1168. bgpush_bmpbuf
  1169.         ds 320
  1170.  
  1171. res_path
  1172.         db "solkey",0
  1173. bmpfilename
  1174.         db "solkey.bmp",0
  1175.         include "../../_sdk/file.asm"
  1176.  
  1177.         ds 0x3f00-$
  1178.         ds 0x4000-$
  1179.         ;incbin "slabage/sprdata.bin"
  1180. tilegfx=$+0x8000
  1181.         ;incbin "slabage/tiles.bin"
  1182. panelgfx=$+0x8000
  1183.         ;incbin "slabage/panel.bin"
  1184.  
  1185.         ds 0x9300-$
  1186.         include "SOLKEY.asm"
  1187. end
  1188.  
  1189.         display "End=",end
  1190.         ;display "Free after end=",/d,#c000-end
  1191.         display "Size ",/d,end-begin," bytes"
  1192.         savebin "solkey.com",begin,end-begin
  1193.         LABELSLIST "../../../us/user.l"
  1194.