707 lines
18 KiB
Plaintext
707 lines
18 KiB
Plaintext
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:
|
|
;------------------------------
|