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
$
|