?login_element?

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. ;select word from table
  2. ;by index
  3. ;in A - index HL - table
  4. ;out HL -adress from table
  5.  
  6. sel_word:
  7.         add a,a
  8.         ld c,a
  9.         ld b,0
  10.         add hl,bc
  11.         ld a,(hl)
  12.         inc hl
  13.         ld h,(hl)
  14.         ld l,a
  15.         ret
  16.  
  17. ;hl-src de-dest string limiter -  0
  18. copystr_hlde:
  19.         ld a,(hl)
  20.         and a
  21.         ret z
  22.         ld (de),a
  23.         inc hl
  24.         inc de
  25.         jr copystr_hlde
  26. ;------------------------
  27. oldimer:
  28.         jp int_proc
  29.         jp 0x0038+3
  30.  
  31. ;-setup interrupt
  32. int_set:
  33. int_reset:
  34.         di
  35.         ld de,0x0038
  36.         ld hl,oldimer
  37.         ld bc,3
  38. .swapimer0
  39.         ld a,(de)
  40.         ldi ;[oldimer] -> [0x0038]
  41.         dec hl
  42.         ld (hl),a ;[0x0038] -> [oldimer]
  43.         inc hl
  44.         jp pe,.swapimer0
  45.         ei
  46.         ret
  47.  
  48. int_proc
  49.         EX DE,HL
  50.         EX (SP),HL ;de="hl", т ёЄхъх "de"
  51.         LD (on_int_jp),HL
  52.         LD (on_int_sp),SP
  53.         LD SP,sp_alt
  54.         push af
  55.         push bc
  56.         push de ;"hl"
  57.         exx
  58.         ex af,af'
  59.        push af
  60.        push bc
  61.        push de
  62.        push hl
  63.        push ix
  64.        push iy
  65.  
  66. ;        ld a,1
  67. ;        out (0xfe),a
  68.  
  69.        ld a,(setpalflag)
  70.        or a
  71.        call nz,setpal_proc
  72.  
  73.  
  74.        call oldimer
  75.  
  76. ;       ld a,(setscreenflag)
  77. ;       or a
  78. ;       call nz,setscreen_proc
  79.        GET_KEY
  80.        ld a,c
  81.        ld (keyreg),a
  82.        OS_GETKEYMATRIX
  83.        ld (keymatrixbc),bc
  84.        ld (keymatrixde),de
  85.        ld (keymatrixhl),hl
  86.        ld (keymatrixix),ix
  87.  
  88.  
  89.        ld a,0
  90. wlock equ $-1
  91.        and a      
  92.        CALL nz,anim_wait
  93.  
  94.  
  95.  
  96. ;        ld a,0
  97. ;        out (0xfe),a
  98.  
  99.        ld a,0
  100. screenswapper: equ $-1
  101.        and a
  102.        call nz,switchscreens
  103.  
  104.        pop iy
  105.        pop ix
  106.        pop hl
  107.        pop de
  108.        pop bc
  109.        pop af
  110.        ex af,af'
  111.         exx
  112.         pop hl
  113.         pop bc
  114.         pop af        
  115. on_int_sp=$+1
  116.         ld sp,0
  117.         pop de
  118.         ei
  119. on_int_jp=$+1
  120.         jp 0  
  121.  
  122.  
  123.  
  124. free_s98_file:
  125.  
  126.                ld l,(hl)
  127. free_s98_loop
  128.                 dec l
  129.                 ld e,(hl)
  130.  
  131.                 push af
  132.                 push hl
  133.                 OS_DELPAGE
  134.                 pop hl
  135.                 pop af
  136.                
  137.                 jr nz,free_s98_loop
  138.                                
  139.                                
  140.         ret
  141. no_mus
  142.           ;call setmusicpage
  143.          
  144.  
  145.           //ld a,(plr_page)
  146.           //ld hl,PLR_MUTE
  147.           //OS_SETMUSIC
  148.  
  149.           ld a,(plr_page2)
  150.           ld hl,0x5000
  151.           OS_SETMUSIC          
  152.  
  153.          call set_music_pages
  154.          call PLR_MUTE
  155.          call unset_music_pages
  156.  
  157.           halt
  158.           ret
  159. ;==========================
  160. switchscreens:
  161.         ld e,1
  162. swscrsw equ $-1
  163.         push de
  164.         OS_SETSCREEN
  165.         pop de
  166.         ld a,e
  167.         xor 1
  168.         ld (swscrsw),a
  169.         ret
  170.        
  171. ;---------------------
  172. flg_if_error:
  173.         ld hl,txt_unkflag
  174.         jr openerror
  175. filecreateeerror:
  176.         ld hl,txt_fcreateerror
  177.         jr openerror        
  178. filewriteerror:
  179.         call closestream_file
  180.         ld hl,txt_fwriteerror
  181.         jr openerror
  182. filereaderror:
  183.         call closestream_file
  184.         ld hl,txt_freaderror
  185.         jr openerror
  186. dirchangeerror
  187.         ld hl,txt_dircherror
  188.         jr openerror
  189. fileopenerror
  190.         ld hl,txt_fopenerror
  191. openerror:
  192.         push hl
  193.         ld e,6+0x80
  194.         OS_SETGFX
  195.         ld e,0
  196.         OS_CLS
  197.         pop  hl
  198.         call print_hl
  199.         ld hl,buf
  200.         call print_hl
  201.         ld hl,txt_nl
  202.         call print_hl
  203.         YIELDGETKEYLOOP
  204.         jp cmd_quit
  205.  
  206.  
  207. memoryerror
  208.         OS_CLOSEHANDLE
  209.         ld e,6+0x80
  210.         OS_SETGFX
  211.         ld e,0
  212.         OS_CLS
  213.         ld hl,txt_memoryerror
  214.         call print_hl
  215.         YIELDGETKEYLOOP
  216.         jp cmd_quit
  217.  
  218.  
  219. cmd_quit
  220. ;;      call closestream_file
  221.         ld e,6+0x80
  222.         OS_SETGFX
  223.         call int_reset
  224. ;;       call disablemusic
  225.         QUIT        
  226.  
  227. ;----------------------------------------        
  228. load_mus
  229.  
  230.         ld b,0
  231. old_mus EQU $-1
  232.         cp b
  233.         ret z
  234.         ld (old_mus),a
  235.  
  236.         and a
  237.         jp z,no_mus
  238.  
  239.        
  240.         call calc_mus
  241.  
  242.         call no_mus
  243.         ld hl,t_s98_file00_pages_list+$FF
  244.         call free_s98_file
  245.        
  246.         ;generate path to music file in 'buf'
  247.         ld hl,mus_path1
  248.         ld de,buf
  249.         call copystr_hlde ;'copy path  'mus/' '
  250.        
  251.         ld a,(mus_mode)
  252.         ld hl,mus_modes
  253.         call sel_word
  254.         call copystr_hlde ;copy "aym / s98 path"
  255.         ld hl,mus_path2
  256.         call copystr_hlde ;copy name without ext
  257.        
  258.         ld a,(mus_mode)
  259.         ld hl,plr_ext
  260.         call sel_word
  261.         call copystr_hlde  ;copy file ext
  262.         xor a
  263.         ld (de),a  ;string terminator
  264.  
  265.         ld de,buf
  266.         call openstream_file
  267.         or a
  268.         jp nz,fileopenerror
  269.  
  270.  
  271.         ld hl,t_s98_file00_pages_list
  272.         ld (load_s98_file_number),hl
  273.  
  274.  
  275. /////------        call load_s98_file      ;de=drive/path/file
  276.  
  277. ; чруЁєцрхь Їрщы т ярь Є№
  278. ; ш ёючфрхь ЄрсышЎє
  279.  
  280.                 ;чряюыэ хь ЄрсышЎє ёЄЁрэшЎ Їрщыр
  281.                
  282.                
  283. load_s98_file_number_haddr = $+2 :
  284. load_s98_file_number = $+1 :
  285.                 ld bc,t_s98_file00_pages_list
  286.                 push bc
  287.                                
  288. read_file_loop:
  289.                 OS_NEWPAGE              ;out: a=0 (OK)/!=0 (fail), e=page
  290.                
  291.                 pop bc ;file tab
  292.                                
  293.                 or a
  294.                 jp nz,memory_error
  295.                 ld a,e
  296.                                         ;═╙╞═╬ ╤╫╚╥└╥▄ ╩╬╦╚╫┼╤╥┬╬ ╤╥╨└═╚╓ !!!!
  297.                                         ;╫╥╬┴█ ╧╬╥╬╠ ╬╤┬╬┴╬╞─└╥▄ ╥└┴╦╚╓╙ !!!!
  298.  
  299. 1               ld (bc),a
  300.                 inc c           ;ЄхяхЁ№ эхЄ яЁютхЁъш эр Їрщы√ сюы№°х 4╠ !!!!!
  301.                        
  302.                 push bc ;file tab
  303.                 SETPGC000
  304.        
  305.                 ld de,$C000
  306.                 ld hl,$4000
  307.        
  308.                 call readstream_file    ;DE = Buffer address, HL = Number of bytes to read
  309.                                 ;hl=actual size
  310.                 ld a,h
  311.                 cp $40
  312.                 jr nc,read_file_loop    ;>= $40
  313.        
  314. read_file_exit
  315.  
  316.                 pop bc ;file tab
  317.                 ;ЄєЄ ьюцэю фюёЄрЄ№ ъюышўхёЄтю ёЄЁрэшЎ
  318.                 ld a,c
  319.  
  320.                // sub 16   ; !!!!! яюьэшь ўЄю ёў╕Єўшъ ЁрёЁюЁърхЄё  эх ё 0 р ё+16
  321.  
  322.                 ld c,$FF
  323.                 ld (bc),a
  324.                                
  325. ;-------------------------------------------------------
  326. ; чруЁєчшыш тёх ъєёъш ьєч√ъш.
  327. ;ЄхяхЁ№ эєцэю  ёъюяшЁютрЄ№ яЁт√щ срэъ т plr_page2 ш яЁхёЄш шэшЎшрюш∙рЎш■ яыххЁр
  328. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  329.                 call closestream_file
  330.  
  331.                 call set_music_pages
  332.  
  333.                 ld hl,t_s98_file00_pages_list
  334.                 ld a,(hl)
  335.                 SETPG8000
  336.  
  337.                 ld hl,0x8000
  338.                 ld de,module
  339.                 ld bc,16384
  340.                 ldir
  341.  
  342.                 call unset_music_pages
  343.  
  344.  
  345.                 call set_music_pages
  346.  
  347.  
  348.                 ld hl,t_s98_file00_pages_list
  349.                 ld de,0x8000
  350.                 ld bc,256
  351.                 ldir
  352.  
  353.          ;       DI
  354.  
  355.                 ld hl,module
  356.                 ld (0x4001),hl
  357.                 call PLR_INIT        ;init music
  358.  
  359.           ;      EI
  360.  
  361.  
  362. ;!!!!!!!!!!
  363.  
  364.  
  365.  
  366.  
  367.                 ld a,(plr_page)
  368.                 ld hl,PLR_PLAY
  369.                 OS_SETMUSIC        
  370.  
  371.  
  372.  
  373.                 call unset_music_pages
  374. mus_lkd_e:
  375.                 ret                
  376.  
  377.  
  378. memory_error:
  379.         jp memoryerror
  380. calc_mus:
  381.         call a_to_dec
  382.  
  383.         LD (mus_path2+5),A
  384.         LD A,B
  385.         LD (mus_path2+4),A
  386.         RET        
  387.  
  388. a_to_dec:
  389.         CP 30
  390.         JR C,calc_m0
  391.         SUB 30
  392.         LD B,"3"
  393.         JR calc_mus_f
  394. calc_m0   CP 20
  395.         JR C,calc_m1
  396.         SUB 20
  397.         LD B,"2"
  398.         jr calc_mus_f
  399. calc_m1   CP 10
  400.         JR C,calc_m2
  401.         SUB 10
  402.         LD B,"1"
  403.         JR calc_mus_f
  404. calc_m2   LD B,"0"
  405. calc_mus_f:
  406.          ADD A,"0"
  407.          ret
  408. ;------------------
  409. set_music_pages:
  410.         OS_GETMAINPAGES
  411.         ld a,e
  412.         ld (tbank1),a
  413.         ld a,h
  414.         ld (zbank2),a
  415.         ld a,l
  416.         ld (zbank3),a
  417.  
  418.         ld a,(plr_page)
  419.         SETPG4000
  420.         ld a,(plr_page2)
  421.         SETPG8000
  422.         ld a,(plr_page3)
  423.         SETPGC000
  424.         ret
  425.  
  426. unset_music_pages:
  427.         ld a,(zbank1)
  428.         SETPG4000
  429.         ld a,(zbank2)
  430.         SETPG8000
  431.         ld a,(zbank3)
  432.         SETPGC000
  433.         ret
  434. ;---------------------
  435. setfontpage:
  436.         push af
  437.         push bc
  438.         OS_GETMAINPAGES
  439.         ld a,h
  440.         ld (tbank2),a
  441.         ld a,(font_page)
  442.         SETPG8000
  443.         pop bc
  444.         pop af
  445.         ret
  446.  
  447. unsetfontpage
  448.         ld a,(tbank2)
  449.         SETPG8000
  450.         ret
  451. ;---------------------
  452. store8000c000
  453.         push af
  454.         push bc
  455.         push de
  456.         push hl
  457.         OS_GETMAINPAGES
  458.         ld a,h
  459.         ld (tbank2),a
  460.         ld a,l
  461.         ld (tbank3),a
  462.         pop hl
  463.         pop de
  464.         pop bc
  465.         pop af
  466.         ret
  467.  
  468. restore8000c000
  469.         ld a,(tbank2)
  470.         SETPG8000
  471.         ld a,(tbank3)
  472.         SETPGC000        
  473.         ret
  474. ;========================
  475. storec000
  476.         OS_GETMAINPAGES
  477.         ld a,l
  478.         ld (tbank3),a
  479.         ret
  480.  
  481. restorec000
  482.         ld a,(tbank3)
  483.         SETPGC000        
  484.         ret
  485. ;========================
  486. store8000
  487.         OS_GETMAINPAGES
  488.         ld a,h
  489.         ld (tbank2),a
  490.         ret
  491.  
  492. restore8000
  493.         ld a,(tbank2)
  494.         SETPG8000        
  495.         ret
  496. ;========================
  497.  
  498. getkey
  499.         ld a,(keyreg)
  500.         ret
  501.  
  502.  
  503. waitkey_a
  504.         ld a,1
  505.         ld (wlock),a
  506.         call waitkey
  507.  
  508.         cp key_esc
  509.         jp z,TO_MENU
  510.  
  511. ;        CP "Q"
  512. ;        JR Z,_is_quit
  513. ;        CP "q"
  514. ;        JR Z,_is_quit
  515.  
  516. ;        CP "L"
  517. ;        CALL Z,_ram_load
  518. ;        CP "l"
  519. ;        CALL Z,_ram_load
  520. ;        CP "S"
  521. ;        CALL Z,_ram_save
  522. ;        CP "s"
  523. ;        CALL Z,_ram_save
  524.  
  525.  
  526.         cp NOKEY
  527.         jr z,waitkey_a
  528.  
  529.         push af
  530.         xor a
  531.         ld (wlock),a
  532.         pop af
  533.         ret
  534.  
  535. waitkey
  536.  
  537. waitkey_unpress ;Wait for enter unpress
  538.         ld a,(keymatrixix+1)
  539.         bit 0,a
  540.         jr z,waitkey_unpress
  541. waitkey_loop
  542.         call getkey
  543.         cp NOKEY
  544.         jr z,waitkey_loop
  545. waitkey0
  546.         ld (lastkey),a
  547.         call getkey
  548.         cp NOKEY
  549.         jr nz,waitkey0 ; purge key buffer
  550.         ld a,(lastkey)
  551.         ret
  552.         ;cp key_esc
  553.         ;jp z,cmd_quit
  554.         ;ret
  555. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  556.  
  557.  
  558.  
  559.  
  560. outtype2 db 0   ;"P' Єоб╖сма я╕ис│╝. 'N' тжз я╕иЄ│ли  '8' Є░▒аъ░Н
  561.  
  562.  
  563.  
  564.  
  565.  
  566. cmpr_dehl:
  567.         ld a,(de)
  568.         and a
  569.         ret z   ;string fully equally and dtring in de not begin from 0
  570.  
  571.         cpi
  572.         ret nz
  573.         inc de
  574.         jr cmpr_dehl
  575. ;___________________________________
  576. ;A15    A14     A13     A12     A11     A10      A9      A8
  577. ; G0     R0      B0      G1      1       1       R1      B1
  578.                
  579. ; D7     D6      D5      D4      D3      D2      D1      D0
  580. ; G2     R2      B2      G3      1       1       R3      B3
  581. palette_precalc:
  582.                 ld hl,pal
  583.                 ld de,pal_rgb
  584.  
  585.                 ld b,16
  586. mkpalATM3RGB
  587.                 push bc
  588.                 ld a,(hl)
  589.                 inc hl
  590.                 push hl
  591.                 ld h,(hl)
  592.                 ld l,a
  593.                 push de
  594.                
  595.                 call calchexcolor ;hl=color (DDp palette) ;out: ;b=B, d=R, e=G
  596.        
  597.                 ld a,e ;G
  598.                 add a,a
  599.                 add a,a
  600.                 add a,a
  601.                 add a,a
  602.                 or d ;R
  603.                 pop de
  604.                 ld c,a ;GR
  605.                 ld a,b
  606.                 add a,a
  607.                 add a,a
  608.                 add a,a
  609.                 add a,a
  610.                 ld (de),a ;B0
  611.                 inc de
  612.                 ld a,c
  613.                 ld (de),a ;GR
  614.                 inc de
  615.                 pop hl
  616.                 inc hl
  617.                 pop bc
  618.                 djnz mkpalATM3RGB
  619.                 ret
  620.  
  621. calchexcolor ;hl=color (DDp palette) ;out: ;b=B, d=R, e=G
  622. ;keep c!!!
  623. ;DDp palette: %grbG11RB(low),%grbG11RB(high)
  624. ;high B, high b, low B, low b
  625.                 ld b,0;0xff
  626.                 ld de,0;0xffff
  627.                 ld a,h
  628.                cpl
  629.                 rra
  630.                 rl b ;B high
  631.                 rra
  632.                 rl d ;R high
  633.                 rra
  634.                 rra
  635.                 rra
  636.                 rl e ;G high
  637.                 rra
  638.                 rl b ;b high
  639.                 rra
  640.                 rl d ;r high
  641.                 rra
  642.                 rl e ;g high
  643.                 ld a,l
  644.                cpl
  645.                 rra
  646.                 rl b ;B low
  647.                 rra
  648.                 rl d ;R low
  649.                 rra
  650.                 rra
  651.                 rra
  652.                 rl e ;G low
  653.                 rra
  654.                 rl b ;b low
  655.                 rra
  656.                 rl d ;r low
  657.                 rra
  658.                 rl e ;g low
  659. ;b=B
  660. ;d=R
  661. ;e=G
  662.         ret
  663. ;===================
  664. recolour
  665. ;hl=palfrom (RGB)
  666. ;de=palto (DDp)
  667. ;lx=brightness=0..15
  668.         di
  669.         ld (recoloursp),sp
  670.         ld sp,hl
  671.        ld h,tbright/256 ;once
  672.         ld hx,16
  673. bripalATM3
  674.          ;ld a,(hl) ;B0
  675.          ;inc hl
  676.          ;push hl
  677.          ;ld b,(hl) ;GR
  678.        pop bc
  679.        ld a,c
  680.          ;ld h,tbright/256
  681. ;de=palto
  682. ;h=tbright/256
  683. ;lx=brightness
  684. ;a,b = B0,GR
  685.          add a,lx
  686.         ld l,a
  687.         ld c,(hl) ;B colour component with brightness
  688.         ld a,b
  689.         and 0xf0
  690.          add a,lx
  691.         ld l,a
  692.         ld a,b
  693.         ld b,(hl) ;G colour component with brightness
  694.         add a,a
  695.         add a,a
  696.         add a,a
  697.         add a,a
  698.          add a,lx
  699.         ld l,a
  700.         ld l,(hl) ;R colour component with brightness
  701.  
  702.        ld a,b ;G
  703.        rlca ;g??G???? ;G10
  704.        xor l ;R
  705.        and 0b10010000;0b01000010 ;R10
  706.        xor l;gr?G??R?
  707.        rlca ;r?G??R?g
  708.        xor c ;B
  709.        and 0b10100101;0b01000010 ;B10
  710.        xor c;rbG??RBg
  711.        rrca ;grbG??RB
  712.         or 0b00001100 ;unused bits
  713.         ld (de),a ;low %grbG11RB
  714.         inc de ;TODO ld (),a
  715.  
  716.        ld a,b ;G
  717.        rlca ;?g??G??? ;G32
  718.        xor l ;R
  719.        and 0b01001000;0b00100001 ;R32
  720.        xor l;?gr?G??R
  721.        rlca ;gr?G??R?
  722.        xor c ;B
  723.        and 0b11010010;0b00100001 ;B32
  724.        xor c;grbG??RB
  725.         or 0b00001100 ;unused bits
  726.         ld (de),a ;high %grbG11RB
  727.         inc de ;TODO ld (),a
  728.  
  729.          ;pop hl
  730.          ;inc hl
  731.          dec hx
  732.          jp nz,bripalATM3 ;TODO dup..edup
  733. recoloursp=$+1
  734.         ld sp,0
  735.         ei
  736.         ret
  737. ;===================
  738.   ;#DD #2C      INC  IXL           #FD #2C       INC  IYL
  739.  ; #DD #2D      DEC  IXL
  740.  
  741. fade_toblack:
  742.         ;dec lx
  743.         ld hl,0x2ddd
  744.         xor a
  745.         jr fade_to
  746. fade_towhite:
  747.         ;inc lx
  748.         ld a,15
  749.         ld hl,0x2cdd
  750. fade_to:        
  751.         ld (fade_tocolor),a
  752.         ld (fade_to_op),hl
  753.  
  754.         ld hl,pal
  755.         ld de,temppal
  756.         ld bc,32
  757.         ldir        ;;
  758.  
  759.         call palette_precalc
  760.  
  761.         ld lx,8
  762. fade0
  763.         dec lx
  764. fade_to_op: equ $-2        
  765.         ld hl,pal_rgb
  766.         ld de,pal
  767.         call recolour
  768.         push ix
  769.  
  770.         ld a,1
  771.         ld (setpalflag),a
  772.  
  773.         halt
  774.         halt
  775.         halt
  776.         pop ix
  777.         ld a,lx
  778.         cp 0
  779. fade_tocolor: equ $-1
  780.         jr nz,fade0
  781.         halt
  782.         halt
  783.         halt
  784.         ret
  785.  
  786.  
  787. fade_fromblack:
  788.         ;inc lx
  789.         ld hl,0x2cdd
  790.         xor a
  791.         jr fade_from
  792. fade_fromwhite:
  793.         ;dec lx
  794.         ld a,15
  795.         ld hl,0x2ddd
  796. fade_from:
  797.         ld (fade_fromcolor),a
  798.         ld (fade_from_op),hl
  799.  
  800.  
  801.         ld hl,pal
  802.         ld de,temppal
  803.         ld bc,32
  804.         ldir        ;;
  805.  
  806.  
  807.         call palette_precalc
  808.  
  809.         ld lx,15
  810. fade_fromcolor: equ $-1
  811.  
  812.  
  813. fadew1:
  814.         dec lx
  815. fade_from_op: equ $-2
  816.         ld hl,pal_rgb
  817.         ld de,pal
  818.         call recolour
  819.         push ix
  820.  
  821.         ld a,1
  822.         ld (setpalflag),a
  823.  
  824.         halt
  825.         halt
  826.         halt
  827.         pop ix
  828.         ld a,lx
  829.         cp 8
  830.         jr nz,fadew1
  831.         halt
  832.         halt
  833.         halt
  834.  
  835.         ld hl,temppal
  836.         ld bc,32
  837.         ld de,pal
  838.         ldir
  839.         ld a,1
  840.         ld (setpalflag),a
  841.         halt
  842.         ret
  843.  
  844. clear_ovlnamebuf:
  845.         push hl
  846.         push bc
  847.         push de
  848.         ld hl,ovlnamebuf
  849.         ld de,ovlnamebuf+1
  850.         ld bc,127
  851.         ld (hl),0
  852.         ldir
  853.         pop de
  854.         pop bc
  855.         pop hl
  856.         ret
  857. ;;;;;;;;;;;;;;;;;;;;;
  858. clear_txt_buff:
  859.         push bc,de
  860.         xor a
  861.         ld b,0
  862.         ld de,txt_buff
  863. .lp1
  864.         ld (de),a
  865.         inc de
  866.         djnz .lp1
  867.         pop de,bc
  868.         ret
  869.  
  870. ;---
  871. _print_txt_buf_p:
  872.             push bc,hl,af
  873.                     ld hl,txt_buff
  874.                     call _type_txt_buf_p
  875.                     call clear_txt_buff
  876.             pop af,hl,bc
  877.             ret
  878. ;;;
  879. _type_txt_buf_p:
  880.             ld c,1
  881. .l1
  882.             ld a,(hl)
  883.             and a
  884.             ret z
  885.             push hl
  886.             call _type_p
  887.  
  888.  
  889. .debb:
  890.             ld hl,COORDS_P
  891.             ld a,(COORDS_P_L)
  892.             cp (hl)
  893.             jr z,.debb2
  894.             jr c,.debb2
  895.             jr .debb0
  896. .debb2:
  897.             call _linefeed
  898. .debb0:            
  899.             pop hl
  900.             inc hl
  901.             jr .l1
  902.  
  903. ;;;;;
  904. ; clear_loaded_spr1:
  905. ;             ld hl,loadedSpr1
  906. ;             jr clr_loaded_name
  907. ; clear_loaded_spr2:
  908. ;             ld hl,loadedSpr2
  909. ;             jr clr_loaded_name
  910. ; clear_loaded_spr3:
  911. ;             ld hl,loadedSpr3
  912. ;             jr clr_loaded_name
  913. clear_loaded_cg:
  914.             ld hl,loadedCg
  915. clr_loaded_name:
  916.             ld (hl),0
  917.             ret
  918. ;;;;;
  919. clear_all_stored_names:
  920.                 call clear_loaded_cg
  921. ; clear_all_stored_names_spr:
  922. ;                 call clear_loaded_spr1
  923. ;                 call clear_loaded_spr2
  924. ;                 call clear_loaded_spr3
  925.  
  926.                 ret
  927. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  928.                       ;L=C/B:
  929. DIVIS   XOR A         ;юсэєыхэшх  Єхъє∙хую  юё-
  930.                       ;ЄрЄър
  931. DIVIS2  LD L,#01      ;ёўхЄўшъ (ёфтшу 8 Ёрч)
  932. D1      RL C          ;ўЄхэшх Єхъє∙хую ЁрчЁ фр
  933.         RLA           ;эръюяшЄхы№ ЁрчЁ фют
  934.         CP B          ;ъръющ Ёхчєы№ЄрЄ Єхъє∙хую
  935.                       ;ЁрчЁ фр
  936.         JR C,ZER      ;яхЁхїюф,хёыш Єхъє∙шщ
  937.                       ;ЁрчЁ ф=0
  938.         SUB B         ;Єхъ.ЁрчЁ ф=1,ёэ Єшх ё
  939.                       ;эръюяшЄхы 
  940.         SLI L         ;чрэхёхэшх ЁрчЁ фр=1
  941.         JR NC,D1      ;яхЁхїюф,хёыш ёўхЄўшъ эх
  942.                       ;яхЁхяюыэшыё 
  943.         RET           ;т√їюф
  944. ZER     SLA L         ;чрэхёхэшх ЁрчЁ фр=0
  945.         JR NC,D1      ;яхЁхїюф,хёыш ёўхЄўшъ эх
  946.                       ;яхЁхяюыэшыё 
  947.         RET           ;т√їюф
  948. ;;;;;;;;;;;;;;;;;;
  949. copy_screen_to_loadbuf:
  950.         call store8000c000
  951.  
  952.         ld a,(load_buf1)
  953.         SETPG8000
  954.  
  955.         ld a,(user_scr0_low)
  956.         SETPGC000
  957.  
  958.         ld hl,0xc000+320
  959.         ld de,0x8000
  960.         ld bc,16384-320
  961.         ldir
  962.  
  963.         ld a,(load_buf2)
  964.         SETPG8000
  965.         ld a,(user_scr0_high)
  966.         SETPGC000
  967.         ld hl,0xc000+320
  968.         ld de,0x8000
  969.         ld bc,16384
  970.         ldir
  971.  
  972.         jp restore8000c000
  973.  
  974.  
  975. _s_pntr_goto: dw 0
  976. _s_pntr_vv: dw 0
  977. _cm_pntr_vv: dw 0
  978. _c_counter db 0
  979. _fill_sc_com_tables:
  980.         push hl
  981.         ld hl,CM1
  982.         ld (_cm_pntr_vv),hl
  983.         ld hl,S1
  984.         ld (_s_pntr_vv),hl
  985.         ld hl,S1+6
  986.         ld (_s_pntr_goto),hl
  987.         ld a,0x01
  988.         ld (_c_counter),a
  989.         pop hl
  990. .fill_tbl_lp:
  991.         ld c,(hl)
  992.         inc hl
  993.         ld b,(hl)
  994.         inc hl
  995.         ld a,c
  996.         cp 0xff
  997.         jr nz,.its_not_eom
  998.         ld a,b
  999.         cp 0xff
  1000.         jr z,.its_eom
  1001. ;definitely end of menu setup
  1002. .its_not_eom
  1003.         push hl
  1004.                 ld hl,(_s_pntr_goto)
  1005.                 ld (hl),c
  1006.                 inc hl
  1007.                 ld (hl),b
  1008.                 ld bc,7
  1009.                 add hl,bc
  1010.                 ld (_s_pntr_goto),hl
  1011.         pop hl
  1012.         push hl
  1013.           push hl
  1014.             push hl
  1015.             pop bc
  1016.               ld hl,(_cm_pntr_vv)
  1017.               ld (hl),c
  1018.               inc hl
  1019.               ld (hl),b
  1020.               ld bc,3
  1021.               add hl,bc
  1022.               ld (_cm_pntr_vv),hl
  1023.           pop bc
  1024.             ld hl,(_s_pntr_vv)
  1025.             ld (hl),c
  1026.             inc hl
  1027.             ld (hl),b
  1028.             ld bc,7
  1029.             add hl,bc
  1030.             ld (_s_pntr_vv),hl
  1031.         pop hl
  1032.         ld de,buf
  1033.         call copystr_hlde
  1034.         inc hl
  1035.  
  1036.         ld a,(_c_counter)
  1037.         inc a
  1038.         ld (_c_counter),a
  1039.  
  1040.         jr .fill_tbl_lp
  1041. .its_eom
  1042.         push hl
  1043.         ld a,0xff
  1044.         ld hl,(_cm_pntr_vv)
  1045.         ld (hl),a
  1046.         inc hl
  1047.         ld (hl),a
  1048.         ld (_cm_pntr_vv),hl
  1049.         ld hl,(_s_pntr_vv)
  1050.         ld (hl),a
  1051.         inc hl
  1052.         ld (hl),a
  1053.         ld (_s_pntr_vv),hl
  1054.        
  1055.  
  1056.  
  1057.         ;deactivate unused dialogue
  1058.         ld a,(_c_counter)
  1059.         ld l,0xf0-1
  1060.         add a,l
  1061.         ld l,a
  1062.         ld h,high GLOBVARS
  1063. .f_dlg_lp:
  1064.          ld (hl),0
  1065.          inc l
  1066.          ld a,l
  1067.          cp 0xf8
  1068.          jr nc,.f_dlg_lp
  1069.          pop hl
  1070.          ret
  1071.  
  1072.  
  1073. _precache_menu:
  1074. _precache:
  1075.         LD IX,ILINK
  1076.  
  1077.         LD A,1
  1078.         LD (MM),A
  1079.         LD (SM),A
  1080.  
  1081.         ld hl,COMTBL
  1082.         LD (TREEE),HL      ;hl = COMTBL table
  1083.         ld hl,SCTBL    
  1084.         LD (STRUCTURE),hl    ;DE = SCTBL table
  1085.  
  1086. PRECAH:
  1087.         LD HL,(TREEE)
  1088.  
  1089. PRECAH1:                   ;яхЁхсшЁрхь чряшёш т COMTBL
  1090.         LD E,(HL)
  1091.         INC HL
  1092.         LD D,(HL)
  1093.  
  1094.         ld a,e
  1095.         cp 0xff
  1096.         jr nz,precah1a
  1097.         ld a,d
  1098.         cp 0xff
  1099.         ret z  ;END OF TREE - end of COMTBL
  1100.  
  1101.  
  1102. precah1a:
  1103.         ; яюыєўшыш рфЁхё юяшёрЄхы  Єхъє∙хую яєэъЄр ьхэ■ т ЄрсышЎх CM
  1104.  
  1105.         LD A,(DE)
  1106.         LD (STORE),A  
  1107.  
  1108.         INC DE
  1109.         LD A,(DE)
  1110.         LD (STORE+1),A ;яюыєўшыш ш ёюїЁрэшыш рфЁхё Ёрёяюыюцхэш  эюьхЁр Єхъє∙хую яєэъЄр ьхэ■ ш хую эршьхэютрэш . (num + name + eol(0))
  1111.  
  1112.         ld a,(STORE)
  1113.         cp 0xff
  1114.         jr nz,precah1b
  1115.         ld a,(STORE+1)
  1116.         cp 0xff
  1117.         ret z
  1118.  
  1119.  
  1120. precah1b
  1121.         INC DE
  1122.         LD A,(DE)
  1123.         INC A
  1124.         JR NZ,precah2   ;хёыш хёЄ№ яюфьхэ■ яхЁхїюфшь эр PRECAH2
  1125.         INC DE
  1126.         LD A,(DE)
  1127.         INC A
  1128.         JR Z,precah3 ;;хёыш эхЄ яюфьхэ■ яхЁхїюфшь эр PRECAH3
  1129.         DEC DE
  1130.  
  1131. precah2:
  1132.          LD A,(DE)  ;юсЁрсрЄ√ттрхь яюфьхэ■ Єхъє∙хую яєэъЄр ьхэ■.
  1133.         LD (STORE1),A
  1134.         INC DE
  1135.         LD A,(DE)
  1136.         LD (STORE1+1),A
  1137.         DEC DE
  1138.         PUSH DE
  1139.         LD A,4
  1140.         CALL SEARCHING
  1141.         LD A,1    ;яш°хь т ILINK  .эюьхЁ яєэъЄр ьхэ■ (эрў ё 1),
  1142. MM      EQU $-1  
  1143.         LD (IX),A
  1144.         INC IX
  1145.         LD A,1
  1146. SM      EQU $-1
  1147.         LD (IX),A
  1148.         INC IX
  1149.         LD (IX),L
  1150.         INC IX
  1151.         LD (IX),H
  1152.         INC IX
  1153.         LD A,(SM)
  1154.         INC A
  1155.         LD (SM),A
  1156.         POP DE
  1157.         INC DE,DE
  1158.         LD A,(DE)
  1159.         INC A
  1160.         JR NZ,precah2
  1161.         INC DE
  1162.         LD A,(DE)
  1163.         DEC DE
  1164.         INC A
  1165.         JR NZ,precah2
  1166.  
  1167. precah4:
  1168.         LD A,1
  1169.         LD (SM),A
  1170.         LD HL,MM
  1171.         INC (HL)          ;єтхышўштрхь ёў╕Єўшъ эюьхЁр Єхъє∙хую яєэъЄр уыртэюую ьхэ■ эр 1
  1172.         LD HL,0
  1173. TREEE:   EQU $-2
  1174.         INC HL,HL
  1175.         LD (TREEE),HL    ;яхЁхїюфшь ъ ёыхфє■∙хьє ¤ыхьхэЄє ЄрсышЎ√ COMTBL
  1176.  
  1177.         JP PRECAH
  1178. precah3:
  1179.         LD HL,#FFFF
  1180.         LD (STORE1),HL ;яюьхЄшыш ўЄю яюфьхэ■ эхЄ чряшёрт т єърчрЄхы№ эр яюшёъ яю яюфьхэ■ -1
  1181.         LD A,2
  1182.         CALL SEARCHING
  1183.         LD A,(MM)           ;яш°хь т ILINK  .эюьхЁ яєэъЄр ьхэ■ (эрў ё 1),
  1184.         LD (IX),A
  1185.         INC IX
  1186.         XOR A
  1187.         LD (IX),A            ;яюфьхэ■ - 0 (ЄёєЄёЄтє■Є)
  1188.         INC IX
  1189.         LD (IX),L
  1190.         INC IX
  1191.         LD (IX),H            ;рфЁхё т SCTBL
  1192.         INC IX
  1193.         JR precah4
  1194. STORE:   DW 0
  1195. STORE1:  DW 0
  1196.  
  1197. SEARCHING:              ;ш∙хЄ ёюярфхэшх vv рфЁхёр шч s юяшёрЄхыхщ SCTBL ё рэрыюушўэ√ь єърчрЄхыхь vv шч COMTBL
  1198.           LD (SEAR2-1),A
  1199.           LD HL,0
  1200. STRUCTURE: EQU $-2           ; hl= SCTBL adress
  1201. SEAR1:
  1202.         PUSH HL
  1203.          LD E,(HL)
  1204.         INC HL
  1205.         LD D,(HL)
  1206.         LD HL,STORE
  1207.         LD B,4
  1208. SEAR2:
  1209.         LD A,(DE)
  1210.         CP (HL)
  1211.         JR NZ,SEAR3
  1212.         INC DE
  1213.         INC HL
  1214.         DJNZ SEAR2
  1215.         POP HL
  1216.         RET
  1217. SEAR3:
  1218.         POP HL
  1219.         INC HL,HL
  1220.         JR SEAR1
  1221.  
  1222.  
  1223. _menu:
  1224.         ;clear stk_menu
  1225.         ld hl,STK_MENU
  1226.         ld de,STK_MENU+1
  1227.         ld bc,254
  1228.         ld (hl),0xff
  1229.         ldir
  1230.  
  1231.  
  1232.         ld h,high GLOBVARS
  1233.         ld l,0xf0  ;
  1234.         ld (ACTTMP),hl ;menu availablity (0 - menu active 1-inactive)
  1235.  
  1236.         ld hl,STK_MENU
  1237.         ld (STK_MTMP),hl
  1238.  
  1239.         xor a
  1240.         ld (COUNTER),a ;....
  1241.  
  1242.         ld hl,txt_coor
  1243.         ld (g_atpos),hl   ;...
  1244.  
  1245.  
  1246.         ld hl,COMTBL
  1247.  
  1248. _menu1:
  1249.         ld e,(hl)
  1250.         inc hl
  1251.         ld d,(hl)
  1252.         inc hl
  1253.  
  1254.         ld a,d
  1255.         or e
  1256.         jp z,SELECTOR ;no menu tree  JUMP to SELECTOR if all elements of COMTBL used
  1257.  
  1258.         ld a,e
  1259.         cp 0xff
  1260.         jr nz,_menu2a
  1261.         ld a,d
  1262.         cp 0xff
  1263.         jp z,SELECTOR ;no menu tree  JUMP to SELECTOR if all elements of COMTBL used  
  1264. _menu2a:
  1265.         ld a,(de)
  1266.         cp 0xff
  1267.         jr nz,_menu2
  1268.         inc de
  1269.         ld a,(de)
  1270.         cp 0xff
  1271.         jp z,SELECTOR
  1272.         dec de
  1273.  
  1274. _menu2:
  1275.  
  1276.         push hl
  1277.         ld bc,0
  1278. ACTTMP: equ $-2
  1279.  
  1280.         LD A,(BC)
  1281.         LD B,A
  1282.         LD  A,C
  1283.         inc a
  1284.         LD (ACTTMP),A
  1285.         LD A,B
  1286.         AND A
  1287.         JP z,_menu5     ;NOT ACTIVE
  1288. ;        LD A,#40
  1289. ;        ADD A,D
  1290. ;        LD D,A
  1291.         LD HL,0
  1292. STK_MTMP: EQU $-2
  1293.         LD A,(COUNTER)
  1294.         LD (HL),A
  1295.         INC HL
  1296.         LD (HL),E
  1297.         INC HL
  1298.         LD (HL),D
  1299.         INC HL
  1300.         LD (STK_MTMP),HL ;
  1301.         LD (HL),#FF
  1302.         EX DE,HL
  1303.         LD E,(HL)
  1304.         INC HL
  1305.         LD D,(HL)
  1306.  ;       LD A,#40
  1307.  ;       ADD A,D
  1308.  ;       LD D,A
  1309.  ;       INC DE ;SKIP MENUNAME NUM
  1310.         EX DE,HL
  1311.  
  1312.  
  1313.         LD BC,(g_atpos)
  1314.         CALL _pradd_p
  1315.  
  1316.  
  1317.         call _type_txt_buf_p
  1318.  
  1319. ;  horisontal menu
  1320. ;        LD A,(g_atpos) ;x-coord
  1321. ;        add a,20
  1322. ;        ld (g_atpos),a
  1323. ;
  1324. ;        cp print_p_len
  1325. ;        jr c,_menu5
  1326. ;
  1327. ;        and 0x3f
  1328. ;        LD (g_atpos),A
  1329. ;
  1330. ;        ld a,(g_atpos+1)
  1331. ;        inc a
  1332. ;        ld (g_atpos+1),a
  1333.  
  1334.  
  1335.  
  1336.  
  1337. ;vertical menu
  1338.         LD a,(g_atpos+1)
  1339.         inc a
  1340.         ld (g_atpos+1),a
  1341.         cp 24
  1342.         jr nz,_menu5
  1343.        
  1344.  
  1345.         ld bc,txt_coor2
  1346.         ld (g_atpos),bc
  1347.  
  1348.  
  1349.  
  1350.  
  1351. _menu5
  1352.  
  1353.         LD A,0
  1354. COUNTER EQU $-1
  1355.         INC A
  1356.         LD (COUNTER),A
  1357.         POP HL
  1358.         JP _menu1
  1359.  
  1360.  
  1361. SELECTOR:
  1362.         LD DE,STK_MENU
  1363.         LD A,(g_curpos)
  1364.         LD L,A
  1365.         ADD A,A
  1366.         ADD A,L
  1367.         LD L,A
  1368.         LD H,0
  1369.         ADD HL,DE
  1370.         EX DE,HL
  1371.  
  1372. SELS0:
  1373.         LD A,(g_curpos)
  1374.         ld hl,MENUCURHELPER
  1375.         call sel_word
  1376.         ld (SELS4),hl
  1377.  
  1378.         CALL show_hand
  1379.  
  1380. SELS3:
  1381.         call waitkey
  1382.  
  1383.    ;     cp key_esc
  1384.    ;     jp z,TO_MENU
  1385.  
  1386.       ;  cp key_left
  1387.       ;  jr z,SELS_keyleft
  1388.       ;  cp key_right
  1389.       ;  jp z,SELS_keyright
  1390.  
  1391.         cp key_up
  1392.         jr z,SELS_keyup
  1393.         cp key_down
  1394.         jr z,SELS_keydown
  1395.  
  1396.         cp key_enter
  1397.         jp z,SELECTED1
  1398.         cp ' '
  1399.         jp z,SELECTED1
  1400.         jr SELS3      
  1401.  
  1402.  
  1403. SELS_keyup:
  1404. ;        ;de - modified pos in stk_menu
  1405. ;
  1406.         push de        
  1407.         pop hl
  1408.         ld bc,STK_MENU
  1409.         and a
  1410.         SBC HL,BC
  1411.         ld  a,h
  1412.         or l
  1413.         jp z,SELS3
  1414.         ex de,hl
  1415.         ld bc,3
  1416.         and a
  1417.  
  1418.         sbc hl,bc
  1419.  
  1420.         ex de,hl
  1421.  
  1422.         call restore_hand
  1423.         ld hl,g_curpos
  1424.         dec (hl)
  1425.         xor a
  1426.         ld (g_curpos+1),a
  1427.         jp SELS0
  1428.  
  1429.  
  1430. SELS_keydown:
  1431.         ;de - modified pos in stk_menu
  1432.         push de
  1433.         pop hl
  1434.         ld bc,3
  1435.         add hl,bc
  1436.         ld a,(hl)
  1437.         inc a
  1438.         jp  z,SELS3
  1439.         ex de,hl
  1440.  
  1441.         call restore_hand
  1442.  
  1443.         ld hl,g_curpos
  1444.         inc (hl)      
  1445.         xor a
  1446.         ld (g_curpos+1),a        
  1447.         jp SELS0
  1448.  
  1449.  
  1450.         jp $
  1451. SELS4:  dw 0
  1452.  
  1453. SELECTED1:
  1454.         call restore_hand
  1455.  
  1456.         ld a,(de)
  1457.         LD (RESULT),A
  1458.         inc de
  1459.         ld a,(de)
  1460.         ld l,a
  1461.         inc de
  1462.         ld a,(de)
  1463.         ld h,a
  1464.         inc hl
  1465.         inc hl
  1466.  
  1467.         ld e,(hl)
  1468.         inc hl
  1469.         ld d,(hl)
  1470.  
  1471.         inc de
  1472.  
  1473.         ld a,d
  1474.         or e
  1475.         jr z,SELECTOR2
  1476.  
  1477.         ;error in menu. hang game
  1478.         jp $
  1479. SELECTOR2:
  1480.         LD H,0xff
  1481.         ld l,0
  1482. RESULT: EQU $-1
  1483.         INC H
  1484.         INC L
  1485.         RET
  1486.         ;push de
  1487.         ;call WINCLR2
  1488.         ;pop de
  1489.         ;ret
  1490.  
  1491. ;in a - number de - string        
  1492. convA:        
  1493.         ld      c,-100
  1494.         call    Na1
  1495.         ld      c,-10
  1496.         call    Na1
  1497.         ld      c,-1
  1498. Na1:    ld      b,'0'-1
  1499. Na2:    inc     b
  1500.         add     a,c
  1501.         jr      c,Na2
  1502.         sub     c               ;works as add 100/10/1
  1503.         push af         ;safer than ld c,a
  1504.         ld      a,b             ;char is in b
  1505.         ;CALL    PUTCHAR ;plot a char. Replace with bcall(_PutC) or similar.
  1506.  
  1507.         ld (de),a
  1508.         inc de
  1509.  
  1510.         pop af          ;safer than ld a,c
  1511.         ret
  1512. redraw_border_sub:
  1513.         jp update_satus_bar
  1514.  
  1515. print_loaded:
  1516.         ret ;!!!!
  1517.         ld bc,0x001d
  1518.         call _pradd_p
  1519.         ld hl,LOADED
  1520.         jp _type_txt_buf_p
  1521.  
  1522.  
  1523. print_excite:
  1524.         ld bc,0x0000
  1525.         call _pradd_p
  1526.  
  1527.         ld a,(language)
  1528.         ld hl,loc_excite
  1529.         call sel_word    ;hl - point to localized name
  1530.         call _type_txt_buf_p
  1531.  
  1532.  
  1533.         ld h,HIGH GLOBVARS
  1534.         ld l,201
  1535.         ld a,(hl)
  1536.         ld de,excite_nums
  1537.         call convA
  1538.  
  1539.         ld hl,excite_nums
  1540.         jp _type_txt_buf_p    
  1541.        
  1542.  
  1543. print_day:
  1544.         ld bc,0x0028
  1545.         call _pradd_p        
  1546.  
  1547.         ld h,HIGH GLOBVARS
  1548.         ld l,2
  1549.         ld a,(hl)        
  1550.         ld hl,daylist
  1551.         call sel_word
  1552.         ld a,(language)
  1553.         call sel_word
  1554.  
  1555.         jp _type_txt_buf_p    
  1556.  
  1557. print_lamp_post:
  1558.                 ld bc,0x0018
  1559.                 call _pradd_p
  1560.  
  1561.                 ld hl,lamp_def
  1562.                 ld de,lamps
  1563.                 call copystr_hlde
  1564.  
  1565.                 ld h,HIGH GLOBVARS
  1566.                 ld l,7
  1567.                 ld a,(hl)
  1568.                 and a
  1569.                 jr z,.op_skip
  1570.                 jr nc,.op3
  1571.                 xor a
  1572.                 jr .op_skip
  1573. .op3:                
  1574.                 cp 5
  1575.                 jr c,.op4
  1576.                 ld a,4
  1577.  
  1578. .op4:
  1579.                 ld de,lamps+1
  1580.                 ld b,a
  1581.                 ld a,"X"
  1582. .op0:
  1583.                 ld (de),a
  1584.                 inc de
  1585.                 djnz .op0
  1586. .op_skip:
  1587.                 ld hl,lamps
  1588.                 jp _type_txt_buf_p
  1589.  
  1590. ;-----------
  1591. TO_MENU:
  1592.         pop hl,hl
  1593. TO_MENU1:
  1594.         xor a
  1595.         ld (wlock),a
  1596.  
  1597.  
  1598.         ld a,2
  1599.         ld (_ingame_m_downlimit),a
  1600.  
  1601.         ld hl,loc_m1_menu
  1602.         ld de,menu_m1_action
  1603.         jr _ingame_menu_mnu
  1604.  
  1605. _ingame_menu_mnu:
  1606.  
  1607.         push hl
  1608.         push de
  1609.  
  1610.         CALL WINCLR2
  1611.  
  1612.  
  1613.         ld hl,txt_coor
  1614.         LD (_mnpos),HL
  1615.  
  1616.         xor a
  1617.         ld (_ingame_m_curpos),a
  1618.         pop de
  1619.         pop hl
  1620.  
  1621.         push de
  1622.         ld a,(language)
  1623.         call sel_word
  1624.         call _prt_menu
  1625.  
  1626.         call _sel_ingame_menu
  1627.  
  1628.         pop hl
  1629.  
  1630.         cp 0xff
  1631.         jp z,TO_MENU_ESC
  1632.         call sel_word
  1633.         jp (hl)
  1634.  
  1635. _confirm_quit:
  1636.         ld a,1
  1637.         ld (_ingame_m_downlimit),a
  1638.  
  1639.         ld  hl,loc_m2_menu
  1640.         ld  de,menu_m2_action
  1641.         jp _ingame_menu_mnu
  1642. _ram_save:
  1643.         ld a,3
  1644.         ld (_ingame_m_downlimit),a
  1645.  
  1646.         ld  hl,loc_save_menu_ingame
  1647.         ld  de,loc_save_menu_ingame_action
  1648.         jp _ingame_menu_mnu
  1649. _ram_load:
  1650.         ld a,3
  1651.         ld (_ingame_m_downlimit),a
  1652.        
  1653.         ld  hl,loc_load_menu_ingame
  1654.         ld  de,loc_load_menu_ingame_action
  1655.         jp _ingame_menu_mnu
  1656.  
  1657.  
  1658.  
  1659. _save_slot_1:
  1660.         ld a,1
  1661.         jr _save_slot
  1662. _save_slot_2:
  1663.         ld a,2
  1664.         jr _save_slot
  1665. _save_slot_3:
  1666.         ld a,3
  1667.         jr _save_slot
  1668. _save_slot_4:
  1669.         ld a,4
  1670. _save_slot:
  1671.         add a,"0"
  1672.         ld (SAVETEMPL_N),a
  1673.  
  1674.  
  1675. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1676.         ;create 'screenshot'
  1677.         call copy_screen_to_loadbuf
  1678.  
  1679.  
  1680.  
  1681. _retry_save:
  1682.         ld de,SAVETEMPL
  1683.         call openstream_file
  1684.         or a
  1685.         jp z,_save_slot_is_present
  1686.         ; we should create file here
  1687.  
  1688.          LD DE,SAVETEMPL
  1689.          OS_CREATEHANDLE
  1690.          OR A
  1691.          JP NZ,filecreateeerror
  1692.          ld a,b
  1693.          ld (filehandle),a
  1694.  
  1695. _save_slot_is_present:
  1696.  
  1697. ; take screenshot
  1698.          call storec000
  1699.                 ld a,(load_buf1)
  1700.                 SETPGC000
  1701.                 ld hl,16384 ;len
  1702.                 ld de,0xc000 ;addr
  1703.                 call savestream_file
  1704.                 or a
  1705.                 jp nz,filewriteerror
  1706.  
  1707.                 ld a,(load_buf2)
  1708.                 SETPGC000
  1709.                 ld hl,16384 ;len
  1710.                 ld de,0xc000 ;addr
  1711.                 call savestream_file
  1712.                 or a
  1713.                 jp nz,filewriteerror
  1714.         call restorec000
  1715. ;save palette
  1716.         ld hl,32 ;len
  1717.         ld de,pal ;addr
  1718.         call savestream_file
  1719.         or a
  1720.         jp nz,filewriteerror
  1721. ;save globals
  1722.         ld hl,256 ;len
  1723.         ld de,GLOBVARS ;addr
  1724.         call savestream_file
  1725.         or a
  1726.         jp nz,filewriteerror
  1727. ;save loadedCg
  1728.         ld hl,32 ;len
  1729.         ld de,loadedCg ;addr
  1730.         call savestream_file
  1731.         or a
  1732.         jp nz,filewriteerror
  1733. ;save loaded ovl
  1734.         ld hl,32 ;len
  1735.         ld de,LOADED ;addr
  1736.         call savestream_file
  1737.         or a
  1738.         jp nz,filewriteerror
  1739.  
  1740. ;save text_pointer
  1741.         ld hl,2 ;len
  1742.         ld de,text_pointer ;addr
  1743.         call savestream_file
  1744.         or a
  1745.         jp nz,filewriteerror
  1746. ;save text_pointer need redraw border&
  1747.         ld hl,1 ;len
  1748.         ld de,redraw_border ;addr
  1749.         call savestream_file
  1750.         or a
  1751.         jp nz,filewriteerror
  1752. ;current music
  1753.         ld hl,1 ;len
  1754.         ld de,old_mus ;addr
  1755.         call savestream_file
  1756.         or a
  1757.         jp nz,filewriteerror
  1758.  
  1759.         call closestream_file    
  1760.  
  1761.  
  1762.         jp TO_MENU1
  1763.  
  1764.  
  1765.  
  1766. _load_slot_1:
  1767.         ld a,1
  1768.         jr _load_slot_o
  1769. _load_slot_2:
  1770.         ld a,2
  1771.         jr _load_slot_o
  1772. _load_slot_3:
  1773.         ld a,3
  1774.         jr _load_slot_o
  1775. _load_slot_4:
  1776.         ld a,4
  1777.         jr _load_slot_o
  1778. _load_slot_5:
  1779.         ld a,5
  1780. _load_slot_o:
  1781.         add a,"0"
  1782.         ld (SAVETEMPL_N),a
  1783.  
  1784.         ld de,SAVETEMPL
  1785.         call openstream_file
  1786.         or a
  1787.         jp nz,TO_MENU1
  1788.  
  1789.         jp _load_common
  1790.  
  1791.  
  1792.  
  1793. ;------------------------------------
  1794.  
  1795. _sel_ingame_menu:
  1796.         ld a,0
  1797. _ingame_m_curpos equ $-1
  1798.         ld hl,MENUCURHELPER
  1799.         call sel_word
  1800.         ld (SELS4),hl
  1801.  
  1802.         CALL show_hand
  1803. _sel_ingame_SELS3:        
  1804.         call waitkey
  1805.  
  1806.         cp key_esc
  1807.         jp z,_sel_ingame_esc
  1808.  
  1809.         cp key_up
  1810.         jr z,_sel_ingame_SELS_keyup
  1811.         cp key_down
  1812.         jr z,_sel_ingame_SELS_keydown
  1813.  
  1814.         cp key_enter
  1815.         jr z,_sel_ingame_SELECTED
  1816.         cp ' '
  1817.         jr z,_sel_ingame_SELECTED
  1818.         jr _sel_ingame_SELS3        
  1819.  
  1820. _sel_ingame_esc:
  1821.         call restore_hand
  1822.         ld a,0xff
  1823.         ret
  1824. _sel_ingame_SELS_keyup:
  1825.         call restore_hand
  1826.  
  1827.         ld hl,_ingame_m_curpos
  1828.         ld a,(hl)
  1829.         and a
  1830.         jp z,_sel_ingame_menu
  1831.         dec (HL)
  1832.         jp _sel_ingame_menu
  1833.  
  1834. _sel_ingame_SELS_keydown:
  1835.         call restore_hand
  1836.         ld hl,_ingame_m_curpos
  1837.         ld a,(hl)
  1838.         cp 0
  1839. _ingame_m_downlimit: EQU $-1        
  1840.  
  1841.         jp nc,_sel_ingame_menu
  1842.         inc (hl)
  1843.         jp _sel_ingame_menu
  1844. _sel_ingame_SELECTED:
  1845.         call restore_hand
  1846.         ld a,(_ingame_m_curpos)
  1847.         ret
  1848.  
  1849. TO_MENU_ESC
  1850.  
  1851. ;TODO  
  1852. ;restore pointer to script and continue script execute
  1853.         CALL _clear_textbox
  1854.         ld hl,(text_pointer)
  1855. deeebb:        
  1856.         jp _txt_out
  1857.  
  1858.  
  1859.  
  1860. ;SAVE STRUCTURE
  1861. ;32768 - 16c screenshot
  1862. ;32 palette
  1863. ;256 globals
  1864. ;32 loaded cg (mem_buf)
  1865. ;32 loaded ovl
  1866. ;2 text_pointer
  1867. ;1 redraw border
  1868. ;1 music
  1869.  
  1870.  
  1871.