?login_element?

Subversion Repositories NedoOS

Rev

Rev 792 | 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,lx
  278.          ld (curkempston),a
  279.          ;ld a,(user_scr0_high) ;ok
  280.          ;SETPG16K ;TODO redraw screen when retake focus???
  281. Imer_nofocus
  282.         ;LD     A,(stoptimer)
  283.         ;OR     A
  284.         ;CALL   Z,DecTimer
  285.         pop iy
  286.         pop ix
  287.         pop hl
  288.         pop de
  289.         pop bc
  290.         pop af
  291.         ex af,af' ;'
  292.         exx
  293.         pop hl
  294.         pop bc
  295.         pop af        
  296. on_int_sp=$+1
  297.         ld sp,0
  298.         pop de
  299.         ei
  300. on_int_jp=$+1
  301.         jp 0
  302. ;
  303. ;
  304. RIGHTPIX=0x38;0xb8;%10111000
  305. LEFTPIX=0x07;0x47;%01000111
  306.         macro FONTBYTE
  307.         ld a,(de)
  308.         ld c,a
  309.         xor a
  310.         rl c
  311.         jr nc,$+4
  312.          or LEFTPIX
  313.         rl c
  314.         jr nc,$+4
  315.          or RIGHTPIX
  316.         ld (hl),a
  317.         ld a,h
  318.         add a,0x40
  319.         ld h,a
  320.         xor a
  321.         rl c
  322.         jr nc,$+4
  323.          or LEFTPIX
  324.         rl c
  325.         jr nc,$+4
  326.          or RIGHTPIX
  327.         ld (hl),a
  328.         ld a,h
  329.         add a,0x20-0x40
  330.         ld h,a
  331.         xor a
  332.         rl c
  333.         jr nc,$+4
  334.          or LEFTPIX
  335.         rl c
  336.         jr nc,$+4
  337.          or RIGHTPIX
  338.         ld (hl),a
  339.         ld a,h
  340.         add a,0x40
  341.         ld h,a
  342.         xor a
  343.         rl c
  344.         jr nc,$+4
  345.          or LEFTPIX
  346.         rl c
  347.         jr nc,$+4
  348.          or RIGHTPIX
  349.         ld (hl),a
  350.         endm
  351.  
  352. PrintCharA_EGA
  353.         push bc
  354.         push de
  355.         push hl
  356.        push af
  357.         call setpgsscr40008000
  358.         LD      DE,(curprintyx)
  359.         sla e
  360.         sla e
  361.         sla e
  362.         ld a,d ;x
  363.          add a,4
  364.         ld l,e ;y
  365.         ld h,0
  366.         ld d,h
  367.         ld e,l
  368.         add hl,hl
  369.         add hl,hl
  370.         add hl,de ;*5
  371.          add hl,hl
  372.          add hl,hl
  373.          add hl,hl ;*40
  374.         add a,l
  375.         ld l,a
  376.         ld a,h
  377.         adc a,0x40
  378.         ld h,a
  379.        pop af
  380.         PUSH    HL
  381.         LD      DE,font-256;L_BE02
  382.         LD      H,#00
  383.         LD      L,A
  384.         ADD     HL,HL
  385.         ADD     HL,HL
  386.         ADD     HL,HL
  387.         ADD     HL,DE
  388.         EX      DE,HL
  389.         POP     HL
  390.         LD      hx,#08
  391.  
  392. PrintCharA_EGA0
  393.         FONTBYTE
  394.         ld bc,40-0x6000
  395.         add hl,bc
  396.         INC     DE
  397.         dec hx
  398.         jr nz,PrintCharA_EGA0
  399.        
  400.         LD      DE,(curprintyx)
  401.         INC     D
  402.         LD      A,D
  403.         CP      #20
  404.         JR      NZ,PrintCharA_EGAq
  405.         INC     E
  406.         LD      D,#00
  407.         LD      A,E
  408.         CP      #18
  409.         JR      NZ,PrintCharA_EGAq
  410.         LD      E,#00
  411. PrintCharA_EGAq
  412.         LD      (curprintyx),DE
  413.         call setpgsmain40008000
  414.         pop hl
  415.         pop de
  416.         pop bc
  417.         ret
  418.        
  419. PrintCharA
  420.         PUSH    DE
  421.         PUSH    HL
  422.         PUSH    BC
  423.         PUSH    AF
  424.         LD      DE,(curprintyx)
  425.         LD      A,E
  426.         AND     #18
  427.         OR      #40
  428.         LD      H,A
  429.         LD      A,E
  430.         AND     #07
  431.         OR      A
  432.         RRA
  433.         RRA
  434.         RRA
  435.         RRA
  436.         ADD     A,D
  437.         LD      L,A
  438.         POP     AF
  439.         PUSH    HL
  440.         LD      DE,font-256;L_BE02
  441.         LD      H,#00
  442.         LD      L,A
  443.         ADD     HL,HL
  444.         ADD     HL,HL
  445.         ADD     HL,HL
  446.         ADD     HL,DE
  447.         EX      DE,HL
  448.         POP     HL
  449.         LD      B,#08
  450. L_C6EB  LD      A,(DE)
  451.         LD      (HL),A
  452.         INC     H
  453.         INC     DE
  454.         DJNZ    L_C6EB
  455.         LD      DE,(curprintyx)
  456.         INC     D
  457.         LD      A,D
  458.         CP      #20
  459.         JR      NZ,L_C705
  460.         INC     E
  461.         LD      D,#00
  462.         LD      A,E
  463.         CP      #18
  464.         JR      NZ,L_C705
  465.         LD      E,#00
  466. L_C705  LD      (curprintyx),DE
  467.         POP     BC
  468.         POP     HL
  469.         POP     DE
  470.         RET
  471. ;
  472. curprintyx       DW       #0000
  473. ;
  474. PrintStringHL
  475.         LD      A,(HL)
  476.         OR      A
  477.         RET     Z
  478.         CP      #16
  479.         JR      Z,L_C71C
  480.         CALL    PrintCharA
  481.         INC     HL
  482.         JR      PrintStringHL
  483. L_C71C  INC     HL
  484.         LD      E,(HL)
  485.         INC     HL
  486.         LD      D,(HL)
  487.         INC     HL
  488.         LD      (curprintyx),DE
  489.         JR      PrintStringHL
  490. ;
  491. PrintStringHL_EGA
  492.         LD      A,(HL)
  493.         OR      A
  494.         RET     Z
  495.         CP      #16
  496.         JR      Z,L_C71C_EGA
  497.         CALL    PrintCharA_EGA
  498.         INC     HL
  499.         JR      PrintStringHL_EGA
  500. L_C71C_EGA
  501.         INC     HL
  502.         LD      E,(HL)
  503.         INC     HL
  504.         LD      D,(HL)
  505.         INC     HL
  506.         LD      (curprintyx),DE
  507.         JR      PrintStringHL_EGA
  508.  
  509. font
  510.        DB       #00,#00,#00,#00,#00,#00,#00,#00       ;........
  511.        DB       #00,#18,#3C,#18,#00,#18,#18,#00       ;..<.....
  512.        DB       #00,#36,#36,#6C,#00,#00,#00,#00       ;.66l....
  513.        DB       #00,#00,#00,#00,#00,#00,#00,#00       ;........
  514.        DB       #00,#00,#00,#00,#00,#00,#00,#00       ;........
  515.        DB       #00,#00,#00,#00,#00,#00,#00,#00       ;........
  516.        DB       #00,#00,#00,#00,#00,#00,#00,#00       ;........
  517.        DB       #00,#1C,#38,#00,#00,#00,#00,#00       ;..8.....
  518.        DB       #00,#0E,#1C,#1C,#1C,#1C,#0E,#00       ;........
  519.        DB       #00,#70,#38,#38,#38,#38,#70,#00       ;.p8888p.
  520.        DB       #00,#00,#00,#00,#00,#00,#00,#00       ;........
  521.        DB       #00,#00,#00,#00,#00,#00,#00,#00       ;........
  522.        DB       #00,#00,#00,#00,#00,#18,#18,#30       ;.......0
  523.        DB       #00,#00,#00,#3C,#3C,#00,#00,#00       ;...<<...
  524.        DB       #00,#00,#00,#00,#00,#18,#18,#00       ;........
  525.        DB       #00,#06,#0E,#1C,#38,#70,#60,#00       ;....8p`.
  526.        DB       #00,#3C,#72,#76,#7A,#72,#3C,#00       ;.<rvzr<.
  527.        DB       #00,#1C,#3C,#1C,#1C,#1C,#7E,#00       ;..<...~.
  528.        DB       #00,#7C,#0E,#0E,#3C,#70,#7E,#00       ;.|..<p~.
  529.        DB       #00,#7C,#0E,#3C,#0E,#0E,#7C,#00       ;.|.<..|.
  530.        DB       #00,#4E,#4E,#4E,#3E,#0E,#0E,#00       ;.NNN>...
  531.        DB       #00,#7C,#60,#7C,#0E,#0E,#7C,#00       ;.|`|..|.
  532.        DB       #00,#3C,#70,#7C,#72,#72,#3C,#00       ;.<p|rr<.
  533.        DB       #00,#7E,#06,#0E,#1C,#18,#18,#00       ;.~......
  534.        DB       #00,#3C,#72,#3C,#72,#72,#3C,#00       ;.<r<rr<.
  535.        DB       #00,#3C,#4E,#4E,#3E,#0E,#3C,#00       ;.<NN>.<.
  536.        DB       #00,#18,#18,#00,#00,#18,#18,#00       ;........
  537.        DB       #00,#18,#18,#00,#00,#18,#18,#30       ;.......0
  538.        DB       #00,#00,#00,#00,#00,#00,#00,#00       ;........
  539.        DB       #00,#00,#00,#00,#00,#00,#00,#00       ;........
  540.        DB       #00,#00,#00,#00,#00,#00,#00,#00       ;........
  541.        DB       #7C,#0E,#0E,#0E,#1C,#00,#18,#00       ;|.......
  542.        DB       #00,#00,#00,#00,#00,#00,#00,#00       ;........
  543.        DB       #00,#3C,#72,#72,#7E,#72,#72,#00       ;.<rr~rr.
  544.        DB       #00,#7C,#72,#7C,#72,#72,#7C,#00       ;.|r|rr|.
  545.        DB       #00,#3E,#70,#70,#70,#70,#3E,#00       ;.>pppp>.
  546.        DB       #00,#7C,#72,#72,#72,#72,#7C,#00       ;.|rrrr|.
  547.        DB       #00,#3E,#70,#7C,#70,#70,#3E,#00       ;.>p|pp>.
  548.        DB       #00,#3E,#70,#7C,#70,#70,#70,#00       ;.>p|ppp.
  549.        DB       #00,#3E,#70,#70,#76,#72,#3C,#00       ;.>ppvr<.
  550.        DB       #00,#72,#72,#7E,#72,#72,#72,#00       ;.rr~rrr.
  551.        DB       #00,#7F,#1C,#1C,#1C,#1C,#7F,#00       ;........
  552.        DB       #00,#0E,#0E,#0E,#4E,#4E,#3C,#00       ;....NN<.
  553.        DB       #00,#72,#72,#7C,#72,#72,#72,#00       ;.rr|rrr.
  554.        DB       #00,#70,#70,#70,#70,#70,#3E,#00       ;.ppppp>.
  555.        DB       #00,#3E,#75,#75,#75,#75,#75,#00       ;.>uuuuu.
  556.        DB       #00,#7C,#72,#72,#72,#72,#72,#00       ;.|rrrrr.
  557.        DB       #00,#3C,#72,#72,#72,#72,#3C,#00       ;.<rrrr<.
  558.        DB       #00,#7C,#72,#72,#7C,#70,#70,#00       ;.|rr|pp.
  559.        DB       #00,#3C,#72,#72,#72,#7A,#3C,#08       ;.<rrrz<.
  560.        DB       #00,#7C,#72,#72,#7C,#72,#72,#00       ;.|rr|rr.
  561.        DB       #00,#3C,#70,#3C,#0E,#0E,#7C,#00       ;.<p<..|.
  562.        DB       #00,#7F,#1C,#1C,#1C,#1C,#1C,#00       ;........
  563.        DB       #00,#72,#72,#72,#72,#72,#3C,#00       ;.rrrrr<.
  564.        DB       #00,#72,#72,#72,#72,#34,#18,#00       ;.rrrr4..
  565.        DB       #00,#71,#71,#75,#75,#75,#3E,#00       ;.qquuu>.
  566.        DB       #00,#72,#72,#3C,#72,#72,#72,#00       ;.rr<rrr.
  567.        DB       #00,#4E,#4E,#4E,#3E,#0E,#3C,#00       ;.NNN>.<.
  568.        DB       #00,#7E,#0E,#1C,#38,#70,#7E,#00       ;.~..8p~.
  569.        DB       #00,#1E,#1C,#1C,#1C,#1C,#1E,#00       ;........
  570.        DB       #00,#60,#70,#38,#1C,#0E,#06,#00       ;.`p8....
  571.        DB       #00,#78,#38,#38,#38,#38,#78,#00       ;.x8888x.
  572.        DB       #00,#08,#1C,#3E,#5D,#1C,#1C,#00       ;...>]...
  573.        DB       #00,#78,#38,#3C,#3A,#3A,#3C,#00       ;.x8<::<.
  574.        DB       #00,#76,#79,#79,#79,#79,#76,#00       ;.vyyyyv.
  575.        DB       #00,#3C,#72,#72,#7E,#72,#72,#00       ;.<rr~rr.
  576.        DB       #00,#7C,#70,#7C,#72,#72,#7C,#00       ;.|p|rr|.
  577.        DB       #00,#4E,#4E,#4E,#4E,#4E,#3E,#02       ;.NNNNN>.
  578.        DB       #00,#1E,#2E,#2E,#2E,#2E,#7E,#42       ;......~B
  579.        DB       #00,#3E,#70,#7C,#70,#70,#3E,#00       ;.>p|pp>.
  580.        DB       #00,#3E,#5D,#5D,#3E,#1C,#1C,#00       ;.>]]>...
  581.        DB       #00,#3E,#70,#70,#70,#70,#70,#00       ;.>ppppp.
  582.        DB       #00,#72,#72,#3C,#72,#72,#72,#00       ;.rr<rrr.
  583.        DB       #00,#72,#72,#76,#7A,#72,#72,#00       ;.rrvzrr.
  584.        DB       #08,#72,#72,#76,#7A,#72,#72,#00       ;.rrvzrr.
  585.        DB       #00,#72,#72,#7C,#72,#72,#72,#00       ;.rr|rrr.
  586.        DB       #00,#3E,#4E,#4E,#4E,#4E,#4E,#00       ;.>NNNNN.
  587.        DB       #00,#71,#7B,#75,#71,#71,#71,#00       ;.q{uqqq.
  588.        DB       #00,#72,#72,#7E,#72,#72,#72,#00       ;.rr~rrr.
  589.        DB       #00,#3C,#72,#72,#72,#72,#3C,#00       ;.<rrrr<.
  590.        DB       #00,#7E,#4E,#4E,#4E,#4E,#4E,#00       ;.~NNNNN.
  591.        DB       #00,#3E,#4E,#4E,#3E,#4E,#4E,#00       ;.>NN>NN.
  592.        DB       #00,#7C,#72,#72,#7C,#70,#70,#00       ;.|rr|pp.
  593.        DB       #00,#3E,#70,#70,#70,#70,#3E,#00       ;.>pppp>.
  594.        DB       #00,#7F,#1C,#1C,#1C,#1C,#1C,#00       ;........
  595.        DB       #00,#4E,#4E,#4E,#3E,#0E,#3C,#00       ;.NNN>.<.
  596.        DB       #00,#5D,#5D,#3E,#5D,#5D,#5D,#00       ;.]]>]]].
  597.        DB       #00,#7C,#72,#7C,#72,#72,#7C,#00       ;.|r|rr|.
  598.        DB       #00,#70,#70,#7C,#72,#72,#7C,#00       ;.pp|rr|.
  599.        DB       #00,#72,#72,#7C,#72,#72,#7C,#00       ;.rr|rr|.
  600.        DB       #00,#7C,#0E,#3C,#0E,#0E,#7C,#00       ;.|.<..|.
  601.        DB       #00,#75,#75,#75,#75,#75,#3E,#00       ;.uuuuu>.
  602.        DB       #00,#7C,#0E,#3E,#0E,#0E,#7C,#00       ;.|.>..|.
  603.        DB       #00,#75,#75,#75,#75,#75,#3F,#01       ;.uuuuu?.
  604.        DB       #00,#4E,#4E,#4E,#3E,#0E,#0E,#00       ;.NNN>...
  605.        DB       #00,#00,#3E,#70,#70,#3E,#00,#00       ;..>pp>..
  606.  
  607.  
  608. setpgsmain40008000
  609. pgmain4000=$+1
  610.         ld a,0
  611.         SETPG16K
  612. pgcode8000=$+1
  613.         ld a,0
  614.         SETPG32KLOW
  615.         ret
  616.  
  617. setpgsscr40008000;_current
  618.         call getuser_scr_low_cur
  619.         SETPG16K
  620.         call getuser_scr_high_cur
  621.         SETPG32KLOW
  622.         ret
  623.  
  624.         if 1==0
  625. setpgsscr40008000
  626.         call getuser_scr_low
  627.         SETPG16K
  628.         call getuser_scr_high
  629.         SETPG32KLOW
  630.         ret
  631.         endif
  632.  
  633. getuser_scr_low
  634. getuser_scr_low_patch=$+1
  635. getuser_scr_low_patchN=0xff&(user_scr0_low^user_scr1_low)
  636.         ld a,(user_scr1_low) ;ok
  637.         ret
  638.  
  639. getuser_scr_high
  640. getuser_scr_high_patch=$+1
  641. getuser_scr_high_patchN=0xff&(user_scr0_high^user_scr1_high)
  642.         ld a,(user_scr1_high) ;ok
  643.         ret
  644.  
  645. getuser_scr_low_cur
  646. getuser_scr_low_cur_patch=$+1
  647. getuser_scr_low_cur_patchN=0xff&(user_scr0_low^user_scr1_low)
  648.         ld a,(user_scr0_low) ;ok
  649.         ret
  650.  
  651. getuser_scr_high_cur
  652. getuser_scr_high_cur_patch=$+1
  653. getuser_scr_high_cur_patchN=0xff&(user_scr0_high^user_scr1_high)
  654.         ld a,(user_scr0_high) ;ok
  655.         ret
  656.  
  657. changescrpg_current
  658.         ld hl,getuser_scr_low_patch
  659.         ld a,(hl)
  660.         xor getuser_scr_low_patchN
  661.         ld (hl),a
  662.         ld hl,getuser_scr_high_patch
  663.         ld a,(hl)
  664.         xor getuser_scr_high_patchN
  665.         ld (hl),a
  666.         ld hl,getuser_scr_low_cur_patch
  667.         ld a,(hl)
  668.         xor getuser_scr_low_cur_patchN
  669.         ld (hl),a
  670.         ld hl,getuser_scr_high_cur_patch
  671.         ld a,(hl)
  672.         xor getuser_scr_high_cur_patchN
  673.         ld (hl),a
  674.  
  675.         ld a,1
  676. curscrnum=$+1
  677.         xor 0
  678.         ld ($-1),a
  679.         ret
  680.        
  681.         if 1==0
  682. changescrpg
  683.         call changescrpg_current
  684.         ld (curscrnum_int),a
  685.         ret
  686.         endif
  687.  
  688. primgega
  689. ;b=hgt,c=wid (/2)
  690. ;de=gfx
  691. ;hl=scr
  692.         push bc
  693.         call setpgsscr40008000
  694.         call setpggfxc000
  695.         pop bc
  696. primgega0
  697.         push bc
  698.         ld hx,b
  699.         push hl
  700.         ld bc,40
  701. primgegacolumn0
  702.         ld a,(de)
  703.         inc de
  704.         ld (hl),a
  705.         add hl,bc
  706.         dec hx
  707.         jr nz,primgegacolumn0
  708.         pop hl
  709.         ld a,0x9f;0xa0
  710.         cp h
  711.         ld bc,0x4000
  712.         adc hl,bc
  713.         jp pe,primgegacolumn0q ;т яюыютшэх ёыєўрхт
  714. ;8000->ё000 (эрфю 6000) шыш a000->e001 (эрфю 4001)
  715.          inc a
  716.         xor h
  717.         ld h,a
  718. primgegacolumn0q
  719.         pop bc
  720.         dec c
  721.         jr nz,primgega0
  722.         call setpgcodec000
  723.         jp setpgsmain40008000
  724.  
  725. clsega
  726.         call setpgsscr40008000
  727.         ld hl,0x4000
  728.         ld de,0x4001
  729.         ld bc,0x7fff
  730.         ld (hl),l;0
  731.         ldir
  732.         jp setpgsmain40008000
  733.  
  734.         if EGA
  735. DrawTile_A_X2Y2DE
  736.         sla     D
  737.         sla     E
  738. DrawTile_A_XYDE
  739.         LD      H,a
  740.         LD      L,0
  741.         srl h
  742.         rr l
  743.         LD      bc,tilegfx
  744.         ADD     HL,bc
  745.         ex de,hl
  746. ;hl=xy
  747.         ld a,h ;x
  748.          add a,4
  749.         ;ld l,l ;y
  750.         ld h,0
  751.         ld b,h
  752.         ld c,l
  753.         add hl,hl
  754.         add hl,hl
  755.         add hl,bc ;*5
  756.          add hl,hl
  757.          add hl,hl
  758.          add hl,hl ;*40
  759.          add hl,hl
  760.          add hl,hl
  761.          add hl,hl
  762.         add a,l
  763.         ld l,a
  764.         ld a,h
  765.         adc a,0x40
  766.         ld h,a
  767.         ld bc,0x1008 ;b=hgt,c=wid (/2)
  768. ;de=gfx
  769. ;hl=scr
  770.         jp primgega
  771.         endif
  772.  
  773.        if EGA
  774. ;DrawSprite_Akeep_DExy
  775.         ;LD     (cursprite),A
  776. DrawSprite_A_DExy
  777. ;A=sprnum
  778. ;DE=xy
  779.         push bc
  780.         push de
  781.         push iy
  782.         add a,a
  783.         ld l,a
  784.         ld h,0xc0
  785.         call setpggfxc000
  786.         ld a,(hl)
  787.         ld ly,a
  788.         inc l
  789.         ld a,(hl)
  790.         ld hy,a
  791.         call setpgsscr40008000
  792.         ld c,e ;y
  793.         ld a,d ;x
  794.         srl a
  795.         add a,sprmaxwid-1
  796.         ld e,a
  797. ;e=x = -(sprmaxwid-1)..159 (ъюфшЁєхЄё  ъръ x+(sprmaxwid-1))
  798. ;c=y = -(sprmaxhgt-1)..199 (ъюфшЁєхЄё  ъръ хёЄ№)
  799.         call prspr
  800.         pop iy
  801.         call setpgcodec000
  802.         call setpgsmain40008000
  803.         pop de
  804.         pop bc
  805.         ret
  806.        endif
  807.  
  808.         include "prspr.asm"
  809.  
  810.         if EGA
  811. gettilebuf
  812.        ds 128
  813.         endif
  814.        if EGA
  815. GetTileToHL_DEXY
  816. ;hl=addr
  817. ;e=Y
  818. ;d=X
  819.         push bc
  820.         push de
  821.         sla d
  822.         sla d
  823.         sla d
  824.         sla e
  825.         sla e
  826.         sla e        
  827.         ld bc,0x1008 ;b=hgt,c=wid (/2)
  828.         jr GetBuf2CxB_DExy_ToHL
  829.        if 1==0
  830.        ld b,12*8
  831. gettilefake0
  832.        ld a,r
  833.        ld (hl),a
  834.        inc hl
  835.        djnz gettilefake0
  836.        pop de
  837.        pop bc
  838.        ret
  839.        endif
  840. GetBuf24x16_DExy
  841. ;e=y
  842. ;d=x
  843.         push bc
  844.         push de
  845.         ld bc,0x100c ;b=hgt,c=wid (/2)
  846.         ld hl,rebuf24x16
  847. GetBuf2CxB_DExy_ToHL
  848.         push hl ;gfx
  849.         ld a,d ;x
  850.         srl a
  851.         srl a
  852.         srl a
  853.          add a,4
  854.         ld l,e ;y
  855.         ld h,0
  856.         ld d,h
  857.         ld e,l
  858.         add hl,hl
  859.         add hl,hl
  860.         add hl,de ;*5
  861.          add hl,hl
  862.          add hl,hl
  863.          add hl,hl ;*40
  864.         add a,l
  865.         ld l,a
  866.         ld a,h
  867.         adc a,0x40
  868.         ld h,a
  869.         pop de ;gfx
  870. ;de=gfx
  871. ;hl=scr
  872.         push bc
  873.         call setpgsscr40008000
  874.         pop bc
  875. getimgega0
  876.         push bc
  877.         ld hx,b
  878.         push hl
  879.         ld bc,40
  880. getimgegacolumn0
  881.         ld a,(hl)
  882.         ld (de),a
  883.         inc de
  884.         add hl,bc
  885.         dec hx
  886.         jr nz,getimgegacolumn0
  887.         pop hl
  888.         ld a,0x9f;0xa0
  889.         cp h
  890.         ld bc,0x4000
  891.         adc hl,bc
  892.         jp pe,getimgegacolumn0q ;т яюыютшэх ёыєўрхт
  893. ;8000->ё000 (эрфю 6000) шыш a000->e001 (эрфю 4001)
  894.          inc a
  895.         xor h
  896.         ld h,a
  897. getimgegacolumn0q
  898.         pop bc
  899.         dec c
  900.         jr nz,getimgega0
  901.         call setpgsmain40008000
  902.         pop de
  903.         pop bc
  904.         ret
  905.  
  906. ReBuf24x16_DExy
  907. ;e=y
  908. ;d=x (width 16 if multiple of 8)
  909.         push bc
  910.         push de
  911.         ld bc,0x1008 ;b=hgt,c=wid (/2)
  912.         ld a,d
  913.         and 7
  914.         jr z,$+4
  915.          ld c,0x0c
  916.         ld a,d ;x
  917.         srl a
  918.         srl a
  919.         srl a
  920.          add a,4
  921.         ld l,e ;y
  922.         ld h,0
  923.         ld d,h
  924.         ld e,l
  925.         add hl,hl
  926.         add hl,hl
  927.         add hl,de ;*5
  928.          add hl,hl
  929.          add hl,hl
  930.          add hl,hl ;*40
  931.         add a,l
  932.         ld l,a
  933.         ld a,h
  934.         adc a,0x40
  935.         ld h,a
  936.         ld de,rebuf24x16
  937. ;de=gfx
  938. ;hl=scr
  939.         call primgega
  940.         pop de
  941.         pop bc
  942.         ret
  943.  
  944. buf24x16
  945.         ds 12*16
  946. buf24x16_2
  947.         ds 12*16
  948. gettilebuf2
  949.         ds 8*16
  950. rebuf24x16
  951.         ds 12*16
  952.        endif
  953.  
  954.        if EGA
  955. DrawSprite16x16_HL_DExy
  956. ;hl=gfx
  957. ;e=y
  958. ;d=x (pixel perfect!)
  959.         push bc
  960.         push de
  961.         ex de,hl
  962.         ld b,0
  963.         ld a,h ;x
  964.         srl a
  965.         ;ld l,l ;y
  966.         ld c,l
  967.         srl a ;x bit 0
  968.         ;ld h,0x40/32/2
  969.         ;jr nc,$+4 ;x bit 0
  970.         ; ld h,0x80/32/2
  971.          ld h,b;0
  972.          rl h
  973.          inc h ;0x40/32/2 шыш 0x80/32/2
  974.         srl a ;x bit 1
  975.          rl h
  976.         add hl,hl
  977.         add hl,hl
  978.         add hl,bc
  979.         add hl,hl
  980.         add hl,hl
  981.         add hl,hl ;y*40+scrbase
  982.          if scrbase&0xff
  983.          add a,scrbase&0xff
  984.          endif
  985. ;a=x/4
  986.         add a,l
  987.         ld l,a
  988.         adc a,h
  989.         sub l
  990.         ld h,a ;hl=scr
  991. ;de=gfx
  992. ;hl=scr
  993.         ld bc,0x1008 ;b=hgt,c=wid (/2)
  994.         call primgega
  995.         pop de
  996.         pop bc
  997.         ret
  998.        endif
  999.  
  1000.        if EGA
  1001. ClearTile_DExy
  1002.         ;ret
  1003. ;E=y
  1004. ;D=x (width 24 if not multiple of 8)
  1005.         push bc
  1006.         push de
  1007.         ld bc,0x1008 ;b=hgt,c=wid (/2)
  1008.         ld a,d ;x
  1009.         and 7
  1010.         jr z,$+4
  1011.          ld c,0x0c ;wid (/2)
  1012.         ld a,d
  1013.         srl a
  1014.         srl a
  1015.         srl a
  1016.          add a,4
  1017.         ld l,e ;y
  1018.         ld h,0
  1019.         ld d,h
  1020.         ld e,l
  1021.         add hl,hl
  1022.         add hl,hl
  1023.         add hl,de ;*5
  1024.          add hl,hl
  1025.          add hl,hl
  1026.          add hl,hl ;*40
  1027.         add a,l
  1028.         ld l,a
  1029.         ld a,h
  1030.         adc a,0x40
  1031.         ld h,a
  1032.         ld de,zeros24x16
  1033. ;de=gfx
  1034. ;hl=scr
  1035.         call primgega
  1036.         pop de
  1037.         pop bc
  1038.         ret
  1039. zeros24x16
  1040.         ds 12*16
  1041.        endif
  1042.  
  1043. readbmphead_pal
  1044.         ld de,bgpush_bmpbuf
  1045.         ld hl,14+2;54+(4*16)
  1046. ;de=buf
  1047. ;hl=size
  1048.         call readstream_file
  1049.         ld de,bgpush_bmpbuf
  1050.         ld hl,(bgpush_bmpbuf+14)
  1051.         dec hl
  1052.         dec hl
  1053. ;de=buf
  1054. ;hl=size
  1055.         call readstream_file
  1056.         ld de,bgpush_bmpbuf
  1057.         ld hl,+(4*16)
  1058. ;de=buf
  1059. ;hl=size
  1060.         call readstream_file
  1061.  
  1062.         ld hl,bgpush_bmpbuf;+54
  1063.         ld ix,pal
  1064.         ld b,16
  1065. recodepal0
  1066.         ld e,(hl)
  1067.         inc hl
  1068.         ld d,(hl)
  1069.         inc hl
  1070.         push hl
  1071.         ld l,(hl) ;e=B, d=G, l=R
  1072.         call readfile_rgbtopal
  1073.         pop hl
  1074.         inc hl
  1075.         inc hl
  1076.         djnz recodepal0
  1077.         ret
  1078.  
  1079.         macro RECOLOR
  1080.         ld a,(de)
  1081.         inc de
  1082.         ld ($+4),a
  1083.         ld a,(trecolor)
  1084.         ld (hl),a
  1085.         endm
  1086. readbmpscr
  1087.         ld hl,0x4000+(199*40)
  1088.         ld b,200
  1089. readbmpscr0
  1090.         push bc
  1091.         push hl
  1092.         ld de,bgpush_bmpbuf
  1093.         ld hl,320/2
  1094. ;de=buf
  1095. ;hl=size
  1096.         push de
  1097.         call readstream_file
  1098.         pop de
  1099.         pop hl
  1100.         push hl
  1101.         ld b,40
  1102. readbmpscr00        
  1103.         RECOLOR
  1104.         ld a,h
  1105.         add a,0x40
  1106.         ld h,a
  1107.         RECOLOR
  1108.         ld a,h
  1109.         add a,0x20-0x40
  1110.         ld h,a
  1111.         RECOLOR
  1112.         ld a,h
  1113.         add a,0x40
  1114.         ld h,a
  1115.         RECOLOR
  1116.         ld a,h
  1117.         sub 0x60
  1118.         ld h,a
  1119.         inc hl
  1120.         djnz readbmpscr00
  1121.         pop hl
  1122.         ld bc,-40
  1123.         add hl,bc
  1124.         pop bc
  1125.         djnz readbmpscr0
  1126.         ret
  1127.  
  1128. readfile_rgbtopal
  1129. ;e=B, d=G, l=R
  1130.         call calcRGBtopal_pp
  1131.         ld (ix+1),a
  1132.         call calcRGBtopal_pp
  1133.         ld (ix),a
  1134.         inc ix
  1135.         inc ix
  1136.         ret
  1137.  
  1138. calcRGBtopal_pp
  1139. ;e=B, d=G, l=R
  1140. ;DDp palette: %grbG11RB(low),%grbG11RB(high), ??oN????N
  1141.         xor a
  1142.         rl e  ;B
  1143.         rra
  1144.         rl l  ;R
  1145.         rra
  1146.         rrca
  1147.         rrca
  1148.         rl d  ;G
  1149.         rra
  1150.         rl e  ;b
  1151.         rra
  1152.         rl l  ;r
  1153.         rra
  1154.         rl d  ;g
  1155.         rra
  1156.         cpl
  1157.         ret
  1158.  
  1159.         align 256
  1160. trecolor
  1161. ;%00003210 => %.3...210
  1162.         dup 256
  1163. _3=$&8
  1164. _210=$&7
  1165. _3L=($>>4)&8
  1166. _210L=($>>4)&7
  1167.         db (_3L*0x08) + (_210L*0x01) + (_3*0x10) + (_210*0x08)
  1168.         edup
  1169.  
  1170. bgpush_bmpbuf
  1171.         ds 320
  1172.  
  1173. res_path
  1174.         db "solkey",0
  1175. bmpfilename
  1176.         db "solkey.bmp",0
  1177.         include "../../_sdk/file.asm"
  1178.  
  1179.         ds 0x3f00-$
  1180.         ds 0x4000-$
  1181.         ;incbin "slabage/sprdata.bin"
  1182. tilegfx=$+0x8000
  1183.         ;incbin "slabage/tiles.bin"
  1184. panelgfx=$+0x8000
  1185.         ;incbin "slabage/panel.bin"
  1186.  
  1187.         ds 0x9300-$
  1188.         include "SOLKEY.asm"
  1189. end
  1190.  
  1191.         display "End=",end
  1192.         ;display "Free after end=",/d,#c000-end
  1193.         display "Size ",/d,end-begin," bytes"
  1194.         savebin "solkey.com",begin,end-begin
  1195.         LABELSLIST "../../../us/user.l"
  1196.