Tag: homebrew

  • Single board PDP-8: take 2 …

    A couple of years back, I said I was building a single board computer and then things went quiet. Yes, I screwed up. A mix of dry joints and possibly burning through traces caused by following old instructions, impatience and a very unforgiving solder type made the original board almost unusable. I finally got a replacement board (thanks, Andrew!) and put in a humongous Digikey order for all the projects that I want to finish, and got going.

    circuit board with many chips
    I swapped out the 5 MHz crystal for a blazingly fast 8 MHz one

    I took quite a bit more care building this, but it was still only a couple of evenings to put it together. While I still used lead-free solder, I hardly needed extra flux at all. The nice ($$$) turned-pin sockets hold the chips much more securely than the cheaper plain sockets I used before.

    After a minor hiccup (homebrew null modem cable needs both RX and TX to be useful), it lives!

    SBC6120 ROM Monitor V320 Checksum 3752 6072 3515 09-APR-10 21:15:39
    Copyright (C) 1983-2010 by Spare Time Gizmos. All rights reserved.
    NVR: Not detected
    IDE: 489MB - LEXAR ATA FLASH
    IOB: Not detected
    B
    -IDA0
    .BASIC
    NEW OR OLD--OLD
    FILE NAME--ASCART
    READY
    LIST
    ASCART BA 5B
    100 FOR Y=-12 TO 12
    110 FOR X=-39 TO 39
    120 C1=X*.0458
    130 C2=Y*.08333
    140 A=C1
    150 B=C2
    160 FOR I=0 TO 15
    170 T=A*A-B*B+C1
    180 B=2*A*B+C2
    190 A=T
    200 IF (A*A+B*B)>4 GOTO 240
    210 NEXT I
    220 PRINT " ";
    230 GOTO 270
    240 IF I<=9 GOTO 260
    250 I=I-57
    260 PRINT CHR$(48+I);
    270 NEXT X
    280 PRINT
    290 NEXT Y
    300 END
    READY
    RUN
    ASCART BA 5B
    000000011111111111111111122222233347E7AB322222111100000000000000000000000000000
    000001111111111111111122222222333557BF75433222211111000000000000000000000000000
    000111111111111111112222222233445C 643332222111110000000000000000000000000
    011111111111111111222222233444556C 654433332211111100000000000000000000000
    11111111111111112222233346 D978 BCF DF9 6556F4221111110000000000000000000000
    111111111111122223333334469 D 6322111111000000000000000000000
    1111111111222333333334457DB 85332111111100000000000000000000
    11111122234B744444455556A 96532211111110000000000000000000
    122222233347BAA7AB776679 A32211111110000000000000000000
    2222233334567 9A A532221111111000000000000000000
    222333346679 9432221111111000000000000000000
    234445568 F B5432221111111000000000000000000
    864332221111111000000000000000000
    234445568 F B5432221111111000000000000000000
    222333346679 9432221111111000000000000000000
    2222233334567 9A A532221111111000000000000000000
    122222233347BAA7AB776679 A32211111110000000000000000000
    11111122234B744444455556A 96532211111110000000000000000000
    1111111111222333333334457DB 85332111111100000000000000000000
    111111111111122223333334469 D 6322111111000000000000000000000
    11111111111111112222233346 D978 BCF DF9 6556F4221111110000000000000000000000
    011111111111111111222222233444556C 654433332211111100000000000000000000000
    000111111111111111112222222233445C 643332222111110000000000000000000000000
    000001111111111111111122222222333557BF75433222211111000000000000000000000000000
    000000011111111111111111122222233347E7AB322222111100000000000000000000000000000
    READY
    ASCII art Mandelbrot set
    If WordPress’s line wrapping has mangled the above, it should look like this

    It compiles and runs a slightly modified ASCIIART.BAS Mandelbrot set benchmark in 144 seconds. This is comparable to many 8-bit computers. The modifications were:

    • PDP-8 BASIC doesn’t quite use ASCII. Its six-bit character set has digits 0-9 at decimal 48-57 like ASCII, but characters A-F are at decimal 1-6 (instead of 65-70). The manual claims that CHR$() works modulo 64, so maybe I didn’t need to make this change.
    • Variable names can be called Letter+Number at most, so the original’s CA and CB had to become C1 and C2.
    • PDP-8 BASIC doesn’t support a familiar IF … THEN … structure, but only effectively an IF … GOTO …. I mean, sure, you can use THEN if you want, but only a line number or a GOTO … following it will avoid the dreaded terse NM error. ELSE? Who needs it?!