PDP12.ORG Logo

PDP-8 Minis
PDP-8/I
PDP-8 (0)
PDP-8/A
PDP-8/E (3)
PDP-8/F
PDP-8/I
PDP-8/L
PDP-8/M (2)
PDP-8/S (0)
Reference
PDP-11 Minis
PDP-11/R20
PDP-11/10
PDP-11/20
PDP-11/R20
PDP-11/23
PDP-11/34
Reference
PDP-12 Minis
PDP-12 Front View
PDP-12
Reference
Calculators
Front View of HP-9100
HP-9100B
Monroe 630
Tektronix 909
Test Equipment
Front View of HP-3440
GR-1683
HP-3440
Marconi 2955B
Miscellaneous
Front View of IBM 360 Front Panel
Help the Museum
About...
Contact Us
Hosted by KRTEN.COM

MAINDEC-08-DHTAA-B TA8E TU60 Diagnostics


This is the reverse engineered version of the TA8/E maindec DHTAA-B diagnostic. It's a work in progress; any and all help welcome. Before you start, though, send me an email and I'll ensure you have the latest version.


TITLE "MAINDEC-08-DHTAA-B TA8/E DIAGNOSTIC -- REVERSE ENGINEERED" ////////////////////////////////////////////////////////////////////////////// / / DHTAA-B.PAL / / 2007 10 23 R. Krten began reverse engineering process / / Last update 2007 11 01 / ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// / [These are the original docs which are somewhat wrong, probably for / the DHTAA-A version] / / Run the IOT Modification routine (0204) if required, then the other / tests in the order specified. / / 0200 Static Test (STEST) / 1) ensure that both drives are unloaded / 2) set SR to 0200, load address / 3) set SR to 0000, press CLEAR and then CONT / Teletype will print "S" for each pass / Run three passes (running time = 19 sec per pass) / / 0201 Control Test (CTEST) / 1) write enable and load both drives / 2) set SR to 0201, load address / 3) set SR to 0000, press CLEAR and then CONT / Teletype will print "A" or "B" for each pass / Run four passes for each drive (running time = 2 min 15 sec per pass). / / 0202 Data Test (DTEST) / 1) write enable and load both drives / 2) set SR to 0202, load address / 3) set SR to 0000, press CLEAR and then CONT / Teletype will print "A" or "B" for each pass / Run four passes for each drive (running time = 2 min per pass) / / 0203 Write Protect Test (WPTEST) / 1) write enable and load both drives / 2) set SR to 0203, load address / 3) set SR to 0000, press CLEAR and then CONT / 4) follow instructions printed out on the teletype for succeeding / steps. / After teletype prints "OK" for Drive A, press CONT for drive B with SR / 11 set to 0 (running time = 1 min per TU60) / / 0204 IOT Modification routine (IOTMOD) / 1) load SR bits 6-8 to device code bits 6-8 / 2) press CLEAR and then CONT / Additional continues will be required / / New docs: / / SR1, if on, is used to continually repeat a test. / SR2, if on, is used to continually repeat a command (part of a test) / SR3, if on, will print diagnostics to the TTY / SR4, if on, skips errors ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// / / Convenience macros to make the code easier to read / ////////////////////////////////////////////////////////////////////////////// / These are used to give more meaningful opcodes to the indirect jump for / the IOTs -- it's the IOT name prefixed by "X" XKCLR=JMS I C0020 XKSDR=JMS I C0021 XKSEN=JMS I C0022 XKSBF=JMS I C0023 XKLSA=JMS I C0024 XKSAF=JMS I C0025 XKGOA=JMS I C0026 XKRSB=JMS I C0027 ////////////////////////////////////////////////////////////////////////////// / / SOURCE / ////////////////////////////////////////////////////////////////////////////// *0200 / ORIGIN change to 0200 (this is what the tape does) *0000 / ORIGIN change to 0000 C0000, 0000 / interrupt vector return area L0001, JMP L0001 / interrupts cause infinite loops until "DCA L0001" / patches the interrupt vector table D0002, 0002 / patched address of interrupt vector via "DCA D0002" 0003 0000 D0005, 0000 K5402, 5402 / interrupt vector "JMP I 0002" patch for L0001 K4156, INTVEC / address of interrupt vector ////////////////////////////////////////////////////////////////////////////// / / Locations 0010 through 0017 are special, they are the autoindex / registers. Whenever the locations are accessed indirectly, they / are incremented before they are used. / ////////////////////////////////////////////////////////////////////////////// AI10, 0000 / autoindex data @ 0010 AI11, 0000 / autoindex data @ 0011 AI12, 0000 / autoindex data @ 0012 AI13, 0000 / autoindex data @ 0013 / Indirect jump table for IOTs *0020 / ORIGIN change to 0020 C0020, S4000 / KCLR IOT C0021, S4006 / skip if data flag is set during r/w C0022, S4013 / skip if EOT/BOT, not ready, or empty C0023, S4020 / skip if ready flag set C0024, S4025 / AC 4-11 -> A, AC = NOT A C0025, S4032 / KSAF IOT C0026, S4037 / KGOA IOT C0027, S4044 / KRSB IOT C0030, KSAF4K / KSAF IOT x 4096 C0031, S4400 C0032, S4600 C0033, S4423 C0034, S4436 C0035, S4665 C0036, S4200 C0037, S4302 C0040, LKSAF C0041, VRFYB C0042, LVREGA ////////////////////////////////////////////////////////////////////////////// / / SVACM1 / / Saves the contents of the accumulator - 1 at D0051, clears the AC. / ////////////////////////////////////////////////////////////////////////////// SVACM1, 0 / return area DCA D0051 / store AC in D0051 CMA / AC = -1 TAD D0051 / AC += D0051 DCA D0051 / store AC in D0051 (i.e., D0051 = AC - 1; AC = 0) JMP I SVACM1 / return D0051, 0000 / stores contents of AC-1 ////////////////////////////////////////////////////////////////////////////// / / SETJMP / / Routine to save the PC. / ////////////////////////////////////////////////////////////////////////////// SETJMP, 0 / return value JMP I SETJMP / return immediately D0054, 0000 0000 C0056, 0010 K0020, 0020 K0030, 0030 K0040, 0040 K0050, 0050 K0060, 0060 C0064, 0070 REGA, 0000 / register A save area NREGA, 0000 / complement (bits 4-11) of REGA DRIVE, 0000 / drive number (0000 = A, 0100 = B) D0070, 0000 KM0001, 7777 / -0001 C0072, 7772 / -0006 KM0010, 7770 / -0010 KM0041, 7737 / -0041 KM0012, 7766 / -0012 NEXPB, 0000 / negative value of expected B register REGB, 0000 / register B save area K0100, 0100 D0101, 0200 C0102, 0201 0300 K0377, 0377 C0105, 7400 D0106, 0000 D0107, 0000 C0110, KBDCHK / indirect call D0111, 0000 D0112, 0000 D0113, 0000 / progress counter for stest? IPRT4, PRT4 / indirect call IPUTS, PUTS / indirect call IS0116, S5256 / indirect call D0117, 0000 ILJSR1, LJSR1 / indirect call C0121, S5042 / indirect call C0122, J4SR21 / indirect call C0123, J3SR21 / indirect call KM0004, 7774 / -0004 KM0005, 7773 / -0005 KM0006, 7772 / -0006 D0127, 0000 D0130, 0000 D0131, 0000 D0132, 0000 D0133, 0000 D0134, 0000 ////////////////////////////////////////////////////////////////////////////// / / Main entry vectors: / / 0200 static test / 0201 control test / 0202 data test / 0203 write protect test / 0204 IOT modification / ////////////////////////////////////////////////////////////////////////////// *0200 / ORIGIN change to 0200 MAIN, JMP I ISTEST JMP I ICTEST JMP I IDTEST JMP I IWPTEST JMP I IIOTMOD JMP I D0372 JMP I D0371 JMP I D0370 JMP I D0367 JMP I D0366 JMP I D0365 JMP I D0364 JMP I D0363 ////////////////////////////////////////////////////////////////////////////// / / Static test, part 2 / / This launches the following tests. Each test can be repeated infinitely / by setting SR1 to on. / / The first test is non-loopable, and simply ensures that KSRB gives a zero / after the KCLR function has been called. / / Test 1: Write and verify 0377 to register A / Test 2: Write and verify 0000 to register A, 0000 from B / Test 3: Write and verify bit patterns 0001-0200 into register A / Test 4: Write and verify all values for register A / Test 5: / Test 6: / Test 7: / ////////////////////////////////////////////////////////////////////////////// STEST2, / establish interrupt vector TAD K5402 / DCA L0001 / Patch the interrupt vector table to "JMP I D0002" TAD K4156 / DCA D0002 / Address of interrupt vector (INTVEC) L0221, TAD KM0010 / DCA D0113 / D0113 = -0010 L0223, XKCLR / clear all, A & B DCA D0051 / clear D0051 TAD K0377 / set AC to 0377 (bits 4-11 on) XKRSB / read status B into AC4-11 SZA / we expect zero HLT / ERROR -- didn't read back zero from KRSB / Static Test 1 (write and verify 0377 to register A) JMS SETJMP CLA TAD K0377 / AC = 0377 JMS I C0042 / call LVREGA JMS I ILJSR1 / long jump if SR1 on / Static Test 2 (write and verify 0000 to register A, 0000 from B) JMS SETJMP CLA CLL / clear AC and link JMS I C0042 / call LVREGA JMS I C0041 / call VRFYB JMS I ILJSR1 / long jump if SR1 on / Static Test 3 (write and verify bit patterns into register A) JMS SETJMP TAD KM0010 / Set loop counter DCA D0107 / D0107 = -0010 CLL IAC / AC = 0001 (first bit pattern) DCA D0111 / store in D0111 L0250, TAD D0111 / fetch bit pattern JMS I C0042 / call LVREGA TAD D0111 CLL RAL / next bit pattern DCA D0111 / store ISZ D0107 / iterate JMP L0250 / 8 times JMS I ILJSR1 / long jump if SR1 on / Static Test 4 (write and verify all possible register A values) JMS SETJMP DCA D0111 / clear D0111 TAD K0377 / AC = 0377 CIA / AC = -0400 DCA D0107 / D0107 = -0400 L0265, TAD D0111 / fetch current value JMS I C0042 / call LVREGA ISZ D0111 / make next test value (won't overflow) ISZ D0107 / next D0107 JMP L0265 / loop XKCLR / clear A & B registers JMS I C0041 / call VRFYB JMS I ILJSR1 / long jump if SR1 on / Static Test 5 JMS SETJMP TAD D0362 / AC = 7601 (-0177) DCA D0107 / stash DCA D0111 / zero D0111 L0301, TAD D0111 / test value JMS I C0042 / call LVREGA L0303, XKGOA / assert A, transfer data with AC XKSDR / skip if data flag is set during r/w SKP CLA JMS I D0361 / call KSDRSK JMS I C0122 / J4SR21 -- jump back 4 (to KSDR) if SR2 is on XKSEN / skip if EOT/BOT, not ready, or empty SKP JMS I D0360 JMS I C0122 / J4SR21 -- jump back 4 (to KSEN) if SR2 is on XKSBF / skip if ready flag set SKP JMS I D0357 JMS I C0122 / J4SR21 -- jump back 4 (to KSBF) if SR2 is on XKSAF / skip on any flag or error condition SKP CLA JMS I D0356 JMS I C0122 / J4SR21 -- jump back 4 (to KSAF) if SR2 is on JMS I C0041 / call VRFYB ISZ D0111 / next test value (won't overflow) ISZ D0107 / next D0107 JMP L0301 / loop JMS I ILJSR1 / done, long jump if SR1 on / Static Test 6 JMS SETJMP CLA CLL TAD DRIVE JMS I C0042 / call LVREGA JMS I C0041 / call VRFYB JMS I ILJSR1 / long jump if SR1 on / Static Test 7 JMS SETJMP TAD D0101 TAD DRIVE JMS I C0042 / call LVREGA TAD KM0012 JMS I C0041 / call VRFYB JMS I ILJSR1 / long jump if SR1 on LAS RTR SZL CLA JMP I D0355 JMP I ISTST3 / continue on next page *0354 / ORIGIN change to 0354 ISTST3, STEST3 D0355, 0411 D0356, KSAFSK D0357, S6304 D0360, S6263 D0361, KSDRSK D0362, 7601 D0363, F5442 D0364, F5600 D0365, F5320 D0366, F5507 D0367, F5466 D0370, F5422 D0371, F5400 D0372, F5303 / Jump tables for documented tests IIOTMOD, IOTMOD IWPTEST, WPTEST IDTEST, DTEST ICTEST, CTEST ISTEST, STEST ////////////////////////////////////////////////////////////////////////////// / / Static test, part 3 / / This continues the static tests. Each test can be repeated infinitely by / setting SR1 to on. / / Test 8: / Test 9: / Test 10: / Test 11: / ////////////////////////////////////////////////////////////////////////////// *0400 / ORIGIN change to 0400 STEST3, / Static test 8 JMS SETJMP TAD D0101 TAD DRIVE JMS I C0042 / call LVREGA TAD KM0012 JMS I C0041 / call VRFYB 6007 JMS I C0041 / call VRFYB JMS I ILJSR1 / long jump if SR1 on / Static test 9 JMS SETJMP CLA TAD D0577 DCA D0107 DCA D0111 L0416, TAD D0101 TAD DRIVE TAD D0111 JMS I C0042 / call LVREGA XKGOA / assert A, transfer data with AC XKSDR / skip if data flag is set during r/w SKP JMS I D0576 JMS I C0122 / J4SR21 -- jump back 4 (to KSDR) if SR2 is on XKSEN / skip if EOT/BOT, not ready, or empty JMS I D0575 JMS I C0123 / J3SR21 -- jump back 3 (to KSEN) if SR2 is on XKSBF / skip if ready flag set SKP CLA JMS I D0574 JMS I C0122 / J4SR21 -- jump back 4 (to KSBF) if SR2 is on XKSAF / skip on any flag or error condition JMS I D0573 JMS I C0123 / J3SR21 -- jump back 3 (to KSAF) if SR2 is on TAD KM0012 JMS I C0041 / call VRFYB XKCLR / clear A & B registers JMS I C0041 / call VRFYB ISZ D0111 ISZ D0107 JMP L0416 JMS I ILJSR1 / long jump if SR1 on / Static test 10 JMS SETJMP CLA CLL DCA D0107 L0454, TAD D0101 TAD DRIVE JMS I C0042 / call LVREGA XKGOA / assert A, transfer data with AC CLA XKSDR / skip if data flag is set during r/w SKP JMS I D0576 JMS I C0122 / J4SR21 -- jump back 4 (to KSDR) if SR2 is on JMS I C0110 / call KBDCHK SZA CLA JMS I D0572 XKSEN / skip if EOT/BOT, not ready, or empty JMS I D0575 JMS I C0123 / J3SR21 -- jump back 3 (to KSEN) if SR2 is on JMS I C0110 / call KBDCHK SZA CLA JMS I D0572 XKSBF / skip if ready flag set SKP JMS I D0574 JMS I C0122 / J4SR21 -- jump back 4 (to KSBF) if SR2 is on JMS I C0110 / call KBDCHK SZA CLA JMS I D0572 XKSAF / skip on any flag or error condition JMS I D0573 JMS I C0123 / J3SR21 -- jump back 3 (to KSAF) if SR2 is on JMS I C0110 / call KBDCHK SZA CLA JMS I D0572 TAD KM0012 JMS I C0041 / call VRFYB ISZ D0107 JMP L0454 JMS I ILJSR1 / long jump if SR1 on / Static test 11 JMS SETJMP CLA DCA D0107 L0523, TAD C0102 TAD DRIVE JMS I C0042 / call LVREGA XKSDR / skip if data flag is set during r/w SKP JMS I D0576 JMS I C0122 / J4SR21 -- jump back 4 (to KSDR) if SR2 is on JMS I C0110 / call KBDCHK SNA CLA JMS I D0571 XKSEN / skip if EOT/BOT, not ready, or empty JMS I D0575 JMS I C0123 / J3SR21 -- jump back 3 (to KSEN) if SR2 is on JMS I C0110 / call KBDCHK SNA CLA JMS I D0571 XKSBF / skip if ready flag set SKP JMS I D0574 JMS I C0122 / J4SR21 -- jump back 4 (to KSBF) if SR2 is on JMS I C0110 / call KBDCHK SNA CLA JMS I D0571 XKSAF / skip on any flag or error condition JMS I D0573 JMS I C0123 / J3SR21 -- jump back 3 (to KSAF) if SR2 is on JMS I C0110 / call KBDCHK SNA CLA JMS I D0571 TAD KM0012 JMS I C0041 / call VRFYB ISZ D0107 JMP L0523 JMS I ILJSR1 / long jump if SR1 on JMP I ISTST4 / continue... *0570 / ORIGIN change to 0570 ISTST4, STEST4 D0571, NOINTR D0572, INTR D0573, 6242 D0574, 6304 D0575, 6110 D0576, KSDRSK D0577, 7701 ////////////////////////////////////////////////////////////////////////////// / / Static test, part 4 / / This continues the static tests. Each test can be repeated infinitely by / setting SR1 to on. / / Test 12: / Test 13: / Test 14: / Test 15: / Test 16: Test for all 8 FR values 000 -> 111 / ////////////////////////////////////////////////////////////////////////////// *0600 / ORIGIN change to 0600 STEST4, / Static test 12 JMS SETJMP CLA CLL CMA RAL / AC = -2 DCA D0070 TAD K0377 L0604, DCA D0111 JMS S0751 ISZ D0070 JMP L0604 JMS I ILJSR1 / long jump if SR1 on / Static test 13 JMS SETJMP TAD KM0010 / set loop counter DCA D0070 / to -0010 CLL IAC DCA D0111 L0616, JMS S0751 TAD D0111 CLL RAL DCA D0111 ISZ D0070 JMP L0616 JMS I ILJSR1 / long jump if SR1 on / Static test 14 JMS SETJMP TAD D0777 DCA D0070 DCA D0111 L0631, JMS S0751 ISZ D0111 ISZ D0070 JMP L0631 JMS I ILJSR1 / long jump if SR1 on / Static test 15 JMS SETJMP TAD D0777 DCA D0070 DCA D0111 L0642, TAD K0020 / add 0020 JMS I C0042 / call LVREGA TAD D0111 XKGOA / assert A, transfer data with AC CLA JMS I C0042 / call LVREGA TAD K0060 JMS I C0042 / call LVREGA XKGOA / assert A, transfer data with AC DCA D0112 TAD D0111 CIA TAD D0112 SZA CLA JMS I D0776 JMS I D0775 JMP L0642 ISZ D0111 ISZ D0070 JMP L0642 JMS I ILJSR1 / long jump if SR1 on / Static test 16 JMS SETJMP JMS I C0042 / call LVREGA (with FR=000, Read) CMA XKGOA / assert A, transfer data with AC SPA CLA HLT / AC0 set after KGOA/000 TAD C0056 / set FR to 001, Rewind JMS I C0042 / call LVREGA CMA XKGOA / assert A, transfer data with AC SMA CLA HLT / AC0 clear after KGOA/001 TAD K0020 / set FR to 010, Write JMS I C0042 / call LVREGA CMA XKGOA / assert A, transfer data with AC SMA CLA HLT / AC0 clear after KGOA/010 TAD K0030 / set FR to 011, Back Space to File Gap JMS I C0042 / call LVREGA CMA XKGOA / assert A, transfer data with AC SMA CLA HLT / AC0 clear after KGOA/011 TAD K0040 / set FR to 100, Write Gap JMS I C0042 / call LVREGA CMA XKGOA / assert A, transfer data with AC SMA CLA HLT / AC0 clear after KGOA/100 TAD K0050 / set FR to 101, Back Space to Block Gap JMS I C0042 / call LVREGA CMA XKGOA / assert A, transfer data with AC SMA CLA HLT / AC0 clear after KGOA/101 TAD K0060 / set FR to 110, Read/Write CRC Character JMS I C0042 / call LVREGA CMA XKGOA / assert A, transfer data with AC SPA CLA HLT / AC0 set after KGOA/110 TAD C0064 / set FR to 111, Space Forward to File Gap JMS I C0042 / call LVREGA CMA XKGOA / assert A, transfer data with AC SMA CLA HLT / AC0 clear after KGOA/111 JMS I ILJSR1 / long jump if SR1 on JMP I ISTST5 / continue... ////////////////////////////////////////////////////////////////////////////// / / S0751 / ////////////////////////////////////////////////////////////////////////////// S0751, 0 / return area L0752, TAD K0020 JMS I C0042 / call LVREGA TAD D0111 XKGOA / assert A, transfer data with AC CLA JMS I C0042 / call LVREGA XKGOA / assert A, transfer data with AC DCA D0112 TAD D0111 CIA TAD D0112 SZA CLA JMS I D0776 JMS I D0775 JMP L0752 JMP I S0751 / return *0774 / ORIGIN change to 0774 ISTST5, STEST5 D0775, 1143 D0776, DATAER D0777, 7401 ////////////////////////////////////////////////////////////////////////////// / / Control Test, part 2 / / This launches the following tests. Each test can be repeated indefinitely / by setting SR1 to 1. / / Test 1: verify write of 0 to register A and read of 0 from B / Test 2: / Test 3: / Test 4: / Test 5: / Test 6: / ////////////////////////////////////////////////////////////////////////////// *1000 / ORIGIN change to 1000 CTEST2, XKCLR / clear A & B registers DCA D0051 / clear D0051 / Control test 1 (write 0 to A, read 0 from B) JMS SETJMP JMS I C0042 / call LVREGA JMS I C0041 / call VRFYB JMS I ILJSR1 / long jump if SR1 on / Control test 2 JMS SETJMP TAD D0101 TAD DRIVE JMS I C0042 / call LVREGA XKRSB / read status B into AC4-11 TAD KM0001 SNA CLA JMP L1021 TAD KM0041 JMS I C0041 / call VRFYB JMS I ILJSR1 / long jump if SR1 on / Control test 3 L1021, JMS SETJMP XKCLR / clear A & B registers JMS I C0041 / call VRFYB JMS I ILJSR1 / long jump if SR1 on / Control test 4 JMS SETJMP XKCLR / clear A & B registers TAD D0101 TAD DRIVE JMS I C0042 / call LVREGA XKRSB / read status B into AC4-11 TAD KM0001 SNA CLA JMP L1044 TAD KM0041 JMS I C0041 / call VRFYB XKSEN / skip if EOT/BOT, not ready, or empty JMS I D1177 JMS I C0123 / J3SR21 -- jump back 3 (to KSEN) if SR2 is on JMP L1050 L1044, XKSEN / skip if EOT/BOT, not ready, or empty SKP JMS I D1176 JMS I C0122 / J4SR21 -- jump back 4 (to KSEN) if SR2 is on L1050, XKSDR / skip if data flag is set during r/w SKP JMS I D1175 JMS I C0122 / J4SR21 -- jump back 4 (to KSDR) if SR2 is on XKSBF / skip if ready flag set JMS I D1174 JMS I C0123 / J3SR21 -- jump back 3 (to KSBF) if SR2 is on XKSAF / skip on any flag or error condition JMS I D1173 JMS I C0123 / J3SR21 -- jump back 3 (to KSAF) if SR2 is on TAD C0102 TAD DRIVE JMS I C0042 / call LVREGA JMS I C0110 / call KBDCHK SNA CLA JMS I D1172 JMS I ILJSR1 / long jump if SR1 on / Control test 5 JMS SETJMP XKCLR / clear A & B registers JMS I C0041 / call VRFYB XKSDR / skip if data flag is set during r/w SKP JMS I D1175 JMS I C0122 / J4SR21 -- jump back 4 (to KSDR) if SR2 is on XKSEN / skip if EOT/BOT, not ready, or empty SKP JMS I D1176 JMS I C0122 / J4SR21 -- jump back 4 (to KSEN) if SR2 is on XKSBF / skip if ready flag set SKP JMS I D1171 JMS I C0122 / J4SR21 -- jump back 4 (to KSBF) if SR2 is on XKSAF / skip on any flag or error condition SKP JMS I D1170 JMS I C0122 / J4SR21 -- jump back 4 (to KSAF) if SR2 is on JMS I C0110 / call KBDCHK SZA CLA JMS I D1167 JMS I ILJSR1 / long jump if SR1 on / Control test 6 JMS SETJMP DCA D0111 L1122, TAD D0111 AND D1166 JMS I C0042 / call LVREGA XKGOA / assert A, transfer data with AC CLA JMS I C0041 / call VRFYB XKSAF / skip on any flag or error condition SKP JMS I D1170 JMS I C0122 / J4SR21 -- jump back 4 (to KSAF) if SR2 is on ISZ D0111 TAD D0111 TAD D1165 SZA CLA JMP L1122 JMS I ILJSR1 / long jump if SR1 on JMP I D1164 / goto CTEST3 ////////////////////////////////////////////////////////////////////////////// / / S1143 / / Subroutine to skip instruction if SR0 is off. / ////////////////////////////////////////////////////////////////////////////// S1143, 0 / return area LAS / fetch SR SPA CLA / skip if SR0 clear JMP I S1143 / normal return ISZ S1143 / skip JMP I S1143 / skip return *1164 / ORIGIN change to 1164 D1164, CTEST3 D1165, 7601 D1166, 0177 D1167, INTR D1170, KSAFSK D1171, 6304 D1172, NOINTR D1173, 6242 D1174, 6200 D1175, KSDRSK D1176, 6263 D1177, 6110 ////////////////////////////////////////////////////////////////////////////// / / Control Test part 3 / / Test 7: / Test 8: / Test 9: / Test 10: / Test 11: / Test 12: / Test 13: / Test 14: / Test 15: / Test 16: / Test 17: / Test 18: / Test 19: / ////////////////////////////////////////////////////////////////////////////// *1200 / ORIGIN change to 1200 CTEST3, XKCLR / clear A & B registers DCA D0127 DCA D0130 JMS I D1377 / Control Test 7 JMS SETJMP JMS I C0032 / call S4600 JMS I C0031 / call S4400 JMS I ILJSR1 / long jump if SR1 on / Control Test 8 JMS SETJMP JMS I C0032 / call S4600 JMS I C0031 / call S4400 STA JMS I C0037 / call S4032 JMS I ILJSR1 / long jump if SR1 on / Control Test 9 JMS SETJMP JMS I C0032 / call S4600 STA JMS I C0036 / call S4200 JMS I C0031 / call S4400 JMS I ILJSR1 / long jump if SR1 on / Control Test 10 JMS SETJMP JMS I C0032 / call S4600 JMS I C0033 / call S4423 JMS I ILJSR1 / long jump if SR1 on / Control Test 11 JMS SETJMP JMS I C0032 / call S4600 JMS I C0033 / call S4423 JMS I C0035 / call S4665 STA JMS I C0036 / call S4200 JMS I ILJSR1 / long jump if SR1 on / Control Test 12 JMS SETJMP JMS I C0032 / call S4600 JMS I C0033 / call S4423 JMS I C0034 / call S4436 STA JMS I C0036 / call S4200 JMS I ILJSR1 / long jump if SR1 on / Control Test 13 JMS SETJMP JMS I C0032 / call S4600 STA JMS I C0036 / call S4200 JMS I C0031 / call S4400 CLA CLL CMA RAL / AC = -2 JMS I C0037 / call S4032 JMS I C0035 / call S4665 CLA CLL CMA RAL / AC = -2 JMS I C0036 / call S4200 JMS I ILJSR1 / long jump if SR1 on / Control Test 14 JMS SETJMP JMS I C0032 / call S4600 STA JMS I C0036 / call S4200 JMS I C0031 / call S4400 CLA CLL CMA RAL / AC = -2 JMS I C0037 / call S4032 JMS I C0034 / call S4436 CLA CLL CMA RAL / AC = -2 JMS I C0036 / call S4200 JMS I ILJSR1 / long jump if SR1 on / Control Test 15 JMS SETJMP JMS I C0032 / call S4600 JMS I C0033 / call S4423 CLA CLL CMA RAL / AC = -2 JMS I C0036 / call S4200 JMS I ILJSR1 / long jump if SR1 on / Control Test 16 JMS SETJMP JMS I C0032 / call S4600 JMS I C0033 / call S4423 CLA CLL CMA RAL / AC = -2 JMS I C0036 / call S4200 JMS I C0035 / call S4665 CLA CLL CMA RAL / AC = -2 JMS I C0036 / call S4200 JMS I C0035 / call S4665 JMS I C0035 / call S4665 STA JMS I C0036 / call S4200 JMS I ILJSR1 / long jump if SR1 on / Control Test 17 JMS SETJMP JMS I C0032 / call S4600 JMS I C0033 / call S4423 CLA CLL CMA RAL / AC = -2 JMS I C0036 / call S4200 JMS I C0034 / call S4436 CLA CLL CMA RAL / AC = -2 JMS I C0036 / call S4200 JMS I C0034 / call S4436 JMS I C0034 / call S4436 STA JMS I C0036 / call S4200 JMS I ILJSR1 / long jump if SR1 on / Control Test 18 JMS SETJMP JMS I C0032 / call S4600 STA JMS I C0036 / call S4200 JMS I C0033 / call S4423 CLA CLL CMA RAL / AC = -2 JMS I C0036 / call S4200 JMS I ILJSR1 / long jump if SR1 on / Control Test 19 JMS SETJMP JMS I C0032 / call S4600 JMS I C0031 / call S4400 STA JMS I C0037 / call S4032 JMS I C0035 / call S4665 STA JMS I C0036 / call S4200 JMS I C0035 / call S4665 STA JMS I C0036 / call S4200 JMS I C0034 / call S4436 STA JMS I C0036 / call S4200 JMS I ILJSR1 / long jump if SR1 on JMP I D1376 / goto CTEST4 *1376 / ORIGIN change to 1376 D1376, CTEST4 D1377, 4535 ////////////////////////////////////////////////////////////////////////////// / / Control Test part 4 / / Test 20: / Test 21: / Test 22: / Test 23: / Test 24: / Test 25: / Test 26: / Test 27: / Test 28: / ////////////////////////////////////////////////////////////////////////////// *1400 / ORIGIN change to 1400 CTEST4, / Control Test 20 JMS SETJMP JMS I C0032 / call S4600 STA JMS I C0036 / call S4200 JMS I C0031 / call S4400 JMS I C0034 / call S4436 STA JMS I C0036 / call S4200 JMS I C0031 / call S4400 JMS I C0035 / call S4665 STA JMS I C0036 / call S4200 JMS I ILJSR1 / long jump if SR1 on / Control Test 21 JMS SETJMP JMS I C0032 / call S4600 STA JMS I C0036 / call S4200 JMS I C0031 / call S4400 CLA CLL CMA RAL / AC = -2 JMS I C0037 / call S4032 JMS I C0035 / call S4665 CLA CLL CMA RAL / AC = -2 JMS I C0036 / call S4200 CLA CLL CMA RTL JMS I C0037 / call S4032 JMS I C0035 / call S4665 CLA CLL CMA RTL JMS I C0036 / call S4200 JMS I C0034 / call S4436 CLA CLL CMA RAL / AC = -2 JMS I C0036 / call S4200 CLA CLL CMA RTL JMS I C0036 / call S4200 JMS I C0035 / call S4665 JMS I C0035 / call S4665 CLA CLL CMA RAL / AC = -2 JMS I C0036 / call S4200 CLA CLL CMA RTL JMS I C0036 / call S4200 JMS I C0034 / call S4436 JMS I C0034 / call S4436 STA JMS I C0036 / call S4200 JMS I C0033 / call S4423 CLA CLL CMA RAL / AC = -2 JMS I C0036 / call S4200 CLA CLL CMA RTL JMS I C0036 / call S4200 JMS I C0034 / call S4436 JMS I C0035 / call S4665 STA JMS I C0036 / call S4200 JMS I C0034 / call S4436 JMS I C0033 / call S4423 CLA CLL CMA RAL / AC = -2 JMS I C0036 / call S4200 CLA CLL CMA RTL JMS I C0036 / call S4200 JMS I C0031 / call S4400 TAD KM0004 JMS I C0037 / call S4032 JMS I C0034 / call S4436 TAD KM0004 JMS I C0036 / call S4200 TAD KM0005 JMS I C0037 / call S4032 JMS I C0035 / call S4665 TAD KM0005 JMS I C0036 / call S4200 JMS I C0035 / call S4665 JMS I ILJSR1 / long jump if SR1 on / Control Test 22 JMS SETJMP JMS I C0032 / call S4600 JMS I C0032 / call S4600 STA JMS I C0036 / call S4200 JMS I ILJSR1 / long jump if SR1 on / Control Test 23 JMS SETJMP JMS I C0032 / call S4600 JMS I C0033 / call S4423 JMS I C0035 / call S4665 STA JMS I C0036 / call S4200 JMS I C0035 / call S4665 JMS I C0033 / call S4423 JMS I C0033 / call S4423 TAD KM0004 JMS I C0036 / call S4200 TAD KM0005 JMS I C0036 / call S4200 JMS I C0035 / call S4665 JMS I C0035 / call S4665 TAD KM0004 JMS I C0036 / call S4200 TAD KM0005 JMS I C0037 / call S4032 TAD KM0006 JMS I C0037 / call S4032 JMS I C0035 / call S4665 JMS I C0035 / call S4665 TAD KM0005 JMS I C0036 / call S4200 TAD KM0006 JMS I C0036 / call S4200 JMS I C0031 / call S4400 JMS I C0034 / call S4436 JMS I ILJSR1 / long jump if SR1 on / Control Test 24 JMS SETJMP JMS I C0032 / call S4600 STA JMS I C0036 / call S4200 JMS I C0033 / call S4423 JMS I C0034 / call S4436 STA JMS I C0036 / call S4200 JMS I C0033 / call S4423 CLA CLL CMA RAL / AC = -2 JMS I C0036 / call S4200 JMS I C0033 / call S4423 JMS I C0035 / call S4665 CLA CLL CMA RTL JMS I C0036 / call S4200 JMS I C0033 / call S4423 TAD KM0004 JMS I C0036 / call S4200 TAD KM0005 JMS I C0036 / call S4200 TAD KM0006 JMS I C0036 / call S4200 JMS I C0035 / call S4665 JMS I C0035 / call S4665 TAD KM0005 JMS I C0036 / call S4200 JMS I C0035 / call S4665 JMS I C0034 / call S4436 TAD KM0004 JMS I C0036 / call S4200 JMS I C0034 / call S4436 JMS I C0035 / call S4665 CLA CLL CMA RTL JMS I C0036 / call S4200 JMS I C0035 / call S4665 JMS I C0035 / call S4665 CLA CLL CMA RAL / AC = -2 JMS I C0036 / call S4200 JMS I C0034 / call S4436 JMS I C0035 / call S4665 STA JMS I C0036 / call S4200 JMS I ILJSR1 / long jump if SR1 on / Control Test 25 JMS SETJMP JMS I C0032 / call S4600 STA JMS I C0036 / call S4200 IAC DCA D0130 JMS I C0036 / call S4200 CLA CLL CMA RAL / AC = -2 JMS I C0036 / call S4200 CLA CLL CMA RTL JMS I C0036 / call S4200 IAC DCA D0130 JMS I C0036 / call S4200 TAD KM0004 JMS I C0036 / call S4200 TAD KM0005 JMS I C0036 / call S4200 TAD KM0006 JMS I C0036 / call S4200 IAC DCA D0130 JMS I C0036 / call S4200 JMS I ILJSR1 / long jump if SR1 on / Control Test 26 JMS SETJMP JMS I C0032 / call S4600 STA JMS I C0036 / call S4200 JMS I C0033 / call S4423 CLA CLL CMA RAL / AC = -2 JMS I C0036 / call S4200 CLA CLL CMA RTL JMS I C0036 / call S4200 JMS I C0033 / call S4423 TAD KM0004 JMS I C0036 / call S4200 TAD KM0005 JMS I C0036 / call S4200 TAD KM0006 JMS I C0036 / call S4200 JMS I C0033 / call S4423 JMS I ILJSR1 / long jump if SR1 on / Control Test 27 JMS SETJMP JMS I C0032 / call S4600 JMS I C0033 / call S4423 JMS I C0034 / call S4436 STA JMS I C0036 / call S4200 JMS I C0033 / call S4423 JMS I C0033 / call S4423 JMS I C0034 / call S4436 CLA CLL CMA RAL / AC = -2 JMS I C0036 / call S4200 CLA CLL CMA RTL JMS I C0036 / call S4200 JMS I C0033 / call S4423 JMS I C0033 / call S4423 JMS I C0034 / call S4436 TAD KM0004 JMS I C0036 / call S4200 TAD KM0005 JMS I C0036 / call S4200 TAD KM0006 JMS I C0036 / call S4200 JMS I ILJSR1 / long jump if SR1 on / Control Test 28 JMS SETJMP JMS I C0032 / call S4600 JMS I C0033 / call S4423 JMS I C0035 / call S4665 STA JMS I C0036 / call S4200 IAC DCA D0130 JMS I C0036 / call S4200 JMS I C0033 / call S4423 JMS I C0035 / call S4665 JMS I C0035 / call S4665 CLA CLL CMA RAL / AC = -2 JMS I C0036 / call S4200 CLA CLL CMA RTL JMS I C0036 / call S4200 IAC DCA D0130 JMS I C0036 / call S4200 JMS I C0033 / call S4423 JMS I C0035 / call S4665 JMS I C0035 / call S4665 JMS I C0035 / call S4665 TAD KM0004 JMS I C0036 / call S4200 TAD KM0005 JMS I C0036 / call S4200 TAD KM0006 JMS I C0036 / call S4200 JMS I ILJSR1 / long jump if SR1 on JMP I D1777 / goto CTEST5 *1777 / ORIGIN change to 1777 D1777, CTEST5 ////////////////////////////////////////////////////////////////////////////// / / Control Test part 5 / / Test 29: / Test 30: / ////////////////////////////////////////////////////////////////////////////// *2000 / ORIGIN change to 2000 CTEST5, / Control Test 29 JMS SETJMP TAD D2177 DCA AI13 JMS I C0032 / call S4600 JMS I C0031 / call S4400 CLA CLL CMA RAL / AC = -2 DCA D0070 DCA D0051 / clear D0051 TAD K0020 TAD DRIVE TAD C0102 JMS I C0042 / call LVREGA L2014, TAD I AI13 XKGOA / assert A, transfer data with AC CLA JMS I C0041 / call VRFYB JMS I C0040 / call LKSAF JMS I C0041 / call VRFYB XKSDR / skip if data flag is set during r/w JMS I D2176 XKSEN / skip if EOT/BOT, not ready, or empty SKP JMS I D2175 XKSBF / skip if ready flag set SKP JMS I D2174 ISZ D0070 JMP L2014 TAD 0177 / @@@ pnc DCA 0117 JMS I IS0116 TAD D2173 JMS I C0041 / call VRFYB XKSDR / skip if data flag is set during r/w JMS I D2176 XKSEN / skip if EOT/BOT, not ready, or empty JMS I D2172 XKSBF / skip if ready flag set SKP JMS I D2174 TAD D2171 DCA D0117 JMS I IS0116 TAD D2170 JMS I C0041 / call VRFYB XKSDR / skip if data flag is set during r/w JMS I D2176 XKSEN / skip if EOT/BOT, not ready, or empty JMS I D2172 XKSBF / skip if ready flag set JMS I D2167 JMS I C0110 / call KBDCHK SNA CLA JMS I D2166 JMS I D2165 / calls S4143 XKCLR / clear A & B registers TAD D0101 TAD DRIVE JMS I C0042 / call LVREGA XKSDR / skip if data flag is set during r/w SKP JMS I D2164 XKSEN / skip if EOT/BOT, not ready, or empty SKP JMS I D2175 XKSAF / skip on any flag or error condition JMS I D2163 XKSBF / skip if ready flag set JMS I D2167 XKCLR / clear A & B registers JMS I C0032 / call S4600 CLA CLL CMA RAL / AC = -2 JMS I C0036 / call S4200 JMS I ILJSR1 / long jump if SR1 on / Control Test 30 JMS SETJMP JMS I C0032 / call S4600 JMS I C0031 / call S4400 TAD KM0006 JMS I C0037 / call S4032 JMS I C0035 / call S4665 TAD KM0006 JMS I C0036 / call S4200 JMS I C0035 / call S4665 TAD C0102 TAD DRIVE JMS I C0042 / call LVREGA CLA CLL CMA RTL DCA D0070 DCA D0051 / clear D0051 L2131, XKGOA / assert A, transfer data with AC CLA JMS I C0041 / call VRFYB JMS I C0040 / call LKSAF XKSDR / skip if data flag is set during r/w JMS I D2176 XKSBF / skip if ready flag set SKP JMS I D2174 XKSEN / skip if EOT/BOT, not ready, or empty SKP JMS I D2175 ISZ D0070 JMP L2131 TAD 0177 / @@@ pnc DCA D0117 JMS I IS0116 TAD D2173 JMS I C0041 / call VRFYB XKGOA / assert A, transfer data with AC CLA XKSDR / skip if data flag is set during r/w JMS I D2176 JMP I D2162 / goto L2200 *2162 / ORIGIN change to 2162 D2162, 2200 D2163, 6242 D2164, KSDRSK D2165, S4143 D2166, NOINTR D2167, 6200 D2170, 7677 D2171, 6422 D2172, 6110 D2173, 7700 D2174, 6304 D2175, 6263 D2176, 6221 D2177, 6777 ////////////////////////////////////////////////////////////////////////////// / / Control Test part 6 / / Test 30: / Test 31: / ////////////////////////////////////////////////////////////////////////////// *2200 / ORIGIN change to 2200 L2200, XKSBF / skip if ready flag set SKP JMS I D2377 XKSEN / skip if EOT/BOT, not ready, or empty JMS I D2376 XKGOA / assert A, transfer data with AC CLA XKSDR / skip if data flag is set during r/w SKP JMS I D2375 TAD D2374 JMS I C0041 / call VRFYB L2214, XKSBF / skip if ready flag set JMP L2214 TAD D2373 JMS I C0041 / call VRFYB XKSEN / skip if EOT/BOT, not ready, or empty JMS I D2376 XKSDR / skip if data flag is set during r/w JMS I D2372 JMS I C0110 / call KBDCHK SNA CLA JMS I D2371 JMS I D2370 / calls S4143 XKCLR / clear A & B registers TAD D0101 TAD DRIVE JMS I C0042 / call LVREGA TAD KM0001 JMS I C0041 / call VRFYB XKSBF / skip if ready flag set JMS I D2367 XKSEN / skip if EOT/BOT, not ready, or empty SKP JMS I D2366 XKSDR / skip if data flag is set during r/w SKP JMS I D2375 XKCLR / clear A & B registers JMS I ILJSR1 / long jump if SR1 on / Control test 30 JMS SETJMP TAD D2365 DCA AI12 JMS I C0032 / call S4600 TAD C0102 TAD DRIVE JMS I C0042 / call LVREGA TAD D2364 DCA D0070 DCA D0051 / clear D0051 XKGOA / assert A, transfer data with AC CLA JMS I C0041 / call VRFYB L2265, JMS I C0040 / call LKSAF JMS I C0041 / call VRFYB XKSDR / skip if data flag is set during r/w JMS I D2372 XKSBF / skip if ready flag set SKP JMS I D2377 XKSEN / skip if EOT/BOT, not ready, or empty SKP JMS I D2366 XKGOA / assert A, transfer data with AC DCA I AI12 ISZ D0070 JMP L2265 TAD K0060 TAD DRIVE TAD C0102 JMS I C0042 / call LVREGA XKGOA / assert A, transfer data with AC CLA JMS I C0040 / call LKSAF XKSDR / skip if data flag is set during r/w JMS I D2372 XKGOA / assert A, transfer data with AC DCA I AI12 L2316, XKSBF / skip if ready flag set JMP L2316 TAD D2363 JMS I C0041 / call VRFYB XKSDR / skip if data flag is set during r/w SKP JMS I D2375 XKSEN / skip if EOT/BOT, not ready, or empty JMS I D2376 JMS I C0110 / call KBDCHK SNA CLA JMS I D2371 JMS I D2370 / calls S4143 XKCLR / clear A & B registers TAD D0101 TAD DRIVE JMS I C0042 / call LVREGA TAD KM0001 JMS I C0041 / call VRFYB XKCLR / clear A & B registers JMS I ILJSR1 / long jump if SR1 on / Control test 31 JMS SETJMP TAD D2365 DCA AI12 JMS I C0032 / call S4600 TAD KM0010 / -0010 DCA D0070 DCA D0051 / clear D0051 TAD C0102 TAD DRIVE JMS I C0042 / call LVREGA XKGOA / assert A, transfer data with AC CLA JMP I D2362 / continue... *2362 / ORIGIN change to 2362 D2362, L2400 D2363, 7577 D2364, 7773 D2365, 7177 D2366, 6263 D2367, 6200 D2370, S4143 D2371, NOINTR D2372, 6221 D2373, 7477 D2374, 7700 D2375, KSDRSK D2376, 6110 D2377, 6304 ////////////////////////////////////////////////////////////////////////////// / / Control Test part 7 / / Test 32: / Test 33: / ////////////////////////////////////////////////////////////////////////////// *2400 / ORIGIN change to 2400 L2400, JMS I C0041 / call VRFYB JMS I C0040 / call LKSAF JMS I C0041 / call VRFYB XKSDR / skip if data flag is set during r/w JMS I D2577 XKSEN / skip if EOT/BOT, not ready, or empty SKP JMS I D2576 XKSBF / skip if ready flag set SKP JMS I D2575 XKGOA / assert A, transfer data with AC DCA I AI12 JMS I C0041 / call VRFYB XKSDR / skip if data flag is set during r/w SKP JMS I D2574 ISZ D0070 JMP L2400 JMS I C0040 / call LKSAF TAD D2573 JMS I C0041 / call VRFYB XKSBF / skip if ready flag set JMS I D2572 XKSEN / skip if EOT/BOT, not ready, or empty JMS I D2571 XKSDR / skip if data flag is set during r/w SKP JMS I D2574 JMS I C0110 / call KBDCHK SNA CLA JMS I D2570 JMS I D2567 / calls S4143 XKCLR / clear A & B registers JMS I C0041 / call VRFYB XKSDR / skip if data flag is set during r/w SKP JMS I D2574 JMS I ILJSR1 / long jump if SR1 on / Control test 32 JMS SETJMP JMS I C0032 / call S4600 DCA D0051 CLA CLL CMA RAL / AC = -2 DCA D0113 L2454, TAD K0030 TAD D0101 TAD DRIVE JMS I C0042 / call LVREGA XKGOA / assert A, transfer data with AC CLA JMS I C0041 / call VRFYB TAD D2566 DCA D0117 JMS I IS0116 TAD KM0041 JMS I C0041 / call VRFYB JMS I D2567 / calls S4143 XKCLR / clear A & B registers ISZ D0113 JMP L2454 JMS I ILJSR1 / long jump if SR1 on / Control test 33 JMS SETJMP JMS I C0032 / call S4600 TAD D2565 DCA D0070 DCA D0051 / clear D0051 L2502, TAD D0101 TAD DRIVE JMS I C0042 / call LVREGA XKGOA / assert A, transfer data with AC CLA XKCLR / clear A & B registers DCA D0117 TAD K0030 TAD D0101 TAD DRIVE JMS I C0042 / call LVREGA XKGOA / assert A, transfer data with AC CLA JMS I C0041 / call VRFYB JMS I IS0116 JMS I C0041 / call VRFYB XKSEN / skip if EOT/BOT, not ready, or empty SKP JMS I D2576 XKSAF / skip on any flag or error condition SKP JMS I D2564 XKSDR / skip if data flag is set during r/w SKP JMS I D2574 XKSBF / skip if ready flag set SKP JMS I D2575 JMS I D2567 / calls S4143 XKCLR / clear A & B registers TAD D0101 TAD DRIVE JMS I C0042 / call LVREGA TAD KM0041 JMS I C0041 / call VRFYB XKSAF / skip on any flag or error condition JMS I D2563 XKSEN / skip if EOT/BOT, not ready, or empty JMS I D2571 XKSBF / skip if ready flag set JMS I D2572 XKSDR / skip if data flag is set during r/w SKP CLA JMS I D2574 ISZ D0070 JMP L2502 JMS I ILJSR1 / long jump if SR1 on JMP I D2562 / continue D2562, L2600 D2563, 6242 D2564, KSAFSK D2565, 7764 D2566, 7242 D2567, S4143 D2570, NOINTR D2571, 6110 D2572, 6200 D2573, 7577 D2574, KSDRSK D2575, 6304 D2576, 6263 D2577, 6221 ////////////////////////////////////////////////////////////////////////////// / / Control Test part 8 / / Test 34: / Test 35: / ////////////////////////////////////////////////////////////////////////////// *2600 / ORIGIN change to 2600 L2600, / Control test 34 JMS SETJMP JMS I C0032 / call S4600 JMS I C0031 / call S4400 TAD DRIVE SNA CLA TAD K0100 TAD D2777 XKLSA / AC 4-11 -> A, AC = NOT A XKGOA / assert A, transfer data with AC CLA XKCLR / clear A & B registers STA JMS I C0037 / call S4032 JMS I C0034 / call S4436 STA JMS I C0036 / call S4200 JMS I C0035 / call S4665 STA JMS I C0036 / call S4200 CLA CLL CMA RAL / AC = -2 JMS I C0037 / call S4032 JMS I C0035 / call S4665 CLA CLL CMA RAL / AC = -2 JMS I C0036 / call S4200 JMS I C0034 / call S4436 STA JMS I C0036 / call S4200 CLA CLL CMA RAL / AC = -2 JMS I C0036 / call S4200 TAD DRIVE SNA CLA TAD K0100 TAD D2777 XKLSA / AC 4-11 -> A, AC = NOT A CLA JMS I C0040 / call LKSAF XKCLR / clear A & B registers JMS I ILJSR1 / long jump if SR1 on / Control test 35 JMS SETJMP JMS I C0032 / call S4600 JMS I C0031 / call S4400 STA JMS I C0037 / call S4032 JMS I C0035 / call S4665 STA JMS I C0036 / call S4200 CLA CLL CMA RTL DCA D0111 SKP L2661, JMS I C0035 / call S4665 CLA CLL CMA RTL JMS I C0037 / call S4032 JMS I C0035 / call S4665 CLA CLL CMA RTL JMS I C0036 / call S4200 ISZ D0111 JMP L2661 JMS I C0034 / call S4436 STA JMS I C0036 / call S4200 CLA CLL CMA RTL JMS I C0036 / call S4200 JMS I ILJSR1 / long jump if SR1 on JMS I D2776 JMS I D2775 TAD DRIVE SZA CLA JMP L2706 TAD I D2774 SKP L2706, TAD I D2773 JMS I D2772 / print a progress character LAS RTR SPA CLA JMP I D2771 / goto CTEST2 TAD DRIVE SZA CLA SKP TAD K0100 / add in bit 5 (drive "B" select) DCA DRIVE / and store drive number JMP I D2771 / goto CTEST2 ////////////////////////////////////////////////////////////////////////////// / / IOT MODIFICATION / ////////////////////////////////////////////////////////////////////////////// IOTMOD, LAS / fetch input from SR AND D2770 / AND with 0770 to ensure IOT-safe range DCA D2744 / store TAD D2767 / fetch loop value (-8) DCA D0070 / and store it TAD D2746 / fetch address of patch table DCA D2745 / and make a copy L2731, TAD I D2745 / fetch IOT through patch table DCA D2747 / store in temp TAD I D2747 / fetch through new address (double indirect here) AND D2766 / strip out inner device code TAD D2744 / add in the user-supplied device code DCA I D2747 / and push back out through double indirect ISZ D2745 / increment pointer into patch table ISZ D0070 / increment loop counter (7767 -> 7777 then skip) JMP L2731 / loop through patch table L2742, HLT / done JMP L2742 / don't allow any more CONTinues from here D2744, 0 / IOT device address only input from SR D2745, 0 / temp location D2746, D2750 / address of patch table D2747, 0 / temp location / patch table with location where the actual IOTs need to be patched D2750, L4002 / KCLR clear A & B registers L4007 / skip if data flag is set during r/w L4014 / skip if EOT/BOT, not ready, or empty L4021 / skip if ready flag set L4026 / AC 4-11 -> A, AC = NOT A L4033 / KSAF skip on any flag or error condition L4040 / KGOA assert A, transfer data with AC L4045 / KSRB TEND, L4114 / KSAF (again, but a different one this time?) *2766 / ORIGIN change to 2766 D2766, 6007 / const 6007 D2767, 7767 / -9, (negative size of patch table) D2770, 0770 / IOT device address mask D2771, CTEST2 D2772, PRTPRG D2773, 3123 / "S" + 3000; why + 3000? Nobody makes us of that... D2774, 3122 D2775, 7546 D2776, 7512 D2777, 0210 ////////////////////////////////////////////////////////////////////////////// / / L3000 / / Data test, part 2 / ////////////////////////////////////////////////////////////////////////////// *3000 / ORIGIN change to 3000 L3000, CLA CLL L3001, DCA D0132 JMS I D3177 JMS I D3176 TAD K0377 DCA D0132 JMS I D3177 JMS I D3176 TAD D3175 DCA D0132 JMS I D3177 JMS I D3176 TAD D3174 DCA D0132 JMS I D3177 JMS I D3176 TAD D3173 DCA D0132 JMS I D3177 JMS I D3176 TAD D3172 DCA D0132 JMS I D3177 JMS I D3176 CLA CLL DCA D0132 JMS I D3171 JMS I D3176 TAD D0101 DCA D0132 JMS I D3171 JMS I D3176 DCA D0132 JMS I D3170 JMS I D3176 TAD K0377 DCA D0132 JMS I D3170 JMS I D3176 TAD D3175 DCA D0132 JMS I D3170 JMS I D3176 TAD D3174 DCA D0132 JMS I D3170 JMS I D3176 TAD D3173 DCA D0132 JMS I D3170 JMS I D3176 TAD D3172 DCA D0132 JMS I D3170 JMS I D3176 TAD D3167 DCA I D3166 TAD KM0010 / store -0010 DCA D3100 L3073, JMS I D3165 JMS I D3176 ISZ D3100 JMP L3073 SKP D3100, AND C0000 TAD DRIVE SZA CLA JMP L3106 TAD K0301 SKP L3106, TAD K0302 JMS I D3164 / print a progress character LAS RTR SPA CLA JMP L3001 TAD DRIVE SZA CLA SKP TAD K0100 / add in bit 5 (drive "B" select) DCA DRIVE / and store drive number JMP L3001 K0301, 0301 K0302, 0302 ////////////////////////////////////////////////////////////////////////////// / / L3124 / / Write Protect Test part 2 / ////////////////////////////////////////////////////////////////////////////// L3124, JMS I D3163 L3125, / Write protect test 1 JMS SETJMP JMS I C0032 / call S4600 JMS I C0031 / call S4400 STA JMS I C0037 / call S4032 JMS I C0035 / call S4665 STA JMS I C0036 / call S4200 JMS I D3162 JMS I ILJSR1 / long jump if SR1 on JMS I D3161 / print "Set write protect tab on drive " JMS I D3160 / print "to write protect position" HLT JMS I ILJSR1 / long jump if SR1 on JMP I D3157 / goto L3200 *3157 / ORIGIN change to 3157 D3157, L3200 D3160, WPROT D3161, SETWP D3162, 3470 D3163, 4535 D3164, PRTPRG D3165, 5675 D3166, 5715 D3167, 2525 D3170, 3413 D3171, 3400 D3172, 0314 D3173, 0063 D3174, 0125 D3175, 0252 D3176, S3431 D3177, 3741 ////////////////////////////////////////////////////////////////////////////// / / L3200 / / Write Protect Test part 3 / ////////////////////////////////////////////////////////////////////////////// *3200 / ORIGIN change to 3200 L3200, / Write protect test 2 JMS SETJMP DCA D0051 TAD C0056 TAD D0101 TAD DRIVE JMS I C0042 / call LVREGA XKRSB / read status B into AC4-11 TAD D3377 SNA CLA JMP L3214 TAD D3376 JMS I C0041 / call VRFYB L3214, XKGOA / assert A, transfer data with AC CLA TAD C0072 JMS I C0041 / call VRFYB JMS I C0040 / call LKSAF TAD D3376 JMS I C0041 / call VRFYB XKSBF / skip if ready flag set JMS I D3375 XKSAF / skip on any flag or error condition JMS I D3374 XKSEN / skip if EOT/BOT, not ready, or empty JMS I D3373 XKSDR / skip if data flag is set during r/w SKP CLA JMS I D3372 JMS I D3371 / calls S4143 XKCLR / clear A & B registers JMS I C0041 / call VRFYB CLA CLL CMA RTL DCA D0070 TAD K0040 TAD D0101 TAD DRIVE JMS I C0042 / call LVREGA TAD D3376 JMS I C0041 / call VRFYB L3247, XKGOA / assert A, transfer data with AC CLA CLL CMA RAL / AC = -2 JMS I C0041 / call VRFYB XKSEN / skip if EOT/BOT, not ready, or empty JMS I D3373 XKSAF / skip on any flag or error condition JMS I D3374 XKSDR / skip if data flag is set during r/w SKP CLA JMS I D3372 XKSBF / skip if ready flag set SKP CLA JMS I D3370 L3264, XKSBF / skip if ready flag set JMP L3264 CLA CLL CMA RTL JMS I C0041 / call VRFYB XKSEN / skip if EOT/BOT, not ready, or empty JMS I D3373 XKSAF / skip on any flag or error condition JMS I D3374 XKSDR / skip if data flag is set during r/w SKP CLA JMS I D3372 JMS I D3371 / calls S4143 ISZ D0070 JMP L3247 XKCLR / clear A & B registers TAD D0101 TAD DRIVE JMS I C0042 / call LVREGA CLA CLL CMA RTL JMS I C0041 / call VRFYB XKSEN / skip if EOT/BOT, not ready, or empty SKP JMS I D3367 XKCLR / clear A & B registers JMS I ILJSR1 / long jump if SR1 on JMS I D3366 / print "Set write protect tab on drive " JMS I D3365 / print "to write enable" HLT JMS I ILJSR1 / long jump if SR1 on JMS SETJMP JMS I C0032 / call S4600 STA JMS I C0036 / call S4200 JMS I D3364 JMS I ILJSR1 / long jump if SR1 on JMS I D3363 / print "OK" HLT JMS I ILJSR1 / long jump if SR1 on LAS RTR SPA CLA JMP I D3362 TAD DRIVE SZA CLA SKP TAD K0100 / add in bit 5 (drive "B" select) DCA DRIVE / and store drive number JMP I D3362 / goto L3125 (loop test) *3362 / ORIGIN change to 3362 D3362, L3125 D3363, POK D3364, 3470 D3365, WPEN D3366, SETWP D3367, 6263 D3370, 6304 D3371, S4143 D3372, KSDRSK D3373, 6110 D3374, 6242 D3375, 6200 D3376, 7735 D3377, 7775 ////////////////////////////////////////////////////////////////////////////// / / S3400 / ////////////////////////////////////////////////////////////////////////////// *3400 / ORIGIN change to 3400 S3400, 0 / return area TAD D3577 DCA I D3576 TAD D3575 DCA AI13 L3405, ISZ D0132 TAD D0132 DCA I AI13 ISZ I 3576 JMP L3405 / JMP I S3400 / return ////////////////////////////////////////////////////////////////////////////// / / S3413 / ////////////////////////////////////////////////////////////////////////////// S3413, 0 / return area TAD D3577 DCA I D3576 TAD D3575 DCA AI13 L3420, TAD D0132 DCA I AI13 TAD D0132 CMA AND K0377 DCA D0132 ISZ I 3576 JMP L3420 JMP I S3413 / return ////////////////////////////////////////////////////////////////////////////// / / S3431 / ////////////////////////////////////////////////////////////////////////////// S3431, 0 / return area JMS SETJMP L3433, JMS I C0032 / call S4600 JMS I C0031 / call S4400 TAD KM0010 / store -0010 JMS I C0037 / call S4032 JMS I C0035 / call S4665 TAD KM0010 / store -0010 JMS I C0036 / call S4200 JMS S3470 TAD D3574 JMS I C0037 / call S4032 JMS I C0031 / call S4400 JMS I C0035 / call S4665 TAD D3574 JMS I C0036 / call S4200 JMS S3470 JMS I C0034 / call S4436 JMS I C0033 / call S4423 JMS I C0035 / call S4665 JMS I C0035 / call S4665 TAD KM0010 / store -0010 JMS I C0036 / call S4200 JMS S3470 TAD D3574 JMS I C0036 / call S4200 JMS S3470 JMS I D3573 JMP L3433 / JMS I ILJSR1 / long jump if SR1 on JMP I S3431 / return ////////////////////////////////////////////////////////////////////////////// / / S3470 / ////////////////////////////////////////////////////////////////////////////// S3470, 0 / return area CLA CLL TAD D3572 DCA AI12 TAD D3575 DCA AI13 TAD D0131 DCA I D3576 LAS RTL RTL RTL SPA CLA JMP I S3470 / return L3506, TAD I AI12 DCA D0112 TAD I AI13 DCA D0111 TAD D0111 CIA TAD D0112 SZA CLA JMS I D3571 ISZ I 3576 JMP L3506 / TAD D3575 DCA AI13 DCA I D3570 / store GOODC1 DCA I D3567 / store GOODC2 TAD D0131 DCA I D3576 L3527, TAD I AI13 DCA I D3566 / store BADCR1 JMS I D3565 / call CLCCRC ISZ I 3576 JMP L3527 / TAD I AI12 DCA I D3566 / store BADCR1 TAD I AI12 DCA I D3564 / store BADCR2 TAD I D3566 / fetch BADCR1 CIA TAD I D3570 / add GOODC1 SZA CLA JMS I D3563 / call PCRCER to print CRC Error TAD I D3564 / fetch BADCR2 CIA TAD I D3567 / add GOODC2 SZA CLA JMS I D3563 / call PCRCER to print CRC Error DCA D0054 JMP I S3470 / return *3563 / ORIGIN change to 3563 D3563, PCRCER D3564, BADCR2 D3565, CLCCRC D3566, BADCR1 D3567, GOODC2 D3570, GOODC1 D3571, 6646 D3572, 7177 D3573, 1143 D3574, 7602 D3575, 6777 D3576, 4547 D3577, 7600 ////////////////////////////////////////////////////////////////////////////// / / CLCCRC / / I'm guessing this calculates the CRC, based on the variables it's / touching. / ////////////////////////////////////////////////////////////////////////////// *3600 / ORIGIN change to 3600 CLCCRC, 0 / return area CLA CLL TAD KM0010 / store -0010 DCA D3732 / loop counter (8 times) L3604, TAD GOODC1 AND C3777 / mask with 0001 SZA CLA TAD C3776 / AC = 4000 DCA D3733 TAD GOODC1 AND D3775 SZA CLA TAD C3776 / AC = 4000 DCA D3730 TAD GOODC2 AND K0100 SZA CLA TAD C3776 / AC = 4000 DCA D3731 TAD BADCR1 CLL RTR AND C3776 / mask with 4000 TAD D3733 DCA D3722 DCA D3736 CLA CLL TAD D3722 TAD D3730 CLL RAL TAD C3777 / add 1 (why not just IAC?) SNL CLA TAD D3736 DCA D3736 CLA CLL TAD D3722 TAD D3731 CLL RAL TAD K0040 SNL CLA TAD D3736 DCA D3736 TAD D3722 CLL RAL TAD D0101 SNL CLA TAD D3736 DCA D3736 TAD GOODC2 CLL RAR AND D3724 DCA D3722 TAD D3736 AND D3725 DCA D3723 JMS S3714 DCA GOODC2 TAD GOODC1 RAR SPA TAD D0101 AND D3726 DCA D3722 TAD D3736 AND D3727 DCA D3723 JMS S3714 DCA GOODC1 TAD BADCR1 CLL RAR DCA BADCR1 ISZ D3732 / loop 8 times JMP L3604 / next JMP I CLCCRC / return ////////////////////////////////////////////////////////////////////////////// / / S3714 / ////////////////////////////////////////////////////////////////////////////// S3714, 0 / return area TAD D3722 CMA AND D3723 TAD D3722 JMP I S3714 / return D3722, 0000 D3723, 0000 D3724, 0137 D3725, 0240 D3726, 0376 D3727, 0001 D3730, 0000 D3731, 0000 D3732, 0000 D3733, 0000 GOODC1, 0000 / calculated good CRC GOODC2, 0000 / high word? D3736, 0000 BADCR1, 0000 / accumulated bad CRC BADCR2, 0000 / high word? ////////////////////////////////////////////////////////////////////////////// / / S3741 / ////////////////////////////////////////////////////////////////////////////// S3741, 0 / return area TAD D3774 / AC += 7600 DCA I D3773 / store in 4547 TAD D3772 DCA AI13 L3746, TAD D0132 DCA I AI13 ISZ I D3773 JMP L3746 / loop JMP I S3741 / return *3772 / ORIGIN change to 3772 D3772, 6777 D3773, D4547 D3774, 7600 D3775, 0002 C3776, 4000 C3777, 0001 ////////////////////////////////////////////////////////////////////////////// / / IOTs for TA8/E / / The code here is patched by IOTMOD if required, which is why all the IOTs / are in this area rather than sprinkled throughout the code. / / The logic here is complicated a little by the fact that some of these / instructions (1, 2, 3, and 5) "skip" when a condition is met. This means / that the ISZ instruction following is used to simulate that by / incrementing the return address. Instructions that should not skip, on / the other hand (0, 4, 6, and 7) will HLT if the JMP I is in fact skipped. / Another JMP I is placed afterwards so that you can CONTinue anyway. / ////////////////////////////////////////////////////////////////////////////// *4000 / ORIGIN change to 4000 S4000, 0 / return area DCA REGA / save a copy of AC, we're going to destroy it anyway L4002, KCLR / clear all, clear A and B JMP I S4000 / return HLT / ERROR -- skipped KCLR JMP I S4000 / CONTinue the test S4006, 0 / return area L4007, KSDR / skip if data flag is set during r/w JMP I S4006 / normal return ISZ S4006 / skip: add one to return address on skip JMP I S4006 / return when skipping S4013, 0 / return area L4014, KSEN / skip if EOT/BOT, not ready, or empty JMP I S4013 / normal return ISZ S4013 / skip: add one to return address on skip JMP I S4013 / return when skipping S4020, 0 / return area L4021, KSBF / skip if ready flag set JMP I S4020 / normal return ISZ S4020 / skip: add one to return address on skip JMP I S4020 / return when skipping S4025, 0 / return area L4026, KLSA / AC 4-11 -> A, AC = NOT A JMP I S4025 / return HLT / AC 4-11 -> A, AC = NOT A JMP I S4025 / CONTinue the test S4032, 0 / return area L4033, KSAF / skip on any flag or error condition JMP I S4032 / normal return ISZ S4032 / skip: add one to return address on skip JMP I S4032 / return when skipping S4037, 0 / return area L4040, KGOA / assert A, transfer data with AC JMP I S4037 / return HLT / ERROR -- skipped KGOA JMP I S4037 / CONTinue the test S4044, 0 / return area L4045, KRSB / read status B into AC4-11 JMP I S4044 / return HLT / ERROR -- skipped KRSB JMP I S4044 / CONTinue the test ////////////////////////////////////////////////////////////////////////////// / / KBDCHK / / Check to see if there is a character waiting. / ////////////////////////////////////////////////////////////////////////////// KBDCHK, 0 / return area KSF / skip if keyboard flag is a one SKP / skip KCC if not KCC / clear AC and clear keyboard flag DCA D0106 / D0106 = 0 ION / enable interrupts NOP / allow interrupt to happen here... L4060, / @@@ label or constant? IOF / disable interrupts TAD D0106 JMP I KBDCHK / return ////////////////////////////////////////////////////////////////////////////// / / LJSR1 / / If SR1 is on, reset the A & B registers and return to the last SETJMP / location, else just return normally. / ////////////////////////////////////////////////////////////////////////////// LJSR1, 0 / return area LAS / fetch SR RAL / << 1 SMA CLA / skip if SR1 on JMP I LJSR1 / normal return XKCLR / clear A & B registers JMP I SETJMP / long jump to previous setjmp address ////////////////////////////////////////////////////////////////////////////// / / LKSAF -- Looped KSAF / / Repeats KSAF 4096x4096 (16M) times. If successful, HLTs, and you can / CONTinue the test. If an error occurs during any KSAF, routine returns. / ////////////////////////////////////////////////////////////////////////////// LKSAF, 0 / return area CLA / AC = 0 DCA D4105 / clear count L4075, JMS I C0030 / poll KSAF 4096 times SKP / normal KSAF operation, go to ISZ JMP I LKSAF / KSAF failed, return ISZ D4105 / increment count JMP L4075 / loop XKCLR / clear A & B registers HLT / PASS 16M x KSAF; CONTinue from here JMP I LKSAF / return D4105, 0000 ////////////////////////////////////////////////////////////////////////////// / / KSAF4K / / repeats KSAF up to 4096 times. If any of those iterations result in a / skip (KSAF = "skip on error"), will skip. After 4096 times with no / no errors, does a normal return. / ////////////////////////////////////////////////////////////////////////////// KSAF4K, 0 / return area CLA / AC = 0 DCA D4120 / clear count L4111, ISZ D4120 / increment count SKP / normally, skip the return and do the KSAF JMP I KSAF4K / if count is 4096, then just return L4114, KSAF / skip on any flag or error condition JMP L4111 / if no error, increment count ISZ KSAF4K / skip to next instruction in return JMP I KSAF4K / skip return D4120, 0000 / local count of errors ////////////////////////////////////////////////////////////////////////////// / / J4SR21 / / If SR2 is on, this function will skip back four words, else it does a / normal return. / ////////////////////////////////////////////////////////////////////////////// J4SR21, 0 / return area LAS / fetch SR RTL / << 2 SMA CLA / skip if SR2 is on JMP I J4SR21 / return TAD J4SR21 / fetch return address TAD M4 / subtract four DCA J4SR21 / store return address JMP I J4SR21 / return ////////////////////////////////////////////////////////////////////////////// / / J3SR21 / / If SR2 is on, this function will skip back three words, else it does a / normal return. / ////////////////////////////////////////////////////////////////////////////// J3SR21, 0 / return area LAS / fetch SR RTL / << 2 SMA CLA / skip if SR2 is on JMP I J3SR21 / normal return TAD J3SR21 / fetch return address TAD D4176 / subtract 3 DCA J3SR21 / put return address back JMP I J3SR21 / return ////////////////////////////////////////////////////////////////////////////// / / S4143 / ////////////////////////////////////////////////////////////////////////////// S4143, 0 / return area LAS / fetch SR RTL RTL RAL / << 5 SMA CLA / skip if SR5 is on JMP I S4143 / return TAD C4175 / @@@ label or constant??? DCA D0117 JMS I IS0116 / calls S5256 JMP I S4143 / return ////////////////////////////////////////////////////////////////////////////// / / Interrupt Vector / ////////////////////////////////////////////////////////////////////////////// INTVEC, STA / AC = 7777 DCA D0106 / D0106 = 7777 JMP I C0000 / return from interrupt *4175 / ORIGIN change to 4175 C4175, L4060 / @@@ label or constant??? D4176, 7775 / negative 3 M4, 7774 / negative 4 ////////////////////////////////////////////////////////////////////////////// / / S4200 / ////////////////////////////////////////////////////////////////////////////// *4200 / ORIGIN change to 4200 S4200, 0 / return area DCA D0131 TAD D0131 TAD KM0001 DCA D0070 DCA D4353 CLA CLL CMA RAL / AC = -2 DCA D0113 DCA D0054 / D0054 = 0 TAD S4200 JMS I D4377 TAD D0127 SNA CLA JMP L4226 TAD C0102 TAD DRIVE JMS I C0042 / call LVREGA TAD KM0041 JMS I C0041 / call VRFYB DCA D0127 DCA D0130 JMP L4242 L4226, TAD D0130 SNA CLA JMP L4235 TAD C0102 TAD DRIVE JMS I D4376 JMP I S4200 / return L4235, TAD C0102 TAD DRIVE JMS I C0042 / call LVREGA TAD KM0001 JMS I C0041 / call VRFYB L4242, XKGOA / assert A, transfer data with AC L4243, CLA JMS I C0041 / call VRFYB JMS I C0040 / call LKSAF JMS I C0041 / call VRFYB XKSDR / skip if data flag is set during r/w JMS I D4375 XKSEN / skip if EOT/BOT, not ready, or empty SKP JMS I D4374 XKSBF / skip if ready flag set SKP JMS I D4373 JMS I C0110 / call KBDCHK SNA CLA JMS I D4372 XKGOA / assert A, transfer data with AC DCA I AI12 ISZ D0070 JMP L4243 TAD KM0001 DCA D0070 ISZ D0113 SKP CLA JMP L4300 TAD K0060 TAD C0102 TAD DRIVE JMS I C0042 / call LVREGA JMP L4242 L4300, JMS I D4371 JMP I S4200 / return ////////////////////////////////////////////////////////////////////////////// / / S4302 / ////////////////////////////////////////////////////////////////////////////// S4302, 0 / return area DCA D0070 DCA D0054 / D0054 = 0 CMA DCA D4353 TAD D4370 DCA AI13 TAD S4302 JMS SVACM1 / AC - 1 -> D0051 TAD K0020 TAD C0102 TAD DRIVE JMS I C0042 / call LVREGA TAD KM0001 JMS I C0041 / call VRFYB L4321, TAD I AI13 XKGOA / assert A, transfer data with AC CLA JMS I C0041 / call VRFYB JMS I C0040 / call LKSAF JMS I C0041 / call VRFYB XKSDR / skip if data flag is set during r/w JMS I D4375 XKSEN / skip if EOT/BOT, not ready, or empty SKP JMS I D4374 XKSBF / skip if ready flag set SKP JMS I D4373 JMS I C0110 / call KBDCHK SNA CLA JMS I D4372 ISZ D0070 JMP L4321 TAD K0060 TAD C0102 TAD DRIVE JMS I C0042 / call LVREGA JMS I D4371 DCA D4353 JMP I S4302 / return D4353, 0000 *4370 / ORIGIN change to 4370 D4370, 6777 D4371, 4700 D4372, NOINTR D4373, 6304 D4374, 6263 D4375, 6221 D4376, 4451 D4377, 4521 ////////////////////////////////////////////////////////////////////////////// / / S4400 / ////////////////////////////////////////////////////////////////////////////// S4400, *4400 / ORIGIN change to 4400 0 / return area DCA D0054 / Save input TAD S4400 JMS SVACM1 / AC - 1 -> D0051 TAD K0040 TAD C0102 TAD DRIVE JMS I C0042 / call LVREGA TAD D0127 SNA CLA JMP L4416 TAD KM0041 / AC = -0041 JMS I C0041 / call VRFYB JMP L4420 L4416, TAD KM0001 / AC = -0001 JMS I C0041 / call VRFYB L4420, DCA D0127 JMS I D4577 JMP I S4400 / return ////////////////////////////////////////////////////////////////////////////// / / S4423 / ////////////////////////////////////////////////////////////////////////////// S4423, 0 / return area CLA CLL DCA D0054 / D0054 = 0 TAD S4423 JMS SVACM1 / AC - 1 -> D0051 DCA D0107 TAD C0064 TAD C0102 TAD DRIVE JMS S4451 JMP I S4423 / return ////////////////////////////////////////////////////////////////////////////// / / S4436 / ////////////////////////////////////////////////////////////////////////////// S4436, 0 / return area CLA CLL DCA D0054 / D0054 = 0 TAD S4436 JMS SVACM1 / AC - 1 -> D0051 DCA D0107 TAD K0030 TAD C0102 TAD DRIVE JMS S4451 JMP I S4436 / return ////////////////////////////////////////////////////////////////////////////// / / S4451 / ////////////////////////////////////////////////////////////////////////////// S4451, 0 / return area JMS I C0042 / call LVREGA TAD D0127 SNA CLA JMP L4461 TAD KM0041 JMS I C0041 / call VRFYB JMP L4463 L4461, TAD KM0001 JMS I C0041 / call VRFYB L4463, XKGOA / assert A, transfer data with AC CLA JMS I C0041 / call VRFYB JMS I C0040 / call LKSAF TAD D4576 JMS I C0041 / call VRFYB XKSBF / skip if ready flag set JMS I D4575 XKSEN / skip if EOT/BOT, not ready, or empty JMS I D4574 XKSDR / skip if data flag is set during r/w SKP CLA JMS I D4573 JMS I C0110 / call KBDCHK SNA CLA JMS I D4572 JMS I D4571 / calls S4143 XKCLR / clear A & B registers TAD D0101 TAD DRIVE JMS I C0042 / call LVREGA TAD KM0001 JMS I C0041 / call VRFYB DCA D0127 DCA D0130 XKCLR / clear A & B registers JMS I C0110 / call KBDCHK SZA CLA JMS I D4570 JMP I S4451 / return ////////////////////////////////////////////////////////////////////////////// / / S4521 / ////////////////////////////////////////////////////////////////////////////// S4521, 0 / return area JMS SVACM1 / AC - 1 -> D0051 TAD D4567 DCA D4547 TAD D4566 DCA AI12 L4527, DCA I AI12 ISZ D4547 JMP L4527 TAD D4566 DCA AI12 JMP I S4521 / return ////////////////////////////////////////////////////////////////////////////// / / S4535 / ////////////////////////////////////////////////////////////////////////////// S4535, 0 / return area TAD D4567 DCA D4547 TAD D4565 DCA AI13 L4542, TAD K0377 DCA I AI13 ISZ D4547 JMP L4542 JMP I S4535 / return D4547, 0000 *4565 / ORIGIN change to 4565 D4565, 6777 D4566, 7177 D4567, 7600 D4570, INTR D4571, S4143 D4572, NOINTR D4573, KSDRSK D4574, 6110 D4575, 6200 D4576, 7757 D4577, 4700 ////////////////////////////////////////////////////////////////////////////// / / S4600 / ////////////////////////////////////////////////////////////////////////////// *4600 / ORIGIN change to 4600 S4600, 0 / return area CLA CLL DCA D0054 / D0054 = 0 TAD S4600 JMS SVACM1 / AC - 1 -> D0051 DCA D0107 TAD C0102 TAD DRIVE JMS I C0042 / call LVREGA XKRSB / read status B into AC4-11 TAD KM0001 SNA CLA JMP L4617 TAD KM0041 JMS I C0041 / call VRFYB L4617, TAD C0056 TAD C0102 TAD DRIVE JMS I C0042 / call LVREGA XKGOA / assert A, transfer data with AC CLA TAD C0072 JMS I C0041 / call VRFYB JMS I C0040 / call LKSAF TAD KM0041 JMS I C0041 / call VRFYB XKSBF / skip if ready flag set JMS I D4777 XKSAF / skip on any flag or error condition JMS I D4776 XKSEN / skip if EOT/BOT, not ready, or empty JMS I D4775 XKSDR / skip if data flag is set during r/w SKP CLA JMS I D4774 JMS I C0110 / call KBDCHK SNA CLA JMS I D4773 JMS I D4772 / calls S4143 XKCLR / clear A & B registers TAD D0101 TAD DRIVE JMS I C0042 / call LVREGA TAD KM0041 JMS I C0041 / call VRFYB IAC DCA D0127 DCA D0130 XKCLR / clear A & B registers JMS I C0110 / call KBDCHK SZA CLA JMS I D4771 JMP I S4600 / return ////////////////////////////////////////////////////////////////////////////// / / S4665 / ////////////////////////////////////////////////////////////////////////////// S4665, 0 / return area CLA CLL DCA D0054 / D0054 = 0 TAD S4665 JMS SVACM1 / AC - 1 -> D0051 TAD K0050 TAD C0102 TAD DRIVE JMS I C0042 / call LVREGA JMS S4700 JMP I S4665 / return ////////////////////////////////////////////////////////////////////////////// / / S4700 / ////////////////////////////////////////////////////////////////////////////// S4700, 0 / return area XKGOA / assert A, transfer data with AC CLA JMS I C0041 / call VRFYB JMS I C0040 / call LKSAF TAD KM0001 JMS I C0041 / call VRFYB XKSBF / skip if ready flag set JMS I D4777 XKSEN / skip if EOT/BOT, not ready, or empty SKP JMS I D4770 XKSDR / skip if data flag is set during r/w SKP CLA JMS I D4774 JMS I C0110 / call KBDCHK SNA CLA JMS I D4773 JMS I D4772 / calls S4143 XKCLR / clear A & B registers JMS I C0041 / call VRFYB JMS I C0110 / call KBDCHK SZA CLA JMS I D4771 JMP I S4700 / return ////////////////////////////////////////////////////////////////////////////// / / LVREGA -- Load and verify register A / / The accumulator is input, and is written to register A. The value is / stored in "REGA". The KLSA instruction returns the negation of register / A (only bits 4-11, though), and that's put into NREGA. The value of / REGA and NREGA are compared to see if they are correct. / / The A register: / / +----+----+----+----+----+----+----+----+ / | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | / +----+----+----+----+----+----+----+----+ / | | | | | | | | / | | | | | | | +---- 0001 = Enable Interrupts / | | | | | | +--------- 0002 = (not used) / | | | | | +-------------- 0004 = (not used) / | | | | +------------------- 0010 = FR2 -\ / | | | +------------------------ 0020 = FR1 |-- see below / | | +----------------------------- 0040 = FR0 -/ / | +---------------------------------- 0100 = Unit (0=A, 1=B) / +--------------------------------------- 0200 = Select Enable / / FR0, FR1, and FR2 are combined as per the following: / --- --- --- ------------------------- / FR0 FR1 FR2 Function / --- --- --- ------------------------- / 0 0 0 Read / 0 0 1 Rewind / 0 1 0 Write / 0 1 1 Back Space to File Gap / 1 0 0 Write Gap / 1 0 1 Back Space to Block Gap / 1 1 0 Read/Write CRC Character / 1 1 1 Space Forward to File Gap / --- --- --- ------------------------- / ////////////////////////////////////////////////////////////////////////////// LVREGA, 0 / return value DCA REGA / register A save area L4733, TAD REGA / restore XKLSA / AC 4-11 -> A, AC = NOT A DCA NREGA / snapshot complement A to NREGA TAD REGA / restore TAD C0105 / add 7400 (negation of A is only for bits 4-11) TAD NREGA / add complemenet A CMA / complement AC SNA CLA / skip nonzero AC, clear AC JMP L4753 / zero AC == match; goto L4753 / mismatch CMA / AC = 7777 DCA D0054 / D0054 = 7777 JMS I D4767 / skip if SR3 = 0 SKP CLA JMS I D4766 / PFAILA -- print failure message JMS I D4765 / skip if SR4 = 1 HLT / @@@ L4753, / match LAS / fetch SR RAL / << 1 SMA CLA / skip if SR1 is on JMP I LVREGA / return TAD D0054 / fetch 7777 SNA CLA JMP I LVREGA / return DCA D0054 / D0054 = 0 L4763, JMP L4733 / never gets here JMP I LVREGA / return D4765, SKSR41 D4766, PFAILA D4767, SKSR30 D4770, 6263 D4771, INTR D4772, S4143 D4773, NOINTR D4774, KSDRSK D4775, 6110 D4776, 6242 D4777, 6200 ////////////////////////////////////////////////////////////////////////////// / / VRFYB / / Verifies that the B register (via KRSB) contains the expected value. / Note that the expected value is passed as the two's complement (i.e., if / you expected 0012, you'd pass 7766). / / The B register: / / +----+----+----+----+----+----+----+----+ / | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | / +----+----+----+----+----+----+----+----+ / | | | | | | | | / | | | | | | | +---- 0001 = Ready Flag / | | | | | | +--------- 0002 = Write lockout / | | | | | +-------------- 0004 = Rewind / | | | | +------------------- 0010 = Drive Empty / | | | +------------------------ 0020 = End of File Flag / | | +----------------------------- 0040 = EOT/BOT / | +---------------------------------- 0100 = Timing Error / +--------------------------------------- 0200 = CRC/BLOCK Error / ////////////////////////////////////////////////////////////////////////////// *5000 / ORIGIN change to 5000 VRFYB, 0 / return area DCA NEXPB / stash parameter into negative expected value of B XKRSB / read status B into AC4-11 DCA REGB / snapshot register B into save area TAD REGB / and restore TAD NEXPB / combine with negative expected value SNA CLA / skip if nonzero (i.e., not what was expected) JMP L5017 / expected value received, goto L5017 / mismatch CMA / AC = 7777 DCA D0054 / D0054 = 7777 JMS SKSR30 / skip if SR3 = 0 SKP CLA JMS I D5177 / call PFAILB to print B's failure JMS SKSR41 / skip if SR4 = 1 HLT / Didn't get expected value of B L5017, / match JMS I C0121 / call S5042 JMS I D5176 JMP I VRFYB / return ////////////////////////////////////////////////////////////////////////////// / / SKSR30 / / Subroutine to skip instruction if SR3 is off. / ////////////////////////////////////////////////////////////////////////////// SKSR30, 0 / return address LAS / fetch SR RTL RAL SPA CLA / JMP I SKSR30 / normal return ISZ SKSR30 / advance return address by one to perform skip JMP I SKSR30 / skipped return ////////////////////////////////////////////////////////////////////////////// / / SKSR41 / / Subroutine to skip instruction if SR4 is on. / ////////////////////////////////////////////////////////////////////////////// SKSR41, 0 / return address LAS / fetch SR RTL RTL SMA CLA / skip if SR4 is on JMP I SKSR41 / normal return ISZ SKSR41 / advance return address by one to perform skip JMP I SKSR41 / skipped return ////////////////////////////////////////////////////////////////////////////// / / S5042 / ////////////////////////////////////////////////////////////////////////////// S5042, 0 / return address LAS / fetch SR RAL / << 1 SMA CLA / skip if SR1 on JMP I S5042 / return TAD D0054 / fetch D0054 SNA CLA / skip if non-zero JMP I S5042 / return XKCLR / clear A & B registers DCA D0054 / D0054 = 0 DCA I D5175 / *D5175 = 0 JMP I SETJMP / long jump to previous setjmp address ////////////////////////////////////////////////////////////////////////////// / / PSKIP1 / / printf ("SKIPPED\r\n"); / ////////////////////////////////////////////////////////////////////////////// PSKIP1, 0 / return area JMS I IPUTS / print the following 2313 / S K 1120 / I P 2005 / P E 0445 / D CR 4300 / LF JMP I PSKIP1 / return ////////////////////////////////////////////////////////////////////////////// / / PSKIP0 / / printf ("FAILED TO SKIP\r\n"); / ////////////////////////////////////////////////////////////////////////////// PSKIP0, 0 / return area JMS I IPUTS / print the following 0601 / F A 1114 / I L 0504 / E D 4024 / T 1740 / O 2313 / S K 1120 / I P 4543 / CR LF 0000 / JMP I PSKIP0 / return ////////////////////////////////////////////////////////////////////////////// / / PRT4 / / Subroutine to print 4 octal digits from AC / ////////////////////////////////////////////////////////////////////////////// PRT4, 0 / return address DCA L5142 / save temp copy TAD L5142 / reload RTR / >>6 RTR RTR DCA L5137 / store high word (temporarily in 2nd char) TAD L5137 / reload AND L5145 / AND with 0007 TAD L5143 / add 6060 DCA L5136 / store in first character position TAD L5137 / fetch high word again RTL / >>3 RAL AND L5144 / AND with 0700 TAD L5136 / add in partly constructed first character DCA L5136 / and store TAD L5142 / refetch original AND L5145 / AND with 0007 TAD L5143 / add 6060 DCA L5137 / store in second character position TAD L5142 / fetch again RTL / >> 3 RAL AND L5144 / AND with 0700 TAD L5137 / add in second character DCA L5137 / stash JMS I IPUTS / print the following L5136, 0000 / (first two digits) L5137, 0000 / (last two digits) 0000 / JMP I PRT4 / return L5142, 0 / temp L5143, 6060 L5144, 0700 / constant L5145, 0007 / constant *5175 / ORIGIN change to 5175 D5175, 4353 D5176, 6600 D5177, PFAILB ////////////////////////////////////////////////////////////////////////////// / / PUTS / / This function prints the string following the subroutine call. / The string is half-word packed and is printed in the order high half / then low half. / / The following sequence, for example: / 4543,2324,0124,1103,4024,0523,2445,4300 / Is broken out by half word: / 45,43,23,24,01,24,11,03,40,24,05,23,24,45,43,00 / And results in: / CR LF S T A T I C T E S T CR LF / / Some special considerations apply for the packed string: / - a half word with a zero in it terminates printing and returns. / - 45 is a carriage return / - 43 is a line feed / - all other codes >= 40 have ' ' added to them / - codes < 40 have 0300 added to them / / This function uses autoindex register 0010. / ////////////////////////////////////////////////////////////////////////////// *5200 / ORIGIN change to 5200 PUTS, 0 / return address STA / AC = -1 TAD PUTS / subtract one from return address DCA AI10 / and store in auto-increment register L5204, TAD I AI10 / fetch word from caller's stack (AC = *++AI10) DCA L5216 / save in L5216 TAD L5216 / get word, and RTR / RTR / RTR / shift down 6 JMS S5217 / print it TAD L5216 / fetch local copy of word (lower 6 bits) JMS S5217 / print it JMP L5204 / next parameter L5216, 0 / local copy ////////////////////////////////////////////////////////////////////////////// / / S5217 / / This function works in conjunction with PUTS above. It's responsible / for decoding the special encoding of the packed string. / / Note that it performs the return-from-subroutine on behalf of PUTS / (as performed by "JMP I AI10" near the top of this routine). / ////////////////////////////////////////////////////////////////////////////// S5217, 0 / return address AND KLOWRD / mask off with 0077 SNA / end of string? JMP I AI10 / yes, return to next instruction after string TAD KM0040 / subtract 0040 (add 7740) SMA / skip if it was < 0040 JMP L5230 / if >= 0040, goto L5230 TAD D5251 / else add in 0340 (basically adds 0300 to original) JMP L5243 / print it L5230, / special character, code >= 0040 TAD KM0003 / subtract 3 more (add 7775) SZA / skip if original == 0043 (line feed) JMP L5235 / else next comparison TAD KLF / line feed JMP L5243 / print it L5235, TAD KM0002 / subtract 2 more (add 7776) SZA / skip if original == 0045 (carriage return) JMP L5242 / else next comparison TAD KCR / carriage return JMP L5243 / print it L5242, TAD D5254 / bias with 0245 (-2 and -3, so 0240, ' ') L5243, TLS / clear TTY flag, print AC4-11 L5244, TSF / skip if flag set JMP L5244 / loop waiting for flag to clear CLA TCF / clear flag JMP I S5217 / return D5251, 0340 / bias for starting at 0300 ('@') KLF, 0212 / line feed KCR, 0215 / carriage return D5254, 0245 / bias for starting at 0240 (' ') KLOWRD, 0077 / mask for low half of AC ////////////////////////////////////////////////////////////////////////////// / / S5256 / ////////////////////////////////////////////////////////////////////////////// S5256, 0 / return address CLA CLL TAD D0117 DCA D5300 / D5300 = D0017 L5262, TAD KM0024 DCA D5302 / D5302 = -24 L5264, ISZ D5302 / JMP L5264 / loop 24 times CLA / why four times??? CLA / timing, maybe? CLA / CLA / ISZ D5300 / increment D5300 SKP CLA JMP I S5256 / return AND I 5256 / doesn't make sense AND I 5256 / twice... JMP L5262 D5300, 0000 KM0024, 7754 D5302, 0000 ////////////////////////////////////////////////////////////////////////////// / / F5303 / ////////////////////////////////////////////////////////////////////////////// F5303, JMS SETJMP JMS I C0032 / call S4600 L5305, JMS I C0031 / call S4400 TAD D0101 TAD DRIVE XKLSA / AC 4-11 -> A, AC = NOT A CLA / AC = 0 XKRSB / read status B into AC4-11 TAD KM0041 SNA CLA HLT XKCLR / clear A & B registers JMP L5305 ////////////////////////////////////////////////////////////////////////////// / / F5320 / ////////////////////////////////////////////////////////////////////////////// F5320, JMS SETJMP JMS I C0032 / call S4600 L5322, JMS I C0033 / call S4423 TAD D0101 TAD DRIVE XKLSA / AC 4-11 -> A, AC = NOT A CLA XKRSB / read status B into AC4-11 TAD KM0041 SNA CLA HLT XKCLR / clear A & B registers JMP L5322 / constants *5375 / ORIGIN change to 5375 KM0002, 7776 / -2 KM0003, 7775 / -3 KM0040, 7740 / -40 ////////////////////////////////////////////////////////////////////////////// / / F5400 / ////////////////////////////////////////////////////////////////////////////// *5400 / ORIGIN change to 5400 F5400, HLT JMS S5532 JMS SETJMP JMS I C0032 / call S4600 JMS I C0031 / call S4400 L5405, TAD D0101 TAD DRIVE XKLSA / AC 4-11 -> A, AC = NOT A CLA XKRSB / read status B into AC4-11 TAD KM0041 SNA CLA HLT XKCLR / clear A & B registers TAD D5421 JMS I C0037 / call S4032 JMP L5405 D5421, 0000 ////////////////////////////////////////////////////////////////////////////// / / F5422 / ////////////////////////////////////////////////////////////////////////////// F5422, JMS SETJMP JMS I C0032 / call S4600 JMP L5436 L5425, TAD D0101 TAD DRIVE XKLSA / AC 4-11 -> A, AC = NOT A CLA XKRSB / read status B into AC4-11 TAD KM0041 SNA CLA HLT XKCLR / clear A & B registers L5436, TAD D5421 JMS I C0036 / call S4200 JMS I D5577 JMP L5425 ////////////////////////////////////////////////////////////////////////////// / / F5442 / ////////////////////////////////////////////////////////////////////////////// F5442, JMS SETJMP TAD D0101 TAD DRIVE TAD K0050 XKLSA / AC 4-11 -> A, AC = NOT A XKGOA / assert A, transfer data with AC CLA JMS I C0040 / call LKSAF XKCLR / clear A & B registers L5453, JMS I C0035 / call S4665 TAD D0101 TAD DRIVE XKLSA / AC 4-11 -> A, AC = NOT A CLA XKRSB / read status B into AC4-11 TAD KM0041 SNA CLA HLT XKCLR / clear A & B registers JMP L5453 ////////////////////////////////////////////////////////////////////////////// / / F5466 / ////////////////////////////////////////////////////////////////////////////// F5466, HLT JMS S5532 JMS SETJMP JMS I C0032 / call S4600 L5472, JMS I C0031 / call S4400 TAD D0101 TAD DRIVE XKLSA / AC 4-11 -> A, AC = NOT A CLA XKRSB / read status B into AC4-11 TAD KM0041 SNA CLA HLT XKCLR / clear A & B registers TAD D5421 JMS I C0037 / call S4032 JMP L5472 ////////////////////////////////////////////////////////////////////////////// / / F5507 / ////////////////////////////////////////////////////////////////////////////// F5507, JMS SETJMP JMS I C0032 / call S4600 JMP L5523 L5512, TAD D0101 TAD DRIVE XKLSA / AC 4-11 -> A, AC = NOT A CLA XKRSB / read status B into AC4-11 TAD KM0041 SNA CLA HLT XKCLR / clear A & B registers L5523, TAD D5421 JMS I C0036 / call S4200 JMS I D5577 IAC DCA D0130 JMS I C0036 / call S4200 JMP L5512 ////////////////////////////////////////////////////////////////////////////// / / S5532 / ////////////////////////////////////////////////////////////////////////////// S5532, 0 / return area LAS AND D5576 SNA IAC DCA D5421 TAD D5421 TAD D5575 SPA SNA CLA JMP L5546 TAD D5574 DCA D5421 L5546, TAD D5421 CIA DCA D5421 HLT LAS AND D5576 DCA D0132 JMS I D5573 JMP I S5532 / return *5573 / ORIGIN change to 5573 D5573, 3741 D5574, 0176 D5575, 7602 D5576, 0377 D5577, 3470 ////////////////////////////////////////////////////////////////////////////// / / F5600 / ////////////////////////////////////////////////////////////////////////////// *5600 / ORIGIN change to 5600 F5600, JMS SETJMP TAD D0101 TAD DRIVE TAD K0030 XKLSA / AC 4-11 -> A, AC = NOT A XKGOA / assert A, transfer data with AC CLA JMS I C0040 / call LKSAF XKCLR / clear A & B registers L5611, JMS I C0034 / call S4436 TAD D0101 TAD DRIVE XKLSA / AC 4-11 -> A, AC = NOT A CLA XKRSB / read status B into AC4-11 TAD KM0041 SNA CLA HLT XKCLR / clear A & B registers JMP L5611 ////////////////////////////////////////////////////////////////////////////// / / PCRCER -- Print CRC Error Information / / printf ("\r\nPC=%04o CRC ERROR\r\n", *PCRCER); / printf ("GOOD %04o %04o\r\n", GOODC1, GOODC2); / printf ("BAD %04o %04o\r\n", BADCR1, BADCR2); / ////////////////////////////////////////////////////////////////////////////// PCRCER, 0 / return area JMS I D5777 / skip if SR3 = 0 JMP L5671 JMS I D5776 / printf ("\r\nPC="); CMA TAD PCRCER JMS I IPRT4 JMS I IPUTS / print the following 4003 / C 2203 / R C 4005 / E 2222 / R R 1722 / O R 4543 / CR LF 0717 / G O 1704 / O D 4000 / TAD I D5775 / fetch good CRC (GOODC1) JMS I IPRT4 JMS I IPUTS / print the following 4000 / TAD I D5774 / fetch good CRC (GOODC2) JMS I IPRT4 JMS I IPUTS / print the following 4543 / CR LF 0201 / B A 0440 / D 4000 / TAD I D5773 / fetch bad CRC (BADCR1) JMS I IPRT4 JMS I IPUTS / print the following 4000 / TAD I D5772 / fetch bad CRC (BADCR2) JMS I IPRT4 JMS I IPUTS / print the following 4543 / CR LF 0000 / L5671, JMS I D5771 / skip if SR4 = 1 HLT JMS I ILJSR1 / long jump if SR1 on JMP I D5770 / goto 3553??? D5675, CLA TAD D5767 DCA AI13 TAD D5766 DCA I D5765 L5702, TAD D5715 CLL RAL SZL TAD D5764 DCA D5715 TAD D5715 AND K0377 DCA I AI13 ISZ I 5765 JMP L5702 JMP I D5675 D5715, 0000 ////////////////////////////////////////////////////////////////////////////// / / STATIC TEST ENTRY / ////////////////////////////////////////////////////////////////////////////// STEST, JMS I IPUTS / print the following 4543 / CR LF 2324 / S T 0124 / A T 1103 / I C 4024 / T 0523 / E S 2445 / T CR 4300 / LF TAD D5763 / put -50 DCA I D5762 / into LNLEFT register HLT / wait for input... LAS / ... (drive number, bit 5) from console DCA DRIVE / store it HLT / and allow SR to be set for running flags JMP I ISTST2 / part 2 ////////////////////////////////////////////////////////////////////////////// / / CONTROL TEST ENTRY / ////////////////////////////////////////////////////////////////////////////// CTEST, JMS I IPUTS / print the following 4543 / CR LF 0317 / C O 1624 / N T 2217 / R O 1440 / L 2405 / T E 2324 / S T 4543 / CR LF 0000 / TAD D5763 / put -50 DCA I D5762 / into LNLEFT register HLT / wait for input... LAS / ... (drive number, bit 5) from console DCA DRIVE / store it HLT / wait for continuation JMP I ICTST2 / part 2 *5760 / ORIGIN change to 5760 ICTST2, CTEST2 ISTST2, STEST2 / address of more static tests? D5762, LNLEFT / address of count of chars left in line D5763, 7716 / -50, count for number of chars left in line D5764, 0003 D5765, 4547 D5766, 7600 D5767, 6777 D5770, 3553 D5771, SKSR41 D5772, BADCR2 D5773, BADCR1 D5774, GOODC2 D5775, GOODC1 D5776, SNLPCE D5777, SKSR30 ////////////////////////////////////////////////////////////////////////////// / / PFAILA / / Print failure of register A indication. / / printf ("\r\nPC=%04o\r\nLOADA %04o EXPA %04o RECA %04o\r\n", / *LVREGA, REGA, (!REGA & 00377), NREGA); / ////////////////////////////////////////////////////////////////////////////// *6000 / ORIGIN change to 6000 PFAILA, 0 / return address JMS SNLPCE / printf ("\r\nPC=") CMA TAD I L6177 / add in LVREGA (caller's address) JMS I IPRT4 / print 4 digits AC JMS I IPUTS / print the following 4543 / CR LF 1417 / L O 0104 / A D 0140 / A 0000 / TAD REGA JMS I IPRT4 / print 4 digits AC JMS I IPUTS / print the following 4005 / E 3020 / X P 0140 / A 0000 / TAD REGA CMA AND K0377 JMS I IPRT4 / print 4 digits AC JMS I IPUTS / print the following 4022 / R 0503 / E C 0140 / A 0000 / TAD NREGA JMS I IPRT4 / print 4 digits AC JMS I IPUTS / print the following 4543 / CR LF 0000 / JMP I PFAILA / return ////////////////////////////////////////////////////////////////////////////// / / PFAILB / / Print failure of register B / / printf ("\r\nPC=%04o", *VRFYB); / if (D0051) { / printf ("/%04o", D0051); / } / printf ("\r\nASTAT %04o EXPB %04o RECB %04o\r\n", REGA, -NEXPB, REGB); / ////////////////////////////////////////////////////////////////////////////// PFAILB, 0 / return area JMS SNLPCE / printf ("\r\nPC=") CMA / AC = -1 TAD I D6176 / add in VRFYB (caller's address) JMS I IPRT4 / print it TAD D0051 SNA CLA / skip if nonzero JMP L6055 / D0051 was zero, goto L6055 JMS I IPUTS / print the following 5700 / / TAD D0051 / fetch D0051 again JMS I IPRT4 / printf it L6055, JMS I IPUTS / print the following 4543 / CR LF 0123 / A S 2401 / T A 2440 / T 0000 / TAD REGA JMS I IPRT4 JMS I IPUTS / print the following 4005 / E 3020 / X P 0240 / B 0000 / TAD NEXPB / fetch the two's complement negative expected B CIA / flip sign JMS I IPRT4 / and print it JMS I IPUTS / print the following 4022 / R 0503 / E C 0240 / B 0000 / TAD REGB / fetch register B JMS I IPRT4 / print register B JMS I IPUTS / print the following 4543 / CR LF 0000 / JMP I PFAILB / return ////////////////////////////////////////////////////////////////////////////// / / S6110 / ////////////////////////////////////////////////////////////////////////////// S6110, 0 / return area JMS I D6175 / skip if SR3 = 0 JMP L6125 JMS SNLPCE / printf ("\r\nPC="); CMA / AC = -1 TAD S6110 / add in the return address JMS I IPRT4 / print the caller's address JMS I IPUTS / print the following 4013 / K 2305 / S E 1640 / N 0000 / JMS I D6174 / printf ("FAILED TO SKIP\r\n"); L6125, JMS I D6173 / skip if SR4 = 1 HLT JMS I ILJSR1 / long jump if SR1 on JMP I S6110 / return ////////////////////////////////////////////////////////////////////////////// / / SNLPCE (Subroutine New Line PC Equals) / / printf ("\r\nPC="); / ////////////////////////////////////////////////////////////////////////////// SNLPCE, 0 / return address JMS I IPUTS / print the following 4543 / CR LF 2003 / C 7500 / = JMP I SNLPCE / return ////////////////////////////////////////////////////////////////////////////// / / Static test, part 5 / / This is the final part of the static test, where a progress character, / "S" is printed every 8 iterations through. If SR11 is / ////////////////////////////////////////////////////////////////////////////// STEST5, LAS / fetch SR RTR / SPA CLA / skip if SR11 is off JMP L6150 / SR11 is on, goto L6150 TAD DRIVE / SR11 is off, get DRIVE SZA CLA / skip if zero SKP / wasn't zero, use value as is TAD K0100 / add in drive B (bit 5) DCA DRIVE / and save drive number L6150, ISZ D0113 JMP I D6172 / restart tests (6 words past STEST2) TAD KS / print an "S" every so often JMS I D6171 / print progress character JMP I D6170 / restart tests (4 words past STEST2) KS, 0323 *6170 / ORIGIN change to 6170 D6170, L0221 D6171, PRTPRG D6172, L0223 D6173, SKSR41 D6174, PSKIP0 D6175, SKSR30 D6176, VRFYB L6177, LVREGA ////////////////////////////////////////////////////////////////////////////// / / S6200 / ////////////////////////////////////////////////////////////////////////////// *6200 / ORIGIN change to 6200 S6200, 0 / return area JMS I D6377 / skip if SR3 = 0 JMP L6215 JMS I D6376 / printf ("\r\nPC="); CMA TAD S6200 JMS I IPRT4 JMS I IPUTS / print the following 4013 / K 2302 / S B 0640 / F 0000 / JMS I D6375 / printf ("FAILED TO SKIP\r\n"); L6215, JMS I D6374 / skip if SR4 = 1 HLT JMS I ILJSR1 / long jump if SR1 on JMP I S6200 / return ////////////////////////////////////////////////////////////////////////////// / / S6221 / ////////////////////////////////////////////////////////////////////////////// S6221, 0 / return area JMS I D6377 / skip if SR3 = 0 JMP L6236 JMS I D6376 / printf ("\r\nPC="); CMA TAD S6221 / fetch caller's address JMS I IPRT4 / and print it JMS I IPUTS / print the following 4013 / K 2304 / S D 2240 / R 0000 / JMS I D6375 / printf ("FAILED TO SKIP\r\n"); L6236, JMS I D6374 / skip if SR4 = 1 HLT JMS I ILJSR1 / long jump if SR1 on JMP I S6221 / return ////////////////////////////////////////////////////////////////////////////// / / S6242 / ////////////////////////////////////////////////////////////////////////////// S6242, 0 / return area JMS I D6377 / skip if SR3 = 0 JMP L6257 JMS I D6376 / printf ("\r\nPC="); CMA TAD S6242 JMS I IPRT4 JMS I IPUTS / print the following 4013 / K 2301 / S A 0640 / F 0000 / JMS I D6375 / printf ("FAILED TO SKIP\r\n"); L6257, JMS I D6374 / skip if SR4 = 1 HLT JMS I ILJSR1 / long jump if SR1 on JMP I S6242 / return ////////////////////////////////////////////////////////////////////////////// / / S6263 / ////////////////////////////////////////////////////////////////////////////// S6263, 0 / return area JMS I D6377 / skip if SR3 = 0 JMP L6300 JMS I D6376 / printf ("\r\nPC="); CMA TAD S6263 JMS I IPRT4 JMS I IPUTS / print the following 4013 / K 2305 / S E 1640 / N 0000 / JMS I D6373 / printf ("SKIPPED\r\n"); L6300, JMS I D6374 / skip if SR4 = 1 HLT JMS I ILJSR1 / long jump if SR1 on JMP I S6263 / return ////////////////////////////////////////////////////////////////////////////// / / S6304 / ////////////////////////////////////////////////////////////////////////////// S6304, 0 / return area JMS I D6377 / skip if SR3 = 0 JMP L6321 JMS I D6376 / printf ("\r\nPC="); CMA TAD S6304 JMS I IPRT4 JMS I IPUTS / print the following 4013 / K 2302 / S B 0640 / F 0000 / JMS I D6373 / printf ("SKIPPED\r\n"); L6321, JMS I D6374 / skip if SR4 = 1 HLT JMS I ILJSR1 / long jump if SR1 on JMP I S6304 / return ////////////////////////////////////////////////////////////////////////////// / / DATA TEST / ////////////////////////////////////////////////////////////////////////////// DTEST, JMS I IPUTS / print the following 4543 / CR LF 0401 / D A 2401 / T A 4024 / T 0523 / E S 2445 / T CR 4300 / LF TAD D6372 / put -50 DCA I D6371 / into LNLEFT HLT / wait for input... LAS / ... (drive number, bit 5) from console DCA DRIVE HLT JMP I D6370 / part 2 ////////////////////////////////////////////////////////////////////////////// / / WRITE PROTECT TEST / ////////////////////////////////////////////////////////////////////////////// WPTEST, JMS I IPUTS / print the following 4543 / CR LF 2722 / W R 1124 / I T 0540 / E 2022 / P R 1724 / O T 0503 / E C 2440 / T 2405 / T E 2324 / S T 4543 / CR LF 0000 / HLT / wait for input... LAS / ... (drive number, bit 5) from console DCA DRIVE / store drive number HLT / and let them set up the switches for running JMP I D6367 / part 2 *6367 / ORIGIN change to 6367 D6367, L3124 D6370, L3000 D6371, LNLEFT D6372, 7716 / -50 D6373, PSKIP1 D6374, SKSR41 D6375, PSKIP0 D6376, SNLPCE D6377, SKSR30 ////////////////////////////////////////////////////////////////////////////// / / KSDRSK -- KSDR SKipped / / printf ("\r\nPC=%04o KSDR SKIPPED\r\n", *KSDRSK); / ////////////////////////////////////////////////////////////////////////////// *6400 / ORIGIN change to 6400 KSDRSK, 0 / return area JMS I D6577 / skip if SR3 = 0 JMP L6415 JMS I D6576 / printf ("\r\nPC="); CMA TAD KSDRSK JMS I IPRT4 JMS I IPUTS / print the following 4013 / K 2304 / S D 2240 / R 0000 / JMS I D6575 / printf ("SKIPPED\r\n"); L6415, JMS I D6574 / skip if SR4 = 1 HLT JMS I ILJSR1 / long jump if SR1 on JMP I KSDRSK / return ////////////////////////////////////////////////////////////////////////////// / / KSAFSK -- KSAF SKipped / / printf ("\r\nPC=%04o KSAF SKIPPED\r\n", *KSAFSK); / ////////////////////////////////////////////////////////////////////////////// KSAFSK, 0 / return area JMS I D6577 / skip if SR3 = 0 JMP L6436 JMS I D6576 / printf ("\r\nPC="); CMA TAD KSAFSK JMS I IPRT4 JMS I IPUTS / print the following 4013 / K 2301 / S A 0640 / F 0000 / JMS I D6575 / printf ("SKIPPED\r\n"); L6436, JMS I D6574 / skip if SR4 = 1 HLT JMS I ILJSR1 / long jump if SR1 on JMP I KSAFSK / return ////////////////////////////////////////////////////////////////////////////// / / DATAER / / printf ("\r\nPC=%04o DATA ERROR\r\n", *DATAER); / printf ("%04o %04o\r\n", *D0111, *D0112); / ////////////////////////////////////////////////////////////////////////////// DATAER, 0 / return area JMS I D6577 / skip if SR3 = 0 JMP L6473 JMS I D6576 / printf ("\r\nPC="); CMA TAD DATAER JMS I IPRT4 JMS I IPUTS / print the following 4004 / D 0124 / A T 0140 / A 0522 / E R 2217 / R O 2245 / R CR 4300 / LF TAD D0111 JMS I IPRT4 JMS I IPUTS / print the following 4040 / 0000 / TAD D0112 JMS I IPRT4 JMS I IPUTS / print the following 4543 / CR LF 0000 / L6473, JMS I D6574 / skip if SR4 = 1 HLT JMS I ILJSR1 / long jump if SR1 on JMP I DATAER / return ////////////////////////////////////////////////////////////////////////////// / / INTR / / printf ("\r\nPC=%04o INTERRUPTED\r\n", *INTR); / ////////////////////////////////////////////////////////////////////////////// INTR, 0 / return area JMS I D6577 / skip if SR3 = 0 JMP L6517 JMS I D6576 / printf ("\r\nPC="); CMA TAD INTR JMS I IPRT4 JMS I IPUTS / print the following 4011 / I 1624 / N T 0522 / E R 2225 / R U 2024 / P T 0504 / E D 4543 / CR LF 0000 / L6517, JMS I D6574 / skip if SR4 = 1 HLT JMS I ILJSR1 / long jump if SR1 on JMP I INTR / return ////////////////////////////////////////////////////////////////////////////// / / NOINTR / / printf ("\r\nPC=%04o FAILED TO INTERRUPT\r\n", *NOINTR); / ////////////////////////////////////////////////////////////////////////////// NOINTR, 0 / return area JMS I D6577 / skip if SR3 = 0 JMP L6547 JMS I D6576 / printf ("\r\nPC="); CMA TAD NOINTR JMS I IPRT4 JMS I IPUTS / print the following 4006 / F 0111 / A I 1405 / L E 0440 / D 2417 / T O 4011 / I 1624 / N T 0522 / E R 2225 / R U 2024 / P T 4543 / CR LF 0000 / L6547, JMS I D6574 / skip if SR4 = 1 HLT JMS I ILJSR1 / long jump if SR1 on JMP I NOINTR / return *6574 / ORIGIN change to 6574 D6574, SKSR41 D6575, PSKIP1 D6576, SNLPCE D6577, SKSR30 ////////////////////////////////////////////////////////////////////////////// / / S6600 / ////////////////////////////////////////////////////////////////////////////// *6600 / ORIGIN change to 6600 S6600, 0 / return area TAD D0051 / AC-1 save area SNA CLA JMP I S6600 / return TAD D0054 SNA CLA JMP I S6600 / return TAD REGA AND D6777 SNA CLA JMP L6625 TAD REGA AND D6777 TAD D6776 SNA CLA JMP L6625 TAD REGA AND D6777 TAD D6775 SZA CLA JMP I S6600 / return L6625, TAD REGA AND D6774 SNA CLA JMP I S6600 / return TAD NEXPB SZA CLA JMP I S6600 / return TAD I D6773 SNA CLA JMP L6643 XKCLR / clear A & B registers DCA D0054 DCA I D6773 JMP I D6772 L6643, XKCLR / clear A & B registers DCA D0054 JMP I D6771 D6646, 0000 JMS I D6770 / skip if SR3 = 0 JMP L6727 JMS I D6767 / printf ("\r\nPC="); CMA TAD D6646 JMS I IPRT4 JMS I IPUTS / print the following 4004 / D 0124 / A T 0140 / A 0522 / E R 2217 / R O 2245 / R CR 4307 / LF G 1717 / O O 0440 / D 4002 / B 0104 / A D 4543 / CR LF 0000 / L6673, JMS I IPUTS / print the following 4543 / CR LF 0000 / TAD D0111 JMS I IPRT4 JMS I IPUTS / print the following 4040 / 0000 / TAD D0112 JMS I IPRT4 L6705, TAD I AI12 DCA D0112 TAD I AI13 DCA D0111 TAD D0111 CIA TAD D0112 SNA CLA JMP L6723 JMS I D6770 / skip if SR3 = 0 JMP L6727 ISZ I 6766 JMP L6673 JMP L6727 L6723, JMS I D6770 / skip if SR3 = 0 JMP L6727 ISZ I 6766 JMP L6705 L6727, JMS I D6765 / skip if SR4 = 1 HLT JMS I ILJSR1 / long jump if SR1 on JMP I D6764 ////////////////////////////////////////////////////////////////////////////// / / PRTPRG / / Prints the progress report character in AC4-11. The LNLEFT variable is / consulted to see if the line length has been exceeded; if so, the LNLEFT / variable is reloaded with -50, and a CRLF is issued. / ////////////////////////////////////////////////////////////////////////////// PRTPRG, 0 / return area TLS / clear TTY flag, print AC4-11 L6735, TSF / skip if flag set JMP L6735 / wait for non-busy flag CLA TCF / clear flag ISZ LNLEFT / are we over the line length? JMP I PRTPRG / no, return TAD D6763 / AC = -50 DCA LNLEFT / put count into line length register JMS I IPUTS / print the following 4543 / CR LF 0000 / JMP I PRTPRG / return LNLEFT, 0 / number of bytes left in line before CRLF *6763 / ORIGIN change to 6763 D6763, 7716 / -50 D6764, 3521 D6765, SKSR41 D6766, 4547 D6767, SNLPCE D6770, SKSR30 D6771, 4301 D6772, 4352 D6773, 4353 D6774, 0200 D6775, 7760 D6776, 7720 D6777, 0070 *7000 / ORIGIN change to 7000 JMP L7007 JMP L7020 JMP I D7177 JMP I D7176 JMP L7022 JMP L7025 JMP L7030 L7007, TAD D7175 JMS S7012 JMP L7007 ////////////////////////////////////////////////////////////////////////////// / / S7012 / ////////////////////////////////////////////////////////////////////////////// S7012, 0 / return area XKLSA / AC 4-11 -> A, AC = NOT A XKGOA / assert A, transfer data with AC XKRSB / read status B into AC4-11 MQL JMP I S7012 L7020, TAD D7174 SKP L7022, TAD D7173 DCA I D7172 JMP I D7171 L7025, LAS JMS S7012 JMP L7025 L7030, TAD D7175 JMS S7012 JMS S7037 TAD D7170 JMS S7012 JMS S7037 JMP L7030 ////////////////////////////////////////////////////////////////////////////// / / S7037 / ////////////////////////////////////////////////////////////////////////////// S7037, 0 / return area TAD D7167 DCA L7051 DCA L7052 L7043, ISZ L7052 JMP L7043 / loop ISZ L7051 JMP L7043 / loop XKCLR / clear A & B registers JMP I S7037 / return L7051, AND C0000 L7052, AND C0000 / establish interrupt vector TAD K5402 DCA L0001 / Patch the interrupt vector table to "JMP I D0002" TAD K4156 DCA D0002 / Address of interrupt vector (INTVEC) TAD D7166 DCA AI10 TAD D7165 DCA AI11 TAD D7164 DCA S7012 L7065, TAD I AI10 DCA I AI11 ISZ S7012 JMP L7065 TAD D7163 DCA I D7162 TAD D7163 DCA I D7161 TAD D7163 DCA I D7160 TAD D7157 DCA I D7156 TAD D7163 DCA I D7155 TAD D7163 DCA I D7171 TAD D7154 DCA I D7153 L7107, HLT JMP L7107 *7153 / ORIGIN change to 7153 D7153, 5533 D7154, 7201 D7155, 5424 D7156, 5423 D7157, 7402 D7160, 5404 D7161, 5403 D7162, 5321 D7163, 7000 D7164, 7600 D7165, 0777 D7166, 6777 D7167, 7760 D7170, 0250 D7171, 5400 D7172, 5420 D7173, 5575 D7174, 5576 D7175, 0220 D7176, 5600 D7177, 5320 *7200 / ORIGIN change to 7200 L7200, JMP I D7377 JMP I D7376 JMP I D7376 JMP I D7375 JMP I D7374 JMP I D7373 JMP I D7373 JMP I D7372 JMP I D7371 JMP I D7370 JMP I D7370 JMP I D7367 SKP CLA TAD K0100 / add drive number (bit 5, drive "B") DCA DRIVE / store drive number JMP I D7366 JMS SETJMP L7221, DCA D0134 L7222, TAD D0134 TAD D0101 TAD DRIVE JMS I C0042 / call LVREGA CLA CLL CMA RAL / AC = -2 DCA D0133 / store in loop counter L7230, DCA D0117 JMS I IS0116 ISZ D0133 / execute 2 times JMP L7230 LAS SPA CLA JMP L7222 TAD D0134 TAD D7365 AND D7364 SZA JMP L7221 JMS I ILJSR1 / long jump if SR1 on JMP I D7363 / establish interrupt vector TAD K5402 DCA L0001 / Patch the interrupt vector table to "JMP I D0002" TAD K4156 DCA D0002 / Address of interrupt vector (INTVEC) TAD C7362 / AC = 7177 (L7200 - 1) DCA AI10 / autoindex 10 is ready to work on 7200 TAD C7361 / AC = 1177 (CTEST3 - 1) DCA AI11 / autoindex 11 is ready to work on CTEST3 TAD C7360 / AC = 7600 (-0200) DCA D0133 / D0133 = 7600 / copy 7200-7377 to CTEST3... why??? L7260, TAD I AI10 / fetch *++AI10 DCA I AI11 / store *++AI11 ISZ D0133 / execute 0200 times JMP L7260 / some kind of code patching going on here / @@@ todo: analyze patch code, and put in constants for patch addresses TAD C7357 DCA I C7356 / *4073 = 1174 TAD C7355 / DCA I C7354 / *4103 = 4573 TAD C7353 DCA I C7352 / *2475 = 5572 TAD C7351 DCA I C7350 / *7545 = 5571 TAD C7347 DCA I C7346 / *4417 = 7000 TAD C7347 DCA I C7345 / *4416 = 7000 TAD C7344 DCA I C7343 / *2106 = 5570 TAD C7342 DCA I C7341 / *5424 = 5567 TAD C7340 DCA I C7337 / *5507 = 7402 TAD C7336 DCA I C7335 / *5510 = 4566 TAD C7334 DCA I C7333 / *5511 = 5565 TAD C7332 DCA I C7331 / *6151 = 5564 TAD C7330 DCA I C7327 / *5266 = 1563 TAD C0162 DCA I C7326 / *5267 = 7421 TAD C7325 DCA I C7324 / *7573 = 5561 L7322, HLT JMP L7322 / don't allow further CONTinues from here C7324, 7573 C7325, 5561 C7326, 5267 C7327, 5266 C7330, 1563 C7331, 6151 C7332, 5564 C7333, 5511 C7334, 5565 C7335, 5510 C7336, 4566 C7337, 5507 C7340, 7402 C7341, 5424 C7342, 5567 C7343, 2106 C7344, 5570 C7345, 4416 C7346, 4417 C7347, 7000 C7350, 7545 C7351, 5571 C7352, 2475 C7353, 5572 C7354, 4103 C7355, 4573 C7356, 4073 C7357, 1174 C7360, 7600 C7361, CTEST3-1 C7362, L7200-1 D7363, 0223 D7364, 0070 D7365, 0010 D7366, 2447 D7367, S7546+1 D7370, F5422 D7371, F5600 D7372, F5442 D7373, F5320 D7374, CTEST5 D7375, F5400 D7376, F5303 D7377, STEST ////////////////////////////////////////////////////////////////////////////// / / SETWP / / printf ("\r\nSET THE WRITE PROTECT TAB ON DRIVE %c", DRIVE ? 'S' : 'R'); / / @@@ The whole 'S' and 'R' thing bothers me... / ////////////////////////////////////////////////////////////////////////////// *7400 / ORIGIN change to 7400 SETWP, 0 / return area JMS I IPUTS / print the following 4543 / CR LF 2305 / S E 2440 / T 2410 / T H 0540 / E 2722 / W R 1124 / I T 0540 / E 2022 / P R 1724 / O T 0503 / E C 2440 / T 2401 / T A 0240 / B 1716 / O N 4004 / D 2211 / R I 2605 / V E 4000 / TAD DRIVE / test DRIVE (bit 5 is 0=A/1=B) SZA CLA / skip if zero (unit A) JMP L7432 TAD I C7577 / AC = 3122 ('R') SKP L7432, TAD I C7576 / AC = 3123 ('S') TLS / clear TTY flag, print AC4-11 L7434, TSF / skip if flag set JMP L7434 / wait CLA TCF / clear flag JMP I SETWP / return ////////////////////////////////////////////////////////////////////////////// / / WPROT / / printf (" TO WRITE PROTECT POSITION\r\n"); / ////////////////////////////////////////////////////////////////////////////// WPROT, 0 / return area JMS I IPUTS / print the following 4024 / T 1740 / O 2722 / W R 1124 / I T 0540 / E 2022 / P R 1724 / O T 0503 / E C 2440 / T 2017 / P O 2311 / S I 2411 / T I 1716 / O N 4543 / CR LF 0000 / JMP I WPROT / return ////////////////////////////////////////////////////////////////////////////// / / WPEN / / printf (" TO WRITE ENABLE POSITON\r\n"); / ////////////////////////////////////////////////////////////////////////////// WPEN, 0 / return area JMS I IPUTS / print the following 4024 / T 1740 / O 2722 / W R 1124 / I T 0540 / E 0516 / E N 0102 / A B 1405 / L E 4020 / P 1723 / O S 1124 / I T 1117 / I O 1645 / N CR 4300 / LF JMP I WPEN / return ////////////////////////////////////////////////////////////////////////////// / / POK / / printf ("\r\nOK"); / ////////////////////////////////////////////////////////////////////////////// POK, 0 / return area JMS I IPUTS / print the following 4543 / CR LF 1713 / O K 0000 / JMP I POK / return ////////////////////////////////////////////////////////////////////////////// / / S7512 / ////////////////////////////////////////////////////////////////////////////// S7512, 0 / return area JMS SETJMP JMS I C0032 / call S4600 DCA D0051 CLA CLL CMA RTL DCA D0111 TAD D0101 TAD DRIVE JMS I C0042 / call LVREGA XKGOA / assert A, transfer data with AC CLA XKCLR / clear A & B registers L7526, TAD D0101 TAD DRIVE JMS I C0042 / call LVREGA XKGOA / assert A, transfer data with AC CLA JMS I C0041 / call VRFYB TAD D7575 DCA D0117 JMS I IS0116 TAD KM0041 JMS I C0041 / call VRFYB XKCLR / clear A & B registers ISZ D0111 JMP L7526 / JMS I ILJSR1 / long jump if SR1 on JMP I S7512 / return ////////////////////////////////////////////////////////////////////////////// / / S7546 / ////////////////////////////////////////////////////////////////////////////// S7546, 0 / return area JMS SETJMP CLA CLL CMA RTL DCA D0111 L7552, JMS I C0032 / call S4600 JMS I C0031 / call S4400 DCA D0051 TAD K0030 / AC = 0030 TAD D0101 TAD DRIVE JMS I C0042 / call LVREGA DCA D0117 XKGOA / assert A, transfer data with AC JMS I IS0116 JMS I IS0116 TAD KM0041 JMS I C0041 / call VRFYB XKCLR / clear A & B registers ISZ D0111 JMP L7552 / JMS I ILJSR1 / long jump if SR1 on JMP I S7546 / return *7575 / ORIGIN change to 7575 D7575, 7242 C7576, 3123 C7577, 3122 *0161 / ORIGIN change to 0161 7547 / MQA SCA DVI 7421 C0162, 7421 AND D0134 1220/TAD 0020 JMP I C0036 JMP I D0132 JMP I D0107 ISZ D0005 ISZ I 0047 / @@@ pnc 7513 / MQA SHL 5066 5066 CLA CLL CML RAL JMP I C0022 JMP I D0005 7747/CLA MQA SCA DVI $
Latest Updates
Master Reference
PDP-12 is alive!
New machine: PDP-8/L

Contact us This page was updated on Fri Feb 19 00:10:36 EST 2010 © 2000-2007 by Robert Krten.
All rights reserved.
Areas of expertise: 8044, 8051, ARC/CBS, ARCNet, ARM, ASM-86, Automated Disassembly, Avanza, Avionics Software, awk, bash, Bell 103, Bell 202, BITBus, Bootloaders, C, Call Processing, Caller ID, CF-UTTH, Clear Thinking and Common Sense, Client/Server, CMR-91, Code Analysis, Cold Standby, Computer Based Training, Course Developemnt, Course Presentation, CRS-1, curl, cvs, Czech Language, Databases, Data Acquisition, Data Recovery, Decompilation, Debugging, Distributed Processing, DMS-100, Documentation, Drivers, DSP, DTMF, E.164, Embedded Systems, Emulation, Equinox, expect, Fault Tolerance, FFT, Filesystems, Firewalls, Fractals, FreeBSD, FSK, Gammacell 40/1000/3000, Graphics, GSR-12000, Hardware, High Availability, Home Automation, Hot Standby, HTML, HTTP, IDA Pro, IIDS, Image Processing, In-Service Upgrade, Industrial Automation, Infrastructure, Internationalization, iRMX-86/286, ISBT-128, Kernels, ksh, Ladder Logic, Lexical Analyzers, Linux, Loggers, m4, make, Medical Devices, Memory Constrained Environments, Message Passing, Microcontrollers, MIDI, MIL-STD-2167A, NNTP, OpenBSD, Optimization, OrCAD, Oscilloscopes, PABX, Parallel Processing, Parsing, PDP-8, Photon, Porting, POSIX, POVRay, Powerpoint, PowerPC, Preprocessor, Process Control, Program Flow Analysis, Project Management, Prototyping, Public Speaking, QNET, QNX 2, QNX 4, QNX 6 (Neutrino), Radarsat, rcs, Realtime Techniques, Recursive Descent Parsers, Regression Testing, Regular Expressions, Requirements Analysis, Resource Managers, Restoration, Reverse Engineering, Scripting, Security Systems, sed, Serial Protocols, SGML, Simulation, SMDR, SMTP, Soldering, svn, SX-20, Synthesizers, System Architecture, T.4, T.30, TCL, TCP/IP, Technical Presentations, Technical Writing, Telecoms, Testcases, Testjigs, Text Processing, Threads, Tools, Traceability Matrices, TTL, UNIX, Utilities, UUCP, Validation Protocols, Vaulting, VAX/VMS, vi, Virtual Filesystems, Warm Standby, wget, Wirewrap, X-10, X.25, x86