Uit Hack42
Ga naar: navigatie, zoeken
(codebuffer teruggezet in field0.txt)
 
(14 tussenliggende versies door 2 gebruikers niet weergegeven)
Regel 1: Regel 1:
== Code for the pdp8/f ==
+
== Code for the [[Digital_PDP-8f |pdp8/f]] ==
  
  
=== for this machine ===
+
=== for this exact specimen ===
  
 
this code is for the machine in the configuration we got it in.
 
this code is for the machine in the configuration we got it in.
Regel 10: Regel 10:
 
''Pasted on paper on the back of the pdp8 8/e 8/f 8/m Pocket Reference Card''
 
''Pasted on paper on the back of the pdp8 8/e 8/f 8/m Pocket Reference Card''
  
{| class="wikitable"
+
{|
 
|-
 
|-
 
! Addr !! instr !! comment
 
! Addr !! instr !! comment
Regel 69: Regel 69:
 
|}
 
|}
  
 +
After a coredump we found in field 0 on address 0400 some more of the code. now only one address needs to be found.
 +
 +
{|
 +
|-
 +
! Addr !! instr !! comment
 +
|-
 +
| 0400 || 1230 || -
 +
|-
 +
| 0401 || 6321 || -
 +
|-
 +
| 0402 || 6321 || -
 +
|-
 +
| 0403 || 7600 || -
 +
|-
 +
| 0404 || 6322 || -
 +
|-
 +
| 0405 || 5204 || -
 +
|-
 +
| 0406 || 6324 || -
 +
|-
 +
| 0407 || 7106 || -
 +
|-
 +
| 0410 || 7006 || -
 +
|-
 +
| 0411 || 3233 || -
 +
|-
 +
| 0412 || 6322 || -
 +
|-
 +
| 0413 || 5212 || -
 +
|-
 +
| 0414 || 6324 || -
 +
|-
 +
| 0415 || 7012 || -
 +
|-
 +
| 0416 || 7012 || -
 +
|-
 +
| 0417 || 0217 || -
 +
|-
 +
| 0420 || 1233 || -
 +
|-
 +
| 0421 || 3132 || -
 +
|-
 +
| 0422 || 2332 || -
 +
|-
 +
| 0423 || 2331 || -
 +
|-
 +
| 0424 || 5204 || -
 +
|-
 +
| 0425 || 1203 || -
 +
|-
 +
| 0426 || 6321 || -
 +
|-
 +
| 0427 || 5014 || -
 +
|-
 +
| 0430 || 0401 || -
 +
|-
 +
| 0431 || 7400 || -
 +
|-
 +
| 0432 || 0000 || bad core? all fields on this adress read 0000
 +
|}
  
 
==== Ascii print on teletype ====
 
==== Ascii print on teletype ====
 
+
This is a simple test to see if serial communication is working at least one way.
On our machine, the Teletype resides not on the standard address but on address XXX
+
On our machine, the Teletype resides not on the standard address but on address 43/44
  
 
  <pre>
 
  <pre>
Regel 80: Regel 140:
 
0006 5005  JMP 5
 
0006 5005  JMP 5
 
0007 5003  JPM 3
 
0007 5003  JPM 3
 +
</pre>
 +
 +
For the hightspeed serial card on adress 03/04 use the code below
 +
 +
<pre>
 +
0003 7001  INC AC +1
 +
0004 6046  Output char
 +
0005 6041  if flag skip next
 +
0006 5005  JMP 5
 +
0007 5003  JPM 3
 +
</pre>
 +
 +
Another test is from DEC PDP8/e Maintenance Vol. 1 Processor DEC-8E-HMM1a-D-D:
 +
 +
This echos back the caracters typed on a teletype or other serial terminal.
 +
 +
<pre>
 +
0000 6032  or 6432 for the high speed interface
 +
0001 6031  or 6431 "
 +
0002 5001
 +
0003 6036  or 6436 "
 +
0004 6046  or 6446 "
 +
0005 6041  or 6441 "
 +
0006 5005
 +
0007 5001
 
</pre>
 
</pre>
  
Regel 85: Regel 170:
  
 
==== Bugblue version ====
 
==== Bugblue version ====
There are some jumps because of faulty memory locations. that is why the start address is 176o. CDF field jumps added by MacSimski
+
There are some jumps because of faulty memory locations. that is why the start address is 176o.  
 +
We know this program is highly inefficient and much nicer written if you do understand what you are doing.
 +
But as it grew we don't like to toggle the whole program again. Hence the very ugly jumps and hacks.
  
 
  <pre>
 
  <pre>
                      *176                    //LOCATE PROGRAM STARTING AT ADDR 200
+
0175 170176         *176                    /LOCATE PROGRAM STARTING AT ADDR 200
00176 7300           CLA CLL                //CLEAR ACCUMULATOR /CLEAR AC LINK
+
0176 7300         CLA CLL                /CLEAR ACCUMULATOR /CLEAR AC LINK
00177 7000           NOP // bad memory
+
0177 7000         NOP // bad memory
00200 3275            DCA TMP1                //STORE THAT (0) IN TMP1
+
0200 3273         DCA TMP1                /STORE THAT (0) IN TMP1
00201 7000           NOP // bad memory
+
0201 7000         NOP // bad memory
00202 7000   MAIN,  NOP
+
0202 7000 MAIN,  NOP
00203 1275            TAD TMP1                // load TMP1
+
0203 1273         TAD TMP1                // load TMP1
00204 4225            JMS PRINTNUM            // print dit nummer
+
0204 4223         JMS PRINTNUM            // print dit nummer
00205 7300           CLA CLL
+
0205 7300         CLA CLL
00206 1277            TAD SPACE
+
0206 1275         TAD SPACE
00207 4265            JMS TTYO                // output to tty0
+
0207 4263         JMS TTYO                // output to tty0
00210 6211            CDF 10
+
0210 4307         JMS LAAD                // LOAD data field (change)
00211 1675            TAD I TMP1              // indirect laden van TMP1
+
0211 4223         JMS PRINTNUM            // print dit nummer
00212 6201            CDF 0
+
0212 1273         TAD TMP1                // load TMP1
00213 4225            JMS PRINTNUM            // print dit nummer
+
0213 7001         IAC                    // INCREMENT 1
00214 1275            TAD TMP1                // load TMP1
+
0214 3273         DCA TMP1  
00215 7001           IAC                    // INCREMENT 1
+
0215 1277         TAD CR
00216 3275            DCA TMP1
+
0216 4263         JMS TTYO                // output to tty0
00217 1301            TAD CR
+
0217 7300         CLA CLL
00220 4265            JMS TTYO                // output to tty0
+
0220 1276         TAD LF
00221 7300           CLA CLL
+
0221 4263         JMS TTYO                // output to tty0
00222 1300            TAD LF
+
0222 5202         JMP MAIN                // tada.wav
00223 4265            JMS TTYO                // output to tty0
+
0223 7000 PRINTNUM, NOP
00224 5202           JMP MAIN                // tada.wav
+
0224 3274         DCA TMP3                // store this in tmp3
             
+
0225 1274         TAD TMP3                // get it.
00225 7000   PRINTNUM, NOP
+
0226 7010         RAR
00226 3276            DCA TMP3                // store this in tmp3
+
0227 7012         RTR
00227 1276            TAD TMP3                // get it.
+
0230 7012         RTR
00230 7010           RAR
+
0231 7012         RTR
00231 7012           RTR
+
0232 4302         JMS STUK
00232 7012           RTR
+
0233 7000         NOP
00233 7012           RTR
+
0234 7000 HEEL,  NOP
00234 4304            JMS STUK
+
0235 7300         CLA CLL                // clear AC
00235 7000           NOP
+
0236 1274         TAD TMP3                // load TMP3
00236 7000   HEEL,  NOP
+
0237 7012         RTR
                                           
+
0240 7012         RTR
00237 7300           CLA CLL                // clear AC
+
0241 7012         RTR            // 6 bitwise shift
00240 1276            TAD TMP3                // load TMP3
+
0242 4257         JMS PLUS                // xor met 0070
00241 7012           RTR
+
0243 4263         JMS TTYO                // output to tty0
00242 7012           RTR
+
0244 7300         CLA CLL                // clear AC
00243 7012           RTR            // 6 bitwise shift
+
0245 1274         TAD TMP3                // load TMP3
00244 4261            JMS PLUS                // xor met 0070
+
0246 7010         RAR
00245 4265            JMS TTYO                // output to tty0
+
0247 7012         RTR                // 3 bitwise shift
                                           
+
0250 4257         JMS PLUS                // xor met 0070
00246 7300           CLA CLL                // clear AC
+
0251 4263         JMS TTYO                // output to tty0
00247 1276            TAD TMP3                // load TMP3
+
0252 7300         CLA CLL                // clear AC
00250 7010           RAR
+
0253 1274         TAD TMP3                // load TMP3
00251 7012           RTR                // 3 bitwise shift
+
0254 4257         JMS PLUS                // xor met 0070
00252 4261            JMS PLUS                // xor met 0070
+
0255 4263         JMS TTYO                // output to tty0
00253 4265            JMS TTYO                // output to tty0
+
0256 5623         JMP I PRINTNUM
                                           
+
0257 7000 PLUS,  NOP
00254 7300           CLA CLL                // clear AC
+
0260 0300 AND AND7
00255 1276            TAD TMP3                // load TMP3
+
0261 1272         TAD    PLUS60
00256 4261            JMS PLUS                // xor met 0070
+
0262 5657         JMP  I  PLUS
00257 4265            JMS TTYO                // output to tty0
+
0263 7000 TTYO,  NOP                    /TTY OUTPUT ROUTINE. THE FIRST WORD OF
00260 5625            JMP I PRINTNUM
+
0264 6446         6446                   /WRITE AC TO THE OUTPUT DEVICE (TTY)
                                             
+
0265 6441         6441                   /IF TTY IS READY, SKIP NEXT INSTRUCTION.
00261 7000   PLUS,  NOP
+
0266 5265         JMP .-1                /TTY IS NOT READY, SO CHECK AGAIN
00262 0302            AND     AND7
+
0267 7200         CLA                    /CLEAR AC
00263 1274            TAD    PLUS60
+
0270 7000         NOP // Memory broken
00264 5661            JMP  I  PLUS
+
0271 5663         JMP I TTYO              /RETURN TO CALLER
             
+
0272 0060 PLUS60, 60
00265 7000   TTYO,  NOP                    //TTY OUTPUT ROUTINE. THE FIRST WORD OF
+
0273 0000 TMP1,  0
                                              //A SUBROUTINE MUST BE EMPTY (0) BECAUSE
+
0274 0000 TMP3,  0
                                              //THE JMS INSTRUCTION INSERTS THE RETURN
+
0275 0040 SPACE,  40
                                              //ADDR IN THIS WORD.
+
0276 0012 LF,    12
00266 6046            6046                   //WRITE AC TO THE OUTPUT DEVICE (TTY)
+
0277 0015 CR,    15
00267 6041            6041                   //IF TTY IS READY, SKIP NEXT INSTRUCTION.
+
0300 0007 AND7,  7
00270 5267            JMP .-1                //TTY IS NOT READY, SO CHECK AGAIN
+
0301 7000         NOP // Memory broken
00271 7200           CLA                    //CLEAR AC
+
0302 7000 STUK, NOP
00272 7000           NOP // Memory broken
+
0303 7012         RTR            // 9 bitwise shift
00273 5665            JMP I TTYO              //RETURN TO CALLER
+
0304 4257         JMS PLUS                // xor met 0070
             
+
0305 4263         JMS TTYO                // output to tty0
00274 0060   PLUS60, 60
+
0306 5234 JMP HEEL
00275 0000   TMP1,  0
+
0307 7000 LAAD, NOP
00276 0000   TMP3,  0
+
0310 1273         TAD TMP1
00277 0040   SPACE,  40
+
0311 1001         TAD 1
00300 0012   LF,    12
+
0312 7450         SNA
00301 0015   CR,    15
+
0313 7402         HLT
00302 0007   AND7,  7
+
0314 6211         6201 10                // CDF 10
00303 7000           NOP // Memory broken
+
0315 1673         TAD I TMP1              // indirect laden van TMP1
00304 7000   STUK, NOP
+
0316 6210         6210  0                // CDF 0
00305 7012           RTR            // 9 bitwise shift
+
0317 5707         JMP I LAAD
00306 4261            JMS PLUS                // xor met 0070
+
$
00307 4265            JMS TTYO                // output to tty0
 
00310 5236    JMP HEEL
 
              $
 
 
</pre>
 
</pre>
  

Huidige versie van 20 mei 2015 om 16:32

Code for the pdp8/f

for this exact specimen

this code is for the machine in the configuration we got it in.

OS8/SYKES Bootstrap Loader

Pasted on paper on the back of the pdp8 8/e 8/f 8/m Pocket Reference Card

Addr instr comment
0400 1230 -
0401 6321 -
0402 6321 -
0403 7600 -
0404 6322 -
0405 5204 -
0406 6324 -
0407 7106 -
0410 7006 -
0411 3233 -
0412 6322 -
0413 5212 -
0414 6324 -
0415 7012 -
0416 7012 -
0417 0217 -
0420 1233 -
0421 3132 -
0422 2332 very faint..
0423 2331 barely readable
0424 5204 -
0425 1203 -
0426 6321 -
0427 5014 faint could be 5017
0430 0401 faint.
0431 ? writing completely gone
0432 ? writing completely gone

After a coredump we found in field 0 on address 0400 some more of the code. now only one address needs to be found.

Addr instr comment
0400 1230 -
0401 6321 -
0402 6321 -
0403 7600 -
0404 6322 -
0405 5204 -
0406 6324 -
0407 7106 -
0410 7006 -
0411 3233 -
0412 6322 -
0413 5212 -
0414 6324 -
0415 7012 -
0416 7012 -
0417 0217 -
0420 1233 -
0421 3132 -
0422 2332 -
0423 2331 -
0424 5204 -
0425 1203 -
0426 6321 -
0427 5014 -
0430 0401 -
0431 7400 -
0432 0000 bad core? all fields on this adress read 0000

Ascii print on teletype

This is a simple test to see if serial communication is working at least one way. On our machine, the Teletype resides not on the standard address but on address 43/44

0003 7001   INC AC +1
0004 6446   Output char
0005 6441   if flag skip next
0006 5005   JMP 5
0007 5003   JPM 3

For the hightspeed serial card on adress 03/04 use the code below

0003 7001   INC AC +1
0004 6046   Output char
0005 6041   if flag skip next
0006 5005   JMP 5
0007 5003   JPM 3

Another test is from DEC PDP8/e Maintenance Vol. 1 Processor DEC-8E-HMM1a-D-D:

This echos back the caracters typed on a teletype or other serial terminal.

0000 6032   or 6432 for the high speed interface
0001 6031   or 6431 "
0002 5001
0003 6036   or 6436 "
0004 6046   or 6446 "
0005 6041   or 6441 "
0006 5005
0007 5001

code to dump the core of field 0 to a serial port

Bugblue version

There are some jumps because of faulty memory locations. that is why the start address is 176o. We know this program is highly inefficient and much nicer written if you do understand what you are doing. But as it grew we don't like to toggle the whole program again. Hence the very ugly jumps and hacks.

0175 170176	        *176                    /LOCATE PROGRAM STARTING AT ADDR 200
0176 7300	        CLA CLL                 /CLEAR ACCUMULATOR /CLEAR AC LINK
0177 7000	        NOP // bad memory
0200 3273	        DCA TMP1                /STORE THAT (0) IN TMP1
0201 7000	        NOP // bad memory
0202 7000	MAIN,   NOP
0203 1273	        TAD TMP1                // load TMP1
0204 4223	        JMS PRINTNUM            // print dit nummer
0205 7300	        CLA CLL
0206 1275	        TAD SPACE
0207 4263	        JMS TTYO                // output to tty0
0210 4307	        JMS LAAD                // LOAD data field (change)
0211 4223	        JMS PRINTNUM            // print dit nummer
0212 1273	        TAD TMP1                // load TMP1
0213 7001	        IAC                     // INCREMENT 1
0214 3273	        DCA TMP1 
0215 1277	        TAD CR
0216 4263	        JMS TTYO                // output to tty0
0217 7300	        CLA CLL
0220 1276	        TAD LF
0221 4263	        JMS TTYO                // output to tty0
0222 5202	        JMP MAIN                // tada.wav
0223 7000	PRINTNUM, NOP
0224 3274	        DCA TMP3                // store this in tmp3
0225 1274	        TAD TMP3                // get it.
0226 7010	        RAR
0227 7012	        RTR
0230 7012	        RTR
0231 7012	        RTR
0232 4302	        JMS STUK
0233 7000	        NOP
0234 7000	HEEL,   NOP
0235 7300	        CLA CLL                 // clear AC
0236 1274	        TAD TMP3                // load TMP3
0237 7012	        RTR
0240 7012	        RTR
0241 7012	        RTR             // 6 bitwise shift
0242 4257	        JMS PLUS                // xor met 0070
0243 4263	        JMS TTYO                // output to tty0
0244 7300	        CLA CLL                 // clear AC
0245 1274	        TAD TMP3                // load TMP3
0246 7010	        RAR
0247 7012	        RTR                 // 3 bitwise shift
0250 4257	        JMS PLUS                // xor met 0070
0251 4263	        JMS TTYO                // output to tty0
0252 7300	        CLA CLL                 // clear AC
0253 1274	        TAD TMP3                // load TMP3
0254 4257	        JMS PLUS                // xor met 0070
0255 4263	        JMS TTYO                // output to tty0
0256 5623	        JMP I PRINTNUM
0257 7000	PLUS,   NOP
0260 0300		AND	AND7
0261 1272	        TAD     PLUS60
0262 5657	        JMP   I  PLUS
0263 7000	TTYO,   NOP                     /TTY OUTPUT ROUTINE. THE FIRST WORD OF
0264 6446	        6446                    /WRITE AC TO THE OUTPUT DEVICE (TTY)
0265 6441	        6441                    /IF TTY IS READY, SKIP NEXT INSTRUCTION.
0266 5265	        JMP .-1                 /TTY IS NOT READY, SO CHECK AGAIN
0267 7200	        CLA                     /CLEAR AC
0270 7000	        NOP // Memory broken
0271 5663	        JMP I TTYO              /RETURN TO CALLER
0272 0060	PLUS60, 60
0273 0000	TMP1,   0
0274 0000	TMP3,   0
0275 0040	SPACE,  40
0276 0012	LF,     12
0277 0015	CR,     15
0300 0007	AND7,   7
0301 7000	        NOP // Memory broken
0302 7000	STUK, NOP
0303 7012	        RTR             // 9 bitwise shift
0304 4257	        JMS PLUS                // xor met 0070
0305 4263	        JMS TTYO                // output to tty0
0306 5234	JMP HEEL
0307 7000	LAAD, NOP
0310 1273	        TAD TMP1
0311 1001	        TAD 1
0312 7450	        SNA
0313 7402	        HLT
0314 6211	        6201 10                 // CDF 10
0315 1673	        TAD I TMP1              // indirect laden van TMP1
0316 6210	        6210  0                 // CDF 0
0317 5707	        JMP I LAAD
	$

Rick Murphy version

Here's a dump program. It'll dump a field from (by default) location 0 to 7777. This is set up to dump field 1; change the CDF at location 206 to whatever field you want (CDF 20 is 6221; CDF 30 is 6231, etc.) Starting location is in PTR at 0221.

Note that OS/8 usually outputs ASCII with mark parity. That will confuse most modern systems. This code outputs with space parity. Tested on SIMH. Updates to avoid bad memory locations need to be made, of course.

        0200                 *200             //start address
000200  1221         LOOP,   TAD     PTR     // Get the address
000201  4226                 JMS     PRINT   // Print the address
000202  1222                 TAD     COLON   // Output a space after the address

000203  4255                 JMS     TTYO
000204  1223                 TAD     SPACE
000205  4255                 JMS     TTYO
000206  6211                 CDF     10      // Field 1
000207  1621                 TAD I   PTR     // Get the value
000210  6201                 CDF     0       // Restore field
000211  4226                 JMS     PRINT   // Print it
000212  1224                 TAD     CR
000213  4255                 JMS     TTYO
000214  1225                 TAD     LF
000215  4255                 JMS     TTYO
000216  2221                 ISZ     PTR     // Bump the pointer
000217  5200                 JMP     LOOP
000220  7402                 HLT             // Done

000221  0000         PTR,    0               // Start address
000222  0072         COLON,  ":
000223  0040         SPACE,  "
000224  0015         CR,     15              // Octal CR value[B
000225  0012         LF,     12

000226  0000         PRINT,  .-.             // Print a word
000227  3252                 DCA     SAVE    // Word being printed - address or value
000230  1252                 TAD     SAVE
000231  7104                 CLL RAL         // Push one bit into the Link
000232  3252                 DCA     SAVE
000233  4240                 JMS     TTYNUM  // Print one octal digit at a time
000234  4240                 JMS     TTYNUM
000235  4240                 JMS     TTYNUM
000236  4240                 JMS     TTYNUM
000237  5626                 JMP I   PRINT

000240  0000         TTYNUM, .-.
000241  1252                 TAD     SAVE
000242  7004                 RAL
000243  7006                 RTL             // High order digit to low order word
000244  3252                 DCA     SAVE    // Save state
000245  1252                 TAD     SAVE
000246  0253                 AND     SEVEN
000247  1254                 TAD     ZERO
000250  4255                 JMS     TTYO
000251  5640                 JMP I   TTYNUM
000252  0000         SAVE,   0
000253  0007         SEVEN,  7
000254  0060         ZERO,   "0

000255  0000         TTYO,   .-.
000256  6046                 6046
000257  6041                 6041
000260  5257                 JMP     .-1
000261  7200                 CLA
000262  5655                 JMP I   TTYO