Go to most recent revision |
Blame |
Compare with Previous |
Last modification |
View Log
| Download
| RSS feed
я╗┐ DEVICE ZXSPECTRUM128
include "../../_sdk/sys_h.asm"
scrbase=0x4000
sprmaxwid=32
sprmaxhgt=32
scrwid=160 ;double pixels
scrhgt=200
STACK=0x3ff0
tempsp=0x3f06 ;6 bytes for prspr
INTSTACK=0x3f00
org PROGSTART
begin
jp GO ;patched by prspr
GO
ld sp,STACK
OS_HIDEFROMPARENT
ld e,0 ;EGA
OS_SETGFX ;e=0:EGA, e=2:MC, e=3:6912, e=6:text ;+SET FOCUS ;e=-1: disable gfx (out: e=old gfxmode) +8=noturbo, +0x80=keep gfx pages
ld de,emptypal
OS_SETPAL ;╨▓╨║╨╗╤О╤З╨░╨╡╨╝ ╤З╤С╤А╨╜╤Г╤О ╨┐╨░╨╗╨╕╤В╤А╤Г, ╤З╤В╨╛╨▒╤Л ╨▒╤Л╨╗╨╛ ╨╜╨╡╨╖╨░╨╝╨╡╤В╨╜╨╛ ╨┐╨╡╤А╨╡╨▒╤А╨╛╤Б╨║╤Г ╤Н╨║╤А╨░╨╜╨░
ld e,0
OS_CLS ;╨╛╤З╨╕╤Б╤В╨╕╨╗╨╕ ╤В╨╡╨║╤Г╤Й╨╕╨╣ ╤Н╨║╤А╨░╨╜
OS_GETMAINPAGES
;dehl=pages in 0000,4000,8000,c000
ld a,e
ld (pgmain4000),a
ld a,h
ld (pgmain8000),a
ld a,l
ld (pgmainc000),a
OS_NEWPAGE ;╨╖╨░╨║╨░╨╖╨░╨╗╨╕ ╨╜╨╛╨▓╤Г╤О ╤Б╤В╤А╨░╨╜╨╕╤Ж╤Г, ╤З╤В╨╛╨▒╤Л ╨│╤А╤Г╨╖╨╕╤В╤М ╤В╤Г╨┤╨░ ╨┤╨░╨╜╨╜╤Л╨╡
ld a,e
ld (pgvorobey),a ;╨╖╨░╨┐╨╛╨╝╨╜╨╕╨╗╨╕ ╨╡╤С ╨╜╨╛╨╝╨╡╤А
OS_NEWPAGE ;╨╖╨░╨║╨░╨╖╨░╨╗╨╕ ╨╜╨╛╨▓╤Г╤О ╤Б╤В╤А╨░╨╜╨╕╤Ж╤Г, ╤З╤В╨╛╨▒╤Л ╨│╤А╤Г╨╖╨╕╤В╤М ╤В╤Г╨┤╨░ ╨┤╨░╨╜╨╜╤Л╨╡
ld a,e
ld (pgscrdata0),a ;╨╖╨░╨┐╨╛╨╝╨╜╨╕╨╗╨╕ ╨╡╤С ╨╜╨╛╨╝╨╡╤А
OS_NEWPAGE ;╨╖╨░╨║╨░╨╖╨░╨╗╨╕ ╨┤╤А╤Г╨│╤Г╤О ╨╜╨╛╨▓╤Г╤О ╤Б╤В╤А╨░╨╜╨╕╤Ж╤Г, ╤З╤В╨╛╨▒╤Л ╨│╤А╤Г╨╖╨╕╤В╤М ╤В╤Г╨┤╨░ ╨┤╨░╨╜╨╜╤Л╨╡
ld a,e
ld (pgscrdata1),a ;╨╖╨░╨┐╨╛╨╝╨╜╨╕╨╗╨╕ ╨╡╤С ╨╜╨╛╨╝╨╡╤А
ld de,path
OS_CHDIR
pgvorobey=$+1
ld a,0
ld de,filenamevorobey
ld hl,0xc000 ;╨║╤Г╨┤╨░ ╨│╤А╤Г╨╖╨╕╨╝
call loadfile_in_ahl ;╨╖╨░╨│╤А╤Г╨╖╨╕╨╗╨╕ ╨╛╨┤╨╕╨╜ ╤Н╨║╤А╨░╨╜╨╜╤Л╨╣ ╤Д╨░╨╣╨╗ ╨▓ ╨╛╨┤╨╜╤Г ╤Б╤В╤А╨░╨╜╨╕╤Ж╤Г
ld a,(pgscrdata0)
ld de,filename0 ;╨╕╨╝╤П ╤Д╨░╨╣╨╗╨░
ld hl,0xc000 ;╨║╤Г╨┤╨░ ╨│╤А╤Г╨╖╨╕╨╝
call loadfile_in_ahl ;╨╖╨░╨│╤А╤Г╨╖╨╕╨╗╨╕ ╨╛╨┤╨╕╨╜ ╤Н╨║╤А╨░╨╜╨╜╤Л╨╣ ╤Д╨░╨╣╨╗ ╨▓ ╨╛╨┤╨╜╤Г ╤Б╤В╤А╨░╨╜╨╕╤Ж╤Г
ld a,(pgscrdata1)
ld de,filename1 ;╨╕╨╝╤П ╤Д╨░╨╣╨╗╨░
ld hl,0xc000 ;╨║╤Г╨┤╨░ ╨│╤А╤Г╨╖╨╕╨╝
call loadfile_in_ahl ;╨╖╨░╨│╤А╤Г╨╖╨╕╨╗╨╕ ╨┤╤А╤Г╨│╨╛╨╣ ╤Н╨║╤А╨░╨╜╨╜╤Л╨╣ ╤Д╨░╨╣╨╗ ╨▓ ╨┤╤А╤Г╨│╤Г╤О ╤Б╤В╤А╨░╨╜╨╕╤Ж╤Г
;╤Б╨╡╨╣╤З╨░╤Б ╤Г ╨╜╨░╤Б ╨▓╨║╨╗╤О╤З╨╡╨╜╤Л ╤Б╤В╤А╨░╨╜╨╕╤Ж╤Л ╨┐╤А╨╛╨│╤А╨░╨╝╨╝╤Л, ╨║╨░╨║ ╨▒╤Л╨╗╨╛
call swapimer
;╤З╤В╨╛-╤В╨╛ ╨┤╨╡╨╗╨░╨╡╨╝...
;╨╜╨╡ ╨▓╨░╨╢╨╜╨╛ ╤З╤В╨╛...
;...
;╤В╨╡╨┐╨╡╤А╤М ╨╜╨░╨┤╨╛ ╨▓╤Л╨▓╨╡╤Б╤В╨╕ ╨╖╨░╨│╤А╤Г╨╢╨╡╨╜╨╜╤Л╨╡ ╨┤╨░╨╜╨╜╤Л╨╡ ╨╜╨░ ╤Н╨║╤А╨░╨╜
ld a,(pgscrdata0)
SETPG32KHIGH ;╨▓╨║╨╗╤О╤З╨╕╨╗╨╕ ╤Б╤В╤А╨░╨╜╨╕╤Ж╤Г ╤Б ╨┤╨░╨╜╨╜╤Л╨╝╨╕ ╨▓ c000
ld a,(user_scr0_low) ;ok
SETPG16K ;╨▓╨║╨╗╤О╤З╨╕╨╗╨╕ ╨┐╨╛╨╗-╤Н╨║╤А╨░╨╜╨░ ╨▓ 4000
ld hl,0xc000
ld de,0x4000
ld bc,0x4000
ldir ;╨┐╨╡╤А╨╡╨▒╤А╨╛╤Б╨╕╨╗╨╕ ╨╜╨░ ╤Н╨║╤А╨░╨╜
ld hl,0x4000+8000 ;╤В╨░╨╝ ╨▓ ╨║╨░╤А╤В╨╕╨╜╨║╨╡ ╨┐╨░╨╗╨╕╤В╤А╨░ (╨┐╨╛ ╨▒╨░╨╣╤В╤Г ╨╜╨░ ╤Ж╨▓╨╡╤В)
ld de,pal
ld b,16
copypal0
ld a,(hl)
inc hl
ld (de),a
inc de
ld (de),a
inc de
djnz copypal0 ;╤Б╨║╨╛╨┐╨╕╤А╨╛╨▓╨░╨╗╨╕ ╨┐╨░╨╗╨╕╤В╤А╤Г ╨▓ pal (╨┐╨╛ 2 ╨▒╨░╨╣╤В╨░ ╨╜╨░ ╤Ж╨▓╨╡╤В)
ld a,(pgscrdata1)
SETPG32KHIGH ;╨▓╨║╨╗╤О╤З╨╕╨╗╨╕ ╤Б╤В╤А╨░╨╜╨╕╤Ж╤Г ╤Б ╨┤╨░╨╜╨╜╤Л╨╝╨╕ ╨▓ c000
ld a,(user_scr0_high) ;ok
SETPG16K ;╨▓╨║╨╗╤О╤З╨╕╨╗╨╕ ╨┤╤А╤Г╨│╨╕╨╡ ╨┐╨╛╨╗-╤Н╨║╤А╨░╨╜╨░ ╨▓ 4000
ld hl,0xc000
ld de,0x4000
ld bc,0x4000
ldir ;╨┐╨╡╤А╨╡╨▒╤А╨╛╤Б╨╕╨╗╨╕ ╨╜╨░ ╤Н╨║╤А╨░╨╜
call setpgsscr40008000_current ;╨▓╨║╨╗╤О╤З╨╕╨╗╨╕ ╤Б╤В╤А╨░╨╜╨╕╤Ж╤Л ╤Н╨║╤А╨░╨╜╨░
ld a,(pgvorobey)
SETPGC000
ld hl,scrbase
ld de,0xc000
ld bc,128*256+(224/2)
;b=hgt,c=wid (/2)
;de=gfx
;hl=scr
call primgega_onescreen
ld de,sprpal;pal
OS_SETPAL ;╨▓╨║╨╗╤О╤З╨╕╨╗╨╕ ╨┐╨░╨╗╨╕╤В╤А╤Г ╤Б╨┐╤А╨░╨╣╤В╨╛╨▓;╨║╨░╤А╤В╨╕╨╜╨║╨╕
call setpgsmain40008000 ;╨▓╨║╨╗╤О╤З╨╕╨╗╨╕ ╤Б╤В╤А╨░╨╜╨╕╤Ж╤Г ╨┐╤А╨╛╨│╤А╨░╨╝╨╝╤Л ╨▓ 4000, ╨║╨░╨║ ╨▒╤Л╨╗╨╛
call setpgmainc000 ;╨▓╨║╨╗╤О╤З╨╕╨╗╨╕ ╤Б╤В╤А╨░╨╜╨╕╤Ж╤Г ╨┐╤А╨╛╨│╤А╨░╨╝╨╝╤Л ╨▓ c000, ╨║╨░╨║ ╨▒╤Л╨╗╨╛
ld de,scrwid/4 + (256*scrhgt) ;d=hgt,e=wid (/8)
ld hl,0x4000 ;hl=scr
call copyimgega_curtodefault ;╨║╨╛╨┐╨╕╤А╤Г╨╡╨╝ ╨║╨░╤А╤В╨╕╨╜╨║╤Г ╨╜╨░ ╨┤╤А╤Г╨│╨╛╨╣ ╤Н╨║╤А╨░╨╜
call changescrpg ;╤Б ╤Н╤В╨╛╨│╨╛ ╨╝╨╛╨╝╨╡╨╜╤В╨░ (╤В╨╛╤З╨╜╨╡╨╡, ╤Б ╨┐╤А╨╡╤А╤Л╨▓╨░╨╜╨╕╤П) ╨╝╨╛╨╢╨╡╨╝ ╨▓╨╕╨┤╨╡╤В╤М, ╤З╤В╨╛ ╨╜╨░╤А╨╕╤Б╨╛╨▓╨░╨╗╨╕
ld a,(timer)
ld (uvoldtimer),a
;╨│╨╗╨░╨▓╨╜╤Л╨╣ ╤Ж╨╕╨║╨╗
mainloop
;╨▓╤Л╨▓╨╛╨┤ ╤Д╨╛╨╜╨░ ╨╕╨╗╨╕ ╨▓╨╛╤Б╤Б╤В╨░╨╜╨╛╨▓╨╗╨╡╨╜╨╕╨╡ ╤Д╨╛╨╜╨░ ╨┐╨╛╨┤ ╤Б╨┐╤А╨░╨╣╤В╨░╨╝╨╕
;... ╤А╨╡╨║╨╛╨╝╨╡╨╜╨┤╤Г╤О ╨▓╨╖╤П╤В╤М ╨╕╨╖ sprexamp!
;╨▓╤Л╨▓╨╛╨┤ ╤Б╨┐╤А╨░╨╣╤В╨╛╨▓
;...
call setpgsscr40008000 ;╨▓╨║╨╗╤О╤З╨╕╨╗╨╕ ╤Б╤В╤А╨░╨╜╨╕╤Ж╤Л ╤Н╨║╤А╨░╨╜╨░
ld iy,spaceship0
ld e,50 ;e=x = -(sprmaxwid-1)..159 (╨║╨╛╨┤╨╕╤А╤Г╨╡╤В╤Б╤П ╨║╨░╨║ x+(sprmaxwid-1))
ld c,50 ;c=y = -(sprmaxhgt-1)..199 (╨║╨╛╨┤╨╕╤А╤Г╨╡╤В╤Б╤П ╨║╨░╨║ ╨╡╤Б╤В╤М)
call prspr
ld iy,fly0
ld e,80 ;e=x = -(sprmaxwid-1)..159 (╨║╨╛╨┤╨╕╤А╤Г╨╡╤В╤Б╤П ╨║╨░╨║ x+(sprmaxwid-1))
ld c,60 ;c=y = -(sprmaxhgt-1)..199 (╨║╨╛╨┤╨╕╤А╤Г╨╡╤В╤Б╤П ╨║╨░╨║ ╨╡╤Б╤В╤М)
call prspr
ld iy,explosion4
ld e,60 ;e=x = -(sprmaxwid-1)..159 (╨║╨╛╨┤╨╕╤А╤Г╨╡╤В╤Б╤П ╨║╨░╨║ x+(sprmaxwid-1))
ld c,60 ;c=y = -(sprmaxhgt-1)..199 (╨║╨╛╨┤╨╕╤А╤Г╨╡╤В╤Б╤П ╨║╨░╨║ ╨╡╤Б╤В╤М)
call prspr
call setpgsmain40008000 ;╨▓╨║╨╗╤О╤З╨╕╨╗╨╕ ╤Б╤В╤А╨░╨╜╨╕╤Ж╤Л ╨┐╤А╨╛╨│╤А╨░╨╝╨╝╤Л ╨▓ 4000,8000, ╨║╨░╨║ ╨▒╤Л╨╗╨╛
;╨╖╨░╨║╨╛╨╜╤З╨╕╨╗╨╕ ╤А╨╕╤Б╨╛╨▓╨░╤В╤М
ld a,(timer)
push af
call changescrpg ;╤Б ╤Н╤В╨╛╨│╨╛ ╨╝╨╛╨╝╨╡╨╜╤В╨░ (╤В╨╛╤З╨╜╨╡╨╡, ╤Б ╨┐╤А╨╡╤А╤Л╨▓╨░╨╜╨╕╤П) ╨╝╨╛╨╢╨╡╨╝ ╨▓╨╕╨┤╨╡╤В╤М, ╤З╤В╨╛ ╨╜╨░╤А╨╕╤Б╨╛╨▓╨░╨╗╨╕
;╨╗╨╛╨│╨╕╨║╨░
;... ╨╡╤С ╨▓╤Л╨╖╤Л╨▓╨░╤В╤М ╤Б╤В╨╛╨╗╤М╨║╨╛ ╤А╨░╨╖, ╤Б╨║╨╛╨╗╤М╨║╨╛ ╨┐╤А╨╛╤И╨╗╨╛ ╨┐╤А╨╡╤А╤Л╨▓╨░╨╜╨╕╨╣!
mainloop_uvwaittimer0
ld a,(timer)
uvoldtimer=$+1
ld b,0
ld (uvoldtimer),a
sub b
ld b,a
jr z,mainloop_uvwaittimer0 ;╨╡╤Б╨╗╨╕ ╨╜╨╕ ╨╛╨┤╨╜╨╛╨│╨╛ ╨┐╤А╨╡╤А╤Л╨▓╨░╨╜╨╕╤П ╨╜╨╡ ╨┐╤А╨╛╤И╨╗╨╛, ╨║╤А╤Г╤В╨╕╨╝╤Б╤П ╤В╤Г╤В
;b=╤Б╨║╨╛╨╗╤М╨║╨╛ ╨┐╤А╨╛╤И╨╗╨╛ ╨┐╤А╨╡╤А╤Л╨▓╨░╨╜╨╕╨╣
mainloop_uvlogic0
push bc
;call logic ;<----------------- ╤Б╨▓╨╛╤О ╨╗╨╛╨│╨╕╨║╤Г ╨┐╨╕╤И╨╕ ╤Б╤О╨┤╨░
pop bc
djnz mainloop_uvlogic0
;╨╢╨┤╤С╨╝ ╤Д╨╕╨╖╨╕╤З╨╡╤Б╨║╨╛╨│╨╛ ╨┐╨╡╤А╨╡╨║╨╗╤О╤З╨╡╨╜╨╕╤П ╤Н╨║╤А╨░╨╜╨░!
;╨╝╨╛╨╢╨╡╨╝ ╨╜╨░╤З╨░╤В╤М ╨╜╨╛╨▓╤Г╤О ╨╛╤В╤А╨╕╤Б╨╛╨▓╨║╤Г, ╤В╨╛╨╗╤М╨║╨╛ ╨╡╤Б╨╗╨╕ ╤Б ╨╝╨╛╨╝╨╡╨╜╤В╨░ changescrpg ╨┐╤А╨╛╤И╨╗╨╛ ╤Е╨╛╤В╤П ╨▒╤Л ╨╛╨┤╨╜╨╛ ╨┐╤А╨╡╤А╤Л╨▓╨░╨╜╨╕╨╡ (╨▓╨╛╨╖╨╝╨╛╨╢╨╜╨╛, ╨▓╨╜╤Г╤В╤А╨╕ logic)
pop bc ;b=timer ╨╜╨░ ╨╝╨╛╨╝╨╡╨╜╤В changescrpg
waitchangescr0
ld a,(timer)
cp b
jr z,waitchangescr0
ld a,(curkey)
cp key_esc
jp nz,mainloop ;╨▓╤Л╤Е╨╛╨┤ ╨┐╨╛ esc (break)
;YIELDGETKEYLOOP ;╨╢╨┤╤С╨╝ ╨║╨╜╨╛╨┐╨║╤Г
call swapimer
QUIT
pal
ds 32 ;╤В╤Г╤В ╨▒╤Г╨┤╨╡╤В ╨┐╨░╨╗╨╕╤В╤А╨░ ╨║╨░╤А╤В╨╕╨╜╨║╨╕
;sprpal
include "sprpal.ast" ;╨┐╨░╨╗╨╕╤В╤А╨░ ╤Б╨┐╤А╨░╨╣╤В╨╛╨▓ (╨╜╨░╨┤╨╛ ╤А╨╕╤Б╨╛╨▓╨░╤В╤М ╨║╨░╤А╤В╨╕╨╜╨║╤Г ╤Н╤В╨╛╨╣ ╨╢╨╡ ╨┐╨░╨╗╨╕╤В╤А╨╛╨╣!)
emptypal
ds 32,0xff ;╨┐╨░╨╗╨╕╤В╤А╨░, ╨│╨┤╨╡ ╨▓╤Б╨╡ ╤Ж╨▓╨╡╤В╨░ ╤З╤С╤А╨╜╤Л╨╡
loadfile_in_ahl
;de=╨╕╨╝╤П ╤Д╨░╨╣╨╗╨░
;hl=╨║╤Г╨┤╨░ ╨│╤А╤Г╨╖╨╕╨╝ (0xc000)
;a=╨▓ ╨║╨░╨║╨╛╨╣ ╤Б╤В╤А╨░╨╜╨╕╤Ж╨╡
SETPG32KHIGH ;╨▓╨║╨╗╤О╤З╨╕╨╗╨╕ ╤Б╤В╤А╨░╨╜╨╕╤Ж╤Г A ╨▓ 0xc000
push hl ;╨║╤Г╨┤╨░ ╨│╤А╤Г╨╖╨╕╨╝
OS_OPENHANDLE
pop de ;╨║╤Г╨┤╨░ ╨│╤А╤Г╨╖╨╕╨╝
push bc ;b=handle
ld hl,0x4000 ;╤Б╤В╨╛╨╗╤М╨║╨╛ ╨│╤А╤Г╨╖╨╕╨╝ (╨╡╤Б╨╗╨╕ ╤Б╤В╨╛╨╗╤М╨║╨╛ ╨╡╤Б╤В╤М ╨▓ ╤Д╨░╨╣╨╗╨╡)
OS_READHANDLE
pop bc ;b=handle
OS_CLOSEHANDLE
jp setpgmainc000 ;╨▓╨║╨╗╤О╤З╨╕╨╗╨╕ ╤Б╤В╤А╨░╨╜╨╕╤Ж╤Г ╨┐╤А╨╛╨│╤А╨░╨╝╨╝╤Л ╨▓ c000, ╨║╨░╨║ ╨▒╤Л╨╗╨╛
primgega_onescreen
;b=hgt,c=wid (/2)
;de=gfx
;hl=scr
primgega0
push bc
ld hx,b
push hl
ld bc,40
primgegacolumn0
ld a,(de)
inc de
ld (hl),a
add hl,bc
dec hx
jr nz,primgegacolumn0
pop hl
ld a,0x9f;0xa0
cp h
ld bc,0x4000
adc hl,bc
jp pe,primgegacolumn0q ;╨▓ ╨┐╨╛╨╗╨╛╨▓╨╕╨╜╨╡ ╤Б╨╗╤Г╤З╨░╨╡╨▓
;8000->╤Б000 (╨╜╨░╨┤╨╛ 6000) ╨╕╨╗╨╕ a000->e001 (╨╜╨░╨┤╨╛ 4001)
inc a
xor h
ld h,a
primgegacolumn0q
pop bc
dec c
jr nz,primgega0
ret
copyimgega_curtodefault
;d=hgt,e=wid (/8)
;hl=scr
call getuser_scr_low_cur
SETPG16K ;set "from" page in 4000
call getuser_scr_low
SETPG32KHIGH ;set "to" page in c000
call copyimgegalayer
call getuser_scr_high_cur
SETPG16K ;set "from" page in 4000
call getuser_scr_high
copyimgegaq
SETPG32KHIGH ;set "to" page in c000
call copyimgegalayer
call setpgmainc000
jp setpgsmain40008000
copyimgega_defaulttocur
;d=hgt,e=wid (/8)
;hl=scr
call getuser_scr_low
SETPG16K ;set "from" page in 4000
call getuser_scr_low_cur
SETPG32KHIGH ;set "to" page in c000
call copyimgegalayer
call getuser_scr_high
SETPG16K ;set "from" page in 4000
call getuser_scr_high_cur
jr copyimgegaq ;set "to" page in c000, copy
copyimgegalayer
push hl
ld hx,e ;wid/8
copyimgega0
push de
push hl
ld b,d ;hgt
ld de,40-0x8000
copyimgegacolumn0
ld a,(hl)
set 5,h
ld c,(hl)
set 7,h
ld (hl),c
res 5,h
ld (hl),a
add hl,de
djnz copyimgegacolumn0
pop hl
pop de
inc hl
dec hx
jr nz,copyimgega0
pop hl
ret
pgscrdata0
db 0
pgscrdata1
db 0
curkey
db 0
joystate
;bit - button (ZX key)
;7 - A (A)
;6 - B (S)
;5 - Select (Space)
;4 - Start (Enter)
;3 - Up (7)
;2 - Down (6)
;1 - Left (5)
;0 - Right (8)
db 0
path
db "loadscr",0
filenamevorobey
db "vorobey.bin",0
filename0
;db "solkey.scr",0
db "0kubik.bmpx",0
filename1
db "1kubik.bmpx",0
include "mem.asm"
include "int.asm"
include "spr.ast"
include "prspr.asm"
end
;display "End=",end
;display "Free after end=",/d,#c000-end
;display "Size ",/d,end-begin," bytes"
savebin "loadscr.com",begin,end-begin
;LABELSLIST "../../../us/user.l"