Rev 64 |
Blame |
Compare with Previous |
Last modification |
View Log
| Download
| RSS feed
| ?url?
DEVICE ZXSPECTRUM128
ORG 0x8000
START
;ðåãèñòðû ÷èïà
WIZ_BASE_ADDR = 0xc000
W_MR = WIZ_BASE_ADDR+0x0000
W_SHAR = WIZ_BASE_ADDR+0x0008
S0_MR = WIZ_BASE_ADDR+0x0201 ;ìë.áàéò
S0_CR = WIZ_BASE_ADDR+0x0203 ;ìë.áàéò
S0_SSR = WIZ_BASE_ADDR+0x0209 ;ìë.áàéò
S0_PORTR = WIZ_BASE_ADDR+0x020a
S0_DPORTR = WIZ_BASE_ADDR+0x0212
S0_DIPR = WIZ_BASE_ADDR+0x0214
S0_TX_WRSR = WIZ_BASE_ADDR+0x0222 ;ìë.ñëîâî
S0_RX_RSR = WIZ_BASE_ADDR+0x022a
S0_TX_FAKE = WIZ_BASE_ADDR+0x2000
S0_RX_FAKE = WIZ_BASE_ADDR+0x3000
;/***************************************/
;/* The bit of Sn_MR regsiter defintion */
;/***************************************/
Sn_MR_CLOSE = 0x00 ;/**< Protocol bits of Sn_MR. */
Sn_MR_TCP = 0x01 ;/**< Protocol bits of Sn_MR. */
Sn_MR_UDP = 0x02 ;/**< Protocol bits of Sn_MR. */
Sn_MR_IPRAW = 0x03 ;/**< Protocol bits of Sn_MR. */
Sn_MR_MACRAW = 0x04 ;/**< Protocol bits of Sn_MR. */
Sn_MR_PPPoE = 0x05 ;/**< Protocol bits of Sn_MR. */
/******************************/
/* The values of CR defintion */
/******************************/
Sn_CR_OPEN = 0x01 ;/**< OPEN command value of Sn_CR. */
Sn_CR_LISTEN = 0x02 ;/**< LISTEN command value of Sn_CR. */
Sn_CR_CONNECT = 0x04 ;/**< CONNECT command value of Sn_CR. */
Sn_CR_DISCON = 0x08 ;/**< DISCONNECT command value of Sn_CR. */
Sn_CR_CLOSE = 0x10 ;/**< CLOSE command value of Sn_CR. */
Sn_CR_SEND = 0x20 ;/**< SEND command value of Sn_CR. */
Sn_CR_SEND_MAC = 0x21 ;/**< SEND_MAC command value of Sn_CR. */
Sn_CR_SEND_KEEP = 0x22 ;/**< SEND_KEEP command value of Sn_CR */
Sn_CR_RECV = 0x40 ;/**< RECV command value of Sn_CR */
Sn_CR_PCON = 0x23 ;/**< PCON command value of Sn_CR */
Sn_CR_PDISCON = 0x24 ;/**< PDISCON command value of Sn_CR */
Sn_CR_PCR = 0x25 ;/**< PCR command value of Sn_CR */
Sn_CR_PCN = 0x26 ;/**< PCN command value of Sn_CR */
Sn_CR_PCJ = 0x27 ;/**< PCJ command value of Sn_CR */
;/**********************************/
;/* The values of Sn_SSR defintion */
;/**********************************/
SOCK_CLOSED = 0x00 ;< SOCKETn is released */
SOCK_ARP = 0x01 ;< ARP-request is transmitted in order to acquire destination hardware address. */
SOCK_INIT = 0x13 ;< SOCKETn is open as TCP mode. */
SOCK_LISTEN = 0x14 ;< SOCKETn operates as "TCP SERVER" and waits for connection-request (SYN packet) from "TCP CLIENT". */
SOCK_SYNSENT = 0x15 ;< Connect-request(SYN packet) is transmitted to "TCP SERVER". */
SOCK_SYNRECV = 0x16 ;< Connect-request(SYN packet) is received from "TCP CLIENT". */
SOCK_ESTABLISHED = 0x17 ;< TCP connection is established. */
SOCK_FIN_WAIT = 0x18 ;< SOCKETn is closing. */
SOCK_CLOSING = 0x1A ;< SOCKETn is closing. */
SOCK_TIME_WAIT = 0x1B ;< SOCKETn is closing. */
SOCK_CLOSE_WAIT = 0x1C ;< Disconnect-request(FIN packet) is received from the peer. */
SOCK_LAST_ACK = 0x1D ;< SOCKETn is closing. */
SOCK_UDP = 0x22 ;< SOCKETn is open as UDP mode. */
SOCK_IPRAW = 0x32 ;< SOCKETn is open as IPRAW mode. */
SOCK_MACRAW = 0x42 ;< SOCKET0 is open as MACRAW mode. */
SOCK_PPPoE = 0x5F ;< SOCKET0 is open as PPPoE mode. */
di
ld sp,0xc000
ld hl,0x4000
ld (hl),0
ld de,0x4001
ld bc,192*256/8-1
ldir
;äåëàåì õàðäðåñåò ÷èïà
;Âñå òàéìèíãè îêðóãëåíû äî 50ìñ
ei
halt
ld bc,0x83ab
in a,(c)
and 0xee
out (c),a ; ðåñåò
halt
or 0x10
out (c),a ; ñíÿòèå ðåñåòà
halt
;Ïðîåöèðîâàíèå ðåãèñòðîâ â àäðåñíîå ïðîñòðàíñòâî z80.
;Äëÿ ïðèìåðà ïðîåöèðóåì â àäðåñà 0xc000-0xffff (â óñëîâèÿõ ZX-Evo baseconf).
;Ïðîåöèðîâàíèå áóäåò ïðîèñõîäèòü òîëüêî ïðè ïîäêëþ÷åííîì ÏÇÓ â çàäàííîì àäðåñíîì îêíå.
;Ñòðàíèöà ÏÇÓ íå èìååò çíà÷åíèÿ
ld a,1
out (0xbf),a
ld bc,0xfff7
ld a,0x3f
out (c),a
;Òåïåðü âêëþ÷àåì ïðîåöèðîâàíèå
ld bc,0x82ab
ld a,7
out (c),a
;äàëåå ñîôòðåñåò ÷èïà(íàñ÷¸ò íóæíîñòè íåóâåðåí, íî íåïîìåøàåò)
ld a,0x80
ld (W_MR+1),a
halt
ld a,0x3c
ld (W_MR),a
di
;çàêèäûâàåì MAC, øëþç, ìàñêó è ÈÏ. Ïîìåíÿòü ïîä ñåáÿ!!!
ld hl,mac
ld de,W_SHAR
ld bc,20
ldir
;Ñ ýòîãî ìîìåíòà ÷èï áóäåò ïèíãîâàòüñÿ è íàñòðîéêè ìîæíî ñ÷èòàòü çàâåðø¸ííûìè.
;Ýñòåòàì ìîæíî ïî÷èòàòü ïäôêó è íàñòðîèòü ÷¸íèòü åù¸, íî äëÿ ïðèìåðà è ýòîãî äîñòàòî÷íî.
;----------------------------------------------------------
;òåïåðü ïîäêëþ÷èìñÿ ê TCP(ÍÒÒÐ) ñåðâåðó è ÷åãîíèòü ïîëó÷èì
;----------------------------------------------------------
;íàñòðîèì ñîêåò
soc_noinit
ld a,Sn_CR_CLOSE ;çàêðîåì ñîåäèíåíèå
ld (S0_CR),a
ld a,Sn_MR_TCP ;ðåæèì ñîêåòà TCP
ld (S0_MR),a
ld hl,(source_port) ;ïðèðàùèâåì âíóòðåííèé ïîðò, ÷òîï ñ ïðåäûäóùèì íå ïåðåñå÷ñÿ
inc hl
ld (source_port),hl
ld e,h ;áèãåíäèàí, ìåíÿåì áàéòû ìåñòàìè
ld d,l
ld (S0_PORTR),de
ld a,Sn_CR_OPEN ;äàåì êîìàíäó îòêðûòèÿ ñîêåòà
ld (S0_CR),a
wait_cr0
ld a,(S0_CR) ;îæèäàåì èñïîëíåíèÿ êîìàíäû
or a
jr nz,wait_cr0
ld a,(S0_SSR) ;åñëè íå èíèöèàëèçèðîâàëñÿ, òî çàíîâî
cp SOCK_INIT
jr nz,soc_noinit
;--------------------
;êîíåêòèìñÿ ê ñåðâåðó
;--------------------
ld hl,S0_DPORTR ;ïîðò ñåðâåðà !áèãåíäèàí!
ld (hl),0
inc hl
ld (hl),80
ld hl,S0_DIPR ;ip ñåðâåðà ìàðîçà1999 217.146.69.13
ld (hl),217
inc hl
ld (hl),146
inc hl
ld (hl),69
inc hl
ld (hl),13
ld a,Sn_CR_CONNECT ;äàåì êîìàíäó êîíåêòà
ld (S0_CR),a
wait_cr1
ld a,(S0_CR) ;îæèäàåì èñïîëíåíèÿ êîìàíäû
or a
jr nz,wait_cr1
;îæèäàåì êîííåêòà ñ ñåðâåðîì
wait_con
ld a,(S0_SSR)
or a
jp z,soc_noinit ;Ñåðâåð ÷¸éòà çàêðûë(íåîòêðûë) êîííåêò
cp SOCK_ESTABLISHED ;âîîáùå òî òóò íàäî ïðîâåðÿòü è íàñ÷¸ò òàéì àóòà, è äðóãîé ôèãíè
jr nz,wait_con ;íî ìû çàáü¸ì íà ýòî äåëî
wait_con_end
;ïðèêîíåêòèëèñü, îòîøë¸ì GET çàïðîñ
;--------------------
;îòïðàâêà ïàêåòà
;--------------------
ld hl,get_str ;çàêèäûâàåì äàòó â áóôåð ÷èïà
ld de,S0_TX_FAKE
ld bc,get_str_end-get_str
inc bc ;çàêèäûâàòü íàäî ÷¸òíîå êîëè÷åñòâî áàéò
res 0,c ;ïîýòîìó îêðóãëèì äî ÷¸òíîãî
ldir ;àõòóíã ãîâíîêîä!!! ldir'èòü ìîæíî íå áîëåå 512 áàéò, ñìîòðè îïèñàíèå ïëàòêè,
;íî ìû îïóñòèì ýòîò ìîìåíò, ò.ê. ñòðîêà ó íàñ ÿâíî êîðî÷å
ld a,high (get_str_end-get_str)
ld (S0_TX_WRSR),a ;çàêèäûâàåì äëèííó äàòû, íå çàáûâàÿ ïðî áèãýíäèàí
ld a,low (get_str_end-get_str)
ld (S0_TX_WRSR+1),a ;à âîò ñäåñü íóæíî óêàçûâàòü òî÷íîå êîë-âî áàéò, íåâçèðàÿ íà íå÷¸òíîñòü
ld a,Sn_CR_SEND ;äàåì êîìàíäó îòïðàâêè
ld (S0_CR),a
wait_cr2
ld a,(S0_CR) ;îæèäàåì èñïîëíåíèÿ êîìàíäû
or a
jr nz,wait_cr2
;--------------------
;îæèäàåì ïàêåò îò ñåðâåðà
;--------------------
ld de,0
wait_pack0
ld de,(S0_RX_RSR) ;÷èòàåì äëèííó ïàêåòà
ld a,d
or e ;åñëè íóëåâàÿ, òî æä¸ì äàëüøå
jr z,wait_pack0
wait_pack1
ld hl,(S0_RX_RSR) ;îãà, ïðèøëî
ex de,hl ;òåïåðü æä¸ì óñòàêàíèâàíèÿ äàòû
xor a ;ïîâòîðíî ÷èòàåì è åñëè íå ñõîäèòñÿ, òî ÷èòàåì åù¸ ðàç äëèííó
sbc hl,de
ld a,h
or l
jr nz,wait_pack1
;ïàêåò ïîëó÷åí ÷èïîì ïîëíîñòüþ, íàäî åãî âû÷èòàòü
;ò.ê. â S0_RX_RSR äëèííà êðàòíà äâóì, òî...
;--------------------
;ñåé÷àñ ïðî÷èòàåì ðåàëüíóþ äëèííó, îíà ëåæèò â ïåðâûõ äâóõ áàéòàõ áóôåðà ïðèåìà
;--------------------
ld hl,(S0_RX_FAKE)
ld b,l ;äîëáàííûé áèãåíäèàí
ld c,h
;--------------------
;÷èòàåì ïàêåò, â de ó íàñ ëåæèò äëèííà êðàòíàÿ äâóì(áèãåíäèàí)
;--------------------
;âû¸æèâàòñÿ ñ ëäèðîì íåáóäåì
ld b,e
ld c,d
dec bc ;â ðåãèñòðå äëèííà ïàêåòà áûëà ñ ó÷¸òîì äâóõ ïåðâûõ áàéò,
dec bc ;êîòîðûå äîáàâèë ñàì âèçíåò(òî÷íàÿ äëèííà ïàêåòà)
ld hl,S0_RX_FAKE
ld de,buf_rx
loop_read
ld l,0
ld a,c
or b
jr z,end_read
ldi
ldi
jr loop_read
end_read
ld a,Sn_CR_RECV ;äàåì çíàòü ÷òî ïàêåò çàáðàëè
ld (S0_CR),a
wait_cr3
ld a,(S0_CR) ;îæèäàåì èñïîëíåíèÿ êîìàíäû
or a
jr nz,wait_cr3
;òèïà âñ¸, äàëåå ðàçáèðàåì ïàêåò, ïîëó÷àåì ñëåäóþùèé, îòïðàâëÿåì. Íî ýòî óæå ñàìè, ÿ çàêðûâàþ ñîåäèíåíèå.
;--------------------
;çàêðîåì ñîåäèíåíèå
;--------------------
ld a,Sn_CR_CLOSE ;çàêðîåì ñîåäèíåíèå
ld (S0_CR),a
;--------------------
;Âñ¸, ïðèìåð îêîí÷åí.
;--------------------
ld bc,768 ;Íå ìíîãî ïî ãîâíîêîäèì.
ld hl,buf_rx+478 ;Ýòà öèôðà ïîëó÷åíà âàÿøàðêîì(î÷åíü ðåêîìåíäóþ, ÷òîï íàãëÿäíî áûëî è ïîçíàâàòåëüíî)
ld de,0x5800 ;À âîîáùåáû òóò íàäî ðàñïàðñèòü HTTP ðåêâåñò
ldir
di
halt
;êîíôèã ñåòè(!!!Ýòè çíà÷åíèÿ èçìåíèòå ïîä êîíôèãâàøåé ñåòè!!!)
mac
db 0x00,0x08,0xDC,0x01,0x02,0x03 ;öèôðû îò áàëäû âçÿë, èç âèçíåòîâîé äîêè
reserved
db 0x00,0x00 ;ýòî äëÿ òîãî, ÷òîá îäíèì ëäèðîì çàêèíóòü
gateway
db 192,168,0,1
mask
db 255,255,255,0
ip
db 192,168,0,77
;âíóòðåííèé ïîðò
source_port dw 0
;http://zx.maros.pri.ee/file/id/15733/filename/Yerzmyey_-_Cat_42_%282009%29_%28_International_Vodka_Party_5%2C_4%29.atr
get_str
db "GET /file/id/15733/filename/Yerzmyey_-_Cat_42_%282009%29_%28_International_Vodka_Party_5%2C_4%29.atr HTTP/1.1",13,10
db "Host: zx.maros.pri.ee",13,10
db 13,10,0
get_str_end
buf_rx
ENDPROG
SAVEHOB "s1.$C","s1.C",START,ENDPROG-START
SAVEBIN "s1",START,ENDPROG-START