Files
ZiFi/_rs232/zificom.a80
T
2026-08-31 21:04:48 +03:00

170 lines
2.3 KiB
Plaintext

device zxspectrum128
org #c000
include "sockets.mac"
start_
jp init
jp get
init
;init uart
ld hl,2 ;BaudRate = 115200 / divfq;
call uart.SetBaud
;init uart
ld a,uart.WLSB1+uart.WLSB0 ;8 bit word, no parity
call uart.SetLineControl
ret
; BUFFER equ 0
; BUFFER_SIZE equ 1
GET_HDR dw 0
GET_HDR_LEN dw 0
GET_PAGE db 0
host_addr_len dw 0
host_addr dw 0
;in:
;a=page
;hl=get hdr
;out:
;a=0 - ok
;hl=len_l
;bc=len_h
get
ld (GET_HDR),hl
ld (GET_PAGE),a
;get host name
g1 ld a,(hl)
or a:jp z,get_err
cp 'H':jr z,get_h1
inc hl:jr g1
get_h1 inc hl
ld a,(hl):cp 'o':jr nz,g1:inc hl
ld a,(hl):cp 's':jr nz,g1:inc hl
ld a,(hl):cp 't':jr nz,g1:inc hl
ld a,(hl):cp ':':jr nz,g1:inc hl
ld a,(hl):cp ' ':jr nz,g1:inc hl
ld (host_addr),hl
ld bc,0
gh1 ld a,(hl):cp 13:jr z,ghe
cp ":":jr z,ghe
cp "/":jr z,ghe ;?
inc hl,bc:jr gh1
ghe ld (host_addr_len),bc
;get HDR len
g2 ld a,(hl)
or a:jr z,g3
inc hl:jr g2
g3 ld de,(GET_HDR):or a:sbc hl,de:ld (GET_HDR_LEN),hl
;gethostbyname
ld hl,(host_addr),bc,(host_addr_len)
call sockets.gethostbyname
or a:jp nz,get_err
ld (server_addr),hl,(server_addr+2),bc
;create socket
socket AF_INET,SOCK_STREAM,0
cp INVALID_SOCKET:jp z,get_err
ld (fd),a
;bind my socket
bind fd,my_addr
or a:jp nz,get_err
;connect to host
connect fd,server_addr
or a:jr nz,get_err
;send HTTP request
send fd,(GET_HDR),(GET_HDR_LEN)
or a:jr nz,get_err
ld ix,0 ;full pages got
ld hl,#4000
get_loop
ld a,(GET_PAGE)
ld bc,#11af:out (c),a
ld de,#8000:ex de,hl:or a:sbc hl,de:ex de,hl ;de=len,hl=start
;recv data
; recv fd,BUFFER,BUFFER_SIZE
push hl
ld b,d,c,e
ld a,(fd)
call sockets.recv
pop hl
or a:jr nz,get_end
; ld a,b:or c:jr z,get_end
add hl,bc
bit 7,h
jr z,get_loop
ld hl,GET_PAGE:inc (hl)
ld hl,#4000
inc ixl
jr get_loop
get_end res 6,h:res 7,h
ld de,0,b,0,c,ixl
srl c:rr d:rr e
srl c:rr d:rr e
add hl,de ;bc:hl=len
get_e ld a,(fd):cp #ff:jr z,noclose
push hl,bc
;close socket
close fd
pop bc,hl
noclose ld a,#ff,(fd),a
xor a
ret
get_err call get_e
inc a
ret
;-----------------------------------------------------------
fd db #ff ;socket fd
my_addr db 0,0,0,0:dw 0 ;my ip+port
server_addr db 93,158,134,3:dw 80
;code
include "uart.a80"
include "sockets.a80"
end_
;save snap
SAVEBIN "_spg/zificom.bin",start_, end_-start_