clear_screen:
 
        ld e,0
 
        OS_CLS
 
        ret
 
 
 
setpal_proc
 
;       call makefadepixel
 
;       call makewhitepixel
 
;       call makefonttable
 
;       ld de,(fadecolor)
 
;       OS_SETBORDER
 
        ld de,pal
 
        OS_SETPAL
 
        xor a
 
        ld (setpalflag),a
 
        ret        
 
 
 
 
 
anim_wait:
 
        ret
 
 
 
 
 
print_hl
 
        ld a,(hl)
 
        or a
 
        ret z
 
        push hl
 
        PRCHAR
 
        pop hl
 
        inc hl
 
        jp print_hl
 
        ret
 
;---------------------------------------
 
;for 320x200
 
_immed_big:
 
        ld a,1
 
        ld (setpalflag),a
 
        call store8000c000
 
 
 
        halt
 
        ld a,(load_buf1)
 
        SETPG8000
 
        ld a,(user_scr0_low)
 
        SETPGC000
 
 
 
 
 
        ld hl,0x8000
 
        ld de,0xc000
 
        ld bc,8000
 
        ldir
 
 
 
 
 
        halt
 
        ld a,(load_buf2)
 
        SETPG8000
 
        ld a,(user_scr0_high)
 
        SETPGC000
 
 
 
 
 
        ld hl,0x8000
 
        ld de,0xc000
 
        ld bc,8000
 
        ldir
 
 
 
        halt
 
        ld a,(load_buf1)
 
        SETPG8000
 
        ld a,(user_scr0_low)
 
        SETPGC000
 
 
 
 
 
        ld hl,0xa000
 
        ld de,0xe000
 
        ld bc,8000
 
        ldir
 
 
 
 
 
        halt
 
        ld a,(load_buf2)
 
        SETPG8000
 
        ld a,(user_scr0_high)
 
        SETPGC000
 
 
 
 
 
        ld hl,0xa000
 
        ld de,0xe000
 
        ld bc,8000
 
        ldir
 
 
 
        jp restore8000c000
 
;-------------
 
;draw load buf over scr0 . color 0x08 is transparent
 
_immed_overlay_big:
 
        call store8000c000
 
 
 
        ld a,(load_buf1)
 
        SETPG8000
 
        ld a,(user_scr0_low)
 
        SETPGC000        
 
 
 
        ld hl,0xc000
 
        ld de,0x8000
 
        ld bc,16384
 
 
 
        call _iob
 
 
 
        ld a,(load_buf2)
 
        SETPG8000
 
        ld a,(user_scr0_high)
 
        SETPGC000  
 
 
 
        ld hl,0xc000 ;dest
 
        ld de,0x8000 ;src
 
        ld bc,16384
 
 
 
        call _iob
 
 
 
        jp restore8000c000        
 
;------------------------------------------------------------------        
 
;copy image to screen by mask (9 color in palette is mask)
 
_iob_byte:
 
        ld a,(de)
 
        cp 0b11000000   ;double transparent bytes
 
        jr z,_iob_next_b
 
        push af
 
        and 0b10111000
 
        cp  0b10000000
 
        jr z,_iob_left_transparent
 
        pop  af
 
        push af
 
        and 0b01000111
 
        cp  0b01000000
 
        jr z,_iob_right_transparent
 
        pop af
 
        ld (hl),a; all solid. copy
 
_iob_next_b
 
        ret        
 
 
 
_iob
 
_iob_loop        
 
        call _iob_byte
 
        inc de
 
        inc hl
 
        dec bc
 
        ld a,b
 
        or c
 
        jr nz,_iob_loop
 
        ret
 
_iob_left_transparent
 
        ld a,0b10111000 ;
 
        and (hl)
 
        ld (hl),a
 
        pop af
 
        and 0b01000111
 
        or (hl)
 
        ld (hl),a
 
        jr _iob_next_b
 
_iob_right_transparent
 
        ld a,0b01000111
 
        and (hl)
 
        ld (hl),a
 
        pop af
 
        and 0b10111000
 
        or (hl)
 
        ld (hl),a
 
        jr _iob_next_b        
 
;------------------------------------------------------------------        
 
;_immed  32  (50) ьюьхэЄры№эю
 
;_sidas  36 54 юЄ ъЁр╕т ъ ЎхэЄЁє яЁ ьюєуюы№эшъюь
 
;_jaluzi 37  55 яю ёяшЁрыш юЄ ъЁр  ъ ЎхэЄЁє т фтр їюфр.
 
;_sidas  38  56 шч ЎхэЄЁр тю тёх ёЄюЁюэ√ яЁ ьюєуюы№эшъюь
 
;_cntsds 39 -57 юЄ ЎхэЄЁр ¤ъЁрэр тыхтю ш тяЁртю юфэютЁхьхээю.
 
;_dn_up  3A -58 юЄ ЎхэЄЁр ¤ъЁрэр ттхЁї ш тэшч юфэютЁхьхээю.
 
;_ud_nd  3B -59 яЁю тыхэшх юсЁрЄэ√ь ЁрёЄтюЁхэшхь. 
 
;_jaluzi 3C -60 цры■чш. ётхЁїє тэшч ш ёэшчє ттхЁї юфэютЁхьхээю ўхЁхч ёЄЁюъє
 
;_lftrgt 3D - 61 ёыхтр эряЁртю. (тхЄхЁ)
 
mask_mode db 0
 
_memory_output_mask:
 
        ld a,1
 
        jr _memory_output_o
 
_memory_output:
 
        xor a
 
_memory_output_o:        
 
        ld (mask_mode),a
 
 
 
        ld a,(mem_buf1)
 
        ld (src_buf1),a
 
        ld a,(mem_buf2)
 
        ld (src_buf2),a
 
 
 
        ld hl,mempal
 
        ld de,pal
 
        ld bc,32
 
        ldir            ;copy palette for image in membuf
 
 
 
        jr _mb_output
 
_2ndscreen_output:
 
        xor a
 
        ld (mask_mode),a
 
        ld a,(user_scr1_low)
 
        ld (src_buf1),a
 
        ld a,(user_scr1_high)
 
        ld (src_buf2),a 
 
        jr _mb_output
 
_buffer_output_mask:
 
        ld a,1
 
        jr _buffer_output_o
 
_buffer_output
 
        xor a
 
_buffer_output_o:        
 
        ld (mask_mode),a        
 
        ld a,(load_buf1)
 
        ld (src_buf1),a
 
        ld a,(load_buf2)
 
        ld (src_buf2),a
 
_mb_output:
 
        ld a,0
 
outtyp equ $-1
 
        cp 0x32
 
        jp z,_immed
 
        cp 0x36
 
        jp z,_sidas
 
        cp 0x37
 
        jp z,_jaluzi
 
        cp 0x38
 
        jp z,_sidas
 
        cp 0x39
 
        jp z,_cntsds
 
        cp 0x3a
 
        jp z,_dn_up
 
        cp 0x3b
 
        jp z,_ud_nd
 
        cp 0x3c
 
        jp z,_jaluzi
 
        cp 0x3d
 
        jp z,_lftrgt
 
        jp _jaluzi
 
;------------------------------------------------------------------        
 
; 256x160
 
;mode 0x32
 
_immed:
 
        ld a,1
 
        ld (setpalflag),a
 
        call store8000c000
 
 
 
 
 
        halt
 
        ld a,(src_buf1)
 
        SETPG8000
 
        ld a,(user_scr0_low)
 
        SETPGC000
 
 
 
        ld hl,0x8004
 
        ld b,160
 
_immed_v1:
 
        push bc
 
        push hl
 
        pop de
 
        set 6,d
 
 
 
        call _ldi_32
 
        ld bc,8
 
        add hl,bc
 
        pop bc 
 
        djnz _immed_v1
 
 
 
 
 
 
 
        halt
 
        ld a,(src_buf2)
 
        SETPG8000
 
        ld a,(user_scr0_high)
 
        SETPGC000
 
 
 
        ld hl,0x8004
 
        ld b,160
 
_immed_v2:
 
        push bc
 
        push hl
 
        pop de
 
        set 6,d
 
 
 
        call _ldi_32
 
        ld bc,8
 
        add hl,bc
 
        pop bc 
 
        djnz _immed_v2
 
 
 
        halt
 
        ld a,(src_buf1)
 
        SETPG8000
 
        ld a,(user_scr0_low)
 
        SETPGC000
 
 
 
        ld hl,0xa004
 
        ld b,160
 
_immed_v3:
 
        push bc
 
        push hl
 
        pop de
 
        set 6,d
 
 
 
        call _ldi_32
 
        ld bc,8
 
        add hl,bc
 
        pop bc 
 
        djnz _immed_v3
 
 
 
        halt
 
        ld a,(src_buf2)
 
        SETPG8000
 
        ld a,(user_scr0_high)
 
        SETPGC000        
 
 
 
        ld hl,0xa004
 
        ld b,160
 
_immed_v4:
 
        push bc
 
        push hl
 
        pop de
 
        set 6,d
 
 
 
        call _ldi_32
 
        ld bc,8
 
        add hl,bc
 
        pop bc 
 
        djnz _immed_v4
 
        jp restore8000c000
 
 
 
;------------------------------------------------------------------        
 
_ldi_32
 
        ld a,(mask_mode)
 
        and a
 
        jr nz,_ldi_32_iob
 
        dup 32
 
        ldi
 
        edup
 
        ret
 
_ldi_32_iob
 
        ex de,hl
 
        dup 32
 
        call _iob_byte
 
        inc hl
 
        inc de
 
        edup
 
        ex de,hl
 
        ret
 
;----
 
;hl-src de-dest b,counter
 
_down_cpy:
 
        ld a,(mask_mode)
 
        and a
 
        jr nz,_down_cpy_iob
 
 
 
        push bc
 
        ld a,(hl)
 
        ld (de),a
 
        call DHL
 
        ex de,hl
 
        call DHL
 
        ex de,hl
 
        pop bc
 
        djnz _down_cpy
 
        ret
 
_down_cpy_iob:
 
        push bc
 
 
 
        ex de,hl
 
        call _iob_byte
 
        ex de,hl
 
 
 
        call DHL
 
        ex de,hl
 
        call DHL
 
        ex de,hl
 
        pop bc
 
        djnz _down_cpy
 
        ret
 
;------------------------------------------------------------------        
 
; 256x160
 
;left to right
 
;mode  ????? ;0x3d
 
_lftrgt:
 
        ld a,1
 
        ld (setpalflag),a
 
        call store8000c000
 
 
 
 
 
        ld hl,0x8004
 
 
 
        ld b,32
 
_lftrgt_loop        
 
        push bc
 
 
 
        push hl
 
        pop de
 
        set 6,D
 
 
 
 
 
        push hl
 
        push de
 
 
 
        halt
 
        ld a,(src_buf1)
 
        SETPG8000
 
        ld a,(user_scr0_low)
 
        SETPGC000
 
 
 
 
 
        ld b,160
 
        call _down_cpy
 
 
 
        pop de
 
        pop hl
 
        push hl
 
        push de
 
 
 
        halt
 
        ld a,(src_buf2)
 
        SETPG8000
 
        ld a,(user_scr0_high)
 
        SETPGC000
 
 
 
        ld b,160
 
        call _down_cpy
 
 
 
 
 
        pop de
 
        pop hl
 
 
 
        set 5,H
 
        set 5,D
 
 
 
        push hl
 
        push de
 
 
 
        halt
 
        ld a,(src_buf1)
 
        SETPG8000
 
        ld a,(user_scr0_low)
 
        SETPGC000
 
 
 
 
 
        ld b,160
 
        call _down_cpy
 
 
 
        pop de
 
        pop hl
 
        push hl
 
        push de
 
 
 
        halt
 
        ld a,(src_buf2)
 
        SETPG8000
 
        ld a,(user_scr0_high)
 
        SETPGC000
 
 
 
        ld b,160
 
        call _down_cpy
 
 
 
        pop de
 
        pop hl
 
        res 5,h
 
        inc hl
 
 
 
 
 
        pop bc
 
        dec b
 
        jp nz,_lftrgt_loop
 
 
 
        jp restore8000c000
 
;------------------------------------------------------------------        
 
; 256x160
 
;left to right and right to left same time (interleave)
 
;mode  ???? 
 
_sidas:
 
        ld a,1
 
        ld (setpalflag),a
 
        call store8000c000
 
 
 
 
 
        ld hl,0x8004
 
        ld (sidas_l),hl
 
        ld hl,0x8004+31
 
        ld (sidas_r),hl
 
 
 
        ld b,32
 
_sidas_loop        
 
        push bc
 
 
 
 
 
        ld a,(src_buf1)
 
        SETPG8000
 
        ld a,(user_scr0_low)
 
        SETPGC000
 
 
 
 
 
        halt
 
 
 
        ld hl,0
 
sidas_l equ $-2        
 
        push hl
 
        pop de
 
        set 6,D
 
 
 
        push hl
 
        push de
 
 
 
        ld b,160
 
        call _down_cpy
 
 
 
        pop de
 
        pop hl
 
        push hl
 
 
 
        set 5,H
 
        set 5,D
 
 
 
        ld b,160
 
        call _down_cpy
 
 
 
        pop  hl
 
        inc hl
 
        ld (sidas_l),hl
 
 
 
 
 
        ld a,(src_buf2)
 
        SETPG8000
 
        ld a,(user_scr0_high)
 
        SETPGC000
 
 
 
        ld hl,0
 
sidas_r equ $-2        
 
        push hl
 
        pop de
 
        set 6,D
 
 
 
        set 5,H
 
        set 5,D
 
 
 
        push hl
 
        push de
 
 
 
        ld b,160
 
        call _down_cpy
 
 
 
        pop de
 
        pop hl
 
        push hl
 
 
 
        res 5,H
 
        res 5,D
 
 
 
        ld b,160
 
        call _down_cpy
 
 
 
        pop  hl
 
        dec hl
 
        ld (sidas_r),hl
 
 
 
 
 
        pop bc
 
        dec b
 
        jp nz,_sidas_loop
 
 
 
        jp restore8000c000
 
;------------------------------------------------------------------        
 
; 256x160
 
;top to middle and bottom to middle same time
 
;mode ???
 
_ud_nd:
 
        ld a,1
 
        ld (setpalflag),a
 
        call store8000c000
 
 
 
 
 
        ld hl,0x8004
 
        ld (_ud_nd_top),hl
 
        ld hl,0x8004+(159*40)
 
        ld (_ud_nd_btm),hl
 
 
 
 
 
        ld b,80 ;160/2
 
_ud_nd_loop:        
 
        halt
 
        push bc
 
 
 
 
 
 
 
        ld a,(src_buf1)
 
        SETPG8000
 
        ld a,(user_scr0_low)
 
        SETPGC000
 
 
 
 
 
        ld hl,0
 
_ud_nd_top: equ $-2
 
 
 
        push hl
 
        pop de        
 
        set 6,D
 
 
 
        push hl
 
        push de
 
 
 
        call _ldi_32
 
 
 
        pop de
 
        pop hl
 
 
 
 
 
        set 5,h
 
        set 5,d
 
 
 
        call _ldi_32
 
 
 
        ld hl,0
 
_ud_nd_btm: equ $-2
 
 
 
        push hl
 
        pop de        
 
        set 6,D
 
 
 
        push hl
 
        push de
 
 
 
        call _ldi_32
 
 
 
        pop de
 
        pop hl
 
 
 
 
 
        set 5,h
 
        set 5,d
 
 
 
        call _ldi_32
 
 
 
        ld a,(src_buf2)
 
        SETPG8000
 
        ld a,(user_scr0_high)
 
        SETPGC000
 
 
 
 
 
        ld hl,(_ud_nd_top)
 
 
 
        push hl
 
        pop de        
 
        set 6,D
 
 
 
        push hl
 
        push de
 
 
 
        call _ldi_32
 
 
 
        pop de
 
        pop hl
 
        push hl
 
 
 
        set 5,h
 
        set 5,d
 
 
 
        call _ldi_32
 
 
 
        pop hl
 
        call DHL
 
        ld (_ud_nd_top),hl
 
 
 
        ld hl,(_ud_nd_btm)
 
 
 
        push hl
 
        pop de        
 
        set 6,D
 
 
 
        push hl
 
        push de
 
 
 
        call _ldi_32
 
 
 
        pop de
 
        pop hl
 
 
 
        push hl
 
        set 5,h
 
        set 5,d
 
 
 
        call _ldi_32
 
 
 
        pop hl
 
        call UPHL
 
        ld (_ud_nd_btm),hl
 
 
 
 
 
        pop bc
 
        dec b
 
        jp nz,_ud_nd_loop
 
 
 
        jp restore8000c000
 
;------------------------------------------------------------------               
 
; 256x160
 
;from center up and down same time
 
;mode 0x3a
 
_dn_up:
 
        ld a,1
 
        ld (setpalflag),a
 
        call store8000c000
 
 
 
 
 
        ld hl,0x8004+(80*40)
 
        ld (_dn_up_top),hl
 
        ld hl,0x8004+(79*40)
 
        ld (_dn_up_btm),hl
 
 
 
 
 
        ld b,80 ;160/2
 
_dn_up_loop:        
 
        halt
 
        push bc
 
 
 
 
 
 
 
        ld a,(src_buf1)
 
        SETPG8000
 
        ld a,(user_scr0_low)
 
        SETPGC000
 
 
 
 
 
        ld hl,0
 
_dn_up_top: equ $-2
 
 
 
        push hl
 
        pop de        
 
        set 6,D
 
 
 
        push hl
 
        push de
 
 
 
        call _ldi_32
 
 
 
        pop de
 
        pop hl
 
 
 
 
 
        set 5,h
 
        set 5,d
 
 
 
        call _ldi_32
 
 
 
        ld hl,0
 
_dn_up_btm: equ $-2
 
 
 
        push hl
 
        pop de        
 
        set 6,D
 
 
 
        push hl
 
        push de
 
 
 
        call _ldi_32
 
 
 
        pop de
 
        pop hl
 
 
 
 
 
        set 5,h
 
        set 5,d
 
 
 
        call _ldi_32
 
 
 
        ld a,(src_buf2)
 
        SETPG8000
 
        ld a,(user_scr0_high)
 
        SETPGC000
 
 
 
 
 
        ld hl,(_dn_up_top)
 
 
 
        push hl
 
        pop de        
 
        set 6,D
 
 
 
        push hl
 
        push de
 
 
 
        call _ldi_32
 
 
 
        pop de
 
        pop hl
 
        push hl
 
 
 
        set 5,h
 
        set 5,d
 
 
 
        call _ldi_32
 
 
 
        pop hl
 
        call DHL
 
        ld (_dn_up_top),hl
 
 
 
        ld hl,(_dn_up_btm)
 
 
 
        push hl
 
        pop de        
 
        set 6,D
 
 
 
        push hl
 
        push de
 
 
 
        call _ldi_32
 
 
 
        pop de
 
        pop hl
 
 
 
        push hl
 
        set 5,h
 
        set 5,d
 
 
 
        call _ldi_32
 
 
 
        pop hl
 
        call UPHL
 
        ld (_dn_up_btm),hl
 
 
 
 
 
        pop bc
 
        dec b
 
        jp nz,_dn_up_loop
 
 
 
        jp restore8000c000
 
;------------------------------------------------------------------        
 
; 256x160
 
;jaluzi top to bottom and bottom to top same tome interleave
 
;mode 0x3c
 
_jaluzi:
 
        ld a,1
 
        ld (setpalflag),a
 
        call store8000c000
 
 
 
 
 
 
 
        ld hl,0x8004
 
        ld (_jaluzi_top),hl
 
        ld hl,0x8004+(159*40)
 
        ld (_jaluzi_btm),hl
 
 
 
 
 
        ld b,80 ;160/2
 
_jaluzi_loop:
 
        halt
 
        push bc
 
 
 
        ld a,(src_buf1)
 
        SETPG8000
 
        ld a,(user_scr0_low)
 
        SETPGC000
 
 
 
 
 
        ld hl,0
 
_jaluzi_top: equ $-2
 
 
 
        push hl
 
        pop de        
 
        set 6,D
 
 
 
        push hl
 
        push de
 
 
 
        call _ldi_32
 
 
 
        pop de
 
        pop hl
 
 
 
 
 
        set 5,h
 
        set 5,d
 
 
 
        call _ldi_32
 
 
 
        ld hl,0
 
_jaluzi_btm: equ $-2
 
 
 
        push hl
 
        pop de        
 
        set 6,D
 
 
 
        push hl
 
        push de
 
 
 
        call _ldi_32
 
 
 
        pop de
 
        pop hl
 
 
 
 
 
        set 5,h
 
        set 5,d
 
 
 
        call _ldi_32
 
 
 
        ld a,(src_buf2)
 
        SETPG8000
 
        ld a,(user_scr0_high)
 
        SETPGC000
 
 
 
 
 
        ld hl,(_jaluzi_top)
 
 
 
        push hl
 
        pop de        
 
        set 6,D
 
 
 
        push hl
 
        push de
 
 
 
        call _ldi_32
 
 
 
        pop de
 
        pop hl
 
        push hl
 
 
 
        set 5,h
 
        set 5,d
 
 
 
        call _ldi_32
 
 
 
        pop hl
 
        call DHL1
 
        ld (_jaluzi_top),hl
 
 
 
        ld hl,(_jaluzi_btm)
 
 
 
        push hl
 
        pop de        
 
        set 6,D
 
 
 
        push hl
 
        push de
 
 
 
        call _ldi_32
 
 
 
        pop de
 
        pop hl
 
 
 
        push hl
 
        set 5,h
 
        set 5,d
 
 
 
        call _ldi_32
 
 
 
        pop hl
 
        call UPHL1
 
        ld (_jaluzi_btm),hl
 
 
 
        pop bc
 
        dec b
 
        jp nz,_jaluzi_loop
 
 
 
        jp restore8000c000
 
;------------------------------------------------------------------        
 
; 256x160
 
;from center to sides left and right same time
 
;mode 0x39
 
_cntsds:
 
        ld a,1
 
        ld (setpalflag),a
 
        call store8000c000
 
 
 
 
 
        ld hl,0x8004+15  ;to left
 
        ld (_cntsds_lft),hl
 
 
 
        ld hl,0x8004+16 ;to right
 
        ld (_cntsds_rgt),hl
 
 
 
        xor a
 
        ld (_cntsds_fsa),a
 
 
 
 
 
        ld b,64  ; 256 /2 /2
 
_cntsds_loop:
 
        halt
 
        push bc
 
 
 
        ld hl,_cntsds_loop_end
 
        push hl
 
 
 
 
 
        ld a,0
 
_cntsds_fsa: equ $-1
 
        and a
 
        jp z,_cntsds_f0
 
        cp 1
 
        jp z,_cntsds_f1
 
        cp 2
 
        jp z,_cntsds_f2
 
        cp 3
 
        jp z,_cntsds_f3
 
 
 
 
 
_cntsds_loop_end:
 
        ld a,(_cntsds_fsa)
 
        inc a
 
        and 3
 
        ld (_cntsds_fsa),a
 
        pop bc
 
        dec b
 
        jp nz,_cntsds_loop
 
 
 
 
 
        jp restore8000c000
 
 
 
;----
 
_cntsds_f0:
 
        ld a,(src_buf2)
 
        SETPG8000
 
        ld a,(user_scr0_high)
 
        SETPGC000
 
 
 
        ld hl,0
 
_cntsds_lft: equ $-2
 
        push hl
 
        pop de
 
        set 6,d
 
 
 
        set 5,h
 
        set 5,d
 
 
 
        ld b,160
 
        call _down_cpy
 
 
 
        ld a,(src_buf1)
 
        SETPG8000
 
        ld a,(user_scr0_low)
 
        SETPGC000
 
 
 
        ld hl,0
 
_cntsds_rgt: equ $-2
 
        push hl
 
        pop de
 
        set 6,d
 
 
 
        ld b,160
 
        jp _down_cpy
 
 
 
 
 
;----
 
_cntsds_f2:
 
        ld a,(src_buf2)
 
        SETPG8000
 
        ld a,(user_scr0_high)
 
        SETPGC000
 
 
 
        ld hl,(_cntsds_lft)
 
        push hl
 
        pop de
 
        set 6,d
 
 
 
        ld b,160
 
        call _down_cpy
 
 
 
        ld a,(src_buf1)
 
        SETPG8000
 
        ld a,(user_scr0_low)
 
        SETPGC000
 
 
 
        ld hl,(_cntsds_rgt)
 
        push hl
 
        pop de
 
        set 6,d
 
 
 
        set 5,h
 
        set 5,d
 
 
 
        ld b,160
 
        jp _down_cpy
 
 
 
 
 
;----
 
_cntsds_f1:
 
        ld a,(src_buf1)
 
        SETPG8000
 
        ld a,(user_scr0_low)
 
        SETPGC000
 
 
 
        ld hl,(_cntsds_lft)
 
        push hl
 
        pop de
 
        set 6,d
 
 
 
        set 5,h
 
        set 5,d
 
 
 
        ld b,160
 
        call _down_cpy
 
 
 
        ld a,(src_buf2)
 
        SETPG8000
 
        ld a,(user_scr0_high)
 
        SETPGC000
 
 
 
        ld hl,(_cntsds_rgt)
 
        push hl
 
        pop de
 
        set 6,d
 
 
 
        ld b,160
 
        jp _down_cpy
 
;----
 
_cntsds_f3:
 
        ld a,(src_buf1)
 
        SETPG8000
 
        ld a,(user_scr0_low)
 
        SETPGC000
 
 
 
        ld hl,(_cntsds_lft)
 
        push hl
 
        push hl
 
        pop de
 
        set 6,d
 
 
 
        ld b,160
 
        call _down_cpy
 
 
 
        pop hl
 
        dec hl
 
        ld (_cntsds_lft),hl
 
 
 
        ld a,(src_buf2)
 
        SETPG8000
 
        ld a,(user_scr0_high)
 
        SETPGC000
 
 
 
        ld hl,(_cntsds_rgt)
 
        push hl
 
        push hl
 
        pop de
 
        set 6,d
 
 
 
        set 5,h
 
        set 5,d
 
 
 
 
 
        ld b,160
 
        call _down_cpy
 
 
 
        pop hl
 
        inc hl
 
        ld (_cntsds_rgt),hl
 
        ret
 
;------------------------------------------------------------------  
 
;in B - y C-x
 
;out   set coordinates for TYPE
 
 
 
_pradd
 
        LD (CORDS),BC
 
        SRL     C
 
        SBC     A
 
        AND %00100000
 
        LD      (M111),A
 
 
 
        PUSH HL
 
        LD H,#C0
 
        LD A,H
 
        OR 0
 
M111    EQU $-1
 
        LD H,A
 
 
 
        LD A,C
 
        ADD A,4
 
        LD L,A
 
 
 
        LD DE,320
 
pradd_l:        
 
        ADD HL,DE
 
        DJNZ pradd_l
 
        LD (COORDS),HL
 
        POP HL
 
        RET        
 
;---------------        
 
;in A - char to print
 
_type
 
        ld de,0
 
COORDS  equ $-2        
 
        ld h,0
 
        ld l,a
 
M10:
 
        ld bc,FONT
 
        add hl,hl
 
        add hl,hl
 
        add hl,hl
 
        add hl,hl
 
        add hl,bc ;hl addr in FONT
 
 
 
        ex de,hl
 
 
 
        push hl
 
        ld a,(user_scr0_low)
 
        SETPGC000
 
        ld b,8
 
_ppnz2:
 
        push bc
 
        ld a,(de)
 
        ld (hl),a
 
        inc de
 
        ld bc,40
 
        add hl,bc
 
        pop bc
 
        djnz _ppnz2
 
        pop hl
 
 
 
        push hl
 
        ld a,(user_scr0_high)
 
        SETPGC000
 
        ld b,8
 
_ppnz3:
 
        push bc
 
        ld a,(de)
 
        ld (hl),a
 
        inc de
 
        ld bc,40
 
        add hl,bc
 
        pop bc
 
        djnz _ppnz3
 
        pop hl
 
 
 
        ld a,h
 
        xor 0x20
 
        bit 5,h
 
        ld h,a
 
        jr z,_ppnz4:
 
        inc hl
 
 
 
_ppnz4:        
 
        ld (COORDS),hl
 
        ld bc,(CORDS)
 
        inc c
 
        ld (CORDS),bc
 
        ld a,c
 
        cp 64
 
        ret c
 
 
 
        inc b
 
        ld c,0
 
        jp _pradd
 
 
 
UPHL1   CALL UPHL
 
UPHL
 
        PUSH BC
 
        LD BC,40
 
        AND A
 
        SBC HL,BC
 
        POP BC
 
        RET
 
 
 
 
 
DHL1    CALL DHL
 
DHL
 
        PUSH BC
 
        LD BC,40
 
        ADD HL,BC
 
        POP BC
 
        RET
 
;;;;;;;;;;;;;;;;;;;;;;;
 
clear_whole_screen:
 
        call storec000
 
        ld a,(user_scr0_high)
 
        SETPGC000
 
        LD HL,#C000
 
        LD DE,#C001
 
        LD BC,16383
 
        LD [HL],L
 
        LDIR
 
        ld a,(user_scr0_low)
 
        SETPGC000
 
        LD HL,#C000
 
        LD DE,#C001
 
        LD BC,16383
 
        LD [HL],L
 
        LDIR
 
        jp restorec000
 
;;;;;;;;;;;;;;;;;;;;;;;;
 
_clear_textbox:
 
        call storec000
 
 
 
        ld a,(user_scr0_high)
 
        SETPGC000
 
CLEARER_ LD HL,0xda44      ;D080
 
CLEARER1 LD B,32
 
        XOR A
 
25      PUSH HL
 
        LD C,32
 
        LD (HL),A
 
        INC HL
 
        DEC C
 
        JR NZ,$-3
 
        POP HL
 
        LD DE,40
 
        ADD HL,DE
 
        DJNZ 25B
 
 
 
CLEARER2 LD HL,0xfa44   ;F080
 
CLEARER3 LD B,32
 
        XOR A
 
25      PUSH HL
 
        LD C,32
 
        LD (HL),A
 
        INC HL
 
        DEC C
 
        JR NZ,$-3
 
        POP HL
 
        LD DE,40
 
        ADD HL,DE
 
        DJNZ 25B
 
 
 
        ld a,(user_scr0_low)
 
        SETPGC000
 
CLEARER_A LD HL,0xda44
 
CLEARER1A LD B,32
 
        XOR A
 
25      PUSH HL
 
        LD C,32
 
        LD (HL),A
 
        INC HL
 
        DEC C
 
        JR NZ,$-3
 
        POP HL
 
        LD DE,40
 
        ADD HL,DE
 
        DJNZ 25B
 
CLEARER2A LD HL,0xfa44
 
CLEARER3A LD B,32
 
         XOR A
 
25         PUSH HL
 
         LD C,32
 
         LD (HL),A
 
         INC HL
 
         DEC C
 
         JR NZ,$-3
 
         POP HL
 
        LD DE,40
 
        ADD HL,DE
 
         DJNZ 25B
 
        
 
         jp restorec000
 
 
 
;----------------------------------------------------
 
_pre_setup
 
        ; ld a,(hl);string length
 
        ld a,(hl)
 
        ld (_line_lenght),a
 
        inc hl 
 
 
 
        ld a,(hl)
 
        ld (DOWN_LIMIT),a
 
        inc hl 
 
        push hl
 
        xor a
 
        ld (CUR_POS),a
 
        LD HL,#121A
 
        LD (_mnpos),HL
 
        pop hl
 
        ret
 
;----------------------------------------------------
 
_prt_menu
 
        ld bc,0
 
_mnpos: equ $-2        
 
        call _pradd
 
prt_m1:
 
        ld a,(hl)
 
        inc hl
 
        and a
 
        RET Z
 
        cp 1
 
        JR Z,PRT_M2
 
        cp 128
 
        call nc,change_cp
 
        CP "#"
 
        call z,change_cp1
 
        CP "@"
 
        call z,change_cp2        
 
        SUB 32
 
        PUSH HL
 
        CALL _type
 
        POP HL
 
        JR prt_m1
 
PRT_M2: LD A,(_mnpos+1)
 
        INC A
 
        LD (_mnpos+1),A
 
        JR _prt_menu
 
 
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
_sel_menu:
 
        ld hl,0xD691   ;- left top corner of menus
 
        ld a,0
 
CUR_POS EQU $-1 
 
        and a 
 
        jr z,_sel_m_skip_c
 
 
 
        ld bc,320
 
_sel_menu_clc:
 
        add hl,bc
 
        dec a
 
        jr nz,_sel_menu_clc
 
 
 
_sel_m_skip_c:
 
        ld (SEL_S),hl
 
 
 
        call _highlight_selected
 
_sel_wait_loop:
 
        call waitkey
 
 
 
        cp key_up
 
        jr z,_sel_move_up
 
        cp key_down
 
        jr z,_sel_move_down
 
        cp key_enter
 
        jr z,_sel_sel_key
 
        cp ' '
 
        jr z,_sel_sel_key
 
        cp key_esc
 
        jr z,_sel_esc_key
 
        jr _sel_wait_loop
 
 
 
_sel_move_down
 
        ld hl,0
 
SEL_S   EQU $-2
 
        call _highlight_selected        
 
        ld hl,CUR_POS
 
        ld a,(hl)
 
        cp 0
 
DOWN_LIMIT EQU $-1        
 
        jp nc,_sel_menu
 
        inc (hl)
 
        jp _sel_menu
 
 
 
_sel_move_up
 
        ld hl,(SEL_S)
 
        call _highlight_selected        
 
        ld hl,CUR_POS
 
        ld a,(hl)
 
        and a
 
        jp z,_sel_menu
 
        dec (HL)
 
        jp _sel_menu
 
_sel_sel_key:
 
        ld hl,(SEL_S)
 
        call _highlight_selected
 
        ld a,(CUR_POS)
 
        ret
 
 
 
_sel_esc_key:
 
SEL_L   
 
        ld hl,(SEL_S)
 
        call _highlight_selected
 
        ld a,0xff
 
        ret
 
 
 
;--------------------------------------
 
;in hl adress in screen
 
_highlight_selected
 
;LINE1
 
        push de
 
        push hl
 
        call storec000
 
        pop hl 
 
 
 
        LD A,0
 
_line_lenght equ $-1
 
        LD [LINELEN],A
 
        LD [LINELEN0],A
 
        LD [LINELEN1],A
 
        LD [LINELEN2],A
 
 
 
         LD [LINE1_1],HL
 
         set 5,h
 
         LD [LINE1_2],HL
 
 
 
         ld a,(user_scr0_high)
 
         SETPGC000
 
 
 
         LD HL,0
 
LINE1_1  EQU $-2
 
         LD B,8
 
0        PUSH BC,HL
 
         LD B,6
 
LINELEN EQU $-1
 
1        LD A,(HL)
 
         XOR %00010010
 
         LD (HL),A
 
         INC HL
 
         DJNZ 1B
 
         POP HL
 
         CALL DHL
 
         POP BC
 
         DJNZ 0B
 
         LD HL,0
 
LINE1_2  EQU $-2
 
         LD B,8
 
0        PUSH BC,HL
 
         LD B,6
 
LINELEN0 EQU $-1
 
1        LD A,(HL)
 
         XOR %00010010
 
         LD (HL),A
 
         INC HL
 
         DJNZ 1B
 
         POP HL
 
         CALL DHL
 
         POP BC
 
         DJNZ 0B
 
 
 
         ld a,(user_scr0_low)
 
         SETPGC000
 
 
 
         LD HL,(LINE1_1)
 
         LD B,8
 
0        PUSH BC,HL
 
         LD B,6
 
LINELEN1 EQU $-1
 
1        LD A,(HL)
 
         XOR %00010010
 
         LD (HL),A
 
         INC HL
 
         DJNZ 1B
 
         POP HL
 
         CALL DHL
 
         POP BC
 
         DJNZ 0B
 
 
 
         LD HL,[LINE1_2]
 
         LD B,8
 
0        PUSH BC,HL
 
         LD B,6
 
LINELEN2 EQU $-1
 
1        LD A,(HL)
 
         XOR %00010010
 
         LD (HL),A
 
         INC HL
 
         DJNZ 1B
 
         POP HL
 
         CALL DHL
 
         POP BC
 
         DJNZ 0B
 
 
 
         call restorec000
 
         pop de
 
         ret
 
;;;;;;;;;;;;;;;;;;;;;;
 
_pre_menu_store_bgnd:
 
        push af
 
        push hl
 
        ;#d680
 
        call store8000c000
 
 
 
        ld a,(src_buf1)
 
        SETPG8000
 
 
 
        ld a,(user_scr0_low)
 
        SETPGC000
 
 
 
        ld hl,0xd680
 
        ld de,0x8000
 
        ld bc,320*7
 
        ldir
 
 
 
        ld hl,0xf680
 
        ld bc,320*7
 
        ldir
 
 
 
 
 
        ld a,(user_scr0_high)
 
        SETPGC000
 
        ld hl,0xd680
 
        ld bc,320*7
 
        ldir
 
 
 
        ld hl,0xf680
 
        ld bc,320*7
 
        ldir
 
 
 
        call restore8000c000
 
        pop hl
 
        pop af
 
        ret
 
_pre_menu_restore_bgnd:
 
        push af
 
        push hl
 
        ;#d680
 
        call store8000c000
 
 
 
        ld a,(src_buf1)
 
        SETPG8000
 
 
 
        ld a,(user_scr0_low)
 
        SETPGC000
 
 
 
        ld hl,0x8000
 
        ld de,0xd680
 
        ld bc,320*7
 
        ldir
 
 
 
        ld de,0xf680
 
        ld bc,320*7
 
        ldir
 
 
 
        ld a,(user_scr0_high)
 
        SETPGC000
 
        ld de,0xd680
 
        ld bc,320*7
 
        ldir
 
 
 
        ld de,0xf680
 
        ld bc,320*7
 
        ldir
 
        call restore8000c000        
 
        pop hl
 
        pop af
 
        ret
 
;---------------------------
 
store_scr0_mem_buf:
 
        call store8000c000
 
 
 
        ld a,(mem_buf1)
 
        SETPG8000
 
 
 
        ld a,(user_scr0_low)
 
        SETPGC000
 
 
 
        ld hl,0xc000
 
        ld de,0x8000
 
        ld bc,16384
 
        ldir
 
 
 
        ld a,(mem_buf2)
 
        SETPG8000
 
        ld a,(user_scr0_high)
 
        SETPGC000
 
        ld hl,0xc000
 
        ld de,0x8000
 
        ld bc,16384
 
        ldir
 
 
 
        ld hl,pal
 
        ld de,0xbfff-32
 
        ld bc,32
 
        ldir        
 
        jp restore8000c000
 
 
 
restore_scr0_mem_buf:
 
        call store8000c000
 
 
 
        ld a,(mem_buf2)
 
        SETPG8000
 
 
 
        ld a,(user_scr0_high)
 
        SETPGC000
 
 
 
        ld de,pal
 
        ld hl,0xbfff-32
 
        ld bc,32
 
        ldir
 
 
 
        ld a,1
 
        ld (setpalflag),a
 
 
 
        ld de,0xc000
 
        ld hl,0x8000
 
        ld bc,16384
 
        ldir
 
 
 
        ld a,(mem_buf1)
 
        SETPG8000
 
        ld a,(user_scr0_low)
 
        SETPGC000
 
        ld de,0xc000
 
        ld hl,0x8000
 
        ld bc,16384
 
        ldir
 
 
 
        jp restore8000c000        
 
;--------------------------- 
 
EXITDARK
 
       CALL clear_whole_screen
 
       JP begin
 
 
 
;;;;;;=====
 
FLASH
 
        ld b,(hl)
 
        inc hl
 
        push hl
 
 
 
        push bc
 
 
 
        ld hl,pal
 
        ld de,temppal
 
        ld bc,32
 
        ldir
 
 
 
        pop bc
 
 
 
FLASH_LP:
 
        push bc
 
 
 
        ld hl,whitepal
 
        ld de,pal
 
        ld bc,32 
 
        ldir
 
 
 
        ld a,1
 
        ld (setpalflag),a
 
 
 
        halt
 
        halt
 
        halt
 
        halt
 
        halt
 
 
 
 
 
        ld hl,temppal
 
        ld de,pal
 
        ld bc,32 
 
        ldir
 
 
 
        ld a,1
 
        ld (setpalflag),a
 
 
 
        halt
 
        halt
 
        halt
 
        halt
 
        halt
 
 
 
        pop bc
 
        djnz FLASH_LP
 
        pop hl
 
        jp _print
 
 
 
 
 
SHAKE:
 
        ld b,(hl)
 
        inc hl
 
 
 
        push hl
 
        push bc
 
 
 
        call store8000c000
 
 
 
        ld a,(user_scr0_low)
 
        SETPG8000
 
        ld a,(user_scr1_low)
 
        SETPGC000
 
 
 
        ld hl,0x8000+320
 
        ld de,0xc000
 
        ld bc,8000-320
 
        ldir
 
        ;ld hl,0x8000
 
        ;ld bc,320
 
        ;ldir
 
 
 
        ld hl,0xa000+320
 
        ld de,0xe000
 
        ld bc,8000-320
 
        ldir
 
        ;ld hl,0xa000
 
        ;ld bc,320
 
        ;ldir
 
 
 
 
 
        ld a,(user_scr0_high)
 
        SETPG8000
 
        ld a,(user_scr1_high)
 
        SETPGC000
 
 
 
        ld hl,0x8000+320
 
        ld de,0xc000
 
        ld bc,8000-320
 
        ldir
 
        ;ld hl,0x8000
 
        ;ld bc,320
 
        ;ldir
 
 
 
        ld hl,0xa000+320
 
        ld de,0xe000
 
        ld bc,8000-320
 
        ldir
 
        ;ld hl,0xa000
 
        ;ld bc,320
 
        ;ldir
 
 
 
 
 
        pop bc
 
SHAKE_LP:
 
        push bc
 
 
 
        ld e,1
 
        OS_SETSCREEN
 
 
 
        halt
 
        halt
 
        halt
 
        halt
 
        halt
 
 
 
        ld e,0
 
        OS_SETSCREEN
 
 
 
        halt
 
        halt
 
        halt
 
        halt
 
        halt
 
 
 
        pop bc
 
        djnz SHAKE_LP
 
 
 
        call restore8000c000
 
        pop hl
 
        jp _print
 
;;;;;;;;;;;;;;;;;;;;;;
 
; ╨╚╤╙═╬╩ ╚╟ ╧└╠▀╥╚ ┬ ┴╙╘┼╨ ┬█┬╬─└
 
RESTOREBGND
 
       PUSH HL
 
 
 
       call store8000c000
 
 
 
       ld a,(mem_buf1)
 
       SETPG8000
 
       ld a,(load_buf1)
 
       SETPGC000
 
 
 
       ld hl,0x8000
 
       ld de,0xc000
 
       ld bc,16384
 
       ldir
 
 
 
       ld a,(mem_buf2)
 
       SETPG8000
 
       ld a,(load_buf2)
 
       SETPGC000
 
 
 
       ld hl,0x8000
 
       ld de,0xc000
 
       ld bc,16384
 
       ldir
 
 
 
       ld hl,mempal
 
       ld de,pal
 
       ld bc,32
 
       ldir
 
 
 
       call restore8000c000
 
       POP HL
 
       JP _print
 
 
 
;-----
 
;┬ ╥┼╬╨╚╚ ─╬╦╞═╬ ┴█╥▄ ╟└╩╚─█┬└═╚┼ ▌╩╨└═└ ┬ "PAGEMEM"
 
;╤┼╔╫└╤ ╤─┼╦└╦ ╟└╩╚─█┬└═╚┼ "PAGEBUF"  ┬  "PAGEMEM"
 
STOREBGND
 
       PUSH HL
 
       call store8000c000
 
 
 
       ld a,(mem_buf1)
 
       SETPG8000
 
       ld a,(load_buf1)
 
       SETPGC000
 
 
 
       ld hl,0xc000
 
       ld de,0x8000
 
       ld bc,16384
 
       ldir
 
 
 
       ld a,(mem_buf2)
 
       SETPG8000
 
       ld a,(load_buf2)
 
       SETPGC000
 
 
 
       ld hl,0xc000
 
       ld de,0x8000
 
       ld bc,16384
 
       ldir
 
 
 
       ld hl,pal
 
       ld de,mempal
 
       ld bc,32
 
       ldir
 
 
 
       call restore8000c000
 
       POP HL
 
       JP _print       
 
 
 
;-------GROUP15 TEMINATORS-----
 
ALLANIMOFF
 
CLRANIM JP _print
 
ANIMON  INC HL
 
        JR CLRANIM
 
LOADANIM
 
          LD DE,4
 
          ADD HL,DE
 
LOADANIM0 LD A,(HL)
 
          AND A
 
          JR Z,LOADANIM1
 
          INC HL
 
          JR LOADANIM0
 
LOADANIM1 INC HL
 
          JP _print
 
 
 
;-----------------------------
 
CLRSCREEN LD A,(HL)
 
          LD (outtyp),A
 
          INC HL
 
          PUSH HL
 
 
 
          call store8000c000
 
          ld a,(user_scr1_low)
 
          SETPG8000
 
 
 
          ld hl,0x8000
 
          ld de,0x8001
 
          ld bc,16383
 
          ld (hl),0
 
          ldir
 
 
 
          ld a,(user_scr1_high)
 
          SETPG8000
 
 
 
          ld hl,0x8000
 
          ld de,0x8001
 
          ld bc,16383
 
          ld (hl),0
 
          ldir
 
 
 
          call restore8000c000
 
          call _2ndscreen_output
 
          pop hl
 
          jp _print
 
 
 
;======================
 
load_tb008:
 
        inc hl
 
        LD A,(HL)
 
        LD (DELAY),A
 
        inc hl
 
        push hl
 
        call load_gfx_to_load_buf_nopal
 
        pop hl
 
       ld de,buf
 
        call copystr_hlde
 
        inc hl
 
        JP _print        
 
 
 
;======================
 
SPRITELOAD1:
 
        ld a,(hl)
 
        cp 07
 
        jr z,load_tb008
 
        INC HL
 
        LD A,(HL)
 
        LD (DELAY),A
 
        INC HL
 
        LD A,(HL)
 
        CP #0D
 
        JP Z,NORMALSPR
 
 
 
;----------------------------------------------------------------------------------------
 
;┬╬╟╠╬╞═╬ ┬╤┼╥└╩╚ ╥╙╥ ═└─╬ ╟└╩╚─█┬└═╚┼ ▌╩╨└═└ ┬ "PAGEBUF"
 
 
 
        ;чфхё№ уЁєчшЄё  tb_008 !!!!!
 
 
 
        LD DE,7
 
        ADD HL,DE
 
        JP _print
 
 
 
 
 
NORMALSPR
 
        INC HL
 
        LD A,(HL)
 
        LD (XPOS),A
 
        INC HL,HL
 
 
 
        PUSH HL
 
        call load_gfx_to_scr_buf
 
        pop hl
 
 
 
        ld de,buf
 
        call copystr_hlde
 
        inc hl
 
 
 
        push hl
 
        CALL DECR_SPR
 
        POP HL
 
        JP _print
 
 
 
 
 
decrspr_offset dw 0 ;offset to draw sprite
 
dcrspr_len dw 0      ; cutted length
 
DECR_SPR:
 
 
 
        ld a,0
 
XPOS    EQU $-1
 
        SRL A
 
        jr nc,xpos1
 
        inc a
 
xpos1:        
 
        ld c,a
 
        ld b,0
 
 
 
;         LD BC,0
 
;XPOS     EQU $-2
 
;        LD HL,ZONEADR
 
;        ADD HL,BC
 
;        LD C,(HL)
 
;        ld b,0
 
 
 
        ld (decrspr_offset),bc
 
 
 
        and a
 
        ld hl,32
 
        SBC hl,bc
 
        ld (dcrspr_len),hl
 
 
 
        call store8000c000
 
 
 
        ld a,(scr_buf1)
 
        SETPG8000
 
        ld a,(load_buf1)
 
        SETPGC000
 
 
 
        ld bc,(decrspr_offset)
 
        ld hl,0xc004
 
        add hl,bc
 
        ld de,0x8004
 
 
 
        ld b,160
 
decr_spr_lp1:
 
        push bc
 
 
 
        push hl
 
        push de
 
 
 
        ld bc,(dcrspr_len)
 
        call _iob
 
 
 
        pop hl ; (de)
 
        call DHL
 
        ex de,hl
 
        pop hl
 
        call DHL
 
 
 
        pop bc
 
        djnz decr_spr_lp1
 
 
 
 
 
        ld bc,(decrspr_offset)
 
        ld hl,0xe004
 
        add hl,bc
 
        ld de,0xa004
 
 
 
        ld b,160
 
decr_spr_lp2:
 
        push bc
 
 
 
        push hl
 
        push de
 
 
 
        ld bc,(dcrspr_len)
 
        call _iob
 
 
 
        pop hl ; (de)
 
        call DHL
 
        ex de,hl
 
        pop hl
 
        call DHL
 
 
 
        pop bc
 
        djnz decr_spr_lp2
 
 
 
 
 
        ld a,(scr_buf2)
 
        SETPG8000
 
        ld a,(load_buf2)
 
        SETPGC000
 
 
 
        ld bc,(decrspr_offset)
 
        ld hl,0xc004
 
        add hl,bc
 
        ld de,0x8004
 
 
 
        ld b,160
 
decr_spr_lp3:
 
        push bc
 
 
 
        push hl
 
        push de
 
 
 
        ld bc,(dcrspr_len)
 
        call _iob
 
 
 
        pop hl ; (de)
 
        call DHL
 
        ex de,hl
 
        pop hl
 
        call DHL
 
 
 
        pop bc
 
        djnz decr_spr_lp3
 
 
 
 
 
        ld bc,(decrspr_offset)
 
        ld hl,0xe004
 
        add hl,bc
 
        ld de,0xa004
 
 
 
        ld b,160
 
decr_spr_lp4:
 
        push bc
 
 
 
        push hl
 
        push de
 
 
 
        ld bc,(dcrspr_len)
 
        call _iob
 
 
 
        pop hl ; (de)
 
        call DHL
 
        ex de,hl
 
        pop hl
 
        call DHL
 
 
 
        pop bc
 
        djnz decr_spr_lp4
 
 
 
        jp restore8000c000
 
;-----------------------
 
_prt_ingame_menu:
 
        ld bc,0
 
_ingame_m_mnpos: equ $-2
 
        call _pradd
 
prt_ingame_m1:
 
        ld a,(hl)
 
        inc hl
 
        and a
 
        RET Z
 
        cp 1
 
        JR Z,prt_ingame_m2
 
        cp 128
 
        call nc,change_cp
 
        CP "#"
 
        call z,change_cp1
 
        CP "@"
 
        call z,change_cp2        
 
        SUB 32
 
        PUSH HL
 
        CALL _type
 
        POP HL
 
        JR prt_ingame_m1
 
prt_ingame_m2:
 
        LD A,(_ingame_m_mnpos) ;x-coord
 
        add a,16
 
        ld (_ingame_m_mnpos),a
 
        cp 64
 
        jr c,_prt_ingame_menu
 
        and 0x3f
 
        LD (_ingame_m_mnpos),A
 
        ld a,(_ingame_m_mnpos+1)
 
        inc a
 
        ld (_ingame_m_mnpos+1),a
 
        JR _prt_ingame_menu
 
;------------------------------------
 
 
 
_sel_ingame_menu:
 
        ld a,0
 
_ingame_m_curpos equ $-1
 
        ld hl,MENUCURHELPER
 
        call sel_word
 
        ld (_sel_ingame_SELS4),hl
 
        call _highlight_selected
 
_sel_ingame_SELS3:        
 
        call waitkey
 
 
 
        cp key_esc
 
        jp z,_sel_ingame_esc
 
 
 
        cp key_left
 
        jr z,_sel_ingame_SELS_keyleft
 
        cp key_right
 
        jr z,_sel_ingame_SELS_keyright
 
 
 
        cp key_up
 
        jr z,_sel_ingame_SELS_keyup
 
        cp key_down
 
        jr z,_sel_ingame_SELS_keydown
 
                
 
        cp key_enter
 
        jr z,_sel_ingame_SELECTED
 
        cp ' '
 
        jr z,_sel_ingame_SELECTED
 
        jr _sel_ingame_SELS3        
 
_sel_ingame_esc:
 
        ld hl,0
 
_sel_ingame_SELS4: equ $-2
 
        call _highlight_selected
 
        ld a,0xff
 
        ret
 
_sel_ingame_SELS_keyleft:
 
        ld hl,(_sel_ingame_SELS4)
 
        call _highlight_selected 
 
 
 
        ld hl,_ingame_m_curpos
 
        ld a,(hl)
 
        and a
 
        jp z,_sel_ingame_menu
 
        dec (HL)
 
        jp _sel_ingame_menu
 
 
 
_sel_ingame_SELS_keyright:
 
        ld hl,(_sel_ingame_SELS4)
 
        call _highlight_selected 
 
        ld hl,_ingame_m_curpos
 
        ld a,(hl)
 
        cp 0
 
_ingame_m_downlimit EQU $-1        
 
        jp nc,_sel_ingame_menu
 
        inc (hl)
 
        jp _sel_ingame_menu
 
_sel_ingame_SELECTED:
 
        ld hl,(_sel_ingame_SELS4)
 
        call _highlight_selected
 
        ld a,(_ingame_m_curpos)
 
        ret
 
 
 
_sel_ingame_SELS_keyup:
 
        ld hl,(_sel_ingame_SELS4)
 
        call _highlight_selected 
 
 
 
 
 
        ld hl,_ingame_m_curpos
 
        ld a,(hl)
 
        sub 4
 
        jp m,_sel_ingame_menu        
 
        ld (hl),a
 
        jp _sel_ingame_menu
 
 
 
_sel_ingame_SELS_keydown:
 
        ld hl,(_sel_ingame_SELS4)
 
        call _highlight_selected 
 
 
 
        ld a,(_ingame_m_downlimit)
 
        inc a
 
        ld b,a
 
 
 
        ld hl,_ingame_m_curpos
 
        ld a,(hl)
 
        add a,4
 
        sub b       
 
        jp p,_sel_ingame_menu        
 
        add a,b
 
        ld (hl),a
 
 
 
        jp _sel_ingame_menu