DEVICE ZXSPECTRUM128
include "../_sdk/sys_h.asm"
WGETBUF=0x0800
;WGETBUFSZ=0x0400
;WGETBEGINADDR=WGETBUF+WGETBUFSZ
;WGETENDADDR=WGETBEGINADDR+2
end1=0x3500
DISKBUF=0x3500;0xb000
DISKBUFsz=0x800;0x1000
LINEPIXELS=0x3d00 ;,wid8*2 (ьръё. ЁрчьхЁ = 512 фы wid=2048) ;TODO Ёрэ№°х ш яютхЁї LINEGIF (ўЄюс√ pixels °ыш Ёрэ№°х, р attr чрЄшЁры х╕ т яЁюЎхёёх ъюэтхЁёшш)
STACK=0x3ffc
SPOIL4B=0x4000 ;ьшъЁюёЄхъ эр 4 срщЄр, эхы№ч эшцх 0x3b00 ;Ёрэ№°х с√ыю т эхтшфшьющ ўрёЄш ёЄЁрэшЎ√ ¤ъЁрэр, эю ёхщўрё ь√ яхЁхъы■ўрхь ¤ъЁрэ ё ¤Єшь ёЄхъюь
end2=0x7e00
depkbuf=0x7e00 ;32K+ for zip (match length of 3Ц258 bytes)
buf64k=0
FREE=0x8000 ;фшэрьшўхёър ярь Є№ jpeg, сєЇхЁ ёЄЁюъш gif
LINE1=0x9400 ;сєЇхЁ ёЄЁюъш 0x400*3? jpeg
LINE1_sz=0x0c00
COLOR=7
STATUSCOLOR=0x38
GIF_PIXELSIZE=0
HTMLTOPY=0
HTMLHGT=24
SCROLLHGT=HTMLHGT*8;192;200
BACKGROUNDCOLORLEVEL=0 ;яЁш юўшёЄъх сєЇхЁр ёЄЁюъш (фы яЁртшы№эюую яЁртюую ъЁр т юёЄрЄъх чэръюьхёЄр)
MAXLINKSZ=256-1
EDITLINEY=192
EDITLINEMAXVISIBLEX=72
MACRO rdbyte
INC LY
LD A,(IY)
CALL Z,RDBYH
ENDM
MACRO ziprdbyte
INC LY
LD A,(IY)
CALL Z,ZIPRDBYH
ENDM
;b=R/G/Bmin
;de эр эрўрых сєЇхЁр R/G/B
;h=maxdistdiv
;т фшЇхЁшэух їюфшь Єюы№ъю яю юфэющ ёюёЄрты ■∙хщ, юёЄры№э√х эх ўшЄрхь:
macro DITHERMC1B ch0,ch1,ch2,ch3
ld a,(de) ;R(pixel)
inc e
sub b ;Rmin
rra ;maybe<0
ld l,a ;h=maxdistdiv
ld a,(hl) ;inklevel
cp ch0 ;chunklevel[x%4][y%4]
rl c ;bits
ld a,(de) ;R(pixel)
inc e
sub b ;Rmin
rra ;maybe<0
ld l,a ;h=maxdistdiv
ld a,(hl) ;inklevel
cp ch1 ;chunklevel[x%4][y%4]
rl c ;bits
ld a,(de) ;R(pixel)
inc e
sub b ;Rmin
rra ;maybe<0
ld l,a ;h=maxdistdiv
ld a,(hl) ;inklevel
cp ch2 ;chunklevel[x%4][y%4]
rl c ;bits
ld a,(de) ;R(pixel)
inc e
sub b ;Rmin
rra ;maybe<0
ld l,a ;h=maxdistdiv
ld a,(hl) ;inklevel
cp ch3 ;chunklevel[x%4][y%4]
rl c ;bits
ld a,(de) ;R(pixel)
inc e
sub b ;Rmin
rra ;maybe<0
ld l,a ;h=maxdistdiv
ld a,(hl) ;inklevel
cp ch0 ;chunklevel[x%4][y%4]
rl c ;bits
ld a,(de) ;R(pixel)
inc e
sub b ;Rmin
rra ;maybe<0
ld l,a ;h=maxdistdiv
ld a,(hl) ;inklevel
cp ch1 ;chunklevel[x%4][y%4]
rl c ;bits
ld a,(de) ;R(pixel)
inc e
sub b ;Rmin
rra ;maybe<0
ld l,a ;h=maxdistdiv
ld a,(hl) ;inklevel
cp ch2 ;chunklevel[x%4][y%4]
rl c ;bits
ld a,(de) ;R(pixel)
inc e
sub b ;Rmin
rra ;maybe<0
ld l,a ;h=maxdistdiv
ld a,(hl) ;inklevel
cp ch3 ;chunklevel[x%4][y%4]
ld a,c
rla ;bits
exx
ld (de),a ;чряшёрЄ№ bits
;exx
endm
org PROGSTART
cmd_begin
ld sp,STACK ;эх фюыцхэ юяєёърЄ№ё эшцх #3b00! шэрўх тючьюцэр яюЁўр OS
call init
;curfulllink эєцхэ фы ёюїЁрэхэш т шёЄюЁшш ш шёяюы№чютрэш яєЄш фы юЄэюёшЄхы№э√ї ёё√ыюъ
;linkbuf ёюфхЁцшЄ ёё√ыъє (ьюцхЄ с√Є№ юЄэюёшЄхы№эр )
if 1==0
call setpgs_scr
call setpgcode4000
ld de,0xc000;0x0801
call setxymc
ld de,curfulllink;COMMANDLINE
call prtextmc
call setpgtemp8000
;jr $
endif
;call keepcurlink
jp browser_go_curfulllink
browser_godownload
ld a,1
ld (downloadflag),a
browser_go
;curfulllink ёюфхЁцшЄ Єхъє∙є■ ёё√ыъє (шч эх╕ сЁрЄ№ яєЄ№), ёых° т ъюэЎх http://ser.ver єцх хёЄ№
;т linkbuf ыхцшЄ ёё√ыър (ьюцхЄ с√Є№ ыюъры№эр )
;TODO яхЁхъюфшЁютрЄ№ Ёєёёъшх сєът√ т ёё√ыъх т %? Єюы№ъю т эрсЁрээющ тЁєўэє■?
ld hl,linkbuf
push hl
push hl
call strlen
inc hl
;move block to end of buf:
pop de;ld de,linkbuf
ld b,h
ld c,l ;size
dec de ;linkbuf-1
add hl,de ;end of data
ld de,linkbuf+(MAXLINKSZ+1)-1
lddr
inc de ;begin of data
ex de,hl
pop de;ld de,linkbuf
recodelinkamp0
ld a,(hl)
inc hl
ld (de),a
inc de
or a
jr z,recodelinkamp0q
cp '&'
jr nz,recodelinkamp0
ld a,(hl)
cp 'a'
jr nz,recodelinkamp0
inc hl
ld a,(hl)
cp 'm'
jr nz,recodelinkamp0dec1
inc hl
ld a,(hl)
cp 'p'
jr nz,recodelinkamp0dec2
inc hl
ld a,(hl)
cp ';'
inc hl
jr z,recodelinkamp0
dec hl
dec hl
recodelinkamp0dec2
dec hl
recodelinkamp0dec1
dec hl
jr recodelinkamp0
recodelinkamp0q
call keepcurlink
call makefulllink
;curfulllink ёюфхЁцшЄ яюыэ√щ url, ёюсЁрээ√щ шч ёЄрЁюую curfullink ш ёё√ыъш linkbuf
if 1==0
call setpgs_scr
call setpgcode4000
ld de,0x0000
call setxymc
ld de,curfulllink;COMMANDLINE
call prtextmc
call setpgtemp8000
jr $
endif
browser_go_curfulllink
jr browser_backspaceq
keepcurlink
;фы backspace: чряюьэшЄ№ яюыэ√щ яєЄ№ ё яЁюЄюъюыюь ш шьхэхь
;histaddr єърч√трхЄ эр яюёыхфэшщ ¤ыхьхэЄ шёЄюЁшш
call setpghist
histaddr=$+1
ld de,0xc000
ld a,d
inc a
jr nz,keeptohist_nooverflow
ld hl,0xc100
ld de,0xc000
ld bc,0x3f00
ldir ;forget oldest link
keeptohist_nooverflow
ld hl,curfulllink;linkbuf
ld bc,254
ldir
ld hl,html_curtopy
ld c,2
ldir
ld (histaddr),de
ld (html_curtopy),bc ;0
ret
remembercurlink
ld hl,(histaddr)
ld a,h
cp 0xc0
ret z ;jr z,browser_reload ;no history
dec h
ld (histaddr),hl
call setpghist
;jr $
ld de,curfulllink;linkbuf
;call strcopy
ld bc,254
ldir
ld de,html_curtopy
ldi
ldi
ret
browser_downloadthis
ld a,1
ld (downloadflag),a
browser_reload
;histaddr єърч√трхЄ эр яюёыхфэшщ ¤ыхьхэЄ шёЄюЁшш
;ld hl,(histaddr)
;call setpghist
;ld de,curfulllink;linkbuf
;call strcopy
jr browser_backspaceq
browser_backspace
;тёяюьэшЄ№ ёЄрЁ√щ яєЄ№ ё яЁюЄюъюыюь ш шьхэхь, яюыюцшЄ№ хую т curfulllink
;ёхщўрё histaddr єърч√трхЄ эр яюёыхфэшщ ¤ыхьхэЄ шёЄюЁшш. шф╕ь эрчрф ш чряюьэшь эют√щ єърчрЄхы№
call remembercurlink
browser_backspaceq
;curfulllink ёюфхЁцшЄ яюыэ√щ url, ёюсЁрээ√щ шч ёЄрЁюую curfullink ш ёё√ыъш linkbuf
ld sp,STACK ;эх фюыцхэ юяєёърЄ№ё эшцх #3b00! шэрўх тючьюцэр яюЁўр OS
call unreservepages
xor a
ld h,a
ld l,a
ld (freemem_hl),hl
ld (freemem_a),a
call cleanstatusline
call browser_editline_print
call setpgtemp8000
OS_GETTIMER ;hlde=timer
ld (timebegin),de
ld hl,curfulllink
call isprotocolpresent
;a=protocol (0=file, 1=http), hl=after "//"
push hl ;hl=after "//"
;тъы■ўшЄ№ ъюыс¤ъш яюф эєцэ√щ яЁюЄюъюы
ld bc,readstream_file
ld de,closestream_file
ld hl,openstream_file
or a
jr z,browser_go_changeprotocol_nohttp
ld bc,readstream_http
ld de,closestream_http
ld hl,openstream_http
browser_go_changeprotocol_nohttp
ld (openstream_patch),hl
ld (readstream_patch),bc
ld (closestream_patch),de
pop hl
;hl=эрўрыю path схч яЁюЄюъюыр
ex de,hl ;de=filename
openstream_patch=$+1
call openstream_file
or a
jp nz,LOADERROR
xor a
downloadflag=$+1
cp 0
ld (downloadflag),a
jp nz,downloadfile
call initframes_time_scroll
LD IY,DISKBUF+DISKBUFsz-1
call RDBYTE
;jr $
;cp '<'
;jp z,loadhtml
;cp 0x0a ;speccy.info
;jp z,loadhtml
cp 'G'
jp z,loadgif
cp 0x89
jp z,loadpng
cp 0xff
jp z,loadjpeg
cp 'B'
jp nz,loadhtml;loadbmp_fail
call RDBYTE
cp 'M'
jp nz,loadhtml;loadbmp_fail
; I 1 0 2 ╧Ёшчэръ ┬╠╨-Їрщыр - ёшьтюы√ 'BM' (+)
; 2 2 4 ╨рчьхЁ ┬╠╨-Їрщыр (срщЄ) (═└─╬ ╤╘╬╨╠╚╨╬┬└╥▄, ╫╚╥└╥▄ ═┼ ═╙╞═╬)
; 3 6 4 ╨хчхЁт (=0) (═└╠ ═┼ ═╙╞═╬)
; 4 10 4 ╤ьх∙хэшх т срщЄрї юЄ эрўрыр Їрщыр фю
; эрўрыр юяшёрэш ЁрёЄЁютюую шчюсЁрцхэш (═└╠ ═┼ ═╙╞═╬, є эрё 118)
; II 5 14 4 ╨рчьхЁ ╬яшёрэш ╚чюсЁрцхэш (=40 WINDOWS) (═└╠ ═┼ ═╙╞═╬, тёхуфр 40)
; 6 18 4 ╪шЁшэр шчюсЁрцхэш (т яшъёхырї) (+)
; 7 22 4 ┬√ёюЄр шчюсЁрцхэш (т яшъёхырї) (+)
; 8 26 2 ╩юышўхёЄтю ЎтхЄют√ї яыюёъюёЄхщ (=1) (═└╠ ═┼ ═╙╞═╬, тёхуфр 1)
; 9 28 2 ╩юышўхёЄтю сшЄ эр яшъёхы (+ 4, 8, 24 ┴╚╥, ╧╬╥╬╠ ╠╬╞═╬ 1┴╚╥)
; 10 30 4 ┬шф ёцрЄш шэЇюЁьрЎшш (0,1 шыш 2) (╧╬╩└ ╫╥╬ ┴┼╟ ╤╞└╥╚▀)
; 11 34 4 ╨рчьхЁ юсЁрчр ЁрёЄЁютюую шчюсЁрцхэш (═└─╬ ╤╘╬╨╠╚╨╬┬└╥▄, ╫╚╥└╥▄ ═┼ ═╙╞═╬)
; 12 38 4 ╨хъюьхэфєхьюх уюЁшчюэ-юх ЁрчЁх°хэшх (═└╠ ═┼ ═╙╞═╬)
; 13 42 4 ╨хъюьхэфєхьюх тхЁЄшъры№эюх ЁрчЁх°хэшх (═└╠ ═┼ ═╙╞═╬)
; 14 46 4 ╩юышўхёЄтю ЎтхЄют т ярышЄЁх (+)
; 15 50 4 ╩юышўхёЄтю трцэ√ї ЎтхЄют т ярышЄЁх (═└╠ ═┼ ═╙╞═╬)
;фры№°х шф╕Є ярышЄЁр (B, G, R, 0)
;фры№°х шф╕Є ърЁЄшэър (фышэ√ ёЄЁюъ т срщЄрї ъЁрЄэ√ 4)
ld b,18-2
loadbmp_skipheader0
call RDBYTE
djnz loadbmp_skipheader0
call GETDWORD_slow
ex de,hl ;hl=wid
call setpicwid
call GETDWORD_slow
;ld (curpichgt),de
ex de,hl
call setpichgt
ld b,54-26
call read_b_bytes
;ld de,0
;ld hl,0 ;dehl=shift in file
;ld a,(filehandle)
;ld b,a
;OS_SEEKHANDLE
;TODO чрърчрЄ№ сыюъ ярь Єш ш уЁєчшЄ№ т эхую (ьюцэю уЁєчшЄ№ яю юфэюьє срщЄє, ёЄЁюўъш ъюэтхЁЄшЄ№ яю юфэющ, Єюуфр сєЇхЁ bmp эх эєцхэ)
call reservepage
ret nz ;no memory
ld hl,DISKBUF
ld de,0xc000
ld bc,DISKBUFsz
ldir ;beginning of file is already read
ld hl,0x4000-DISKBUFsz
jr nvview_loadbmp0go
nvview_loadbmp0
call reservepage
ret nz ;no memory
ld de,0xc000
ld hl,0x4000
nvview_loadbmp0go
;DE = Buffer address, HL = Number of bytes to read
push hl
call readstream
;HL = Number of bytes actually read
ld b,h
ld c,l
pop hl
or a
sbc hl,bc ;NZ = bytes to read != bytes actually read
jr z,nvview_loadbmp0
ld a,(npages)
ld hl,0
srl a
rr h
srl a
rr h
ld (freemem_hl),hl
ld (freemem_a),a ;ъюёЄ√ы№ (TODO чрърч√трЄ№ ярь Є№ яюф bmp эюЁьры№эю)
call reservefirstframeaddr
call initframe ;юфшэ Ёрч эр ърЁЄшэъє яюёых setpicwid, setpichgt ш яюёых єёЄрэютъш gifframetime ;чрърч√трхЄ ярь Є№ яюф ъюэтхЁўхээ√щ ърфЁ
;ahl=рфЁхё ярь Єш яюф ъюэтхЁўхээ√щ ърфЁ
ld hl,54 ;TODO юЄэюёшЄхы№эю эрўрыр bmp
xor a
;яхЁхщЄш эр яюёыхфэ■■ ёЄЁюўъє (ўЄюс√ ЁшёютрЄ№ ёэшчє ттхЁї, эєцэю ьхэ Є№ drawscreenline_frombuf):
if GIF_PIXELSIZE
ld de,(curpicwid)
else
ld de,(curpicwidx3)
endif
dec de
set 1,e
set 0,e
inc de ;юъЁєуышыш ЁрчьхЁ ёЄЁюъш ттхЁї фю 4 срщЄ: 0=>0, 1..3=>4, 4=>4...
ld (bmplinestep),de
ld bc,(curpichgt)
bmpfindlastline0
add hl,de
adc a,0
dec hl
cpi
jp pe,bmpfindlastline0
ld (putchar_hl),hl
ld (putchar_a),a
call setpgtemp8000
ld bc,(curpichgt)
fill0
push bc
ld hl,(putchar_hl)
ld a,(putchar_a)
bmplinestep=$+1
ld bc,0
or a
sbc hl,bc
sbc a,0
ld (putchar_hl),hl
ld (putchar_a),a
call islinevisible ;CY=invisible
jr c,bmpgetline_ifvisibleq
ld hl,(putchar_hl)
ld a,(putchar_a)
ld bc,(bmplinestep)
ld de,LINEGIF
call getfrommem
ld hl,LINEGIF
call drawscreenline_frombuf
call keepconvertedline ;чряюьшэрхь ёъюэтхЁўхээє■ ёЄЁюъє шч LINEPIXELS
bmpgetline_ifvisibleq
call inccury
pop bc
cpi
jp pe,fill0
jp showgif ;jp closequit
downloadfile
call reservepage
ret nz ;no memory
ld de,downloadfilename ;TODO ёухэхЁшЁютрЄ№ шч єЁыр шыш HTTP юЄтхЄр + чряЁюёшЄ№ ЁхфръЄшЁютрэшх
;de=filename
OS_CREATEHANDLE
;b=new file handle
ld a,b
ld (downloadfilehandle),a
downloadfile0
ld de,0xc000
ld hl,0x4000
;DE = Buffer address, HL = Number of bytes to read
push hl
call readstream
;jr $
;HL = Number of bytes actually read, A=error
push hl
ld de,0xc000
downloadfilehandle=$+1
ld b,0
OS_WRITEHANDLE
pop hl
ld b,h
ld c,l
pop hl
or a
sbc hl,bc ;NZ = bytes to read != bytes actually read
jr z,downloadfile0
ld a,(downloadfilehandle)
ld b,a
OS_CLOSEHANDLE
ld hl,downloadfilename
inc (hl) ;TODO ттюф шьхэш
jp closequit
loadpng
call setpgtemp8000
call readpng
jr showgif
loadjpeg
;call initframes_time_scroll
call readjpeg
jr showgif
loadgif
;call initframes_time_scroll
call readgif
showgif
call showtime
showgif_firstframe
;jr $
nframes=$+1
ld bc,0 ;0 шыш 1 т√ъы■ўр■Є єяЁртыхэшх
dec bc
ld hl,(curpichgt_visible)
ld de,SCROLLHGT+1
or a
sbc hl,de
jr nc,showgif_drawevenifoneframe
ld hl,(keepframe_linesize)
ld de,80+1
or a
sbc hl,de
jr nc,showgif_drawevenifoneframe
dec bc
bit 7,b
inc bc
jp nz,closequit;showgifq ;хёыш 0 шыш 1 ърфЁ
showgif_drawevenifoneframe
firstframeaddr=$+1
ld hl,0
firstframeaddrHSB=$+1
ld a,0
;bc=ўшёыю ърфЁют-1
showgif_frames0
push bc
push hl
push af
OS_GETTIMER ;hlde=timer
pop af
ex de,hl
ex (sp),hl
call showframe ;ўшЄрхЄ showframetime шч ърфЁр
pop de ;timer
push af
push hl
showframetime=$+1
ld hl,0 ;in 1/100 s
inc hl
srl h
rr l
add hl,de ;max timer for this frame
ld (showframemaxtimer),hl
showframe_delay0
call yieldgetkeynolang ;z=nokey
;cp key_enter
;jp z,closequit ;TODO restore stack
;cp 'z'
;jr z,showframe_setzoom
call globalbuttons
ld hl,(xscroll)
cp key_left
jr z,showframe_left
cp key_right
jr z,showframe_right
ld hl,(yscroll)
cp key_down
jr z,showframe_down
cp key_up
jr z,showframe_up
showframe_nokey
OS_GETTIMER ;hlde=timer
showframemaxtimer=$+1
ld bc,0 ;max timer for this frame
ex de,hl
or a
sbc hl,bc
jp m,showframe_delay0 ;timer<maxtimer
pop hl
pop af
pop bc
dec bc
bit 7,b
jr z,showgif_frames0
jp showgif_firstframe
showframe_setzoom
ld hl,setzoom_patch
ld a,(hl)
xor 0x80
ld (hl),a
jp browser_reload
;TODO яЁюсыхьр, хёыш чрфхЁцър ърфЁр ёыш°ъюь ьрыхэ№ър , єёяххь Єюы№ъю юфшэ Ёрч яЁюўшЄрЄ№ ъыртш°ш
showframe_left
;hl=xscroll
dec hl
res 0,l
bit 7,h
jr nz,showframe_nokey
jr showframe_leftrightq
showframe_right
;hl=xscroll
;эх фтшурхь xscroll, хёыш яЁртр уЁрэшЎр (=keepframe_linesize-xscroll) яюыєўрхЄё <80
inc hl
inc hl
ex de,hl
ld hl,(keepframe_linesize)
or a
sbc hl,de
ld bc,80
or a
sbc hl,bc
ex de,hl
jr nc,showframe_leftrightq
;яЁхфхы ёъЁюыыр: xscroll=keepframe_linesize-80 >=0
ld hl,(keepframe_linesize)
or a
sbc hl,bc
jr c,showframe_nokey
showframe_leftrightq
ld (xscroll),hl
jr showframe_nokey
showframe_up
;hl=yscroll
ld bc,8
xor a
sbc hl,bc
jr nc,showframe_updownq
ld h,a
ld l,a
jr showframe_updownq
showframe_down
;hl=yscroll
;эх фтшурхь yscroll, хёыш эшцэ уЁрэшЎр (=curpichgt_visible-yscroll) яюыєўрхЄё <SCROLLHGT(200)
ld bc,8
add hl,bc
ex de,hl
ld hl,(curpichgt_visible)
or a
sbc hl,de
ld bc,SCROLLHGT;200
or a
sbc hl,bc
ex de,hl
jr nc,showframe_updownq
;яЁхфхы ёъЁюыыр: yscroll=curpichgt_visible-SCROLLHGT >=0
ld hl,(curpichgt_visible)
or a
sbc hl,bc
jr c,showframe_nokey
showframe_updownq
ld (yscroll),hl
jr showframe_nokey
loadbmp_fail
closequit
call closestream
jr getkeyquit
LOADERROR
call closestream
ld de,tloaderr
jr TYPE_ERROR
CONNECTIONERROR
ld de,tconnerr
TYPE_ERROR
push de
call setpgs_scr
call setpgcode4000
ld a,STATUSCOLOR
call initprcharmc
ld de,0xc048
call setxymc
pop de
call prtextmc
ERROR ;for jpeg
;jr $
ERROR2
;jr $
ERROR4
;jr $
getkeyquit
getkeyquit0
;YIELD ;halt ;хёыш ёфхырЄ№ яЁюёЄю di:rst #38, Єю 1.ёфтшэхь ЄрщьхЁ ш 2.ьюцхь яюЄхЁ Є№ ърфЁютюх яЁхЁ√трэшх, р хёыш схч ei, Єю сєфєЄ уы■ъш
;GET_KEY ;OS_GETKEYNOLANG
;ld a,c ;keynolang
call yieldgetkeynolang
call globalbuttons
jr getkeyquit0
globalbuttons
cp key_backspace
jp z,browser_backspace
cp '5'
jp z,browser_reload
cp 'z'
jp z,showframe_setzoom
cp 's'
jp z,browser_downloadthis
cp 'e'
jp z,browser_editline
cp key_esc
ret nz
browser_quit
ld a,(wgetloaded_pid)
or a
jr z,browser_quitq
;TODO яЁютхЁшЄ№, ўЄю wget цшт:
ld e,a
OS_WAITPID
or a
jr z,browser_quitq
ld a,(wgetmainpg)
SETPG32KHIGH
ld a,0xff
ld (0xc000+COMMANDLINE+2),a
browser_quitq
QUIT
yieldgetkeynolang
YIELDGETKEY
ld a,c
ret
closestream
closestream_patch=$+1
jp closestream_file
tconnerr
db "conn.err",0
tloaderr
db "load err",0
showtime
call setpgcode4000
ld a,STATUSCOLOR
call initprcharmc
OS_GETTIMER ;hlde=timer
ex de,hl
timebegin=$+1
ld de,0
or a
sbc hl,de
ld de,0xc04a
;d=y, e=x8
;hl=time (frames)
jp prnumfrac
showmem
ld a,(npages)
npages_old=$+1
cp -1
ret z
ld (npages_old),a
ld l,a
ld h,0
push hl
call setpgcode4000
ld a,STATUSCOLOR
call initprcharmc
pop hl
ld de,0xc046
jp prnum123
cleanstatusline
call setpgs_scr
call setpgcode4000
xor a
ld (browser_editline_scroll),a
ld hl,EDITLINEY*256+(40*192)
ld a,STATUSCOLOR
call cleanlinemc
;ld a,STATUSCOLOR
jp initprcharmc
;hl = poi to filename in string
;out: de = after last slash
findlastslash.
nfopenfnslash.
ld d,h
ld e,l ;de = after last slash
nfopenfnslash0.
ld a,[hl]
inc hl
or a
ret z
cp '/'
jr nz,nfopenfnslash0.
jr nfopenfnslash.
strcopy
;hl->de
strcopy0
ld a,(hl)
ldi
or a
jr nz,strcopy0
ret
makefulllink
;curfulllink = curfulllink+linkbuf
ld hl,linkbuf
;хёыш ёё√ыър эрўшэрхЄё ёю ёых°р, Єю эрфю юЄЁхчрЄ№ тхё№ яєЄ№, ъЁюьх ёхЁтхЁр
ld a,(hl)
cp '/'
jr z,browser_go_rootlink ;"/Timex"
call isprotocolpresent
;nz=protocol absent (hl=link), z=protocol present (a=protocol (0=file, 1=http), hl=after "//")
jr z,browser_go_protocolpresent ;яЁюЄюъюы хёЄ№ - linkbuf ёюфхЁцшЄ яюыэє■ ёё√ыъє (ъ эхщ Єюы№ъю фюсртшЄ№ / т ёыєўрх http://ser.ver)
ld a,(linkbuf+1)
sub ':'
jr z,browser_go_defaultprotocolpresent ;1:/file... => file://1:/file...
;эхЄ яЁюЄюъюыр - тч Є№ Єхъє∙шщ яєЄ№ шч curfulllink (Є.х. юЄЁхчрЄ№ тё╕ яюёых яюёыхфэхую ёых°р) ш яЁшъыхшЄ№ ъ эхьє ¤Єє ёё√ыъє (ё єў╕Єюь ../)
;ёых° т ъюэЎх http://ser.ver єцх хёЄ№
ld hl,curfulllink
call isprotocolpresent
;a=protocol (0=file, 1=http), hl=after "//"
call findlastslash. ;out: de = after last slash
ld hl,linkbuf
browser_go_chdir
ld a,'.'
cp (hl)
jr nz,browser_go_chdirq
inc hl ;skip dot
ld a,(hl)
cp '/'
inc hl ;if nz,skip another dot supposed
jr z,browser_go_dotslash
ld a,(hl)
or a
jr z,$+3
inc hl ;skip / supposed
;hl=linkbuf+... (path/file without ../)
;de=curfulllink+...=end of curdir (after slash)
;remove last element of curdir = move de to previous slash
;jr $
dec de ;at slash
dec de
ld a,(de)
inc de
inc de ;after slash
cp '/' ;is it "//"?
jr z,browser_go_chdir_error
dec de ;at slash
ex de,hl ;hl=at slash
dec hl
ld a,'/'
ld b,-1
cpdr
inc hl ;at previous slash (might be last slash of "//")
inc hl ;after slash
ex de,hl ;de=curfulllink+...=end of curdir (after slash)
jr browser_go_chdir
browser_go_chdir_error
browser_go_chdirq
;hl=linkbuf+... (path/file without ../)
;de=curfulllink+...=end of curdir (after slash)
call strcopy
jr browser_go_protocolpresentq
browser_go_defaultprotocolpresent
;1:/file... => file://1:/file...
;a=0
call adddefaultprotocol
jr browser_go_protocolpresentq
browser_go_dotslash=browser_go_chdir ;"./Timex"
browser_go_rootlink
;"/Timex"
;hl=linkbuf+... at slash
push hl
ld hl,curfulllink
call isprotocolpresent
;a=protocol (0=file, 1=http), hl=after "//"
call findslash
dec hl ;at slash
ex de,hl ;de=curfulllink+ after server (at slash)
pop hl
jr browser_go_copyto;linkbuf
browser_go_protocolpresent
;a=protocol (0=file, 1=http), hl=after "//"
call addslashafterserver ;add / after http://ser.ver
ld de,curfulllink
;browser_go_copytolinkbuf
ld hl,linkbuf
browser_go_copyto
call strcopy
browser_go_protocolpresentq
;curfulllink ёюфхЁцшЄ яюыэ√щ url, ёюсЁрээ√щ шч ёЄрЁюую curfullink ш ёё√ыъш linkbuf
ret
adddefaultprotocol
;1:/file... => file://1:/file...
;ser.ver... => http://ser.ver...
;a=protocol (0=file, 1=http)
push af ;a=protocol (0=file, 1=http)
or a
ld hl,tfileprotocol
jr z,$+5
ld hl,thttpprotocol
ld de,curfulllink
call strcopy
dec de
push de
ld hl,linkbuf
call strcopy
pop hl
pop af ;a=protocol (0=file, 1=http)
ret
addslashafterserver
;add / after http://ser.ver
;hl=after "//"
call findslash
;call strlen_tobc_keephl
;ld a,'/'
;cpir
ret z ;ёых° єцх хёЄ№
ld (hl),c;0
dec hl
ld (hl),a ;add / after http://ser.ver
ret
findslash
call strlen_tobc_keephl
ld a,'/'
cpir
ret
strlen_tobc_keephl
;hl=string
push hl
xor a
ld b,-1
cpir
pop de
sbc hl,de
ld b,h
ld c,l ;bc=strlen
ex de,hl ;hl=string
ret
isprotocolpresent
;hl=link string
;out: nz=protocol absent (hl=link), z=protocol present (a=protocol (0=file, 1=http), hl=after "//")
ld de,tfileprotocol
push hl
call strcp_tillde0 ;if found, hl=after "//"
pop de
ld a,0
ret z
ex de,hl
ld de,thttpprotocol
push hl
call strcp_tillde0 ;if found, hl=after "//"
pop de
ld a,1
ret z
ex de,hl
ret ;nz=protocol absent (hl=start)
nextscreenline
;out: de=ёЄрЁр ёЄЁюър, nc=out of screen
drawscreenline_frombuf_scr=$+1
ld de,0
ld hl,40
add hl,de ;next line on screen
;push bc
ld bc,40*(SCROLLHGT+1)+0x4000
or a
sbc hl,bc
add hl,bc
;pop bc
ret nc
;bit 5,h
;ret nz ;jr nz,drawscreenline_frombufq ;end of screen, current line doesn't fit
ld (drawscreenline_frombuf_scr),hl
ret
drawscreenline_frombuf
;hl=from
exx
call nextscreenline
;exx
;ret nc ;end of screen, current line doesn't fit
push ix
push iy
drawscreenline_frombuf_ixaddr=$+2
ld ix,(dithermcy0-2)
drawscreenline_frombuf_iyaddr=$+2
ld iy,(colorlace0-2)
;exx
push af ;nc=out of screen
push de ;screen
ld de,LINEPIXELS;-0x4000
ld hl,(keepframe_linesize)
ld b,h
ld c,l
add hl,de
exx
call setpgdiv4000
call setpgtemp8000 ;Єръющ эрь фрыш рфЁхё
jr drawscreenline_frombuf0go
drawscreenline_frombuf0
exx
pop hl
drawscreenline_frombuf0go
readchr_patch=$+1
call readchrlomem
push hl
call convertchr ;jp=1980t (эх фхырхЄ exx т ъюэЎх, фы єфюсёЄтр)
inc de
cpi ;фхырхЄ inc hl
jp pe,drawscreenline_frombuf0
pop af
dec ix
dec ix
ld (drawscreenline_frombuf_ixaddr),ix
dec iy
dec iy
ld (drawscreenline_frombuf_iyaddr),iy
;call setpgs_scr
exx
pop bc ;screen
pop af ;nc=out of screen
ld hl,LINEPIXELS;-0x4000
;hl=data
;bc=screen=0xc000+
call c,prlinefast
call setpgtemp8000
call setpgcode4000
pop iy
pop ix
ret;jp setpgtemp8000
read_b_bytes
read_b_bytes0
call RDBYTE
djnz read_b_bytes0
ret
RDBYTE
INC LY
LD A,(IY)
RET NZ
RDBYH
INC HY
LD A,HY
CP DISKBUF/256+(DISKBUFsz/256)
LD A,(IY)
ccf ;CY=0: OK
RET nz
PUSH HL
PUSH DE
PUSH BC
push IX
CALL rdCS
ex af,af'
PUSH AF
exx
push bc
push de
push hl
ld de,DISKBUF
ld hl,DISKBUFsz
call readstream
;hl=actual size
;fill the rest of buffer with zeros
ld de,DISKBUF
add hl,de
ex de,hl ;de=start of zeros
ld hl,DISKBUF+DISKBUFsz
xor a
sbc hl,de
ld b,h
ld c,l ;bc=length of zeros (Z=no zeros)
jr z,readdiskbuf_nozeros
ld h,d
ld l,e ;start of zeros
ld (hl),a;0
inc de
dec bc
ld a,b
or c
jr z,readdiskbuf_nozeros
ldir
readdiskbuf_nozeros
pop hl
pop de
pop bc
exx
POP AF
ex af,af'
POP IX
pop BC
POP DE
pop hl
ld iy,DISKBUF
LD A,(IY)
or a ;CY=0: OK
RET
ZIPRDBYH
;TODO ўшЄрЄ№ ёЄюы№ъю, ёъюы№ъю юёЄрыюё№ т IDAT (хёыш ¤Єю эх сюы№°х DISKBUFsz), яюЄюь шёърЄ№ ёыхфє■∙шщ IDAT
INC HY
LD A,HY
CP DISKBUF/256+(DISKBUFsz/256)
LD A,(IY)
ccf ;CY=0: OK
RET nz
PUSH HL
PUSH DE
PUSH BC
push IX
;CALL rdCS
ex af,af'
PUSH AF
exx
push bc
push de
push hl
pngIDATremainedHSW=$+1
ld de,0
pngIDATremained=$+1
ld hl,0
ZIPRDBYH0read
ld a,d
or e
ld bc,DISKBUFsz
call z,minhl_bc_tobc ;keeps hl
;bc=size
;jr $
ld a,b
or c
jr nz,ZIPRDBYHn0
;яЁюўшЄрЄ№ CRC
;яЁюўшЄрЄ№ chunksize
;яЁюўшЄрЄ№ "IDAT"
ld de,DISKBUF
ld hl,12
call readstream
;тьхёЄю remained:
ld hl,DISKBUF+4
ld d,(hl)
inc hl
ld e,(hl)
inc hl
ld a,(hl)
inc hl
ld l,(hl)
ld h,a
;ёэютр яюёўшЄрЄ№ ЁрчьхЁ Єхъє∙хую сыюър
jr ZIPRDBYH0read
ZIPRDBYHn0
;bc=size
or a
sbc hl,bc
ld (pngIDATremained),hl
jr nc,$+3
dec de
ld (pngIDATremainedHSW),de
ld d,b
ld e,c
;de=size
ld hl,DISKBUF+DISKBUFsz
or a
sbc hl,de ;size
ex de,hl ;de=addr = DISKBUF+; hl=size
push de
call readstream
pop de
push de ;addr
;hl=actual size
ld a,h
or l
jr z,ZIPRDBYHq;readerror
;move block to end of buf:
ld b,h
ld c,l
dec de ;ld de,DISKBUF-1
add hl,de ;end of data
ld de,DISKBUF+DISKBUFsz-1
sbc hl,de
add hl,de
jr z,ZIPRDBYHq
pop af
lddr
inc de ;begin of data
push de
ZIPRDBYHq
pop iy ;addr = DISKBUF+
pop hl
pop de
pop bc
exx
POP AF
ex af,af'
POP IX
pop BC
POP DE
pop hl
LD A,(IY)
or a ;CY=0: OK
ret
readstream
readstream_patch=$+1
jp readstream_file
rdCS
LD A,0
OR A
RET Z
rdCSU
LD A,0xfe
IN A,(0xfe)
LD (getCS+1),A
getCS
LD A,0xff
RRA
RET
;ўшЄрЄ№ с√ёЄЁю, р яюЄюь юЄърЄ√трЄ№ єърчрЄхы№ Їрщыр
GETDWORD_slow
;hlde
;call RDBYTE
;ld e,a
;call RDBYTE
;ld d,a
call GETWORD_slowhl
ex de,hl
GETWORD_slowhl
call RDBYTE
ld l,a
call RDBYTE
ld h,a
ret
RDWORDHSBLSBtohl
CALL RDBYTE
LD H,A
CALL RDBYTE
LD L,A
RET
readchrlomem
;hl=from (BRG)
ld d,chrbuf/256
_=0
if GIF_PIXELSIZE
dup 8
ld a,(hl)
inc hl
ld (chrbuf+16+_),a
ld (chrbuf+8+_),a
ld (chrbuf+0+_),a
_=_+1
edup
else
dup 8
ld e,0xff&(chrbuf+16+_)
ldi ;b
ld e,0xff&(chrbuf+8+_)
ldi ;g
ld e,0xff&(chrbuf+0+_)
ldi ;r
_=_+1
edup
endif
ret
readchrlomemx2
ld d,chrbuf/256
_=0
if GIF_PIXELSIZE
dup 4
ld a,(hl)
inc hl
ld (chrbuf+16+_),a
ld (chrbuf+8+_),a
ld (chrbuf+0+_),a
_=_+1
ld (chrbuf+16+_),a
ld (chrbuf+8+_),a
ld (chrbuf+0+_),a
_=_+1
edup
else
dup 4
ld e,0xff&(chrbuf+16+_)
ld a,(hl)
ld (de),a
inc e
ldi ;b
ld e,0xff&(chrbuf+8+_)
ld a,(hl)
ld (de),a
inc e
ldi ;g
ld e,0xff&(chrbuf+0+_)
ld a,(hl)
ld (de),a
inc e
ldi ;r
_=_+2
edup
endif
ret
convertchr
chrbufG=64+8
;яюшёъ 2 ЎтхЄют (чряюьшэрхь яюыюцхэш ЁхъюЁфэ√ї ЎтхЄют, ўЄюс√ яюЄюь шї яЁюўшЄрЄ№):
ld hl,chrbuf
_=chrbufG
ld de,_*257
ld c,(hl) ;Rmin
ld b,c ;Rmax
_=_+1
dup 7
inc l
ld a,(hl) ;R(pixel)
cp c ;Rmin
jr nc,$+2+1+2
ld c,a ;Rmin
ld e,_ ;Rmincolor = яюыюцхэшх Єхъє∙хую ЎтхЄр
cp b ;Rmax
jr c,$+2+1+2
ld b,a ;Rmax
ld d,_ ;Rmaxcolor = яюыюцхэшх Єхъє∙хую ЎтхЄр
_=_+1
edup
push de ;ld (Rminmaxcolor),de
ld a,b
sub c
push af ;Rmax-Rmin
inc l ;ld hl,chrbuf+8
_=chrbufG
ld de,_*257
ld c,(hl) ;Gmin
ld b,c ;Gmax
_=_+1
dup 7
inc l
ld a,(hl) ;G(pixel)
cp c ;Gmin
jr nc,$+2+1+2
ld c,a ;Gmin
ld e,_ ;Gmincolor = яюыюцхэшх Єхъє∙хую ЎтхЄр
cp b ;Gmax
jr c,$+2+1+2
ld b,a ;Gmax
ld d,_ ;Gmaxcolor = яюыюцхэшх Єхъє∙хую ЎтхЄр
_=_+1
edup
push de ;ld (Gminmaxcolor),de
ld a,b
sub c
push af ;Gmax-Gmin
inc l ;ld hl,chrbuf+16
_=chrbufG
ld de,_*257
ld c,(hl) ;Bmin
ld b,c ;Bmax
_=_+1
dup 7
inc l
ld a,(hl) ;B(pixel)
cp c ;Bmin
jr nc,$+2+1+2
ld c,a ;Bmin
ld e,_ ;Bmincolor = яюыюцхэшх Єхъє∙хую ЎтхЄр
cp b ;Bmax
jr c,$+2+1+2
ld b,a ;Bmax
ld d,_ ;Bmaxcolor = яюыюцхэшх Єхъє∙хую ЎтхЄр
_=_+1
edup
ld a,b
sub c ;Bmax-Bmin
;т√сшЁрхь ыєў°є■ юё№ ш х╕ minmaxcolor:
ld c,a ;maxdist
pop af ;Gmax-Gmin
pop hl ;Gminmaxcolor
cp c ;>=maxdist?
jr c,$+2+1+1
ld c,a ;maxdist
ex de,hl
pop af ;Rmax-Rmin
pop hl ;Rminmaxcolor
cp c ;>=maxdist?
jr c,$+2+1
ex de,hl
;d=maxcolor
;e=mincolor
;схЁ╕ь ЁхъюЁфэ√х ЎтхЄр (т тшфх color16):
;ўЄюс√ яюыєўшЄ№ color16, эрфю ёэрўрыр color64(=BBGGRR), яюЄюь яю ЄрсышЎх шч эхую
jp (iy) ;colorlace0 ;/1
ROUNDUP=32
ROUNDDOWN=32
macro DOROUNDDOWN
sub ROUNDDOWN
jr nc,$+3
xor a
endm
macro DOROUNDUP
add a,d;ROUNDUP;d
jr nc,$+3
sbc a,a
endm
dw colorlace1
colorlace0
;d=maxcolor
;e=mincolor
;схЁ╕ь ЁхъюЁфэ√х ЎтхЄр (т тшфх color16):
;ўЄюс√ яюыєўшЄ№ color16, эрфю ёэрўрыр color64(=BBGGRR), яюЄюь яю ЄрсышЎх шч эхую
ld h,chrbuf/256
ld l,d ;maxcolor
ld c,(hl) ;G
res 3,l
ld b,(hl) ;R
set 4,l
ld a,(hl) ;B
rlca
rlca
rl c
rla
rl c ;g
rla
rl b
rla
rl b ;r
rla ;BBGGRR
or 0xc0
ld l,a
ld d,h ;e=mincolor
ld a,(de);(hl) ;G
DOROUNDDOWN
ld c,a
res 3,e
ld a,(de);(hl) ;R
DOROUNDDOWN
ld b,a
set 4,e
ld a,(de);(hl) ;B
DOROUNDDOWN
rlca
rlca
rl c
rla
rl c ;g
rla
rl b
rla
rl b ;r
rla ;BBGGRR
and 0x3f
ld e,a;l,a
ld a,(de) ;paper(maxcolor)
or (hl) ;ink(mincolor)
;a=attr
exx
ld (hl),a ;чряшёрЄ№ attr
exx
;яю Ёхры№э√ь рЄЁшсєЄрь чрэютю яхЁхёўшЄрЄ№ maxaxis, min, maxdist! (яЁютхЁхэю, ўЄю схч ¤Єюую яюыєўрхЄё я ЄэшёЄюёЄ№):
ld d,h
dec h ;ld h,tmaxaxis/256+2
ld l,a ;сєфхь їюфшЄ№ яю ¤Єющ ЎтхЄютющ ёюёЄрты ■∙хщ
ld e,(hl) ;maxaxis*8
dec h
ld b,(hl) ;min
dec h
ld h,(hl) ;maxdistdiv
;b=R/G/Bmin
;de эр эрўрых сєЇхЁр R/G/B
;h=maxdistdiv
;т фшЇхЁшэух їюфшь Єюы№ъю яю юфэющ ёюёЄрты ■∙хщ, юёЄры№э√х эх ўшЄрхь:
jp (ix) ;dithermcy0/1/2/3
dw colorlace0
colorlace1
;d=maxcolor
;e=mincolor
;схЁ╕ь ЁхъюЁфэ√х ЎтхЄр (т тшфх color16):
;ўЄюс√ яюыєўшЄ№ color16, эрфю ёэрўрыр color64(=BBGGRR), яюЄюь яю ЄрсышЎх шч эхую
ld h,chrbuf/256
ld l,d ;maxcolor
ld d,ROUNDUP
ld a,(hl) ;G
DOROUNDUP
ld c,a
res 3,l
ld a,(hl) ;R
DOROUNDUP
ld b,a
set 4,l
ld a,(hl) ;B
DOROUNDUP
rlca
rlca
rl c
rla
rl c ;g
rla
rl b
rla
rl b ;r
rla ;BBGGRR
or 0xc0
ld l,a
ld d,(hl) ;paper(maxcolor)
ld l,e ;mincolor
ld c,(hl) ;G
res 3,l
ld b,(hl) ;R
set 4,l
ld a,(hl) ;B
rlca
rlca
rl c
rla
rl c ;g
rla
rl b
rla
rl b ;r
rla ;BBGGRR
and 0x3f
ld l,a
ld a,(hl) ;ink(mincolor)
or d ;paper(maxcolor)
exx
ld (hl),a ;чряшёрЄ№ attr
exx
;яю Ёхры№э√ь рЄЁшсєЄрь чрэютю яхЁхёўшЄрЄ№ maxaxis, min, maxdist! (яЁютхЁхэю, ўЄю схч ¤Єюую яюыєўрхЄё я ЄэшёЄюёЄ№):
ld d,h
dec h ;ld h,tmaxaxis/256+2
ld l,a ;сєфхь їюфшЄ№ яю ¤Єющ ЎтхЄютющ ёюёЄрты ■∙хщ
ld e,(hl) ;maxaxis*8
dec h
ld b,(hl) ;min
dec h
ld h,(hl) ;maxdistdiv
;b=R/G/Bmin
;de эр эрўрых сєЇхЁр R/G/B
;h=maxdistdiv
;т фшЇхЁшэух їюфшь Єюы№ъю яю юфэющ ёюёЄрты ■∙хщ, юёЄры№э√х эх ўшЄрхь:
jp (ix) ;dithermcy0/1/2/3
;0 схёёь√ёыхээю (тёхуфр NC), яю¤Єюьє тёх чэрўхэш єтхышўхэ√ эр 1:
dw dithermcy2
dithermcy3
DITHERMC1B 0x1, 0xd, 0x3, 0xf
ret;jp convertchrq
dw dithermcy1
dithermcy2
DITHERMC1B 0x9, 0x5, 0xb, 0x7
ret;jp convertchrq
dw dithermcy0
dithermcy1
DITHERMC1B 0x4, 0x10, 0x2, 0xe
ret;jp convertchrq
dw dithermcy3
dithermcy0
DITHERMC1B 0xc, 0x8, 0xa, 0x6
ret;jp convertchrq
skipword
;hl=string
;out: hl=terminator/space addr
getword0
ld a,(hl)
or a
ret z
cp ' '
ret z
inc hl
jr getword0
skipspaces
;hl=string
;out: hl=after last space
ld a,(hl)
cp ' '
ret nz
inc hl
jr skipspaces
minhl_bc_tobc
or a
sbc hl,bc
add hl,bc
ret nc ;bc<=hl
ld b,h
ld c,l
ret
MULWORD
;out: HLBC=DE*BC
LD HL,0
LD A,17
MULWOR0 RR B
RR C
DEC A
RET Z
JR NC,$+3
ADD HL,DE
RR H
RR L
JR MULWOR0
putline
;hl=юЄъєфр ъюяшЁєхь ёЄЁюъє
;bc=ёъюы№ъю срщЄ ъюяшЁєхь
;эр т√їюфх ёфтшурхЄ єърчрЄхы№, ъєфр ъюяшЁєхь (putchar_hl, putchar_a)
ex de,hl
putchar_hl=$+1
ld hl,0
putchar_a=$+1
ld a,0
;de=from
;ahl=to
;bc=size
call puttomem
nextputlineaddr
;keeps bc
ld a,(putchar_a)
ld hl,(putchar_hl)
curpicwidx3=$+1
ld de,0
add hl,de
adc a,0
setputlineaddr
ld (putchar_hl),hl
ld (putchar_a),a
ret
getline
;de=ъєфр фюёЄр╕ь ёЄЁюъє
;bc=ёъюы№ъю срщЄ фюёЄр╕ь
gifwasdisposalmethod=$+1
ld a,0 ;bit0 = transparent color present, bit4..2 = disposal method (0=not specified(?), 1=do not dispose(?), 2=overwrite with bg color, 3=overwrite with prev frame(?))
and 0x1c
cp 8
jr z,getline_fill
ld hl,(nframes)
ld a,h
or l
jr nz,getline_frommem
getline_fill
;Їюэ яхЁтюую ърфЁр - чрыштър
push de
gifbgcolor=$+1
ld hl,PAL_GLOB
ldi
dec hl
inc h
ldi
dec hl
inc h
ldi ;TODO яЁютхЁшЄ№ яюЁ фюъ ъюьяюэхэЄ!
pop hl
ret po ;bc=0
ldir
ret
getline_frommem
ld hl,(putchar_hl)
ld a,(putchar_a)
jp getfrommem
curpicwid
dw 0
curpichgt
dw 0
curpichgt_visible
dw 0
downloadfilename
db "download.fil",0
tfileprotocol
db "file://",0
thttpprotocol
db "http://",0
linkbuf
ds MAXLINKSZ+1
curfulllink
ds MAXLINKSZ+1
include "htmlview.asm"
include "html.asm"
include "prvirt.asm"
include "mempgs.asm"
include "dynmem.asm"
include "../_sdk/file.asm"
include "http.asm"
include "gif.asm"
include "drawmc.asm"
include "editline.asm"
oldtimer
dw 0
align 256
textpages
ds 256
;TODO х∙╕ юЄфхы№эю gfxpages (ўЄюс√ ьюцэю с√ыю єфры Є№ RGB яюёых ъюэтхЁёшш)
align 256
tmaxaxis ;maxdistdiv_fromattr[256], min_fromattr[256], maxaxis_fromattr[256]
incbin "tmaxaxis"
;align 256 ;эхяюёЁхфёЄтхээю яюёых tmaxaxis
t64to16ink
incbin "t64to16i"
chrbuf
ds 8 ;R
chrbufG=$&0xff
ds 8 ;G
ds 8 ;B
ds 256-64-24-64
t64to16paper
incbin "t64to16p"
twinto866
incbin "winto866"
endcode=$
ds end1-$
display "free for code=",$-endcode
ds 0x4000-$ ;stack
include "prmc.asm"
include "jpeg.asm"
include "png.asm"
depkbeg=$
initCRC
CRC32_
ret
saveblock
savelastblock
push af
push bc
push de
push hl
;TODO єёъюЁшЄ№
ld de,depkbuf
pngdepktoaddr=$+1
ld hl,0
pngdepktoaddrHSB=$+1
ld a,0
ld bc,(Z6546) ;ёъюы№ъю срщЄ ёюїЁрэшЄ№
ld (TD198),bc ;ёъюы№ъю срщЄ ёюїЁрэ ыш
inc bc
jr saveblock0_go
;рфЁхё 0x7e00..0xffff
saveblock0
push bc
push af
call gifsetpgLZW
pop af
ex de,hl
ld c,(hl)
inc hl
ex de,hl
call writebyte
pop bc
saveblock0_go
dec hl
cpi
jp pe,saveblock0
ld (pngdepktoaddr),hl
ld (pngdepktoaddrHSB),a
call gifsetpgLZW
ld hl,0
ld (Z6546),hl
pop hl
pop de
pop bc
pop af
ret
depkqerror=ERROR
ziptrees
ds 0xa60 + 2*288
include "../pkunzip/depk.asm"
display "depk size=",$-depkbeg
init
ld e,2 ;MC hires mode
OS_SETGFX
;YIELD ;ўЄюс√ cmd ьюу фюфхырЄ№ ётюш фхыр эр ¤ъЁрэх
OS_GETSCREENPAGES
;de=ёЄЁрэшЎ√ 0-ую ¤ъЁрэр (d=ёЄрЁ°р ), hl=ёЄЁрэшЎ√ 1-ую ¤ъЁрэр (h=ёЄрЁ°р )
ld a,e
ld (setpgs_scr_low),a
ld (setpgs_scr_attr),a
ld a,d
ld (setpgs_scr_high),a
ld (setpgs_scr_pixels),a
OS_GETMAINPAGES
;dehl=эюьхЁр ёЄЁрэшЎ т 0000,4000,8000,c000
ld a,e
ld (codepg4000),a
ld a,h
ld (codepg8000),a ;pgdiv
ld a,l
ld (curpgLZW),a
;for JPEG:
OS_NEWPAGE
ld a,e
ld (tpgs+0),a ;mul
OS_NEWPAGE
ld a,e
ld (tpgs+1),a ;y
OS_NEWPAGE
ld a,e
ld (tpgs+2),a ;cb?
OS_NEWPAGE
ld a,e
ld (tpgs+5),a ;cr?
OS_NEWPAGE
ld a,e
ld (temppg8000),a ;depack data, diskbuf
OS_NEWPAGE
ld a,e
ld (histpg),a
ld e,0;COLOR
OS_CLS
ld de,zxpal
OS_SETPAL
;call setpgcode4000
;call setpgtemp8000
;command line = "browser <file to load>"
ld hl,COMMANDLINE ;command line
call skipword
call skipspaces
ld a,(hl)
or a
jr nz,$+5
ld hl,defaultfilename
ld de,linkbuf
call strcopy
;recode url in linkbuf to full path:
ld hl,linkbuf
ld de,curfulllink
push de
call strcopy
pop hl ;curfulllink
call isprotocolpresent
jr z,browser_recodefull_protocolpresent
;protocol absent
;1:/file... => file://1:/file...
;ser.ver... => http://ser.ver...
ld a,(linkbuf+1)
cp ':'
ld a,1
jr nz,$+3
xor a
call adddefaultprotocol
browser_recodefull_protocolpresent
;curfulllink OK
;hl=after "//"
;a=protocol
jp addslashafterserver ;add / after http://ser.ver
defaultfilename
;db "0:/hippiman.bmp",0
db "http://zxevo.ru/nos/",0
wgetfilename
db "wget.com",0
;db "basic.com",0
zxpal
incbin "zxpal"
free2=end2-$;0x8000-$
display "free for code in 0x4000=",free2
ds 0x8000-$
incbin "tdiv"
cmd_end
;display "Size ",/d,cmd_end-cmd_begin," bytes"
savebin "browser.com",cmd_begin,cmd_end-cmd_begin
;LABELSLIST "../us/user.l"