跳转到主要内容

DWLOAD服务器采用Python实现

项目描述

DWLOAD服务器

DWLOAD服务器采用Python实现(开源,GPL v3或以上)。

将您的Dragon 32连接到您的PC并加载/保存基本列表。

Dragon32DriveWire1small.jpeg

快速入门

~$ 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字节扇区数据写入服务器上的文件

待办

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

历史记录

链接

论坛主题(英文) worldofdragon.org
论坛主题(德文) forum.classic-computing.de
PyPi https://pypi.python.org/pypi/dwload_server/
GitHub https://github.com/6809/DwLoadServer

一些项目相关链接

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

dwload_server-0.5.1.tar.gz (30.2 kB 查看哈希)

上传时间 源代码

构建分发

dwload_server-0.5.1-py3-none-any.whl (34.7 kB 查看哈希)

上传时间 Python 3

支持者