DWLOAD服务器采用Python实现
项目描述
DWLOAD服务器
DWLOAD服务器采用Python实现(开源,GPL v3或以上)。
将您的Dragon 32连接到您的PC并加载/保存基本列表。
快速入门
~$ git clone https://github.com/6809/DwLoadServer.git
~$ cd DwLoadServer
~/DwLoadServer$ ./devshell.py run serial
特性
- 通过DWLOAD加载/保存文件
- 动态转换ASCII基本列表(见下文)
- 动态"AUTOLOAD.DWL"(见下文)
- 保存时备份所有文件
- 支持USB适配器和Becker TCP/IP接口。
当前状态
测试过的DWEEBS
DWEEB | 示例 | 描述 |
---|---|---|
DLOAD | DLOAD |
加载AUTOLOAD.DWL (在Dragon启动时使用) |
SAVE | DLOAD"SAVE""MYFILE.BAS" |
保存BASIC列表 |
RESAVE | DLOAD"RESAVE""MYFILE.BAS" |
保存BASIC列表 |
实现了DriveWire事务
十六进制 | 十进制 | DW名称 | 描述 |
---|---|---|---|
$00 | 0 | OP_NOP | NOP事务 -> 忽略 |
$01 | 1 | OP_NAMEOBJ_MOUNT | 将文件挂载到虚拟驱动器号 |
$02 | 2 | OP_NAMEOBJ_CREATE | (在此实现中与OP_NAMEOBJ_MOUNT相同) |
$d2 | 210 | OP_READEX | 从DWLOAD服务器向客户端发送256字节扇区 |
$57 | 87 | OP_WRITE | 将客户端中的256字节扇区数据写入服务器上的文件 |
待办
- 增强
AUTOLOAD.DWL.py
,见:http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=5&t=4977 - 比较校验和
- 编写单元测试
Python 脚本
存在一种通过 Python 生成 DLOAD 响应的通用机制
- 在服务器根目录存储一个 Python 脚本,例如:"FOO.BAR.py"
- 在客户端 DLOAD 文件(没有 .py 扩展名),例如:
DLOAD"FOO.BAR"
该脚本将通过子进程调用,并且它必须将 Dragon DOS 二进制数据写回 stdout。
目前,只有一个 Python 脚本 文件:AUTOLOAD.DWL.py
(见下文)
动态 "AUTOLOAD.DWL"
存在一种生成动态 DWLOAD 菜单的方法。只需将文件 /dwload-demo-files/AUTOLOAD.DWL.py 复制到您的服务器根目录。
Python 脚本 读取服务器根目录并将所有文件列出到 DLOAD 菜单中。例如,服务器根目录看起来像这样
/HOME/FOO/DWLOAD-FILES
+--- AUTOLOAD.DWL.py
+--- HEXVIEW.BAS
+--- TEST.BAS
\--- SAVE
生成的列表看起来像这样
10 CLS
20 PRINT" *** DYNAMIC MENU *** 14:11:18"
30 PRINT"/HOME/FOO/DWLOAD-FILES"
40 PRINT" 0 - HEXVIEW.BAS"
50 PRINT" 1 - TEST.BAS"
60 PRINT" 2 - SAVE"
70 PRINT"PLEASE SELECT (X FOR RELOAD) !"
80 A$=INKEY$:IF A$="" GOTO 80
90 IF A$="X" THEN DLOAD
100 IF A$="0" THEN DLOAD"HEXVIEW.BAS"
110 IF A$="1" THEN DLOAD"TEST.BAS"
120 IF A$="2" THEN DLOAD"SAVE"
130 GOTO 10
见:http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=5&t=4977
您必须在 Dragon 上调用 DLOAD 来获取此菜单。因为一个 DLOAD 将请求 AUTOLOAD.DWL,Python 服务器将调用所有 .py 文件,如果存在,则调用 AUTOLOAD.DWL.py。
此功能使得以下文件
| /dwload_server/hooks/dynamic_dwl.py | 通用 API 到 'pyscript' 文件 | | /dwload_server/pyscripts/autoload_dwl.py | 生成 DWLOAD 菜单 |
即时转换 ASCII BASIC 列表
服务器读取/保存 ASCII BASIC 列表,并在即时将其发送/存储到 DWLOAD 客户端。因此,您可以在 PC 上编辑列表并在 Dragon 上尝试它们,而无需任何外部约定!
例如:保存
10 PRINT"HELLO WORLD!"
DLOAD"SAVE""HELLO.BAS"
DWLOAD
!
OK
服务器将创建两个文件
文件名 | 格式 | 描述 |
---|---|---|
HELLO.DWL | 原始标记的二进制文件 | 来自 Dragon 的 Dragon DOS 二进制格式数据(256 字节填充) |
HELLO.BAS | ASCII 列表 | 即时转换的 ASCII BASIC 列表 |
例如:加载(并执行)
DLOAD"HELLO.BAS"
!HELLO WORLD!
OK
(注意:第一个 !
来自 DWLOAD ROM 程序)
服务器将读取 HELLO.BAS
ASCII 列表,并在即时将其转换为所需的 Dragon DOS 二进制格式,并将此数据发送回 Dragon。
此功能使得以下文件
| /dwload_server/hooks/read_ascii.py | 读取 ASCII 列表并将其作为二进制发送到客户端 | | /dwload_server/hooks/save_ascii.py | 将客户端的二进制文件保存为 ASCII 到服务器 |
安装
通过 dev-shell 克隆源代码并通过引导启动,例如。
~$ git clone https://github.com/6809/DwLoadServer.git
~$ cd DwLoadServer
~/DwLoadServer$ ./devshell.py
...
Developer shell - DWLOAD Server - v0.4.0
Documented commands (use 'help -v' for verbose/'help <topic>' for details):
dev-shell commands
==================
fix_code_style poetry pytest tox
list_venv_packages publish pyupgrade update
DWLOAD Server Commands
======================
run
Uncategorized
=============
alias help history macro quit set shortcuts
(dwload_server) run --help
Usage: run [-h] [--root-dir ROOT_DIR] [--log-level {0, 10, 20, 30, 30, 40, 50, 50, 99, 100}] {becker, serial} ...
optional arguments:
-h, --help show this help message and exit
--root-dir ROOT_DIR
--log-level {0, 10, 20, 30, 30, 40, 50, 50, 99, 100}
Logging level: 10=DEBUG, 20=INFO, 30=WARNING, 40=ERROR, 50=CRITICAL/FATAL (default: 20)
Interface:
{becker, serial}
becker Use the Becker interface
serial Use the serial interface
(dwload_server) run serial
您也可以作为 cli 运行,例如:启动串行 DWLOAD 服务器
~/DwLoadServer$ ./devshell.py run serial
历史记录
- dev
- ...待续...
- 2022.11.09 - v0.5.0
- 现代化项目
- 通过 dev-shell 更容易引导
- 2014.11.20 - v0.4.0
- 通过 Python 脚本动态
AUTOLOAD.DWL
- 通过 Python 脚本动态
- 2014.11.19 - v0.3.0
- 在读取/写入时即时转换 "ASCII BASIC 列表" <-> "Dragon DOS 二进制"
- 2014.11.17 - v0.2.0
- 支持 Becker 和串行接口。
- 2014.11.14 - v0.1.0 - 创建在 Linux 和 Windows 上工作的引导文件。
- 2014.11.12 - v0.0.1 - 发送文件功能基本可用
- 2014.09.30 - 产生想法:论坛帖子 11893
链接
论坛主题(英文) | worldofdragon.org |
论坛主题(德文) | forum.classic-computing.de |
PyPi | https://pypi.python.org/pypi/dwload_server/ |
GitHub | https://github.com/6809/DwLoadServer |
一些项目相关链接
- 关于DWLOAD: http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=5&t=4964
- DWEEBS应用线程: http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=5&t=4968
- Dragon 32/64 DriveWire适配器: http://archive.worldofdragon.org/index.php?title=Dragon_32/64_Drivewire_Adapter
- Drivewire for dummies: http://archive.worldofdragon.org/index.php?title=Drivewire_for_dummies
- http://sourceforge.net/p/drivewireserver/wiki/DriveWire_Specification/
- http://sourceforge.net/p/drivewireserver/wiki/
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码分发
构建分发
dwload_server-0.5.1.tar.gz的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f1ce42c6113ae73f6e591dc4b1e94aec32e5a56ed6f8339e4fe8e7a16785e943 |
|
MD5 | 5cec6e9730c3e2b44c7853d6516bfaee |
|
BLAKE2b-256 | f03b0c96ea9f6c0bc20e14f7cafddae14cb287f891cec5239daf548b3525bacd |
dwload_server-0.5.1-py3-none-any.whl的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 747436d80377ec9b8805688f2139b96c85e9662f968a27ced1b14921c1c1efdf |
|
MD5 | a320393dc17a81897f3c6569f43fb8f3 |
|
BLAKE2b-256 | 4a03b15dc6a9b9d97a02c4048370abf044b38de8935ba0bf584c5358db1ac5da |