mirror of https://github.com/zxdos/zxuno.git
177 lines
2.6 KiB
NASM
177 lines
2.6 KiB
NASM
; Some parts taken from ZiFi sources
|
|
|
|
; Performs HTTP-get request
|
|
; First packet will be in var 'output_buffer'
|
|
; received packet size in var 'bytes_avail'
|
|
;
|
|
; HL - url includes http:// header
|
|
httpGet ld de,cmd_conn2site_adr
|
|
pu1 ld a,(hl) ; http://
|
|
inc hl
|
|
cp "/"
|
|
jr nz,pu1
|
|
inc hl ; /
|
|
ld bc,"//"
|
|
ld (host_url+1),hl
|
|
call find_copy_char
|
|
inc hl
|
|
ld (file_url+1),hl
|
|
|
|
create_link1 ld hl,create_link_suffix
|
|
ld bc,7
|
|
ldir
|
|
ld hl,modem_command
|
|
|
|
ld (hl),"G"
|
|
inc hl
|
|
ld (hl),"E"
|
|
inc hl
|
|
ld (hl),"T"
|
|
inc hl
|
|
ld (hl)," "
|
|
inc hl
|
|
ld (hl),"/"
|
|
inc hl
|
|
|
|
ex hl,de
|
|
file_url ld hl,0
|
|
ld bc,#0d0a
|
|
call find_copy_char
|
|
ld hl,http_part1
|
|
ld bc,http_part2-http_part1
|
|
ldir
|
|
host_url ld hl,0
|
|
ld bc,"//"
|
|
call find_copy_char
|
|
ld a,13
|
|
ld (de),a
|
|
inc de
|
|
ld a,10
|
|
ld (de),a
|
|
inc de
|
|
ld hl,http_part2
|
|
ld bc,http_part3-http_part2
|
|
ldir
|
|
ex de,hl
|
|
ld de,modem_command
|
|
or a
|
|
sbc hl,de
|
|
ld de,url_len
|
|
ld bc,-1000
|
|
call Num1
|
|
cp "0"
|
|
jr z,1f
|
|
ld (de),a
|
|
inc de
|
|
1 ld bc,-100
|
|
call Num1
|
|
ld (de),a
|
|
inc de
|
|
1 ld c,-10
|
|
call Num1
|
|
ld (de),a
|
|
inc de
|
|
1 ld c,-1
|
|
call Num1
|
|
ld (de),a
|
|
inc de
|
|
ld a,#0d
|
|
ld (de),a
|
|
inc de
|
|
ld a,#0a
|
|
ld (de),a
|
|
inc de
|
|
xor a
|
|
ld (de),a
|
|
jr firstPacket
|
|
|
|
Num1: ld a,'0'-1
|
|
Num2: inc a
|
|
add hl,bc
|
|
jr c,Num2
|
|
sbc hl,bc
|
|
ret
|
|
|
|
find_copy_char ld a,(hl)
|
|
cp c
|
|
ret z
|
|
cp b
|
|
ret z
|
|
ld (de),a
|
|
inc hl
|
|
inc de
|
|
jr find_copy_char
|
|
|
|
firstPacket:
|
|
call performRequest
|
|
|
|
skipHeaders:
|
|
ld de, output_buffer
|
|
ld bc, 0
|
|
shLp:
|
|
ld a, (de)
|
|
push de
|
|
push bc
|
|
call pushRing
|
|
ld hl, headers_end
|
|
call searchRing
|
|
pop bc
|
|
pop de
|
|
inc de
|
|
inc bc
|
|
cp 1
|
|
jr nz, shLp
|
|
ld hl, (bytes_avail)
|
|
sbc hl, bc
|
|
ld (bytes_avail), hl
|
|
push hl
|
|
pop bc
|
|
push de
|
|
ld de, output_buffer
|
|
pop hl
|
|
ldir
|
|
ret
|
|
|
|
|
|
performRequest:
|
|
ld hl, cmd_conn2site
|
|
call okErrCmd
|
|
cp 1
|
|
jr z, zg_ok
|
|
ld hl, cmd_close
|
|
call okErrCmd
|
|
jr performRequest
|
|
zg_ok:
|
|
ld hl, cmd_cipsend
|
|
call okErrCmd
|
|
guLp:
|
|
call uartReadBlocking
|
|
call pushRing
|
|
ld hl, send_prompt
|
|
call searchRing
|
|
cp 1
|
|
jr nz, guLp
|
|
ld hl, modem_command
|
|
call okErrCmd
|
|
jp getPacket
|
|
|
|
create_link_suffix
|
|
db #22,",80",13,10,0
|
|
display $
|
|
modem_command ds 256+128
|
|
display $
|
|
http_part1 db " HTTP/1.0",13,10 ;size=123
|
|
db "Host: "
|
|
http_part2 db "User-Agent: ZX Uno(Z80 CPU)",13,10 ; show off ;)
|
|
db "Accept: */*",13,10
|
|
db "Connection: close",13,10,13,10
|
|
http_part3
|
|
|
|
cmd_conn2site defb "AT+CIPSTART=", 0x22,"TCP",0x22,",",0x22
|
|
cmd_conn2site_adr ds #40
|
|
|
|
headers_end defb 13,10,13,10,0
|
|
cmd_cipsend defb "AT+CIPSEND="
|
|
url_len defs 6
|
|
defb 0
|