{"id":16164703,"url":"https://github.com/johnsonjh/cpm-vax","last_synced_at":"2025-09-14T06:15:53.033Z","repository":{"id":52851677,"uuid":"352769300","full_name":"johnsonjh/cpm-vax","owner":"johnsonjh","description":"cpm-vax: CP/M-VAX is a port of CP/M-68K to the VAXstation 2000 by Roger Ivie","archived":false,"fork":false,"pushed_at":"2023-12-03T01:32:13.000Z","size":3301,"stargazers_count":19,"open_issues_count":0,"forks_count":1,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-02-28T12:47:00.377Z","etag":null,"topics":["cpm","cpm-68000","cpm-68k","cpm-vax","vax","vaxstation","vaxstation-2000"],"latest_commit_sha":null,"homepage":"https://github.com/johnsonjh/cpm-vax","language":"C","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/johnsonjh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-03-29T20:00:59.000Z","updated_at":"2024-12-28T23:29:44.000Z","dependencies_parsed_at":"2024-10-27T19:18:02.904Z","dependency_job_id":"76b13062-861f-4fc0-8f2b-c5fe1181b8e9","html_url":"https://github.com/johnsonjh/cpm-vax","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnsonjh%2Fcpm-vax","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnsonjh%2Fcpm-vax/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnsonjh%2Fcpm-vax/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johnsonjh%2Fcpm-vax/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/johnsonjh","download_url":"https://codeload.github.com/johnsonjh/cpm-vax/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243955475,"owners_count":20374369,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpm","cpm-68000","cpm-68k","cpm-vax","vax","vaxstation","vaxstation-2000"],"created_at":"2024-10-10T02:47:29.059Z","updated_at":"2025-03-18T23:30:33.746Z","avatar_url":"https://github.com/johnsonjh.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# CP/M-VAX\n\nThis is a port of **CP/M-68K** to the *Micro*VAX 2000.\n\n## What's included\n\nIt combines the system-independent portion of **CP/M-68K** (which was originally\nwritten in C) with support code to make it work on a **VAX**, specifically, the\n*Micro*VAX 2000. Currently, the system is downloaded via the Ethernet using\n_MOP_ and uses a RAM disk included as part of the image.\n\n## What you need\n\nIn order to run **CP/M-VAX**, you will need:\n\n- A *Micro*VAX 2000 with _at least_ 2MB of RAM.\n- A serial console connected via a BCC08 (or equivalent) cable.\n- A host from which the image may be booted. (I'm using NetBSD/x86 with `mopd`.)\n- The system image: [BIN/cpm-vax.bin](BIN/cpm-vax.bin).\n\nAs you can well imagine, there are not many applications available for\n**CP/M-VAX**. In the disk image, you will find two: `CFORTH.VAX` and\n`CIRC4TH.VAX`. Both are non-standard **FORTH** systems I created to allow me to\nfiddle with **CP/M-VAX**. Neither are very exciting.\n\nIt's been a while since I played with this, but I'm pretty certain that\n`CIRC4TH.VAX` was the one I was using. It's a bit more robust than `CFORTH.VAX`\nbecause it uses a circular math stack, making it impossible for the stack to go\nwandering off into memory and corrupting the system.\n\n## Running CP/M-VAX\n\nYou need to arrange for your host system to boot `cpm-vax.bin` for your\n*Micro*VAX 2000. Since I'm using `mopd` on NetBSD, this involves placing the\nfile in `/tftpboot/mop` using a filename derived from the Ethernet MAC address\nof the target.\n\nHere's what a session looks like from copying the image to running `CIRC4TH`:\n\n```text\nstench\u003e cp cpm-vax.bin /tftpboot/mop/08002b03f1c4.SYS\nstench\u003e kermit\nC-Kermit 8.0.209, 17 Mar 2003, for NetBSD\n Copyright (C) 1985, 2003,\n  Trustees of Columbia University in the City of New York.\nType ? or HELP for help.\n(/home/rivie/booger/) C-Kermit\u003eset line /dev/tty01\n(/home/rivie/booger/) C-Kermit\u003eset baud 9600\n/dev/tty01, 9600 bps\n(/home/rivie/booger/) C-Kermit\u003eset carrier off\n(/home/rivie/booger/) C-Kermit\u003ec\nConnecting to /dev/tty01, speed 9600\n Escape character: Ctrl-\\ (ASCII 28, FS): enabled\nType the escape character followed by C to get back,\nor followed by ? to see other options.\n----------------------------------------------------\n\n\n\nKA410-A V1.2\n\nF...E...D...C...B...A...9...8...7...6...5...4_..3_..2_..1...\n\n\n ?  E  0040  0000.0045\n ?  D  0050  0000.0005\n ?  C  0080  0000.4001\n ?  6  00A0  0400.6001\n\n\n 83 BOOT SYS\n-ESA0\nCP/M-68K(tm), Version 1.2, Copyright (c) 1984, Digital Research\nA\u003edir\nA: CFORTH   VAX : CIRC4TH  VAX\nA\u003ecirc4th\n\nCP/M-VAX FORTH\n\nVLIST\nCOLD FCB DOES\u003e BDOS BASEPAGE HALT 2 1 0 PAD BL B/BUF HLD CSP DPL BASE\nSTATE CURRENT IN DP TIB (TIB) EXIT INTERPRET .CPU ABORT QUIT NOP WHILE\nREPEAT AGAIN UNTIL BEGIN THEN ELSE IF ?STACK ?CSP ?PAIRS ?EXEC ?COMP\n?ERROR ERROR (FIND) EXECUTE WORD ' VLIST FORGET IMMEDIATE [COMPILE]\nCOMPILE CREATE LATEST SMUDGE PFA NFA CFA LFA ( -FIND (;CODE) EDOC CODE\nVARIABLE CONSTANT ; : ] ;S ID. EXPECT U. ? . D. .R D.R #S # SIGN #\u003e \u003c#\nSPACES NUMBER (NUMBER) HOLD ENCLOSE QUERY .\" (.\") COUNT TYPE DIGIT\nDECIMAL HEX SPACE CR ?TERMINAL .ON .OFF EMIT ?KEY KEY O, C, W, , ALLOT\nHERE DLITERAL LITERAL OLIT ZBLIT LIT BLANKS ERASE FILL CMOVE W! CVTWL@\n-- ++ 2! C! ! 2@ C@ @ M/MOD M/ M* S-\u003eD U/ U* DABS D+- DMINUS D- D+ \u003e\u003e \u003c\u003c\n*/ */MOD MOD / /MOD * MAX MIN ABS +- 1- 2+ 1+ NOT MINUS + \u003c\u003e \u003e U\u003c != =\n0\u003c 0= TOGGLE +! XOR OR AND \u003c - !CSP -DUP SP! SP@ 2DUP DROP DUP OVER ROT\nSWAP RP! RP@ R R\u003e \u003eR I LEAVE +LOOP LOOP DO (DO) (+LOOP) (LOOP) 0BRANCH\nBRANCH  OK\n0 BDOS\n\nA\u003e\n```\n\nLike I said, not terribly exciting.\n\n## Source code\n\nThe sources are derived from **CP/M-68K**. I have made a few minor changes to\nthe system to allow cross-compilation using a modern C compiler. I was using GCC\n2.95.3 built as the cross-compiler for NetBSD/VAX. However, I have been unable\nto build GCC 2.95.3 since I have upgraded my PC to NetBSD 3.0. Consequently, I\nam currently unable to rebuild the system.\n\nThe sources, as of the last time I quit fiddling with it [*2006-Feb-24*], are\nreproduced here. I believe they survived my recent disk crash, but (since I\ncan't currently rebuild them), I am not absolutely certain of that.\n\n- [SRC/apps/](SRC/apps/) contains the source code for the few applications I\n  have. These include `CFORTH` (built from `nv32forth.s`) and `CIRC4TH` (build\n  from `circforth.s`) as well as a few other little things like a \"_Hello\n  world!_\" program and whatnot. Not everything in this directory works. I\n  fiddled with the system interface a bit, and I'm not certain what is good and\n  what is not.\n\n- [SRC/exchange-0.1/](SRC/exchange-0.1/) contains a program that allows\n  manipulation of **CP/M** disk images. This is a version of **CP/M-68K**\n  configured to allow it to run under UNIX. I use this to manipulate the 8\" SSSD\n  disk image included as part of the system executable.\n\n- [SRC/mop/](SRC/mop/) contains the system source. The disk image is\n  `bdosPLM.img`; if you want to add files to or remove files from the built-in\n  disk image, this is the file to manipulate.\n\n- [SRC/tools/](SRC/tools/) contains a few tools needed to build the system. The\n  important ones are:\n\n  - `mkimage`, which converts a binary file to a C character array\n    initialization containing the file. This is used to include the disk image\n    into the system.\n  - `mkasmimage`, which converts a binary file to assembly source. This is the\n    result of a number of arguments with `binutils`, `gcc`, and `mopcopy` - that\n    I lost.\n\n- [SRC/mopcopy/](SRC/mopcopy/) which attaches a _MOP_ boot block to an image.\n  Part of the purpose of `mkasmimage` is to hide some details of the system so\n  that `mopcopy` will just throw up its hands in disgust and enter the image at\n  the beginning.\n\n## Conclusion\n\nYeah, I know it's all ugly, but I never got around to cleaning it up. Some of\nthe particularly strange bits in the Makefile are due to a problem I was having\nwith VAX `binutils`; `objcopy` seemed to want to emit at least 512 bytes for an\n`.aligned` section, so I had to pull out the sections individually and paste\nthem together.\n\n- _Roger Ivie_\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjohnsonjh%2Fcpm-vax","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjohnsonjh%2Fcpm-vax","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjohnsonjh%2Fcpm-vax/lists"}