uGophy 0.8

* Extended memory check added
* Music changer added
This commit is contained in:
nihirash 2019-08-10 22:38:02 +03:00
parent 3c9bd57195
commit 4cc55a1692
12 changed files with 2166 additions and 2606 deletions

View File

@ -1,9 +1,6 @@
all: ugoph.bin
player.bin: vtpl.asm
sjasmplus vtpl.asm
ugoph.bin: *.asm player.bin
ugoph.bin: *.asm
sjasmplus main.asm
clean:

View File

@ -14,8 +14,7 @@ FMODE_CREATE = #0E
; Returns:
; A - current drive
getDefaultDrive:
ld a, 0
rst #8
ld a, 0 : rst #8
defb ESX_GETSETDRV
ret
@ -25,11 +24,9 @@ getDefaultDrive:
; Returns:
; A - file stream id
fopen:
push bc
push hl
push bc : push hl
call getDefaultDrive
pop ix
pop bc
pop ix : pop bc
rst #8
defb ESX_FOPEN
ret
@ -46,8 +43,7 @@ fclose:
; Returns
; BC - length(how much was actually read)
fread:
push hl
pop ix
push hl : pop ix
rst #8
defb ESX_FREAD
ret
@ -58,8 +54,7 @@ fread:
; Returns:
; BC - actually written bytes
fwrite:
push hl
pop ix
push hl : pop ix
rst #8
defb ESX_FWRITE
ret

View File

@ -2,213 +2,125 @@
; de - path
; bc - port
openPage:
push hl
push de
push bc
push hl : push de : push bc
xor a
call changeBank
xor a : call changeBank
ex hl, de
ex hl, de : ld de, hist : ld bc, 322 : ldir
ld de, hist
ld bc, 322
ldir
ld hl, page_buffer : xor a : ld (hl), a : ld de, page_buffer + 1 : ld bc, #ffff - page_buffer - 1 : ldir
pop bc : pop de : pop hl
ld hl, page_buffer
xor a
ld (hl), a
ld de, page_buffer + 1
ld bc, #ffff - page_buffer - 1
ldir
pop bc
pop de
pop hl
call makeRequest
xor a
call changeBank
xor a : call changeBank
ld hl, page_buffer
call loadData
xor a
ld (show_offset), a
ld a, 1
ld (cursor_pos), a
ld hl, page_buffer : call loadData
xor a : ld (show_offset), a
inc a : ld (cursor_pos), a
ret
; HL - domain stringZ
; DE - path stringZ
; BC - port stringZ
makeRequest:
push de
push bc
push HL
push de : push bc : push hl
ld hl, downloading_msg
call showTypePrint
ld hl, downloading_msg : call showTypePrint
xor a
call changeBank
xor a : call changeBank
ld hl, cmd_open1 ; Open TCP connection
call uartWriteStringZ
pop hl
call uartWriteStringZ
ld hl, cmd_open2
call uartWriteStringZ
pop hl
call uartWriteStringZ
ld hl, cmd_open3
call okErrCmd
; Open TCP connection
ld hl, cmd_open1 : call uartWriteStringZ
pop hl : call uartWriteStringZ
ld hl, cmd_open2 : call uartWriteStringZ
pop hl : call uartWriteStringZ
ld hl, cmd_open3 : call okErrCmd
pop hl
cp 1
jp nz, reqErr
push hl
pop hl : cp 1 : jp nz, reqErr : push hl
ld hl, cmd_send ; Send request
call uartWriteStringZ
pop hl
push hl
call getStringLength ; Calculate addr length
push bc
pop hl
inc hl ; CR
inc hl ; LF
call B2D16 ; To string
ld hl, B2DBUF
call SkipWhitespace
call uartWriteStringZ
ld hl, crlf
call okErrCmd
pop hl
cp 1
jp nz, reqErr
push hl
; Send request
ld hl, cmd_send : call uartWriteStringZ
pop hl : push hl
call getStringLength
push bc : pop hl : inc hl : inc hl : call B2D16
ld hl, B2DBUF : call SkipWhitespace : call uartWriteStringZ
ld hl, crlf : call okErrCmd
pop hl : cp 1 : jp nz, reqErr : push hl
wPrmt:
call uartReadBlocking
call pushRing
ld hl, send_prompt
call searchRing
cp 1
jr nz, wPrmt
call uartReadBlocking : call pushRing
ld hl, send_prompt : call searchRing : cp 1 : jr nz, wPrmt
pop hl
call uartWriteStringZ
pop hl : call uartWriteStringZ
ld hl, crlf
call uartWriteStringZ
ld a, 1
ld (connectionOpen), a
ld hl, crlf : call uartWriteStringZ : ld a, 1 : ld (connectionOpen), a
ret
reqErr
ld hl, connectionError
call putStringZ
xor a
ld (connectionOpen), a
ret
reqErr:
pop hl ; Now we won't back to same address
ld hl, connectionError : call showTypePrint : call wSec
xor a : ld (connectionOpen), a
call initWifi ; Trying reset ESP and continue work
jp historyBack ; Let's try back home on one URL :)
; Load data to ram via gopher
; HL - data pointer
; In data_recv downloaded volume
loadData:
ld (data_pointer), hl
ld hl, 0
ld (data_recv), hl
ld (data_pointer), hl
ld hl, 0 : ld (data_recv), hl
lpLoop:
call getPacket
ld a, (connectionOpen)
and a
jp z, ldEnd
ld bc, (bytes_avail)
ld de, (data_pointer)
ld hl, output_buffer
ldir
ld hl, (data_pointer)
ld de, (bytes_avail)
push de
add hl, de
ld (data_pointer), hl
pop de
ld hl, (data_recv)
add hl, de
ld (data_recv), hl
ld a, (connectionOpen) : and a : jp z, ldEnd
ld bc, (bytes_avail) : ld de, (data_pointer) : ld hl, output_buffer : ldir
ld hl, (data_pointer) : ld de, (bytes_avail) : push de : add hl, de : ld (data_pointer), hl : pop de
ld hl, (data_recv) : add hl, de : ld (data_recv), hl
jp lpLoop
ldEnd
xor a
ld (data_pointer), a
xor a : ld (data_pointer), a
ret
; Download file via gopher
; HL - filename
downloadData:
ld b, FMODE_CREATE
call fopen
ld (fstream), a
ld b, FMODE_CREATE : call fopen : ld (fstream), a
dwnLp:
call getPacket
ld a, (connectionOpen)
and a
jp z, dwnEnd
ld bc, (bytes_avail)
ld hl, output_buffer
ld a, (fstream)
call fwrite
ld a, (fstream)
call fsync
call getPacket : ld a, (connectionOpen) : and a : jp z, dwnEnd
ld bc, (bytes_avail) : ld hl, output_buffer : ld a, (fstream) : call fwrite
ld a, (fstream) : call fsync
jp dwnLp
dwnEnd:
ld a, (fstream)
call fclose
ld a, (fstream) : call fclose
ret
openURI:
call cleanIBuff
ld b, 19
ld c, 0
call gotoXY
call cleanIBuff
ld hl, cleanLine
call printZ64
ld b, 19
ld c, 0
call gotoXY
ld hl, hostTxt
call printZ64
ld b, 19: ld c, 0 :call gotoXY : ld hl, cleanLine : call printZ64
ld b, 19: ld c, 0 : call gotoXY : ld hl, hostTxt : call printZ64
call input
ld a, (iBuff)
or a
jp z, backToPage
ld a, (iBuff) : or a : jp z, backToPage
ld b, 19
ld c, 0
call gotoXY
ld b, 19 : ld c, 0 : call gotoXY : ld hl, cleanLine : call printZ64
ld hl, iBuff : ld de, d_host : ld bc, 65 : ldir
ld hl, d_host : ld de, d_path : ld bc, d_port : call openPage
ld hl, cleanLine
call printZ64
ld hl, iBuff
ld a, (hl)
and a
ret z
ld de, d_host
ld bc, 65
ldir
ld hl, d_host
ld de, d_path
ld bc, d_port
call openPage
jp showPage
@ -232,4 +144,5 @@ d_port db '70'
hist ds 322
connectionOpen db 0
downloading_msg db 'Downloading...', 0
connectionError db 'Cant open TCP connection', 0
connectionError db "Issue with making request - trying get back", 0

View File

@ -2,99 +2,62 @@ CURKEY = 23560
; Returns in A key code or zero if key wans't pressed
inkey:
ld hl, CURKEY
ld a, (hl)
push af
xor a
ld (hl), a
pop af
ld hl, CURKEY : ld a, (hl)
push af : xor a : ld (hl), a : pop af
ret
findZero:
ld a, (hl)
or a
ret z
ld a, (hl) : or a : ret z
inc hl
jp findZero
input:
ld b, 20
ld c, 0
call gotoXY
ld b, 20 : ld c, 0 : call gotoXY
ld hl, cleanLine
call printZ64
ld hl, iBuff
call findZero
ld hl, cleanLine : call printZ64
ld hl, iBuff : call findZero
iLp:
halt
push hl
ld b, 20
ld c, 0
call gotoXY
ld b, 20 : ld c, 0: call gotoXY
ld hl, iBuff : call printZ64
ld hl, iBuff
call printZ64
ld a, '_'
call putC
ld a, ' '
call putC
ld a, '_' : call putC : ld a, ' ' : call putC
call inkey
cp 0
jr z, iNth
cp 0 : jr z, iNth
cp 12 : jr z, iBS
cp 13 : jr z, iRet
cp 12
jr z, iBS
cp 13
jr z, iRet
pop hl
ld (hl), A
push hl
ld de, iBuff + 62
sub hl, de
ld a, h
or l
jr z, iCr
pop hl
inc hl
pop hl : ld (hl), A : push hl
ld de, iBuff + 62 : sub hl, de : ld a, h : or l : jr z, iCr
pop hl : inc hl
jr iLp
iBS: pop hl
push hl
ld de, iBuff
sub hl, de
ld a, h
or l
pop hl
jr z, iLp
dec hl
ld (hl), 0
jr iLp
iCr pop hl
xor a
ld (hl), a
push hl
iNth pop hl
iBS: pop hl : push hl
ld de, iBuff : sub hl, de : ld a, h : or l
pop hl :jr z, iLp
dec hl : ld (hl), 0
jr iLp
iCr pop hl : xor a : ld (hl), a : push hl
iNth pop hl: jr iLp
cleanIBuff:
ld bc, 64
ld hl, iBuff
ld de, iBuff + 1
ld (hl), 0
ldir
ret
ld bc, 64 : ld hl, iBuff : ld de, iBuff + 1 : ld (hl), 0 : ldir
ret
iRet:
pop hl
ld b, 20
ld c, 0
call gotoXY
ld hl, cleanLine
call printZ64
ld b, 20 : ld c, 0 : call gotoXY
ld hl, cleanLine :call printZ64
ret
iBuff defs 65

View File

@ -3,34 +3,40 @@
Start:
di
xor a
call changeBank
call checkHighMem : jp nz, noMem
xor a : out (#fe), a : call changeBank
ld sp, #5aff
ld de, #4000
ld bc, eop - page_buffer
ld hl, page_buffer
ldir
ld de, #4000 : ld bc, eop - player : ld hl, player : ldir
ei
call renderHeader
ld hl, connecting_wifi
call printZ64
ld hl, connecting_wifi : call printZ64
call initWifi
call wSec
ld de, path
ld hl, server
ld bc, port
call openPage
ld de, path : ld hl, server : ld bc, port : call openPage
jp showPage
noMem:
ld hl, no128k
nmLp:
push hl
ld a, (hl)
and a : jr z, $
rst #10
pop hl
inc hl
jp nmLp
wSec: ld b, 50
wsLp halt
djnz wsLp
wsLp halt : djnz wsLp
include "tscreen.asm"
include "keyboard.asm"
@ -43,7 +49,8 @@ wsLp halt
include "ring.asm"
include "esxdos.asm"
connecting_wifi db 13, ' Connecting to WiFi', 13, 0
connecting_wifi db 13, 'Connecting to WiFi', 13, 0
open_lbl db 'Opening connection to ', 0
path db '/ncmenu'
@ -54,6 +61,16 @@ port db '70'
defs 5
db 0
page_buffer equ $
INCBIN "player.bin"
display "PAGE buffer:", $
no128k db 13, "You're started in 48k mode!", 13
db "Current version require full", 13
db "128K memory access", 13
db "System halted!", 0
player
DISPLAY "Player starts:" , $
include "vtpl.asm"
DISPLAY "Player ends: ", $
ENT
eop equ $
SAVEBIN "ugoph.bin", Start, $ - Start
SAVETAP "ugoph.tap", Start

View File

@ -1,229 +1,127 @@
showPage:
xor a
ld (show_offset), a
ld a, 1
ld (cursor_pos), a
xor a : ld (show_offset), a
inc a :ld (cursor_pos), a
backToPage:
call renderScreen
call showCursor
call renderScreen : call showCursor
showLp:
xor a
call changeBank
xor a : call changeBank
jp controls
dup 5
halt
edup
jr showLp
controls:
call inkey
cp 0
jr z, showLp
cp 'q'
jp z, pageCursorUp
cp 'a'
jp z, pageCursorDown
cp 13
jp z, selectItem
cp 'b'
jp z, historyBack
cp 'o'
jp z, pageScrollUp
cp 'p'
jp z, pageScrollDn
cp 'n'
jp z, openURI
cp 0 : jr z, showLp
cp 'q' : jp z, pageCursorUp
cp 'a' : jp z, pageCursorDown
cp 13 : jp z, selectItem
cp 'b' : jp z, historyBack
cp 'o' : jp z, pageScrollUp
cp 'p' : jp z, pageScrollDn
cp 'n' : jp z, openURI
jp showLp
historyBack:
ld hl, server
ld de, path
ld bc, port
call openPage
ld hl, server : ld de, path : ld bc, port : call openPage
jp showPage
pageCursorUp:
ld a, (cursor_pos)
ld a, (cursor_pos)
dec a
cp 0
jp z, pageScrollUp
cp 0 : jp z, pageScrollUp
push af
call hideCursor
pop af
ld (cursor_pos), a
call showCursor
push af : call hideCursor : pop af : ld (cursor_pos), a : call showCursor
jp showLp
pageCursorDown:
ld a, (cursor_pos)
inc a
cp 21
jp z, pageScrollDn
cp 21 : jp z, pageScrollDn
push af
call hideCursor
pop af
ld (cursor_pos), a
call showCursor
push af : call hideCursor : pop af : ld (cursor_pos), a : call showCursor
jp showLp
pageScrollDn:
ld hl, (show_offset)
ld de, 20
add hl, de
ld (show_offset), hl
ld a, 1
ld (cursor_pos), a
call renderScreen
call showCursor
jp showLp
ld hl, (show_offset) : ld de, 20 : add hl, de : ld (show_offset), hl
ld a, 1 : ld (cursor_pos), a
jp backToPage
pageScrollUp:
ld a, (show_offset)
and a
jp z, showLp
ld a, (show_offset) : and a : jp z, showLp
ld hl, (show_offset) : ld de, 20 : sub hl, de : ld (show_offset), hl
ld a, 20 : ld (cursor_pos), a
ld hl, (show_offset)
ld de, 20
sub hl, de
ld (show_offset), hl
ld a, 20
ld (cursor_pos), a
jp backToPage
selectItem:
ld a, (cursor_pos)
dec a
ld b, a
ld a, (show_offset)
add b
ld b, a
ld a, (cursor_pos) : dec a : ld b, a : ld a, (show_offset) : add b : ld b, a
call findLine
ld a, h
cp l
ret z
ld a, h : or l : jp z, showLp
ld a, (hl)
cp '1'
jr z, downPg
cp '0'
jr z, downPg
cp '9'
jp z, downFl
cp '7'
jr z, userInput
cp '1' : jr z, downPg
cp '0' : jr z, downPg
cp '9' : jp z, downFl
cp '7' : jr z, userInput
jp showLp
userInput:
call cleanIBuff
call input
call cleanIBuff : call input
call extractInfo
ld hl, file_buffer
call findEnd
ld a, 9
ld (hl), a
inc hl
ex hl, de
ld hl, iBuff
ld bc, 64
ldir
call extractInfo
ld hl, file_buffer : call findEnd : ld a, 9 : ld (hl), a : inc hl
ex hl, de : ld hl, iBuff : ld bc, 64 : ldir
ld hl, hist
ld de, path
ld bc, 322
ldir
ld hl, hist : ld de, path : ld bc, 322 : ldir
ld hl, server_buffer
ld de, file_buffer
ld bc, port_buffer
call openPage
ld hl, server_buffer : ld de, file_buffer : ld bc, port_buffer : call openPage
jp showPage
downPg:
push af
call extractInfo
ld hl, hist
ld de, path
ld bc, 322
ldir
ld hl, hist : ld de, path : ld bc, 322 : ldir
ld hl, server_buffer
ld de, file_buffer
ld bc, port_buffer
call openPage
ld hl, server_buffer : ld de, file_buffer : ld bc, port_buffer : call openPage
pop af
cp '1'
jp z,showPage
cp '0'
jp z, showText
cp '1' : jp z,showPage
cp '0' : jp z, showText
jp showLp
downFl:
call extractInfo
call clearRing
call cleanIBuff
call extractInfo : call clearRing : call cleanIBuff
ld hl, file_buffer
call findFnme
jp isOpenable
ld hl, file_buffer : call findFnme : jp isOpenable
dfl:
ld hl, file_buffer
call findFnme
ld hl, file_buffer : call findFnme
ld de, iBuff : ld bc, 65 : ldir
ld de, iBuff
ld bc, 65
ldir
call input
ld hl, iBuff
call showTypePrint
ld hl, iBuff : call showTypePrint
ld hl, server_buffer
ld de, file_buffer
ld bc, port_buffer
call makeRequest
ld hl, server_buffer : ld de, file_buffer : ld bc, port_buffer : call makeRequest
xor a
call changeBank
xor a : call changeBank
ld hl, iBuff
call downloadData
ld hl, iBuff : call downloadData
call hideCursor
call showCursor
call hideCursor : call showCursor
jp showLp
isOpenable:
ld a, (hl)
and a
jr z, checkFile
push hl
call pushRing
pop hl
ld a, (hl) : and a : jr z, checkFile
push hl : call pushRing : pop hl
inc hl
jr isOpenable
@ -236,249 +134,154 @@ pt2Ext2 db ".PT2", 0
checkFile:
;; Images
ld hl, imgExt
call searchRing
cp 1
jr z, loadImage
ld hl, imgExt2
call searchRing
cp 1
jr z, loadImage
ld hl, imgExt : call searchRing : cp 1 : jr z, loadImage
ld hl, imgExt2 : call searchRing : cp 1 : jr z, loadImage
;; Music
xor a
ld (#4000 + 10), a
xor a: ld (#400A), a
ld hl, pt3Ext
call searchRing
cp 1
jr z, playMusic
ld hl, pt3Ext : call searchRing : cp 1: jr z, playMusic
ld hl, pt3Ext2 : call searchRing : cp 1 : jr z, playMusic
ld hl, pt3Ext2
call searchRing
cp 1
jr z, playMusic
ld a, 2 : ld (#400A), a
ld a, 2
ld (#4000 + 10), a
ld hl, pt2Ext2
call searchRing
cp 1
jr z, playMusic
ld hl, pt2Ext
call searchRing
cp 1
jr z, playMusic
ld hl, pt2Ext2 : call searchRing : cp 1 : jr z, playMusic
ld hl, pt2Ext : call searchRing : cp 1 : jr z, playMusic
jp dfl
loadImage:
ld hl, server_buffer
ld de, file_buffer
ld bc, port_buffer
call makeRequest
ld hl, server_buffer : ld de, file_buffer : ld bc, port_buffer : call makeRequest
ld a, 7
call changeBank
ld hl, #c000
call loadData
ld a, 7 : call changeBank
ld hl, #c000 : call loadData
ld c, #ff
xor a
out (c), a
wKey: call inkey
or a
jr z, wKey
xor a
call changeBank
ld c, #ff : xor a : out (c), a
wKey:
call inkey : or a : jr z, wKey
xor a : call changeBank
jp backToPage
playMusic:
ld hl, hist
ld de, path
ld bc, 322
ldir
ld hl, hist : ld de, path : ld bc, 322 : ldir
ld hl, (show_offset)
push hl
ld hl, (show_offset) : push hl
ld hl, server_buffer
ld de, file_buffer
ld bc, port_buffer
call openPage
ld hl, server_buffer : ld de, file_buffer : ld bc, port_buffer : call openPage
ld hl, playing
call showTypePrint
ld hl, playing : call showTypePrint
xor a
call changeBank
xor a : call changeBank
call setNoTurboMode
ld hl, page_buffer
call #4003
ld a, (#400A) : or 1 : ld (#400A), a
ld hl, page_buffer : call #4003
playLp:
halt
call #4005
xor a
in a, (#fe)
cpl
and 15
jr z, playLp
halt : call #4005
xor a : in a, (#fe) : cpl : and 15 : jp nz, stopPlay
ld a, (#400A) : rla : jr nc, playLp
songEnded:
call #4008
call setTurbo4Mode
ld hl, server : ld de, path : ld bc, port : call openPage
pop hl : ld (show_offset), hl
ld a, (cursor_pos) : inc a : cp 21 : jr z, playNxtPg : ld (cursor_pos), a
jr playContinue
playNxtPg:
ld hl, (show_offset) : ld de, 20 : add hl, de : ld (show_offset), hl : ld a, 1 : ld (cursor_pos), a
playContinue:
call renderScreen : call showCursor
jp selectItem
stopPlay:
call #4008
call setTurbo4Mode
ld hl, server
ld de, path
ld bc, port
call openPage
pop hl
ld (show_offset), hl
ld hl, server : ld de, path : ld bc, port : call openPage
pop hl : ld (show_offset), hl
jp backToPage
findFnme:
push hl
pop de
push hl : pop de
ffnmlp:
ld a, (hl)
cp 0
jr z, ffnmend
cp '/'
jr z, fslsh
cp 0 : jr z, ffnmend
cp '/' : jr z, fslsh
inc hl
jp ffnmlp
fslsh:
inc hl
push hl
pop de
inc hl : push hl : pop de
jp ffnmlp
ffnmend:
push de
pop hl
push de : pop hl
ret
showType:
ld a, (cursor_pos)
dec a
ld b, a
ld a, (show_offset)
add b
ld b, a
ld a, (cursor_pos) : dec a : ld b, a : ld a, (show_offset) : add b : ld b, a
call findLine
ld a, h
cp l
jr z, showTypeUnknown
ld a, h : or l : jr z, showTypeUnknown
ld a, (hl)
cp 'i'
jr z, showTypeInfo
cp '9'
jr z, showTypeDown
cp '1'
jr z, showTypePage
cp '0'
jr z, showTypeText
cp '7'
jr z, showTypeInput
cp 'i' : jr z, showTypeInfo
cp '9' : jr z, showTypeDown
cp '1' : jr z, showTypePage
cp '0' : jr z, showTypeText
cp '7' : jr z, showTypeInput
jr showTypeUnknown
showTypeInput:
ld hl, type_inpt
call showTypePrint
call showURI
ld hl, type_inpt : call showTypePrint : call showURI
ret
showTypeText:
ld hl, type_text
call showTypePrint
call showURI
ld hl, type_text : call showTypePrint : call showURI
ret
showTypeInfo:
ld hl, type_info
jp showTypePrint
ld hl, type_info : jp showTypePrint
showTypePage:
ld hl, type_page
call showTypePrint
call showURI
ld hl, type_page : call showTypePrint : call showURI
ret
showTypeDown:
ld hl, type_down
call showTypePrint
call showURI
ld hl, type_down : call showTypePrint : call showURI
ret
showURI:
call extractInfo
ld hl, server_buffer
call printZ64
ld hl, file_buffer
call printZ64
call extractInfo : ld hl, server_buffer : call printZ64
ld hl, file_buffer : call printZ64
ret
showTypeUnknown:
ld hl, type_unkn
jp showTypePrint
ld hl, type_unkn : jp showTypePrint
showTypePrint:
push hl
ld b, 21
ld c, 0
call gotoXY
ld hl, cleanLine
call printZ64
ld b, 21
ld c, 0
call gotoXY
pop hl
call printZ64
ret
ld b, 21 : ld c, 0 : call gotoXY : ld hl, cleanLine : call printZ64
ld b, 21 : ld c, 0 : call gotoXY : pop hl : jp printZ64
renderHeader:
call clearScreen
ld bc, 0
call gotoXY
ld hl, head
call printZ64
ld d, 0
call inverseLine
call clearScreen : ld bc, 0 : call gotoXY
ld hl, head : call printZ64
ld d, 0 : call inverseLine
ret
renderScreen:
call renderHeader
call renderHeader
ld b, 20
renderLp:
push bc
ld a, 20
sub b
ld b, a
ld a, (show_offset)
add b
ld b, a
ld a, 20 : sub b : ld b, a : ld a, (show_offset) : add b : ld b, a
call renderLine
pop bc
djnz renderLp
@ -487,17 +290,10 @@ renderLp:
; b - line number
renderLine:
call findLine
ld a, h
or l
ret z
ld a, (hl)
and a
ret z
ld a, h: or l: ret z
ld a, (hl) : and a : ret z
inc hl
call printT64
call mvCR
call printT64 : call mvCR
ret
; B - line number
@ -505,85 +301,61 @@ renderLine:
findLine:
ld hl, page_buffer
fndLnLp:
ld a, b
and a
ret z
ld a, b : and a : ret z
ld a, (hl)
; Buffer ends?
and a : jr z, fndEnd
and a ; Buffer ends?
jr z, fndEnd
; New line?
cp 10 : jr z, fndLnNL
cp 10 ; New line?
jr z, fndLnNL
inc hl
jp fndLnLp
fndLnNL:
dec b
inc hl
jp fndLnLp
dec b : inc hl : jp fndLnLp
fndEnd:
ld hl, 0
ret
ld hl, 0 : ret
extractInfo:
ld a, (cursor_pos)
dec a
ld b, a
ld a, (show_offset)
add b
ld b, a
call findLine
ld a, h
cp l
ret z
ld a, (cursor_pos) : dec a : ld b, a : ld a, (show_offset) : add b : ld b, a
call findNextBlock
inc hl
ld de, file_buffer
call extractCol
inc hl
ld de, server_buffer
call extractCol
inc hl
ld de, port_buffer
call extractCol
call findLine
ld a, h : or l : ret z
call findNextBlock
inc hl : ld de, file_buffer : call extractCol
inc hl : ld de, server_buffer : call extractCol
inc hl : ld de, port_buffer : call extractCol
ret
extractCol:
ld a, (hl)
cp 0
jr z, endExtract
cp 09
jr z, endExtract
cp 13
jr z, endExtract
ld (de), a
inc de
inc hl
cp 0 : jr z, endExtract
cp 09 : jr z, endExtract
cp 13 : jr z, endExtract
ld (de), a : inc de : inc hl
jr extractCol
endExtract:
xor a
ld (de), a
xor a : ld (de), a
ret
findNextBlock:
ld a, (hl)
cp 09 ; TAB
ret z
cp 13 ; New line
ret z
cp 0 ; End buffer
ret z
; TAB
cp 09 : ret z
; New line
cp 13 : ret z
; End of buffer
cp 0 : ret z
inc hl
jp findNextBlock
@ -591,7 +363,7 @@ findNextBlock:
show_offset db 0
cursor_pos db 1
head db " UGophy - ZX-UNO Gopher client v. 0.7c (c) Alexander Sharikhin", 13,0
head db " UGophy - ZX-UNO Gopher client v. 0.8 (c) Alexander Sharikhin", 13,0
cleanLine db " ",0
playing db "Playing... Hold <SPACE> to stop!", 0

View File

@ -1,67 +1,38 @@
; Pushes A to ring buffer
pushRing
push af
ld b, 32
ld hl, ring_buffer + 1
ld de, ring_buffer
ld b, 32 : ld hl, ring_buffer + 1 : ld de, ring_buffer
ringL
ld a, (hl)
ld (de), a
inc hl
inc de
djnz ringL
ld a, (hl) : ld (de), a : inc hl : inc de : djnz ringL
pop af
ld hl, ring_buffer + 31
ld (hl), a
ld hl, ring_buffer + 31 : ld (hl), a
ret
; HL - Compare string(null terminated)
; A - 0 NOT Found
; 1 Found
searchRing:
ld b, 0
push hl
ld b, 0 : push hl
serlp:
ld a, (hl)
inc hl
inc b
and a
jp nz, serlp
dec b
pop hl
push bc
push hl
ld a, (hl) : inc hl : inc b : and a : jp nz, serlp
dec b : pop hl : push bc : push hl
SRWork:
pop hl
pop hl
ld de, ring_buffer + 32
srcLp
dec de
djnz srcLp
dec de : djnz srcLp
pop bc
ringCmpLp
push bc
push af
ld a, (de)
ld b, a
pop af
ld a, (hl)
cp b
pop bc
ld a, 0
ret nz
inc de
inc hl
push bc : push af
ld a, (de) : ld b, a
pop af : ld a, (hl) : cp b : pop bc : ld a, 0 : ret nz
inc de : inc hl
djnz ringCmpLp
ld a, 1
ret
clearRing:
xor a
ld hl, ring_buffer
ld de, ring_buffer + 1
ld bc, 32
ld (hl), a
ldir
xor a : ld hl, ring_buffer : ld de, ring_buffer + 1 : ld bc, 32 : ld (hl), a : ldir
ret
ring_buffer dup 33

View File

@ -1,12 +1,10 @@
showText:
xor a
ld (show_offset), a
xor a : ld (show_offset), a
call renderTextScreen
showTxLp:
call txControls
xor a
call changeBank
xor a : call changeBank
dup 5
halt
@ -16,37 +14,27 @@ showTxLp:
txControls:
call inkey
and a
ret z
and a : ret z
cp 'q'
jp z, txUp
cp 'a'
jp z, txDn
cp 'b'
jp z, historyBack
cp 'o'
jp z, openURI
cp 'q' : jp z, txUp
cp 'a' : jp z, txDn
cp 'b' : jp z, historyBack
cp 'n' : jp z, openURI
ret
txUp:
ld a, (show_offset)
and a
ret z
and a : ret z
sub 20
ld (show_offset), a
sub 20 : ld (show_offset), a
call renderTextScreen
ret
txDn:
ld a, (show_offset)
add 20
ld (show_offset), a
ld a, (show_offset)
add 20 : ld (show_offset), a
call renderTextScreen
ret
@ -55,13 +43,10 @@ renderTextScreen:
ld b, 20
txRenderLp:
push bc
ld a, 20
sub b
ld b, a
ld a, (show_offset)
add b
ld b, a
ld a, 20 : sub b : ld b, a : ld a, (show_offset) : add b : ld b, a
call renderTextLine
pop bc
djnz txRenderLp
ret
@ -70,13 +55,9 @@ txRenderLp:
renderTextLine:
call findLine
ld a, h
or l
ret z
ld a, h : or l : ret z
ld a, (hl) : and a : ret z
ld a, (hl)
and a
ret z
call printL64
call mvCR
ret

View File

@ -7,29 +7,16 @@ UART_BYTE_SENDING = #40
; Cleaning all flags by reading UART regs
; Wastes AF and BC
uartBegin:
ld bc, ZXUNO_ADDR
ld a, UART_STAT_REG
out (c), a
ld bc, ZXUNO_REG
in A, (c)
ld bc, ZXUNO_ADDR
ld a, UART_DATA_REG
out (c), a
ld bc, ZXUNO_REG
in A, (c)
ld bc, ZXUNO_ADDR : ld a, UART_STAT_REG : out (c), a
ld bc, ZXUNO_REG : in A, (c)
ld bc, ZXUNO_ADDR : ld a, UART_DATA_REG : out (c), a
ld bc, ZXUNO_REG : in A, (c)
ret
; Blocking read one byte
uartReadBlocking:
call uartRead
push af
ld a, 1
cp b
jr z, urb
pop af
push af : ld a, 1 : cp b : jr z, urb : pop af
ret nz
jp uartReadBlocking
urb:
@ -41,72 +28,45 @@ urb:
; BC will be wasted
uartWriteByte:
push af
ld bc, ZXUNO_ADDR
ld a, UART_STAT_REG
out (c), a
ld bc, ZXUNO_ADDR : ld a, UART_STAT_REG : out (c), a
waitWriteReady:
ld bc, ZXUNO_REG
in A, (c)
and UART_BYTE_RECIVED
ld bc, ZXUNO_REG : in A, (c) : and UART_BYTE_RECIVED
jr nz, is_recvF
checkSent:
ld bc, ZXUNO_REG
in A, (c)
and UART_BYTE_SENDING
ld bc, ZXUNO_REG : in A, (c) : and UART_BYTE_SENDING
jr nz, checkSent
ld bc, ZXUNO_ADDR
ld a, UART_DATA_REG
out (c), a
ld bc, ZXUNO_REG
pop af
out (c), a
ld bc, ZXUNO_ADDR : ld a, UART_DATA_REG : out (c), a
ld bc, ZXUNO_REG : pop af : out (c), a
ret
is_recvF:
push af
push hl
ld hl, is_recv
ld a, 1
ld (hl), a
pop hl
pop af
push af : push hl
ld hl, is_recv : ld a, 1 : ld (hl), a
pop hl : pop af
jr checkSent
; Is data avail in UART
; NZ - Data Presents
; Z - Data absent
uartAvail:
ld a, (is_recv)
and 1
ret nz
ld a, (poked_byte)
and 1
ret nz
ld a, (is_recv) : and 1 : ret nz
ld a, (poked_byte) : and 1 : ret nz
call uartRead
push af : ld a, b : and 1 : jr z, noneData : pop af
push af
ld a, b
and 1
jr z, noneData
pop af
push af
ld hl, byte_buff
ld (hl), a
ld hl, poked_byte
ld a, 1
ld (hl), a
ld hl, byte_buff : ld (hl), a : ld hl, poked_byte : ld a, 1 : ld (hl), a
pop af
ld b, a
ld a, 1
or a
ld a, b
ld b, a : ld a, 1 : or a : ld a, b
ret
noneData:
pop bc
xor a
pop bc : xor a
ret
; Read byte from UART
@ -115,63 +75,38 @@ noneData:
; 1 - Was read
; 0 - Nothing to read
uartRead:
ld a, (poked_byte)
and 1
jr nz, retBuff
ld a, (poked_byte) : and 1 : jr nz, retBuff
ld a, (is_recv)
and 1
jr nz, recvRet
ld a, (is_recv) : and 1 : jr nz, recvRet
ld bc, ZXUNO_ADDR
ld a, UART_STAT_REG
out (c), a
ld bc, ZXUNO_REG
in a, (c)
and UART_BYTE_RECIVED
ld bc, ZXUNO_ADDR : ld a, UART_STAT_REG : out (c), a
ld bc, ZXUNO_REG : in a, (c) : and UART_BYTE_RECIVED
jr nz, retReadByte
ld b, 0
ret
retReadByte:
ld a, 0
ld (poked_byte), a
ld (is_recv), a
xor a : ld (poked_byte), a : ld (is_recv), a
ld bc, ZXUNO_ADDR
ld a, UART_DATA_REG
out (c), a
ld bc, ZXUNO_REG
in a, (c)
ld bc, ZXUNO_ADDR : ld a, UART_DATA_REG : out (c), a
ld bc, ZXUNO_REG : in a, (c)
ld b, 1
ret
recvRet:
ld bc, ZXUNO_ADDR
ld a, UART_DATA_REG
out (c),a
ld bc, ZXUNO_ADDR : ld a, UART_DATA_REG : out (c),a
ld bc, ZXUNO_REG
in a, (c)
ld hl, is_recv
ld (hl), 0
ld hl, poked_byte
ld (hl), 0
ld bc, ZXUNO_REG : in a, (c)
ld hl, is_recv : ld (hl), 0
ld hl, poked_byte : ld (hl), 0
ld b, 1
ret
retBuff
ld a, 0
ld (poked_byte), a
ld a, (byte_buff)
ld a, 0 : ld (poked_byte), a : ld a, (byte_buff)
ld b, 1
ret

View File

@ -2,56 +2,45 @@ SCANDBLCTRL_REG = #0B
ZXUNO_ADDR = #FC3B
ZXUNO_REG = #FD3B
; This routine checks availability of extended(128K) memory.
; Output:
; Flag: Z - High memory available
checkHighMem:
xor a : call changeBank: ld hl, #c000 : xor a :ld (hl), a ; Let's write in zero page zero value
inc a : call changeBank : ld a, 13 : ld (hl), a ; In other page - any other value. Let's write luck 13
xor a : call changeBank : ld a, (hl) : and a ; When we back to zero page - still there zero?!
ret
; A - memory bank
changeBank:
ld bc, #7ffd
or #18
out (c), a
ld bc, #7ffd : or #18 : out (c), a
ret
setNoTurboMode:
push af
push bc
push af : push bc
ld a, SCANDBLCTRL_REG
ld bc, ZXUNO_ADDR
out (c), a
ld bc, ZXUNO_REG
in a, (c)
and #3f
out (c), a
ld a, SCANDBLCTRL_REG : ld bc, ZXUNO_ADDR : out (c), a
ld bc, ZXUNO_REG : in a, (c) : and #3f : out (c), a ; And #3F - keep scandoubler settings
pop bc
pop af
pop bc : pop af
ret
setTurbo4Mode:
push af
push bc
ld a, SCANDBLCTRL_REG
ld bc, ZXUNO_ADDR
out (c), a
push af : push bc
ld bc, ZXUNO_REG
in a, (c)
and #3f
or #80
out (c), a
ld a, SCANDBLCTRL_REG : ld bc, ZXUNO_ADDR : out (c), a
ld bc, ZXUNO_REG : in a, (c) : and #3f : or #80 : out (c), a
pop bc
pop af
pop bc : pop af
ret
; Pushes to UART zero-terminated string
; HL - string poiner
uartWriteStringZ:
ld a, (hl)
and a
ret z
push hl
call uartWriteByte
pop hl
ld a, (hl) : and a : ret z
push hl : call uartWriteByte : pop hl
inc hl
jp uartWriteStringZ
@ -59,54 +48,40 @@ uartWriteStringZ:
; HL - string pointer
putStringZ:
printZ64:
ld a,(hl)
and a
ret z
push hl
call putC
pop hl
ld a,(hl) : and a : ret z
push hl : call putC : pop hl
inc hl
jr printZ64
printT64:
ld b, 63
ptlp:
ld a, 0
or b
ret z
ld a, (hl)
ld a, 0 : or b : ret z
and a
ret z
ld a, (hl)
cp 09
ret z
and a : ret z
cp 09 : ret z
push bc
push hl
call putC
pop hl
inc hl
pop bc
dec b
push bc
push hl : call putC : pop hl
inc hl : pop bc : dec b
jr ptlp
printL64:
ld a, (hl)
and a
ret z
cp #0A
ret z
and a : ret z
cp #0A : ret z
cp #0D : ret z
cp #0D
ret z
push hl
call putC
pop hl
inc hl
push hl : call putC : pop hl
inc hl
jr printL64
; HL - string
@ -114,24 +89,24 @@ printL64:
getStringLength:
ld bc, 0
strLnLp
ld a, (hl)
and a
ret z
inc bc
ld a, (hl) : and a : ret z
inc bc
inc hl
jr strLnLp
SkipWhitespace:
ld a, (hl)
cp ' '
ret nz
inc hl
ld a, (hl)
cp ' ' : ret nz
inc hl
jr SkipWhitespace
findEnd:
ld a,(hl)
and a
ret z
and a : ret z
inc hl
jr findEnd

File diff suppressed because it is too large Load Diff

View File

@ -1,68 +1,39 @@
; Initialize WiFi chip and connect to WiFi
initWifi:
call setNoTurboMode
call loadWiFiConfig
call uartBegin
ld hl, cmd_plus
call uartWriteStringZ
call setNoTurboMode : call loadWiFiConfig : call uartBegin
ld hl, cmd_plus : call uartWriteStringZ
ld b,#ff
wlp:
push bc
ld b, #ff
djnz $
pop bc
djnz wlp
push bc : ld b, #ff : djnz $ : pop bc : djnz wlp
ld hl, cmd_rst
call uartWriteStringZ
ld hl, cmd_rst : call uartWriteStringZ
rstLp:
call uartReadBlocking
call pushRing
ld hl, response_rdy
call searchRing
cp 1
jr nz, rstLp
call uartReadBlocking : call pushRing
ld hl, cmd_at ; Disable ECHO. BTW Basic UART test
call okErrCmd
and 1
jr z, errInit
ld hl, response_rdy : call searchRing : cp 1 : jr nz, rstLp
; Disable ECHO. BTW Basic UART test
ld hl, cmd_at : call okErrCmd : and 1 : jr z, errInit
; Lets disconnect from last AP
ld hl, cmd_cwqap : call okErrCmd : and 1 : jr z, errInit
; Single connection mode
ld hl, cmd_cmux : call okErrCmd : and 1 : jr z, errInit
; FTP enables this info? We doesn't need it :-)
ld hl, cmd_inf_off : call okErrCmd : and 1 : jr z, errInit
; Access Point connection
ld hl, cmd_cwjap1 : call uartWriteStringZ : ld hl, ssid : call uartWriteStringZ : ld hl, cmd_cwjap2 : call uartWriteStringZ
ld hl, pass :call uartWriteStringZ : ld hl, cmd_cwjap3 : call okErrCmd
and 1 :jr z, errInit
ld hl, cmd_cwqap ; Lets disconnect from last AP
call okErrCmd
and 1
jr z, errInit
ld hl, cmd_cmux ; Single connection mode
call okErrCmd
and 1
jr z, errInit
ld hl, cmd_inf_off ; FTP enables this info? We doesn't need it :-)
call okErrCmd
and 1
jr z, errInit
ld hl, cmd_cwjap1 ; Access Point connection
call uartWriteStringZ
ld hl, ssid
call uartWriteStringZ
ld hl, cmd_cwjap2
call uartWriteStringZ
ld hl, pass
call uartWriteStringZ
ld hl, cmd_cwjap3
call okErrCmd
and 1
jr z, errInit
ld hl, log_ok
call putStringZ
ld hl, log_ok : call putStringZ
call setTurbo4Mode
ret
errInit
ld hl, log_err
call putStringZ
ld hl, log_err : call putStringZ
jr $
@ -74,25 +45,12 @@ errInit
okErrCmd:
call uartWriteStringZ
okErrCmdLp:
call uartReadBlocking
call pushRing
call uartReadBlocking : call pushRing
ld hl, response_ok
call searchRing
cp 1
jr z, okErrOk
ld hl, response_ok : call searchRing : cp 1 : jr z, okErrOk
ld hl, response_err : call searchRing : cp 1 : jr z, okErrErr
ld hl, response_fail : call searchRing : cp 1 : jr z, okErrErr
ld hl, response_err
call searchRing
cp 1
jr z, okErrErr
ld hl, response_fail
call searchRing
cp 1
jr z, okErrErr
jp okErrCmdLp
okErrOk
ld a, 1
@ -107,59 +65,34 @@ okErrErr
;
; If connection was closed it calls 'closed_callback'
getPacket
call uartReadBlocking
call pushRing
call uartReadBlocking : call pushRing
ld hl, closed
call searchRing
cp 1
jp z, closed_callback
ld hl, closed : call searchRing : cp 1 : jp z, closed_callback
ld hl, ipd : call searchRing : cp 1 : jr nz, getPacket
ld hl, ipd
call searchRing
cp 1
jr nz, getPacket
call count_ipd_lenght
ld (bytes_avail), hl
push hl
pop bc
ld hl, output_buffer
call count_ipd_lenght : ld (bytes_avail), hl
push hl : pop bc
ld hl, output_buffer
readp:
push bc
push hl
push bc : push hl
call uartReadBlocking
pop hl
ld (hl), a
ld (hl), a
pop bc
dec bc
inc hl
ld a, b
or c
jr nz, readp
ld hl, (bytes_avail)
dec bc : inc hl
ld a, b : or c : jr nz, readp
ld hl, (bytes_avail)
ret
count_ipd_lenght
ld hl,0 ; count lenght
cil1 push hl
call uartReadBlocking
push af
call pushRing
pop af
pop hl
cp ':'
ret z
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
cil1 push hl : call uartReadBlocking : push af : call pushRing : pop af : pop hl
cp ':' : ret z
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 cil1
; HL - z-string to hostname or ip
@ -167,36 +100,26 @@ cil1 push hl
startTcp:
push de
push hl
ld hl, cmd_open1
call uartWriteStringZ
pop hl
call uartWriteStringZ
ld hl, cmd_open2
call uartWriteStringZ
pop de
call uartWriteStringZ
ld hl, cmd_open3
call okErrCmd
ld hl, cmd_open1 : call uartWriteStringZ
pop hl : call uartWriteStringZ
ld hl, cmd_open2 : call uartWriteStringZ
pop de : call uartWriteStringZ
ld hl, cmd_open3 : call okErrCmd
ret
; Returns:
; A: 1 - Success
; 0 - Failed
sendByte:
push af
ld hl, cmd_send_b
call okErrCmd
cp 1
jr nz, sbErr
push af
ld hl, cmd_send_b : call okErrCmd
cp 1 : jr nz, sbErr
sbLp
call uartReadBlocking
ld hl, send_prompt
call searchRing
cp 1
jr nz, sbLp
call uartReadBlocking
ld hl, send_prompt : call searchRing : cp 1 : jr nz, sbLp
pop af
ld (sbyte_buff), a
call okErrCmd
ld (sbyte_buff), a : call okErrCmd
ret
sbErr:
pop af
@ -204,18 +127,11 @@ sbErr:
ret
loadWiFiConfig:
ld b, FMODE_READ
ld hl, conf_file
call fopen
push af
ld hl, ssid
ld bc, 160
call fread
pop af
ld b, FMODE_READ : ld hl, conf_file : call fopen
push af : ld hl, ssid : ld bc, 160 : call fread : pop af
call fclose
ret
cmd_plus defb "+++", 0
cmd_rst defb "AT+RST",13, 10, 0
cmd_at defb "ATE0", 13, 10, 0 ; Disable echo - less to parse