Skip to main content

DWLOAD server implemented in Python

Project description

DWLOAD Server

DWLOAD server implemented in Python (OpenSource, GPL v3 or above).

Connect your Dragon 32 into your PC and LOAD/SAVE basic listings.

Dragon32DriveWire1small.jpeg

Quickstart

~$ git clone https://github.com/6809/DwLoadServer.git
~$ cd DwLoadServer
~/DwLoadServer$ ./devshell.py run serial

features

  • load/save files via DWLOAD
  • on-the-fly converting ASCII BASIC listing (see below)
  • dynamic "AUTOLOAD.DWL" (see below)
  • backup all files on save
  • Support USB Adapter and Becker TCP/IP Interface.

current state

Tested DWEEBS:

DWEEB example Description
DLOAD DLOAD Load AUTOLOAD.DWL (Used on Dragon startup)
SAVE DLOAD"SAVE""MYFILE.BAS" Save BASIC listing
RESAVE DLOAD"RESAVE""MYFILE.BAS" Save BASIC listing

Implemented DriveWire Transactions:

hex dez DW name Description
$00 0 OP_NOP NOP Transaction -> ignored
$01 1 OP_NAMEOBJ_MOUNT Mount a file to a virtual drive number
$02 2 OP_NAMEOBJ_CREATE (Does in this implementation the same as OP_NAMEOBJ_MOUNT)
$d2 210 OP_READEX Send 256 bytes sector from the DWLOAD server to the client
$57 87 OP_WRITE Write 256 bytes sector of data from the client into a file on the server

TODO

pyscripts

There is a general machanism to generate DLOAD responses via Python:

  • Store in server root a python script, e.g.: "FOO.BAR.py"
  • DLOAD the file (without .py extension) on client, e.g.: DLOAD"FOO.BAR"

The script will be called via subprocess and it must write the Dragon DOS binary data back to stdout.

Currently, there is only one pyscript file: AUTOLOAD.DWL.py (see below)

dynamic "AUTOLOAD.DWL"

There exist a way to generate a dynamic DWLOAD menu. Just copy the file /dwload-demo-files/AUTOLOAD.DWL.py into your server root.

The pyscript reads the server root directory and list all files into the DLOAD menu. e.g. the server root looks like this:

/HOME/FOO/DWLOAD-FILES
  +--- AUTOLOAD.DWL.py
  +--- HEXVIEW.BAS
  +--- TEST.BAS
  \--- SAVE

The generated listing looks like this:

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

s.: http://archive.worldofdragon.org/phpBB3/viewtopic.php?f=5&t=4977

You must only call DLOAD on you Dragon to get this menu. Because a DLOAD will request AUTOLOAD.DWL and the Python server will all .py and call AUTOLOAD.DWL.py if exist.

This feature make the following file:

| /dwload_server/hooks/dynamic_dwl.py | general API to 'pyscript' files | | /dwload_server/pyscripts/autoload_dwl.py | generates the DWLOAD menu |

on-the-fly converting ASCII BASIC listing

The server read/save ASCII BASIC listing and send/store them to the DWLOAD client on-the-fly. So you can edit listings on your PC and try them on your Dragon without any external conventions!

e.g.: save

10 PRINT"HELLO WORLD!"
DLOAD"SAVE""HELLO.BAS"
DWLOAD
!
OK

The server will create two files:

filename format description
HELLO.DWL raw tokenized binary Dragon DOS Binary Format data from the Dragon (256 Bytes padded)
HELLO.BAS ASCII listing on-the-fly converted ASCII BASIC listing

e.g. load (and execute):

DLOAD"HELLO.BAS"
!HELLO WORLD!
OK

(Note: the first ! is from DWLOAD ROM routine)

The server will read the HELLO.BAS ASCII listing and convert is on-the-fly to the needed Dragon DOS Binary Format and send this back to the Dragon.

This feature make the following files:

| /dwload_server/hooks/read_ascii.py | read ASCII listing and send as binary to client | | /dwload_server/hooks/save_ascii.py | save binary from client as ASCII on server |

installation

Clone sources and bootstrap via dev-shell, e.g.:

~$ 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

You can also run as cli, e.g.: Start serial DWLOAD server:

~/DwLoadServer$ ./devshell.py run serial

History

  • dev
    • ...tbc...
  • 11.09.2022 - v0.5.0
    • Modernize project
    • Easier bootstrap via dev-shell
  • 20.11.2014 - v0.4.0
    • dynamic AUTOLOAD.DWL via Python script
  • 19.11.2014 - v0.3.0
    • Convert "ASCII BASIC listing" <-> "Dragon DOS Binary" on-the-fly while read/write
  • 17.11.2014 - v0.2.0
    • Support Becker and Serial interface.
  • 14.11.2014 - v0.1.0 - Create bootstrap file that work under linux and windows.
  • 12.11.2014 - v0.0.1 - send a file works rudimentary
  • 30.09.2014 - Idea was born: Forum post 11893

Links

Forum Thread (en) worldofdragon.org
Forum Thread (de) forum.classic-computing.de
PyPi https://pypi.python.org/pypi/dwload_server/
Github https://github.com/6809/DwLoadServer

some project related links:

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dwload_server-0.5.0.tar.gz (31.4 kB view hashes)

Uploaded source

Built Distribution

dwload_server-0.5.0-py3-none-any.whl (34.7 kB view hashes)

Uploaded py3

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page