{"id":499,"date":"2015-01-08T21:30:43","date_gmt":"2015-01-08T21:30:43","guid":{"rendered":"http:\/\/www.wickensonline.co.uk\/rc2012sc\/?p=499"},"modified":"2015-01-08T22:04:05","modified_gmt":"2015-01-08T22:04:05","slug":"peeking-into-the-corners-of-the-internet","status":"publish","type":"post","link":"http:\/\/www.wickensonline.co.uk\/rc2012sc\/2015\/01\/08\/peeking-into-the-corners-of-the-internet\/","title":{"rendered":"Peeking into the corners of the internet"},"content":{"rendered":"<p>This evening I decided that I was going to have a wander through the internet and see what I could dig up about 6502 programming and VAX or VAX\/VMS or OpenVMS. The ideal scenario would be an assembler that runs on the VAX and cross-compiles to the KIM-1 6502-based machine (when I get round to finding it!). I&#8217;d done this kind of investigation a month or so ago but helpfully didn&#8217;t bother recording the results! Doh! (my youngest is currently watching The Simpsons!)<\/p>\n<p>The first interesting titbit I came across was from <a title=\"6502.org\" href=\"http:\/\/forum.6502.org\/viewtopic.php?t=1818\" target=\"_blank\">6502.org<\/a>:<\/p>\n<blockquote><p>In 1983, Rescue on Fractalus and Ballblazer, the first releases from Lucasfilm Games, were built with a system written in Lisp. It was a 6502 assembler with Lisp syntax and a Lisp-style macro facility, written in Portable Standard Lisp, running in Berkeley Unix on a 4MB VAX 11\/750. Unfortunately it was eventually abandoned because the developer had left and it was a bit of a strain on the VAX that was shared by the whole development team.<\/p><\/blockquote>\n<div style=\"width: 346px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"\" src=\"http:\/\/upload.wikimedia.org\/wikipedia\/en\/9\/99\/A5200_Rescue_On_Fractalus.png\" alt=\"\" width=\"336\" height=\"240\" \/><p class=\"wp-caption-text\">Rescue on Fratalus as rendered on the Atari 5200<\/p><\/div>\n<p>Mental note made to fire up either a Spectrum, Atari or CBM-64 emulator at some point and give\u00a0<a title=\"Rescue on Fractalus!\" href=\"http:\/\/en.wikipedia.org\/wiki\/Rescue_on_Fractalus!\" target=\"_blank\">Rescue on Fractalus!<\/a> a whirl. Also mentioned on that site is\u00a0<a title=\"The Influence of the UNIX\u00ae 1 Operating System on the Development of Tw o Video Games\" href=\"http:\/\/www.langston.com\/Papers\/vidgam.pdf\" target=\"_blank\"><em>The Influence of the UNIX\u00ae 1 Operating System on the Development of\u00a0Two Video Games<\/em><\/a> which looks to be an interesting read, as well as\u00a0<a title=\"Garbage In\/Garbage Out\" href=\"http:\/\/www.pipeline.com\/~hbaker1\/sigplannotices\/sigcol04.pdf\" target=\"_blank\"><em>Garbage In\/Garbage Out<\/em><\/a> on the COMFY 6502 assembler.<\/p>\n<p>I did find the link I&#8217;d settled on last month,\u00a0<a title=\"Home Page, shortcut key=1\" href=\"http:\/\/pascal.hansotten.com\/\">Pascal for Small Machines<\/a>, here&#8217;s a quote:<\/p>\n<blockquote><p>In 1983 I joined Digital Equipment as system programmer and had access to first the PDP-11 RSX-11M Pascal compiler and a bit later the first versions of VAX\/VMS Pascal. And now things were possible that made me return to the Pascal-M compiler: cross-compile on VMS and run on the KIM-1! I had sources, so I spent all my lunch hours typing in the sources, compiling, testing, <strong>all possible on those excellent Digital machines<\/strong>!<\/p><\/blockquote>\n<p>&#8230; a man to my own heart!<\/p>\n<p>Pascal was the first programming language I learned, formally, in the first year of my University Degree, on a VAX. I kept all my coursework for a good few years but ended up dumping literally about five years before I got back into the VAX\/VMS &#8216;scene&#8217; with my first VAX a VAXstation 4000\/90. Ho hum. Anyway, I&#8217;ve downloaded Pascal-M and will compile it up and have a play.<\/p>\n<p>Little was I aware that first year of college, sitting in the warm computer room on a cold winter day, in front of a <a title=\"VT320 demo using VAX APL 4.0\" href=\"https:\/\/www.youtube.com\/watch?v=zqtWqmEmqEA\" target=\"_blank\">DEC VT320<\/a> terminal (does this remind you of a <a title=\"An infocom classic!\" href=\"http:\/\/en.wikipedia.org\/wiki\/The_Lurking_Horror\" target=\"_blank\">certain computer game<\/a>?) what a fantastic implementation of Pascal I was using. Typically we were set pretty noddy tasks (fair enough on a first year computer programming course I guess) when lurking in the depths of the language was such a powerful implementation with full access to all the facilities. It&#8217;s very comforting to know that the <a href=\"http:\/\/www.pascal-central.com\/interview1.html\" target=\"_blank\">architect of Pascal<\/a>, <a href=\"https:\/\/www.linkedin.com\/pub\/john-reagan\/6\/819\/81a\" target=\"_blank\">John Reagan<\/a>, is now employed by the OpenVMS resurrection company <a title=\"VMS Software\" href=\"http:\/\/www.vmssoftware.com\/\" target=\"_blank\">VMS Software<\/a>.<\/p>\n<p>So, back on track I picked the first 6502 assembler I found down the google search list, <a href=\"http:\/\/www.ugu.com\/sui\/ugu\/showclassic?I=software.prog&amp;F=011111jss&amp;G=Y\" target=\"_blank\">as6502.tar.Z<\/a> clearly was a Unix implementation but what-the-heck, I&#8217;ll give it a whirl. Untar on linux, zip it up, ftp it to <a title=\"Website served by SIMVAX\" href=\"http:\/\/hecnet.eu\" target=\"_blank\">SIMVAX<\/a> and unzip it with -a option to ensure everything is converted to text.<\/p>\n<p>Given that I only had a Unix makefile to work with I hand compiled and linked the source files. Well, what do you know:<\/p>\n<pre class=\"theme:terminal height-set:true striped:false marking:false ranges:false nums:false tab-convert:true tab-size:8 lang:default decode:true\">$ unzip -aa as6502.zip\r\nArchive:  DSA1:[MSW.RC201501]AS6502.ZIP;1\r\n   creating: [.as6502]\r\n  inflating: [.as6502]assmtest       \r\n  inflating: [.as6502]assmtest.l     \r\n  inflating: [.as6502]assm.d2        \r\n  inflating: [.as6502]assm1.c        \r\n  inflating: [.as6502]user.nr        \r\n  inflating: [.as6502]assm2.c        \r\n  inflating: [.as6502]assm.d1        \r\n  inflating: [.as6502]assm0.c        \r\n  inflating: [.as6502]makefile       \r\n  inflating: [.as6502]as6502.1       \r\n  inflating: [.as6502]assm3.c        \r\n$ set def [.as6502]\r\n$ dir\r\n\r\nDirectory DSA1:[MSW.RC201501.AS6502]\r\n\r\nAS6502.1;1          ASSM.D1;1           ASSM.D2;1           ASSM0.C;1          \r\nASSM1.C;1           ASSM2.C;1           ASSM3.C;1           ASSMTEST.;1        \r\nASSMTEST.L;1        MAKEFILE.;1         USER.NR;1           \r\n\r\nTotal of 11 files.\r\n$ type makefile.\r\nas6502:         assm0.o assm1.o assm2.o assm3.o\r\n                cc -s -i assm0.o assm1.o assm2.o assm3.o -o as6502\r\n\r\nassm0.o:        assm.d1 assm.d2 assm0.c\r\n                cc -c -O assm0.c\r\n\r\nassm1.o:        assm.d1 assm.d2 assm1.c\r\n                cc -c -O assm1.c\r\n\r\nassm2.o:        assm.d1 assm.d2 assm2.c\r\n                cc -c -O assm2.c\r\n\r\nassm3.o:        assm.d1 assm.d2 assm3.c\r\n                cc -c -O assm3.c\r\n\r\ncheck:          assmtest.l\r\n\r\nassmtest.l:     as6502\r\n                as6502 -nisv assmtest &gt; temp\r\n                touch assmtest.l\r\n                diff assmtest.l temp\r\n\r\nmanuals:        as6502.l user.l\r\n\r\nas6502.l:       as6502.1\r\n                man -d as6502.1 &gt; as6502.l\r\n\r\nuser.l:         user.nr\r\n                nroff user.nr &gt; user.l\r\n\r\nclean:\r\n                rm assm0.o assm1.o assm2.o assm3.o temp as6502.l user.l\r\n$ cc assm.d1+assm.d2+assm0.c\r\n        extern  FILE    *optr;\r\n        ................^\r\n%CC-E-NOSEMI, Missing \";\".\r\n                At line number 1 in DSA1:[MSW.RC201501.AS6502]ASSM.D2;1.\r\n\r\n        extern  FILE    *iptr;\r\n        ................^\r\n%CC-E-NOSEMI, Missing \";\".\r\n                At line number 2 in DSA1:[MSW.RC201501.AS6502]ASSM.D2;1.\r\n\r\n            typedef __FILE FILE;\r\n        ...................^\r\n%CC-E-NOLINKAGE, In this declaration, \"FILE\" has no linkage and has a prior\r\n declaration in this scope at line 1 in DSA1:[MSW.RC201501.AS6502]ASSM.D2;1.\r\n                At line number 81 in STDIO.\r\n\r\n        FILE    *optr;\r\n        ^\r\n%CC-E-NOTTYPEDEF, In this declaration, \"FILE\" does not name a type.\r\n                At line number 10 in DSA1:[MSW.RC201501.AS6502]ASSM0.C;1.\r\n\r\n        FILE    *iptr;\r\n        ^\r\n%CC-E-NOTTYPEDEF, In this declaration, \"FILE\" does not name a type.\r\n                At line number 11 in DSA1:[MSW.RC201501.AS6502]ASSM0.C;1.\r\n\r\n        };\r\n%VCG-I-NOBJECT, No object file produced.\r\n                At line number 152 in DSA1:[MSW.RC201501.AS6502]ASSM0.C;1.\r\n\r\n%VCG-I-SUMMARY, Completed with 5 error(s), 0 warning(s), and\r\n                1 informational messages.\r\n                At line number 152 in DSA1:[MSW.RC201501.AS6502]ASSM0.C;1.\r\n\r\n$ dir\r\n\r\nDirectory DSA1:[MSW.RC201501.AS6502]\r\n\r\nAS6502.1;1          ASSM.D1;1           ASSM.D2;1           ASSM0.C;1          \r\nASSM1.C;1           ASSM2.C;1           ASSM3.C;1           ASSMTEST.;1        \r\nASSMTEST.L;1        MAKEFILE.;1         USER.NR;1           \r\n\r\nTotal of 11 files.\r\n$ cc assm1.c\r\n                        for (i = 1; (c = tolower((*argv)[i])) != '\\0'; i++) {\r\n        .................................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"tolower\" is implicitly\r\n declared as a function.\r\n                At line number 36 in DSA1:[MSW.RC201501.AS6502]ASSM1.C;1.\r\n\r\n                        initialize(ac, av, argc);\r\n        ................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"initialize\" is\r\n implicitly declared as a function.\r\n                At line number 60 in DSA1:[MSW.RC201501.AS6502]ASSM1.C;1.\r\n\r\n                        while (readline() != -1)\r\n        .......................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"readline\" is implicitly\r\n declared as a function.\r\n                At line number 63 in DSA1:[MSW.RC201501.AS6502]ASSM1.C;1.\r\n\r\n                                assemble();\r\n        ........................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"assemble\" is implicitly\r\n declared as a function.\r\n                At line number 64 in DSA1:[MSW.RC201501.AS6502]ASSM1.C;1.\r\n\r\n                                                stprnt();\r\n        ........................................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"stprnt\" is implicitly\r\n declared as a function.\r\n                At line number 87 in DSA1:[MSW.RC201501.AS6502]ASSM1.C;1.\r\n\r\n                        wrapup();\r\n        ................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"wrapup\" is implicitly\r\n declared as a function.\r\n                At line number 90 in DSA1:[MSW.RC201501.AS6502]ASSM1.C;1.\r\n\r\n                        exit(1);\r\n        ................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"exit\" is implicitly\r\n declared as a function.\r\n                At line number 115 in DSA1:[MSW.RC201501.AS6502]ASSM1.C;1.\r\n\r\n                        exit(1);\r\n        ................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"exit\" is implicitly\r\n declared as a function.\r\n                At line number 119 in DSA1:[MSW.RC201501.AS6502]ASSM1.C;1.\r\n\r\n                                exit(1);\r\n        ........................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"exit\" is implicitly\r\n declared as a function.\r\n                At line number 124 in DSA1:[MSW.RC201501.AS6502]ASSM1.C;1.\r\n\r\n                        hexcon(4, j);\r\n        ................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"hexcon\" is implicitly\r\n declared as a function.\r\n                At line number 251 in DSA1:[MSW.RC201501.AS6502]ASSM1.C;1.\r\n\r\n%VCG-I-SUMMARY, Completed with 0 error(s), 0 warning(s), and\r\n                10 informational messages.\r\n                At line number 257 in DSA1:[MSW.RC201501.AS6502]ASSM1.C;1.\r\n\r\n$ dir\r\n\r\nDirectory DSA1:[MSW.RC201501.AS6502]\r\n\r\nAS6502.1;1          ASSM.D1;1           ASSM.D2;1           ASSM0.C;1          \r\nASSM1.C;1           ASSM1.OBJ;1         ASSM2.C;1           ASSM3.C;1          \r\nASSMTEST.;1         ASSMTEST.L;1        MAKEFILE.;1         USER.NR;1          \r\n\r\nTotal of 12 files.\r\n$ cc assm2.c\r\n                                println();\r\n        ........................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"println\" is implicitly\r\n declared as a function.\r\n                At line number 17 in DSA1:[MSW.RC201501.AS6502]ASSM2.C;1.\r\n\r\n                if (colsym(&amp;i) != 0 &amp;&amp; (lablptr = stlook()) == -1)\r\n        ............^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"colsym\" is implicitly\r\n declared as a function.\r\n                At line number 23 in DSA1:[MSW.RC201501.AS6502]ASSM2.C;1.\r\n\r\n                if (colsym(&amp;i) != 0 &amp;&amp; (lablptr = stlook()) == -1)\r\n        ..........................................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"stlook\" is implicitly\r\n declared as a function.\r\n                At line number 23 in DSA1:[MSW.RC201501.AS6502]ASSM2.C;1.\r\n\r\n                if ((flg = oplook(&amp;i)) &lt; 0) {   \/* collect operation code *\/\r\n        ...................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"oplook\" is implicitly\r\n declared as a function.\r\n                At line number 26 in DSA1:[MSW.RC201501.AS6502]ASSM2.C;1.\r\n\r\n                        labldef(loccnt);\r\n        ................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"labldef\" is implicitly\r\n declared as a function.\r\n                At line number 27 in DSA1:[MSW.RC201501.AS6502]ASSM2.C;1.\r\n\r\n                                error(\"Invalid operation code\");\r\n        ........................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"error\" is implicitly\r\n declared as a function.\r\n                At line number 29 in DSA1:[MSW.RC201501.AS6502]ASSM2.C;1.\r\n\r\n                                        loadlc(loccnt, 1, 0);\r\n        ................................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"loadlc\" is implicitly\r\n declared as a function.\r\n                At line number 32 in DSA1:[MSW.RC201501.AS6502]ASSM2.C;1.\r\n\r\n                                println();\r\n        ........................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"println\" is implicitly\r\n declared as a function.\r\n                At line number 33 in DSA1:[MSW.RC201501.AS6502]ASSM2.C;1.\r\n\r\n                        pseudo(&amp;i);\r\n        ................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"pseudo\" is implicitly\r\n declared as a function.\r\n                At line number 38 in DSA1:[MSW.RC201501.AS6502]ASSM2.C;1.\r\n\r\n                else if (labldef(loccnt) == -1)\r\n        .................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"labldef\" is implicitly\r\n declared as a function.\r\n                At line number 39 in DSA1:[MSW.RC201501.AS6502]ASSM2.C;1.\r\n\r\n                                class1();\r\n        ........................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"class1\" is implicitly\r\n declared as a function.\r\n                At line number 43 in DSA1:[MSW.RC201501.AS6502]ASSM2.C;1.\r\n\r\n                                class2(&amp;i);\r\n        ........................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"class2\" is implicitly\r\n declared as a function.\r\n                At line number 45 in DSA1:[MSW.RC201501.AS6502]ASSM2.C;1.\r\n\r\n                        else class3(&amp;i);\r\n        .....................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"class3\" is implicitly\r\n declared as a function.\r\n                At line number 46 in DSA1:[MSW.RC201501.AS6502]ASSM2.C;1.\r\n\r\n                                error(\"Symbol is reserved (A, X or Y)\");\r\n        ........................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"error\" is implicitly\r\n declared as a function.\r\n                At line number 93 in DSA1:[MSW.RC201501.AS6502]ASSM2.C;1.\r\n\r\n                        return(stinstal());\r\n        .......................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"stinstal\" is implicitly\r\n declared as a function.\r\n                At line number 122 in DSA1:[MSW.RC201501.AS6502]ASSM2.C;1.\r\n\r\n                                                return(stinstal());\r\n        ...............................................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"stinstal\" is implicitly\r\n declared as a function.\r\n                At line number 135 in DSA1:[MSW.RC201501.AS6502]ASSM2.C;1.\r\n\r\n                error(\"Symbol not found\");\r\n        ........^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"error\" is implicitly\r\n declared as a function.\r\n                At line number 144 in DSA1:[MSW.RC201501.AS6502]ASSM2.C;1.\r\n\r\n                        error(\"Symbol table full\");\r\n        ................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"error\" is implicitly\r\n declared as a function.\r\n                At line number 158 in DSA1:[MSW.RC201501.AS6502]ASSM2.C;1.\r\n\r\n                loadlc(loccnt, 0, 1);\r\n        ........^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"loadlc\" is implicitly\r\n declared as a function.\r\n                At line number 229 in DSA1:[MSW.RC201501.AS6502]ASSM2.C;1.\r\n\r\n                loadv(0,0,0);\r\n        ........^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"loadv\" is implicitly\r\n declared as a function.\r\n                At line number 231 in DSA1:[MSW.RC201501.AS6502]ASSM2.C;1.\r\n\r\n                hexcon(4, val);\r\n        ........^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"hexcon\" is implicitly\r\n declared as a function.\r\n                At line number 249 in DSA1:[MSW.RC201501.AS6502]ASSM2.C;1.\r\n\r\n                hexcon(2, val);\r\n        ........^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"hexcon\" is implicitly\r\n declared as a function.\r\n                At line number 280 in DSA1:[MSW.RC201501.AS6502]ASSM2.C;1.\r\n\r\n%VCG-I-SUMMARY, Completed with 0 error(s), 0 warning(s), and\r\n                22 informational messages.\r\n                At line number 376 in DSA1:[MSW.RC201501.AS6502]ASSM2.C;1.\r\n\r\n$ dir\r\n\r\nDirectory DSA1:[MSW.RC201501.AS6502]\r\n\r\nAS6502.1;1          ASSM.D1;1           ASSM.D2;1           ASSM0.C;1          \r\nASSM1.C;1           ASSM1.OBJ;1         ASSM2.C;1           ASSM2.OBJ;1        \r\nASSM3.C;1           ASSMTEST.;1         ASSMTEST.L;1        MAKEFILE.;1        \r\nUSER.NR;1           \r\n\r\nTotal of 13 files.\r\n$ cc assm3.c\r\n                        loadlc(loccnt, 0, 1);\r\n        ................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"loadlc\" is implicitly\r\n declared as a function.\r\n                At line number 10 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                        loadv(opval, 0, 1);\r\n        ................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"loadv\" is implicitly\r\n declared as a function.\r\n                At line number 11 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                        println();\r\n        ................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"println\" is implicitly\r\n declared as a function.\r\n                At line number 12 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                        loadlc(loccnt, 0, 1);\r\n        ................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"loadlc\" is implicitly\r\n declared as a function.\r\n                At line number 25 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                        loadv(opval, 0, 1);\r\n        ................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"loadv\" is implicitly\r\n declared as a function.\r\n                At line number 26 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                        if (evaluate(ip) != 0) {\r\n        ....................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"evaluate\" is implicitly\r\n declared as a function.\r\n                At line number 28 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                                println();\r\n        ........................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"println\" is implicitly\r\n declared as a function.\r\n                At line number 35 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                        else error(\"Invalid branch address\");\r\n        .....................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"error\" is implicitly\r\n declared as a function.\r\n                At line number 37 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                        error(\"Operand field missing\");\r\n        ................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"error\" is implicitly\r\n declared as a function.\r\n                At line number 58 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                        if (evaluate(ip) != 0)\r\n        ....................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"evaluate\" is implicitly\r\n declared as a function.\r\n                At line number 81 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                        error(\"Invalid addressing mode\");\r\n        ................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"error\" is implicitly\r\n declared as a function.\r\n                At line number 132 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                                loadlc(loccnt, 0, 1);\r\n        ........................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"loadlc\" is implicitly\r\n declared as a function.\r\n                At line number 140 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                                loadv(opval + 8, 0, 1);\r\n        ........................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"loadv\" is implicitly\r\n declared as a function.\r\n                At line number 141 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                                println();\r\n        ........................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"println\" is implicitly\r\n declared as a function.\r\n                At line number 142 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                                loadlc(loccnt, 0, 1);\r\n        ........................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"loadlc\" is implicitly\r\n declared as a function.\r\n                At line number 156 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                                loadv(opval, 0, 1);\r\n        ........................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"loadv\" is implicitly\r\n declared as a function.\r\n                At line number 157 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                                println();\r\n        ........................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"println\" is implicitly\r\n declared as a function.\r\n                At line number 159 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                                loadlc(loccnt, 0, 1);\r\n        ........................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"loadlc\" is implicitly\r\n declared as a function.\r\n                At line number 173 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                                loadv(opval, 0, 1);\r\n        ........................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"loadv\" is implicitly\r\n declared as a function.\r\n                At line number 174 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                                println();\r\n        ........................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"println\" is implicitly\r\n declared as a function.\r\n                At line number 177 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                        error(\"Invalid addressing mode\");\r\n        ................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"error\" is implicitly\r\n declared as a function.\r\n                At line number 182 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                        labldef(loccnt);\r\n        ................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"labldef\" is implicitly\r\n declared as a function.\r\n                At line number 198 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                        loadlc(loccnt, 0, 1);\r\n        ................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"loadlc\" is implicitly\r\n declared as a function.\r\n                At line number 199 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                                                        error(\"Unterminated ASCII string\");\r\n        ................................................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"error\" is implicitly\r\n declared as a function.\r\n                At line number 206 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                                                        loadv(tvalue, count, 1);\r\n        ................................................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"loadv\" is implicitly\r\n declared as a function.\r\n                At line number 220 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                                                                println();\r\n        ........................................................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"println\" is implicitly\r\n declared as a function.\r\n                At line number 222 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                                        if (evaluate(ip) != 0) {\r\n        ....................................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"evaluate\" is implicitly\r\n declared as a function.\r\n                At line number 234 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                                                error(\"Operand field size error\");\r\n        ........................................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"error\" is implicitly\r\n declared as a function.\r\n                At line number 240 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                                                loadv(value, count, 1);\r\n        ........................................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"loadv\" is implicitly\r\n declared as a function.\r\n                At line number 244 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                                                        println();\r\n        ................................................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"println\" is implicitly\r\n declared as a function.\r\n                At line number 246 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                                println();\r\n        ........................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"println\" is implicitly\r\n declared as a function.\r\n                At line number 257 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                        if (evaluate(ip) != 0)\r\n        ....................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"evaluate\" is implicitly\r\n declared as a function.\r\n                At line number 261 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                                        loadv(value, 0, 1);\r\n        ................................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"loadv\" is implicitly\r\n declared as a function.\r\n                At line number 280 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                                        error(\"Undefined symbol in operand field.\");\r\n        ................................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"error\" is implicitly\r\n declared as a function.\r\n                At line number 296 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                                        error(\"Undefined symbol in operand field.\");\r\n        ................................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"error\" is implicitly\r\n declared as a function.\r\n                At line number 305 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                                        loadv(value&gt;&gt;8, 0, 1);\r\n        ................................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"loadv\" is implicitly\r\n declared as a function.\r\n                At line number 337 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                                tvalue = colnum(ip);\r\n        .................................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"colnum\" is implicitly\r\n declared as a function.\r\n                At line number 370 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                                tvalue = symval(ip);\r\n        .................................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"symval\" is implicitly\r\n declared as a function.\r\n                At line number 374 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                                        error(\"Too many ['s in expression\");\r\n        ................................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"error\" is implicitly\r\n declared as a function.\r\n                At line number 390 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                                        error(\"No matching [ for ] in expression\");\r\n        ................................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"error\" is implicitly\r\n declared as a function.\r\n                At line number 404 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                                        error(\"High or low byte operator not first in operand field\");\r\n        ................................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"error\" is implicitly\r\n declared as a function.\r\n                At line number 447 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                        error(\"Missing ] in expression\");\r\n        ................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"error\" is implicitly\r\n declared as a function.\r\n                At line number 464 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                                error(\"Undefined symbol in operand field\");\r\n        ........................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"error\" is implicitly\r\n declared as a function.\r\n                At line number 472 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n                        error(\"Invalid operand field\");\r\n        ................^\r\n%CC-I-IMPLICITFUNC, In this statement, the identifier \"error\" is implicitly\r\n declared as a function.\r\n                At line number 479 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n%VCG-I-SUMMARY, Completed with 0 error(s), 0 warning(s), and\r\n                44 informational messages.\r\n                At line number 530 in DSA1:[MSW.RC201501.AS6502]ASSM3.C;1.\r\n\r\n$ dir\r\n\r\nDirectory DSA1:[MSW.RC201501.AS6502]\r\n\r\nAS6502.1;1          ASSM.D1;1           ASSM.D2;1           ASSM0.C;1          \r\nASSM1.C;1           ASSM1.OBJ;1         ASSM2.C;1           ASSM2.OBJ;1        \r\nASSM3.C;1           ASSM3.OBJ;1         ASSMTEST.;1         ASSMTEST.L;1       \r\nMAKEFILE.;1         USER.NR;1           \r\n\r\nTotal of 14 files.\r\n$ cc assm0.c\r\n$ type makefile.\r\nas6502:         assm0.o assm1.o assm2.o assm3.o\r\n                cc -s -i assm0.o assm1.o assm2.o assm3.o -o as6502\r\n\r\nassm0.o:        assm.d1 assm.d2 assm0.c\r\n                cc -c -O assm0.c\r\n\r\nassm1.o:        assm.d1 assm.d2 assm1.c\r\n                cc -c -O assm1.c\r\n\r\nassm2.o:        assm.d1 assm.d2 assm2.c\r\n                cc -c -O assm2.c\r\n\r\nassm3.o:        assm.d1 assm.d2 assm3.c\r\n                cc -c -O assm3.c\r\n\r\ncheck:          assmtest.l\r\n\r\nassmtest.l:     as6502\r\n                as6502 -nisv assmtest &gt; temp\r\n                touch assmtest.l\r\n                diff assmtest.l temp\r\n\r\nmanuals:        as6502.l user.l\r\n\r\nas6502.l:       as6502.1\r\n                man -d as6502.1 &gt; as6502.l\r\n\r\nuser.l:         user.nr\r\n                nroff user.nr &gt; user.l\r\n\r\nclean:\r\n                rm assm0.o assm1.o assm2.o assm3.o temp as6502.l user.l\r\n$ dir\r\n\r\nDirectory DSA1:[MSW.RC201501.AS6502]\r\n\r\nAS6502.1;1          ASSM.D1;1           ASSM.D2;1           ASSM0.C;1          \r\nASSM0.OBJ;1         ASSM1.C;1           ASSM1.OBJ;1         ASSM2.C;1          \r\nASSM2.OBJ;1         ASSM3.C;1           ASSM3.OBJ;1         ASSMTEST.;1        \r\nASSMTEST.L;1        MAKEFILE.;1         USER.NR;1           \r\n\r\nTotal of 15 files.\r\n$ link assm0,assm1,assm2,assm3\r\n$ dir\r\n\r\nDirectory DSA1:[MSW.RC201501.AS6502]\r\n\r\nAS6502.1;1          ASSM.D1;1           ASSM.D2;1           ASSM0.C;1          \r\nASSM0.EXE;1         ASSM0.OBJ;1         ASSM1.C;1           ASSM1.OBJ;1        \r\nASSM2.C;1           ASSM2.OBJ;1         ASSM3.C;1           ASSM3.OBJ;1        \r\nASSMTEST.;1         ASSMTEST.L;1        MAKEFILE.;1         USER.NR;1          \r\n\r\nTotal of 16 files.\r\n$ rename assm0.exe as6502.exe\r\n$ run as6502\r\nInvalid argument count (0).\r\n$ dir\r\n\r\nDirectory DSA1:[MSW.RC201501.AS6502]\r\n\r\nAS6502.1;1          AS6502.EXE;1        ASSM.D1;1           ASSM.D2;1          \r\nASSM0.C;1           ASSM0.OBJ;1         ASSM1.C;1           ASSM1.OBJ;1        \r\nASSM2.C;1           ASSM2.OBJ;1         ASSM3.C;1           ASSM3.OBJ;1        \r\nASSMTEST.;1         ASSMTEST.L;1        MAKEFILE.;1         USER.NR;1          \r\n\r\nTotal of 16 files.\r\n$ type assmtest.\r\n;******************************************\r\n; Test file for the 6502 assembler - as6502\r\n; assemble as\r\n;     as6502 -nisv assmtest\r\n; and compare output with assmtest.l\r\n;******************************************\r\n;; comment treatment\r\n;******************************************\r\naa = $10; ';' immediately after the '0'\r\nB = $20 space to comment subfield\r\nC = $30 tab to comment subfield\r\nDEFGHIjkl = $FFEE\r\nD =DEFGHIjkl\r\n;******************************************\r\n; Number formats\r\n;******************************************\r\nstart *= $4 ; location counter adjust\r\n .byte %0101 ; binary number\r\n .byte 022,@22 ; octal numbers - two forms\r\n .byte 22 ; decimal number\r\n .byte $22,$ff,$FF ; hex - upper\/lower case\r\n .byte 'a,'b ; single ASCII characters\r\n;******************************************\r\n;; ASCII character string\r\n;******************************************\r\n .byte \"abcd\\t\\n\",0 ;   tab and new line escaped\r\n;******************************************\r\n; Operation checks\r\n;******************************************\r\n .word aa+B ; addition\r\n .word aa-B ; subtraction\r\n .word aa*B ; multiplication\r\n .word B\/aa ; division\r\n .word C%B ; modulo\r\n .word B^C ; exclusive OR\r\n .word ~C ; one's complement\r\n .word B&amp;C ; logical AND\r\n .word aa|B ; logical OR\r\n .word &lt;D ; low byte\r\n .word &gt;D ; high byte\r\n .word * ; current location\r\n .word aa,B,C\r\n .word B*[aa+C] ; one level of parenthesis\r\n .dbyt D ; high byte-low byte word\r\n .word D\/256,D%256\r\n;******************************************\r\n; Addressing Mode Check\r\n;******************************************\r\n *=$0100\r\n lda =aa ; immediate addressing\r\n lda #aa ; immediate addressing, alternate\r\n lda D ; direct addessing\r\n LDA aa ; page zero addressing, aa &lt; 256\r\na1 = 512\r\na2 = 500\r\n lda a1-a2 ; also page zero\r\n asl A ; accumulator addressing\r\n AsL a ; accumulator addressing also\r\n brk ; implied addressing\r\n lda (aa,X) ; indirect,X addressing\r\n lda (aa),Y ; indirect,Y addressing\r\n lda aa,X ; zero page,X addressing\r\n lda D,X ; absolute,X addressing\r\n lda D,Y ; absolute,Y addressing\r\n bcc *-$10 ; relative addressing\r\n jmp (D) ; indirect addressing\r\n ldx aa,Y ; zero page,Y addressing\r\n ldx aa,y ; alternate index name\r\n .nlst\r\n;******************************************\r\n; opcode check\r\n;******************************************\r\n adc =01\r\n and =01\r\n asl A\r\n bcc *+2\r\n bcs *+2\r\n beq *+2\r\n bit $01\r\n bmi *+2\r\n bne *+2\r\n bpl *+2\r\n brk\r\n bvc *+2\r\n bvs *+2\r\n clc\r\n cld\r\n cli\r\n clv\r\n cmp =01\r\n cpx =01\r\n cpy =01\r\n dec $01\r\n dex\r\n dey\r\n eor =01\r\n inc $01\r\n inx\r\n iny\r\n jmp *+3\r\n jsr *+3\r\n lda =01\r\n ldx =01\r\n ldy =01\r\n lsr A\r\n nop\r\n ora =01\r\n pha\r\n php\r\n pla\r\n plp\r\n rol A\r\n ror A\r\n rti\r\n rts\r\n sbc =01\r\n sec\r\n sed\r\n sei\r\n sta $01\r\n stx $01\r\n sty $01\r\n tax\r\n tay\r\n tsx\r\n txa\r\n txs\r\n tya\r\n$ rename assmtest. assmtest.6502\r\n$ dir\r\n\r\nDirectory DSA1:[MSW.RC201501.AS6502]\r\n\r\nAS6502.1;1          AS6502.EXE;1        ASSM.D1;1           ASSM.D2;1          \r\nASSM0.C;1           ASSM0.OBJ;1         ASSM1.C;1           ASSM1.OBJ;1        \r\nASSM2.C;1           ASSM2.OBJ;1         ASSM3.C;1           ASSM3.OBJ;1        \r\nASSMTEST.6502;1     ASSMTEST.L;1        MAKEFILE.;1         USER.NR;1          \r\n\r\nTotal of 16 files.\r\n$ as6502:==\"$dsa1:[msw.rc201501.as6502]as6502.exe\r\n$ as6502 assmtest.6502\r\n   1                   ;******************************************\r\n   2                   ; Test file for the 6502 assembler - as6502\r\n   3                   ; assemble as\r\n   4                   ;     as6502 -nisv assmtest\r\n   5                   ; and compare output with assmtest.l\r\n   6                   ;******************************************\r\n   7                   ;                      ; comment treatment\r\n   8                   ;******************************************\r\n   9         10:00     aa      =     $10      ; ';' immediately after the '0'\r\n  10         20:00     B       =     $20      space to comment subfield\r\n  11         30:00     C       =     $30      tab to comment subfield\r\n  12         EE:FF     DEFGHIjkl =   $FFEE\r\n  13         EE:FF     D       =DEFGHIjkl\r\n  14                   ;******************************************\r\n  15                   ; Number formats\r\n  16                   ;******************************************\r\n  17         04:00     start   *=    $4        ; location counter adjust\r\n  18  04:00  05                .byte %0101     ; binary number\r\n  19  05:00  12 12             .byte 022,@22   ; octal numbers - two forms\r\n  20  07:00  16                .byte 22        ; decimal number\r\n  21  08:00  22 FF FF          .byte $22,$ff,$FF  ; hex - upper\/lower case\r\n  22  0B:00  61 62             .byte 'a,'b     ; single ASCII characters\r\n  23                   ;******************************************\r\n  24                   ;                      ; ASCII character string\r\n  25                   ;******************************************\r\n  26  0D:00  61 62 63          .byte \"abcd\\t\\n\",0  ;   tab and new line escaped\r\n      10:00  64 09 0A  \r\n      13:00  00        \r\n  27                   ;******************************************\r\n  28                   ; Operation checks\r\n  29                   ;******************************************\r\n  30  14:00  30 00             .word aa+B      ; addition\r\n  31  16:00  F0 FF             .word aa-B      ; subtraction\r\n  32  18:00  00 02             .word aa*B      ; multiplication\r\n  33  1A:00  02 00             .word B\/aa      ; division\r\n  34  1C:00  10 00             .word C%B       ; modulo\r\n  35  1E:00  10 00             .word B^C       ; exclusive OR\r\n  36  20:00  CF FF             .word ~C        ; one's complement\r\n  37  22:00  20 00             .word B&amp;C       ; logical AND\r\n  38  24:00  30 00             .word aa|B      ; logical OR\r\n  39  26:00  EE 00             .word &lt;D        ; low byte\r\n  40  28:00  FF 00             .word &gt;D        ; high byte\r\n  41  2A:00  2A 00             .word *         ; current location\r\n  42  2C:00  10 00             .word aa,B,C\r\n      2E:00  20 00     \r\n      30:00  30 00     \r\n  43  32:00  00 08             .word B*[aa+C]  ; one level of parenthesis\r\n  44  34:00  FF EE             .dbyt D         ; high byte-low byte word\r\n  45  36:00  FF 00             .word D\/256,D%256\r\n      38:00  EE 00     \r\n  46                   ;******************************************\r\n  47                   ; Addressing Mode Check\r\n  48                   ;******************************************\r\n  49         00:01             *=$0100\r\n  50  00:01  A9 10             lda   =aa       ; immediate addressing\r\n  51  02:01  A9 10             lda   #aa       ; immediate addressing, alternate\r\n  52  04:01  AD EE FF          lda   D         ; direct addessing\r\n  53  07:01  A5 10             LDA   aa        ; page zero addressing, aa &lt; 256\r\n  54         00:02     a1      =     512\r\n  55         F4:01     a2      =     500\r\n  56  09:01  A5 0C             lda   a1-a2     ; also page zero\r\n  57  0B:01  0A                asl   A         ; accumulator addressing\r\n  58  0C:01  0A                AsL   a         ; accumulator addressing also\r\n  59  0D:01  00                brk            ; implied addressing\r\n  60  0E:01  A1 10             lda   (aa,X)    ; indirect,X addressing\r\n  61  10:01  B1 10             lda   (aa),Y    ; indirect,Y addressing\r\n  62  12:01  B5 10             lda   aa,X      ; zero page,X addressing\r\n  63  14:01  BD EE FF          lda   D,X       ; absolute,X addressing\r\n  64  17:01  B9 EE FF          lda   D,Y       ; absolute,Y addressing\r\n  65  1A:01  90 EE             bcc   *-$10     ; relative addressing\r\n  66  1C:01  6C EE FF          jmp   (D)       ; indirect addressing\r\n  67  1F:01  B6 10             ldx   aa,Y      ; zero page,Y addressing\r\n  68  21:01  B6 10             ldx   aa,y      ; alternate index name\r\n$ \r\n<\/pre>\n<p>A successful assemble! You see C can be portable, it just needs to be appropriate vintage!<\/p>\n<p>On the same page an entry crossed my eye:<\/p>\n<p style=\"padding-left: 30px;\"><a href=\"http:\/\/www.ugu.com\/pub\/unix\/sec1\/foogol.tar.Z\"><b>foogol.tar.Z<\/b><\/a> &#8211; foogol foogol compiler for VAX<\/p>\n<p>Hmm&#8230; I downloaded it, here is the header of foogol.doc:<\/p>\n<pre class=\"theme:terminal striped:false tab-convert:true tab-size:8 lang:default decode:true\">fc.doc                                          Last modified: 1986-12-15\r\n\r\n\r\n                        The FOOGOL-IV compiler\r\n                   relese notes and documentation\r\n                           Per Lindberg, QZ\r\n                  The mad programmer strikes again!\r\n\r\nNAME\r\n        fc - foogol compiler\r\n\r\nSYNOPSIS\r\n        fc [ -d ] infile [ outfile ]\r\n\r\nDESCRIPTION\r\n        fc compiles a foogol program into VAX\/UNIX assembly language.\r\n        Default extentions are \".foo\" for the source file and \".s\"\r\n        for the compiled file. In other words, the resulting outfile\r\n        is is VAX\/UNIX assembly language, and can be assebled and\r\n        linked with the vanilla UNIX as and ld programs.\r\n<\/pre>\n<p>One error, and it&#8217;s a good one:<\/p>\n<pre class=\"theme:terminal striped:false tab-convert:true tab-size:8 lang:default decode:true \">$ cc\/nowarn foogol.c\r\n        remove(key) char *key; {\r\n        .................^\r\n%CC-E-PROMOTMATCH, In the definition of the function \"remove\", the promoted\r\n type of key is incompatible with the type of the corresponding parameter in a\r\n prior declaration.\r\n                At line number 274 in DSA1:[MSW.RC201501.FOOGOL]FOOGOL.C;1.\r\n<\/pre>\n<p>I suppose compiler error messages need to be\u00a0<em>exact,<\/em> but that is bordering on cryptic!<\/p>\n<p>It sounds to me like<em> remove()<\/em> is a function already defined in an include file. Maybe if I rename it I&#8217;ll cure the compile error? I rename\u00a0<em>remove()\u00a0<\/em>to be\u00a0<em>removek()<\/em> and all calls and bingo, compile success.<\/p>\n<pre class=\"theme:terminal striped:false marking:false ranges:false nums:false tab-convert:true tab-size:8 lang:default decode:true \">$ cc\/nowarn foogol.c\r\n$ link foogol\r\n$ foogol :== \"$dsa1:[msw.rc201501.foogol]foogol.exe\"\r\n$ foogol\r\n\r\n\r\nFoo: usage: 'fc [-debug] infile [outfile]'<\/pre>\n<p>However, I have no idea what the source file should look like, and no example file is included! Are, right OK, here is the key line from documentation file:<\/p>\n<blockquote><p>The foogol language is basically a very small ALGOL.<\/p><\/blockquote>\n<p>and also there is a small embedded program:<\/p>\n<pre class=\"lang:delphi decode:true \">begin\r\n  integer n, div, sub, test, testcopy, found, max;\r\n  test := 2; max := 10; \/* number of primes wanted *\/\r\n  while n # max do begin\r\n    div:= test-1; found:= 0;\r\n    while div-1 do begin\r\n      testcopy:= test; sub:= 0;\r\n      while testcopy do begin\r\n        sub:= sub+1; if sub = div then sub:= 0;\r\n        testcopy:= testcopy-1\r\n      end;\r\n      if sub = 0 then found:= 1;\r\n      div:= div-1\r\n    end;\r\n    if found = 0 then begin\r\n      n:= n+1;\r\n      printn(test); prints(\" is prime number \"); printn(n); print\r\n    end;\r\n    test:= test+1\r\n  end\r\nend\r\n<\/pre>\n<p>and that seems to compile:<\/p>\n<pre class=\"theme:terminal striped:false marking:false ranges:false nums:false lang:default decode:true\">$ foogol primes.foo\r\n$ dir\r\n\r\nDirectory DSA1:[MSW.RC201501.FOOGOL]\r\nFOOGOL.1;1          FOOGOL.C;2          FOOGOL.C;1          FOOGOL.DOC;1 \r\nFOOGOL.EXE;1        FOOGOL.FOO;1        FOOGOL.OBJ;1        FOOGOL.S;1 \r\nMAKEFILE.;1         PRIMES.FOO;1        PRIMES.S;1          \r\nTotal of 11 files.\r\n<\/pre>\n<p>with a file\u00a0<em>primes.s<\/em> generated which contains assembler code, looking suspiciously like VAX assembler, but whether it is valid input to the\u00a0VAX\/VMS MACRO assembler is another matter.<\/p>\n<pre class=\"height-set:true lang:asm decode:true \">        .text   #       #       begin\r\n        .align  1\r\n        .globl  _main\r\n_main:\r\n        .word   0\r\n        .data   1       #       integer\r\nn:      .long   0\r\ndiv:    .long   0\r\nsub:    .long   0\r\ntest:   .long   0\r\ntestcopy:       .long   0\r\nfound:  .long   0\r\nmax:    .long   0\r\n        .text\r\n        movl    $2,r0\r\n        movl    r0,test #       test:=\r\n        movl    $10,r0\r\n        movl    r0,max  #       max:=\r\nL0:     #       #       #       while\r\n        movl    n,r0\r\n        pushl   r0      #       &lt;&gt;\r\n        movl    max,r0\r\n        cmpl    (sp)+,r0\r\n        beql    L3\r\n        movl    $1,r0\r\n        jmp     L4\r\nL3:     movl    $0,r0\r\nL4:\r\n        tstl    r0\r\n        bneq    L2\r\n        jmp     L1\r\nL2:     #       #       #       do\r\n        #       #       #       begin\r\n        movl    test,r0\r\n        pushl   r0      #       -term\r\n        movl    $1,r0\r\n        subl3   r0,(sp)+,r0\r\n        movl    r0,div  #       div:=\r\n        movl    $0,r0\r\n        movl    r0,found        #       found:=\r\nL5:     #       #       #       while\r\n        movl    div,r0\r\n        pushl   r0      #       -term\r\n        movl    $1,r0\r\n        subl3   r0,(sp)+,r0\r\n        tstl    r0\r\n        bneq    L7\r\n        jmp     L6\r\nL7:     #       #       #       do\r\n        #       #       #       begin\r\n        movl    test,r0\r\n        movl    r0,testcopy     #       testcopy:=\r\n        movl    $0,r0\r\n        movl    r0,sub  #       sub:=\r\nL8:     #       #       #       while\r\n        movl    testcopy,r0\r\n        tstl    r0\r\n        bneq    L10\r\n        jmp     L9\r\nL10:    #       #       #       do\r\n        #       #       #       begin\r\n        movl    sub,r0\r\n        pushl   r0      #       +term\r\n        movl    $1,r0\r\n        addl2   (sp)+,r0\r\n        movl    r0,sub  #       sub:=\r\n        movl    sub,r0\r\n        pushl   r0      #       =\r\n        movl    div,r0\r\n        cmpl    (sp)+,r0\r\n        beql    L14\r\n        movl    $0,r0\r\n        jmp     L15\r\nL14:    movl    $1,r0\r\nL15:\r\n        tstl    r0      #       if\r\n        bneq    L13     #       then\r\n        jmp     L12\r\nL13:\r\n        movl    $0,r0\r\n        movl    r0,sub  #       sub:=\r\n        jmp     L11\r\nL12:    #       #       #       else\r\nL11:    #       #       #       endif\r\n        movl    testcopy,r0\r\n        pushl   r0      #       -term\r\n        movl    $1,r0\r\n        subl3   r0,(sp)+,r0\r\n        movl    r0,testcopy     #       testcopy:=\r\n        #       #       #       end\r\n        jmp     L8\r\nL9:     #       #       #       endwhile\r\n        movl    sub,r0\r\n        pushl   r0      #       =\r\n        movl    $0,r0\r\n        cmpl    (sp)+,r0\r\n        beql    L19\r\n        movl    $0,r0\r\n        jmp     L20\r\nL19:    movl    $1,r0\r\nL20:\r\n        tstl    r0      #       if\r\n        bneq    L18     #       then\r\n        jmp     L17\r\nL18:\r\n        movl    $1,r0\r\n        movl    r0,found        #       found:=\r\n        jmp     L16\r\nL17:    #       #       #       else\r\nL16:    #       #       #       endif\r\n        movl    div,r0\r\n        pushl   r0      #       -term\r\n        movl    $1,r0\r\n        subl3   r0,(sp)+,r0\r\n        movl    r0,div  #       div:=\r\n        #       #       #       end\r\n        jmp     L5\r\nL6:     #       #       #       endwhile\r\n        movl    found,r0\r\n        pushl   r0      #       =\r\n        movl    $0,r0\r\n        cmpl    (sp)+,r0\r\n        beql    L24\r\n        movl    $0,r0\r\n        jmp     L25\r\nL24:    movl    $1,r0\r\nL25:\r\n        tstl    r0      #       if\r\n        bneq    L23     #       then\r\n        jmp     L22\r\nL23:\r\n        #       #       #       begin\r\n        movl    n,r0\r\n        pushl   r0      #       +term\r\n        movl    $1,r0\r\n        addl2   (sp)+,r0\r\n        movl    r0,n    #       n:=\r\n        movl    test,r0\r\n        pushl   r0      #       printn\r\n        calls   $1,_PRN\r\n        .data   1       #       prints\r\nL26:    .asciz  \" is prime number \"\r\n        .text\r\n        pushal  L26\r\n        calls   $1,_PRS\r\n        movl    n,r0\r\n        pushl   r0      #       printn\r\n        calls   $1,_PRN\r\n        calls   $0,_PR  #       print\r\n        #       #       #       end\r\n        jmp     L21\r\nL22:    #       #       #       else\r\nL21:    #       #       #       endif\r\n        movl    test,r0\r\n        pushl   r0      #       +term\r\n        movl    $1,r0\r\n        addl2   (sp)+,r0\r\n        movl    r0,test #       test:=\r\n        #       #       #       end\r\n        jmp     L0\r\nL1:     #       #       #       endwhile\r\n        ret     #       #       end\r\n$ \r\n<\/pre>\n<p>Then of course I read the documentation more closely and it says <em>VAX\/Unix<\/em> assembler. Well, I thought I&#8217;d give it a go, but the results were predictable:<\/p>\n<pre class=\"theme:terminal height-set:true striped:false marking:false ranges:false nums:false tab-convert:true tab-size:8 lang:default decode:true\">$ macro primes.s\r\n                                     0000     1         .text   #       #       begin\r\n%MACRO-E-UNRECSTMT, Unrecognized statement             !\r\n                                     0000     2         .align  1\r\n%MACRO-E-ALIGNXCEED, Alignment exceeds PSECT alignment           !\r\n                                     0002     6         .data   1       #       integer\r\n%MACRO-E-UNRECSTMT, Unrecognized statement             !\r\n                                     001E    14         .text\r\n%MACRO-E-UNRECSTMT, Unrecognized statement             !\r\n                    E5 AF   50   D0  0025    16         movl    r0,test #       test:=\r\n%MACRO-E-OPRNDSYNX, Operand syntax error                               !\r\n                    E6 AF   50   D0  0030    18         movl    r0,max  #       max:=\r\n%MACRO-E-OPRNDSYNX, Operand syntax error                               !\r\n                                     0034    19 L0:     #       #       #       while\r\n%MACRO-E-UNRECSTMT, Unrecognized statement             !\r\n                            50   DD  0038    21         pushl   r0      #       &lt;&gt;\r\n%MACRO-E-OPRNDSYNX, Operand syntax error                               !\r\n                                     0061    32 L2:     #       #       #       do\r\n%MACRO-E-UNRECSTMT, Unrecognized statement             !\r\n                                     0061    33         #       #       #       begin\r\n%MACRO-E-UNRECSTMT, Unrecognized statement             !\r\n                            50   DD  0065    35         pushl   r0      #       -term\r\n%MACRO-E-OPRNDSYNX, Operand syntax error                               !\r\n                    90 AF   50   D0  0072    38         movl    r0,div  #       div:=\r\n%MACRO-E-OPRNDSYNX, Operand syntax error                               !\r\n                    95 AF   50   D0  007D    40         movl    r0,found        #       found:=\r\n%MACRO-E-OPRNDSYNX, Operand syntax error                                       !\r\n                                     0081    41 L5:     #       #       #       while\r\n%MACRO-E-UNRECSTMT, Unrecognized statement             !\r\n                            50   DD  0085    43         pushl   r0      #       -term\r\n%MACRO-E-OPRNDSYNX, Operand syntax error                               !\r\n                                     009C    49 L7:     #       #       #       do\r\n%MACRO-E-UNRECSTMT, Unrecognized statement             !\r\n                                     009C    50         #       #       #       begin\r\n%MACRO-E-UNRECSTMT, Unrecognized statement             !\r\n                  FF6C CF   50   D0  00A1    52         movl    r0,testcopy     #       testcopy:=\r\n%MACRO-E-OPRNDSYNX, Operand syntax error                                       !\r\n                  FF58 CF   50   D0  00AD    54         movl    r0,sub  #       sub:=\r\n%MACRO-E-OPRNDSYNX, Operand syntax error                               !\r\n                                     00B2    55 L8:     #       #       #       while\r\n%MACRO-E-UNRECSTMT, Unrecognized statement             !\r\n                                     00C1    60 L10:    #       #       #       do\r\n%MACRO-E-UNRECSTMT, Unrecognized statement             !\r\n                                     00C1    61         #       #       #       begin\r\n%MACRO-E-UNRECSTMT, Unrecognized statement             !\r\n                            50   DD  00C6    63         pushl   r0      #       +term\r\n%MACRO-E-OPRNDSYNX, Operand syntax error                               !\r\n                  FF33 CF   50   D0  00D2    66         movl    r0,sub  #       sub:=\r\n%MACRO-E-OPRNDSYNX, Operand syntax error                               !\r\n                            50   DD  00DC    68         pushl   r0      #       =\r\n%MACRO-E-OPRNDSYNX, Operand syntax error                               !\r\n                            50   D5  00FC    76         tstl    r0      #       if\r\n%MACRO-E-OPRNDSYNX, Operand syntax error                               !\r\n                            06   12  00FE    77         bneq    L13     #       then\r\n%MACRO-E-OPRNDSYNX, Operand syntax error                               !\r\n                  FEF8 CF   50   D0  010D    81         movl    r0,sub  #       sub:=\r\n%MACRO-E-OPRNDSYNX, Operand syntax error                               !\r\n                                     0118    83 L12:    #       #       #       else\r\n%MACRO-E-UNRECSTMT, Unrecognized statement             !\r\n                                     0118    84 L11:    #       #       #       endif\r\n%MACRO-E-UNRECSTMT, Unrecognized statement             !\r\n                            50   DD  011D    86         pushl   r0      #       -term\r\n%MACRO-E-OPRNDSYNX, Operand syntax error                               !\r\n                  FEE3 CF   50   D0  012A    89         movl    r0,testcopy     #       testcopy:=\r\n%MACRO-E-OPRNDSYNX, Operand syntax error                                       !\r\n                                     012F    90         #       #       #       end\r\n%MACRO-E-UNRECSTMT, Unrecognized statement             !\r\n                                     0132    92 L9:     #       #       #       endwhile\r\n%MACRO-E-UNRECSTMT, Unrecognized statement             !\r\n                            50   DD  0137    94         pushl   r0      #       =\r\n%MACRO-E-OPRNDSYNX, Operand syntax error                               !\r\n                            50   D5  0159   102         tstl    r0      #       if\r\n%MACRO-E-OPRNDSYNX, Operand syntax error                               !\r\n                            06   12  015B   103         bneq    L18     #       then\r\n%MACRO-E-OPRNDSYNX, Operand syntax error                               !\r\n                  FEA7 CF   50   D0  016A   107         movl    r0,found        #       found:=\r\n%MACRO-E-OPRNDSYNX, Operand syntax error                                       !\r\n                                     0175   109 L17:    #       #       #       else\r\n%MACRO-E-UNRECSTMT, Unrecognized statement             !\r\n                                     0175   110 L16:    #       #       #       endif\r\n%MACRO-E-UNRECSTMT, Unrecognized statement             !\r\n                            50   DD  017A   112         pushl   r0      #       -term\r\n%MACRO-E-OPRNDSYNX, Operand syntax error                               !\r\n                  FE7A CF   50   D0  0187   115         movl    r0,div  #       div:=\r\n%MACRO-E-OPRNDSYNX, Operand syntax error                               !\r\n                                     018C   116         #       #       #       end\r\n%MACRO-E-UNRECSTMT, Unrecognized statement             !\r\n                                     0190   118 L6:     #       #       #       endwhile\r\n%MACRO-E-UNRECSTMT, Unrecognized statement             !\r\n                            50   DD  0195   120         pushl   r0      #       =\r\n%MACRO-E-OPRNDSYNX, Operand syntax error                               !\r\n                            50   D5  01B7   128         tstl    r0      #       if\r\n%MACRO-E-OPRNDSYNX, Operand syntax error                               !\r\n                            06   12  01B9   129         bneq    L23     #       then\r\n%MACRO-E-OPRNDSYNX, Operand syntax error                               !\r\n                                     01C1   132         #       #       #       begin\r\n%MACRO-E-UNRECSTMT, Unrecognized statement             !\r\n                            50   DD  01C6   134         pushl   r0      #       +term\r\n%MACRO-E-OPRNDSYNX, Operand syntax error                               !\r\n                  FE2B CF   50   D0  01D2   137         movl    r0,n    #       n:=\r\n%MACRO-E-OPRNDSYNX, Operand syntax error                               !\r\n                            50   DD  01DC   139         pushl   r0      #       printn\r\n%MACRO-E-OPRNDSYNX, Operand syntax error                               !\r\n                                     01E9   141         .data   1       #       prints\r\n%MACRO-E-UNRECSTMT, Unrecognized statement             !\r\n                                     01FB   143         .text\r\n%MACRO-E-UNRECSTMT, Unrecognized statement             !\r\n                            50   DD  020E   147         pushl   r0      #       printn\r\n%MACRO-E-OPRNDSYNX, Operand syntax error                               !\r\n     00000000'EF   00000000'EF   FB  021B   149         calls   $0,_PR  #       print\r\n%MACRO-E-OPRNDSYNX, Operand syntax error                               !\r\n                                     0226   150         #       #       #       end\r\n%MACRO-E-UNRECSTMT, Unrecognized statement             !\r\n                                     022C   152 L22:    #       #       #       else\r\n%MACRO-E-UNRECSTMT, Unrecognized statement             !\r\n                                     022C   153 L21:    #       #       #       endif\r\n%MACRO-E-UNRECSTMT, Unrecognized statement             !\r\n                            50   DD  0231   155         pushl   r0      #       +term\r\n%MACRO-E-OPRNDSYNX, Operand syntax error                               !\r\n                  FDCC CF   50   D0  023D   158         movl    r0,test #       test:=\r\n%MACRO-E-OPRNDSYNX, Operand syntax error                               !\r\n                                     0242   159         #       #       #       end\r\n%MACRO-E-UNRECSTMT, Unrecognized statement             !\r\n                                     0246   161 L1:     #       #       #       endwhile\r\n%MACRO-E-UNRECSTMT, Unrecognized statement             !\r\n                                 04  0246   162         ret     #       #       end\r\n%MACRO-E-MCHINSTSYN, Machine instruction syntax error                  !\r\n                                     0247       \r\n%MACRO-W-MISSINGEND, Missing .END statement\r\n\r\nThere were 63 errors, 1 warning and 0 information messages, on lines:\r\n    1 (1)         2 (1)         6 (1)        14 (1)        16 (1)     \r\n   18 (1)        19 (1)        21 (1)        32 (1)        33 (1)     \r\n   35 (1)        38 (1)        40 (1)        41 (1)        43 (1)     \r\n   49 (1)        50 (1)        52 (1)        54 (1)        55 (1)     \r\n   60 (1)        61 (1)        63 (1)        66 (1)        68 (1)     \r\n   76 (1)        77 (1)        81 (1)        83 (1)        84 (1)     \r\n   86 (1)        89 (1)        90 (1)        92 (1)        94 (1)     \r\n  102 (1)       103 (1)       107 (1)       109 (1)       110 (1)     \r\n  112 (1)       115 (1)       116 (1)       118 (1)       120 (1)     \r\n  128 (1)       129 (1)       132 (1)       134 (1)       137 (1)     \r\n  139 (1)       141 (1)       143 (1)       147 (1)       149 (1)     \r\n  150 (1)       152 (1)       153 (1)       155 (1)       158 (1)     \r\n  159 (1)       161 (1)       162 (1)     \r\n\r\nMACRO PRIMES.S\r\n$ \r\n<\/pre>\n<p>Which leaves me wondering what variant of <em>Unix<\/em> we&#8217;re talking about here. I took a quick look at the <a title=\"Software Kits\" href=\"http:\/\/simh.trailing-edge.com\/software.html\" target=\"_blank\">software kits page\u00a0for the SIMH<\/a>, it could be one of these:<\/p>\n<ul>\n<li>NetBSD for the VAX; click <a href=\"http:\/\/www.netbsd.org\/Ports\/vax\/emulator-howto.html\">here<\/a> for installation instructions and a pointer to the installation kit.<\/li>\n<li>4.3BSD for the VAX; click <a href=\"http:\/\/www.itsecuritygeek.com\/drupal\/43quas\">here<\/a> for the installation directory.<\/li>\n<\/ul>\n<p>I&#8217;m betting 4.3BSD would be the most likely choice (mental note to look into the versions of Unix that VAXen supported back in the day)<\/p>\n<p>Another entry caught my eye:<\/p>\n<p style=\"padding-left: 30px;\"><a href=\"http:\/\/www.ugu.com\/pub\/unix\/sec1\/vforth.tar.Z\"><b>vforth.tar.Z<\/b><\/a> &#8211; vforth a VAX forth interpreter (written in assembler)<\/p>\n<p>this mentions 4.2 in the README:<\/p>\n<blockquote><p>What follows is a 32-bit forth. In general, it is based on the FIG<br \/>\nmodel, but it deviates where necessity or religion demanded. It will<br \/>\nrun on a VAX running 4.2, and tends to use the UNIX system calls in only<br \/>\nthe most generic of ways (read: should move to 4.1 without problems).<br \/>\nIt uses subroutine threading and in-line code generation to &#8220;up&#8221; the<br \/>\nspeed; this is explained in the accompanying documentation.<\/p>\n<p>It has been used to implement a 3D viewing system, which runs<br \/>\nrather nicely; if you&#8217;re interested in such a thing, send me mail;<br \/>\nif I get enough queries, I&#8217;ll post it to net.sources&#8211;otherwise, I&#8217;ll<br \/>\nsend it direct.<\/p>\n<p>Thanks much to Prentiss Riddle for posting this to me! Please<br \/>\ndirect all questions to me, not him! We can&#8217;t post to notes from here,<br \/>\nbut net mail works fine.<br \/>\nAndy Valencia<br \/>\n&#8230;!fortune!hpda!vandys<br \/>\n&#8230;!ucbvax!hpda!vandys<\/p>\n<p>Heavy legal lines:<br \/>\nThe software which follows is put into the public domain for<br \/>\nprivate use only; using or distributing this software for a profit is<br \/>\nforbidden. This software comes with no support offered or implied&#8211;<br \/>\nyou&#8217;re on your own!<\/p><\/blockquote>\n<p>Which I&#8217;m guessing is BSD 4.2. Heck, I have a copy of\u00a0<a href=\"http:\/\/www.amazon.co.uk\/Quarter-Century-Unix-Addison-Wesley-Systems\/dp\/0201547775\" target=\"_blank\">A Quarter Century of Unix<\/a> somewhere &#8211; I&#8217;ll have to dig that out, I&#8217;m sure it&#8217;s all there in gory detail.<\/p>\n<p>The search continues&#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This evening I decided that I was going to have a wander through the internet and see what I could dig up about 6502 programming and VAX or VAX\/VMS or OpenVMS. The ideal scenario would be an assembler that runs on the VAX and cross-compiles to the KIM-1 6502-based machine (when I get round to &#8230;<\/p>\n<p><a href=\"http:\/\/www.wickensonline.co.uk\/rc2012sc\/2015\/01\/08\/peeking-into-the-corners-of-the-internet\/\" class=\"more-link\">Continue reading &lsquo;Peeking into the corners of the internet&rsquo; &raquo;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2}},"categories":[1],"tags":[41],"class_list":["post-499","post","type-post","status-publish","format-standard","hentry","category-general","tag-rc201501"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p73JhD-83","jetpack-related-posts":[],"_links":{"self":[{"href":"http:\/\/www.wickensonline.co.uk\/rc2012sc\/wp-json\/wp\/v2\/posts\/499"}],"collection":[{"href":"http:\/\/www.wickensonline.co.uk\/rc2012sc\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.wickensonline.co.uk\/rc2012sc\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.wickensonline.co.uk\/rc2012sc\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.wickensonline.co.uk\/rc2012sc\/wp-json\/wp\/v2\/comments?post=499"}],"version-history":[{"count":8,"href":"http:\/\/www.wickensonline.co.uk\/rc2012sc\/wp-json\/wp\/v2\/posts\/499\/revisions"}],"predecessor-version":[{"id":507,"href":"http:\/\/www.wickensonline.co.uk\/rc2012sc\/wp-json\/wp\/v2\/posts\/499\/revisions\/507"}],"wp:attachment":[{"href":"http:\/\/www.wickensonline.co.uk\/rc2012sc\/wp-json\/wp\/v2\/media?parent=499"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.wickensonline.co.uk\/rc2012sc\/wp-json\/wp\/v2\/categories?post=499"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.wickensonline.co.uk\/rc2012sc\/wp-json\/wp\/v2\/tags?post=499"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}