diff --git a/software/ugophy/Makefile b/software/ugophy/Makefile
index ff4f356..35a68ba 100644
--- a/software/ugophy/Makefile
+++ b/software/ugophy/Makefile
@@ -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:
diff --git a/software/ugophy/README.md b/software/ugophy/README.md
index 33293a9..a4cbf85 100644
--- a/software/ugophy/README.md
+++ b/software/ugophy/README.md
@@ -8,8 +8,6 @@ For running you need:
For development you need only sjasmplus.
-Sadly, but there no emulator with ZX-Uno's UART.
-
## Supported features
Current version supports:
@@ -17,9 +15,10 @@ Current version supports:
* Rendering gopher-pages(catalogs)
* Navigation between pages and servers
* Rendering plain-text pages
+ * Displaying zx-spectrum screens
+ * Playing PT3 and PT2 music(including TruboSound tracks)
* Downloading binary files to SD card
* Opening specified server(only by root path)
- * Screen dumps viewing
## Legals
diff --git a/software/ugophy/esxdos.asm b/software/ugophy/esxdos.asm
index b74d230..1ef7ac7 100644
--- a/software/ugophy/esxdos.asm
+++ b/software/ugophy/esxdos.asm
@@ -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
diff --git a/software/ugophy/gopher.asm b/software/ugophy/gopher.asm
index bb0928d..dd11e89 100644
--- a/software/ugophy/gopher.asm
+++ b/software/ugophy/gopher.asm
@@ -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
diff --git a/software/ugophy/keyboard.asm b/software/ugophy/keyboard.asm
index d9cb26a..cdcddd9 100644
--- a/software/ugophy/keyboard.asm
+++ b/software/ugophy/keyboard.asm
@@ -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
\ No newline at end of file
diff --git a/software/ugophy/main.asm b/software/ugophy/main.asm
index effdd9a..1ec0a68 100644
--- a/software/ugophy/main.asm
+++ b/software/ugophy/main.asm
@@ -1,36 +1,56 @@
+;; (c) 2019 Alexander Sharikhin
+;; This program is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see .
+
DEVICE ZXSPECTRUM128
org 24100
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 +63,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 +75,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
\ No newline at end of file
diff --git a/software/ugophy/render.asm b/software/ugophy/render.asm
index 9a594f2..d1afbb3 100644
--- a/software/ugophy/render.asm
+++ b/software/ugophy/render.asm
@@ -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 to stop!", 0
diff --git a/software/ugophy/ring.asm b/software/ugophy/ring.asm
index c989326..e420b5d 100644
--- a/software/ugophy/ring.asm
+++ b/software/ugophy/ring.asm
@@ -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
diff --git a/software/ugophy/textrender.asm b/software/ugophy/textrender.asm
index 80ba77a..616ca53 100644
--- a/software/ugophy/textrender.asm
+++ b/software/ugophy/textrender.asm
@@ -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
diff --git a/software/ugophy/uart.asm b/software/ugophy/uart.asm
index abdc792..7b4ccf2 100644
--- a/software/ugophy/uart.asm
+++ b/software/ugophy/uart.asm
@@ -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
diff --git a/software/ugophy/utils.asm b/software/ugophy/utils.asm
index cb14b85..2055871 100644
--- a/software/ugophy/utils.asm
+++ b/software/ugophy/utils.asm
@@ -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
diff --git a/software/ugophy/vtpl.asm b/software/ugophy/vtpl.asm
index 1b1934c..13927b0 100644
--- a/software/ugophy/vtpl.asm
+++ b/software/ugophy/vtpl.asm
@@ -1,1555 +1,1680 @@
-;Universal PT2 and PT3 player for ZX Spectrum and MSX
-;(c)2004-2007 S.V.Bulba
-;http://bulba.untergrund.net (http://bulba.at.kz)
-
-;Release number
-Release EQU "1"
- DEVICE ZXSPECTRUM48
-
-;Conditional assembly
-;1) Version of ROUT (ZX or MSX standards)
-ZX=1
-MSX=0
-;2) Current position counter at (START+11)
-CurPosCounter=0
-;3) Allow channels allocation bits at (START+10)
-ACBBAC=0
-;4) Allow loop checking and disabling
-LoopChecker=0
-;5) Insert official identificator
-Id=0
-
-;Features
-;--------
-;-Can be compiled at any address (i.e. no need rounding ORG
-; address).
-;-Variables (VARS) can be located at any address (not only after
-;code block).
-;-INIT subprogram checks PT3-module version and rightly
-; generates both note and volume tables outside of code block
-; (in VARS).
-;-Two portamento (spc. command 3xxx) algorithms (depending of
-; PT3 module version).
-;-New 1.XX and 2.XX special command behaviour (only for PT v3.7
-; and higher).
-;-Any Tempo value are accepted (including Tempo=1 and Tempo=2).
-;-Fully compatible with Ay_Emul PT3 and PT2 players codes.
-;-See also notes at the end of this source code.
-
-;Limitations
-;-----------
-;-Can run in RAM only (self-modified code is used).
-;-PT2 position list must be end by #FF marker only.
-
-;Warning!!! PLAY subprogram can crash if no module are loaded
-;into RAM or INIT subprogram was not called before.
-
-;Call MUTE or INIT one more time to mute sound after stopping
-;playing
-
- ORG #4000
-
-;Test codes (commented)
-; LD A,2 ;PT2,ABC,Looped
-; LD (START+10),A
-; CALL START
-; EI
-;_LP HALT
-; CALL START+5
-; XOR A
-; IN A,(#FE)
-; CPL
-; AND 15
-; JR Z,_LP
-; JR START+8
-
-TonA EQU 0
-TonB EQU 2
-TonC EQU 4
-Noise EQU 6
-Mixer EQU 7
-AmplA EQU 8
-AmplB EQU 9
-AmplC EQU 10
-Env EQU 11
-EnvTp EQU 13
-
-;Entry and other points
-;START initialize playing of module at MDLADDR
-;START+3 initialization with module address in HL
-;START+5 play one quark
-;START+8 mute
-;START+10 setup and status flags
-;START+11 current position value (byte) (optional)
-
-START
- LD HL,MDLADDR
- JR INIT
- JP PLAY
- JR MUTE
-SETUP DB 0 ;set bit0, if you want to play without looping
- ;(optional);
- ;set bit1 for PT2 and reset for PT3 before
- ;calling INIT;
- ;bits2-3: %00-ABC, %01 ACB, %10 BAC (optional);
- ;bits4-6 are not used
- ;bit7 is set each time, when loop point is passed
- ;(optional)
- IF CurPosCounter
-CurPos DB 0 ;for visualization only (i.e. no need for playing)
- ENDIF
-
-;Identifier
- IF Id
- DB "=Uni PT2 and PT3 Player r.",Release,"="
- ENDIF
-
- IF LoopChecker
-CHECKLP LD HL,SETUP
- SET 7,(HL)
- BIT 0,(HL)
- RET Z
- POP HL
- LD HL,DelyCnt
- INC (HL)
- LD HL,ChanA+CHP.NtSkCn
- INC (HL)
- ENDIF
-
-MUTE XOR A
- LD H,A
- LD L,A
- LD (AYREGS+AmplA),A
- LD (AYREGS+AmplB),HL
- JP ROUT
-
-INIT
-;HL - AddressOfModule
- LD A,(START+10)
- AND 2
- JR NZ,INITPT2
-
- CALL SETMDAD
- PUSH HL
- LD DE,100
- ADD HL,DE
- LD A,(HL)
- LD (Delay),A
- PUSH HL
- POP IX
- ADD HL,DE
- LD (CrPsPtr),HL
- LD E,(IX+102-100)
- INC HL
-
- IF CurPosCounter
- LD A,L
- LD (PosSub+1),A
- ENDIF
-
- ADD HL,DE
- LD (LPosPtr),HL
- POP DE
- LD L,(IX+103-100)
- LD H,(IX+104-100)
- ADD HL,DE
- LD (PatsPtr),HL
- LD HL,169
- ADD HL,DE
- LD (OrnPtrs),HL
- LD HL,105
- ADD HL,DE
- LD (SamPtrs),HL
- LD A,(IX+13-100) ;EXTRACT VERSION NUMBER
- SUB #30
- JR C,L20
- CP 10
- JR C,L21
-L20 LD A,6
-L21 LD (Version),A
- PUSH AF ;VolTable version
- CP 4
- LD A,(IX+99-100) ;TONE TABLE NUMBER
- RLA
- AND 7
- PUSH AF ;NoteTable number
- LD HL,(e_-SamCnv-2)*256+#18
- LD (SamCnv),HL
- LD A,#BA
- LD (OrnCP),A
- LD (SamCP),A
- LD A,#7B
- LD (OrnLD),A
- LD (SamLD),A
- LD A,#87
- LD (SamClc2),A
- LD BC,PT3PD
- LD HL,0
- LD DE,PT3EMPTYORN
- JR INITCOMMON
-
-INITPT2 LD A,(HL)
- LD (Delay),A
- PUSH HL
- PUSH HL
- PUSH HL
- INC HL
- INC HL
- LD A,(HL)
- INC HL
- LD (SamPtrs),HL
- LD E,(HL)
- INC HL
- LD D,(HL)
- POP HL
- AND A
- SBC HL,DE
- CALL SETMDAD
- POP HL
- LD DE,67
- ADD HL,DE
- LD (OrnPtrs),HL
- LD E,32
- ADD HL,DE
- LD C,(HL)
- INC HL
- LD B,(HL)
- LD E,30
- ADD HL,DE
- LD (CrPsPtr),HL
- LD E,A
- INC HL
-
- IF CurPosCounter
- LD A,L
- LD (PosSub+1),A
- ENDIF
-
- ADD HL,DE
- LD (LPosPtr),HL
- POP HL
- ADD HL,BC
- LD (PatsPtr),HL
- LD A,5
- LD (Version),A
- PUSH AF
- LD A,2
- PUSH AF
- LD HL,#51CB
- LD (SamCnv),HL
- LD A,#BB
- LD (OrnCP),A
- LD (SamCP),A
- LD A,#7A
- LD (OrnLD),A
- LD (SamLD),A
- LD A,#80
- LD (SamClc2),A
- LD BC,PT2PD
- LD HL,#8687
- LD DE,PT2EMPTYORN
-
-INITCOMMON
-
- LD (PTDECOD+1),BC
- LD (PsCalc),HL
- PUSH DE
-
-;note table data depacker
-;(c) Ivan Roshin
- LD DE,T_PACK
- LD BC,T1_+(2*49)-1
-TP_0 LD A,(DE)
- INC DE
- CP 15*2
- JR NC,TP_1
- LD H,A
- LD A,(DE)
- LD L,A
- INC DE
- JR TP_2
-TP_1 PUSH DE
- LD D,0
- LD E,A
- ADD HL,DE
- ADD HL,DE
- POP DE
-TP_2 LD A,H
- LD (BC),A
- DEC BC
- LD A,L
- LD (BC),A
- DEC BC
- SUB #F8*2
- JR NZ,TP_0
-
- IF LoopChecker
- LD HL,SETUP
- RES 7,(HL)
-
- IF CurPosCounter
- INC HL
- LD (HL),A
- ENDIF
-
- ELSE
-
- IF CurPosCounter
- LD (CurPos),A
- ENDIF
-
- ENDIF
-
- LD HL,VARS
- LD (HL),A
- LD DE,VARS+1
- LD BC,VAR0END-VARS-1
- LDIR
- LD (AdInPtA),HL ;ptr to zero
- INC A
- LD (DelyCnt),A
- LD HL,#F001 ;H - CHP.Volume, L - CHP.NtSkCn
- LD (ChanA+CHP.NtSkCn),HL
- LD (ChanB+CHP.NtSkCn),HL
- LD (ChanC+CHP.NtSkCn),HL
- POP HL
- LD (ChanA+CHP.OrnPtr),HL
- LD (ChanB+CHP.OrnPtr),HL
- LD (ChanC+CHP.OrnPtr),HL
-
- POP AF
-
-;NoteTableCreator (c) Ivan Roshin
-;A - NoteTableNumber*2+VersionForNoteTable
-;(xx1b - 3.xx..3.4r, xx0b - 3.4x..3.6x..VTII1.0)
-
- LD HL,NT_DATA
- PUSH DE
- LD D,B
- ADD A,A
- LD E,A
- ADD HL,DE
- LD E,(HL)
- INC HL
- SRL E
- SBC A,A
- AND #A7 ;#00 (NOP) or #A7 (AND A)
- LD (L3),A
- EX DE,HL
- POP BC ;BC=T1_
- ADD HL,BC
-
- LD A,(DE)
- ADD A,T_
- LD C,A
- ADC A,T_/256
- SUB C
- LD B,A
- PUSH BC
- LD DE,NT_
- PUSH DE
-
- LD B,12
-L1 PUSH BC
- LD C,(HL)
- INC HL
- PUSH HL
- LD B,(HL)
-
- PUSH DE
- EX DE,HL
- LD DE,23
- LD IXH,8
-
-L2 SRL B
- RR C
-L3 DB #19 ;AND A or NOP
- LD A,C
- ADC A,D ;=ADC 0
- LD (HL),A
- INC HL
- LD A,B
- ADC A,D
- LD (HL),A
- ADD HL,DE
- DEC IXH
- JR NZ,L2
-
- POP DE
- INC DE
- INC DE
- POP HL
- INC HL
- POP BC
- DJNZ L1
-
- POP HL
- POP DE
-
- LD A,E
- CP TCOLD_1
- JR NZ,CORR_1
- LD A,#FD
- LD (NT_+#2E),A
-
-CORR_1 LD A,(DE)
- AND A
- JR Z,TC_EXIT
- RRA
- PUSH AF
- ADD A,A
- LD C,A
- ADD HL,BC
- POP AF
- JR NC,CORR_2
- DEC (HL)
- DEC (HL)
-CORR_2 INC (HL)
- AND A
- SBC HL,BC
- INC DE
- JR CORR_1
-
-TC_EXIT
-
- POP AF
-
-;VolTableCreator (c) Ivan Roshin
-;A - VersionForVolumeTable (0..4 - 3.xx..3.4x;
- ;5.. - 2.x,3.5x..3.6x..VTII1.0)
-
- CP 5
- LD HL,#11
- LD D,H
- LD E,H
- LD A,#17
- JR NC,M1
- DEC L
- LD E,L
- XOR A
-M1 LD (M2),A
-
- LD IX,VT_+16
-
- LD C,#F
-INITV2 PUSH HL
-
- ADD HL,DE
- EX DE,HL
- SBC HL,HL
-
- LD B,#10
-INITV1 LD A,L
-M2 DB #7D
- LD A,H
- ADC A,0
- LD (IX),A
- INC IX
- ADD HL,DE
- DJNZ INITV1
-
- POP HL
- LD A,E
- CP #77
- JR NZ,M3
- INC E
-M3 DEC C
- JR NZ,INITV2
-
- JP ROUT
-
-SETMDAD LD (MODADDR),HL
- LD (MDADDR1),HL
- LD (MDADDR2),HL
- RET
-
-PTDECOD JP #C3C3
-
-;PT2 pattern decoder
-PD2_SAM CALL SETSAM
- JR PD2_LOOP
-
-PD2_EOff LD (IX-12+CHP.Env_En),A
- JR PD2_LOOP
-
-PD2_ENV LD (IX-12+CHP.Env_En),16
- LD (AYREGS+EnvTp),A
- LD A,(BC)
- INC BC
- LD L,A
- LD A,(BC)
- INC BC
- LD H,A
- LD (EnvBase),HL
- JR PD2_LOOP
-
-PD2_ORN CALL SETORN
- JR PD2_LOOP
-
-PD2_SKIP INC A
- LD (IX-12+CHP.NNtSkp),A
- JR PD2_LOOP
-
-PD2_VOL RRCA
- RRCA
- RRCA
- RRCA
- LD (IX-12+CHP.Volume),A
- JR PD2_LOOP
-
-PD2_DEL CALL C_DELAY
- JR PD2_LOOP
-
-PD2_GLIS SET 2,(IX-12+CHP.Flags)
- INC A
- LD (IX-12+CHP.TnSlDl),A
- LD (IX-12+CHP.TSlCnt),A
- LD A,(BC)
- INC BC
- LD (IX-12+CHP.TSlStp),A
- ADD A,A
- SBC A,A
- LD (IX-12+CHP.TSlStp+1),A
- SCF
- JR PD2_LP2
-
-PT2PD AND A
-
-PD2_LP2 EX AF,AF'
-
-PD2_LOOP LD A,(BC)
- INC BC
- ADD A,#20
- JR Z,PD2_REL
- JR C,PD2_SAM
- ADD A,96
- JR C,PD2_NOTE
- INC A
- JR Z,PD2_EOff
- ADD A,15
- JP Z,PD_FIN
- JR C,PD2_ENV
- ADD A,#10
- JR C,PD2_ORN
- ADD A,#40
- JR C,PD2_SKIP
- ADD A,#10
- JR C,PD2_VOL
- INC A
- JR Z,PD2_DEL
- INC A
- JR Z,PD2_GLIS
- INC A
- JR Z,PD2_PORT
- INC A
- JR Z,PD2_STOP
- LD A,(BC)
- INC BC
- LD (IX-12+CHP.CrNsSl),A
- JR PD2_LOOP
-
-PD2_PORT RES 2,(IX-12+CHP.Flags)
- LD A,(BC)
- INC BC
- INC BC ;ignoring precalc delta to right sound
- INC BC
- SCF
- JR PD2_LP2
-
-PD2_STOP LD (IX-12+CHP.TSlCnt),A
- JR PD2_LOOP
-
-PD2_REL LD (IX-12+CHP.Flags),A
- JR PD2_EXIT
-
-PD2_NOTE LD L,A
- LD A,(IX-12+CHP.Note)
- LD (PrNote+1),A
- LD (IX-12+CHP.Note),L
- XOR A
- LD (IX-12+CHP.TSlCnt),A
- SET 0,(IX-12+CHP.Flags)
- EX AF,AF'
- JR NC,NOGLIS2
- BIT 2,(IX-12+CHP.Flags)
- JR NZ,NOPORT2
- LD (LoStep),A
- ADD A,A
- SBC A,A
- EX AF,AF'
- LD H,A
- LD L,A
- INC A
- CALL SETPORT
-NOPORT2 LD (IX-12+CHP.TSlCnt),1
-NOGLIS2 XOR A
-
-
-PD2_EXIT LD (IX-12+CHP.PsInSm),A
- LD (IX-12+CHP.PsInOr),A
- LD (IX-12+CHP.CrTnSl),A
- LD (IX-12+CHP.CrTnSl+1),A
- JP PD_FIN
-
-;PT3 pattern decoder
-PD_OrSm LD (IX-12+CHP.Env_En),0
- CALL SETORN
-PD_SAM_ LD A,(BC)
- INC BC
- RRCA
-
-PD_SAM CALL SETSAM
- JR PD_LOOP
-
-PD_VOL RRCA
- RRCA
- RRCA
- RRCA
- LD (IX-12+CHP.Volume),A
- JR PD_LP2
-
-PD_EOff LD (IX-12+CHP.Env_En),A
- LD (IX-12+CHP.PsInOr),A
- JR PD_LP2
-
-PD_SorE DEC A
- JR NZ,PD_ENV
- LD A,(BC)
- INC BC
- LD (IX-12+CHP.NNtSkp),A
- JR PD_LP2
-
-PD_ENV CALL SETENV
- JR PD_LP2
-
-PD_ORN CALL SETORN
- JR PD_LOOP
-
-PD_ESAM LD (IX-12+CHP.Env_En),A
- LD (IX-12+CHP.PsInOr),A
- CALL NZ,SETENV
- JR PD_SAM_
-
-PT3PD LD A,(IX-12+CHP.Note)
- LD (PrNote+1),A
- LD L,(IX-12+CHP.CrTnSl)
- LD H,(IX-12+CHP.CrTnSl+1)
- LD (PrSlide+1),HL
-
-PD_LOOP LD DE,#2010
-PD_LP2 LD A,(BC)
- INC BC
- ADD A,E
- JR C,PD_OrSm
- ADD A,D
- JR Z,PD_FIN
- JR C,PD_SAM
- ADD A,E
- JR Z,PD_REL
- JR C,PD_VOL
- ADD A,E
- JR Z,PD_EOff
- JR C,PD_SorE
- ADD A,96
- JR C,PD_NOTE
- ADD A,E
- JR C,PD_ORN
- ADD A,D
- JR C,PD_NOIS
- ADD A,E
- JR C,PD_ESAM
- ADD A,A
- LD E,A
- LD HL,SPCCOMS+#FF20-#2000
- ADD HL,DE
- LD E,(HL)
- INC HL
- LD D,(HL)
- PUSH DE
- JR PD_LOOP
-
-PD_NOIS LD (Ns_Base),A
- JR PD_LP2
-
-PD_REL RES 0,(IX-12+CHP.Flags)
- JR PD_RES
-
-PD_NOTE LD (IX-12+CHP.Note),A
- SET 0,(IX-12+CHP.Flags)
- XOR A
-
-PD_RES LD (PDSP_+1),SP
- LD SP,IX
- LD H,A
- LD L,A
- PUSH HL
- PUSH HL
- PUSH HL
- PUSH HL
- PUSH HL
- PUSH HL
-PDSP_ LD SP,#3131
-
-PD_FIN LD A,(IX-12+CHP.NNtSkp)
- LD (IX-12+CHP.NtSkCn),A
- RET
-
-C_PORTM LD A,(BC)
- INC BC
-;SKIP PRECALCULATED TONE DELTA (BECAUSE
-;CANNOT BE RIGHT AFTER PT3 COMPILATION)
- INC BC
- INC BC
- EX AF,AF'
- LD A,(BC) ;SIGNED TONE STEP
- INC BC
- LD (LoStep),A
- LD A,(BC)
- INC BC
- AND A
- EX AF,AF'
- LD L,(IX-12+CHP.CrTnSl)
- LD H,(IX-12+CHP.CrTnSl+1)
-
-;Set portamento variables
-;A - Delay; A' - Hi(Step); ZF' - (A'=0); HL - CrTnSl
-
-SETPORT RES 2,(IX-12+CHP.Flags)
- LD (IX-12+CHP.TnSlDl),A
- LD (IX-12+CHP.TSlCnt),A
- PUSH HL
- LD DE,NT_
- LD A,(IX-12+CHP.Note)
- LD (IX-12+CHP.SlToNt),A
- ADD A,A
- LD L,A
- LD H,0
- ADD HL,DE
- LD A,(HL)
- INC HL
- LD H,(HL)
- LD L,A
- PUSH HL
-PrNote LD A,#3E
- LD (IX-12+CHP.Note),A
- ADD A,A
- LD L,A
- LD H,0
- ADD HL,DE
- LD E,(HL)
- INC HL
- LD D,(HL)
- POP HL
- SBC HL,DE
- LD (IX-12+CHP.TnDelt),L
- LD (IX-12+CHP.TnDelt+1),H
- POP DE
-Version EQU $+1
- LD A,#3E
- CP 6
- JR C,OLDPRTM ;Old 3xxx for PT v3.5-
-PrSlide LD DE,#1111
- LD (IX-12+CHP.CrTnSl),E
- LD (IX-12+CHP.CrTnSl+1),D
-LoStep EQU $+1
-OLDPRTM LD A,#3E
- EX AF,AF'
- JR Z,NOSIG
- EX DE,HL
-NOSIG SBC HL,DE
- JP P,SET_STP
- CPL
- EX AF,AF'
- NEG
- EX AF,AF'
-SET_STP LD (IX-12+CHP.TSlStp+1),A
- EX AF,AF'
- LD (IX-12+CHP.TSlStp),A
- LD (IX-12+CHP.COnOff),0
- RET
-
-C_GLISS SET 2,(IX-12+CHP.Flags)
- LD A,(BC)
- INC BC
- LD (IX-12+CHP.TnSlDl),A
- AND A
- JR NZ,GL36
- LD A,(Version) ;AlCo PT3.7+
- CP 7
- SBC A,A
- INC A
-GL36 LD (IX-12+CHP.TSlCnt),A
- LD A,(BC)
- INC BC
- EX AF,AF'
- LD A,(BC)
- INC BC
- JR SET_STP
-
-C_SMPOS LD A,(BC)
- INC BC
- LD (IX-12+CHP.PsInSm),A
- RET
-
-C_ORPOS LD A,(BC)
- INC BC
- LD (IX-12+CHP.PsInOr),A
- RET
-
-C_VIBRT LD A,(BC)
- INC BC
- LD (IX-12+CHP.OnOffD),A
- LD (IX-12+CHP.COnOff),A
- LD A,(BC)
- INC BC
- LD (IX-12+CHP.OffOnD),A
- XOR A
- LD (IX-12+CHP.TSlCnt),A
- LD (IX-12+CHP.CrTnSl),A
- LD (IX-12+CHP.CrTnSl+1),A
- RET
-
-C_ENGLS LD A,(BC)
- INC BC
- LD (Env_Del),A
- LD (CurEDel),A
- LD A,(BC)
- INC BC
- LD L,A
- LD A,(BC)
- INC BC
- LD H,A
- LD (ESldAdd),HL
- RET
-
-C_DELAY LD A,(BC)
- INC BC
- LD (Delay),A
- RET
-
-SETENV LD (IX-12+CHP.Env_En),E
- LD (AYREGS+EnvTp),A
- LD A,(BC)
- INC BC
- LD H,A
- LD A,(BC)
- INC BC
- LD L,A
- LD (EnvBase),HL
- XOR A
- LD (IX-12+CHP.PsInOr),A
- LD (CurEDel),A
- LD H,A
- LD L,A
- LD (CurESld),HL
-C_NOP RET
-
-SETORN ADD A,A
- LD E,A
- LD D,0
- LD (IX-12+CHP.PsInOr),D
-OrnPtrs EQU $+1
- LD HL,#2121
- ADD HL,DE
- LD E,(HL)
- INC HL
- LD D,(HL)
-MDADDR2 EQU $+1
- LD HL,#2121
- ADD HL,DE
- LD (IX-12+CHP.OrnPtr),L
- LD (IX-12+CHP.OrnPtr+1),H
- RET
-
-SETSAM ADD A,A
- LD E,A
- LD D,0
-SamPtrs EQU $+1
- LD HL,#2121
- ADD HL,DE
- LD E,(HL)
- INC HL
- LD D,(HL)
-MDADDR1 EQU $+1
- LD HL,#2121
- ADD HL,DE
- LD (IX-12+CHP.SamPtr),L
- LD (IX-12+CHP.SamPtr+1),H
- RET
-
-;ALL 16 ADDRESSES TO PROTECT FROM BROKEN PT3 MODULES
-SPCCOMS DW C_NOP
- DW C_GLISS
- DW C_PORTM
- DW C_SMPOS
- DW C_ORPOS
- DW C_VIBRT
- DW C_NOP
- DW C_NOP
- DW C_ENGLS
- DW C_DELAY
- DW C_NOP
- DW C_NOP
- DW C_NOP
- DW C_NOP
- DW C_NOP
- DW C_NOP
-
-CHREGS XOR A
- LD (Ampl),A
- BIT 0,(IX+CHP.Flags)
- PUSH HL
- JP Z,CH_EXIT
- LD (CSP_+1),SP
- LD L,(IX+CHP.OrnPtr)
- LD H,(IX+CHP.OrnPtr+1)
- LD SP,HL
- POP DE
- LD H,A
- LD A,(IX+CHP.PsInOr)
- LD L,A
- ADD HL,SP
- INC A
- ;PT2 PT3
-OrnCP INC A ;CP E CP D
- JR C,CH_ORPS
-OrnLD DB 1 ;LD A,D LD A,E
-CH_ORPS LD (IX+CHP.PsInOr),A
- LD A,(IX+CHP.Note)
- ADD A,(HL)
- JP P,CH_NTP
- XOR A
-CH_NTP CP 96
- JR C,CH_NOK
- LD A,95
-CH_NOK ADD A,A
- EX AF,AF'
- LD L,(IX+CHP.SamPtr)
- LD H,(IX+CHP.SamPtr+1)
- LD SP,HL
- POP DE
- LD H,0
- LD A,(IX+CHP.PsInSm)
- LD B,A
- ADD A,A
-SamClc2 ADD A,A ;or ADD A,B for PT2
- LD L,A
- ADD HL,SP
- LD SP,HL
- LD A,B
- INC A
- ;PT2 PT3
-SamCP INC A ;CP E CP D
- JR C,CH_SMPS
-SamLD DB 1 ;LD A,D LD A,E
-CH_SMPS LD (IX+CHP.PsInSm),A
- POP BC
- POP HL
-
-;Convert PT2 sample to PT3
- ;PT2 PT3
-SamCnv POP HL ;BIT 2,C JR e_
- POP HL
- LD H,B
- JR NZ,$+8
- EX DE,HL
- AND A
- SBC HL,HL
- SBC HL,DE
- LD D,C
- RR C
- SBC A,A
- CPL
- AND #3E
- RR C
- RR B
- AND C
- LD C,A
- LD A,B
- RRA
- RRA
- RR D
- RRA
- AND #9F
- LD B,A
-
-e_ LD E,(IX+CHP.TnAcc)
- LD D,(IX+CHP.TnAcc+1)
- ADD HL,DE
- BIT 6,B
- JR Z,CH_NOAC
- LD (IX+CHP.TnAcc),L
- LD (IX+CHP.TnAcc+1),H
-CH_NOAC EX DE,HL
- EX AF,AF'
- ADD A,NT_
- LD L,A
- ADC A,NT_/256
- SUB L
- LD H,A
- LD SP,HL
- POP HL
- ADD HL,DE
- LD E,(IX+CHP.CrTnSl)
- LD D,(IX+CHP.CrTnSl+1)
- ADD HL,DE
-CSP_ LD SP,#3131
- EX (SP),HL
- XOR A
- OR (IX+CHP.TSlCnt)
- JR Z,CH_AMP
- DEC (IX+CHP.TSlCnt)
- JR NZ,CH_AMP
- LD A,(IX+CHP.TnSlDl)
- LD (IX+CHP.TSlCnt),A
- LD L,(IX+CHP.TSlStp)
- LD H,(IX+CHP.TSlStp+1)
- LD A,H
- ADD HL,DE
- LD (IX+CHP.CrTnSl),L
- LD (IX+CHP.CrTnSl+1),H
- BIT 2,(IX+CHP.Flags)
- JR NZ,CH_AMP
- LD E,(IX+CHP.TnDelt)
- LD D,(IX+CHP.TnDelt+1)
- AND A
- JR Z,CH_STPP
- EX DE,HL
-CH_STPP SBC HL,DE
- JP M,CH_AMP
- LD A,(IX+CHP.SlToNt)
- LD (IX+CHP.Note),A
- XOR A
- LD (IX+CHP.TSlCnt),A
- LD (IX+CHP.CrTnSl),A
- LD (IX+CHP.CrTnSl+1),A
-CH_AMP LD A,(IX+CHP.CrAmSl)
- BIT 7,C
- JR Z,CH_NOAM
- BIT 6,C
- JR Z,CH_AMIN
- CP 15
- JR Z,CH_NOAM
- INC A
- JR CH_SVAM
-CH_AMIN CP -15
- JR Z,CH_NOAM
- DEC A
-CH_SVAM LD (IX+CHP.CrAmSl),A
-CH_NOAM LD L,A
- LD A,B
- AND 15
- ADD A,L
- JP P,CH_APOS
- XOR A
-CH_APOS CP 16
- JR C,CH_VOL
- LD A,15
-CH_VOL OR (IX+CHP.Volume)
- ADD A,VT_
- LD L,A
- ADC A,VT_/256
- SUB L
- LD H,A
- LD A,(HL)
-CH_ENV BIT 0,C
- JR NZ,CH_NOEN
- OR (IX+CHP.Env_En)
-CH_NOEN LD (Ampl),A
- BIT 7,B
- LD A,C
- JR Z,NO_ENSL
- RLA
- RLA
- SRA A
- SRA A
- SRA A
- ADD A,(IX+CHP.CrEnSl) ;SEE COMMENT BELOW
- BIT 5,B
- JR Z,NO_ENAC
- LD (IX+CHP.CrEnSl),A
-NO_ENAC LD HL,AddToEn
- ADD A,(HL) ;BUG IN PT3 - NEED WORD HERE
- LD (HL),A
- JR CH_MIX
-NO_ENSL RRA
- ADD A,(IX+CHP.CrNsSl)
- LD (AddToNs),A
- BIT 5,B
- JR Z,CH_MIX
- LD (IX+CHP.CrNsSl),A
-CH_MIX LD A,B
- RRA
- AND #48
-CH_EXIT LD HL,AYREGS+Mixer
- OR (HL)
- RRCA
- LD (HL),A
- POP HL
- XOR A
- OR (IX+CHP.COnOff)
- RET Z
- DEC (IX+CHP.COnOff)
- RET NZ
- XOR (IX+CHP.Flags)
- LD (IX+CHP.Flags),A
- RRA
- LD A,(IX+CHP.OnOffD)
- JR C,CH_ONDL
- LD A,(IX+CHP.OffOnD)
-CH_ONDL LD (IX+CHP.COnOff),A
- RET
-
-PLAY XOR A
- LD (AddToEn),A
- LD (AYREGS+Mixer),A
- DEC A
- LD (AYREGS+EnvTp),A
- LD HL,DelyCnt
- DEC (HL)
- JP NZ,PL2
- LD HL,ChanA+CHP.NtSkCn
- DEC (HL)
- JR NZ,PL1B
-AdInPtA EQU $+1
- LD BC,#0101
- LD A,(BC)
- AND A
- JR NZ,PL1A
- LD D,A
- LD (Ns_Base),A
-CrPsPtr EQU $+1
- LD HL,#2121
- INC HL
- LD A,(HL)
- INC A
- JR NZ,PLNLP
-
- IF LoopChecker
- CALL CHECKLP
- ENDIF
-
-LPosPtr EQU $+1
- LD HL,#2121
- LD A,(HL)
- INC A
-PLNLP LD (CrPsPtr),HL
- DEC A
- ;PT2 PT3
-PsCalc DEC A ;ADD A,A NOP
- DEC A ;ADD A,(HL) NOP
- ADD A,A
- LD E,A
- RL D
-
- IF CurPosCounter
- LD A,L
-PosSub SUB #D6
- LD (CurPos),A
- ENDIF
-
-PatsPtr EQU $+1
- LD HL,#2121
- ADD HL,DE
-MODADDR EQU $+1
- LD DE,#1111
- LD (PSP_+1),SP
- LD SP,HL
- POP HL
- ADD HL,DE
- LD B,H
- LD C,L
- POP HL
- ADD HL,DE
- LD (AdInPtB),HL
- POP HL
- ADD HL,DE
- LD (AdInPtC),HL
-PSP_ LD SP,#3131
-PL1A LD IX,ChanA+12
- CALL PTDECOD
- LD (AdInPtA),BC
-
-PL1B LD HL,ChanB+CHP.NtSkCn
- DEC (HL)
- JR NZ,PL1C
- LD IX,ChanB+12
-AdInPtB EQU $+1
- LD BC,#0101
- CALL PTDECOD
- LD (AdInPtB),BC
-
-PL1C LD HL,ChanC+CHP.NtSkCn
- DEC (HL)
- JR NZ,PL1D
- LD IX,ChanC+12
-AdInPtC EQU $+1
- LD BC,#0101
- CALL PTDECOD
- LD (AdInPtC),BC
-
-Delay EQU $+1
-PL1D LD A,#3E
- LD (DelyCnt),A
-
-PL2 LD IX,ChanA
- LD HL,(AYREGS+TonA)
- CALL CHREGS
- LD (AYREGS+TonA),HL
- LD A,(Ampl)
- LD (AYREGS+AmplA),A
- LD IX,ChanB
- LD HL,(AYREGS+TonB)
- CALL CHREGS
- LD (AYREGS+TonB),HL
- LD A,(Ampl)
- LD (AYREGS+AmplB),A
- LD IX,ChanC
- LD HL,(AYREGS+TonC)
- CALL CHREGS
- LD (AYREGS+TonC),HL
-
- LD HL,(Ns_Base_AddToNs)
- LD A,H
- ADD A,L
- LD (AYREGS+Noise),A
-
-AddToEn EQU $+1
- LD A,#3E
- LD E,A
- ADD A,A
- SBC A,A
- LD D,A
- LD HL,(EnvBase)
- ADD HL,DE
- LD DE,(CurESld)
- ADD HL,DE
- LD (AYREGS+Env),HL
-
- XOR A
- LD HL,CurEDel
- OR (HL)
- JR Z,ROUT
- DEC (HL)
- JR NZ,ROUT
-Env_Del EQU $+1
- LD A,#3E
- LD (HL),A
-ESldAdd EQU $+1
- LD HL,#2121
- ADD HL,DE
- LD (CurESld),HL
-
-ROUT
- IF ACBBAC
- LD A,(SETUP)
- AND 12
- JR Z,ABC
- ADD A,CHTABLE
- LD E,A
- ADC A,CHTABLE/256
- SUB E
- LD D,A
- LD B,0
- LD IX,AYREGS
- LD HL,AYREGS
- LD A,(DE)
- INC DE
- LD C,A
- ADD HL,BC
- LD A,(IX+TonB)
- LD C,(HL)
- LD (IX+TonB),C
- LD (HL),A
- INC HL
- LD A,(IX+TonB+1)
- LD C,(HL)
- LD (IX+TonB+1),C
- LD (HL),A
- LD A,(DE)
- INC DE
- LD C,A
- ADD HL,BC
- LD A,(IX+AmplB)
- LD C,(HL)
- LD (IX+AmplB),C
- LD (HL),A
- LD A,(DE)
- INC DE
- LD (RxCA1),A
- XOR 8
- LD (RxCA2),A
- LD HL,AYREGS+Mixer
- LD A,(DE)
- AND (HL)
- LD E,A
- LD A,(HL)
-RxCA1 LD A,(HL)
- AND %010010
- OR E
- LD E,A
- LD A,(HL)
- AND %010010
-RxCA2 OR E
- OR E
- LD (HL),A
-ABC
- ENDIF
-
- IF ZX
- XOR A
- LD DE,#FFBF
- LD BC,#FFFD
- LD HL,AYREGS
-LOUT OUT (C),A
- LD B,E
- OUTI
- LD B,D
- INC A
- CP 13
- JR NZ,LOUT
- OUT (C),A
- LD A,(HL)
- AND A
- RET M
- LD B,E
- OUT (C),A
- RET
- ENDIF
-
- IF MSX
-;MSX version of ROUT (c)Dioniso
- XOR A
- LD C,#A0
- LD HL,AYREGS
-LOUT OUT (C),A
- INC C
- OUTI
- DEC C
- INC A
- CP 13
- JR NZ,LOUT
- OUT (C),A
- LD A,(HL)
- AND A
- RET M
- INC C
- OUT (C),A
- RET
- ENDIF
-
- IF ACBBAC
-CHTABLE EQU $-4
- DB 4,5,15,%001001,0,7,7,%100100
- ENDIF
-
-NT_DATA DB (T_NEW_0-T1_)*2
- DB TCNEW_0-T_
- DB (T_OLD_0-T1_)*2+1
- DB TCOLD_0-T_
- DB (T_NEW_1-T1_)*2+1
- DB TCNEW_1-T_
- DB (T_OLD_1-T1_)*2+1
- DB TCOLD_1-T_
- DB (T_NEW_2-T1_)*2
- DB TCNEW_2-T_
- DB (T_OLD_2-T1_)*2
- DB TCOLD_2-T_
- DB (T_NEW_3-T1_)*2
- DB TCNEW_3-T_
- DB (T_OLD_3-T1_)*2
- DB TCOLD_3-T_
-
-T_
-
-TCOLD_0 DB #00+1,#04+1,#08+1,#0A+1,#0C+1,#0E+1,#12+1,#14+1
- DB #18+1,#24+1,#3C+1,0
-TCOLD_1 DB #5C+1,0
-TCOLD_2 DB #30+1,#36+1,#4C+1,#52+1,#5E+1,#70+1,#82,#8C,#9C
- DB #9E,#A0,#A6,#A8,#AA,#AC,#AE,#AE,0
-TCNEW_3 DB #56+1
-TCOLD_3 DB #1E+1,#22+1,#24+1,#28+1,#2C+1,#2E+1,#32+1,#BE+1,0
-TCNEW_0 DB #1C+1,#20+1,#22+1,#26+1,#2A+1,#2C+1,#30+1,#54+1
- DB #BC+1,#BE+1,0
-TCNEW_1 EQU TCOLD_1
-TCNEW_2 DB #1A+1,#20+1,#24+1,#28+1,#2A+1,#3A+1,#4C+1,#5E+1
- DB #BA+1,#BC+1,#BE+1,0
-
-PT3EMPTYORN EQU $-1
- DB 1,0
-
-;first 12 values of tone tables (packed)
-
-T_PACK DB #06EC*2/256,#06EC*2
- DB #0755-#06EC
- DB #07C5-#0755
- DB #083B-#07C5
- DB #08B8-#083B
- DB #093D-#08B8
- DB #09CA-#093D
- DB #0A5F-#09CA
- DB #0AFC-#0A5F
- DB #0BA4-#0AFC
- DB #0C55-#0BA4
- DB #0D10-#0C55
- DB #066D*2/256,#066D*2
- DB #06CF-#066D
- DB #0737-#06CF
- DB #07A4-#0737
- DB #0819-#07A4
- DB #0894-#0819
- DB #0917-#0894
- DB #09A1-#0917
- DB #0A33-#09A1
- DB #0ACF-#0A33
- DB #0B73-#0ACF
- DB #0C22-#0B73
- DB #0CDA-#0C22
- DB #0704*2/256,#0704*2
- DB #076E-#0704
- DB #07E0-#076E
- DB #0858-#07E0
- DB #08D6-#0858
- DB #095C-#08D6
- DB #09EC-#095C
- DB #0A82-#09EC
- DB #0B22-#0A82
- DB #0BCC-#0B22
- DB #0C80-#0BCC
- DB #0D3E-#0C80
- DB #07E0*2/256,#07E0*2
- DB #0858-#07E0
- DB #08E0-#0858
- DB #0960-#08E0
- DB #09F0-#0960
- DB #0A88-#09F0
- DB #0B28-#0A88
- DB #0BD8-#0B28
- DB #0C80-#0BD8
- DB #0D60-#0C80
- DB #0E10-#0D60
- DB #0EF8-#0E10
-
-;vars from here can be stripped
-;you can move VARS to any other address
-
-VARS
-
-;ChannelsVars
- STRUCT CHP
-;reset group
-PsInOr DB 0
-PsInSm DB 0
-CrAmSl DB 0
-CrNsSl DB 0
-CrEnSl DB 0
-TSlCnt DB 0
-CrTnSl DW 0
-TnAcc DW 0
-COnOff DB 0
-;reset group
-
-OnOffD DB 0
-
-;IX for PTDECOD here (+12)
-OffOnD DB 0
-OrnPtr DW 0
-SamPtr DW 0
-NNtSkp DB 0
-Note DB 0
-SlToNt DB 0
-Env_En DB 0
-Flags DB 0
- ;Enabled - 0,SimpleGliss - 2
-TnSlDl DB 0
-TSlStp DW 0
-TnDelt DW 0
-NtSkCn DB 0
-Volume DB 0
- ENDS
-
-ChanA DS CHP
-ChanB DS CHP
-ChanC DS CHP
-
-;GlobalVars
-DelyCnt DB 0
-CurESld DW 0
-CurEDel DB 0
-Ns_Base_AddToNs
-Ns_Base DB 0
-AddToNs DB 0
-
-AYREGS
-
-VT_ DS 256 ;CreatedVolumeTableAddress
-
-EnvBase EQU VT_+14
-
-T1_ EQU VT_+16 ;Tone tables data depacked here
-
-T_OLD_1 EQU T1_
-T_OLD_2 EQU T_OLD_1+24
-T_OLD_3 EQU T_OLD_2+24
-T_OLD_0 EQU T_OLD_3+2
-T_NEW_0 EQU T_OLD_0
-T_NEW_1 EQU T_OLD_1
-T_NEW_2 EQU T_NEW_0+24
-T_NEW_3 EQU T_OLD_3
-
-PT2EMPTYORN EQU VT_+31 ;1,0,0 sequence
-
-NT_ DS 192 ;CreatedNoteTableAddress
-
-;local var
-Ampl EQU AYREGS+AmplC
-
-VAR0END EQU VT_+16 ;INIT zeroes from VARS to VAR0END-1
-
-VARSEND EQU $
-
-MDLADDR EQU $
-
-;Release 0 steps:
-;02/27/2005
-;Merging PT2 and PT3 players; debug
-;02/28/2005
-;debug; optimization
-;03/01/2005
-;Migration to SjASM; conditional assembly (ZX, MSX and
-;visualization)
-;03/03/2005
-;SETPORT subprogram (35 bytes shorter)
-;03/05/2005
-;fixed CurPosCounter error
-;03/06/2005
-;Added ACB and BAC channels swapper (for Spectre); more cond.
-;assembly keys; optimization
-;Release 1 steps:
-;04/15/2005
-;Removed loop bit resetting for no loop build (5 bytes shorter)
-;04/30/2007
-;New 1.xx and 2.xx interpretation for PT 3.7+.
-
-;Tests in IMMATION TESTER V1.0 by Andy Man/POS
-;(for minimal build)
-;Module name/author Min tacts Max tacts
-;PT3 (a little slower than standalone player)
-;Spleen/Nik-O 1720 9368
-;Chuta/Miguel 1720 9656
-;Zhara/Macros 4536 8792
-;PT2 (more slower than standalone player)
-;Epilogue/Nik-O 3928 10232
-;NY tHEMEs/zHenYa 3848 9208
-;GUEST 4/Alex Job 2824 9352
-;KickDB/Fatal Snipe 1720 9880
-
-;Size (minimal build for ZX Spectrum):
-;Code block #7B9 bytes
-;Variables #21D bytes (can be stripped)
-;Size in RAM #7B9+#21D=#9D6 (2518) bytes
-
-;Notes:
-;Pro Tracker 3.4r can not be detected by header, so PT3.4r tone
-;tables realy used only for modules of 3.3 and older versions.
- SAVEBIN "player.bin", #4000, $ - #4000
\ No newline at end of file
+;Universal PT2'n'PT3 Turbo Sound player for ZX Spectrum
+;(c)2004-2007 S.V.Bulba
+;Specially for AlCo
+;http://bulba.untergrund.net/ (http://bulba.at.kz/)
+
+;Release number
+Release EQU "0"
+
+;Conditional assembly
+;1) Current position counters at (Vars1+0) and (Vars2+0)
+CurPosCounter=0
+;2) Allow channels allocation bits at (START+10)
+ACBBAC=0
+;3) Allow loop checking and disabling
+LoopChecker=1
+;4) Insert official identificator
+Id=0
+;5) Set IY for correct return to ZX Basic
+Basic=1
+
+;Features
+;--------
+;-Can be compiled at any address (i.e. no need rounding ORG
+; address).
+;-Variables (VARS) can be located at any address (not only after
+; code block).
+;-INIT subprogram checks PT3-module version and rightly
+; generates both note and volume tables outside of code block
+; (in VARS).
+;-Two portamento (spc. command 3xxx) algorithms (depending of
+; PT3 module version).
+;-New 1.XX and 2.XX special command behaviour (only for PT v3.7
+; and higher).
+;-Any Tempo value are accepted (including Tempo=1 and Tempo=2).
+;-TS modes: 2xPT3, 2xPT2 and PT v3.7 TS standard.
+;-Fully compatible with Ay_Emul PT3 and PT2 players codes.
+;-See also notes at the end of this source code.
+
+;Limitations
+;-----------
+;-Can run in RAM only (self-modified code is used).
+;-PT2 position list must be end by #FF marker only.
+
+;Warning!!! PLAY subprogram can crash if no module are loaded
+;into RAM or INIT subprogram was not called before.
+
+;Call MUTE or INIT one more time to mute sound after stopping
+;playing
+
+ DISP #4000
+
+;Test codes (commented)
+; LD A,32 ;SinglePT3(TS if TSPT3.7),ABC,Looped
+; LD (START+10),A
+; LD HL,#8000 ;Mod1
+; LD DE,#A000 ;Mod2 (optional)
+; CALL START+3
+; EI
+;_LP HALT
+; CALL START+5
+; XOR A
+; IN A,(#FE)
+; CPL
+; AND 15
+; JR Z,_LP
+; JR START+8
+
+TonA EQU 0
+TonB EQU 2
+TonC EQU 4
+Noise EQU 6
+Mixer EQU 7
+AmplA EQU 8
+AmplB EQU 9
+AmplC EQU 10
+Env EQU 11
+EnvTp EQU 13
+
+;Entry and other points
+;START initialize playing of modules at MDLADDR (single module)
+;START+3 initialization with module address in HL and DE (TS)
+;START+5 play one quark
+;START+8 mute
+;START+10 setup and status flags
+
+START
+ LD HL,MDLADDR ;DE - address of 2nd module for TS
+ JR INIT
+ JP PLAY
+ JR MUTE
+SETUP DB 0 ;set bit0, if you want to play without looping
+ ;(optional);
+ ;set bit1 for PT2 and reset for PT3 before
+ ;calling INIT;
+ ;bits2-3: %00-ABC, %01-ACB, %10-BAC (optional);
+ ;bits4-5: %00-no TS, %01-2 modules TS, %10-
+ ;autodetect PT3 TS-format by AlCo (PT 3.7+);
+ ;Remark: old PT3 TS-format by AlCo (PT 3.6) is not
+ ;documented and must be converted to new standard.
+ ;bit6 is set each time, when loop point of 2nd TS
+ ;module is passed (optional).
+ ;bit7 is set each time, when loop point of 1st TS
+ ;or of single module is passed (optional).
+
+;Identifier
+ IF Id
+ DB "=UniPT2/PT3/TS-Player r.",Release,"="
+ ENDIF
+
+ IF LoopChecker
+CHECKLP LD HL,SETUP
+ BIT 0,(IY-100+VRS.ModNum)
+ JR Z,CHL1
+ SET 6,(HL)
+ JR CHL2
+CHL1 SET 7,(HL)
+CHL2 BIT 0,(HL)
+ RET Z
+ POP HL
+ INC (IY-100+VRS.DelyCnt)
+ INC (IY-100+VRS.ChanA+CHP.NtSkCn)
+ XOR A
+ LD (IY-100+VRS.AYREGS+AmplA),A
+ LD (IY-100+VRS.AYREGS+AmplB),A
+ LD (IY-100+VRS.AYREGS+AmplC),A
+ RET
+ ENDIF
+
+MUTE XOR A
+ LD H,A
+ LD L,A
+ LD (VARS1+VRS.AYREGS+AmplA),A
+ LD (VARS1+VRS.AYREGS+AmplB),HL
+ LD (VARS2+VRS.AYREGS+AmplA),A
+ LD (VARS2+VRS.AYREGS+AmplB),HL
+ JP ROUT
+
+INIT
+;HL - AddressOfModule
+;DE - AddresOf2ndModule
+ PUSH DE
+ PUSH HL
+ LD HL,VARS
+ LD (HL),0
+ LD DE,VARS+1
+ LD BC,VAR0END-VARS-1
+ LDIR
+ INC HL
+ LD (VARS1+VRS.AdInPtA),HL ;ptr to zero
+ LD (VARS2+VRS.AdInPtA),HL
+
+ POP HL
+ LD IY,VARS1+100
+ LD A,(START+10)
+ AND 2
+ JP NZ,I_PT2
+
+ CALL INITPT3
+ LD HL,(e_-SamCnv-2)*256+#18
+ LD (SamCnv),HL
+ LD A,#BA
+ LD (OrnCP),A
+ LD (SamCP),A
+ LD A,#7B
+ LD (OrnLD),A
+ LD (SamLD),A
+ LD A,#87
+ LD (SamClc2),A
+ POP HL
+ ;Use version and ton table of 1st module
+ LD A,(IX+13-100) ;EXTRACT VERSION NUMBER
+ SUB #30
+ JR C,L20
+ CP 10
+ JR C,L21
+L20 LD A,6
+L21 LD (Version),A
+ PUSH AF ;VolTable version
+ CP 4
+ LD A,(IX+99-100) ;TONE TABLE NUMBER
+ RLA
+ AND 7
+ PUSH AF ;NoteTable number
+
+ LD IY,VARS2+100
+ LD A,(START+10)
+ AND 48
+ JR Z,NOTS
+ CP 16
+ JR Z,TwoPT3s
+ LD A,(Version)
+ CP 7
+ JR C,NOTS
+ LD A,(IX+98-100) ;ALCO TS MARKER
+ CP #20
+ JR Z,NOTS
+ LD HL,VARS1
+ LD DE,VARS2
+ LD BC,VRS
+ LDIR
+ SET 1,(IY-100+VRS.ModNum)
+ LD C,A
+ ADD A,A
+ ADD A,C
+ SUB 2
+ LD (TSSub),A
+ JR AlCoTS_
+TwoPT3s CALL INITPT3
+AlCoTS_ LD A,1
+ LD (is_ts),A
+ SET 0,(IY-100+VRS.ModNum)
+
+NOTS LD BC,PT3PD
+ LD HL,0
+ LD DE,PT3EMPTYORN
+ JR INITCOMMON
+
+I_PT2 CALL INITPT2
+ LD HL,#51CB
+ LD (SamCnv),HL
+ LD A,#BB
+ LD (OrnCP),A
+ LD (SamCP),A
+ LD A,#7A
+ LD (OrnLD),A
+ LD (SamLD),A
+ LD A,#80
+ LD (SamClc2),A
+ POP HL
+ LD A,5
+ LD (Version),A
+ PUSH AF
+ LD A,2
+ PUSH AF
+
+ LD A,(START+10)
+ AND 48
+ JR Z,NOTS2
+
+ LD IY,VARS2+100
+ LD A,1
+ LD (is_ts),A
+ SET 0,(IY-100+VRS.ModNum)
+ CALL INITPT2
+
+NOTS2 LD BC,PT2PD
+ LD HL,#8687
+ LD DE,PT2EMPTYORN
+
+INITCOMMON
+
+ IF Basic
+ LD IY,#5C3A
+ ENDIF
+
+ LD (PTDEC),BC
+ LD (PsCalc),HL
+ PUSH DE
+
+;note table data depacker
+;(c) Ivan Roshin
+ LD DE,T_PACK
+ LD BC,T1_+(2*49)-1
+TP_0 LD A,(DE)
+ INC DE
+ CP 15*2
+ JR NC,TP_1
+ LD H,A
+ LD A,(DE)
+ LD L,A
+ INC DE
+ JR TP_2
+TP_1 PUSH DE
+ LD D,0
+ LD E,A
+ ADD HL,DE
+ ADD HL,DE
+ POP DE
+TP_2 LD A,H
+ LD (BC),A
+ DEC BC
+ LD A,L
+ LD (BC),A
+ DEC BC
+ SUB #F8*2
+ JR NZ,TP_0
+
+ INC A
+ LD (VARS1+VRS.DelyCnt),A
+ LD (VARS2+VRS.DelyCnt),A
+ LD HL,#F001 ;H - CHP.Volume, L - CHP.NtSkCn
+ LD (VARS1+VRS.ChanA+CHP.NtSkCn),HL
+ LD (VARS1+VRS.ChanB+CHP.NtSkCn),HL
+ LD (VARS1+VRS.ChanC+CHP.NtSkCn),HL
+ LD (VARS2+VRS.ChanA+CHP.NtSkCn),HL
+ LD (VARS2+VRS.ChanB+CHP.NtSkCn),HL
+ LD (VARS2+VRS.ChanC+CHP.NtSkCn),HL
+ POP HL
+ LD (VARS1+VRS.ChanA+CHP.OrnPtr),HL
+ LD (VARS1+VRS.ChanB+CHP.OrnPtr),HL
+ LD (VARS1+VRS.ChanC+CHP.OrnPtr),HL
+ LD (VARS2+VRS.ChanA+CHP.OrnPtr),HL
+ LD (VARS2+VRS.ChanB+CHP.OrnPtr),HL
+ LD (VARS2+VRS.ChanC+CHP.OrnPtr),HL
+
+ POP AF
+
+;NoteTableCreator (c) Ivan Roshin
+;A - NoteTableNumber*2+VersionForNoteTable
+;(xx1b - 3.xx..3.4r, xx0b - 3.4x..3.6x..VTII1.0)
+
+ LD HL,NT_DATA
+ LD D,0
+ ADD A,A
+ LD E,A
+ ADD HL,DE
+ LD E,(HL)
+ INC HL
+ SRL E
+ SBC A,A
+ AND #A7 ;#00 (NOP) or #A7 (AND A)
+ LD (L3),A
+ EX DE,HL
+ LD BC,T1_
+ ADD HL,BC
+
+ LD A,(DE)
+ ADD A,T_
+ LD C,A
+ ADC A,T_/256
+ SUB C
+ LD B,A
+ PUSH BC
+ LD DE,NT_
+ PUSH DE
+
+ LD B,12
+L1 PUSH BC
+ LD C,(HL)
+ INC HL
+ PUSH HL
+ LD B,(HL)
+
+ PUSH DE
+ EX DE,HL
+ LD DE,23
+ LD IXH,8
+
+L2 SRL B
+ RR C
+L3 DB #19 ;AND A or NOP
+ LD A,C
+ ADC A,D ;=ADC 0
+ LD (HL),A
+ INC HL
+ LD A,B
+ ADC A,D
+ LD (HL),A
+ ADD HL,DE
+ DEC IXH
+ JR NZ,L2
+
+ POP DE
+ INC DE
+ INC DE
+ POP HL
+ INC HL
+ POP BC
+ DJNZ L1
+
+ POP HL
+ POP DE
+
+ LD A,E
+ CP TCOLD_1
+ JR NZ,CORR_1
+ LD A,#FD
+ LD (NT_+#2E),A
+
+CORR_1 LD A,(DE)
+ AND A
+ JR Z,TC_EXIT
+ RRA
+ PUSH AF
+ ADD A,A
+ LD C,A
+ ADD HL,BC
+ POP AF
+ JR NC,CORR_2
+ DEC (HL)
+ DEC (HL)
+CORR_2 INC (HL)
+ AND A
+ SBC HL,BC
+ INC DE
+ JR CORR_1
+
+TC_EXIT
+
+ POP AF
+
+;VolTableCreator (c) Ivan Roshin
+;A - VersionForVolumeTable (0..4 - 3.xx..3.4x;
+ ;5.. - 2.x,3.5x..3.6x..VTII1.0)
+
+ CP 5
+ LD HL,#11
+ LD D,H
+ LD E,H
+ LD A,#17
+ JR NC,M1
+ DEC L
+ LD E,L
+ XOR A
+M1 LD (M2),A
+
+ LD IX,VT_+16
+
+ LD C,#F
+INITV2 PUSH HL
+
+ ADD HL,DE
+ EX DE,HL
+ SBC HL,HL
+
+ LD B,#10
+INITV1 LD A,L
+M2 DB #7D
+ LD A,H
+ ADC A,0
+ LD (IX),A
+ INC IX
+ ADD HL,DE
+ DJNZ INITV1
+
+ POP HL
+ LD A,E
+ CP #77
+ JR NZ,M3
+ INC E
+M3 DEC C
+ JR NZ,INITV2
+
+ JP ROUT
+
+INITPT3 CALL SETMDAD
+ PUSH HL
+ LD DE,100
+ ADD HL,DE
+ LD A,(HL)
+ LD (IY-100+VRS.Delay),A
+ PUSH HL
+ POP IX
+ ADD HL,DE
+ CALL SETCPPT
+ LD E,(IX+102-100)
+ INC HL
+
+ IF CurPosCounter
+ LD (IY-100+VRS.PosSub),L
+ ENDIF
+
+ ADD HL,DE
+ CALL SETLPPT
+ POP DE
+ LD L,(IX+103-100)
+ LD H,(IX+104-100)
+ ADD HL,DE
+ CALL SETPTPT
+ LD HL,169
+ ADD HL,DE
+ CALL SETORPT
+ LD HL,105
+ ADD HL,DE
+
+SETSMPT LD (IY-100+VRS.SamPtrs),L
+ LD (IY-100+VRS.SamPtrs+1),H
+ RET
+
+INITPT2 LD A,(HL)
+ LD (IY-100+VRS.Delay),A
+ PUSH HL
+ PUSH HL
+ PUSH HL
+ INC HL
+ INC HL
+ LD A,(HL)
+ INC HL
+ CALL SETSMPT
+ LD E,(HL)
+ INC HL
+ LD D,(HL)
+ POP HL
+ AND A
+ SBC HL,DE
+ CALL SETMDAD
+ POP HL
+ LD DE,67
+ ADD HL,DE
+ CALL SETORPT
+ LD E,32
+ ADD HL,DE
+ LD C,(HL)
+ INC HL
+ LD B,(HL)
+ LD E,30
+ ADD HL,DE
+ CALL SETCPPT
+ LD E,A
+ INC HL
+
+ IF CurPosCounter
+ LD (IY-100+VRS.PosSub),L
+ ENDIF
+
+ ADD HL,DE
+ CALL SETLPPT
+ POP HL
+ ADD HL,BC
+
+SETPTPT LD (IY-100+VRS.PatsPtr),L
+ LD (IY-100+VRS.PatsPtr+1),H
+ RET
+
+SETMDAD LD (IY-100+VRS.MODADDR),L
+ LD (IY-100+VRS.MODADDR+1),H
+ RET
+
+SETORPT LD (IY-100+VRS.OrnPtrs),L
+ LD (IY-100+VRS.OrnPtrs+1),H
+ RET
+
+SETCPPT LD (IY-100+VRS.CrPsPtr),L
+ LD (IY-100+VRS.CrPsPtr+1),H
+ RET
+
+SETLPPT LD (IY-100+VRS.LPosPtr),L
+ LD (IY-100+VRS.LPosPtr+1),H
+ RET
+
+SETENBS LD (IY-100+VRS.EnvBase),L
+ LD (IY-100+VRS.EnvBase+1),H
+ RET
+
+SETESLD LD (IY-100+VRS.CurESld),L
+ LD (IY-100+VRS.CurESld+1),H
+ RET
+
+GETIX PUSH IY
+ POP IX
+ ADD IX,DE
+ RET
+
+PTDECOD CALL GETIX
+PTDEC EQU $+1
+ JP #C3C3
+
+;PT2 pattern decoder
+PD2_SAM CALL SETSAM
+ JR PD2_LOOP
+
+PD2_EOff LD (IX-12+CHP.Env_En),A
+ JR PD2_LOOP
+
+PD2_ENV LD (IX-12+CHP.Env_En),16
+ LD (IY-100+VRS.AYREGS+EnvTp),A
+ LD A,(BC)
+ INC BC
+ LD L,A
+ LD A,(BC)
+ INC BC
+ LD H,A
+ CALL SETENBS
+ JR PD2_LOOP
+
+PD2_ORN CALL SETORN
+ JR PD2_LOOP
+
+PD2_SKIP INC A
+ LD (IX-12+CHP.NNtSkp),A
+ JR PD2_LOOP
+
+PD2_VOL RRCA
+ RRCA
+ RRCA
+ RRCA
+ LD (IX-12+CHP.Volume),A
+ JR PD2_LOOP
+
+PD2_DEL CALL C_DELAY
+ JR PD2_LOOP
+
+PD2_GLIS SET 2,(IX-12+CHP.Flags)
+ INC A
+ LD (IX-12+CHP.TnSlDl),A
+ LD (IX-12+CHP.TSlCnt),A
+ LD A,(BC)
+ INC BC
+ LD (IX-12+CHP.TSlStp),A
+ ADD A,A
+ SBC A,A
+ LD (IX-12+CHP.TSlStp+1),A
+ SCF
+ JR PD2_LP2
+
+PT2PD AND A
+
+PD2_LP2 EX AF,AF'
+
+PD2_LOOP LD A,(BC)
+ INC BC
+ ADD A,#20
+ JR Z,PD2_REL
+ JR C,PD2_SAM
+ ADD A,96
+ JR C,PD2_NOTE
+ INC A
+ JR Z,PD2_EOff
+ ADD A,15
+ JP Z,PD_FIN
+ JR C,PD2_ENV
+ ADD A,#10
+ JR C,PD2_ORN
+ ADD A,#40
+ JR C,PD2_SKIP
+ ADD A,#10
+ JR C,PD2_VOL
+ INC A
+ JR Z,PD2_DEL
+ INC A
+ JR Z,PD2_GLIS
+ INC A
+ JR Z,PD2_PORT
+ INC A
+ JR Z,PD2_STOP
+ LD A,(BC)
+ INC BC
+ LD (IX-12+CHP.CrNsSl),A
+ JR PD2_LOOP
+
+PD2_PORT RES 2,(IX-12+CHP.Flags)
+ LD A,(BC)
+ INC BC
+ INC BC ;ignoring precalc delta to right sound
+ INC BC
+ SCF
+ JR PD2_LP2
+
+PD2_STOP LD (IX-12+CHP.TSlCnt),A
+ JR PD2_LOOP
+
+PD2_REL LD (IX-12+CHP.Flags),A
+ JR PD2_EXIT
+
+PD2_NOTE LD L,A
+ LD A,(IX-12+CHP.Note)
+ LD (PrNote+1),A
+ LD (IX-12+CHP.Note),L
+ XOR A
+ LD (IX-12+CHP.TSlCnt),A
+ SET 0,(IX-12+CHP.Flags)
+ EX AF,AF'
+ JR NC,NOGLIS2
+ BIT 2,(IX-12+CHP.Flags)
+ JR NZ,NOPORT2
+ LD (LoStep),A
+ ADD A,A
+ SBC A,A
+ EX AF,AF'
+ LD H,A
+ LD L,A
+ INC A
+ CALL SETPORT
+NOPORT2 LD (IX-12+CHP.TSlCnt),1
+NOGLIS2 XOR A
+
+
+PD2_EXIT LD (IX-12+CHP.PsInSm),A
+ LD (IX-12+CHP.PsInOr),A
+ LD (IX-12+CHP.CrTnSl),A
+ LD (IX-12+CHP.CrTnSl+1),A
+ JP PD_FIN
+
+;PT3 pattern decoder
+PD_OrSm LD (IX-12+CHP.Env_En),0
+ CALL SETORN
+PD_SAM_ LD A,(BC)
+ INC BC
+ RRCA
+
+PD_SAM CALL SETSAM
+ JR PD_LOOP
+
+PD_VOL RRCA
+ RRCA
+ RRCA
+ RRCA
+ LD (IX-12+CHP.Volume),A
+ JR PD_LP2
+
+PD_EOff LD (IX-12+CHP.Env_En),A
+ LD (IX-12+CHP.PsInOr),A
+ JR PD_LP2
+
+PD_SorE DEC A
+ JR NZ,PD_ENV
+ LD A,(BC)
+ INC BC
+ LD (IX-12+CHP.NNtSkp),A
+ JR PD_LP2
+
+PD_ENV CALL SETENV
+ JR PD_LP2
+
+PD_ORN CALL SETORN
+ JR PD_LOOP
+
+PD_ESAM LD (IX-12+CHP.Env_En),A
+ LD (IX-12+CHP.PsInOr),A
+ CALL NZ,SETENV
+ JR PD_SAM_
+
+PT3PD LD A,(IX-12+CHP.Note)
+ LD (PrNote+1),A
+ LD L,(IX-12+CHP.CrTnSl)
+ LD H,(IX-12+CHP.CrTnSl+1)
+ LD (PrSlide+1),HL
+
+PD_LOOP LD DE,#2010
+PD_LP2 LD A,(BC)
+ INC BC
+ ADD A,E
+ JR C,PD_OrSm
+ ADD A,D
+ JR Z,PD_FIN
+ JR C,PD_SAM
+ ADD A,E
+ JR Z,PD_REL
+ JR C,PD_VOL
+ ADD A,E
+ JR Z,PD_EOff
+ JR C,PD_SorE
+ ADD A,96
+ JR C,PD_NOTE
+ ADD A,E
+ JR C,PD_ORN
+ ADD A,D
+ JR C,PD_NOIS
+ ADD A,E
+ JR C,PD_ESAM
+ ADD A,A
+ LD E,A
+ LD HL,SPCCOMS+#FF20-#2000
+ ADD HL,DE
+ LD E,(HL)
+ INC HL
+ LD D,(HL)
+ PUSH DE
+ JR PD_LOOP
+
+PD_NOIS LD (IY-100+VRS.Ns_Base),A
+ JR PD_LP2
+
+PD_REL RES 0,(IX-12+CHP.Flags)
+ JR PD_RES
+
+PD_NOTE LD (IX-12+CHP.Note),A
+ SET 0,(IX-12+CHP.Flags)
+ XOR A
+
+PD_RES LD (PDSP_+1),SP
+ LD SP,IX
+ LD H,A
+ LD L,A
+ PUSH HL
+ PUSH HL
+ PUSH HL
+ PUSH HL
+ PUSH HL
+ PUSH HL
+PDSP_ LD SP,#3131
+
+PD_FIN LD A,(IX-12+CHP.NNtSkp)
+ LD (IX-12+CHP.NtSkCn),A
+ RET
+
+C_PORTM LD A,(BC)
+ INC BC
+;SKIP PRECALCULATED TONE DELTA (BECAUSE
+;CANNOT BE RIGHT AFTER PT3 COMPILATION)
+ INC BC
+ INC BC
+ EX AF,AF'
+ LD A,(BC) ;SIGNED TONE STEP
+ INC BC
+ LD (LoStep),A
+ LD A,(BC)
+ INC BC
+ AND A
+ EX AF,AF'
+ LD L,(IX-12+CHP.CrTnSl)
+ LD H,(IX-12+CHP.CrTnSl+1)
+
+;Set portamento variables
+;A - Delay; A' - Hi(Step); ZF' - (A'=0); HL - CrTnSl
+
+SETPORT RES 2,(IX-12+CHP.Flags)
+ LD (IX-12+CHP.TnSlDl),A
+ LD (IX-12+CHP.TSlCnt),A
+ PUSH HL
+ LD DE,NT_
+ LD A,(IX-12+CHP.Note)
+ LD (IX-12+CHP.SlToNt),A
+ ADD A,A
+ LD L,A
+ LD H,0
+ ADD HL,DE
+ LD A,(HL)
+ INC HL
+ LD H,(HL)
+ LD L,A
+ PUSH HL
+PrNote LD A,#3E
+ LD (IX-12+CHP.Note),A
+ ADD A,A
+ LD L,A
+ LD H,0
+ ADD HL,DE
+ LD E,(HL)
+ INC HL
+ LD D,(HL)
+ POP HL
+ SBC HL,DE
+ LD (IX-12+CHP.TnDelt),L
+ LD (IX-12+CHP.TnDelt+1),H
+ POP DE
+Version EQU $+1
+ LD A,#3E
+ CP 6
+ JR C,OLDPRTM ;Old 3xxx for PT v3.5-
+PrSlide LD DE,#1111
+ LD (IX-12+CHP.CrTnSl),E
+ LD (IX-12+CHP.CrTnSl+1),D
+LoStep EQU $+1
+OLDPRTM LD A,#3E
+ EX AF,AF'
+ JR Z,NOSIG
+ EX DE,HL
+NOSIG SBC HL,DE
+ JP P,SET_STP
+ CPL
+ EX AF,AF'
+ NEG
+ EX AF,AF'
+SET_STP LD (IX-12+CHP.TSlStp+1),A
+ EX AF,AF'
+ LD (IX-12+CHP.TSlStp),A
+ LD (IX-12+CHP.COnOff),0
+ RET
+
+C_GLISS SET 2,(IX-12+CHP.Flags)
+ LD A,(BC)
+ INC BC
+ LD (IX-12+CHP.TnSlDl),A
+ AND A
+ JR NZ,GL36
+ LD A,(Version) ;AlCo PT3.7+
+ CP 7
+ SBC A,A
+ INC A
+GL36 LD (IX-12+CHP.TSlCnt),A
+ LD A,(BC)
+ INC BC
+ EX AF,AF'
+ LD A,(BC)
+ INC BC
+ JR SET_STP
+
+C_SMPOS LD A,(BC)
+ INC BC
+ LD (IX-12+CHP.PsInSm),A
+ RET
+
+C_ORPOS LD A,(BC)
+ INC BC
+ LD (IX-12+CHP.PsInOr),A
+ RET
+
+C_VIBRT LD A,(BC)
+ INC BC
+ LD (IX-12+CHP.OnOffD),A
+ LD (IX-12+CHP.COnOff),A
+ LD A,(BC)
+ INC BC
+ LD (IX-12+CHP.OffOnD),A
+ XOR A
+ LD (IX-12+CHP.TSlCnt),A
+ LD (IX-12+CHP.CrTnSl),A
+ LD (IX-12+CHP.CrTnSl+1),A
+ RET
+
+C_ENGLS LD A,(BC)
+ INC BC
+ LD (IY-100+VRS.Env_Del),A
+ LD (IY-100+VRS.CurEDel),A
+ LD A,(BC)
+ INC BC
+ LD L,A
+ LD A,(BC)
+ INC BC
+ LD H,A
+ LD (IY-100+VRS.ESldAdd),L
+ LD (IY-100+VRS.ESldAdd+1),H
+ RET
+
+C_DELAY LD A,(BC)
+ INC BC
+ LD (IY-100+VRS.Delay),A
+ LD HL,VARS2+VRS.ModNum ;if AlCo_TS
+ BIT 1,(HL)
+ RET Z
+ LD (VARS1+VRS.Delay),A
+ LD (VARS1+VRS.DelyCnt),A
+ LD (VARS2+VRS.Delay),A
+ RET
+
+SETENV LD (IX-12+CHP.Env_En),E
+ LD (IY-100+VRS.AYREGS+EnvTp),A
+ LD A,(BC)
+ INC BC
+ LD H,A
+ LD A,(BC)
+ INC BC
+ LD L,A
+ CALL SETENBS
+ XOR A
+ LD (IX-12+CHP.PsInOr),A
+ LD (IY-100+VRS.CurEDel),A
+ LD H,A
+ LD L,A
+ JP SETESLD
+
+SETORN ADD A,A
+ LD E,A
+ LD D,0
+ LD (IX-12+CHP.PsInOr),D
+ LD L,(IY-100+VRS.OrnPtrs)
+ LD H,(IY-100+VRS.OrnPtrs+1)
+ ADD HL,DE
+ LD E,(HL)
+ INC HL
+ LD D,(HL)
+ LD L,(IY-100+VRS.MODADDR)
+ LD H,(IY-100+VRS.MODADDR+1)
+ ADD HL,DE
+ LD (IX-12+CHP.OrnPtr),L
+ LD (IX-12+CHP.OrnPtr+1),H
+C_NOP RET
+
+SETSAM ADD A,A
+ LD E,A
+ LD D,0
+ LD L,(IY-100+VRS.SamPtrs);
+ LD H,(IY-100+VRS.SamPtrs+1);
+ ADD HL,DE
+ LD E,(HL)
+ INC HL
+ LD D,(HL)
+ LD L,(IY-100+VRS.MODADDR)
+ LD H,(IY-100+VRS.MODADDR+1)
+ ADD HL,DE
+ LD (IX-12+CHP.SamPtr),L
+ LD (IX-12+CHP.SamPtr+1),H
+ RET
+
+;ALL 16 ADDRESSES TO PROTECT FROM BROKEN PT3 MODULES
+SPCCOMS DW C_NOP
+ DW C_GLISS
+ DW C_PORTM
+ DW C_SMPOS
+ DW C_ORPOS
+ DW C_VIBRT
+ DW C_NOP
+ DW C_NOP
+ DW C_ENGLS
+ DW C_DELAY
+ DW C_NOP
+ DW C_NOP
+ DW C_NOP
+ DW C_NOP
+ DW C_NOP
+ DW C_NOP
+
+CHREGS CALL GETIX
+ XOR A
+ LD (Ampl),A
+ BIT 0,(IX+CHP.Flags)
+ PUSH HL
+ JP Z,CH_EXIT
+ LD (CSP_+1),SP
+ LD L,(IX+CHP.OrnPtr)
+ LD H,(IX+CHP.OrnPtr+1)
+ LD SP,HL
+ POP DE
+ LD H,A
+ LD A,(IX+CHP.PsInOr)
+ LD L,A
+ ADD HL,SP
+ INC A
+ ;PT2 PT3
+OrnCP INC A ;CP E CP D
+ JR C,CH_ORPS
+OrnLD DB 1 ;LD A,D LD A,E
+CH_ORPS LD (IX+CHP.PsInOr),A
+ LD A,(IX+CHP.Note)
+ ADD A,(HL)
+ JP P,CH_NTP
+ XOR A
+CH_NTP CP 96
+ JR C,CH_NOK
+ LD A,95
+CH_NOK ADD A,A
+ EX AF,AF'
+ LD L,(IX+CHP.SamPtr)
+ LD H,(IX+CHP.SamPtr+1)
+ LD SP,HL
+ POP DE
+ LD H,0
+ LD A,(IX+CHP.PsInSm)
+ LD B,A
+ ADD A,A
+SamClc2 ADD A,A ;or ADD A,B for PT2
+ LD L,A
+ ADD HL,SP
+ LD SP,HL
+ LD A,B
+ INC A
+ ;PT2 PT3
+SamCP INC A ;CP E CP D
+ JR C,CH_SMPS
+SamLD DB 1 ;LD A,D LD A,E
+CH_SMPS LD (IX+CHP.PsInSm),A
+ POP BC
+ POP HL
+
+;Convert PT2 sample to PT3
+ ;PT2 PT3
+SamCnv POP HL ;BIT 2,C JR e_
+ POP HL
+ LD H,B
+ JR NZ,$+8
+ EX DE,HL
+ AND A
+ SBC HL,HL
+ SBC HL,DE
+ LD D,C
+ RR C
+ SBC A,A
+ CPL
+ AND #3E
+ RR C
+ RR B
+ AND C
+ LD C,A
+ LD A,B
+ RRA
+ RRA
+ RR D
+ RRA
+ AND #9F
+ LD B,A
+
+e_ LD E,(IX+CHP.TnAcc)
+ LD D,(IX+CHP.TnAcc+1)
+ ADD HL,DE
+ BIT 6,B
+ JR Z,CH_NOAC
+ LD (IX+CHP.TnAcc),L
+ LD (IX+CHP.TnAcc+1),H
+CH_NOAC EX DE,HL
+ EX AF,AF'
+ ADD A,NT_
+ LD L,A
+ ADC A,NT_/256
+ SUB L
+ LD H,A
+ LD SP,HL
+ POP HL
+ ADD HL,DE
+ LD E,(IX+CHP.CrTnSl)
+ LD D,(IX+CHP.CrTnSl+1)
+ ADD HL,DE
+CSP_ LD SP,#3131
+ EX (SP),HL
+ XOR A
+ OR (IX+CHP.TSlCnt)
+ JR Z,CH_AMP
+ DEC (IX+CHP.TSlCnt)
+ JR NZ,CH_AMP
+ LD A,(IX+CHP.TnSlDl)
+ LD (IX+CHP.TSlCnt),A
+ LD L,(IX+CHP.TSlStp)
+ LD H,(IX+CHP.TSlStp+1)
+ LD A,H
+ ADD HL,DE
+ LD (IX+CHP.CrTnSl),L
+ LD (IX+CHP.CrTnSl+1),H
+ BIT 2,(IX+CHP.Flags)
+ JR NZ,CH_AMP
+ LD E,(IX+CHP.TnDelt)
+ LD D,(IX+CHP.TnDelt+1)
+ AND A
+ JR Z,CH_STPP
+ EX DE,HL
+CH_STPP SBC HL,DE
+ JP M,CH_AMP
+ LD A,(IX+CHP.SlToNt)
+ LD (IX+CHP.Note),A
+ XOR A
+ LD (IX+CHP.TSlCnt),A
+ LD (IX+CHP.CrTnSl),A
+ LD (IX+CHP.CrTnSl+1),A
+CH_AMP LD A,(IX+CHP.CrAmSl)
+ BIT 7,C
+ JR Z,CH_NOAM
+ BIT 6,C
+ JR Z,CH_AMIN
+ CP 15
+ JR Z,CH_NOAM
+ INC A
+ JR CH_SVAM
+CH_AMIN CP -15
+ JR Z,CH_NOAM
+ DEC A
+CH_SVAM LD (IX+CHP.CrAmSl),A
+CH_NOAM LD L,A
+ LD A,B
+ AND 15
+ ADD A,L
+ JP P,CH_APOS
+ XOR A
+CH_APOS CP 16
+ JR C,CH_VOL
+ LD A,15
+CH_VOL OR (IX+CHP.Volume)
+ ADD A,VT_
+ LD L,A
+ ADC A,VT_/256
+ SUB L
+ LD H,A
+ LD A,(HL)
+CH_ENV BIT 0,C
+ JR NZ,CH_NOEN
+ OR (IX+CHP.Env_En)
+CH_NOEN LD (Ampl),A
+ BIT 7,B
+ LD A,C
+ JR Z,NO_ENSL
+ RLA
+ RLA
+ SRA A
+ SRA A
+ SRA A
+ ADD A,(IX+CHP.CrEnSl) ;SEE COMMENT BELOW
+ BIT 5,B
+ JR Z,NO_ENAC
+ LD (IX+CHP.CrEnSl),A
+NO_ENAC ADD A,(IY-100+VRS.AddToEn) ;BUG IN PT3 - NEED WORD HERE
+ LD (IY-100+VRS.AddToEn),A
+ JR CH_MIX
+NO_ENSL RRA
+ ADD A,(IX+CHP.CrNsSl)
+ LD (IY-100+VRS.AddToNs),A
+ BIT 5,B
+ JR Z,CH_MIX
+ LD (IX+CHP.CrNsSl),A
+CH_MIX LD A,B
+ RRA
+ AND #48
+CH_EXIT OR (IY-100+VRS.AYREGS+Mixer)
+ RRCA
+ LD (IY-100+VRS.AYREGS+Mixer),A
+ POP HL
+ XOR A
+ OR (IX+CHP.COnOff)
+ RET Z
+ DEC (IX+CHP.COnOff)
+ RET NZ
+ XOR (IX+CHP.Flags)
+ LD (IX+CHP.Flags),A
+ RRA
+ LD A,(IX+CHP.OnOffD)
+ JR C,CH_ONDL
+ LD A,(IX+CHP.OffOnD)
+CH_ONDL LD (IX+CHP.COnOff),A
+ RET
+
+PLAY_ XOR A
+ LD (IY-100+VRS.AddToEn),A
+ LD (IY-100+VRS.AYREGS+Mixer),A
+ DEC A
+ LD (IY-100+VRS.AYREGS+EnvTp),A
+ DEC (IY-100+VRS.DelyCnt)
+ JP NZ,PL2
+ DEC (IY-100+VRS.ChanA+CHP.NtSkCn)
+ JR NZ,PL1B
+ LD C,(IY-100+VRS.AdInPtA)
+ LD B,(IY-100+VRS.AdInPtA+1)
+ LD A,(BC)
+ AND A
+ JR NZ,PL1A
+ LD D,A
+ LD (IY-100+VRS.Ns_Base),A
+ LD L,(IY-100+VRS.CrPsPtr)
+ LD H,(IY-100+VRS.CrPsPtr+1)
+ INC HL
+ LD A,(HL)
+ INC A
+ JR NZ,PLNLP
+
+ IF LoopChecker
+ CALL CHECKLP
+ ENDIF
+
+ LD L,(IY-100+VRS.LPosPtr)
+ LD H,(IY-100+VRS.LPosPtr+1)
+ LD A,(HL)
+ INC A
+PLNLP CALL SETCPPT
+ DEC A
+ BIT 1,(IY-100+VRS.ModNum)
+ JR Z,NoAlCo
+TSSub EQU $+1
+ SUB #D6
+ CPL
+NoAlCo
+ ;PT2 PT3
+PsCalc DEC A ;ADD A,A NOP
+ DEC A ;ADD A,(HL) NOP
+ ADD A,A
+ LD E,A
+ RL D
+
+ IF CurPosCounter
+ LD A,L
+ SUB (IY-100+VRS.PosSub)
+ LD (IY-100+VRS.CurPos),A
+ ENDIF
+
+ LD L,(IY-100+VRS.PatsPtr)
+ LD H,(IY-100+VRS.PatsPtr+1)
+ ADD HL,DE
+ LD E,(IY-100+VRS.MODADDR)
+ LD D,(IY-100+VRS.MODADDR+1)
+ LD (PSP_+1),SP
+ LD SP,HL
+ POP HL
+ ADD HL,DE
+ LD B,H
+ LD C,L
+ POP HL
+ ADD HL,DE
+ LD (IY-100+VRS.AdInPtB),L
+ LD (IY-100+VRS.AdInPtB+1),H
+ POP HL
+ ADD HL,DE
+ LD (IY-100+VRS.AdInPtC),L
+ LD (IY-100+VRS.AdInPtC+1),H
+PSP_ LD SP,#3131
+PL1A LD DE,VRS.ChanA+12-100
+ CALL PTDECOD
+ LD (IY-100+VRS.AdInPtA),C
+ LD (IY-100+VRS.AdInPtA+1),B
+
+PL1B DEC (IY-100+VRS.ChanB+CHP.NtSkCn)
+ JR NZ,PL1C
+ LD DE,VRS.ChanB+12-100
+ LD C,(IY-100+VRS.AdInPtB)
+ LD B,(IY-100+VRS.AdInPtB+1)
+ CALL PTDECOD
+ LD (IY-100+VRS.AdInPtB),C
+ LD (IY-100+VRS.AdInPtB+1),B
+
+PL1C DEC (IY-100+VRS.ChanC+CHP.NtSkCn)
+ JR NZ,PL1D
+ LD DE,VRS.ChanC+12-100
+ LD C,(IY-100+VRS.AdInPtC)
+ LD B,(IY-100+VRS.AdInPtC+1)
+ CALL PTDECOD
+ LD (IY-100+VRS.AdInPtC),C
+ LD (IY-100+VRS.AdInPtC+1),B
+
+PL1D LD A,(IY-100+VRS.Delay)
+ LD (IY-100+VRS.DelyCnt),A
+
+PL2 LD DE,VRS.ChanA-100
+ LD L,(IY-100+VRS.AYREGS+TonA)
+ LD H,(IY-100+VRS.AYREGS+TonA+1)
+ CALL CHREGS
+ LD (IY-100+VRS.AYREGS+TonA),L
+ LD (IY-100+VRS.AYREGS+TonA+1),H
+Ampl EQU $+1
+ LD A,#3E
+ LD (IY-100+VRS.AYREGS+AmplA),A
+ LD DE,VRS.ChanB-100
+ LD L,(IY-100+VRS.AYREGS+TonB)
+ LD H,(IY-100+VRS.AYREGS+TonB+1)
+ CALL CHREGS
+ LD (IY-100+VRS.AYREGS+TonB),L
+ LD (IY-100+VRS.AYREGS+TonB+1),H
+ LD A,(Ampl)
+ LD (IY-100+VRS.AYREGS+AmplB),A
+ LD DE,VRS.ChanC-100
+ LD L,(IY-100+VRS.AYREGS+TonC)
+ LD H,(IY-100+VRS.AYREGS+TonC+1)
+ CALL CHREGS
+ LD (IY-100+VRS.AYREGS+TonC),L
+ LD (IY-100+VRS.AYREGS+TonC+1),H
+ LD A,(Ampl)
+ LD (IY-100+VRS.AYREGS+AmplC),A
+
+ LD A,(IY-100+VRS.Ns_Base)
+ ADD (IY-100+VRS.AddToNs)
+ LD (IY-100+VRS.AYREGS+Noise),A
+
+ LD A,(IY-100+VRS.AddToEn)
+ LD E,A
+ ADD A,A
+ SBC A,A
+ LD D,A
+ LD L,(IY-100+VRS.EnvBase)
+ LD H,(IY-100+VRS.EnvBase+1)
+ ADD HL,DE
+ LD E,(IY-100+VRS.CurESld)
+ LD D,(IY-100+VRS.CurESld+1)
+ ADD HL,DE
+ LD (IY-100+VRS.AYREGS+Env),L
+ LD (IY-100+VRS.AYREGS+Env+1),H
+
+ XOR A
+ OR (IY-100+VRS.CurEDel)
+ RET Z
+ DEC (IY-100+VRS.CurEDel)
+ RET NZ
+ LD A,(IY-100+VRS.Env_Del)
+ LD (IY-100+VRS.CurEDel),A
+ LD L,(IY-100+VRS.ESldAdd)
+ LD H,(IY-100+VRS.ESldAdd+1)
+ ADD HL,DE
+ JP SETESLD
+
+PLAY LD IY,VARS1+100
+ CALL PLAY_
+ LD A,(is_ts)
+ AND A
+ JR Z,PL_nts
+ LD IY,VARS2+100
+ CALL PLAY_
+PL_nts
+ IF Basic
+ LD IY,#5C3A
+ ENDIF
+
+ROUT LD BC,#FFFD
+ LD A,(is_ts)
+ AND A
+ JR Z,r_nts ;keep old standard
+ OUT (C),B
+r_nts EX AF,AF'
+
+ IF ACBBAC
+ LD IX,VARS1+VRS.AYREGS
+ ELSE
+ LD HL,VARS1+VRS.AYREGS
+ ENDIF
+
+ CALL ROUT_
+ EX AF,AF'
+ RET Z
+ LD B,D
+ CPL
+ OUT (C),A
+
+ IF ACBBAC
+ LD IX,VARS2+VRS.AYREGS
+ ELSE
+ LD HL,VARS2+VRS.AYREGS
+ ENDIF
+
+ROUT_
+ IF ACBBAC
+ LD A,(SETUP)
+ AND 12
+ JR Z,ABC
+ ADD A,CHTABLE
+ LD E,A
+ ADC A,CHTABLE/256
+ SUB E
+ LD D,A
+ LD B,0
+ PUSH IX
+ POP HL
+ LD A,(DE)
+ INC DE
+ LD C,A
+ ADD HL,BC
+ LD A,(IX+TonB)
+ LD C,(HL)
+ LD (IX+TonB),C
+ LD (HL),A
+ INC HL
+ LD A,(IX+TonB+1)
+ LD C,(HL)
+ LD (IX+TonB+1),C
+ LD (HL),A
+ LD A,(DE)
+ INC DE
+ LD C,A
+ ADD HL,BC
+ LD A,(IX+AmplB)
+ LD C,(HL)
+ LD (IX+AmplB),C
+ LD (HL),A
+ LD A,(DE)
+ INC DE
+ LD (RxCA1),A
+ XOR 8
+ LD (RxCA2),A
+ LD A,(DE)
+ AND (IX+Mixer)
+ LD E,A
+ LD A,(IX+Mixer)
+RxCA1 DB #E6
+ AND %010010
+ OR E
+ LD E,A
+ LD A,(IX+Mixer)
+ AND %010010
+RxCA2 OR E
+ OR E
+ LD (IX+Mixer),A
+ABC
+ ENDIF
+
+ XOR A
+ LD DE,#FFBF
+
+ IF ACBBAC
+ LD BC,#FFFD
+ PUSH IX
+ POP HL
+ ENDIF
+
+LOUT OUT (C),A
+ LD B,E
+ OUTI
+ LD B,D
+ INC A
+ CP 13
+ JR NZ,LOUT
+ OUT (C),A
+ LD A,(HL)
+ AND A
+ RET M
+ LD B,E
+ OUT (C),A
+ RET
+
+ IF ACBBAC
+CHTABLE EQU $-4
+ DB 4,5,15,%001001,0,7,7,%100100
+ ENDIF
+
+NT_DATA DB (T_NEW_0-T1_)*2
+ DB TCNEW_0-T_
+ DB (T_OLD_0-T1_)*2+1
+ DB TCOLD_0-T_
+ DB (T_NEW_1-T1_)*2+1
+ DB TCNEW_1-T_
+ DB (T_OLD_1-T1_)*2+1
+ DB TCOLD_1-T_
+ DB (T_NEW_2-T1_)*2
+ DB TCNEW_2-T_
+ DB (T_OLD_2-T1_)*2
+ DB TCOLD_2-T_
+ DB (T_NEW_3-T1_)*2
+ DB TCNEW_3-T_
+ DB (T_OLD_3-T1_)*2
+ DB TCOLD_3-T_
+
+T_
+
+TCOLD_0 DB #00+1,#04+1,#08+1,#0A+1,#0C+1,#0E+1,#12+1,#14+1
+ DB #18+1,#24+1,#3C+1,0
+TCOLD_1 DB #5C+1,0
+TCOLD_2 DB #30+1,#36+1,#4C+1,#52+1,#5E+1,#70+1,#82,#8C,#9C
+ DB #9E,#A0,#A6,#A8,#AA,#AC,#AE,#AE,0
+TCNEW_3 DB #56+1
+TCOLD_3 DB #1E+1,#22+1,#24+1,#28+1,#2C+1,#2E+1,#32+1,#BE+1,0
+TCNEW_0 DB #1C+1,#20+1,#22+1,#26+1,#2A+1,#2C+1,#30+1,#54+1
+ DB #BC+1,#BE+1,0
+TCNEW_1 EQU TCOLD_1
+TCNEW_2 DB #1A+1,#20+1,#24+1,#28+1,#2A+1,#3A+1,#4C+1,#5E+1
+ DB #BA+1,#BC+1,#BE+1,0
+
+PT3EMPTYORN EQU $-1
+ DB 1,0
+
+;first 12 values of tone tables (packed)
+
+T_PACK DB #06EC*2/256,#06EC*2
+ DB #0755-#06EC
+ DB #07C5-#0755
+ DB #083B-#07C5
+ DB #08B8-#083B
+ DB #093D-#08B8
+ DB #09CA-#093D
+ DB #0A5F-#09CA
+ DB #0AFC-#0A5F
+ DB #0BA4-#0AFC
+ DB #0C55-#0BA4
+ DB #0D10-#0C55
+ DB #066D*2/256,#066D*2
+ DB #06CF-#066D
+ DB #0737-#06CF
+ DB #07A4-#0737
+ DB #0819-#07A4
+ DB #0894-#0819
+ DB #0917-#0894
+ DB #09A1-#0917
+ DB #0A33-#09A1
+ DB #0ACF-#0A33
+ DB #0B73-#0ACF
+ DB #0C22-#0B73
+ DB #0CDA-#0C22
+ DB #0704*2/256,#0704*2
+ DB #076E-#0704
+ DB #07E0-#076E
+ DB #0858-#07E0
+ DB #08D6-#0858
+ DB #095C-#08D6
+ DB #09EC-#095C
+ DB #0A82-#09EC
+ DB #0B22-#0A82
+ DB #0BCC-#0B22
+ DB #0C80-#0BCC
+ DB #0D3E-#0C80
+ DB #07E0*2/256,#07E0*2
+ DB #0858-#07E0
+ DB #08E0-#0858
+ DB #0960-#08E0
+ DB #09F0-#0960
+ DB #0A88-#09F0
+ DB #0B28-#0A88
+ DB #0BD8-#0B28
+ DB #0C80-#0BD8
+ DB #0D60-#0C80
+ DB #0E10-#0D60
+ DB #0EF8-#0E10
+
+;vars from here can be stripped
+;you can move VARS to any other address
+
+VARS
+
+is_ts DB 0
+
+;ChannelsVars
+ STRUCT CHP
+;reset group
+PsInOr DB 0
+PsInSm DB 0
+CrAmSl DB 0
+CrNsSl DB 0
+CrEnSl DB 0
+TSlCnt DB 0
+CrTnSl DW 0
+TnAcc DW 0
+COnOff DB 0
+;reset group
+
+OnOffD DB 0
+
+;IX for PTDECOD here (+12)
+OffOnD DB 0
+OrnPtr DW 0
+SamPtr DW 0
+NNtSkp DB 0
+Note DB 0
+SlToNt DB 0
+Env_En DB 0
+Flags DB 0
+ ;Enabled - 0, SimpleGliss - 2
+TnSlDl DB 0
+TSlStp DW 0
+TnDelt DW 0
+NtSkCn DB 0
+Volume DB 0
+ ENDS
+
+ STRUCT VRS
+
+;IF not works in STRUCT in SjASM :(
+; IF CurPosCounter
+CurPos DB 0
+PosSub DB 0
+; ENDIF
+
+ModNum DB 0 ;bit0: ChipNum
+ ;bit1: 1-reversed patterns order (AlCo TS)
+
+ChanA DS CHP
+ChanB DS CHP
+ChanC DS CHP
+
+;GlobalVars
+MODADDR DW 0
+OrnPtrs DW 0
+SamPtrs DW 0
+PatsPtr DW 0
+AdInPtA DW 0
+AdInPtB DW 0
+AdInPtC DW 0
+CrPsPtr DW 0
+LPosPtr DW 0
+Delay DB 0
+DelyCnt DB 0
+ESldAdd DW 0
+CurESld DW 0
+Env_Del DB 0
+CurEDel DB 0
+Ns_Base DB 0
+AddToNs DB 0
+AddToEn DB 0
+EnvBase DW 0
+AYREGS DS 14
+ ENDS
+
+VARS1 DS VRS
+VARS2 DS VRS
+
+VT_ EQU $-16
+ DS 256-16 ;CreatedVolumeTableAddress
+
+T1_ EQU VT_+16 ;Tone tables data depacked here
+
+T_OLD_1 EQU T1_
+T_OLD_2 EQU T_OLD_1+24
+T_OLD_3 EQU T_OLD_2+24
+T_OLD_0 EQU T_OLD_3+2
+T_NEW_0 EQU T_OLD_0
+T_NEW_1 EQU T_OLD_1
+T_NEW_2 EQU T_NEW_0+24
+T_NEW_3 EQU T_OLD_3
+
+PT2EMPTYORN EQU VT_+31 ;1,0,0 sequence
+
+NT_ DS 192 ;CreatedNoteTableAddress
+
+VAR0END EQU VT_+16 ;INIT zeroes from VARS to VAR0END-1
+
+VARSEND EQU $
+
+MDLADDR EQU $
+
+;Release 0 steps:
+;04/21/2007
+;Works start (PTxPlay adaptation); first beta.
+;04/22/2007
+;Job finished; beta-testing.
+;04/23/2007
+;PT v3.7 TS mode corrected (after AlCo remarks).
+;04/29/2007
+;Added 1.XX and 2.XX special commands interpretation for PT3
+;modules of v3.7+.
+
+;Size (minimal build for ZX Spectrum):
+;Code block #908 bytes
+;Variables #2BF bytes (can be stripped)
+;Total size #908+#2BF=#BC7 (3015) bytes
diff --git a/software/ugophy/wifi.asm b/software/ugophy/wifi.asm
index 28c329e..e54c85b 100644
--- a/software/ugophy/wifi.asm
+++ b/software/ugophy/wifi.asm
@@ -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