From 3fc269272bf07f45218038ecaca2e73e2507fd0c Mon Sep 17 00:00:00 2001 From: Lars Brinkhoff Date: Sun, 12 Jan 2020 17:08:19 +0100 Subject: [PATCH] PDP-10 Minskytron. Translated from the PDP-1 program. --- build/misc.tcl | 4 ++ doc/programs.md | 1 + src/lars/minsky.tron | 141 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 146 insertions(+) create mode 100644 src/lars/minsky.tron diff --git a/build/misc.tcl b/build/misc.tcl index 6baf571f..ba83dd94 100644 --- a/build/misc.tcl +++ b/build/misc.tcl @@ -609,6 +609,10 @@ respond "*" ":midas /t dsk0: .; @ munch_lars; munch\r" respond "with ^C" ".iotlsr==jfcl\r\003" expect ":KILL" +# Minskytron, translated from PDP-1. +respond "*" ":midas lars; ts minsky_minsky tron\r" +expect ":KILL" + # PI respond "*" ":midas sys3;ts pi_rwg; ran\r" expect ":KILL" diff --git a/doc/programs.md b/doc/programs.md index 50a84f85..698c89af 100644 --- a/doc/programs.md +++ b/doc/programs.md @@ -212,6 +212,7 @@ - MINI36, mini Chaosnet file server (36-bit). - MINITS, mini-ITS network utility. - MINIC, mini Chaosnet file server (old). +- MINSKY TRON, display hack translated from the PDP-1. - MLDEV/MLSLV, allows access to remote systems as devices (e.g. DB:). - MLIFE, Mike Speciner's Conway Life. - MODEMS, modems dragon. diff --git a/src/lars/minsky.tron b/src/lars/minsky.tron new file mode 100644 index 00000000..70f393cc --- /dev/null +++ b/src/lars/minsky.tron @@ -0,0 +1,141 @@ +TITLE MINSKYTRON + +;Set switches to e.g. 677721. + +A=1 +B=2 +XY=3 +P=17 + +APR==0 +DIS=130 + +LOC 41 + JRST NTS + +LOC 100 +GO: SETO A, + .IOTLSR A, ;If NTS, go to UUO hander at 41. + +NTS: CONO DIS,100 ;Reset display. + DATAO DIS,[020016] ;Parameter mode, go to point mode. + MOVE XY,[220000,,022000];Two point mode words. + + DATAI APR,A ;Get switches. + HRLZ B,A +M1: JSP P,GSH ;Make six shift instructions. + MOVEM A,SH0 + JSP P,GSH + MOVEM A,SH1 + JSP P,GSH + MOVEM A,SH2 + JSP P,GSH + MOVEM A,SH3 + JSP P,GSH + MOVEM A,SH4 + JSP P,GSH + MOVEM A,SH5 +M2: MOVE A,XA0 ;Copy the initial state. + MOVEM A,XA + MOVE A,XB0 + MOVEM A,XB + MOVE A,XC0 + MOVEM A,XC + MOVE A,YA0 + MOVEM A,YA + MOVE A,YB0 + MOVEM A,YB + MOVE A,YC0 + MOVEM A,YC + +M3A: MOVE A,XA ;Update XA and YA. + ADD A,XB + HRRES A + XCT SH0 + ADD A,YA + MOVEM A,YA + SUB A,YB + HRRES A + XCT SH1 + MOVNS A + ADD A,XA + MOVEM A,XA + MOVE B,YA + JSP P,DPY +M3B: MOVE A,XB ;Update XB and YB. + SUB A,XC + HRRES A + XCT SH2 + ADD A,YB + MOVEM A,YB + SUB A,YC + HRRES A + XCT SH3 + MOVNS A + ADD A,XB + MOVEM A,XB + MOVE B,YB + JSP P,DPY +M3C: MOVE A,XC ;Update XC and YC. + SUB A,XA + HRRES A + XCT SH4 + ADD A,YC + MOVEM A,YC + SUB A,YA + HRRES A + XCT SH5 + MOVNS A + ADD A,XC + MOVEM A,XC + MOVE B,YC + JSP P,DPY + + JSP P,DELAY + JRST M3A + +GSH: SETZ A, ;Get a shift instruction. + ROTC A,3 + MOVE A,GST(A) + JRST (P) + +GST: REPEAT 9.,[ASH A,-1-.RPCNT +] + +DPY: LSH A,-8 ;Display a point at A,B. + LSH B,-8 + ADDI A,512. + ADDI B,512. + DPB A,[001200,,XY] + DPB B,[221200,,XY] + CONSO DIS,200 ;Wait for display. + JRST .-1 + DATAO DIS,XY ;Send display instruction. + JRST (P) + +DELAY: MOVE A,[10000.] + SOJGE A,. + JRST (P) + +XA0: -137016/3 +XB0: 0 +XC0: 020000/3 +YA0: 0 +YB0: 060000/3 +YC0: 0 + +XA: 0 +XB: 0 +XC: 0 +YA: 0 +YB: 0 +YC: 0 + +SH0: 0 +SH1: 0 +SH2: 0 +SH3: 0 +SH4: 0 +SH5: 0 + +END GO