?login_element?

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download

  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. ;------------------------
  28. ;-setup interrupt
  29. int_set:
  30.         di
  31.         ld hl,0x0038
  32.         ld de,int_orig
  33.         ld bc,5
  34.         ldir
  35.         ld hl,0x0038
  36.         ld a,0xC3 ;jp
  37.         ld (hl),a
  38.         inc hl
  39.         ld de,int_proc
  40.         ld a,e
  41.         ld (hl),a
  42.         inc hl
  43.         ld a,d
  44.         ld (hl),a
  45.         ei
  46.         ret
  47.  
  48. int_reset:
  49.         di
  50.         ld de,0x0038
  51.         ld hl,int_orig
  52.         ld bc,3
  53.         ldir
  54.         ei
  55.         ret
  56.  
  57. int_proc
  58.         push af
  59.         ex af,af'
  60.        push af
  61.        push bc
  62.        push de
  63.        push hl
  64.        push ix
  65.        push iy
  66.        exx
  67.        push bc
  68.        push de
  69.        push hl
  70.        ld a,1
  71.        out (0xfe),a
  72.        ld a,(setpalflag)
  73.        or a
  74.        call nz,setpal_proc
  75. ;       ld a,(setscreenflag)
  76. ;       or a
  77. ;       call nz,setscreen_proc
  78.        GET_KEY
  79.        ld a,c
  80.        ld (keyreg),a
  81.        OS_GETKEYMATRIX
  82.        ld (keymatrixbc),bc
  83.        ld (keymatrixde),de
  84.        ld (keymatrixhl),hl
  85.        ld (keymatrixix),ix
  86.  
  87.  
  88.        ld a,0
  89. wlock equ $-1        
  90.        CALL nz,anim_wait
  91.  
  92.        ld a,0
  93.        out (0xfe),a
  94.  
  95.        pop hl
  96.        pop de
  97.        pop bc
  98.        exx
  99.        pop iy
  100.        pop ix
  101.        pop hl
  102.        pop de
  103.        pop bc
  104.        pop af
  105.        ex af,af'
  106.         pop af
  107. int_orig ds 5
  108.         jp 0x0038+5        
  109.  
  110. no_mus
  111.           call setmusicpage
  112.           ld a,(music_buf)
  113.           ld hl,PLR_MUTE
  114.           OS_SETMUSIC
  115.           call unsetmusicpage
  116.           halt
  117.           ret
  118. ;---------------------
  119. filecreateeerror:
  120.         ld hl,txt_fcreateerror
  121.         jr openerror        
  122. filewriteerror:
  123.         call closestream_file
  124.         ld hl,txt_fwriteerror
  125.         jr openerror
  126. filereaderror:
  127.         call closestream_file
  128.         ld hl,txt_freaderror
  129.         jr openerror
  130. dirchangeerror
  131.         ld hl,txt_dircherror
  132.         jr openerror
  133. fileopenerror
  134.         ld hl,txt_fopenerror
  135. openerror:
  136.         push hl
  137.         ld e,6+0x80
  138.         OS_SETGFX
  139.         ld e,0
  140.         OS_CLS
  141.         pop  hl
  142.         call print_hl
  143.         ld hl,buf
  144.         call print_hl
  145.         ld hl,txt_nl
  146.         call print_hl
  147.         YIELDGETKEYLOOP
  148.         jp cmd_quit
  149.  
  150.  
  151. memoryerror
  152.         OS_CLOSEHANDLE
  153.         ld e,6+0x80
  154.         OS_SETGFX
  155.         ld e,0
  156.         OS_CLS
  157.         ld hl,txt_memoryerror
  158.         call print_hl
  159.         YIELDGETKEYLOOP
  160.         jp cmd_quit
  161.  
  162.  
  163. cmd_quit
  164. ;;      call closestream_file
  165.         ld e,6+0x80
  166.         OS_SETGFX
  167.         call int_reset
  168. ;;       call disablemusic
  169.         QUIT        
  170.  
  171. ;----------------------------------------        
  172. load_mus
  173.         ld b,0
  174. old_mus EQU $-1
  175.         cp b
  176.         ret z
  177.         ld (old_mus),a
  178.  
  179.         and a
  180.         jp z,no_mus
  181.        
  182.         call calc_mus
  183.  
  184.         call no_mus
  185.        
  186.         ;generate path to music file in 'buf'
  187.         ld hl,mus_path1
  188.         ld de,buf
  189.         call copystr_hlde ;'copy path  'mus/' '
  190.        
  191.         ld a,(mus_mode)
  192.         ld hl,mus_modes
  193.         call sel_word
  194.         call copystr_hlde ;copy "aym / s98 path"
  195.         ld hl,mus_path2
  196.         call copystr_hlde ;copy name without ext
  197.        
  198.         ld a,(mus_mode)
  199.         ld hl,plr_ext
  200.         call sel_word
  201.         call copystr_hlde  ;copy file ext
  202.         xor a
  203.         ld (de),a  ;string terminator
  204.  
  205.  
  206.  
  207.         call setmusicpage
  208.  
  209.                 ld de,buf
  210.                 call openstream_file
  211.                 or a
  212.                 jp nz,fileopenerror
  213.  
  214.                 ld hl,0x3000 ;len
  215.                 ld de,module ;addr
  216.                 call readstream_file
  217.                 or a
  218.                 jp nz,filereaderror
  219.  
  220.                 call closestream_file
  221.  
  222.                 ld a,0b00100000
  223.                 ld (SETUP),a
  224.                 ld hl,module
  225.  
  226.                 call PLR_INIT        ;init music
  227.  
  228.                 ld a,(music_buf)
  229.                 ld hl,PLR_PLAY
  230.                 OS_SETMUSIC        
  231.         jp unsetmusicpage
  232.  
  233. calc_mus:
  234.         call a_to_dec
  235.  
  236.         LD (mus_path2+5),A
  237.         LD A,B
  238.         LD (mus_path2+4),A
  239.         RET        
  240.  
  241. a_to_dec:
  242.         CP 30
  243.         JR C,calc_m0
  244.         SUB 30
  245.         LD B,"3"
  246.         JR calc_mus_f
  247. calc_m0   CP 20
  248.         JR C,calc_m1
  249.         SUB 20
  250.         LD B,"2"
  251.         jr calc_mus_f
  252. calc_m1   CP 10
  253.         JR C,calc_m2
  254.         SUB 10
  255.         LD B,"1"
  256.         JR calc_mus_f
  257. calc_m2   LD B,"0"
  258. calc_mus_f:
  259.          ADD A,"0"
  260.          ret
  261. ;------------------
  262. setmusicpage
  263.         OS_GETMAINPAGES
  264.         ld a,e
  265.         ld (tbank1),a
  266.         ld a,(music_buf)
  267.         SETPG4000
  268.         ret
  269.  
  270. unsetmusicpage
  271.         ld a,(tbank1)
  272.         SETPG4000
  273.         ret
  274.  
  275. ;---------------------
  276.  
  277. store8000c000
  278.         OS_GETMAINPAGES
  279.         ld a,h
  280.         ld (tbank2),a
  281.         ld a,l
  282.         ld (tbank3),a
  283.         ret
  284.  
  285. restore8000c000
  286.         ld a,(tbank2)
  287.         SETPG8000
  288.         ld a,(tbank3)
  289.         SETPGC000        
  290.         ret
  291. ;========================
  292. storec000
  293.         OS_GETMAINPAGES
  294.         ld a,l
  295.         ld (tbank3),a
  296.         ret
  297.  
  298. restorec000
  299.         ld a,(tbank3)
  300.         SETPGC000        
  301.         ret
  302. ;========================
  303. store8000
  304.         OS_GETMAINPAGES
  305.         ld a,h
  306.         ld (tbank2),a
  307.         ret
  308.  
  309. restore8000
  310.         ld a,(tbank2)
  311.         SETPG8000        
  312.         ret
  313. ;========================
  314.  
  315.  
  316.  
  317. getkey
  318.         ld a,(keyreg)
  319.         ret
  320.  
  321.  
  322.  
  323. waitkey
  324. waitkey_unpress ;Wait for enter unpress
  325.         ld a,(keymatrixix+1)
  326.         bit 0,a
  327.         jr z,waitkey_unpress
  328. waitkey_loop
  329.         call getkey
  330.         cp NOKEY
  331.         jr z,waitkey_loop
  332. waitkey0
  333.         ld (lastkey),a
  334.         call getkey
  335.         cp NOKEY
  336.         jr nz,waitkey0 ; purge key buffer
  337.         ld a,(lastkey)
  338.         ret
  339.         ;cp key_esc
  340.         ;jp z,cmd_quit
  341.         ;ret
  342. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  343.  
  344. change_cp1 ;#
  345.             LD A,186
  346.             RET
  347. change_cp2   ;@
  348.           LD A,188
  349.           RET
  350. change_cp
  351.          PUSH HL,DE
  352.          LD HL,TABLE_W
  353. CODEPAGE EQU $-2
  354.          SUB 128
  355.          LD D,0
  356.          LD E,A
  357.          ADD HL,DE
  358.          LD A,[HL]
  359.          POP DE,HL
  360.          RET
  361.  
  362. TABLE_W  DS 40,32
  363.          DB 134
  364.          DS 15,32
  365.          DB 194
  366.          DS 7,32
  367.          DB 129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160
  368.          DB 161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,188,189,190,191,192,193
  369.  
  370. TABLE_J  DS 13,32
  371.          DB 186,188 ;╨бтА░ ╨б╨Й        141 142
  372.          DS 15,32
  373.          DB 186,188 ;╨бтА░ ╨б╨Й        158 159
  374.          DB 189,190,191,192,193,129,130,131,132,133,134,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154
  375.          DB 155,156,157,158,159,160,161,162,163,164,165,166,194,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185
  376.          DB 186,188,189,190,191,192,193
  377.          DS 6,32
  378.          DB 143
  379.          DB 32,32,150 ;╨а╥Р
  380.          DB 32,154,155
  381. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;        
  382. introduction
  383.         ;---load resources
  384.         ; '1' - load image
  385.  
  386.         ld hl,TABLE_J
  387.         ld (CODEPAGE),hl
  388.  
  389.         ld hl,intro_pic
  390.         call load_gfx_to_load_buf
  391.  
  392.  
  393.         ld hl,into_text
  394.         call load_ovl_to_script_buf
  395.  
  396.  
  397.         ;ld a,0x3d
  398.         ;ld (outtyp),a
  399.         ;call _buffer_output
  400.  
  401.         call _immed_big
  402.  
  403.  
  404.  
  405.         ld hl,ovl_start
  406.         ld bc,0x1702
  407.         call _pradd
  408.         call _ppp
  409.         ld a,1
  410.         ld (intro_),a
  411.         ret
  412.  
  413.  
  414.  
  415. _ppp:
  416.         ld a,(hl)
  417.         inc hl
  418.         cp 32
  419.         jr  c,_ppp1
  420.         cp 128
  421.         call nc,change_cp
  422.         CP "#"
  423.         call z,change_cp1
  424.         CP "@"
  425.         call z,change_cp2
  426.         sub 32
  427. _ppp_o:        
  428.         push hl
  429.         call _type
  430.         pop hl
  431.  
  432.         ld b,10
  433. _ppp_o1        
  434.         halt
  435.         call getkey
  436.         cp NOKEY
  437.         jp nz,_ppp_exit        
  438.         djnz _ppp_o1
  439.         jr _ppp
  440.  
  441.  
  442.  
  443. _ppp1:  cp 3      ;3 end of text
  444.         jp z,_ppp_exit
  445.  
  446.         cp 0x0a   ;0x0a next line
  447.         jr z,_ppp_line_feed
  448.  
  449.         and a     ;0?  0 +0 end of line. pause.
  450.         jr z,_ppp2
  451.  
  452.         ld a,"?"  ;unknown opcode print '?' char
  453.         jr _ppp_o
  454. _ppp2:        
  455.         ld a,(hl)
  456.         inc hl
  457.         and a   ; second 0
  458.         jr nz,_ppp
  459.  
  460.  
  461.  
  462. ;double zero. end of line. pause.
  463.         ld b,245
  464. _ppp_halt_loop:
  465.         halt
  466.         call getkey
  467.         cp NOKEY
  468.         jr nz,_ppp_exit
  469. _ppp_p2:
  470.         djnz _ppp_halt_loop
  471.  
  472.         push hl
  473.  
  474.         call _clear_textbox
  475.         ld bc,0x1702
  476.         call _pradd
  477.  
  478.         pop hl
  479.  
  480.         jr _ppp
  481.  
  482.  
  483.  
  484. _ppp_line_feed:
  485.         push hl
  486.         ld bc,(CORDS)
  487.         inc b
  488.         ld c,0
  489.         call _pradd
  490.         pop hl
  491.         jp _ppp
  492.  
  493.  
  494. _ppp_exit:
  495.         call clear_whole_screen
  496.         ret
  497. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  498. ;in - none/ out - hl -point to script name to load
  499. save_to_globals:
  500.         ld hl,buf
  501.         ld de,GLOBVARS
  502.         ld b,0
  503. _stg_loop:
  504.         ld a,(hl)
  505.         ld (de),a
  506.         inc hl
  507.         inc hl
  508.         inc de
  509.         djnz _stg_loop
  510.         ld bc,6
  511.         add hl,bc
  512.         ret
  513. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  514. ;in - none/ out - hl -point to script name to load
  515. globals_to_save:
  516.         ld hl,buf
  517.         ld de,GLOBVARS
  518.         ld b,0
  519. _gts_loop:
  520.         ld a,(de)
  521.         ld (hl),a
  522.         inc hl
  523.         ld (hl),0
  524.         inc hl
  525.         inc de
  526.         djnz _gts_loop
  527.         ld (hl),0
  528.         inc hl
  529.         ld (hl),0
  530.         inc hl
  531.         ld (hl),0
  532.         inc hl
  533.         ld (hl),0
  534.         inc hl
  535.         ld (hl),0
  536.         inc hl
  537.         ld (hl),0
  538.         inc hl          ;copy global variables to save
  539.  
  540.         ld de,LOADED
  541.         ex de,hl
  542.         call copystr_hlde
  543.         xor a
  544.         ld (de),a ;copy loaded ovl name
  545.         ret        
  546. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  547. _ftp:
  548.        LD HL,#4002  ;FIRST TEXT POINTER
  549.         LD B,(HL)
  550.         INC HL
  551.         LD H,(HL)
  552.         LD A,#40
  553.         ADD A,H
  554.         LD H,A
  555.         LD L,B
  556.         LD B,(HL)
  557.         INC HL
  558.         LD H,(HL)
  559.         LD A,#40
  560.         ADD A,H
  561.         LD H,A
  562.         LD L,B  ;HL-FIRST TEXT ADRESS
  563.         RET        
  564. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  565. ;ыбкс╜нємбмсди хм┐ явлцд╖цои юбвщдаэ╜жэ╢аЁРма
  566. _precache:
  567.         LD IX,ILINK
  568.         LD A,1
  569.         LD (MM),A
  570.         LD (SM),A
  571.         LD HL,#4000
  572.         LD L,(HL)
  573.         LD E,(HL)
  574.         INC HL
  575.         LD D,(HL)
  576.         LD HL,#4002
  577.         LD L,(HL)
  578.         INC DE
  579.         LD A,E
  580.         OR D
  581.         RET Z
  582.         DEC DE
  583.         LD A,E
  584.         OR D
  585.         RET Z
  586.         LD A,E
  587.         CP (HL)
  588.         JR NZ,$+6
  589.         INC HL
  590.         LD A,D
  591.         CP (HL)
  592.         RET Z
  593.         LD HL,#4004
  594.         LD L,(HL)
  595.         LD E,(HL)
  596.         INC HL
  597.         LD D,(HL)
  598.         LD A,D
  599.         OR E
  600.         RET Z
  601.         DEC HL
  602.         LD (TREEE),HL
  603.         LD DE,#4006
  604.         LD A,(DE)
  605.         LD (LIMIT4),A;LOW
  606.         LD A,D
  607.         LD (LIMIT3),A;HI
  608.         LD DE,#4000
  609.         LD A,(DE)
  610.         LD E,A
  611.         LD (STRUCTURE),DE
  612. PRECAH  LD HL,(TREEE)
  613.         LD A,H
  614.         CP 0
  615. LIMIT3  EQU $-1
  616.         JR NZ,PRECAH1
  617.         LD A,L
  618.         CP 0
  619. LIMIT4  EQU $-1
  620.         RET Z   ;END OF TREE
  621.  
  622. PRECAH1
  623.         LD E,(HL)
  624.         INC HL
  625.         LD D,(HL)
  626.         LD A,#40
  627.         ADD A,D
  628.         LD D,A
  629.  
  630.         LD A,(DE)
  631.         LD (STORE),A
  632.         INC DE
  633.         LD A,(DE)
  634.         LD (STORE+1),A
  635.         INC DE
  636.         LD A,(DE)
  637.         INC A
  638.         JR NZ,PRECAH2
  639.         INC DE
  640.         LD A,(DE)
  641.         INC A
  642.         JR Z,PRECAH3 ;NONE OF SUBMENU
  643.         DEC DE
  644.  
  645. PRECAH2 LD A,(DE)
  646.         LD (STORE1),A
  647.         INC DE
  648.         LD A,(DE)
  649.         LD (STORE1+1),A
  650.         DEC DE
  651.         PUSH DE
  652.         LD A,4
  653.         CALL SEARCHING
  654.         LD A,1
  655. MM      EQU $-1
  656.         LD (IX),A
  657.         INC IX
  658.         LD A,1
  659. SM      EQU $-1
  660.         LD (IX),A
  661.         INC IX
  662.         LD (IX),L
  663.         INC IX
  664.         LD (IX),H
  665.         INC IX
  666.         LD A,(SM)
  667.         INC A
  668.         LD (SM),A
  669.         POP DE
  670.         INC DE,DE
  671.         LD A,(DE)
  672.         INC A
  673.         JR NZ,PRECAH2
  674.         INC DE
  675.         LD A,(DE)
  676.         DEC DE
  677.         INC A
  678.         JR NZ,PRECAH2
  679.  
  680. PRECAH4 LD A,1
  681.         LD (SM),A
  682.         LD HL,MM
  683.         INC (HL)
  684.         LD HL,0
  685. TREEE   EQU $-2
  686.         INC HL,HL
  687.         LD (TREEE),HL
  688.         JP PRECAH
  689. PRECAH3 LD HL,#FFFF
  690.         LD (STORE1),HL
  691.         LD A,2
  692.         CALL SEARCHING
  693.         LD A,(MM)
  694.         LD (IX),A
  695.         INC IX
  696.         XOR A
  697.         LD (IX),A
  698.         INC IX
  699.         LD (IX),L
  700.         INC IX
  701.         LD (IX),H
  702.         INC IX
  703.         JR PRECAH4
  704. STORE   DW 0
  705. STORE1  DW 0
  706.  
  707. SEARCHING
  708.           LD (SEAR2-1),A
  709.           LD HL,0
  710. STRUCTURE EQU $-2
  711. SEAR1   PUSH HL
  712.          LD E,(HL)
  713.         INC HL
  714.         LD D,(HL)
  715.         LD A,#40
  716.         ADD A,D
  717.         LD D,A
  718.         LD HL,STORE
  719.         LD B,4
  720. SEAR2   LD A,(DE)
  721.         CP (HL)
  722.         JR NZ,SEAR3
  723.         INC DE
  724.         INC HL
  725.         DJNZ SEAR2
  726.         POP HL
  727.         RET
  728. SEAR3   POP HL
  729.         INC HL,HL
  730.         JR SEAR1
  731. ;---------------------------------------------------------------
  732.  
  733. ;PRINT ROUTEINES WITH TOKENS
  734. _print
  735.         ld a,(script_buf1)
  736.         SETPG4000
  737.         ld a,(script_buf2)
  738.         SETPG8000
  739.  
  740.  
  741.  
  742.         LD A,(HL)
  743.         INC HL
  744.         CP 32
  745.         JR C,PRINT1
  746.         CP "%"
  747.         JR Z,_print_hero_name
  748.  
  749.         cp 128
  750.         call nc,change_cp
  751.         CP "#"
  752.         call z,change_cp1
  753.         CP "@"
  754.         call z,change_cp2
  755.  
  756. PRINT0  SUB 32
  757.         PUSH HL
  758.         CALL _type
  759.         POP HL
  760.         JR _print
  761.  
  762. PRINT1  PUSH HL
  763.         LD HL,TOKENTABLE
  764.         LD C,A
  765. PRINT2  LD A,(HL)
  766.         INC HL
  767.         CP 255
  768.         JR Z,PRINT4     ;END OF TABLE
  769.         CP C
  770.         JR Z,PRINT3     ;CODE FOUND
  771.         INC HL
  772.         INC HL
  773.         JR PRINT2
  774. PRINT3  LD A,(HL)
  775.         INC HL
  776.         LD H,(HL)
  777.         LD L,A
  778.         EX (SP),HL
  779.         RET
  780. PRINT4  POP HL
  781.         JR _print
  782.  
  783. PRINT5  LD C,A
  784. PRINT6  LD A,(HL)
  785.         INC HL
  786.         CP 255
  787.         JR Z,PRINT8     ;END OF TABLE
  788.         CP C
  789.         JR Z,PRINT7     ;CODE FOUND
  790.         INC HL
  791.         INC HL
  792.         JR PRINT6
  793. PRINT7  LD A,(HL)
  794.         INC HL
  795.         LD H,(HL)
  796.         LD L,A
  797.         EX (SP),HL
  798.         RET
  799. PRINT8  POP HL
  800.         JP _print
  801.  
  802. _print_hero_name
  803.         INC HL,HL,HL
  804.         PUSH HL
  805.  
  806.         ld hl,TABLE_W
  807.         ld (CODEPAGE),HL
  808.  
  809.  
  810.        
  811.         ld a,(language)
  812.         ld hl,loc_hero_name
  813.         call sel_word    ;hl - point to localized name
  814.  
  815. PRINTA  LD A,(HL)
  816.         INC HL
  817.         AND A
  818.         JR Z,PRINTB
  819.  
  820.         CP 128
  821.         CALL NC,change_cp
  822.  
  823.         SUB 32
  824.         PUSH HL
  825.         CALL _type
  826.         POP HL
  827.         JR PRINTA
  828. PRINTB  LD HL,TABLE_J
  829.         ld (CODEPAGE),HL
  830.         POP HL
  831.         JP _print        
  832.  
  833. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  834. TOKENTABLE
  835.         DB 00
  836.         DW ENDTEXT                              ;++++
  837.         DB 01
  838.         DW WINCLR  ;IF PRESSED KEY              ;++++
  839.         DB 03
  840.         DW _print   ;SKIP UNKNOWN COMMAND       ;++++
  841.         DB 04
  842.         DW LOADOVL  ;04NAM_000.OVL              ;++++
  843.         DB 06
  844.         DW SELMUSIC ;07XX                       ;++++
  845.         DB 08
  846.         DW WAITKEY_SUB                          ;++++
  847.         DB #0A
  848.         DW LINEFEED                             ;++++
  849.         DB #0F
  850.         DW EXITLIGHT                            ;-
  851.         DB #10
  852.         DW EXITDARK     ;GAME OVER              ;++++
  853.         DB #16
  854.         DW FLASH ;#16XX XX-BLINKS               ;++++
  855.         DB #17
  856.         DW PAUSE                                ;++++
  857.         DB #18
  858.         DW SHAKE ;#18XX XX-SHAKES               ;++++
  859.         DB #0B
  860.         DW GROUP0B
  861.         DB #0C
  862.         DW GROUP0C
  863.         DB #12
  864.         DW GROUP12
  865.         DB #13
  866.         DW GROUP13
  867.         DB #14
  868.         DW GROUP14
  869.         DB #15
  870.         DW GROUP15
  871.         DB #FF
  872. TOKENTABLE0C
  873.              DB 01
  874.              DW GLOBTOLOC                       ;++++
  875.              DB 02
  876.              DW LOCTOGLOB                       ;++++
  877.              DB 03
  878.              DW GLOBLET                         ;++++
  879.              DB 255
  880.  
  881. TOKENTABLE0B
  882.         DB 01
  883.         DW ADDNUM                               ;++++
  884.         DB 2
  885.         DW ADDVAR                               ;++++
  886.         DB 3
  887.         DW SUBVAR                               ;++++
  888.         DB 5
  889.         DW LOCLET                               ;++++
  890.         DB 6
  891.         DW SUBSTRACT                            ;++++
  892.         DB 7
  893.         DW SUBNUM                               ;++++
  894.         DB 8
  895.         DW COMPAND                              ;++++
  896.         DB 9
  897.         DW COMPOR                               ;++++
  898.         DB #0A
  899.         DW TRUECONT                             ;++++
  900.         DB #0B
  901.         DW GRPAND                               ;++++
  902.         DB #0C
  903.         DW GRPOR                                ;++++
  904.         DB #14
  905.         DW RANDOMIZE                            ;++++
  906.         DB #32
  907.         DW ISPOSITIVEGOTO                       ;++++
  908.         DB #33
  909.         DW ISZEROGOTO                           ;++++
  910.         DB #34
  911.         DW ISNEGATIVEGOTO                       ;++++
  912.         DB #35
  913.         DW ISNOTZEROGOTO                         ;++++
  914.         DB #36
  915.         DW GOTO                                 ;++++
  916.         DB #39
  917.         DW EXPANDGOTO                           ;++++
  918.         DB 255
  919. TOKENTABLE12
  920.         DB 01
  921.         DW MENUOFF                              ;????
  922.         DB 02
  923.         DW MENUON                               ;????
  924.         DB 04
  925.         DW SUBMENUOFF                           ;????
  926.         DB 05
  927.         DW SUBMENUON                            ;????
  928.         DB 255
  929. TOKENTABLE13
  930.         DB 01
  931.         DW SCREENLOAD1                          ;++++
  932.         DB 02
  933.         DW SCREENOUTPUT1                        ;++++
  934.         DB 03
  935.         DW SPRITELOAD1
  936.         DB 04
  937.         DW SCREENLOAD2                          ;++++
  938.         DB #0F
  939.         DW RESTOREBGND                          ;++++
  940.         DB #10
  941.         DW STOREBGND                            ;++++
  942.         DB 255
  943. TOKENTABLE14
  944.         DB 01
  945.         DW CLRVARS                              ;+++++
  946.         DB 03
  947.         DW CLRSCREEN                            ;+++++
  948.         DB 255
  949. TOKENTABLE15  ;GROUP15 IS IGNORING
  950.         DB 01
  951.         DW LOADANIM                             ;++++
  952.         DB 03
  953.         DW ANIMON                               ;++++
  954.         DB 04
  955.         DW ALLANIMOFF                           ;++++
  956.         DB 05
  957.         DW CLRANIM                              ;++++
  958.         DB 255
  959. GROUP0C LD DE,TOKENTABLE0C
  960.         JR GROUPS
  961. GROUP0B LD DE,TOKENTABLE0B
  962.         JR GROUPS
  963. GROUP12 LD DE,TOKENTABLE12
  964.         JR GROUPS
  965. GROUP13 LD DE,TOKENTABLE13
  966.         JR GROUPS
  967. GROUP14 LD DE,TOKENTABLE14
  968.         JR GROUPS
  969. GROUP15 LD DE,TOKENTABLE15
  970. GROUPS  LD A,(HL)
  971.         INC HL
  972.         PUSH HL
  973.         EX DE,HL
  974.         JP PRINT5
  975. ENDTEXT
  976. SUBLOCK XOR A
  977.         JP NC,WINCLR1
  978.         LD A,#AF
  979.         LD (SUBLOCK),A
  980. RETURN  LD HL,0
  981.         ;CALL WINCLR1
  982.         JP _print
  983.  
  984.  
  985. ;=;=;=;=;=;=;=;=;=;=;
  986. SELMUSIC PUSH HL
  987.         LD A,(HL)
  988.         CALL load_mus
  989.         POP HL
  990.         INC HL
  991.         JP _print
  992. ;;;;====
  993. WAITKEY_SUB
  994. ;TODO  - add  'wait' animation enable | disable
  995.         push hl
  996.         call waitkey
  997.         pop hl
  998.         jp _print
  999. ;;;;====
  1000. LINEFEED LD BC,(CORDS)
  1001.          INC B
  1002.         LD C,0
  1003.          CALL _pradd
  1004.          JP _print
  1005. ;;;;====
  1006. WINCLR  CALL WINCLR1
  1007.         JP _print
  1008.  
  1009. WINCLR1 CALL waitkey
  1010. WINCLR2
  1011.         PUSH HL
  1012.         CALL _clear_textbox  ;-0-0-3423566400------------------
  1013.         POP HL
  1014. COOOR   LD BC,#1500
  1015.         CALL _pradd
  1016.         ret
  1017. ;;;;;;=====
  1018. LOADOVL POP DE
  1019.         ld de,OVL
  1020.         call copystr_hlde
  1021.         xor a
  1022.         ld (DE),a
  1023.         JP BEG
  1024. ;;;;;;=====
  1025. PAUSE
  1026.         LD A,(HL)
  1027.         LD B,A
  1028.         INC HL
  1029.         PUSH HL
  1030.         RLCA
  1031.         LD B,A
  1032. PAUSE1  HALT
  1033.         HALT
  1034.         HALT
  1035.         HALT
  1036.         DJNZ PAUSE1
  1037.         POP HL
  1038.         JP _print
  1039. ;;;;;-------------
  1040.  
  1041. GLOBTOLOC
  1042.         LD A,(HL);LOC
  1043.         INC HL
  1044.         LD B,(HL);GLOB
  1045.         INC HL
  1046.         PUSH HL
  1047.         LD H,HIGH GLOBVARS
  1048.         LD L,B
  1049.         LD C,(HL)
  1050.         LD H,HIGH LOCVARS
  1051.         LD L,A
  1052.         LD (HL),C
  1053.         POP HL
  1054.         JP _print
  1055.  
  1056. LOCTOGLOB
  1057.         LD A,(HL)
  1058.         INC HL
  1059.         LD B,(HL)
  1060.         INC HL
  1061.         PUSH HL
  1062.         LD H,HIGH LOCVARS
  1063.         LD L,B
  1064.         LD C,(HL)
  1065.         LD H,HIGH GLOBVARS
  1066.         LD L,A
  1067.         LD (HL),C
  1068.         POP HL
  1069.         JP _print
  1070.  
  1071. GLOBLET LD A,(HL)
  1072.         INC HL
  1073.         LD B,(HL)
  1074.         INC HL
  1075.         PUSH HL
  1076.         LD H,HIGH GLOBVARS
  1077.         LD L,A
  1078.         LD (HL),B
  1079.         POP HL
  1080.         JP _print        
  1081.  
  1082. LOCLET LD A,(HL)
  1083.         INC HL
  1084.         LD B,(HL)
  1085.         INC HL
  1086.         PUSH HL
  1087.         LD H,HIGH LOCVARS
  1088.         LD L,A
  1089.         LD (HL),B
  1090.         POP HL
  1091.         JP _print
  1092.  
  1093. ADDNUM  LD A,(HL)
  1094.         INC HL
  1095.         LD B,(HL)
  1096.         INC HL
  1097.         PUSH HL
  1098.         LD H,HIGH LOCVARS
  1099.         LD L,A
  1100.         LD A,(HL)
  1101.         ADD A,B
  1102.         LD (HL),A
  1103.         POP HL
  1104.         JP _print
  1105. ADDVAR  LD A,(HL)
  1106.         INC HL
  1107.         LD B,(HL)
  1108.         INC HL
  1109.         PUSH HL
  1110.         LD H,HIGH LOCVARS
  1111.         LD L,B
  1112.         LD B,(HL)
  1113.         LD L,A
  1114.         LD A,(HL)
  1115.         ADD A,B
  1116.         LD (HL),A
  1117.         POP HL
  1118.         JP _print
  1119.  
  1120. SUBVAR  LD A,(HL)
  1121.         INC HL
  1122.         LD B,(HL)
  1123.         INC HL
  1124.         PUSH HL
  1125.         LD H,HIGH LOCVARS
  1126.         LD L,B
  1127.         LD B,(HL)
  1128.         LD L,A
  1129.         LD A,(HL)
  1130.         SUB B
  1131.         LD (HL),A
  1132.         POP HL
  1133.         JP _print
  1134.  
  1135. SUBNUM  LD D,(HL);X
  1136.         INC HL
  1137.         LD A,(HL)  ;Y
  1138.         INC HL
  1139.         LD B,(HL)  ;Z
  1140.         INC HL
  1141.         PUSH HL
  1142.         LD H,HIGH LOCVARS
  1143.         LD L,A
  1144.         LD A,(HL)
  1145.         SUB B
  1146.         LD L,D
  1147.         LD (HL),A
  1148.         POP HL
  1149.         JP _print
  1150.  
  1151. SUBSTRACT LD D,(HL);X
  1152.         INC HL
  1153.         LD A,(HL)  ;Y
  1154.         INC HL
  1155.         LD B,(HL)  ;Z
  1156.         INC HL
  1157.         PUSH HL
  1158.         LD H,HIGH LOCVARS
  1159.         LD L,A
  1160.         LD A,(HL)
  1161.         LD L,B
  1162.         LD B,(HL)
  1163.         SUB B
  1164.         LD L,D
  1165.         LD (HL),A
  1166.         POP HL
  1167.         JP _print
  1168.  
  1169. COMPAND LD D,(HL)
  1170.         INC HL
  1171.         LD A,(HL)
  1172.         INC HL
  1173.         LD B,(HL)
  1174.         INC HL
  1175.         PUSH HL
  1176.         LD H,HIGH LOCVARS
  1177.         LD L,A
  1178.         LD A,(HL)
  1179.         CP 1
  1180.         JP M,COMPAND1
  1181.         LD L,B
  1182.         LD A,(HL)
  1183.         CP 1
  1184.         JP M,COMPAND1
  1185.         LD A,1
  1186.         JR COMPAND1+1
  1187. COMPAND1 XOR A
  1188.         LD L,D
  1189.         LD (HL),A
  1190.          POP HL
  1191.         JP _print
  1192.  
  1193. COMPOR  LD D,(HL)
  1194.         INC HL
  1195.         LD A,(HL)
  1196.         INC HL
  1197.         LD B,(HL)
  1198.         INC HL
  1199.         PUSH HL
  1200.         LD H,HIGH LOCVARS
  1201.         LD L,A
  1202.         LD A,(HL)
  1203.         CP 1
  1204.         JP P,COMPOR0
  1205.         LD L,B
  1206.         LD A,(HL)
  1207.         CP 1
  1208.         JP P,COMPOR0
  1209.         XOR A
  1210.         JR COMPOR1
  1211. COMPOR0 LD A,1
  1212. COMPOR1 LD L,D
  1213.         LD (HL),A
  1214.         POP HL
  1215.         JP _print
  1216.  
  1217.  
  1218. GRPAND  LD B,(HL)
  1219.         DEC B
  1220.         INC HL
  1221.         LD D,(HL)
  1222.         INC HL
  1223. GRPAND0 LD E,(HL)
  1224.         INC HL
  1225.         PUSH HL
  1226.         LD H,HIGH LOCVARS
  1227.         LD L,D
  1228.         LD A,(HL)
  1229.         CP 1
  1230.         JP M,GRPAND1
  1231.         LD L,E
  1232.         LD A,(HL)
  1233.         CP 1
  1234.         JP M,GRPAND1
  1235.         LD A,1
  1236.         JR GRPAND1+1
  1237. GRPAND1 XOR A
  1238.         LD L,D
  1239.         LD (HL),A
  1240.         POP HL
  1241.         DJNZ GRPAND0
  1242.         JP _print
  1243.  
  1244. GRPOR   LD B,(HL)
  1245.         DEC B
  1246.         INC HL
  1247.         LD D,(HL)
  1248.         INC HL
  1249. GRPOR0 LD E,(HL)
  1250.         INC HL
  1251.         PUSH HL
  1252.         LD H,HIGH LOCVARS
  1253.         LD L,D
  1254.         LD A,(HL)
  1255.         CP 1
  1256.         JP P,GRPOR2
  1257.         LD L,E
  1258.         LD A,(HL)
  1259.         CP 1
  1260.         JP P,GRPOR2
  1261.         XOR A
  1262.         JR GRPOR1
  1263. GRPOR2  LD A,1
  1264. GRPOR1  LD L,D
  1265.         LD (HL),A
  1266.         POP HL
  1267.         DJNZ GRPOR0
  1268.         JP _print
  1269.  
  1270. TRUECONT LD E,(HL)
  1271.          LD D,HIGH LOCVARS
  1272.          LD A,(DE)
  1273.          AND A
  1274.          JP Z,ENDTEXT
  1275. ;        CP 1
  1276. ;        JP M,ENDTEXT
  1277.          INC HL
  1278.          JP _print
  1279.  
  1280. GOTO    LD A,(HL)
  1281.         INC HL
  1282.         LD H,(HL)
  1283.         LD L,A
  1284.         LD A,#40
  1285.         ADD A,H
  1286.         LD H,A
  1287.         JP _print
  1288.  
  1289. ISPOSITIVEGOTO:
  1290.         LD E,(HL)
  1291.         LD D,HIGH LOCVARS
  1292.         INC HL
  1293.         LD C,(HL)
  1294.         INC HL
  1295.         LD B,(HL)
  1296.         INC HL
  1297.         LD A,(DE)
  1298.         CP 1
  1299.         JP M,_print      ;A={0 FALSE
  1300.         LD A,#40        ;A}0 TRUE
  1301.         ADD A,B
  1302.         LD  H,A
  1303.         LD L,C
  1304.         JP _print
  1305.  
  1306. ISZEROGOTO:
  1307.         LD E,(HL)
  1308.         LD D,HIGH LOCVARS
  1309.         INC HL
  1310.         LD C,(HL)
  1311.         INC HL
  1312.         LD B,(HL)
  1313.         INC HL
  1314.         LD A,(DE)
  1315.         AND A
  1316.         JP NZ,_print ;A{}0
  1317.         LD A,#40        ;A=0
  1318.         ADD A,B
  1319.         LD  H,A
  1320.         LD L,C
  1321.         JP _print
  1322.  
  1323. ISNEGATIVEGOTO:
  1324.          LD E,(HL)
  1325.         LD D,HIGH LOCVARS
  1326.         INC HL
  1327.         LD C,(HL)
  1328.         INC HL
  1329.         LD B,(HL)
  1330.         INC HL
  1331.         LD A,(DE)
  1332.         AND A
  1333.         JP P,_print      ;}=0
  1334.         LD A,#40    ;{0
  1335.         ADD A,B
  1336.         LD  H,A
  1337.         LD L,C
  1338.         JP _print
  1339.  
  1340. ISNOTZEROGOTO:
  1341.         LD E,(HL)
  1342.         LD D,HIGH LOCVARS
  1343.         INC HL
  1344.         LD C,(HL)
  1345.         INC HL
  1346.         LD B,(HL)
  1347.         INC HL
  1348.         LD A,(DE)
  1349.         and a
  1350.         JP z,_print      ;A={0 FALSE
  1351.         LD A,#40        ;A}0 TRUE
  1352.         ADD A,B
  1353.         LD  H,A
  1354.         LD L,C
  1355.         JP _print
  1356.  
  1357. EXPANDGOTO
  1358.         LD E,(HL)
  1359.         LD D,HIGH LOCVARS
  1360.         LD A,(DE)
  1361.         ADD A,A
  1362.         INC HL
  1363.         LD D,0
  1364.         LD E,A
  1365.         ADD HL,DE
  1366.         LD C,(HL)
  1367.         INC HL
  1368.         LD B,(HL)
  1369.         EX DE,HL
  1370.         LD A,#40
  1371.         ADD A,B
  1372.         LD H,A
  1373.         LD L,C
  1374.  
  1375. EXP_GT1 INC DE
  1376.         LD A,(DE)
  1377.         CP #FF
  1378.         JR NZ,EXP_GT1
  1379.         INC DE
  1380.         LD A,(DE)
  1381.         CP #FF
  1382.         JR NZ,EXP_GT1
  1383.         INC DE
  1384.         ;ex de,hl
  1385.         LD (RETURN+1),DE
  1386.         LD A,#37
  1387.         LD (SUBLOCK),A
  1388.         JP _print
  1389.  
  1390. RANDOMIZE
  1391.         LD E,(HL)
  1392.         INC HL
  1393.         LD D,(HL)
  1394.         INC HL
  1395.         PUSH HL
  1396. SEED    LD HL,26356
  1397.         LD B,H
  1398.         ld C,L
  1399.         DB "))))"
  1400.         ADD HL,BC
  1401.         LD BC,20981
  1402.         ADD HL,BC
  1403.         LD (SEED+1),HL
  1404.         LD A,H
  1405.         ADD A,D
  1406.         JR NC,$-1
  1407.         LD D,HIGH LOCVARS
  1408.         LD (DE),A
  1409.         POP HL
  1410.         JP _print
  1411. ;-------------------------------------
  1412. MENUOFF LD A,(HL)
  1413.         DEC A
  1414.         INC HL
  1415.         PUSH HL
  1416.         LD H,HIGH ACTMENU
  1417.         RLCA
  1418.         RLCA
  1419.         RLCA
  1420.         RLCA
  1421.         LD L,A
  1422.         XOR A
  1423.         LD (g_curpos),A
  1424.         LD (g_curpos+1),A
  1425.         INC A
  1426.         LD (HL),A
  1427.         POP HL
  1428.         JP _print
  1429.  
  1430. MENUON  LD A,(HL)
  1431.         DEC A
  1432.         INC HL
  1433.         PUSH HL
  1434.         LD H,HIGH ACTMENU
  1435.         RLCA
  1436.         RLCA
  1437.         RLCA
  1438.         RLCA
  1439.         LD L,A
  1440.         XOR A
  1441.         LD (HL),A
  1442.         LD (g_curpos),A
  1443.         LD (g_curpos+1),A
  1444.         POP HL
  1445.         JP _print
  1446.  
  1447. SUBMENUOFF
  1448.         LD A,(HL)
  1449.         DEC A   ;;;
  1450.         INC HL
  1451.         LD B,(HL)
  1452.         INC HL
  1453.         PUSH HL
  1454.         LD H,HIGH ACTMENU
  1455.         RLCA
  1456.         RLCA
  1457.         RLCA
  1458.         RLCA
  1459.         OR B
  1460.         LD L,A
  1461.         XOR A
  1462.         LD (g_curpos+1),A
  1463.         INC A
  1464.         LD (HL),A
  1465.         POP HL
  1466.         JP _print
  1467.  
  1468. SUBMENUON
  1469.         LD A,(HL)
  1470.         DEC A   ;;;;;;
  1471.         INC HL
  1472.         LD B,(HL)
  1473.         INC HL
  1474.         PUSH HL
  1475.         LD H,HIGH ACTMENU
  1476.         RLCA
  1477.         RLCA
  1478.         RLCA
  1479.         RLCA
  1480.         OR B
  1481.         LD L,A
  1482.         XOR A
  1483.         LD (HL),A
  1484.         POP HL
  1485.         LD (g_curpos+1),A
  1486.         JP _print
  1487.  
  1488. ;LOAD SCREEN TO BUFFER & OUTPUT
  1489. SCREENLOAD1
  1490.         INC HL,HL
  1491.         LD A,(HL) ;DELAY
  1492.         LD (DELAY),A
  1493.         INC HL,HL
  1494.         LD A,(HL)
  1495.         LD (outtyp),A
  1496.  
  1497.         INC HL
  1498.  
  1499.  
  1500.         push hl
  1501.         call load_gfx_to_load_buf
  1502.         call _buffer_output
  1503.  
  1504.         pop hl
  1505.  
  1506.         ld de,buf
  1507.         call copystr_hlde
  1508.         inc hl
  1509.         JP _print
  1510.  
  1511. SCREENOUTPUT1A:
  1512. ;out load buffer to screen by mask index8
  1513.         INC HL
  1514.         LD A,(HL) ;DELAY
  1515.         LD (DELAY),A
  1516.         INC HL,HL
  1517.         LD A,(HL)
  1518.         LD (outtyp),A
  1519.         INC HL
  1520.         LD A,(HL)
  1521.         INC HL,HL
  1522.         PUSH HL
  1523.         CP 3       ;SELECTOR 3-FROM OUTPUT BUFER
  1524.         JR Z,scrop2m   ;         4- FROM MEMORY BUFFER
  1525.         CALL _memory_output_mask
  1526.         JR scrop1
  1527. scrop2m:
  1528.         CALL _buffer_output_mask
  1529. scrop1m:
  1530.         POP HL
  1531.         JP _print
  1532.  
  1533. SCREENOUTPUT1  ;SHOW FROM BUFFERS
  1534.         INC HL
  1535.         ld a,(hl)
  1536.         cp 8
  1537.         jr z,SCREENOUTPUT1A
  1538.  
  1539.         INC HL
  1540.         LD A,(HL) ;DELAY
  1541.         LD (DELAY),A
  1542.         INC HL,HL
  1543.         LD A,(HL)
  1544.         LD (outtyp),A
  1545.         INC HL
  1546.         LD A,(HL)
  1547.         INC HL,HL
  1548.         PUSH HL
  1549.         CP 3       ;SELECTOR 3-FROM OUTPUT BUFER
  1550.         JR Z,scrop2   ;         4- FROM MEMORY BUFFER
  1551.         CALL _memory_output
  1552.         JR scrop1
  1553. scrop2:
  1554.         CALL _buffer_output
  1555. scrop1:
  1556.         POP HL
  1557.         JP _print
  1558. ;--------------------
  1559. ;LOAD SCREEN TO MEMORY
  1560. SCREENLOAD2
  1561.         INC HL,HL
  1562.  
  1563.         push hl
  1564.         call load_gfx_to_mem_buf
  1565.  
  1566.         pop hl
  1567.  
  1568.         ld de,buf
  1569.         call copystr_hlde
  1570.         inc hl
  1571.         JP _print
  1572.  
  1573. ;-----CLR GLOB VARS----
  1574. CLRVARS  LD B,(HL)
  1575.          XOR A
  1576.          INC HL
  1577. CLRVARS1 LD E,(HL)
  1578.          LD D,HIGH GLOBVARS
  1579.          LD (DE),A
  1580.          INC HL
  1581.          DJNZ CLRVARS1
  1582.         JP _print
  1583. ;--------------------------
  1584. ;==========================
  1585. _menu:
  1586.         ;clear stk_menu
  1587.         ld hl,STK_MENU
  1588.         ld de,STK_MENU+1
  1589.         ld bc,355
  1590.         ld (hl),0xff
  1591.         ldir
  1592.  
  1593.         ld hl,ACTMENU
  1594.         ld (ACTTMP),hl ;
  1595.         ld hl,STK_MENU
  1596.         ld (STK_MTMP),hl
  1597.         xor a
  1598.         ld (COUNTER),a ;....
  1599.         ld hl,0x1500
  1600.         ld (g_atpos),hl   ;...
  1601.  
  1602.         ld hl,0x4006 ; pic pointer (limiter)
  1603.  
  1604.         ld a,(hl)
  1605.         ld (LIMIT1),a ;low  
  1606.  
  1607.         inc hl
  1608.         ld a,(hl)
  1609.         ld b,0x40
  1610.         add a,b
  1611.         ld (LIMIT2),a ;high
  1612.  
  1613.         ld hl,0x4004 ;tree pointer
  1614.         ld b,(hl)
  1615.         inc hl
  1616.         ld h,(hl)
  1617.         ld a,0x40
  1618.         add a,h
  1619.         ld h,a
  1620.         ld l,b ;hl pointer to tree root
  1621. _menu1:
  1622.         ld a,0
  1623. LIMIT2 equ $-1
  1624.         cp h
  1625.         jr nz,_menu2
  1626.         ld a,0
  1627. LIMIT1  equ $-1
  1628.         cp l
  1629.         jp z,SELECTOR ; end of tree
  1630. _menu2:
  1631.         ld e,(hl)
  1632.         inc hl
  1633.         ld d,(hl)
  1634.         inc hl
  1635.         ld a,d
  1636.         or e
  1637.         jp z,SELECTOR ;no menu tree
  1638.  
  1639.         push hl
  1640.         ld bc,0
  1641. ACTTMP  equ $-2
  1642.  
  1643.         LD A,(BC)
  1644.         LD B,A
  1645.         LD  A,C
  1646.         ADD A,16
  1647.         LD (ACTTMP),A
  1648.         LD A,B
  1649.         AND A
  1650.         JP NZ,_menu5     ;NOT ACTIVE
  1651.         LD A,#40
  1652.         ADD A,D
  1653.         LD D,A
  1654.         LD HL,0
  1655. STK_MTMP EQU $-2
  1656.         LD A,(COUNTER)
  1657.         LD (HL),A
  1658.         INC HL
  1659.         LD (HL),E
  1660.         INC HL
  1661.         LD (HL),D
  1662.         INC HL
  1663.         LD (STK_MTMP),HL ;
  1664.         LD (HL),#FF
  1665.         EX DE,HL
  1666.         LD E,(HL)
  1667.         INC HL
  1668.         LD D,(HL)
  1669.         LD A,#40
  1670.         ADD A,D
  1671.         LD D,A
  1672.         INC DE ;SKIP MENUNAME NUM
  1673.         EX DE,HL
  1674.  
  1675. ;---╨┐╨╡╤З╨░╤В╤М ╨╜╨░╨╖╨▓╨░╨╜╨╕╤П ╨╝╨╡╨╜╤О--
  1676.  
  1677.         LD BC,(g_atpos)
  1678.         CALL _pradd
  1679.  
  1680. _menu3:
  1681.         LD A,(HL)
  1682.         INC HL
  1683.         AND A
  1684.         JR Z,_menu4
  1685.         CP 128
  1686.         CALL NC,change_cp        
  1687.         SUB 32
  1688.         PUSH HL
  1689.         CALL _type
  1690.         POP HL
  1691.         JR _menu3
  1692.  
  1693. _menu4:
  1694.         LD A,(g_atpos) ;x-coord
  1695.         add a,16
  1696.         ld (g_atpos),a
  1697.         cp 64
  1698.         jr c,_menu5
  1699.  
  1700.         and 0x3f
  1701.         LD (g_atpos),A
  1702.  
  1703.         ld a,(g_atpos+1)
  1704.         inc a
  1705.         ld (g_atpos+1),a
  1706. _menu5
  1707.         LD A,0
  1708. COUNTER EQU $-1
  1709.         INC A
  1710.         LD (COUNTER),A
  1711.         POP HL
  1712.         JP _menu1
  1713.  
  1714. SELECTOR:
  1715.         ld a,8
  1716.         ld (_line_lenght),a
  1717.  
  1718.         LD DE,STK_MENU
  1719.         LD A,(g_curpos)
  1720.         LD L,A
  1721.         ADD A,A
  1722.         ADD A,L
  1723.         LD L,A
  1724.         LD H,0
  1725.         ADD HL,DE
  1726.         EX DE,HL
  1727.  
  1728. SELS0:
  1729.         ld a,(g_curpos)
  1730.         ld hl,MENUCURHELPER
  1731.         call sel_word
  1732.         ld (SELS4),hl
  1733.  
  1734.         call _highlight_selected
  1735. SELS3:
  1736.         call waitkey
  1737.  
  1738.         cp key_esc
  1739.         jp z,TO_MENU
  1740.  
  1741.         cp key_left
  1742.         jr z,SELS_keyleft
  1743.         cp key_right
  1744.         jp z,SELS_keyright
  1745.  
  1746.         cp key_up
  1747.         jr z,SELS_keyup
  1748.         cp key_down
  1749.         jr z,SELS_keydown
  1750.  
  1751.         cp key_enter
  1752.         jp z,SELECTED1
  1753.         cp ' '
  1754.         jp z,SELECTED1
  1755.         jr SELS3      
  1756.  
  1757. SELS_keyup:
  1758. ;        ;de - modified pos in stk_menu
  1759. ;
  1760.         push de        
  1761.         pop hl
  1762.  
  1763.         ld bc,0xfff4 ;(-12)
  1764.         add hl,bc
  1765.         ld bc,STK_MENU
  1766.         and a
  1767.         sbc hl,bc
  1768.         jp m,SELS3
  1769.        
  1770.         ex de,hl
  1771.         ld bc,-12
  1772.         add hl,bc
  1773.         ex de,hl
  1774.  
  1775.  
  1776.         ld hl,(SELS4)
  1777.         call _highlight_selected
  1778.         ld a,(g_curpos)
  1779.         add a,-4
  1780.         ld (g_curpos),a
  1781.         xor a
  1782.         ld (g_curpos+1),a
  1783.         jp SELS0
  1784.  
  1785.  
  1786. SELS_keydown:
  1787.         ;de - modified pos in stk_menu
  1788.         push de
  1789.         pop hl
  1790.         ld bc,12
  1791.         add hl,bc
  1792.         ld a,(hl)
  1793.         inc a
  1794.         jr  z,SELS3
  1795.         ex de,hl
  1796.  
  1797.         ld a,(g_curpos)
  1798.         add a,4
  1799.         ld (g_curpos),a        
  1800.         ld hl,(SELS4)
  1801.         call _highlight_selected
  1802.         xor a
  1803.         ld (g_curpos+1),a        
  1804.         jp SELS0  
  1805.  
  1806.  
  1807. SELS_keyleft:
  1808.         push de        
  1809.         pop hl
  1810.         ld bc,STK_MENU
  1811.         and a
  1812.         SBC HL,BC
  1813.         ld  a,h
  1814.         or l
  1815.         jp z,SELS3
  1816.         ex de,hl
  1817.         ld bc,3
  1818.         and a
  1819.  
  1820.         sbc hl,bc
  1821.  
  1822.         ex de,hl
  1823.         ld hl,(SELS4)
  1824.         call _highlight_selected
  1825.         ld hl,g_curpos
  1826.         dec (hl)
  1827.         xor a
  1828.         ld (g_curpos+1),a
  1829.         jp SELS0
  1830. SELS_keyright:
  1831.         push de
  1832.         pop hl
  1833.         ld bc,3
  1834.         add hl,bc
  1835.         ld a,(hl)
  1836.         inc a
  1837.         jp  z,SELS3
  1838.         ex de,hl
  1839.  
  1840.         ld hl,g_curpos
  1841.         inc (hl)        
  1842.         ld hl,0
  1843. SELS4   equ $-2
  1844.         call _highlight_selected
  1845.         xor a
  1846.         ld (g_curpos+1),a        
  1847.         jp SELS0        
  1848. SELECTED1:
  1849.         push de
  1850.         call WINCLR2
  1851.         ld hl,ACTMENU
  1852.         ld (ACTTMP1),hl
  1853.         xor a
  1854.         ld (COUNTER),a
  1855.  
  1856.         ;clear stk_sub
  1857.         ld hl,STK_SUB
  1858.         ld de,STK_SUB+1
  1859.         ld bc,355
  1860.         ld (hl),0xff
  1861.         ldir
  1862.  
  1863.         LD HL,STK_SUB
  1864.         LD (STK_STMP),HL
  1865.         LD HL,#1500
  1866.         LD (g_atpos),HL        
  1867.         POP DE
  1868.         LD A,(DE)
  1869.         LD (RESULT),A;╤Б╨╛╤Е╤А╨░╨╜╤П╨╡╨╝ ╨╜╨╛╨╝╨╡╤А ╨▓╤Л╨▒╤А╨░╨╜╨╜╨╛╨│╨╛ ╨╝╨╡╨╜╤О
  1870.         RLCA
  1871.         RLCA
  1872.         RLCA
  1873.         RLCA
  1874.         INC A
  1875.         LD (ACTTMP1),A
  1876.         INC DE
  1877.         LD A,(DE)
  1878.         LD L,A
  1879.         INC DE
  1880.         LD A,(DE)
  1881.         LD H,A
  1882.         INC HL,HL
  1883.         ;HL-TREE          SUBMENU NAMES
  1884. SMENU1:
  1885.         LD E,(HL)
  1886.         INC HL
  1887.         LD D,(HL)
  1888.         INC HL,DE
  1889.         LD A,D
  1890.         OR E
  1891.         JP Z,SELECTOR2
  1892.         DEC DE
  1893.         PUSH HL
  1894.         LD BC,0
  1895. ACTTMP1 EQU $-2
  1896.  
  1897.         LD A,(BC)
  1898.         LD B,A
  1899.         LD  A,C
  1900.         INC A
  1901.         LD (ACTTMP1),A
  1902.         LD A,B
  1903.         AND A
  1904.         JP NZ,SMENU5    ;IF NOT ACTIVE
  1905.         LD A,0x40
  1906.         ADD A,D
  1907.         LD D,A
  1908. ;DE - ADR OF SUBMENU NAME1              ;
  1909.         LD HL,0                         ;
  1910. STK_STMP EQU $-2                        ;
  1911.         LD A,(COUNTER)                  ;
  1912.         LD (HL),A                       ;
  1913.         INC HL                          ;
  1914.         LD (STK_STMP),HL ;              ;
  1915.         LD (HL),#FF                     ;
  1916.  
  1917.         INC DE ;SKIP MENUNAME NUMBER
  1918.         EX DE,HL        
  1919. ;HL-NAME OF MENUITEM
  1920.  
  1921. ;---╨┐╨╡╤З╨░╤В╤М ╨╜╨░╨╖╨▓╨░╨╜╨╕╤П ╨╝╨╡╨╜╤О--
  1922.  
  1923.         LD BC,(g_atpos)
  1924.         CALL _pradd
  1925.  
  1926. SMENU3
  1927.         LD A,(HL)
  1928.         INC HL
  1929.         AND A
  1930.         JR Z,SMENU4
  1931.         CP 128
  1932.         CALL NC,change_cp        
  1933.         SUB 32
  1934.         PUSH HL
  1935.         CALL _type
  1936.         POP HL
  1937.         JR SMENU3
  1938.  
  1939. SMENU4:
  1940.         LD A,(g_atpos) ;x-coord
  1941.         add a,16
  1942.         ld (g_atpos),a
  1943.         cp 64
  1944.         jr c,SMENU5
  1945.  
  1946.         and 0x3f
  1947.         LD (g_atpos),A
  1948.  
  1949.         ld a,(g_atpos+1)
  1950.         inc a
  1951.         ld (g_atpos+1),a
  1952.  
  1953. SMENU5  LD HL,COUNTER
  1954.         INC (HL)
  1955.         POP HL
  1956.         JP SMENU1
  1957.  
  1958. SELECTOR2:
  1959.         ld hl,(STK_STMP)
  1960.         ld de,STK_SUB
  1961.         and a
  1962.         sbc hl,de
  1963.         ld a,h
  1964.         or l
  1965.         jp z,RESULT1
  1966.         ld a,(g_curpos+1)
  1967.         ld l,a
  1968.         ld h,0
  1969.         add hl,de
  1970.         ex de,hl
  1971.  
  1972. SSELS0:
  1973.         ld a,(g_curpos+1)
  1974.         ld hl,MENUCURHELPER
  1975.         call sel_word
  1976. SSELS2:        
  1977.         ld (SSELS4),hl
  1978.         call _highlight_selected
  1979. SSELS3:
  1980.         call waitkey
  1981. ;        cp key_up
  1982. ;        jr z,SELS_keyup
  1983. ;        cp key_down
  1984. ;        jr z,SELS_keydown
  1985.         cp key_esc
  1986.         jp z,SSELLL
  1987.  
  1988.  
  1989.         cp key_left
  1990.         jr z,SSELS_keyleft
  1991.         cp key_right
  1992.         jr z,SSELS_keyright
  1993.  
  1994.         cp key_up
  1995.         jr z,SSELS_keyup
  1996.         cp key_down
  1997.         jr z,SSELS_keydown
  1998.  
  1999.  
  2000.         cp key_enter
  2001.         jr z,SELECTED
  2002.         cp ' '
  2003.         jr z,SELECTED
  2004.         jr SSELS3        
  2005.  
  2006. SSELS_keyup:
  2007.         push de        
  2008.         pop hl
  2009.        
  2010.         ld bc,-4 ;-1
  2011.         add hl,bc
  2012.         ld bc,STK_SUB
  2013.         and a
  2014.         SBC HL,BC
  2015.         jp m,SSELS3
  2016.  
  2017.         ex de,hl
  2018.         ld bc,-4
  2019.         add hl,bc
  2020.         ex de,hl
  2021.  
  2022.         ld hl,(SSELS4)
  2023.         call _highlight_selected
  2024.         ld a,(g_curpos+1)
  2025.         add a,-4
  2026.         ld (g_curpos+1),a
  2027.         jp SSELS0
  2028.  
  2029.  
  2030.  
  2031.  
  2032. SSELS_keydown:
  2033.         push de
  2034.         pop hl
  2035.        
  2036.         ld bc,4
  2037.         add hl,bc
  2038.  
  2039.         ld a,(hl)
  2040.         inc a
  2041.         jr  z,SSELS3
  2042.         ex de,hl
  2043.  
  2044.         ld a,(g_curpos+1)
  2045.         add a,4
  2046.         ld (g_curpos+1),a
  2047.         ld hl,(SSELS4)
  2048.         call _highlight_selected
  2049.         jp SSELS0  
  2050.  
  2051. SSELS_keyleft:
  2052.         push de        
  2053.         pop hl
  2054.         ld bc,STK_SUB
  2055.         and a
  2056.         SBC HL,BC
  2057.         ld  a,h
  2058.         or l
  2059.         jp z,SSELS3
  2060.         dec de
  2061.         ld hl,(SSELS4)
  2062.         call _highlight_selected
  2063.         ld hl,g_curpos+1
  2064.         dec (hl)
  2065.         jp SSELS0
  2066. SSELS_keyright:
  2067.         push de
  2068.         pop hl
  2069.         inc hl
  2070.         ld a,(hl)
  2071.         inc a
  2072.         jp  z,SSELS3
  2073.         ex de,hl
  2074.         ld hl,g_curpos+1
  2075.         inc (hl)        
  2076.         ld hl,0
  2077. SSELS4   equ $-2
  2078.         call _highlight_selected
  2079.         jp SSELS0  
  2080. SELECTED:
  2081.         LD A,(DE)
  2082.         LD H,A
  2083.         PUSH HL
  2084.         LD HL,(SSELS4)
  2085.         CALL _highlight_selected
  2086.         POP HL
  2087. RESSULT   LD L,0
  2088. RESULT  EQU $-1
  2089. ;L-MENU NUM H-SUBMENUNUM
  2090.         INC H
  2091.         INC L
  2092.         RET
  2093. RESULT1 LD H,#FF
  2094.         JR RESSULT
  2095. SSELLL:
  2096.         pop hl
  2097.         jp TXTOUT1
  2098. ;---------------------------------
  2099. ;╨╖╨░╨│╨╗╤Г╤И╨║╨╕
  2100. EXITLIGHT
  2101.         ld a,(hl)
  2102.         push af
  2103.                 add a,"0"
  2104.                 ld (endingovl+6),a
  2105.                 call _load_cdata
  2106.         pop af
  2107.         dec a
  2108.         push af  
  2109.                 ld e,a
  2110.                 ld d,0
  2111.                 ld hl,_op_end_slct
  2112.                 add hl,de
  2113.                 ld e,(hl)
  2114.                 ld d,0
  2115.                 ld hl,CDATA
  2116.                 add hl,de
  2117.                 ld (hl),0x33
  2118.  
  2119.                 call _save_cdata
  2120.  
  2121.                 call clear_whole_screen
  2122.  
  2123.         pop af
  2124.         ld hl,_op_gfx_ending
  2125.         call sel_word
  2126.         call load_big_img_dark
  2127.  
  2128.         ld hl,endingovl
  2129.         call load_ovl_to_script_buf
  2130.  
  2131.         ld hl,TABLE_J
  2132.         ld (CODEPAGE),hl
  2133.  
  2134.  
  2135.         LD B,250
  2136.         HALT
  2137.         DJNZ $-1
  2138.  
  2139.  
  2140.         call _clear_textbox
  2141.  
  2142.         ld hl,ovl_start
  2143.         ld bc,0x1500
  2144.         call _pradd
  2145.         call _print
  2146.  
  2147.         call _immed_big
  2148.         LD B,250
  2149.         HALT
  2150.         DJNZ $-1
  2151.         CALL clear_whole_screen
  2152. prebegin        
  2153.         JP begin        
  2154.  
  2155.  
  2156.  
  2157.  
  2158. ;;;;;;;;;;;;;;;;;;;;;;;;;;        
  2159. TO_MENU:
  2160.         pop hl
  2161.  
  2162.         ld a,2
  2163.         ld (_ingame_m_downlimit),a
  2164.  
  2165.         ld hl,loc_m1_menu
  2166.         ld de,menu_m1_action
  2167.         jr _ingame_menu_mnu
  2168.  
  2169. _ingame_menu_mnu:
  2170.  
  2171.         push hl
  2172.         push de
  2173.  
  2174.         ld hl,TABLE_W
  2175.         ld (CODEPAGE),hl
  2176.        
  2177.         CALL WINCLR2
  2178.  
  2179.  
  2180.         LD HL,#1500
  2181.         LD (_ingame_m_mnpos),HL
  2182.  
  2183.         xor a
  2184.         ld (_ingame_m_curpos),a
  2185.  
  2186.         pop de
  2187.         pop hl
  2188.  
  2189.         push de
  2190.         ld a,(language)
  2191.         call sel_word
  2192.  
  2193.         call _prt_ingame_menu
  2194.  
  2195.         call _sel_ingame_menu
  2196.  
  2197.         pop hl
  2198.  
  2199.         cp 0xff
  2200.         jp z,TO_MENU_ESC
  2201.         call sel_word
  2202.         jp (hl)
  2203. TO_MENU_ESC
  2204.        ; pop hl ; ;;??????
  2205.         ld hl,TABLE_J
  2206.         ld (CODEPAGE),hl      
  2207.         jp TXTOUT1
  2208.  
  2209.  
  2210. _confirm_quit:
  2211.         ld a,1
  2212.         ld (_ingame_m_downlimit),a
  2213.  
  2214.         ld  hl,loc_m2_menu
  2215.         ld  de,menu_m2_action
  2216.         jp _ingame_menu_mnu
  2217. _ram_save:
  2218.         ld a,4
  2219.         ld (_ingame_m_downlimit),a
  2220.  
  2221.         ld  hl,loc_save_menu_ingame
  2222.         ld  de,loc_save_menu_ingame_action
  2223.         jp _ingame_menu_mnu
  2224. _ram_load:
  2225.         ld a,4
  2226.         ld (_ingame_m_downlimit),a
  2227.        
  2228.         ld  hl,loc_load_menu_ingame
  2229.         ld  de,loc_load_menu_ingame_action
  2230.         jp _ingame_menu_mnu
  2231.  
  2232. _save_slot_1:
  2233.         ld a,1
  2234.         jr _save_slot
  2235. _save_slot_2:
  2236.         ld a,2
  2237.         jr _save_slot
  2238. _save_slot_3:
  2239.         ld a,3
  2240.         jr _save_slot
  2241. _save_slot_4:
  2242.         ld a,4
  2243.         jr _save_slot
  2244. _save_slot_5:
  2245.         ld a,5
  2246. _save_slot:
  2247.         add a,"0"
  2248.         ld (SAVETEMPL_N),a
  2249.  
  2250. _retry_save:
  2251.         ld de,SAVETEMPL
  2252.         call openstream_file
  2253.         or a
  2254.         jp z,_save_slot_is_present
  2255.         ; we should create file here
  2256.  
  2257.          LD DE,SAVETEMPL
  2258.          OS_CREATEHANDLE
  2259.          OR A
  2260.          JP NZ,filecreateeerror
  2261.          ld a,b
  2262.          ld (filehandle),a
  2263.  
  2264.  
  2265.  
  2266.  
  2267. _save_slot_is_present:
  2268.         ld hl,buf
  2269.         ld de,buf+1
  2270.         ld bc,537
  2271.         ld (hl),0
  2272.         ldir            ;clear buffer
  2273.  
  2274.         call globals_to_save
  2275.  
  2276.         ld hl,538 ;len
  2277.         ld de,buf ;addr
  2278.         call savestream_file
  2279.         or a
  2280.         jp nz,filewriteerror
  2281.  
  2282.         call closestream_file        
  2283.         jp TO_MENU_ESC
  2284.  
  2285.  
  2286.  
  2287. _load_slot_1:
  2288.         ld a,1
  2289.         jr _load_slot_o
  2290. _load_slot_2:
  2291.         ld a,2
  2292.         jr _load_slot_o
  2293. _load_slot_3:
  2294.         ld a,3
  2295.         jr _load_slot_o
  2296. _load_slot_4:
  2297.         ld a,4
  2298.         jr _load_slot_o
  2299. _load_slot_5:
  2300.         ld a,5
  2301. _load_slot_o:
  2302.         add a,"0"
  2303.         ld (SAVETEMPL_N),a
  2304.  
  2305.         ld de,SAVETEMPL
  2306.         call openstream_file
  2307.         or a
  2308.         jp nz,TO_MENU_ESC
  2309.  
  2310.         jp _load_common
  2311.