Top secrets sources NedoPC zxusbnet

Rev

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