Files
Arquivotheca.SunOS-4.1.4/usr.etc/fpa/microcode/com.u
seta75D ff309bfe1c Init
2021-10-11 18:37:13 -03:00

1309 lines
40 KiB
Plaintext

|*
|* Weitek Single Precision ALU Instructions
|*
|* Operations with two operands and one result
routine c.ssub w01010000000 lnop ssub
routine c.sdiff w01010000100 lnop sdiff
routine c.ssubm w01010001000 lnop ssubm
routine c.sadd w01010100000 lnop sadd
routine c.ssum w01010100100 lnop ssum
routine c.saddm w01010101000 lnop saddm
; las csla; reg; ; rcssp ptr3;
call wait3; lbsf fmap csla; reg; recclk; rcssp ptr1;
; csuxa usp; ; ; ;
; ; ; ; ptr1;
jwerr ser1 cstat;woea; dtor; ; ramwe rcssp ptr1;
call idle1; ; dtor; ; ramwe ptr1;
|* Operations with one operand and one result
routine c.sneg w01010010000 lnop sneg
routine c.sident w01010110000 lnop sident
routine c.sabs w01010111000 lnop sabs
routine c.sexct w01011100000 lnop sexct
routine c.swdnrm w01011100100 lnop swdnrm
routine c.sinxct w01011101000 lnop sinxct
routine c.sfloat w01011110100 lnop sfloat
; lasf fmap csla; reg; ; ;
call wait2; ; ; recclk; rcssp ptr1;
; csuxa usp; ; ; ;
; ; ; ; ptr1;
jwerr ser1 cstat;woea; dtor; ; ramwe rcssp ptr1;
call idle1; ; dtor; ; ramwe ptr1;
|* Operations with two operands and no result
routine c.scmp w01011000000 lnop scmp
routine c.scmpm w01011001000 lnop scmpm
; las csla; reg; ; rcssp ptr3;
call wait3; lbsf fmap csla; reg; ; ;
call wait1; csuxa usp; ; ; ;
jwerr werr cstat;woea; ; ; ;
call idle1; ; ; ; ;
|* Operations with one operand and no result
routine c.scmp0 w01011010000 lnop scmp0
call wait3; lasf fmap csla; reg; ; rcssp ptr3;
call wait1; csuxa usp; ; ; ;
jwerr werr cstat;woea; ; ; ;
call idle1; ; ; ; ;
|* Operations with one operand and one integer result (i.e. from l.s.
|* portion of Weitek chip)
routine c.scvtint w01011110000 lnop scvtint
; lasf fmap csla; reg; ; rcssp ptr3;
call wait2; ; ; recclk; rcssp ptr1;
; csuxa ulsw; ; ; ;
; ; ; ; ptr1;
jwerr ser1 cstat;woea; dtor; ; ramwe rcssp ptr1;
call idle1; ; dtor; ; ramwe ptr1;
|*
|* Weitek Double Precision ALU Instructions
|*
|* Operations with two operands and one result
routine c.dsub w01010000001 lnop dsub
routine c.ddiff w01010000101 lnop ddiff
routine c.dsubm w01010001001 lnop dsubm
routine c.dadd w01010100001 lnop dadd
routine c.dsum w01010100101 lnop dsum
routine c.daddm w01010101001 lnop daddm
; lam csla; reg; ; rcslsw ptr2;
; lal csla; reg; ; rcsmsw ptr3;
; lbm csla; reg; ; rcslsw ptr3;
; lblf fmap csla; reg; recclk; rcsmsw ptr1;
call wait2; ; ; recclk; rcslsw ptr1;
; csuxa umsw; ; ; ;
; csuxa ulsw; ; ; ptr1;
jwerr der1 cstat;woea; dtor; ; ramwe rcsmsw ptr1;
; woea; dtor; ; ramwe rcslsw ptr1;
call idle1; ; dtor; ; ramwe ptr1;
|* Operations with one operand and one result
routine c.dneg w01010010001 lnop dneg
routine c.dident w01010110001 lnop dident
routine c.dabs w01010111001 lnop dabs
routine c.dexct w01011100001 lnop dexct
routine c.dwdnrm w01011100101 lnop dwdnrm
routine c.dinxct w01011101001 lnop dinxct
routine c.dfloat w01011110101 lnop dfloat
; lam csla; reg; ; rcslsw ptr2;
; lalf fmap csla; reg; ; ;
; ; ; recclk; rcsmsw ptr1;
call wait1; ; ; recclk; rcslsw ptr1;
; csuxa umsw; ; ; ;
; csuxa ulsw; ; ; ptr1;
jwerr der1 cstat;woea; dtor; ; ramwe rcsmsw ptr1;
; woea; dtor; ; ramwe rcslsw ptr1;
call idle1; ; dtor; ; ramwe ptr1;
|* Operations with two operands and no result
routine c.dcmp w01011000001 lnop dcmp
routine c.dcmpm w01011001001 lnop dcmpm
; lam csla; reg; ; rcslsw ptr2;
; lal csla; reg; ; rcsmsw ptr3;
; lbm csla; reg; ; rcslsw ptr3;
call wait3; lblf fmap csla; reg; ; ;
call wait1; csuxa umsw; ; ; ;
jwerr werr cstat;woea; ; ; ;
call idle1; ; ; ; ;
|* Operations with one operand and no result
routine c.dcmp0 w01011010001 lnop dcmp0
; lam csla; reg; ; rcslsw ptr2;
call wait3; lalf fmap csla; reg; ; ;
call wait1; csuxa umsw; ; ; ;
jwerr werr cstat;woea; ; ; ;
call idle1; ; ; ; ;
|* Operations with one operand and one integer result (i.e. from l.s.
|* portion of Weitek chip)
routine c.dcvtint w01011110001 lnop dcvtint
; lam csla; reg; ; rcslsw ptr2;
; lalf fmap csla; reg; ; ;
; ; ; recclk; rcsmsw ptr1;
call wait1; ; ; ; rcslsw ptr1;
; csuxa ulsw; ; ; ;
; ; ; ; ptr1;
jwerr ser1 cstat;woea; dtor; ; ramwe rcssp ptr1;
call idle1; ; dtor; ; ramwe ptr1;
|*
|* Weitek Single Precision ALU Convert Instructions
|*
routine c.dcvts w01011111000 lnop dcvts
; lam csla; reg; ; rcslsw ptr2;
; lalf fmap csla; reg; ; ;
call wait2; ; ; recclk; rcsmsw ptr1;
; csuxa usp; ; ; ;
; ; ; ; ptr1;
jwerr ser1 cstat;woea; dtor; ; ramwe rcssp ptr1;
call idle1; ; dtor; ; ramwe ptr1;
routine c.scvtd w01011111001 lnop scvtd
; lasf fmap csla; reg; ; rcssp ptr3;
; ; ; recclk; rcsmsw ptr1;
call wait1; ; ; recclk; rcslsw ptr1;
; csuxa umsw; ; ; ;
; csuxa ulsw; ; ; ptr1;
jwerr der1 cstat;woea; dtor; ; ramwe rcsmsw ptr1;
; woea; dtor; ; ramwe rcslsw ptr1;
call idle1; ; dtor; ; ramwe ptr1;
|*
|* Weitek Single Precision ALU Divide Instructions
|*
routine c.sdiv w01010001100 lnop sdiv
routine c.sdiva w01010011100 lnop sdiva
routine c.sdivb w01010101100 lnop sdivb
routine c.sdivab w01010111100 lnop sdivab
; las csla; reg; ; rcssp ptr3; lpreg!13
|# (Note: 13 will cause a delay of 28)
call wait; lbsf fmap csla; reg; recclk; rcssp ptr1;
; csuxa usp; ; ; ;
; ; ; ; ptr1;
jwerr ser1 cstat;woea; dtor; ; ramwe rcssp ptr1;
call idle1; ; dtor; ; ramwe ptr1;
|*
|* Weitek Double Precision ALU Divide Instructions
|*
routine c.ddiv w01010001101 lnop ddiv
routine c.ddiva w01010011101 lnop ddiva
routine c.ddivb w01010101101 lnop ddivb
routine c.ddivab w01010111101 lnop ddivab
; lam csla; reg; ; rcslsw ptr2;
; lal csla; reg; ; rcsmsw ptr3;
; lbm csla; reg; ; rcslsw ptr3;
; lblf fmap csla; reg; recclk; rcsmsw ptr1; lpreg!27
|# (Note: 27 will cause a delay of 56)
call wait; ; ; recclk; rcslsw ptr1;
; csuxa umsw; ; ; ;
; csuxa ulsw; ; ; ptr1;
jwerr der1 cstat;woea; dtor; ; ramwe rcsmsw ptr1;
; woea; dtor; ; ramwe rcslsw ptr1;
call idle1; ; dtor; ; ramwe ptr1;
|*
|* Weitek Single Precision Multiply Instructions
|*
routine c.smul w01010000010 lnop smul
routine c.smwa w01010000110 lnop smwa
routine c.smwb w01010001010 lnop smwb
routine c.smwab w01010001110 lnop smwab
routine c.smma w01010010010 lnop smma
routine c.smmb w01010010110 lnop smmb
routine c.smmab w01010011010 lnop smmab
routine c.smn w01010011110 lnop smn
routine c.smwan w01010100010 lnop smwan
routine c.smwbn w01010100110 lnop smwbn
routine c.smwabn w01010101010 lnop smwabn
routine c.smman w01010101110 lnop smman
routine c.smmbn w01010110010 lnop smmbn
routine c.smmabn w01010110110 lnop smmabn
routine c.smwama w01010111010 lnop smwama
routine c.smwamb w01010111110 lnop smwamb
routine c.smwamab w01011000010 lnop smwamab
routine c.smwbma w01011000110 lnop smwbma
routine c.smwbmb w01011001010 lnop smwbmb
routine c.smwbmab w01011001110 lnop smwbmab
routine c.smwabma w01011010010 lnop smwabma
routine c.smwabmb w01011010110 lnop smwabmb
routine c.smwabmab w01011011010 lnop smwabmab
routine c.smwaman w01011011110 lnop smwaman
routine c.smwambn w01011100010 lnop smwambn
routine c.smwamabn w01011100110 lnop smwamabn
routine c.smwbman w01011101010 lnop smwbman
routine c.smwbmbn w01011101110 lnop smwbmbn
routine c.smwbmabn w01011110010 lnop smwbmabn
routine c.smwabman w01011110110 lnop smwabman
routine c.smwabmbn w01011111010 lnop smwabmbn
routine c.smwabmabn w01011111110 lnop smwabmabn
; las cslm; reg; ; rcssp ptr3;
call wait3; lbsf fmap cslm; reg; recclk; rcssp ptr1;
; csuxm usp; ; ; ;
; ; ; ; ptr1;
jwerr ser1 cstat;woem; dtor; ; ramwe rcssp ptr1;
call idle1; ; dtor; ; ramwe ptr1;
|*
|* Weitek Double Precision Multiply Instructions
|*
routine c.dmul w01010000011 lnop dmul
routine c.dmwa w01010000111 lnop dmwa
routine c.dmwb w01010001011 lnop dmwb
routine c.dmwab w01010001111 lnop dmwab
routine c.dmma w01010010011 lnop dmma
routine c.dmmb w01010010111 lnop dmmb
routine c.dmmab w01010011011 lnop dmmab
routine c.dmn w01010011111 lnop dmn
routine c.dmwan w01010100011 lnop dmwan
routine c.dmwbn w01010100111 lnop dmwbn
routine c.dmwabn w01010101011 lnop dmwabn
routine c.dmman w01010101111 lnop dmman
routine c.dmmbn w01010110011 lnop dmmbn
routine c.dmmabn w01010110111 lnop dmmabn
routine c.dmwama w01010111011 lnop dmwama
routine c.dmwamb w01010111111 lnop dmwamb
routine c.dmwamab w01011000011 lnop dmwamab
routine c.dmwbma w01011000111 lnop dmwbma
routine c.dmwbmb w01011001011 lnop dmwbmb
routine c.dmwbmab w01011001111 lnop dmwbmab
routine c.dmwabma w01011010011 lnop dmwabma
routine c.dmwabmb w01011010111 lnop dmwabmb
routine c.dmwabmab w01011011011 lnop dmwabmab
routine c.dmwaman w01011011111 lnop dmwaman
routine c.dmwambn w01011100011 lnop dmwambn
routine c.dmwamabn w01011100111 lnop dmwamabn
routine c.dmwbman w01011101011 lnop dmwbman
routine c.dmwbmbn w01011101111 lnop dmwbmbn
routine c.dmwbmabn w01011110011 lnop dmwbmabn
routine c.dmwabman w01011110111 lnop dmwabman
routine c.dmwabmbn w01011111011 lnop dmwabmbn
routine c.dmwabmabn w01011111111 lnop dmwabmabn
; lam cslm; reg; ; rcslsw ptr2;
; lal cslm; reg; ; rcslsw ptr3;
; lblf fmap cslm; reg; ; rcsmsw ptr3;
; lbm cslm; reg; recclk; rcsmsw ptr1;
call wait3; ; ; recclk; rcslsw ptr1;
; csuxm umsw; ; ; ;
; csuxm ulsw; ; ; ptr1;
jwerr der1 cstat;woem; dtor; ; ramwe rcsmsw ptr1;
; woem; dtor; ; ramwe rcslsw ptr1;
call idle1; ; dtor; ; ramwe ptr1;
|*
|* Single Precision Copy Register Instruction
|*
routine cs.cpreg w01000100000 lnop ssub
; ; ; recclk; ptr1;
; ; ; recoe; ramwe rcssp ptr1;
call idle1; ; ; recoe; ramwe ptr1;
|*
|* Double Precision Copy Register Instruction
|*
routine cd.cpreg w01000100001 lnop ssub
; ; ; recclk; rcslsw ptr2;
; ; ; ; ptr1;
; ; ; recoe; ramwe rcsmsw ptr1;
; ; ; recoe recclk;ramwe ptr1;
; ; ; recoe; ramwe rcslsw ptr1;
call idle1; ; ; recoe; ramwe ptr1;
|*
|* Reg 1 <- Reg 3 +/- (Reg 2 * Reg 4)
|* Single Precision Instruction
|*
routine cs.r3Ar2Mr4 w01000100010 lnop sadd
routine cs.r3Sr2Mr4 w01000100100 lnop ssub
; las cslm; reg; ; rcssp ptr4;
; lbsf smul cslm; reg; ; rcssp ptr3;
; las csla; reg; recclk; rcssp ptr1;
call wait1; ; reg; ; ;
call wait1; csuxm usp; ; ; ;
jwerr werr cstat;lbsf fmap csla woem; ; ; ;
call wait2; ; ; ; ;
; csuxa usp; ; ; ;
; ; ; ; ptr1;
jwerr ser1 cstat;woea; dtor; ; ramwe rcssp ptr1;
call idle1; ; dtor; ; ramwe ptr1;
|*
|* Reg 1 <- Reg 3 +/- (Reg 2 * Reg 4)
|* Double Precision Instruction
|*
routine cd.r3Ar2Mr4 w01000100011 lnop dadd
routine cd.r3Sr2Mr4 w01000100101 lnop dsub
; lam cslm; reg; ; rcslsw ptr2;
; lal cslm; reg; ; rcslsw ptr4;
; lblf dmul cslm; reg; ; rcsmsw ptr4;
; lbm cslm; reg; ; rcsmsw ptr3;
; lam csla; reg; ; rcslsw ptr3;
; lal csla; reg; recclk; rcsmsw ptr1;
call wait1; ; ; recclk; rcslsw ptr1;
; csuxm umsw; ; ; ;
; csuxm ulsw; ; ; ;
jwerr werr cstat;lbm csla woem; ; ; ;
; lblf fmap csla woem; ; ; ;
; ; ; ; ;
call xdfin.alu; ; ; ; ;
| ; ; ; ; ;
| ; csuxa umsw; ; ; ;
| ; csuxa ulsw; ; ; ptr1;
| jwerr der1 cstat;woea; dtor; ; ramwe rcsmsw ptr1;
| ; woea; dtor; ; ramwe rcslsw ptr1;
| call idle1; ; ; ; ramwe ptr1;
|*
|* Reg 1 <- - Reg 3 + (Reg 2 * Reg 4)
|* Single Precision Instruction
|*
routine cs.Nr3Ar2Mr4 w01000100110 lnop ssub
; las cslm; reg; ; rcssp ptr4;
; lbsf smul cslm; reg; ; rcssp ptr3;
; lbs csla; reg; recclk; rcssp ptr1;
call wait1; ; reg; ; ;
call wait1; csuxm usp; ; ; ;
jwerr werr cstat;lasf fmap csla woem; ; ; ;
call wait2; ; ; ; ;
; csuxa usp; ; ; ;
; ; ; ; ptr1;
jwerr ser1 cstat;woea; dtor; ; ramwe rcssp ptr1;
call idle1; ; dtor; ; ramwe ptr1;
|*
|* Reg 1 <- - Reg 3 + (Reg 2 * Reg 4)
|* Double Precision Instruction
|*
routine cd.Nr3Ar2Mr4 w01000100111 lnop dsub
; lam cslm; reg; ; rcslsw ptr2;
; lal cslm; reg; ; rcslsw ptr4;
; lblf dmul cslm; reg; ; rcsmsw ptr4;
; lbm cslm; reg; ; rcsmsw ptr3;
; lbm csla; reg; ; rcslsw ptr3;
; lbl csla; reg; recclk; rcsmsw ptr1;
call wait1; ; ; recclk; rcslsw ptr1;
; csuxm umsw; ; ; ;
; csuxm ulsw; ; ; ;
jwerr werr cstat;lam csla woem; ; ; ;
; lalf fmap csla woem; ; ; ;
; ; ; ; ;
call xdfin.alu; ; ; ; ;
| ; ; ; ; ;
| ; csuxa umsw; ; ; ;
| ; csuxa ulsw; ; ; ptr1;
| jwerr der1 cstat;woea; dtor; ; ramwe rcsmsw ptr1;
| ; woea; dtor; ; ramwe rcslsw ptr1;
| call idle1; ; ; ; ramwe ptr1;
|*
|* Reg 1 <- Reg 3 * (Reg 2 +/- Reg 4)
|* Single Precision Instruction
|*
routine cs.r3Mr2Ar4 w01000101000 lnop sadd
routine cs.r3Mr2Sr4 w01000101010 lnop ssub
; las csla; reg; ; rcssp ptr4;
; lbsf fmap csla; reg; ; rcssp ptr3;
call wait2; las cslm; reg; recclk; rcssp ptr1;
call wait1; csuxa usp; ; ; ;
jwerr werr cstat;lbsf smul cslm woea; ; ; ;
call wait2; ; ; ; ;
; csuxm usp; ; ; ;
; ; ; ; ptr1;
jwerr ser1 cstat;woem; dtor; ; ramwe rcssp ptr1;
call idle1; ; dtor; ; ramwe ptr1;
|*
|* Reg 1 <- Reg 3 * (Reg 2 +/- Reg 4)
|* Double Precision Instruction
|*
routine cd.r3Mr2Ar4 w01000101001 lnop dadd
routine cd.r3Mr2Sr4 w01000101011 lnop dsub
; lam csla; reg; ; rcslsw ptr2;
; lal csla; reg; ; rcsmsw ptr4;
; lbm csla; reg; ; rcslsw ptr4;
; lblf fmap csla; reg; ; rcsmsw ptr3;
; lam cslm; reg; ; rcslsw ptr3;
; lal cslm; reg; recclk; rcsmsw ptr1;
; ; ; ; ;
; csuxa ulsw; ; recclk; rcslsw ptr1;
; csuxa umsw; ; ; ;
jwerr werr cstat;lblf dmul cslm woea; ; ; ;
; lbm cslm woea; ; ; ;
call xdfin.mul; ; ; ; ;
| ; ; ; ; ;
| ; ; ; ; ;
| ; ; ; ; ;
| ; csuxm umsw; ; ; ;
| ; csuxm ulsw; ; ; ptr1;
| jwerr der1 cstat;woem; dtor; ; ramwe rcsmsw ptr1;
| ; woem; dtor; ; ramwe rcslsw ptr1;
| call idle1; ; ; ; ramwe ptr1;
|*
|* Reg 1 <- Reg 3 * (-Reg 2 + Reg 4)
|* Single Precision Instruction
|*
routine cs.r3MNr2Ar4 w01000101100 lnop ssub
; lbs csla; reg; ; rcssp ptr4;
; lasf fmap csla; reg; ; rcssp ptr3;
call wait2; las cslm; reg; recclk; rcssp ptr1;
call wait1; csuxa usp; ; ; ;
jwerr werr cstat;lbsf smul cslm woea; ; ; ;
call wait2; ; ; ; ;
; csuxm usp; ; ; ;
; ; ; ; ptr1;
jwerr ser1 cstat;woem; dtor; ; ramwe rcssp ptr1;
call idle1; ; dtor; ; ramwe ptr1;
|*
|* Reg 1 <- Reg 3 * (-Reg 2 + Reg 4)
|* Double Precision Instruction
|*
routine cd.r3MNr2Ar4 w01000101101 lnop dsub
; lbm csla; reg; ; rcslsw ptr2;
; lbl csla; reg; ; rcsmsw ptr4;
; lam csla; reg; ; rcslsw ptr4;
; lalf fmap csla; reg; ; rcsmsw ptr3;
; lam cslm; reg; ; rcslsw ptr3;
call wait1; lal cslm; reg; recclk; rcsmsw ptr1;
; csuxa ulsw; ; recclk; rcslsw ptr1;
; csuxa umsw; ; ; ;
jwerr werr cstat;lblf dmul cslm woea; ; ; ;
; lbm cslm woea; ; ; ;
call xdfin.mul; ; ; ; ;
| ; ; ; ; ;
| ; ; ; ; ;
| ; ; ; ; ;
| ; csuxm umsw; ; ; ;
| ; csuxm ulsw; ; ; ptr1;
| jwerr der1 cstat;woem; dtor; ; ramwe rcsmsw ptr1;
| ; woem; dtor; ; ramwe rcslsw ptr1;
| call idle1; ; ; ; ramwe ptr1;
|*
|* Reg 1 <- (Reg 2 * Reg 3) + (Reg 2 + 1 * Reg 3 + 1)
|* Single Precision Instruction
|*
routine cs.X2 w01000101110 lnop smul
; las cslm; reg; ; rcssp ptr3;
; lbsf smul cslm; reg; recclk; rcssp ptr1; ptr2+
; ; ; ; ; ptr3+
; ; ; ; ;
; ; ; ; rcssp ptr2;
; las cslm; reg; ; rcssp ptr3;
; lbsf smul cslm; reg; ; ;
call wait1; csuxm usp; ; ; ;
jwerr werr cstat;las csla woem; ; ; ;
; csuxm usp; ; ; ;
; ; ; ; ;
jwerr werr cstat;lbsf sadd csla woem; ; ; ;
call wait2; ; ; ; ;
; csuxa usp; ; ; ;
; ; ; ; ptr1;
jwerr ser1 cstat;woea; dtor; ; ramwe rcssp ptr1;
call idle1; ; dtor; ; ramwe ptr1;
|*
|* Reg 1 <- (Reg 2 * Reg 3) + (Reg 2 + 1 * Reg 3 + 1)
|* Double Precision Instruction
|*
routine cd.X2 w01000101111 lnop dmul
; lam cslm; reg; ; rcslsw ptr2;
; lal cslm; reg; ; rcslsw ptr3;
; lblf dmul cslm; reg; ; rcsmsw ptr3;
; lbm cslm; reg; recclk; rcsmsw ptr1; ptr2+
; ; ; recclk; rcslsw ptr1; ptr3+
; ; ; ; ;
; ; ; ; ;
; ; ; ; rcsmsw ptr2;
; lam cslm; reg; ; rcslsw ptr2;
; lal cslm; reg; ; rcslsw ptr3;
; lbl cslm; reg; ; rcsmsw ptr3;
; lbmf dmul cslm; reg; ; ;
; csuxm umsw; ; ; ;
; csuxm ulsw; ; ; ;
jwerr werr cstat;lam csla woem; ; ; ;
; lal csla woem; ; ; ;
; ; ; ; ;
; csuxm umsw; ; ; ;
; csuxm ulsw; ; ; ;
jwerr werr cstat;lbm csla woem; ; ; ;
; lblf dadd csla woem; ; ; ;
; ; ; ; ;
call xdfin.alu; ; ; ; ;
| ; ; ; ; ;
| ; csuxa umsw; ; ; ;
| ; csuxa ulsw; ; ; ptr1;
| jwerr der1 cstat;woea; dtor; ; ramwe rcsmsw ptr1;
| ; woea; dtor; ; ramwe rcslsw ptr1;
| call idle1; ; dtor; ; ramwe ptr1;
|*
|* Reg 1 <- (Reg 2 * Reg 3) + (Reg 2 + 1 * Reg 3 + 1) +
|* (Reg 2 + 2 * Reg 3 + 2)
|* Single Precision Instruction
|*
routine cs.X3 w01000110000 lnop smul
; las cslm; reg; ; rcssp ptr3;
; lbsf smul cslm; reg; recclk; rcssp ptr1; ptr2+
call wait1; ; ; ; ; ptr3+
; ; ; ; rcssp ptr2;
; las cslm; reg; ; rcssp ptr3;
; lbsf smul cslm; reg; ; ; ptr2+
; csuxm usp; ; ; ; ptr3+
; ; ; ; ;
jwerr werr cstat;las csla woem; ; ; ;
; ; ; ; ;
; ; ; ; rcssp ptr2;
; las cslm; reg; ; rcssp ptr3;
; lbsf smul cslm; reg; ; ;
; csuxm usp; ; ; ;
; ; ; ; ;
jwerr werr cstat;lbsf sadd csla woem; ; ; ;
; ; ; ; ;
call wait1; csuxm usp; ; ; ;
; lbs csla woem; ; ; ;
call wait1; lasf sadd csla csuxa usp;; ; ;
jwerr werr cstat;woea; ; ; ;
; ; ; ; ;
; csuxa usp; ; ; ;
; ; ; ; ptr1;
jwerr ser1 cstat;woea; dtor; ; ramwe rcssp ptr1;
call idle1; ; dtor; ; ramwe ptr1;
|*
|* Reg 1 <- (Reg 2 * Reg 3) + (Reg 2 + 1 * Reg 3 + 1) +
|* (Reg 2 + 2 * Reg 3 + 2)
|* Double Precision Instruction
|*
routine cd.X3 w01000110001 lnop smul
; lam cslm; reg; ; rcslsw ptr2;
; lal cslm; reg; ; rcslsw ptr3;
; lblf dmul cslm; reg; ; rcsmsw ptr3;
; lbm cslm; reg; recclk; rcsmsw ptr1; ptr2+
; ; reg; recclk; rcslsw ptr1; ptr3+
call wait1; ; reg; ; ;
; ; ; ; rcsmsw ptr2;
; lam cslm; reg; ; rcslsw ptr2;
; lal cslm; reg; ; rcsmsw ptr3;
; lbm cslm; reg; ; rcslsw ptr3;
; lblf dmul cslm; reg; ; ; ptr2+
; csuxm umsw; ; ; ; ptr3+
; csuxm ulsw; ; ; ;
jwerr werr cstat;lam csla woem; ; ; ;
; lal csla woem; ; ; ;
; ; ; ; ;
; ; ; ; rcsmsw ptr2;
; lam cslm; reg; ; rcslsw ptr2;
; lal cslm; reg; ; rcsmsw ptr3;
; lbm cslm; reg; ; rcslsw ptr3;
; lblf dmul cslm; reg; ; ;
; csuxm umsw; ; ; ;
; csuxm ulsw; ; ; ;
jwerr werr cstat;lbm csla woem; ; ; ;
; lblf dadd csla woem; ; ; ;
; ; ; ; ;
; ; ; ; ;
; csuxm umsw; ; ; ;
; csuxm ulsw; ; ; ;
jwerr werr cstat;lam csla woem; ; ; ;
; lal csla woem; ; ; ;
; lbm csla csuxa umsw; ; ; ;
; lblf dadd csla csuxa ulsw;; ; ;
jwerr werr cstat;woea; ; ; ;
call xdfin.alu; ; ; ; ;
| ; ; ; ; ;
| ; csuxa umsw; ; ; ;
| ; csuxa ulsw; ; ; ptr1;
| jwerr der1 cstat;woea; dtor; ; ramwe rcsmsw ptr1;
| ; woea; dtor; ; ramwe rcslsw ptr1;
| call idle1; ; dtor; ; ramwe ptr1;
|*
|* Reg 1 <- (Reg 2 * Reg 3) + (Reg 2 + 1 * Reg 3 + 1) +
|* (Reg 2 + 2 * Reg 3 + 2) + (Reg 2 + 3 * Reg 2 + 3)
|* Single Precision Instruction
|*
routine cs.X4 w01000110010 lnop smul
; las cslm; reg; ; rcssp ptr3;
; lbsf smul cslm; reg; recclk; rcssp ptr1; ptr2+
call wait2; ; reg; ; ; ptr3+
; ; ; ; rcssp ptr2;
; las cslm; reg; ; rcssp ptr3;
; lbsf smul cslm; reg; ; ; ptr2+
; csuxm usp; ; ; ; ptr3+
; ; ; ; ;
jwerr werr cstat;las csla woem; ; ; ;
; ; ; ; ;
; ; ; ; rcssp ptr2;
; las cslm; reg; ; rcssp ptr3;
; lbsf smul cslm; reg; ; ; ptr2+
; csuxm usp; ; ; ; ptr3+
; ; ; ; ;
jwerr werr cstat;lbsf sadd csla woem; ; ; ;
; ; ; ; ;
; ; ; ; rcssp ptr2;
; las cslm; reg; ; rcssp ptr3;
; lbsf smul cslm; reg; ; ;
call wait1; csuxm usp; ; ; ;
jwerr werr cstat;lbs csla woem; ; ; ;
; lasf sadd csla csuxa usp;; ; ;
; ; ; ; ;
; ; ; ; ;
jwerr werr cstat;csuxm usp woea; ; ; ;
; ; ; ; ;
jwerr werr cstat;lbs csla woem; ; ; ;
; lasf sadd csla csuxa usp;; ; ;
; ; ; ; ;
jwerr werr cstat;woea; ; ; ;
; ; ; ; ;
; csuxa usp; ; ; ;
; ; ; ; ptr1;
jwerr ser1 cstat;woea; dtor; ; ramwe rcssp ptr1;
call idle1; ; dtor; ; ramwe ptr1;
|*
|* Reg 1 <- (Reg 2 * Reg 3) + (Reg 2 + 1 * Reg 3 + 1) +
|* (Reg 2 + 2 * Reg 3 + 2) + (Reg 2 + 3 * Reg 2 + 3)
|* Double Precision Instruction
|*
routine cd.X4 w01000110011 lnop dmul
; lam cslm; reg; ; rcslsw ptr2;
; lal cslm; reg; ; rcslsw ptr3;
; lblf dmul cslm; reg; ; rcsmsw ptr3;
; lbm cslm; reg; recclk; rcsmsw ptr1; ptr2+
; ; reg; recclk; rcslsw ptr1; ptr3+
; ; reg; ; ;
; ; ; ; ;
; ; ; ; rcsmsw ptr2;
; lam cslm; reg; ; rcslsw ptr2;
; lal cslm; reg; ; rcsmsw ptr3;
; lbm cslm; reg; ; rcslsw ptr3;
; lblf dmul cslm; reg; ; ; ptr2+
; csuxm umsw; ; ; ; ptr3+
; csuxm ulsw; ; ; ;
jwerr werr cstat;lam csla woem; ; ; ;
; lal csla woem; ; ; ;
; ; ; ; ;
; ; ; ; rcsmsw ptr2;
; lam cslm; reg; ; rcslsw ptr2;
; lal cslm; reg; ; rcsmsw ptr3;
; lbm cslm; reg; ; rcslsw ptr3;
; lblf dmul cslm; reg; ; ; ptr2+
; csuxm umsw; ; ; ; ptr3+
; csuxm ulsw; ; ; ;
jwerr werr cstat;lbm csla woem; ; ; ;
; lblf dadd csla woem; ; ; ;
; ; ; ; ;
; ; ; ; rcsmsw ptr2;
; lam cslm; reg; ; rcslsw ptr2;
; lal cslm; reg; ; rcsmsw ptr3;
; lbm cslm; reg; ; rcslsw ptr3;
; lblf dmul cslm; reg; ; ;
; csuxm umsw; ; ; ; ptr2+
; csuxm ulsw; ; ; ; ptr3+
jwerr werr cstat;lam csla woem; ; ; ;
; lal csla woem; ; ; ;
; lbm csla csuxa umsw; ; ; ;
; lblf dadd csla csuxa ulsw;; ; ;
jwerr werr cstat;woea; ; ; ;
; csuxm umsw; ; ; ;
; csuxm ulsw; ; ; ;
jwerr werr cstat;lam csla woem; ; ; ;
; lal csla woem; ; ; ;
; ; ; ; ;
; lbm csla csuxa umsw; ; ; ;
; lblf dadd csla csuxa ulsw;; ; ;
jwerr werr cstat;woea; ; ; ;
call xdfin.alu; ; ; ; ;
| ; ; ; ; ;
| ; csuxa umsw; ; ; ;
| ; csuxa ulsw; ; ; ptr1;
| jwerr der1 cstat;woea; dtor; ; ramwe rcsmsw ptr1;
| ; woea; dtor; ; ramwe rcslsw ptr1;
| call idle1; ; dtor; ; ramwe ptr1;
|*
|* 2 x 2, 3 x 3, 4 x 4 Matrix Move
|* Single Precision
|*
routine cs.MV2 w01001100010 lnop ssub
; ; ; ; ; lpreg!4
call msmovelp; ; ; recclk; rcssp ptr2;
routine cs.MV3 w01001100100 lnop ssub
; ; ; ; ; lpreg!9
call msmovelp; ; ; recclk; rcssp ptr2;
routine cs.MV4 w01001100110 lnop ssub
; ; ; ; ; lpreg!16
call msmovelp; ; ; recclk; rcssp ptr2;
msmovelp:
; ; ; recclk; ptr1; ptr2+
; ; ; recoe; ramwe rcssp ptr1; lpreg-
jloop msmovelp; ; ; recoe; ramwe ptr1; ptr1+
; ; ; recclk; rcssp ptr2;
call idle1; ; ; ; ;
|*
|* 2 x 2, 3 x 3, 4 x 4 Matrix Move
|* Double Precision
|*
routine cd.MV2 w01001100011 lnop ssub
; ; ; ; ; lpreg!4
call mdmovelp; ; ; recclk; rcsmsw ptr2;
routine cd.MV3 w01001100101 lnop ssub
; ; ; ; ; lpreg!9
call mdmovelp; ; ; recclk; rcsmsw ptr2;
routine cd.MV4 w01001100111 lnop ssub
; ; ; ; ; lpreg!16
call mdmovelp; ; ; recclk; rcsmsw ptr2;
|* move matrix at ptr2 to ptr1
mdmovelp:
; ; ; recclk; rcslsw ptr2;
; ; ; ; ptr1; ptr2+
; ; ; recoe; ramwe rcsmsw ptr1; lpreg-
; ; ; recoe recclk;ramwe ptr1;
; ; ; recoe; ramwe rcslsw ptr1;
jloop mdmovelp; ; ; recoe; ramwe ptr1;
; ; ; recclk; rcsmsw ptr2; ptr1+
call idle1; ; ; ; ;
|*
|* 2 x 2 Matrix Transpose
|* Single Precision
|*
routine cs.TR2 w01001101000 lnop ssub
; ; ; ; ; ptr5!c_dSCRATCH_0
; ; ; ; ; lpreg!2
call tsmovelp; ; ; ; ; ptr1+
; ; ; ; ; ptr5!c_dSCRATCH_0
call tsmove; ; ; ; ;
; ; ; ; ; ptr5!c_dSCRATCH_1
call tsmove; ; ; ; ;
call idle1; ; ; ; ;
|*
|* 3 x 3 Matrix Transpose
|* Single Precision
|*
routine cs.TR2 w01001101010 lnop ssub
; ; ; ; ; ptr5!c_dSCRATCH_0
; ; ; ; ; lpreg!7
call tsmovelp; ; ; ; ; ptr1+
; ; ; ; ; ptr5!c_dSCRATCH_4
call tsmove; ; ; ; ;
; ; ; ; ; ptr5!c_dSCRATCH_1
call tsmove; ; ; ; ;
; ; ; ; ; ptr5!c_dSCRATCH_6
call tsmove; ; ; ; ;
; ; ; ; ; ptr5!c_dSCRATCH_3
call tsmove; ; ; ; ;
; ; ; ; ; ptr5!c_dSCRATCH_0
call tsmove; ; ; ; ;
; ; ; ; ; ptr5!c_dSCRATCH_5
call tsmove; ; ; ; ;
; ; ; ; ; ptr5!c_dSCRATCH_2
call tsmove; ; ; ; ;
call idle1; ; ; ; ;
|*
|* 4 x 4 Matrix Transpose
|* Single Precision
|*
routine cs.TR2 w01001101100 lnop ssub
; ; ; ; ; ptr5!c_dSCRATCH_0
; ; ; ; ; lpreg!14
call tsmovelp; ; ; ; ; ptr1+
; ; ; ; ; ptr5!c_dSCRATCH_10
call tsmove; ; ; ; ;
; ; ; ; ; ptr5!c_dSCRATCH_6
call tsmove; ; ; ; ;
; ; ; ; ; ptr5!c_dSCRATCH_2
call tsmove; ; ; ; ;
; ; ; ; ; ptr5!c_dSCRATCH_13
call tsmove; ; ; ; ;
; ; ; ; ; ptr5!c_dSCRATCH_9
call tsmove; ; ; ; ;
; ; ; ; ; ptr5!c_dSCRATCH_5
call tsmove; ; ; ; ;
; ; ; ; ; ptr5!c_dSCRATCH_1
call tsmove; ; ; ; ;
; ; ; ; ; ptr5!c_dSCRATCH_12
call tsmove; ; ; ; ;
; ; ; ; ; ptr5!c_dSCRATCH_8
call tsmove; ; ; ; ;
; ; ; ; ; ptr5!c_dSCRATCH_4
call tsmove; ; ; ; ;
; ; ; ; ; ptr5!c_dSCRATCH_0
call tsmove; ; ; ; ;
; ; ; ; ; ptr5!c_dSCRATCH_11
call tsmove; ; ; ; ;
; ; ; ; ; ptr5!c_dSCRATCH_7
call tsmove; ; ; ; ;
; ; ; ; ; ptr5!c_dSCRATCH_3
call tsmove; ; ; ; ;
call idle1; ; ; ; ;
|* move matrix at ptr1 to ptr5
|* ptr5 is incremented before the loop
|* ptr1 is incremented after the loop
tsmovelp:
; ; ; ; ; ptr5-
tsmovelp2:
; ; ; recclk; rcssp ptr1; ptr5+
; ; ; recclk; ptr5; lpreg-
jloop tsmovelp2;; ; recoe; ramwe rcssp ptr5; ptr1+
rtn; ; ; recoe; ramwe ptr5;
|* move data at ptr5 to ptr1
|* ptr1 is decremented before the loop
|* ptr5 is decremented after the loop
tsmove:
; ; ; recclk; rcssp ptr5; ptr1-
; ; ; recclk; ptr1;
; ; ; recoe; ramwe rcssp ptr1; ptr5-
rtn; ; ; recoe; ramwe ptr1;
|*
|* 2 x 2 Matrix Transpose
|* Double Precision
|*
routine cd.TR2 w01001101001 lnop ssub
; ; ; ; ; ptr5!c_dSCRATCH_0
; ; ; ; ; lpreg!2
call tdmovelp; ; ; ; ; ptr1+
; ; ; ; ; ptr5!c_dSCRATCH_0
call tdmove; ; ; ; ;
; ; ; ; ; ptr5!c_dSCRATCH_1
call tdmove; ; ; ; ;
call idle1; ; ; ; ;
|*
|* 3 x 3 Matrix Transpose
|* Double Precision
|*
routine cd.TR2 w01001101011 lnop ssub
; ; ; ; ; ptr5!c_dSCRATCH_0
; ; ; ; ; lpreg!7
call tdmovelp; ; ; ; ; ptr1+
; ; ; ; ; ptr5!c_dSCRATCH_4
call tdmove; ; ; ; ;
; ; ; ; ; ptr5!c_dSCRATCH_1
call tdmove; ; ; ; ;
; ; ; ; ; ptr5!c_dSCRATCH_6
call tdmove; ; ; ; ;
; ; ; ; ; ptr5!c_dSCRATCH_3
call tdmove; ; ; ; ;
; ; ; ; ; ptr5!c_dSCRATCH_0
call tdmove; ; ; ; ;
; ; ; ; ; ptr5!c_dSCRATCH_5
call tdmove; ; ; ; ;
; ; ; ; ; ptr5!c_dSCRATCH_2
call tdmove; ; ; ; ;
call idle1; ; ; ; ;
|*
|* 4 x 4 Matrix Transpose
|* Double Precision
|*
routine cd.TR2 w01001101101 lnop ssub
; ; ; ; ; ptr5!c_dSCRATCH_0
; ; ; ; ; lpreg!14
call tdmovelp; ; ; ; ; ptr1+
; ; ; ; ; ptr5!c_dSCRATCH_10
call tdmove; ; ; ; ;
; ; ; ; ; ptr5!c_dSCRATCH_6
call tdmove; ; ; ; ;
; ; ; ; ; ptr5!c_dSCRATCH_2
call tdmove; ; ; ; ;
; ; ; ; ; ptr5!c_dSCRATCH_13
call tdmove; ; ; ; ;
; ; ; ; ; ptr5!c_dSCRATCH_9
call tdmove; ; ; ; ;
; ; ; ; ; ptr5!c_dSCRATCH_5
call tdmove; ; ; ; ;
; ; ; ; ; ptr5!c_dSCRATCH_1
call tdmove; ; ; ; ;
; ; ; ; ; ptr5!c_dSCRATCH_12
call tdmove; ; ; ; ;
; ; ; ; ; ptr5!c_dSCRATCH_8
call tdmove; ; ; ; ;
; ; ; ; ; ptr5!c_dSCRATCH_4
call tdmove; ; ; ; ;
; ; ; ; ; ptr5!c_dSCRATCH_0
call tdmove; ; ; ; ;
; ; ; ; ; ptr5!c_dSCRATCH_11
call tdmove; ; ; ; ;
; ; ; ; ; ptr5!c_dSCRATCH_7
call tdmove; ; ; ; ;
; ; ; ; ; ptr5!c_dSCRATCH_3
call tdmove; ; ; ; ;
call idle1; ; ; ; ;
|* move matrix at ptr1 to ptr5
tdmovelp:
; ; ; ; ; ptr5-
tdmovelp2:
; ; ; recclk; rcsmsw ptr1; ptr5+
; ; ; recclk; rcslsw ptr1;
; ; ; ; ptr5; lpreg-
; ; ; recoe; ramwe rcsmsw ptr5; ptr1+
; ; ; recoe recclk;ramwe ptr5;
jloop tdmovelp2;; ; recoe; ramwe rcslsw ptr5;
rtn; ; ; recoe; ramwe ptr5;
|* move data at ptr5 to ptr1
tdmove:
; ; ; recclk; rcsmsw ptr5; ptr1-
; ; ; recclk; rcslsw ptr5;
; ; ; ; ptr1;
; ; ; recoe; ramwe rcsmsw ptr1;
; ; ; recoe recclk;ramwe ptr5;
; ; ; recoe; ramwe rcslsw ptr1;
rtn; ; ; recoe; ramwe ptr1; ptr5-
|*
|* Update Shadow Registers
|*
routine c.update w01001110001 lnop ssub
; ; ; ; ; lpreg!8
usr.loop:
; ; ; recclk; rcsmsw ptr1;
; ; ; recclk; rcslsw ptr1;
; ; ; ; ptr1;
; ; ; recoe; ramwe rcsmsw ptr1; lpreg-
; ; ; recoe recclk;ramwe ptr1;
jloop usr.loop; ; ; recoe; ramwe rcslsw ptr1;
; ; ; recoe; ramwe ptr1; ptr1+
call idle1; ; ; ; ;
|*
|* Load Weitek Mode Control Bits 3-0
|*
routine c.ld3.0 w0100011010x las ssub
| *save the value (checked in transcendentals)
; ; ; ; ; ptr5!szero
; ; ; ; rcssp ptr5;
call wait3; lbsf scmp csla; reg; ; ;
; csuxa usp; ; ; ;
; ; ; ; ;
jlt werr; woea; ; ; ;
; ; ; ; ; ptr5!c_smaxmode
; ; ; ; rcssp ptr5;
call wait3; lbsf scmp csla; reg; ; ;
; csuxa usp; ; ; ;
; ; ; ; ;
jgt werr; woea; ; ; ;
; ; ; ; ; ptr5!c_dmode
; ; ; ; ptr5;
; ; opdsp dtor; ; ramwe rcssp ptr5;
; ; opdsp dtor; ; ramwe ptr5;
call idle1; lmodeusr cslmac; ; ; ; mreg!
|*
|* Load LED Register With 0x1555 And Hang
|*
|routine c.led155 w01001011100 lnop ssub
| ; ; ; ; ; ptr5!0x1555
| call hang; ; ; ; ;
|*
|* Load LED Register With 0x2AAA And Hang
|*
|routine c.led2AA w01001011101 lnop ssub
| ; ; ; ; ; ptr5!0x2AAA
| call hang; ; ; ; ;
|*
|* Load LED Register With 0x777
|* Set the Register Ram Select to X
|* Set the Wdata Select to X & 3
|* And Hang
|*
routine l.diag0 w01110010000 lnop ssub
call .; ; ; ; ;
routine c.regsel0 w01001000001 lnop ssub
; ; ; ; ;
; ; ; ; ; ptr5!0x777
hng; ; reg; ; ldptr;
call idle1; ; ; ; ;
routine l.diag1 w01110010001 lnop ssub
; ; ; ; ;
; ; ; ; ;
jclr clp idl2; ; ; ; ;
routine c.regsel1 w01001000011 lnop ssub
; ; ; ; ;
; ; ; ; ; ptr5!0x777
hng; ; reg; ; ptr1;
call idle1; ; ; ; ;
routine l.diag2 w01110010010 lnop ssub
; ; ; ; ;
; ; ; ; ;
jclr clp idl2; ; ; ; ;
routine c.regsel2 w01001000101 lnop ssub
; ; ; ; ;
; ; ; ; ; ptr5!0x777
hng; ; opdmsw; ; ptr2;
call idle1; ; ; ; ;
routine l.diag3 w01110010011 lnop ssub
; ; ; ; ;
; ; ; ; ;
jclr clp idl2; ; ; ; ;
routine c.regsel3 w01001000111 lnop ssub
; ; ; ; ;
; ; ; ; ; ptr5!0x777
hng; ; opdlsw; ; ptr3;
call idle1; ; ; ; ;
|* double precision unimplemented instruction
routine l.diag4 w01110010100 lnop ssub
call invalid2; ; ; ; ;
routine c.regsel4 w01001001001 lnop ssub
; ; ; ; ;
; ; ; ; ; ptr5!0x777
hng; ; reg; ; ptr4;
call idle1; ; ; ; ;
routine c.regsel5 w01001001011 lnop ssub
; ; ; ; ;
; ; ; ; ; ptr5!0x777
hng; ; reg; ; ptr5;
call idle1; ; ; ; ;
routine c.regsel6 w01001001101 lnop ssub
; ; ; ; ;
; ; ; ; ; ptr5!0x777
hng; ; opdmsw; ; imm2;
call idle1; ; ; ; ;
routine c.regsel7 w01001001111 lnop ssub
; ; ; ; ;
; ; ; ; ; ptr5!0x777
hng; ; opdlsw; ; imm3;
call idle1; ; ; ; ;
|*
|* Read D21 and D22 into read latch
|*
routine l.diag8 w01110011000 lnop ssub
; ; opdmsw dtor; ; ;
; ; opdmsw dtor; recclk; ;
cdata; ; ; ; ;
jclr clp idl2; ; ; ; ;
; ; opdlsw dtor; ; ;
; ; opdlsw dtor; recclk; ;
cdata; ; ; ; ;
call hang; ; ; ; ;
|*
|* Initialize Instruction --
|* load bits 4 through 11 on Weitek chips.
|*
routine c.init w01001011110 lnop ssub
; lmode7.4 0x6 cslmac; ; ; ;
; lmodef.c 0x0 cslmac; ; ; ;
; lmodeb.8 0x4 cslm; ; ; ;
call idle1; lmodeb.8 0x0 csla; ; ; ;
|*
|* Restore Wstatus Register
|* This instruction will: 1) set the valid bit, 2) reset the unimplimented
|* instruction bit, and 3) set all other bits according to bits 11:8 in
|* the operand.
|*
routine c.rest.wstat w01001010110 lnop ssub
; ; opdmsw dtor; recclk; ;
; ; dtor; ; ;
call idle1 cstat restore;; ; ; ;
|*
|* Test Current User's Registers
|* This test is designed to test the data registers for the current
|* context. The intent is to optimize speed while catching:
|* All hard data line errors.
|* All hard address line errors.
|* Any two registers in error and most other ram errors.
|*
|* To catch ram bits in error two test values are used which are
|* complimentary. The registers are filled with the two values
|* such that the hamming distance between two addresses of
|* registers with the same data is 2: this should check all
|* address problems. The registers are checked twice using
|* complementary data and performing the second check in reverse sequence
|* for sequence dependent errors. The check is performed in different
|* ways on the different checks to catch more data errors (so
|* that we will catch errors in adjoining addresses even though the
|* address hamming distance is greater than one). The check is
|* performed with a cumulative addition for speed's sake.
|*
|* The data values are:
|* A: 0 100000...00 0000000....00000
|* B: 1 011111...11 1111111....11111
|* They are stored in the following order:
|* A, B, B, A, B, A, A, B, B, A, A, B, A, B, B, A
|*
|* The checking summations are:
|* 0 + 1 + 2 + 3 - 6 - 7 - 8 - 9 + A + B + 4 + 5 - C - D - E - F
|* and
|* F + E - D - C + 5 + 4 - B - A + 9 + 8 - 7 - 6 - 3 - 2 + 1 + 0
|* (Notice that you can add A, B, B, A, but if you add
|* B, A, A, B, an inexact will result)
|*
|*
|* Test Current User's Registers - DESTRUCTIVE
|*
|* Enter with:
|* ptr1 pointing at element 0 (i.e. reg_1 = 0)
|*
routine c.tstreg.d w01001110010 lnop ssub
; ; ; ; ; lpreg!32
; ; ; ; ; ptr5!c_dtest
call rdmovelp51;; ; recclk; rcsmsw ptr5;
call ctest; ; ; ; ;
call idle1; ; ; ; ;
ctest:
; ; ; ; rcsmsw ptr1;
; lam csla; reg; ; rcslsw ptr1; ptr1+
; lal csla; reg; ; rcsmsw ptr1;
; lbm csla; reg; ; rcslsw ptr1; ptr1+
; lblf dadd csla; reg; ; ; lpreg!4
; ; ; ; ;
ctest.1:
| *error if we get inexact, NaN, etc.
; ; ; ; ;
; ; ; ; rcsmsw ptr1;
; lbm csla; reg; ; rcslsw ptr1; lpreg-
; lbl csla; reg; ; ;
; lam csla csuxa umsw; ; ; ; ptr1+
jloop ctest.1; lalf dsub csla csuxa ulsw;; ; ;
jwerr werr cstat;woea; ; ; ;
; ; ; ; ; lpreg!4
ctest.2:
| *error if we get inexact, NaN, etc.
; ; ; ; ;
; ; ; ; rcsmsw ptr1;
; lbm csla; reg; ; rcslsw ptr1; lpreg-
; lbl csla; reg; ; ;
; lam csla csuxa umsw; ; ; ; ptr1+
jloop ctest.2; lalf dadd csla csuxa ulsw;; ; ;
jwerr werr cstat;woea; ; ; ;
; ; ; ; ; lpreg!4
ctest.3:
| *error if we get inexact, NaN, etc.
; ; ; ; ;
; ; ; ; rcsmsw ptr1;
; lbm csla; reg; ; rcslsw ptr1; lpreg-
; lbl csla; reg; ; ;
; lam csla csuxa umsw; ; ; ; ptr1+
jloop ctest.3; lalf dsub csla csuxa ulsw;; ; ;
jwerr werr cstat;woea; ; ; ;
; ; ; ; ; lpreg!4
ctest.4:
| *error if we get inexact, NaN, etc.
; ; ; ; ;
; ; ; ; rcsmsw ptr1;
; lbm csla; reg; ; rcslsw ptr1; lpreg-
; lbl csla; reg; ; ;
; lam csla csuxa umsw; ; ; ; ptr1+
jloop ctest.4; lalf dadd csla csuxa ulsw;; ; ;
jwerr werr cstat;woea; ; ; ;
; ; ; ; ; lpreg!4
ctest.5:
| *error if we get inexact, NaN, etc.
; ; ; ; ;
; ; ; ; rcsmsw ptr1;
; lbm csla; reg; ; rcslsw ptr1; lpreg-
; lbl csla; reg; ; ;
; lam csla csuxa umsw; ; ; ; ptr1+
jloop ctest.5; lalf dsub csla csuxa ulsw;; ; ;
jwerr werr cstat;woea; ; ; ;
; ; ; ; ; lpreg!4
ctest.6:
| *error if we get inexact, NaN, etc.
; ; ; ; ;
; ; ; ; rcsmsw ptr1;
; lbm csla; reg; ; rcslsw ptr1; lpreg-
; lbl csla; reg; ; ;
; lam csla csuxa umsw; ; ; ; ptr1+
jloop ctest.6; lalf dadd csla csuxa ulsw;; ; ;
jwerr werr cstat;woea; ; ; ;
; ; ; ; ; lpreg!6
ctest.7:
; ; ; ; ;
; ; ; ; rcsmsw ptr1;
; lbm csla; reg; ; rcslsw ptr1; lpreg-
; lbl csla; reg; ; ;
; lam csla csuxa umsw; ; ; ; ptr1+
jloop ctest.7; lalf dsub csla csuxa ulsw;; ; ;
| * NO error if we get inexact
; ; ; ; ; ptr5!c_dtestsolution1
; ; ; ; ; ptr1-
; ; ; ; rcsmsw ptr5;
; lbm csla; reg; ; rcslsw ptr5;
; lbl csla; reg; ; ;
; lam csla csuxa umsw; ; ; ;
; lalf dcmp csla csuxa ulsw;; ; ;
jwerr werr cstat;woea; ; ; ;
; ; ; ; ;
; ; ; ; ;
; csuxa umsw; ; ; ;
; ; ; ; ;
jne werr cstat; woea; ; ; ;
; ; ; ; ;
; ; ; ; rcsmsw ptr1;
; lam csla; reg; ; rcslsw ptr1; ptr1-
; lal csla; reg; ; rcsmsw ptr1;
; lbm csla; reg; ; rcslsw ptr1; ptr1-
; lblf dadd csla; reg; ; ; lpreg!4
; ; ; ; ;
ctest.8:
; ; ; ; ;
; ; ; ; rcsmsw ptr1;
; lbm csla; reg; ; rcslsw ptr1; lpreg-
; lbl csla; reg; ; ;
; lam csla csuxa umsw; ; ; ; ptr1-
jloop ctest.8; lalf dsub csla csuxa ulsw;; ; ;
jwerr werr cstat;woea; ; ; ;
; ; ; ; ; lpreg!4
ctest.9:
; ; ; ; ;
; ; ; ; rcsmsw ptr1;
; lbm csla; reg; ; rcslsw ptr1; lpreg-
; lbl csla; reg; ; ;
; lam csla csuxa umsw; ; ; ; ptr1-
jloop ctest.9; lalf dadd csla csuxa ulsw;; ; ;
jwerr werr cstat;woea; ; ; ;
; ; ; ; ; lpreg!4
ctest.A:
; ; ; ; ;
; ; ; ; rcsmsw ptr1;
; lbm csla; reg; ; rcslsw ptr1; lpreg-
; lbl csla; reg; ; ;
; lam csla csuxa umsw; ; ; ; ptr1-
jloop ctest.A; lalf dsub csla csuxa ulsw;; ; ;
jwerr werr cstat;woea; ; ; ;
; ; ; ; ; lpreg!4
ctest.B:
; ; ; ; ;
; ; ; ; rcsmsw ptr1;
; lbm csla; reg; ; rcslsw ptr1; lpreg-
; lbl csla; reg; ; ;
; lam csla csuxa umsw; ; ; ; ptr1-
jloop ctest.B; lalf dadd csla csuxa ulsw;; ; ;
jwerr werr cstat;woea; ; ; ;
; ; ; ; ; lpreg!4
ctest.C:
; ; ; ; ;
; ; ; ; rcsmsw ptr1;
; lbm csla; reg; ; rcslsw ptr1; lpreg-
; lbl csla; reg; ; ;
; lam csla csuxa umsw; ; ; ; ptr1-
jloop ctest.C; lalf dsub csla csuxa ulsw;; ; ;
jwerr werr cstat;woea; ; ; ;
; ; ; ; ; lpreg!4
ctest.D:
; ; ; ; ;
; ; ; ; rcsmsw ptr1;
; lbm csla; reg; ; rcslsw ptr1; lpreg-
; lbl csla; reg; ; ;
; lam csla csuxa umsw; ; ; ; ptr1-
jloop ctest.D; lalf dadd csla csuxa ulsw;; ; ;
jwerr werr cstat;woea; ; ; ;
; ; ; ; ; lpreg!6
ctest.E:
; ; ; ; ;
; ; ; ; rcsmsw ptr1;
; lbm csla; reg; ; rcslsw ptr1; lpreg-
; lbl csla; reg; ; ; ptr5!c_dtestsolution2
; lam csla csuxa umsw; ; ; ; ptr1-
jloop ctest.E; lalf dsub csla csuxa ulsw;; ; ;
jwerr werr cstat;woea; ; ; ;
; ; ; ; ; ptr1+
; ; ; ; rcsmsw ptr5;
; lbm csla; reg; ; rcslsw ptr5;
; lbl csla; reg; ; ;
; lam csla csuxa umsw; ; ; ;
; lalf dcmp csla csuxa ulsw;; ; ;
jwerr werr cstat;woea; ; ; ;
; ; ; ; ;
; ; ; ; ;
; csuxa umsw; ; ; ;
; ; ; ; ;
jne werr cstat; woea; ; ; ;
rtn; ; ; ; ;
|*
|* Test Current User's Registers - NON-DESTRUCTIVE
|*
routine c.tstreg.n w01001110011 lnop ssub
; ; ; ; ; lpreg!32
; ; ; ; ; ptr5!c_dSCRATCH_0
call rdmovelp15;; ; recclk; rcsmsw ptr1;
; ; ; ; ; lpreg!32
; ; ; ; ; ptr5!c_dtest
call rdmovelp51;; ; recclk; rcsmsw ptr5;
call ctest; ; ; ; ;
; ; ; ; ; lpreg!32
; ; ; ; ; ptr5!c_dSCRATCH_0
call rdmovelp51;; ; recclk; rcsmsw ptr5;
call idle1; ; ; ; ;
|* move registers at ptr5 to ptr1
rdmovelp51:
; ; ; recclk; rcslsw ptr5;
; ; ; ; ptr1; ptr5+
; ; ; recoe; ramwe rcsmsw ptr1; lpreg-
; ; ; recoe recclk;ramwe ptr1;
; ; ; recoe; ramwe rcslsw ptr1;
jloop rdmovelp51;; ; recoe; ramwe ptr1;
rtn; ; ; recclk; rcsmsw ptr5; ptr1+
|* move registers at ptr1 to ptr5
rdmovelp15:
; ; ; recclk; rcslsw ptr1;
; ; ; ; ptr5; ptr1+
; ; ; recoe; ramwe rcsmsw ptr5; lpreg-
; ; ; recoe recclk;ramwe ptr5;
; ; ; recoe; ramwe rcslsw ptr5;
jloop rdmovelp15;; ; recoe; ramwe ptr5;
rtn; ; ; recclk; rcsmsw ptr1; ptr5+
|*
|* Test the loop counter
|*
routine c.tstlpreg w01001011010 lnop ssub
; ; ; ; ; lpreg!0
test.pt.a:
hng; ; ; ; ;
; ; ; ; ; lpreg-
jloop test.pt.a;; ; ; ;
jloop0 test.pt.b;; ; ; ;
; ; ; ; ;
hng; ; ; ; ;
test.pt.b:
hng; ; ; ; ;
call idle1; ; ; ; ;