relaxed on cpu z80undoc bigbuff:equ 0x8000 org 0x6000 ;--------------------------------------- res 4,(iy+1) ld bc,0x7ffd ld a,0x17 out (c),a ld a,0x07 ld (0x5c48),a ld (0x5c8d),a xor a out (0xfe),a call zx_cls ld hl,udg ld (0x5c7b),hl p100: ld a,0x45 ld (0x5c8f),a ld hl,p100 push hl ld hl,msg_baudmenu call zx_puts_safe p102: call zx_getkey ld de,1 cp 0x31 jr z,p101 inc e cp 0x32 jr z,p101 inc e cp 0x33 jr z,p101 inc e cp 0x34 jr z,p101 ld e,6 cp 0x35 jr z,p101 ld e,8 cp 0x36 jr z,p101 ld e,12 cp 0x37 jr nz,p102 p101: call rs232_init halt ld b,3 p103: push bc ld de,25 ld hl,cmd_ate0 call send_cmd_wait_ok pop bc jr z,p104 djnz p103 jp x_err p104: ; ld hl,msg_req_vers call zx_puts_safe ld de,25 ld hl,cmd_gmr call send_cmd_wait_ok jp nz,x_err ; ld hl,msg_press_key call zx_puts_safe call zx_getkey ; ld hl,msg_chg_baud call zx_puts_safe ld de,25 ld hl,cmd_uart_9600 call send_cmd_wait_ok jp nz,x_err ld de,12 call rs232_init halt ; ld de,25 ld hl,cmd_cwmode call send_cmd_wait_ok jp nz,x_err ld de,25 ld hl,cmd_cwautoconn call send_cmd_wait_ok jp nz,x_err ld de,25 ld hl,cmd_cwqap call send_cmd_wait_ok jp nz,x_err ; p110: ld hl,msg_ap_list call zx_puts_safe ld de,250 ld hl,cmd_cwlap call send_cmd_wait_ok jp nz,x_err ld hl,msg_repeat call zx_puts_safe call zx_getkey cp 'R' jr z,p110 cp 'r' jr z,p110 ; ld hl,msg_ap_conn call zx_puts_safe ld de,1000 ld hl,cmd_cwjap call send_cmd_wait_ok jp z,p120 call x_err jr p110 ; p120: ld hl,msg_ipcfg call zx_puts_safe ld de,25 ld hl,cmd_cipsta call send_cmd_wait_ok call nz,x_err ; ld hl,msg_ping call zx_puts_safe ld de,75 ld hl,cmd_ping_g call send_cmd_wait_ok call nz,x_err ld de,75 ld hl,cmd_ping_y call send_cmd_wait_ok call nz,x_err ; p199: ld hl,msg_press_key call zx_puts_safe call zx_getkey ; p200: ld hl,bigbuff ld (ptr),hl ld de,bigbuff+1 ld bc,16384 ld (hl),0 ldir call zx_cls ld a,0x45 ld (0x5c8f),a ld hl,msg_menuload call zx_puts_safe p201: call zx_getkey cp 0x31 jr c,p201 cp 0x3a jr nc,p201 sub 0x31 ld (resnum),a call rs232_reset_fifo ld hl,msg_open_tcp call zx_puts_safe ld de,250 ld hl,cmd_conn2site call send_cmd_wait_ok jp z,p210 call x_err jr p199 p210: ld de,50 call set_timeout50 ld a,0x06 ld (0x5c8f),a ld hl,cmd_cipsend call rs232_putstr ld a,(resnum) ld l,a ld h,0 add hl,hl add hl,hl ld de,tabl_ptrurl add hl,de ld e,(hl) inc hl ld d,(hl) ex de,hl call rs232_putstr ld hl,str_crlf call rs232_putstr call wait_ok jp z,p211 call x_err jp p199 p211: ld a,0x07 ld (0x5c8f),a p212: call rs232_getchar jr z,p212 push af call zx_putchar_safe pop af cp '>' jr nz,p211 ld a,0x06 ld (0x5c8f),a ld hl,str_get1 call rs232_putstr ld a,(resnum) ld l,a ld h,0 add hl,hl inc hl add hl,hl ld de,tabl_ptrurl add hl,de ld e,(hl) inc hl ld d,(hl) ex de,hl call rs232_putstr ld hl,str_get2 call rs232_putstr call wait_ok cp 0xfd jp z,p220 call x_err jp p199 p220: ld de,1000 call set_timeout50 p22a: ld a,0x07 ld (0x5c8f),a ld hl,strbuff ld (hl),0 call rdipd ld a,(strbuff) or a jr nz,p221 call x_tout jp p199 p221: ld de,str_ipd call ss_cmp jr z,p222 call x_err jp p199 p222: ld a,0x45 ld (0x5c8f),a ld hl,msg_skip call zx_puts_safe ld hl,0 ld de,strbuff+7 p223: ld a,(de) inc de cp ':' jr z,p230 sub 0x30 ld c,l ld b,h add hl,hl add hl,hl add hl,bc add hl,hl ld c,a ld b,0 add hl,bc jr p223 p230: ld (packsz),hl ex de,hl ld hl,(ptr) p231: call rs232_getchar jr nz,p232 call check_timeout jr c,p231 call x_tout jp p199 p232: ld (hl),a inc hl dec de ld a,d or e jr nz,p231 ld (ptr),hl ld hl,(packsz) ld de,1360 xor a sbc hl,de jr nc,p22a ; ld hl,bigbuff p241: ld a,(hl) inc hl p242: cp 10 jr nz,p241 ld a,(hl) inc hl cp 13 jr nz,p242 inc hl ld a,(resnum) cp 3 jp c,pscr0 cp 6 jp c,pgiga0 ;pmus0: push hl ex de,hl ld hl,(ptr) xor a sbc hl,de ld c,l ld b,h pop hl ld de,0xc86e ldir ld hl,vtpl ld de,0xc000 ld bc,sz_vtpl ldir ld a,0x45 ld (0x5c8f),a ld hl,msg_musply call zx_puts_safe call 0xc000 ei res 5,(iy+1) pmus1: halt call 0xc005 bit 5,(iy+1) jr z,pmus1 call 0xc008 jp p200 ; pgiga0: ld de,0x4000 ld bc,0x1b00 ldir ld de,0xc000 ld bc,0x1b00 ldir res 5,(iy+1) ld bc,0x7ffd pgiga1: halt ld a,0x1f out (c),a halt ld a,0x17 out (c),a bit 5,(iy+1) jr z,pgiga1 jp p200 ; pscr0: ld de,0x4000 ld bc,0x1b00 ldir call zx_getkey jp p200 ;------------------------------ x_err: ld hl,msgff_error cp 1 jr nz,x_er1 x_tout: ld hl,msgff_timeout x_er1: call zx_puts_ff ret ;------------------------------ send_cmd_wait_ok: push hl call set_timeout50 call rs232_reset_fifo ld a,0x06 ld (0x5c8f),a pop hl call rs232_putstr ld a,0x45 ld (0x5c8f),a wait_ok:ld hl,strbuff call rdstr ld a,(strbuff) or a jr nz,_scwo1 inc a ret _scwo1: ld a,0x07 ld (0x5c8f),a ld hl,strbuff call zx_puts_safe ld a,0x45 ld (0x5c8f),a ld de,str_ok call ss_cmp ld a,0x00 jr z,_scwo9 ld de,str_fail call ss_cmp ld a,0xff jr z,_scwo9 ld de,str_error call ss_cmp ld a,0xfe jr z,_scwo9 ld de,str_send_ok call ss_cmp ld a,0xfd jr nz,wait_ok _scwo9: or a ret ;------------------------------ rdstr: call rs232_getchar jr z,rdst2 cp 10 ;LF jr z,rdst3 ld (hl),a inc hl jr rdstr rdst2: call check_timeout jr c,rdstr rdst3: ld (hl),0 ret ;------------------------------ rdipd: call rs232_getchar jr z,ripd2 ld (hl),a inc hl push af call zx_putchar_safe pop af cp ':' ret z jr rdipd ripd2: call check_timeout jr c,rdipd ret ;------------------------------ ss_cmp: ld hl,strbuff ss_cm1: ld a,(de) or a ret z inc de cpi jr z,ss_cm1 ret ;------------------------------ rs232_init: ld bc,0xfbef ;LCR ld a,0x83 out (c),a ld b,0xf8 ;DLL out (c),e inc b ;DLM out (c),d ld b,0xfc ;MCR ld a,0x03 out (c),a dec b ;LCR ld a,0x03 out (c),a rs232_reset_fifo: ld bc,0xfaef ;FCR ld a,0x07 ;FIFO reset out (c),a ld a,0x01 out (c),A _clfifo:ld b,0xfd ;LSR in a,(c) and 0x01 ret z ld b,0xf8 ;DAT in a,(c) jr _clfifo ;------------------------------ rs232_putchar: push AF call zx_putchar_safe pop de ld bc,0xfdef ;LSR _putch1:in a,(c) and 0x20 jr z,_putch1 ld b,0xf8 ;DAT out (c),d ret ;------------------------------ rs232_putstr: ld a,(hl) inc hl or a ret z call rs232_putchar jr rs232_putstr ;------------------------------ rs232_getchar: ld bc,0xfdef ;LSR in a,(c) and 0x01 ret z ld b,0xf8 ;DAT in a,(c) inc b ret ;------------------------------ zx_putchar_safe: cp 10 ;LF ret z cp 13 ;CR jr z,_putc1 cp 0x20 jr c,_putc2 cp 0x80 jr c,_putc1 _putc2: ld a,0x90 _putc1: push hl rst 0x10 pop hl ret ;------------------------------ zx_puts_safe: ld a,0xff ld (0x5c8c),a _puts1: ld a,(hl) inc hl or a ret z call zx_putchar_safe jr _puts1 ;------------------------------ zx_puts_ff: ld a,0xff ld (0x5c8c),a _psff1: ld a,(hl) inc hl cp 0xff ret z push hl rst 0x10 pop hl jr _psff1 ;------------------------------ zx_getkey: res 5,(iy+1) _getk1: bit 5,(iy+1) jr z,_getk1 ld a,(iy-50) ret ;------------------------------ zx_cls: ld a,2 ld (0x5c6b),a call 0x0d6b ld a,2 call 0x1601 xor a ld (0x5c6b),a ret ;------------------------------ set_timeout50: ld hl,(0x5c78) add hl,de ld (tmout),hl ret ;------------------------------ check_timeout: push hl push de ld de,(tmout) ld hl,(0x5c78) xor a sbc hl,de pop de pop hl ret ;------------------------------ tmout: defw 0 ptr: defw 0 packsz: defw 0 resnum: defb 0 ;------------------------------ udg: defb 0b00000000 defb 0b01010100 defb 0b00101010 defb 0b01010100 defb 0b00101010 defb 0b01010100 defb 0b00101010 defb 0b00000000 ;------------------------------ vtpl: listing off include "vtplayer.inc" listing on sz_vtpl:equ $-vtpl ;------------------------------ tabl_ptrurl: defw str_rqsz1,str_uri1 defw str_rqsz2,str_uri2 defw str_rqsz3,str_uri3 defw str_rqsz4,str_uri4 defw str_rqsz5,str_uri5 defw str_rqsz6,str_uri6 defw str_rqsz7,str_uri7 defw str_rqsz8,str_uri8 defw str_rqsz9,str_uri9 ;------------------------------ msgff_timeout: defb 19,1,13,16,2,"- Timeout! -",16,5,13,0xff msgff_error: defb 19,1,13,16,2,"- Error! -",16,5,13,0xff msg_baudmenu: defb "Select baudrate:",13 defb "1.115200",13 defb "2. 57600",13 defb "3. 38400",13 defb "4. 28800",13 defb "5. 19200",13 defb "6. 14400",13 defb "7. 9600",13,0 msg_req_vers: defb "Firmware version...",13,0 msg_press_key: defb "Press a key",13,0 msg_chg_baud: defb "Change baudrate...",13,0 msg_ap_list: defb "AccessPoint list...",13,0 msg_repeat: defb "R - repeat, else continue",13,0 msg_ap_conn: defb "Connect to AccessPoint...",13,0 msg_ipcfg: defb "IP config info...",13,0 msg_ping: defb "Ping...",13,0 msg_menuload: defb "Now, we can try to load some",13 defb "pre-defined resources",13 defb "from the Internet.",13 defb "1. scr #1",13 defb "2. scr #2",13 defb "3. scr #3",13 defb "4. gigascr #1",13 defb "5. gigascr #2",13 defb "6. gigascr #3",13 defb "7. pt3 #1",13 defb "8. pt3 #2",13 defb "9. pt3 #3",13,0 msg_open_tcp: defb "Open TCP connection...",13,0 msg_musply: defb 13,"PT3-module playing" msg_skip: defb "...",0 cmd_ate0: defb "ATE0" str_crlf: defb 13,10,0 cmd_gmr: defb "AT+GMR",13,10,0 cmd_uart_9600: defb "AT+UART_CUR=9600,8,1,0,0",13,10,0 cmd_cwmode: defb "AT+CWMODE_DEF=1",13,10,0 cmd_cwautoconn: defb "AT+CWAUTOCONN=0",13,10,0 cmd_cwqap: defb "AT+CWQAP",13,10,0 cmd_cwlap: defb "AT+CWLAP",13,10,0 cmd_cwjap: defb "AT+CWJAP_CUR=",0x22 defb "wifitest123" ; SSID defb 0x22,0x2c,0x22 defb "ZXSpectrumForeverHelloEverybody321" ; password defb 0x22,13,10,0 cmd_cipsta: defb "AT+CIPSTA?",13,10,0 cmd_ping_g: defb "AT+PING=",0x22,"google.com",0x22,13,10,0 cmd_ping_y: defb "AT+PING=",0x22,"yandex.ru",0x22,13,10,0 cmd_conn2site: defb "AT+CIPSTART=",0x22,"TCP",0x22,",",0x22 defb "zxart.ee" ; site defb 0x22,",80",13,10,0 cmd_cipsend: defb "AT+CIPSEND=",0 str_get1: defb "GET ",0 ;size=4 str_get2: defb " HTTP/1.1",13,10 ;size=123 defb "Host: zxart.ee",13,10 defb "User-Agent: ESP8266-probe1 (ZX Spectrum; CPU Z80; RAM 128Kb)",13,10 ; show off ;) defb "Accept: */*",13,10 defb "Connection: close",13,10,13,10,0 str_uri1: defb "/file/id:61049/filename:%D0%9A%D0%90%D0%A1%D0%B8%D0%BA_-_Banka_%282015%29_%283BM_OpenAir_2015%2C_3%29.scr",0 ;size=105 str_rqsz1: defb "232",0 ;232=4+105+123=get1+uri1+get2 str_uri2: defb "/file/id:61053/filename:Buddy_-_Drunk_Kung-Fu_%282015%29_%283BM_OpenAir_2015%2C_5%29.scr",0 ;size=88 str_rqsz2: defb "215",0 ;215=4+88+123=get1+uri2+get2 str_uri3: defb "/file/id:61058/filename:brightentayle_-_The_Split_Foundations_%282015%29_%283BM_OpenAir_2015%2C_6%29.scr",0 ;size=104 str_rqsz3: defb "231",0 ;231=4+104+123=get1+uri3+get2 str_uri4: defb "/file/id:61060/filename:Tutty_-_Bat2Con_%282015%29_%283BM_OpenAir_2015%2C_1%29.img",0 ;size=82 str_rqsz4: defb "209",0 ;209=4+82+123=get1+uri4+get2 str_uri5: defb "/file/id:61059/filename:Dimidrol_-_Amur_tiger_%282015%29_%283BM_OpenAir_2015%2C_2%29.img",0 ;size=88 str_rqsz5: defb "215",0 ;215=4+88+123=get1+uri5+get2 str_uri6: defb "/file/id:61061/filename:prof4d_-_Fructus_%282015%29_%283BM_OpenAir_2015%2C_4%29.img",0 ;size=83 str_rqsz6: defb "210",0 ;210=4+83+123=get1+uri6+get2 str_uri7: defb "/file/id:61065/filename:luchibobra_-_three_bad_mice_%282015%29_%283BM_OpenAir_2015%2C_1%29.pt3",0 ;size=94 str_rqsz7: defb "221",0 ;221=4+94+123=get1+uri7+get2 str_uri8: defb "/file/id:61067/filename:MmcM_-_summertime_%282015%29_%283BM_OpenAir_2015%2C_2%29.pt3",0 ;size=84 str_rqsz8: defb "211",0 ;211=4+84+123=get1+uri8+get2 str_uri9: defb "/file/id:61066/filename:wbc_-_isglass-3_%282015%29_%283BM_OpenAir_2015%2C_3%29.pt3",0 ;size=82 str_rqsz9: defb "209",0 ;209=4+82+123=get1+uri9+get2 str_ok: defb "OK",13,0 str_error: defb "ERROR",13,0 str_fail: defb "FAIL",13,0 str_send_ok: defb "SEND OK",13,0 str_ipd: defb 13,10,"+IPD,",0 strbuff: ;------------------------------