I have written an emacs-like editor for my new pidp8/i that runs under OS/8 and communicates with the user via character I/O on the console terminal. The console is expected to be, or behave like, a simple fixed-size character-oriented display terminal of the sort that was available in the 1970's, able to process a few basic ANSI escape sequences. Both MobaXTerm and the basic Linux screen (e.g. CTRL-ALT-F1) support this protocol.
The attached photo shows the editor (“E8”) displaying a portion of its pal8 source code. You can see the typical emacs mode line showing that the file has changed, the filename, and the size in characters. The displayed code shows the command dispatch tables, giving a rough feel for the control, alt, and ^X commands that have been implemented. The only important remaining task is to implement incremental search, which should be done in a day or so.
E8 is pretty responsive, even throttled down to 300K, close to real 8/I speed. It goes to some trouble to minimize characters written to the display, and should run just fine at 1970’s bandwidth, e.g. 9600 baud. (OK, late 70's)
If people are interested in this sort of thing, I can share the source code. It’s just a bunch of pal8 files and is easy to assemble and run under OS/8. Don’t try to assemble it at 300K, though.
--
You received this message because you are subscribed to the Google Groups "PiDP-8" group.
To unsubscribe from this group and stop receiving emails from it, send an email to pidp-8+un...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/pidp-8/4891c76e-cf7c-46d6-a466-21390089a7b8%40googlegroups.com.
I added those EAE definitions. You'll see them in the release I plan for later today. What are pico and nano?
Not sure if I can think of any practical thing left to do, but this has been amusing and I don't really want to stop, but we're almost out of memory for more code, and I have a day job, so who knows.
Interesting. It would be a pain, but no EAE could be done. How many PDP-8s are still running in the world, do you think? How many have EAE? Do the ones without EAE have enough core? I suppose if someone had a specific 8 who wanted to run E8 and had enough core, I'd pay attention.
I first thought of writing E8 two weeks ago when I got my PiDP8/I working. I got it mostly to write code, rather than just running old programs.
For your PiDP-10, are you going to run ITS or some DEC OS? I ask because you mentioned migrating to Emacs for that project, and Emacs was introduced on a PDP-10 running ITS.
Cheers.
I now have two requests (Ian and Vince) to eliminate the EAE requirement (I only use mode A, which is what my real 8/I had back in the day). I've been assuming that E8 would be used on a simulator with EAE and eight fields of memory, e.g. a PiDP-8/I. Ian, I agree that there is a good argument in principal, but I'd like to know more about the "consequence" you speak of. Is it practical or hypothetical? I could eliminate the EAE requirement, but is there some real, non-hypothetical, near-term intent to run it on an actual machine that doesn't have EAE and has enough core? Or some other non-hypothetical reason?
Nice work Vince. I like the conditional assembly to use hardware or emulation, and I like how little you actually had to change.
Y’all have convinced me that you are serious about this. I still wonder if running on real hardware is hypothetical, but since you believe that someone might actually do it, I’ll make an “official” non-EAE option. It will be similar to what Vince has done, but I’m going to clean things up some and check every change for subtle bugs. I really only need to emulate DVI and the shift instructions, the one multiply I have isn’t really necessary. I may also stop using MQ for argument passing and temporary storage, the alternatives are fine. I’m probably going to write my own emulator for the instructions I need, DEC’s is just too ugly for my emotional well-being. Should have this done in a day or two, I’ve got some day job things to deal with first.
Please do let me know if someone runs E8 on a real PDP-8 .
It sure would be amusing to see. I haven’t seen an 8 running at all since 1977,
and until now didn’t even know that they still existed.
--
You received this message because you are subscribed to the Google Groups "PiDP-8" group.
To unsubscribe from this group and stop receiving emails from it, send an email to pidp-8+un...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/pidp-8/ddef5e71-0372-4a24-a32a-5e3383040568%40googlegroups.com.
Nice work Vince. I like the conditional assembly to use hardware or emulation, and I like how little you actually had to change.
Y’all have convinced me that you are serious about this. I still wonder if running on real hardware is hypothetical, but since you believe that someone might actually do it, I’ll make an “official” non-EAE option. It will be similar to what Vince has done, but I’m going to clean things up some and check every change for subtle bugs.
Please do let me know if someone runs E8 on a real PDP-8 . It sure would be amusing to see. I haven’t seen an 8 running at all since 1977, and until now didn’t even know that they still existed.
I would like to make a suggestion for an addition: Instead of compiling/assembling in the screen size, allow passing in the height and width as command line options. This allows for much greater flexibility on the size of the SSH or VNC window.
One question, is there a way, through SSH or VNC to trap the ALT key? This will allow modifying the key map to have more flexibility to emulate other editors.
The attached version does not use EAE. At all. There is no option, it just doesn't.
To be 100% sure, look at the 0.script file in /opt/pidp8i/share/boot and see what paths and file names it is using when it does the ATTACH RK0 ...
That should get you on the air.
--
You received this message because you are subscribed to the Google Groups "PiDP-8" group.
To unsubscribe from this group and stop receiving emails from it, send an email to pidp-8+un...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/pidp-8/799327e5-6c59-4bfb-96e5-f3de67e07452%40googlegroups.com.
--
You received this message because you are subscribed to the Google Groups "PiDP-8" group.
To unsubscribe from this group and stop receiving emails from it, send an email to pidp-8+un...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/pidp-8/3e3dc4b2-1e97-466a-b46e-d46b48cc7dfa%40googlegroups.com.
I didn't copy it the
.SA SYS E8;200=1000
command created the file on SYS:
--
You received this message because you are subscribed to the Google Groups "PiDP-8" group.
To unsubscribe from this group and stop receiving emails from it, send an email to pidp-8+un...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/pidp-8/fe440ab1-938e-48e1-93cf-12c56626093f%40googlegroups.com.
--
You received this message because you are subscribed to the Google Groups "PiDP-8" group.
To unsubscribe from this group and stop receiving emails from it, send an email to pidp-8+un...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/pidp-8/f63df8a6-da3f-4ac5-a24d-300c1b49591b%40googlegroups.com.
--
You received this message because you are subscribed to the Google Groups "PiDP-8" group.
To unsubscribe from this group and stop receiving emails from it, send an email to pidp-8+un...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/pidp-8/80b8f82b-3561-4173-a20a-41dfc94a5680%40googlegroups.com.
012345678901234...000000000001111...
Comments on some previous posts:
Bill
This is about version 7 not version 8
I found an interesting behavior. If you type a line that is the maximum
width (in my case 78 characters) and place the cursor at then 79th
position with the end key, the cursor will not move from the end of the
with the left arrow. The home key will take the cursor back to column 1
and the arrow keys will work. I haven't looked at the code but it looks
like the end key isn't setting the cursor column correctly when it is at
the last position on the screen. If you use the end key to go to a line
shorted than the screen width, there isn't a problem.
I did not try the control combination for left and right cursor.
If you right arrow to the end of the line, you can left arrow back.
However, if you right arrow to the end of the line and then cursor 5
more times, it will take you 6 left arrow key presses until the cursor
starts to move. I think that E8 doesn't realize that it is at the end
of the line and keeps counting the cursor position even though it is at
the end of screen.
Thank you for taking my suggestion about the one line scrolling.
I have a suggestion for the future, when you feel like digging into
crazy complications of a text editor.
My suggestion would be for sideways scrolling, so that the length of a
line can be greater than the width of the screen. This can cause some
crazy redraw issues so I will leave it for a day when you feel like
jumping into the snaked den.
One question I have, for storage, do you store each line as the width of
the screen (ie each line takes up one screen width bytes regardless of
whether there are 5 bytes or 80 bytes on the line).
If that is the way that you do it, I once wrote an editor that kept a
table in memory of the starting address and length of every line, this
allows for easy insertion and deletion of lines without having to large
memory copies. If you are already doing this then just consider this
suggestion useless :)
One other suggestion, for the prompts (like the 'SAVE? (Y, N, ^G):'
prompt), would it be possible to take both upper and lower case for the
'Y' & 'N'?
.R PAL8
*E8<E8ALL/L
US 2400
ERRORS DETECTED: 1
LINKS GENERATED: 314
Is this because I'm not creating a E8DEFS.PA? Normally, I'd expect a US error to have a symbol name beginning with an Alphabetic character. So I'm confused by the symbol name "2400".
Any guess what's going on here? A search for "2400" in E8ALL.PA doesn't give anything obvious.
----
Style Suggestion:
There is a school of thought in PDP-8 programming that Links are a messy thing that should be avoided.
Indeed there's a way to avoid them through the use of the equals syntax to define page zero based subroutine calls.
Conceptually you define JMS I . <Destination> in page zero. Here are context diffs against v7 EALL.PA that eliminate 3 links (a net savings of 1 word of memory) by defining page zero links to the two subroutines SCINIT and IOINIT:
wdc-home2:e8v7 wdc$ diff -c E8ALL.PA E8NALL.PA
*** E8ALL.PA 2020-04-16 17:27:44.000000000 -0400
--- E8NALL.PA 2020-04-20 12:44:18.000000000 -0400
***************
*** 80,92 ****
LASTPT, 0; ENDFLD / PREVIOUS POINT
LASTGP, 0; BUFFLD / PREVIOUS GAP
/ LARGE COMMON LITERAL TABLE HERE
/ TOP LEVEL
*200 /------------
TLS
! JMS SCINIT
! JMS IOINIT
JMP 7600 / FILE SYS ERR, QUIT
TOP, TAD MLHOLD / CLEAR MODE LINE TEXT UNLESS BEING HELD
--- 80,98 ----
LASTPT, 0; ENDFLD / PREVIOUS POINT
LASTGP, 0; BUFFLD / PREVIOUS GAP
+ / ELIMINATE LINKS BY CREATING PAGE 0 INSTRUCTIONS HERE
+ XSCINI=JMS I .
+ SCINIT
+ XIOINI=JMS I .
+ IOINIT
+
/ LARGE COMMON LITERAL TABLE HERE
/ TOP LEVEL
*200 /------------
TLS
! XSCINI
! XIOINI
JMP 7600 / FILE SYS ERR, QUIT
TOP, TAD MLHOLD / CLEAR MODE LINE TEXT UNLESS BEING HELD
***************
*** 1383,1389 ****
/ ERASE SCREEN, SET TOS SO THAT CURSOR IS IN MIDDLE OF SCREEN
REDRAW, 0
! JMS SCINIT / ERASE
ISZ REDRAW / CAN'T FAIL
TAD (-HALFHT / COUNT LINES
DCA REDRN
--- 1389,1395 ----
/ ERASE SCREEN, SET TOS SO THAT CURSOR IS IN MIDDLE OF SCREEN
REDRAW, 0
! XSCINI / ERASE
ISZ REDRAW / CAN'T FAIL
TAD (-HALFHT / COUNT LINES
DCA REDRN
20 SNE15;
19 INC15
17 WR6
14 WRTTY
13 SFWDPT
13 GOFWD
12 SUB15
11 UPDATE
11 RDTTY
11 LD24
8 SREVGP
7 INSERT
7 GOREV
6 WRMLT
6 SCHSTR
6 GET15
6 CLRMLT
5 WRDEC
5 SKIPAN
5 PACK
4 UPPER
4 SREV
4 SFWD
4 INSFIL
4 FILENM+3
4 ADD15
3 WRRND
3 RNDINI
3 LUFILE
3 GOBEG
3 GETFIL
3 DEC15
3 7600
2 WRSTR
2 WRITEF
2 SETPM
2 SETFN
2 SCINIT
2 RNDFIN
2 PACKP
2 OFFER
2 GOEND
2 GETSTR
2 FIXMRK
2 FIX24
2 FILENM
2 ERMLT
2 DIVIDE
2 DEVNUM
2 CLSIZ
2 CLRFN
2 CLFILE
1 WRREG
1 WROCT
1 WRFBLK
1 SVFILE
1 STRSIZ
1 ST24
1 SSTRNG
1 SETTOS
1 SETCUR
1 RNDMLT
1 RNDFLD
1 RMODE
1 RENDER
1 RCZONE
1 PUT15;
1 PACKX
1 PACKIO
1 PACKBL
1 NEWLN
1 MOREOK
1 IOINIT
1 HAVEFN
1 FILLOC
1 FILBLK
1 EXGPM
1 ENSIZ
1 ENFILE
1 CLRBUF
1 BUFSIZ
Ian, thanks for replying about the wrapped line issue that was discussed earlier in this topic. Bill, when Pal8 reports an undefined symbol it tells you the address of the line where the symbol appears, not the symbol itself.I've tried to put all commonly used numeric literals on page 0 (using "[" instead of "("), although it's an imperfect process. However, I didn't think to do this with common links, and as your analysis shows it would be even more useful than common numeric literals. Another and cleaner way to do it would be, e.g.XSCINI=JMS I [SCINIT
FUNCT=JMS I .
XFUNCT
Where XFUNCT is the entry point of the function to be called:
XFUNCT, 0
...
JMP I XFUNCT
I've got a few more things that I want to do after that. Then I think it might make sense to create a Git repository for the source, perhaps somewhere on GitHub where the PDP-8 community keeps such things. Then the folks who maintain and build the package that is distributed with the PiDP-8/I can decide whether to add E8 to the kit, and if so in what form.
I use Git professionally and well appreciate its value, but I have avoided learning any more about it than I have to to get my work done. What this means specifically is that I use the Git GUI, and if anything is complex enough to need the command line, or beyond what I want to know, I get help from others. So if people think we should go this way, I'd want to work with others to figure out what exactly to do. I'm generally not comfortable giving up any control of my source code, but I think some compromise on that score is in order.
mount rk0 $media/os8/v3d.rk05 requiredmount dt0 $media/os8/e8.tu56 newboot rk0os8 ZERO DTA0:
cpto $src/src/e8/e8ALL.pa RKA0:E8ALL.PA
begin cdprog SYS:PAL8.SV#E8<E8DEFS,E8BASE,E8FILE,E8RSCH/LE8<E8DEFS,E8ALL/Lend cdprog SYS:PAL8.SVos8 SAVE SYS E8;200=1000
begin cdprog RKA0:FOTP.SVDTA0:<RKA0:E8DEFS.PADTA0:<RKA0:E8ALL.PADTA0:<RKA0:E8BASE.PADTA0:<RKA0:E8FILE.PADTA0:<RKA0:E8SRCH.PADTA0:<SYS:E8.SVend cdprog RKA0:FOTP.SV