1168 lines
16 KiB
NASM
1168 lines
16 KiB
NASM
device zxspectrum128
|
|
|
|
;; temp pages:
|
|
Tile0_spr_page equ #d8
|
|
Vid_page equ #e0
|
|
Sprite_page equ #e8
|
|
Tile_page equ #ef
|
|
|
|
Mouse_pal_num equ #f0
|
|
|
|
cursor_adr equ #c000
|
|
cursor_page equ #10
|
|
|
|
get_buffer_page equ #40
|
|
get_buffer equ #4000
|
|
|
|
window_height equ #0d
|
|
window_start_Yl equ #c400
|
|
window_start_Y equ high window_start_Yl
|
|
|
|
|
|
link_adreses equ #0;+6
|
|
|
|
|
|
org #8000
|
|
start
|
|
ld sp,#bfff
|
|
; ld hl,all_pal_bin+7+2
|
|
; ld (hl),#63
|
|
|
|
call all_init
|
|
/*
|
|
ld hl,0
|
|
ld de,1
|
|
ld bc,#fff
|
|
ld (hl),l
|
|
ldir
|
|
*/
|
|
ld hl,get_buffer
|
|
ld de,link_adreses
|
|
call parse_get
|
|
ex de,hl
|
|
ld bc,6
|
|
or a
|
|
sbc hl,bc
|
|
ld a,(hl) ; all lines
|
|
sub window_height
|
|
ld (all_lines_counter+1),a
|
|
|
|
call set_Textpage
|
|
ld hl,#c080
|
|
ld a,#07
|
|
1 ld (hl),a
|
|
inc l
|
|
jr nz,1b
|
|
ld l,#80
|
|
inc h
|
|
jr nz,1b
|
|
|
|
ld ix,link_adreses
|
|
ld hl,get_buffer
|
|
ld de,window_start_Yl
|
|
ld b,window_height
|
|
2 push bc
|
|
call show_line_get_buffer
|
|
pop bc
|
|
djnz 2b
|
|
ei
|
|
1 call wait_frame
|
|
|
|
jr 1b
|
|
|
|
text_down_copy db #1a,0 ;low #c000+window_height*2*256
|
|
db #1c,Vid_page
|
|
db #1d,0 ;low #c200+window_height*2*256
|
|
db #1f,Vid_page
|
|
db #26,#ff
|
|
db #28,0
|
|
|
|
db #ff
|
|
/*
|
|
ld hl,get_buffer
|
|
ld de,link_adreses
|
|
; 0 - number of link
|
|
; 1,2 - adress of link name
|
|
; 3,4 - adress of link url
|
|
; 5 - count of chars date+author lenght
|
|
*/
|
|
|
|
text_up
|
|
link_num ld a,0
|
|
all_lines_counter
|
|
cp 0
|
|
ret z
|
|
inc a
|
|
ld (link_num+1),a
|
|
add window_height-1
|
|
call calc_link_num
|
|
ld hl,text_up_copy
|
|
call set_ports
|
|
ld hl,window_start_Yl+((window_height-1)*2*256)
|
|
push hl
|
|
call clear_text_line
|
|
pop de
|
|
ld l,(ix+1)
|
|
ld h,(ix+2)
|
|
call show_line_get_buffer
|
|
ld a,1
|
|
ret
|
|
|
|
calc_link_num ld l,a
|
|
ld h,0
|
|
add hl,hl
|
|
push hl
|
|
add hl,hl
|
|
pop de
|
|
add hl,de
|
|
push hl
|
|
pop ix
|
|
ret
|
|
|
|
text_down
|
|
ld a,(link_num+1)
|
|
or a
|
|
ret z
|
|
dec a
|
|
ld (link_num+1),a
|
|
call calc_link_num
|
|
ld hl,text_down_copy
|
|
call set_ports
|
|
ld d,window_start_Y+window_height*2-4
|
|
ld e,window_start_Y+window_height*2-2
|
|
ld a,window_height-1
|
|
ld (text_down_cnt+1),a
|
|
text_down1 ld b,high DMASADDRH
|
|
out (c),d
|
|
ld b,high DMADADDRH
|
|
out (c),e
|
|
dec d
|
|
dec e
|
|
dec d
|
|
dec e
|
|
ld b,#27
|
|
ld a,DMA_RAM
|
|
out (c),a
|
|
call dma_stats
|
|
|
|
text_down_cnt ld a,0
|
|
dec a
|
|
jr z,down_link
|
|
ld (text_down_cnt+1),a
|
|
jr text_down1
|
|
|
|
/*
|
|
ld hl,get_buffer
|
|
ld de,link_adreses
|
|
; 0 - number of link
|
|
; 1,2 - adress of link name
|
|
; 3,4 - adress of link url
|
|
; 5 - count of chars date+author lenght
|
|
*/
|
|
down_link
|
|
ld hl,window_start_Yl
|
|
push hl
|
|
call clear_text_line
|
|
pop de
|
|
ld l,(ix+1)
|
|
ld h,(ix+2)
|
|
call show_line_get_buffer
|
|
ld a,1
|
|
ret
|
|
|
|
text_up_copy db #1a,0
|
|
db #1b,window_start_Y+2
|
|
db #1c,Vid_page
|
|
db #1d,0
|
|
db #1e,window_start_Y
|
|
db #1f,Vid_page
|
|
db #26,#80-1
|
|
db #28,window_height*2-1 ;-1
|
|
db #27,DMA_RAM
|
|
db #ff
|
|
|
|
|
|
|
|
|
|
set_Tilepage ld a,Tile_page
|
|
jr set_page3
|
|
set_Textpage ld a,Vid_page
|
|
jr set_page3
|
|
|
|
/*
|
|
|
|
reset_buffer_page
|
|
ld a,get_buffer_page
|
|
ld (set_buffer_page+1),a
|
|
jr set_page3
|
|
|
|
next_buffer_page
|
|
ld a,(set_buffer_page+1)
|
|
inc a
|
|
ld (set_buffer_page+1),a
|
|
*/
|
|
|
|
set_buffer_page ld a,get_buffer_page
|
|
set_page3 ld bc,PAGE1
|
|
out (c),a
|
|
ret
|
|
|
|
/*
|
|
ld hl,get_buffer
|
|
ld de,link_adreses
|
|
; 0 - number of link
|
|
; 1,2 - adress of link name
|
|
; 3,4 - adress of link url
|
|
; 5 - count of chars date+author lenght
|
|
*/
|
|
parse_get
|
|
call set_buffer_page
|
|
ld c,0
|
|
parse_get1 ld a,(hl)
|
|
cp #0d
|
|
jr z,parse_end
|
|
ld a,c
|
|
ld (de),a ; number of link
|
|
inc de
|
|
call save_parsed ; adress of link name
|
|
call scan_0d
|
|
call save_parsed ; adress of link url
|
|
call scan_0d ; date adr
|
|
ld b,0
|
|
call scan_count_0d ; author
|
|
call scan_count_0d ; city
|
|
dec b
|
|
ld a,b
|
|
ld (de),a ; count of chars date+author lenght
|
|
inc de
|
|
call scan_0d ; next record
|
|
inc c
|
|
jr parse_get1
|
|
parse_end ld a,#ff
|
|
ld (de),a
|
|
ret
|
|
|
|
save_parsed ld a,l
|
|
ld (de),a ; adress of link adress
|
|
inc de
|
|
ld a,h
|
|
ld (de),a
|
|
inc de
|
|
ret
|
|
|
|
scan_count_0d ld a,(hl)
|
|
inc hl
|
|
inc b
|
|
cp #0d
|
|
jr nz,scan_count_0d
|
|
inc hl ; #0a
|
|
ret
|
|
|
|
scan_0d ld a,(hl)
|
|
inc hl
|
|
cp #0d
|
|
jr nz,scan_0d
|
|
inc hl ; #0a
|
|
ret
|
|
|
|
clear_text_line ld d,h
|
|
inc d
|
|
call set_Textpage
|
|
xor a
|
|
ld b,#80
|
|
1 ld (hl),a
|
|
ld (de),a
|
|
inc l
|
|
inc e
|
|
djnz 1b
|
|
ret
|
|
|
|
show_line_get_buffer
|
|
call set_Textpage
|
|
call set_buffer_page
|
|
show_get_buffer1
|
|
push de
|
|
push de
|
|
ld a,6+8
|
|
call drawString
|
|
pop de
|
|
inc d
|
|
call scan_0d ; propusk: links
|
|
ld c,(ix+5) ; num of chars
|
|
inc c ; + " "
|
|
ld a,80+1
|
|
sub c
|
|
jr nc,1f
|
|
xor a
|
|
1 ld e,a
|
|
ld a,4
|
|
call drawString
|
|
inc de
|
|
ld a,4+8
|
|
call drawString
|
|
call scan_0d ; city
|
|
ld de,6
|
|
add ix,de
|
|
pop de
|
|
inc d
|
|
inc d
|
|
ret
|
|
|
|
|
|
drawString ; de: string
|
|
; hl: screen adress in tiles
|
|
ld (char_color+1),a
|
|
ld b,d
|
|
ld c,e
|
|
set 7,c
|
|
dStr1 ld a,(hl)
|
|
cp #0d
|
|
jr z,dStr2
|
|
ld (de),a
|
|
inc e
|
|
char_color ld a,0
|
|
ld (bc),a
|
|
inc c
|
|
inc hl
|
|
jr dStr1
|
|
|
|
dStr2 inc hl ; #0a
|
|
inc hl ; #0d
|
|
ret
|
|
|
|
|
|
;===========procedures==============
|
|
; display address by cell
|
|
; IN: D-X E-Y
|
|
; OUT: HL
|
|
DISP_ADDR_BY_CELL
|
|
ld a,e
|
|
; sub e
|
|
add #40
|
|
ld h,a
|
|
ld a,d
|
|
add a,a
|
|
add #80
|
|
ld l,a
|
|
ret
|
|
|
|
|
|
|
|
wait_frame ld a,(frame+1)
|
|
or a
|
|
jr z,wait_frame
|
|
xor a
|
|
ld (frame+1),a
|
|
ret
|
|
|
|
|
|
|
|
|
|
int_main push af,hl,de,bc
|
|
frame ld a,0
|
|
inc a
|
|
ld (frame+1),a
|
|
call mouse_buttons
|
|
call mouse
|
|
|
|
ld hl,scan_speed ;30+24
|
|
ld de,int_next
|
|
|
|
int_ex ld bc,VSINTL
|
|
out (c),l
|
|
ld bc,VSINTH
|
|
out (c),h
|
|
ex de,hl
|
|
ld (#beff),hl
|
|
pop bc,de,hl,af
|
|
ei
|
|
ret
|
|
|
|
/*
|
|
int_next push af,hl,de,bc
|
|
call mouse_pos
|
|
ld hl,(288/3)*2
|
|
ld de,int_last
|
|
jr int_ex
|
|
*/
|
|
scan_speed equ 288/4
|
|
|
|
int_next push af,hl,de,bc
|
|
call mouse_pos
|
|
int_scan ld hl,0 ;30+24
|
|
push hl
|
|
ld de,288-scan_speed
|
|
sbc hl,de
|
|
pop hl
|
|
jr c,1f
|
|
ld hl,int_main
|
|
ld (#beff),hl
|
|
ld hl,0-scan_speed
|
|
1
|
|
ld de,scan_speed
|
|
add hl,de
|
|
ld (int_scan+1),hl
|
|
|
|
ld bc,VSINTL
|
|
out (c),l
|
|
ld bc,VSINTH
|
|
out (c),h
|
|
|
|
pop bc,de,hl,af
|
|
ei
|
|
ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; Mouse_proc
|
|
/*
|
|
1 D0 - ëåâàÿ êíîïêà
|
|
2 D1 - ïðàâàÿ êíîïêà
|
|
4 D2 - ñðåäíÿÿ êíîïêà
|
|
|
|
#10-#f0
|
|
D4-D7 - wheel
|
|
*/
|
|
|
|
mouse_buttons
|
|
/*
|
|
ld a,(mouse_y)
|
|
dec a
|
|
ld (mouse_y),a
|
|
*/
|
|
|
|
wheel_check ld c,0
|
|
ld a,(mouse_button)
|
|
cpl
|
|
and #f0
|
|
cp c
|
|
jr z,lmb_old
|
|
wheel_old ld c,0
|
|
ld (wheel_check+1),a
|
|
ld (wheel_old+1),a
|
|
cp c
|
|
jp nc,text_up
|
|
jp text_down
|
|
|
|
|
|
lmb_old ld a,(mouse_button)
|
|
cpl
|
|
and 1
|
|
cp 1 ; lmb pressed
|
|
jp nz,lmb_release
|
|
|
|
border_check ld a,1
|
|
or a
|
|
ret z
|
|
|
|
lmb_counter ld a,0
|
|
inc a
|
|
cp #08
|
|
jr z,drag_start
|
|
jr nc,lmb_drag
|
|
lmb_counter2 ld (lmb_counter+1),a
|
|
ret
|
|
|
|
drag_start ld (lmb_counter+1),a
|
|
old_drag_pos ld a,(mouse_y)
|
|
neg
|
|
ld (list_y_pos+1),a
|
|
ld a,1
|
|
ld (border_check+1),a
|
|
ret
|
|
|
|
lmb_drag
|
|
|
|
ld a,(mouse_y)
|
|
neg
|
|
list_y_pos ld c,0
|
|
sub c
|
|
list_wheel_pos or a
|
|
ret z
|
|
cp #18
|
|
jr nc,ld1
|
|
cp #10
|
|
jr c,ld2
|
|
call old_drag_pos
|
|
call text_up
|
|
ld a,0
|
|
jp z,border_exit
|
|
xor a
|
|
|
|
ld1 neg
|
|
cp #10
|
|
jr c,ld3
|
|
call old_drag_pos
|
|
call text_down
|
|
or a
|
|
jr z,border_exit
|
|
ld a,#f1 ; neg = #0f
|
|
|
|
ld3 neg
|
|
ld2 and #0f
|
|
ld bc,GYOFFSL
|
|
out (c),a
|
|
ld (click_offset+1),a
|
|
ex_no_offset ld a,#02
|
|
jr lmb_ex2
|
|
|
|
lmb_drag_ex
|
|
ld a,(border_check+1)
|
|
or a
|
|
jr nz,lmb_drag_ex2
|
|
xor a
|
|
ld bc,GYOFFSL
|
|
out (c),a
|
|
|
|
jr lmb_ex
|
|
|
|
lmb_drag_ex2 ld a,(list_y_pos+1)
|
|
ld c,a
|
|
ld a,(mouse_y)
|
|
neg
|
|
sub c
|
|
and #0f
|
|
|
|
ld bc,GYOFFSL
|
|
out (c),a
|
|
jr lmb_ex
|
|
|
|
lmb_release
|
|
ld a,(lmb_counter+1)
|
|
or a
|
|
jr z,border_switch_on
|
|
cp 6
|
|
jr nc,lmb_drag_ex
|
|
lmb_click ld a,(mouse_y)
|
|
sub (window_start_Y-#c0)*8
|
|
click_offset add 0
|
|
srl a
|
|
srl a
|
|
srl a
|
|
srl a
|
|
|
|
ld c,a
|
|
ld a,(link_num+1)
|
|
add c
|
|
|
|
call calc_link_num
|
|
ld de,#d000+30
|
|
ld l,(ix+1)
|
|
ld h,(ix+2)
|
|
call show_line_get_buffer
|
|
|
|
/*
|
|
and 7
|
|
add #f0
|
|
ld bc,BORDER
|
|
out (c),a
|
|
*/
|
|
lmb_ex ld (click_offset+1),a
|
|
xor a
|
|
ld (lmb_counter+1),a
|
|
xor a
|
|
lmb_ex2 ld (mouse_spr+4),a
|
|
|
|
border_switch_on ld a,1
|
|
border_exit
|
|
ld (border_check+1),a
|
|
ret
|
|
|
|
mouse call mouse_buttons
|
|
call mouse_pos
|
|
ld a,(mouse_y)
|
|
ld (mouse_spr),a ; Y
|
|
cp 8
|
|
jr nc,mouse_margin_y
|
|
ld de,#fff8
|
|
ld b,d
|
|
ld c,e
|
|
jr mouse_mrg_y_top
|
|
|
|
mouse_margin_y cp 240-16
|
|
jr c,mouse_margin_y_ex
|
|
ld de,#0118
|
|
ld bc,#0008
|
|
|
|
mouse_mrg_y_top ld hl,0
|
|
add hl,bc
|
|
ld a,h
|
|
cp d
|
|
jr nz,mouse_mrg_y_top2
|
|
ld a,l
|
|
cp e
|
|
jr z,mouse_margin_y_ex
|
|
mouse_mrg_y_top2
|
|
ld (mouse_mrg_y_top+1),hl
|
|
|
|
|
|
|
|
mouse_margin_y_ex
|
|
ld hl,(mouse_x)
|
|
ld bc,8
|
|
sub hl,bc
|
|
jr nc,mouse_margin_x
|
|
ld bc,#f8f8
|
|
jr mouse_mrg_x_top
|
|
|
|
mouse_margin_x ld hl,(mouse_x)
|
|
ld bc,320-16
|
|
sub hl,bc
|
|
jr c,mouse_margin_x_ex
|
|
ld bc,#c808
|
|
|
|
mouse_mrg_x_top ld a,0
|
|
add c
|
|
cp b
|
|
jr z,mouse_margin_x_ex
|
|
ld (mouse_mrg_x_top+1),a
|
|
|
|
mouse_margin_x_ex
|
|
ld hl,(mouse_x)
|
|
ld a,l
|
|
ld (mouse_spr+2),a ; X
|
|
ld a,(mouse_spr+3)
|
|
and #fe
|
|
or h
|
|
ld (mouse_spr+3),a
|
|
|
|
ld hl,sprites
|
|
jp set_ports
|
|
/*
|
|
D0 - ëåâàÿ êíîïêà
|
|
D1 - ïðàâàÿ êíîïêà
|
|
D2 - ñðåäíÿÿ êíîïêà
|
|
|
|
D4-D7 - wheel
|
|
|
|
Standard Kempston Mouse
|
|
#FADF - buttons
|
|
#FBDF - X coord
|
|
#FFDF - Y coord
|
|
*/
|
|
mouse_pos
|
|
LD BC,#FADF
|
|
IN A,(C) ;÷èòàåì ïîðò êíîïîê
|
|
key_in ld (mouse_button),a
|
|
/*
|
|
call key_scan
|
|
ki0 LD hl,MOUSE11+1
|
|
ld a,d
|
|
cp #af
|
|
jr nc,ki5
|
|
|
|
kileft and left
|
|
jr z,ki1
|
|
inc (hl)
|
|
inc (hl)
|
|
ki1 ld a,d
|
|
kiright and right
|
|
jr z,ki2
|
|
dec (hl)
|
|
dec (hl)
|
|
ki2 LD hl,MOUSE12+1
|
|
ld a,d
|
|
kidown and down
|
|
jr z,ki3
|
|
inc (hl)
|
|
inc (hl)
|
|
ki3 ld a,d
|
|
kiup and up
|
|
jr z,ki4
|
|
dec (hl)
|
|
dec (hl)
|
|
ki4 ld a,d
|
|
and fire
|
|
or a
|
|
jr z,ki5
|
|
ld a,#0e
|
|
ld (mouse_button),a
|
|
|
|
ki5 ld a,d
|
|
cp rmb_key
|
|
jr nz,ki8
|
|
ld a,#0d
|
|
ld (mouse_button),a
|
|
jr ki6
|
|
|
|
ki8
|
|
; call keys_wait_proc
|
|
; ld a,d
|
|
; cp key_pause
|
|
; jp z,pause_button_view
|
|
|
|
cp key_tower1
|
|
jr c,ki6
|
|
ld c,a
|
|
keys_wait ld a,0
|
|
or a
|
|
jr z,ki7
|
|
jr ki6
|
|
|
|
keys_wait_proc ld a,(keys_wait+1)
|
|
or a
|
|
ret z
|
|
dec a
|
|
ld (keys_wait+1),a
|
|
ret
|
|
|
|
ki7
|
|
|
|
; ld a,(tower_upgrade_flag)
|
|
; or a
|
|
; jr z,ki9
|
|
; ld a,c
|
|
; ld (upgrade_but+1),a
|
|
; jr ki10
|
|
|
|
ki9; ld a,c
|
|
; ld (tower_keys+1),a
|
|
ki10; xor a
|
|
; ld (tpr_old+1),a
|
|
ld a,18
|
|
ld (keys_wait+1),a
|
|
ld a,#0e
|
|
ld (mouse_button),a
|
|
ki6
|
|
*/
|
|
; LD HL,(mouse_xy)
|
|
LD BC,#FBDF
|
|
mz0 IN A,(C)
|
|
MOUSE11 LD d,0
|
|
LD (MOUSE11+1),A
|
|
sub d
|
|
CALL NZ,MOUSE_X_vector
|
|
LD B,#FF
|
|
mz1 IN A,(C)
|
|
/*
|
|
mz2 ld hl,#4000
|
|
ld (hl),a
|
|
inc hl
|
|
ld (mz2+1),hl
|
|
*/
|
|
MOUSE12 LD D,0
|
|
LD (MOUSE12+1),A
|
|
SUB D
|
|
CALL NZ,MOUSE_Y_vector
|
|
RET
|
|
|
|
MOUSE_X_vector
|
|
JP M,MOUSE35 ; Sign Negative (M)
|
|
ld e,a
|
|
ld d,0
|
|
ld hl,(mouse_x)
|
|
add hl,de
|
|
ld (mouse_x),hl
|
|
ld de,320
|
|
sub hl,de
|
|
ret c
|
|
1 ld hl,320-1
|
|
ld (mouse_x),hl
|
|
RET
|
|
|
|
|
|
MOUSE35
|
|
neg
|
|
ld e,a
|
|
ld d,0
|
|
or a
|
|
ld hl,(mouse_x)
|
|
sub hl,de
|
|
jr nc,1f
|
|
ld hl,0
|
|
1
|
|
ld (mouse_x),hl
|
|
RET
|
|
|
|
MOUSE_Y_vector
|
|
JP M,MOUSE45
|
|
|
|
ld e,a
|
|
ld d,0
|
|
or a
|
|
ld hl,(mouse_y)
|
|
sub hl,de
|
|
jr nc,2f
|
|
ld hl,0
|
|
2
|
|
ld (mouse_y),hl
|
|
|
|
ret
|
|
|
|
MOUSE45
|
|
neg
|
|
ld e,a
|
|
ld d,0
|
|
ld hl,(mouse_y)
|
|
add hl,de
|
|
ld (mouse_y),hl
|
|
ld de,240
|
|
sub hl,de
|
|
ret c
|
|
1 ld hl,240-1
|
|
ld (mouse_y),hl
|
|
ret
|
|
|
|
|
|
|
|
koorp ld a,c
|
|
and #18
|
|
; or #c0
|
|
ld h,a
|
|
ld a,c
|
|
and #07
|
|
rrca
|
|
rrca
|
|
rrca
|
|
add a,b
|
|
ld l,a
|
|
ret ; 14 áàéò, 53 òàêòà
|
|
|
|
|
|
im2_init
|
|
xor a
|
|
ld bc,HSINT
|
|
out (c),a
|
|
ld bc,VSINTL
|
|
out (c),a
|
|
ld bc,VSINTH
|
|
out (c),a
|
|
ld e,4
|
|
ld b,high GXOFFSL
|
|
call fill_ports
|
|
ld e,7
|
|
ld b,high T0XOFFSL
|
|
call fill_ports
|
|
call spr_off
|
|
ld a,#be
|
|
ld i,a
|
|
ld hl,int_main
|
|
ld (#beff),hl
|
|
im 2
|
|
ret
|
|
|
|
fill_ports out (c),a
|
|
inc b
|
|
dec e
|
|
jr nz,$-4
|
|
ret
|
|
|
|
; ----- alex rider keys
|
|
|
|
right: equ #01
|
|
left: equ #02
|
|
down: equ #04
|
|
up: equ #08
|
|
fire: equ #10
|
|
rmb_key equ #f0
|
|
|
|
key_pause equ #cf
|
|
key_tower1 equ #b0
|
|
key_tower2 equ #b2
|
|
key_tower3 equ #b4
|
|
key_tower4 equ #b6
|
|
key_code equ #b8
|
|
|
|
; in: nothing
|
|
; out:
|
|
key_scan ; d - pressed directions in kempston format
|
|
ld a,#fe ; check for CAPS SHIFT
|
|
in a,(#fe)
|
|
rra
|
|
ld hl,key_table - 1 ; selection of appropriate keyboard table
|
|
jr c,.no_cs
|
|
ld hl,cs_key_table - 1 ; hl - keyboard table (zero-limited)
|
|
.no_cs:
|
|
ld d,#00 ; clear key flag
|
|
ld c,#0fe ; low address of keyboard port
|
|
.loop:
|
|
inc hl ; next key
|
|
ld b,(hl) ; high byte of port address from table
|
|
inc b ; end of table check
|
|
dec b
|
|
ret z
|
|
inc hl ; going to key mask
|
|
in a,(c) ; reading half-row state
|
|
or (hl) ;
|
|
inc hl ; going to key flag
|
|
inc a ; a = half-row state or mask. if #ff - current key isn't pressed
|
|
ld a,d
|
|
jr z,.loop ; key isn't pressed
|
|
or (hl) ; result or key flag
|
|
ld d,a ; store it
|
|
jr .loop
|
|
|
|
; key table format
|
|
; 1st byte - high byte of keyboard half-row address
|
|
; 2nd byte - inverted key mask (e.g. outer key - #fe, next key - #0fd etc)
|
|
; 3rd byte - direction bit
|
|
|
|
key_table:
|
|
db #0ef, #0fe, fire ;0
|
|
db #0ef, #0fd, up ;9
|
|
db #0ef, #0fb, down ;8
|
|
db #0ef, #0f7, right ;7
|
|
db #0ef, #0ef, left ;6
|
|
|
|
|
|
db #0f7, #0fe, key_tower1 ;1
|
|
db #0f7, #0fd, key_tower2 ;2
|
|
db #0f7, #0fb, key_tower3 ;3
|
|
db #0f7, #0f7, key_tower4 ;4
|
|
db #0f7, #0ef, key_code ;5
|
|
|
|
db #0df, #0fe, right ;p
|
|
db #0df, #0fd, left ;o
|
|
db #0fb, #0fe, up ;q
|
|
db #0fd, #0fe, down ;a
|
|
db #07f, #0fb, fire ;m
|
|
db #07f, #0fe, key_pause ;space
|
|
|
|
db #000
|
|
|
|
|
|
cs_key_table:
|
|
db #0ef, #0fe, fire ;0
|
|
db #0ef, #0fb, right ;8
|
|
db #0ef, #0f7, up ;7
|
|
db #0ef, #0ef, down ;6
|
|
db #0f7, #0ef, left ;5
|
|
db #07f, #fd , rmb_key ;caps+sym
|
|
db #000
|
|
|
|
|
|
; ---------------- end of alex sources
|
|
fill_menu push bc
|
|
fill_menu1 ld (hl),e
|
|
inc l
|
|
ld (hl),d
|
|
inc l
|
|
djnz fill_menu1
|
|
inc h
|
|
ld l,b
|
|
pop bc
|
|
dec c
|
|
jr nz,fill_menu
|
|
ret
|
|
|
|
all_init di
|
|
ld bc,MEMCONFIG
|
|
ld a,%00001110
|
|
out (c),a
|
|
call im2_init
|
|
call mouse_pos
|
|
call mouse_buttons
|
|
ld hl,#3000 ; 0
|
|
call clear_tileset
|
|
ld hl,cursor_copy
|
|
call set_ports
|
|
|
|
call set_Tilepage
|
|
ld hl,#c000
|
|
ld de,#310c
|
|
ld bc,#4004
|
|
call fill_menu
|
|
ld hl,#dd00
|
|
ld bc,#4001
|
|
call fill_menu
|
|
ld hl,#dd3e
|
|
ld de,#3109
|
|
call set_one_tile
|
|
call set_one_tile
|
|
ld hl,#dd4c
|
|
call set_one_tile
|
|
call set_one_tile
|
|
ld hl,text_pages_db
|
|
ld de,#dd42
|
|
call print
|
|
|
|
ld hl,text_sites
|
|
ld de,#c014
|
|
call print
|
|
|
|
ld hl,text_sites2
|
|
ld de,#c014+8*2+2
|
|
call print
|
|
|
|
ld hl,#c000
|
|
ld de,#3100
|
|
ld bc,#0804 ; 128x160
|
|
ld a,Tile_page
|
|
call tile_filler
|
|
|
|
ld bc,PAGE3
|
|
ld a,Vid_page
|
|
out (c),a
|
|
ld hl,#0000 ;1111 - white
|
|
ld (#c000),hl
|
|
ld hl,init_ts
|
|
jp set_ports
|
|
|
|
print call set_Tilepage
|
|
ld b,d
|
|
ld c,e
|
|
print1 ld a,(hl)
|
|
inc hl
|
|
or a
|
|
ret z
|
|
dec a
|
|
jr nz,print2
|
|
inc b
|
|
ld d,b
|
|
ld e,c
|
|
jr print1
|
|
|
|
print2 sub #20-1
|
|
ld (de),a
|
|
inc e
|
|
ld a,#30
|
|
ld (de),a
|
|
inc e
|
|
jr print1
|
|
|
|
|
|
set_one_tile ld (hl),e
|
|
inc hl
|
|
ld (hl),d
|
|
inc hl
|
|
ld a,e
|
|
add #40
|
|
ld e,a
|
|
ret
|
|
|
|
|
|
|
|
|
|
text_pages_db db "01/01",0
|
|
text_sites db " DEMOS",1," MUSIC",1,"GRAPHICS",0
|
|
text_sites2 db "HYPE",1,"PRESS",0
|
|
|
|
init_ts db #00,VID_TEXT+VID_320X240 ;VID_NOGFX+
|
|
db high VPAGE,Vid_page ;
|
|
db #20,6
|
|
db high BORDER,#f0 ; border
|
|
db high TSCONFIG,TSU_SEN+TSU_T0EN+TSU_T0ZEN;+TSU_T1EN +TSU_T1ZEN ; TSConfig
|
|
db high PALSEL,#3f
|
|
db high SGPAGE, Sprite_page
|
|
db high TMPAGE, Tile_page
|
|
db high T0GPAGE,Tile0_spr_page
|
|
; db high T1GPAGE,Tile1_spr_page
|
|
clr_screen
|
|
defb #1a,0 ;
|
|
defb #1b,0 ;
|
|
defb #1c,Vid_page ;
|
|
defb #1d,0 ;
|
|
defb #1e,0 ;
|
|
defb #1f,Vid_page ;
|
|
defb #26,#ff ;
|
|
defb #28,32-1 ;
|
|
defb #27,%00000100
|
|
db #ff
|
|
|
|
cursor_copy db #1a,low cursor_adr
|
|
db #1b,high cursor_adr
|
|
db #1c,cursor_page
|
|
db #1d,0
|
|
db #1e,0
|
|
db #1f,Sprite_page
|
|
db #26,32/4-1
|
|
db #28,16-1
|
|
db #27,DMA_RAM + DMA_DALGN
|
|
db #ff
|
|
|
|
sprites
|
|
db #1a,low spr_db
|
|
db #1b,high spr_db
|
|
db #1c,2
|
|
db #1d,0
|
|
db #1e,2
|
|
db #1f,0
|
|
db #26,#ff
|
|
db #28,0
|
|
db #27,DMA_RAM_SFILE
|
|
db #ff
|
|
|
|
|
|
include "../includes.asm"
|
|
include "../tsconfig.asm"
|
|
|
|
|
|
mouse_button db 0
|
|
/*
|
|
D0 - ëåâàÿ êíîïêà
|
|
D1 - ïðàâàÿ êíîïêà
|
|
D2 - ñðåäíÿÿ êíîïêà
|
|
*/
|
|
|
|
mouse_x dw 0
|
|
mouse_y dw 0
|
|
; l - X, h- Y
|
|
mouse_map dw 0
|
|
mouse_switch db 0
|
|
|
|
|
|
ALIGN 2
|
|
spr_db
|
|
|
|
DB 0
|
|
DB %01000000 ; leap
|
|
DB 0
|
|
DB %00010000
|
|
DB 0
|
|
DB %11100000
|
|
|
|
|
|
DB 0
|
|
DB %01000000 ; leap
|
|
DB 0
|
|
DB %00010000
|
|
DB 0
|
|
DB %11100000
|
|
|
|
|
|
mouse_spr
|
|
db 0 ;y
|
|
db SP_SIZE16+SP_ACT
|
|
db #0 ;x
|
|
db SP_SIZE16
|
|
db #0
|
|
db Mouse_pal_num+#00
|
|
|
|
|
|
/*
|
|
; show text
|
|
txt_spr
|
|
db 240-96-16;+16 ;y
|
|
db SP_SIZE16+SP_ACT
|
|
db #0 ;x
|
|
db SP_SIZE64
|
|
db #00
|
|
db #ef
|
|
|
|
db 240-96-16;+16 ;y
|
|
db SP_SIZE16+SP_ACT
|
|
db #0+64 ;x
|
|
db SP_SIZE64
|
|
db #08
|
|
db #ef
|
|
*/
|
|
|
|
DB 0 ;exit
|
|
DB %01000000 ; leap
|
|
DB 0
|
|
DB %00010000
|
|
DB 0
|
|
DB %11100000
|
|
|
|
|
|
|
|
|
|
align 2
|
|
|
|
|
|
end
|
|
|
|
SAVEBIN "_spg/wifi.bin",start, end-start |