# SPARQL UPDATE query emulating a PDP-1. repeat query until pdp1:state > 2 # see http://www.brunni.de/pdp1/ PREFIX xsd: PREFIX pdp1: DELETE { ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pdp1 pdp1:programmcounter ?pc. ?pdp1 pdp1:overflowbit ?ov. ?pdp1 pdp1:flags ?flags. # state: # 0 = fetch instruction # 1 = execute command # 2 = fetch indirect address # 3 = illegal instruction # 4 = halted ?pdp1 pdp1:state ?state. ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:currentcommand ?cmd. # optional modified word in memory ?memoryword pdp1:value ?worddel. # optional modified number of valid CRT points ?pdp1 pdp1:numpoints ?numpoints. } INSERT { ?pdp1 pdp1:accumulator ?acnew. ?pdp1 pdp1:ioregister ?ionew. ?pdp1 pdp1:programmcounter ?pcnew. ?pdp1 pdp1:overflowbit ?ovnew. ?pdp1 pdp1:flags ?flagsnew. ?pdp1 pdp1:state ?statenew. ?pdp1 pdp1:currentdata ?mdnew. ?pdp1 pdp1:currentcommand ?cmdnew. # optional modified word in memory ?memoryword pdp1:value ?wordnew. # optional inserted CRT point ?pdp1 pdp1:numpoints ?numpointsnew. _:crtpoint pdp1:pointnumber ?numpointsnew. _:crtpoint pdp1:xcoord ?xcoordnew. _:crtpoint pdp1:ycoord ?ycoordnew. } WHERE { ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pdp1 pdp1:programmcounter ?pc. ?pdp1 pdp1:overflowbit ?ov. ?pdp1 pdp1:flags ?flags. ?pdp1 pdp1:sense ?sense. ?pdp1 pdp1:state ?state. ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:currentcommand ?cmd. # stop after illegal instruction, hlt FILTER(?state IN (0,1,2)) # Spacewar! specific side effect: # if the pc is 1065 and the state is 0 a new frame starts on the CRT OPTIONAL { select ?numpoints (?numpoints+1 as ?numpointsnew) (-1 as ?xcoordnew) (-1 as ?ycoordnew) WHERE { ?pdp1 pdp1:state ?state. ?pdp1 pdp1:programmcounter ?pc. ?pdp1 pdp1:numpoints ?numpoints. FILTER(?state=0 && ?pc=1065) } } # state 0: fetch instruction OPTIONAL { select (?ac as ?acnew) (?io as ?ionew) (?pc+1 as ?pcnew) (?ov as ?ovnew) (?flags as ?flagsnew) (1 as ?statenew) ?mdnew (xsd:integer(floor(?mdnew/8192)) as ?cmdnew) WHERE { ?pdp1 pdp1:state ?state. FILTER(?state=0) ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pdp1 pdp1:programmcounter ?pc. ?pdp1 pdp1:overflowbit ?ov. ?pdp1 pdp1:flags ?flags. ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:currentcommand ?cmd. ?mem pdp1:address ?pc. ?mem pdp1:value ?mdnew. } } # state 2: fetch indirect address OPTIONAL { select (?ac as ?acnew) (?io as ?ionew) (?pc as ?pcnew) (?ov as ?ovnew) (?flags as ?flagsnew) # stay in state 2 if indirect bit is set, otherwise state 1 (if(floor(?mdnew/4096)-floor(?mdnew/8192)*2,2,1) as ?statenew) ?mdnew (?cmd as ?cmdnew) WHERE { ?pdp1 pdp1:state ?state. FILTER(?state=2) ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pdp1 pdp1:programmcounter ?pc. ?pdp1 pdp1:overflowbit ?ov. ?pdp1 pdp1:flags ?flags. ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:currentcommand ?cmd. ?mem pdp1:address ?adr. ?mem pdp1:value ?mdnew. { SELECT (xsd:integer(?md-floor(?md/4096)*4096) as ?adr) WHERE { ?pdp1 pdp1:currentdata ?md. } } } } # state 1: execute command # Abandon all hope, ye who enter here OPTIONAL { select ?acnew ?ionew ?pcnew ?ovnew ?flagsnew ?statenew ?mdnew ?cmdnew ?memoryword ?worddel ?wordnew ?xcoordnew ?ycoordnew ?numpoints ?numpointsnew WHERE { ?pdp1 pdp1:state ?state. FILTER(?state=1) # handle indirect adressing OPTIONAL { select (?ac as ?acnew) (?io as ?ionew) (?pc as ?pcnew) (?ov as ?ovnew) (?flags as ?flagsnew) # state 2 if indirect bit is set, otherwise state 1 (if(floor(?mdnew/4096)-floor(?mdnew/8192)*2,2,1) as ?statenew) ?mdnew (?cmd as ?cmdnew) WHERE { ?pdp1 pdp1:currentdata ?md. # indirect bit is set FILTER(floor(?md/4096)-floor(?md/8192)*2) ?pdp1 pdp1:currentcommand ?cmd. # indirect adressing only for certain commands FILTER(?cmd IN (1,2,3,4,8,9,10,11,13,14,16,17,18,19,20,21,22,23,24,25)) ?pdp1 pdp1:state ?state. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pdp1 pdp1:programmcounter ?pc. ?pdp1 pdp1:overflowbit ?ov. ?pdp1 pdp1:flags ?flags. ?mem pdp1:address ?adr. ?mem pdp1:value ?mdnew. { SELECT (xsd:integer(?md-floor(?md/4096)*4096) as ?adr) WHERE { ?pdp1 pdp1:currentdata ?md. } } } } # indirect adressing handled OPTIONAL { select ?acnew ?ionew ?pcnew ?ovnew ?flagsnew ?statenew ?mdnew ?cmdnew ?memoryword ?worddel ?wordnew ?xcoordnew ?ycoordnew ?numpoints ?numpointsnew WHERE { ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:currentcommand ?cmd. # indirect bit not set or command without indirect addressing FILTER(!(floor(?md/4096)-floor(?md/8192)*2) || ?cmd NOT IN (1,2,3,4,8,9,10,11,13,14,16,17,18,19,20,21,22,23,24,25)) # LAC OPTIONAL { select (?word as ?acnew) (?io as ?ionew) (?pc as ?pcnew) (?ov as ?ovnew) (?flags as ?flagsnew) (0 as ?statenew) (?md as ?mdnew) (?cmd as ?cmdnew) WHERE { ?pdp1 pdp1:currentcommand ?cmd. FILTER(?cmd=8) ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:state ?state. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pdp1 pdp1:programmcounter ?pc. ?pdp1 pdp1:overflowbit ?ov. ?pdp1 pdp1:flags ?flags. ?mem pdp1:address ?adr. ?mem pdp1:value ?word. { SELECT (xsd:integer(?md-floor(?md/4096)*4096) as ?adr) WHERE { ?pdp1 pdp1:currentdata ?md. } } } } # DAC OPTIONAL { select (?ac as ?acnew) (?io as ?ionew) (?pc as ?pcnew) (?ov as ?ovnew) (?flags as ?flagsnew) (0 as ?statenew) (?md as ?mdnew) (?cmd as ?cmdnew) (?mem as ?memoryword) (?word as ?worddel) (?ac as ?wordnew) WHERE { ?pdp1 pdp1:currentcommand ?cmd. FILTER(?cmd=10) ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:state ?state. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pdp1 pdp1:programmcounter ?pc. ?pdp1 pdp1:overflowbit ?ov. ?pdp1 pdp1:flags ?flags. ?mem pdp1:address ?adr. ?mem pdp1:value ?word. { SELECT (xsd:integer(?md-floor(?md/4096)*4096) as ?adr) WHERE { ?pdp1 pdp1:currentdata ?md. } } } } # AND OPTIONAL { select # no bitwise operators. the horror... (if( floor(?ac/1) - floor(?ac/(2*1))*2 && floor(?word/1) - floor(?word/(2*1))*2,1,0) +if( floor(?ac/2) - floor(?ac/(2*2))*2 && floor(?word/2) - floor(?word/(2*2))*2,2,0) +if( floor(?ac/4) - floor(?ac/(2*4))*2 && floor(?word/4) - floor(?word/(2*4))*2,4,0) +if( floor(?ac/8) - floor(?ac/(2*8))*2 && floor(?word/8) - floor(?word/(2*8))*2,8,0) +if( floor(?ac/16) - floor(?ac/(2*16))*2 && floor(?word/16) - floor(?word/(2*16))*2,16,0) +if( floor(?ac/32) - floor(?ac/(2*32))*2 && floor(?word/32) - floor(?word/(2*32))*2,32,0) +if( floor(?ac/64) - floor(?ac/(2*64))*2 && floor(?word/64) - floor(?word/(2*64))*2,64,0) +if( floor(?ac/128) - floor(?ac/(2*128))*2 && floor(?word/128) - floor(?word/(2*128))*2,128,0) +if( floor(?ac/256) - floor(?ac/(2*256))*2 && floor(?word/256) - floor(?word/(2*256))*2,256,0) +if( floor(?ac/512) - floor(?ac/(2*512))*2 && floor(?word/512) - floor(?word/(2*512))*2,512,0) +if( floor(?ac/1024) - floor(?ac/(2*1024))*2 && floor(?word/1024) - floor(?word/(2*1024))*2,1024,0) +if( floor(?ac/2048) - floor(?ac/(2*2048))*2 && floor(?word/2048) - floor(?word/(2*2048))*2,2048,0) +if( floor(?ac/4096) - floor(?ac/(2*4096))*2 && floor(?word/4096) - floor(?word/(2*4096))*2,4096,0) +if( floor(?ac/8192) - floor(?ac/(2*8192))*2 && floor(?word/8192) - floor(?word/(2*8192))*2,8192,0) +if( floor(?ac/16384) - floor(?ac/(2*16384))*2 && floor(?word/16384) - floor(?word/(2*16384))*2,16384,0) +if( floor(?ac/32768) - floor(?ac/(2*32768))*2 && floor(?word/32768) - floor(?word/(2*32768))*2,32768,0) +if( floor(?ac/65536) - floor(?ac/(2*65536))*2 && floor(?word/65536) - floor(?word/(2*65536))*2,65536,0) +if( floor(?ac/131072) - floor(?ac/(2*131072))*2 && floor(?word/131072) - floor(?word/(2*131072))*2,131072,0) as ?acnew) (?io as ?ionew) (?pc as ?pcnew) (?ov as ?ovnew) (?flags as ?flagsnew) (0 as ?statenew) (?md as ?mdnew) (?cmd as ?cmdnew) WHERE { ?pdp1 pdp1:currentcommand ?cmd. FILTER(?cmd=1) ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:state ?state. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pdp1 pdp1:programmcounter ?pc. ?pdp1 pdp1:overflowbit ?ov. ?pdp1 pdp1:flags ?flags. ?mem pdp1:address ?adr. ?mem pdp1:value ?word. { SELECT (xsd:integer(?md-floor(?md/4096)*4096) as ?adr) WHERE { ?pdp1 pdp1:currentdata ?md. } } } } # IOR OPTIONAL { select (if( floor(?ac/1) - floor(?ac/(2*1))*2 || floor(?word/1) - floor(?word/(2*1))*2,1,0) +if( floor(?ac/2) - floor(?ac/(2*2))*2 || floor(?word/2) - floor(?word/(2*2))*2,2,0) +if( floor(?ac/4) - floor(?ac/(2*4))*2 || floor(?word/4) - floor(?word/(2*4))*2,4,0) +if( floor(?ac/8) - floor(?ac/(2*8))*2 || floor(?word/8) - floor(?word/(2*8))*2,8,0) +if( floor(?ac/16) - floor(?ac/(2*16))*2 || floor(?word/16) - floor(?word/(2*16))*2,16,0) +if( floor(?ac/32) - floor(?ac/(2*32))*2 || floor(?word/32) - floor(?word/(2*32))*2,32,0) +if( floor(?ac/64) - floor(?ac/(2*64))*2 || floor(?word/64) - floor(?word/(2*64))*2,64,0) +if( floor(?ac/128) - floor(?ac/(2*128))*2 || floor(?word/128) - floor(?word/(2*128))*2,128,0) +if( floor(?ac/256) - floor(?ac/(2*256))*2 || floor(?word/256) - floor(?word/(2*256))*2,256,0) +if( floor(?ac/512) - floor(?ac/(2*512))*2 || floor(?word/512) - floor(?word/(2*512))*2,512,0) +if( floor(?ac/1024) - floor(?ac/(2*1024))*2 || floor(?word/1024) - floor(?word/(2*1024))*2,1024,0) +if( floor(?ac/2048) - floor(?ac/(2*2048))*2 || floor(?word/2048) - floor(?word/(2*2048))*2,2048,0) +if( floor(?ac/4096) - floor(?ac/(2*4096))*2 || floor(?word/4096) - floor(?word/(2*4096))*2,4096,0) +if( floor(?ac/8192) - floor(?ac/(2*8192))*2 || floor(?word/8192) - floor(?word/(2*8192))*2,8192,0) +if( floor(?ac/16384) - floor(?ac/(2*16384))*2 || floor(?word/16384) - floor(?word/(2*16384))*2,16384,0) +if( floor(?ac/32768) - floor(?ac/(2*32768))*2 || floor(?word/32768) - floor(?word/(2*32768))*2,32768,0) +if( floor(?ac/65536) - floor(?ac/(2*65536))*2 || floor(?word/65536) - floor(?word/(2*65536))*2,65536,0) +if( floor(?ac/131072) - floor(?ac/(2*131072))*2 || floor(?word/131072) - floor(?word/(2*131072))*2,131072,0) as ?acnew) (?io as ?ionew) (?pc as ?pcnew) (?ov as ?ovnew) (?flags as ?flagsnew) (0 as ?statenew) (?md as ?mdnew) (?cmd as ?cmdnew) WHERE { ?pdp1 pdp1:currentcommand ?cmd. FILTER(?cmd=2) ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:state ?state. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pdp1 pdp1:programmcounter ?pc. ?pdp1 pdp1:overflowbit ?ov. ?pdp1 pdp1:flags ?flags. ?mem pdp1:address ?adr. ?mem pdp1:value ?word. { SELECT (xsd:integer(?md-floor(?md/4096)*4096) as ?adr) WHERE { ?pdp1 pdp1:currentdata ?md. } } } } # XOR OPTIONAL { select (if( floor(?ac/1) - floor(?ac/(2*1))*2 + floor(?word/1) - floor(?word/(2*1))*2 = 1,1,0) +if( floor(?ac/2) - floor(?ac/(2*2))*2 + floor(?word/2) - floor(?word/(2*2))*2 = 1,2,0) +if( floor(?ac/4) - floor(?ac/(2*4))*2 + floor(?word/4) - floor(?word/(2*4))*2 = 1,4,0) +if( floor(?ac/8) - floor(?ac/(2*8))*2 + floor(?word/8) - floor(?word/(2*8))*2 = 1,8,0) +if( floor(?ac/16) - floor(?ac/(2*16))*2 + floor(?word/16) - floor(?word/(2*16))*2 = 1,16,0) +if( floor(?ac/32) - floor(?ac/(2*32))*2 + floor(?word/32) - floor(?word/(2*32))*2 = 1,32,0) +if( floor(?ac/64) - floor(?ac/(2*64))*2 + floor(?word/64) - floor(?word/(2*64))*2 = 1,64,0) +if( floor(?ac/128) - floor(?ac/(2*128))*2 + floor(?word/128) - floor(?word/(2*128))*2 = 1,128,0) +if( floor(?ac/256) - floor(?ac/(2*256))*2 + floor(?word/256) - floor(?word/(2*256))*2 = 1,256,0) +if( floor(?ac/512) - floor(?ac/(2*512))*2 + floor(?word/512) - floor(?word/(2*512))*2 = 1,512,0) +if( floor(?ac/1024) - floor(?ac/(2*1024))*2 + floor(?word/1024) - floor(?word/(2*1024))*2 = 1,1024,0) +if( floor(?ac/2048) - floor(?ac/(2*2048))*2 + floor(?word/2048) - floor(?word/(2*2048))*2 = 1,2048,0) +if( floor(?ac/4096) - floor(?ac/(2*4096))*2 + floor(?word/4096) - floor(?word/(2*4096))*2 = 1,4096,0) +if( floor(?ac/8192) - floor(?ac/(2*8192))*2 + floor(?word/8192) - floor(?word/(2*8192))*2 = 1,8192,0) +if( floor(?ac/16384) - floor(?ac/(2*16384))*2 + floor(?word/16384) - floor(?word/(2*16384))*2 = 1,16384,0) +if( floor(?ac/32768) - floor(?ac/(2*32768))*2 + floor(?word/32768) - floor(?word/(2*32768))*2 = 1,32768,0) +if( floor(?ac/65536) - floor(?ac/(2*65536))*2 + floor(?word/65536) - floor(?word/(2*65536))*2 = 1,65536,0) +if( floor(?ac/131072) - floor(?ac/(2*131072))*2 + floor(?word/131072) - floor(?word/(2*131072))*2 = 1,131072,0) as ?acnew) (?io as ?ionew) (?pc as ?pcnew) (?ov as ?ovnew) (?flags as ?flagsnew) (0 as ?statenew) (?md as ?mdnew) (?cmd as ?cmdnew) WHERE { ?pdp1 pdp1:currentcommand ?cmd. FILTER(?cmd=3) ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:state ?state. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pdp1 pdp1:programmcounter ?pc. ?pdp1 pdp1:overflowbit ?ov. ?pdp1 pdp1:flags ?flags. ?mem pdp1:address ?adr. ?mem pdp1:value ?word. { SELECT (xsd:integer(?md-floor(?md/4096)*4096) as ?adr) WHERE { ?pdp1 pdp1:currentdata ?md. } } } } # XCT OPTIONAL { select (?ac as ?acnew) (?io as ?ionew) (?pc as ?pcnew) (?ov as ?ovnew) (?flags as ?flagsnew) (1 as ?statenew) (?word as ?mdnew) (xsd:integer(floor(?word/8192)) as ?cmdnew) WHERE { ?pdp1 pdp1:currentcommand ?cmd. FILTER(?cmd=4) ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:state ?state. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pdp1 pdp1:programmcounter ?pc. ?pdp1 pdp1:overflowbit ?ov. ?pdp1 pdp1:flags ?flags. ?mem pdp1:address ?adr. ?mem pdp1:value ?word. { SELECT (xsd:integer(?md-floor(?md/4096)*4096) as ?adr) WHERE { ?pdp1 pdp1:currentdata ?md. } } } } # CAL/JDA OPTIONAL { select (?pc + 131072 * ?ov as ?acnew) (?io as ?ionew) (?adr+1 as ?pcnew) (?ov as ?ovnew) (?flags as ?flagsnew) (0 as ?statenew) (?md as ?mdnew) (?cmd as ?cmdnew) (?mem as ?memoryword) (?word as ?worddel) (?ac as ?wordnew) WHERE { ?pdp1 pdp1:currentcommand ?cmd. FILTER(?cmd=7) ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:state ?state. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pdp1 pdp1:programmcounter ?pc. ?pdp1 pdp1:overflowbit ?ov. ?pdp1 pdp1:flags ?flags. ?mem pdp1:address ?adr. ?mem pdp1:value ?word. { SELECT (if(floor(?md/4096)-floor(?md/8192)*2,xsd:integer(?md-floor(?md/4096)*4096),64) as ?adr) WHERE { ?pdp1 pdp1:currentdata ?md. } } } } # LIO OPTIONAL { select (?ac as ?acnew) (?word as ?ionew) (?pc as ?pcnew) (?ov as ?ovnew) (?flags as ?flagsnew) (0 as ?statenew) (?md as ?mdnew) (?cmd as ?cmdnew) WHERE { ?pdp1 pdp1:currentcommand ?cmd. FILTER(?cmd=9) ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:state ?state. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pdp1 pdp1:programmcounter ?pc. ?pdp1 pdp1:overflowbit ?ov. ?pdp1 pdp1:flags ?flags. ?mem pdp1:address ?adr. ?mem pdp1:value ?word. { SELECT (xsd:integer(?md-floor(?md/4096)*4096) as ?adr) WHERE { ?pdp1 pdp1:currentdata ?md. } } } } # DAP OPTIONAL { select (?ac as ?acnew) (?io as ?ionew) (?pc as ?pcnew) (?ov as ?ovnew) (?flags as ?flagsnew) (0 as ?statenew) (?md as ?mdnew) (?cmd as ?cmdnew) (?mem as ?memoryword) (?word as ?worddel) (xsd:integer(floor(?word/4096)*4096 + ?ac-floor(?ac/4096)*4096) as ?wordnew) WHERE { ?pdp1 pdp1:currentcommand ?cmd. FILTER(?cmd=11) ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:state ?state. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pdp1 pdp1:programmcounter ?pc. ?pdp1 pdp1:overflowbit ?ov. ?pdp1 pdp1:flags ?flags. ?mem pdp1:address ?adr. ?mem pdp1:value ?word. { SELECT (xsd:integer(?md-floor(?md/4096)*4096) as ?adr) WHERE { ?pdp1 pdp1:currentdata ?md. } } } } # DIO OPTIONAL { select (?ac as ?acnew) (?io as ?ionew) (?pc as ?pcnew) (?ov as ?ovnew) (?flags as ?flagsnew) (0 as ?statenew) (?md as ?mdnew) (?cmd as ?cmdnew) (?mem as ?memoryword) (?word as ?worddel) (?io as ?wordnew) WHERE { ?pdp1 pdp1:currentcommand ?cmd. FILTER(?cmd=13) ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:state ?state. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pdp1 pdp1:programmcounter ?pc. ?pdp1 pdp1:overflowbit ?ov. ?pdp1 pdp1:flags ?flags. ?mem pdp1:address ?adr. ?mem pdp1:value ?word. { SELECT (xsd:integer(?md-floor(?md/4096)*4096) as ?adr) WHERE { ?pdp1 pdp1:currentdata ?md. } } } } # DZM OPTIONAL { select (?ac as ?acnew) (?io as ?ionew) (?pc as ?pcnew) (?ov as ?ovnew) (?flags as ?flagsnew) (0 as ?statenew) (?md as ?mdnew) (?cmd as ?cmdnew) (?mem as ?memoryword) (?word as ?worddel) (0 as ?wordnew) WHERE { ?pdp1 pdp1:currentcommand ?cmd. FILTER(?cmd=14) ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:state ?state. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pdp1 pdp1:programmcounter ?pc. ?pdp1 pdp1:overflowbit ?ov. ?pdp1 pdp1:flags ?flags. ?mem pdp1:address ?adr. ?mem pdp1:value ?word. { SELECT (xsd:integer(?md-floor(?md/4096)*4096) as ?adr) WHERE { ?pdp1 pdp1:currentdata ?md. } } } } # ADD OPTIONAL { select (if((?ac + ?word + floor((?ac+?word)/262144)) - floor((?ac + ?word + floor((?ac+?word)/262144))/262144)*262144 = 262143, 0, xsd:integer((?ac + ?word + floor((?ac+?word)/262144)) - floor((?ac + ?word + floor((?ac+?word)/262144))/262144)*262144)) as ?acnew) (?io as ?ionew) (?pc as ?pcnew) (xsd:integer(floor((?ac+?word)/262144)) as ?ovnew) (?flags as ?flagsnew) (0 as ?statenew) (?md as ?mdnew) (?cmd as ?cmdnew) WHERE { ?pdp1 pdp1:currentcommand ?cmd. FILTER(?cmd=16) ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:state ?state. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pdp1 pdp1:programmcounter ?pc. ?pdp1 pdp1:overflowbit ?ov. ?pdp1 pdp1:flags ?flags. ?mem pdp1:address ?adr. ?mem pdp1:value ?word. { SELECT (xsd:integer(?md-floor(?md/4096)*4096) as ?adr) WHERE { ?pdp1 pdp1:currentdata ?md. } } } } # SUB OPTIONAL { select # result &= 0777777. convert -0 to +0 (if(?im - floor(?im/262144)*262144 = 262143, 0, xsd:integer(?im - floor(?im/262144)*262144)) as ?acnew) (?io as ?ionew) (?pc as ?pcnew) (if(?diffsigns && floor(?word/131072) = floor(if(?im - floor(?im/262144)*262144 = 262143, 0, xsd:integer(?im - floor(?im/262144)*262144))/131072), 1, ?ov) as ?ovnew) (?flags as ?flagsnew) (0 as ?statenew) (?md as ?mdnew) (?cmd as ?cmdnew) WHERE { ?pdp1 pdp1:currentcommand ?cmd. FILTER(?cmd=17) ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:state ?state. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pdp1 pdp1:programmcounter ?pc. ?pdp1 pdp1:overflowbit ?ov. ?pdp1 pdp1:flags ?flags. { SELECT ?word ?diffsigns (?ac+?wordcomplement+floor((?ac+?wordcomplement)/262144) as ?im) WHERE { SELECT ?ac ?word (floor(?ac/131072) + floor(?word/131072) = 1 as ?diffsigns) (if( floor(?word/1) - floor(?word/(2*1))*2 = 1,0,1) +if( floor(?word/2) - floor(?word/(2*2))*2 = 1,0,2) +if( floor(?word/4) - floor(?word/(2*4))*2 = 1,0,4) +if( floor(?word/8) - floor(?word/(2*8))*2 = 1,0,8) +if( floor(?word/16) - floor(?word/(2*16))*2 = 1,0,16) +if( floor(?word/32) - floor(?word/(2*32))*2 = 1,0,32) +if( floor(?word/64) - floor(?word/(2*64))*2 = 1,0,64) +if( floor(?word/128) - floor(?word/(2*128))*2 = 1,0,128) +if( floor(?word/256) - floor(?word/(2*256))*2 = 1,0,256) +if( floor(?word/512) - floor(?word/(2*512))*2 = 1,0,512) +if( floor(?word/1024) - floor(?word/(2*1024))*2 = 1,0,1024) +if( floor(?word/2048) - floor(?word/(2*2048))*2 = 1,0,2048) +if( floor(?word/4096) - floor(?word/(2*4096))*2 = 1,0,4096) +if( floor(?word/8192) - floor(?word/(2*8192))*2 = 1,0,8192) +if( floor(?word/16384) - floor(?word/(2*16384))*2 = 1,0,16384) +if( floor(?word/32768) - floor(?word/(2*32768))*2 = 1,0,32768) +if( floor(?word/65536) - floor(?word/(2*65536))*2 = 1,0,65536) +if( floor(?word/131072) - floor(?word/(2*131072))*2 = 1,0,131072) as ?wordcomplement) WHERE { ?pdp1 pdp1:accumulator ?ac. ?mem pdp1:address ?adr. ?mem pdp1:value ?word. { SELECT (xsd:integer(?md-floor(?md/4096)*4096) as ?adr) WHERE { ?pdp1 pdp1:currentdata ?md. } } } } } } } # IDX OPTIONAL { select (if(?word+1=262143,0,?word+1) as ?acnew) (?io as ?ionew) (?pc as ?pcnew) (?ov as ?ovnew) (?flags as ?flagsnew) (0 as ?statenew) (?md as ?mdnew) (?cmd as ?cmdnew) (?mem as ?memoryword) (?word as ?worddel) (if(?word+1=262143,0,?word+1) as ?wordnew) WHERE { ?pdp1 pdp1:currentcommand ?cmd. FILTER(?cmd=18) ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:state ?state. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pdp1 pdp1:programmcounter ?pc. ?pdp1 pdp1:overflowbit ?ov. ?pdp1 pdp1:flags ?flags. ?mem pdp1:address ?adr. ?mem pdp1:value ?word. { SELECT (xsd:integer(?md-floor(?md/4096)*4096) as ?adr) WHERE { ?pdp1 pdp1:currentdata ?md. } } } } # ISP OPTIONAL { select (if(?word+1=262143,0,?word+1) as ?acnew) (?io as ?ionew) (if(floor(if(?word+1=262143,0,?word+1)/131072) - floor(if(?word+1=262143,0,?word+1)/(2*131072))*2,?pc,?pc+1) as ?pcnew) (?ov as ?ovnew) (?flags as ?flagsnew) (0 as ?statenew) (?md as ?mdnew) (?cmd as ?cmdnew) (?mem as ?memoryword) (?word as ?worddel) (if(?word+1=262143,0,?word+1) as ?wordnew) WHERE { ?pdp1 pdp1:currentcommand ?cmd. FILTER(?cmd=19) ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:state ?state. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pdp1 pdp1:programmcounter ?pc. ?pdp1 pdp1:overflowbit ?ov. ?pdp1 pdp1:flags ?flags. ?mem pdp1:address ?adr. ?mem pdp1:value ?word. { SELECT (xsd:integer(?md-floor(?md/4096)*4096) as ?adr) WHERE { ?pdp1 pdp1:currentdata ?md. } } } } # SAD OPTIONAL { select (?ac as ?acnew) (?io as ?ionew) (if(?ac=?word,?pc,?pc+1) as ?pcnew) (?ov as ?ovnew) (?flags as ?flagsnew) (0 as ?statenew) (?md as ?mdnew) (?cmd as ?cmdnew) WHERE { ?pdp1 pdp1:currentcommand ?cmd. FILTER(?cmd=20) ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:state ?state. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pdp1 pdp1:programmcounter ?pc. ?pdp1 pdp1:overflowbit ?ov. ?pdp1 pdp1:flags ?flags. ?mem pdp1:address ?adr. ?mem pdp1:value ?word. { SELECT (xsd:integer(?md-floor(?md/4096)*4096) as ?adr) WHERE { ?pdp1 pdp1:currentdata ?md. } } } } # SAS OPTIONAL { select (?ac as ?acnew) (?io as ?ionew) (if(?ac=?word,?pc+1,?pc) as ?pcnew) (?ov as ?ovnew) (?flags as ?flagsnew) (0 as ?statenew) (?md as ?mdnew) (?cmd as ?cmdnew) WHERE { ?pdp1 pdp1:currentcommand ?cmd. FILTER(?cmd=21) ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:state ?state. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pdp1 pdp1:programmcounter ?pc. ?pdp1 pdp1:overflowbit ?ov. ?pdp1 pdp1:flags ?flags. ?mem pdp1:address ?adr. ?mem pdp1:value ?word. { SELECT (xsd:integer(?md-floor(?md/4096)*4096) as ?adr) WHERE { ?pdp1 pdp1:currentdata ?md. } } } } # MUS OPTIONAL { select (xsd:integer(floor(?ir/2)) as ?acnew) (xsd:integer(floor(?io/2)+(?ir-floor(?ir/2)*2)*131072) as ?ionew) (?pc as ?pcnew) (?ov as ?ovnew) (?flags as ?flagsnew) (0 as ?statenew) (?md as ?mdnew) (?cmd as ?cmdnew) WHERE { ?pdp1 pdp1:currentcommand ?cmd. FILTER(?cmd=22) ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:state ?state. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pdp1 pdp1:programmcounter ?pc. ?pdp1 pdp1:overflowbit ?ov. ?pdp1 pdp1:flags ?flags. { SELECT (if(?io-floor(?io/2)*2,(?ac+?word+floor((?ac+?word)/262144)) - floor((?ac+?word+floor((?ac+?word)/262144))/262143)*262143,?ac) as ?ir) WHERE { ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?mem pdp1:address ?adr. ?mem pdp1:value ?word. { SELECT (xsd:integer(?md-floor(?md/4096)*4096) as ?adr) WHERE { ?pdp1 pdp1:currentdata ?md. } } } } } } # DIS OPTIONAL { select # result &= 0777777. convert -0 to +0 (if(?ac2 - floor(?ac2/262144)*262144 = 262143, 0, xsd:integer(?ac2 - floor(?ac2/262144)*262144)) as ?acnew) (xsd:integer(?io1) as ?ionew) (?pc as ?pcnew) (?ov as ?ovnew) (?flags as ?flagsnew) (0 as ?statenew) (?md as ?mdnew) (?cmd as ?cmdnew) WHERE { ?pdp1 pdp1:currentcommand ?cmd. FILTER(?cmd=23) ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:state ?state. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pdp1 pdp1:programmcounter ?pc. ?pdp1 pdp1:overflowbit ?ov. ?pdp1 pdp1:flags ?flags. { SELECT (if(?io1-floor(?io1/2)*2,?ac1+?wordcomplement+floor((?ac1+?wordcomplement)/262144),?ac1+?word+1+floor((?ac1+?word+1)/262144)) as ?ac2) ?io1 WHERE { SELECT ?word ((?ac*2+floor(?io/131072)) - floor((?ac*2+floor(?io/131072))/262144)*262144 as ?ac1) (?io*2-floor((?io*2)/262144)*262144+if(floor(?ac/131072),0,1) as ?io1) (if( floor(?word/1) - floor(?word/(2*1))*2 = 1,0,1) +if( floor(?word/2) - floor(?word/(2*2))*2 = 1,0,2) +if( floor(?word/4) - floor(?word/(2*4))*2 = 1,0,4) +if( floor(?word/8) - floor(?word/(2*8))*2 = 1,0,8) +if( floor(?word/16) - floor(?word/(2*16))*2 = 1,0,16) +if( floor(?word/32) - floor(?word/(2*32))*2 = 1,0,32) +if( floor(?word/64) - floor(?word/(2*64))*2 = 1,0,64) +if( floor(?word/128) - floor(?word/(2*128))*2 = 1,0,128) +if( floor(?word/256) - floor(?word/(2*256))*2 = 1,0,256) +if( floor(?word/512) - floor(?word/(2*512))*2 = 1,0,512) +if( floor(?word/1024) - floor(?word/(2*1024))*2 = 1,0,1024) +if( floor(?word/2048) - floor(?word/(2*2048))*2 = 1,0,2048) +if( floor(?word/4096) - floor(?word/(2*4096))*2 = 1,0,4096) +if( floor(?word/8192) - floor(?word/(2*8192))*2 = 1,0,8192) +if( floor(?word/16384) - floor(?word/(2*16384))*2 = 1,0,16384) +if( floor(?word/32768) - floor(?word/(2*32768))*2 = 1,0,32768) +if( floor(?word/65536) - floor(?word/(2*65536))*2 = 1,0,65536) +if( floor(?word/131072) - floor(?word/(2*131072))*2 = 1,0,131072) as ?wordcomplement) WHERE { ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?mem pdp1:address ?adr. ?mem pdp1:value ?word. { SELECT (xsd:integer(?md-floor(?md/4096)*4096) as ?adr) WHERE { ?pdp1 pdp1:currentdata ?md. } } } } } } } # JMP OPTIONAL { select (?ac as ?acnew) (?io as ?ionew) (xsd:integer(?md-floor(?md/4096)*4096) as ?pcnew) (?ov as ?ovnew) (?flags as ?flagsnew) (0 as ?statenew) (?md as ?mdnew) (?cmd as ?cmdnew) WHERE { ?pdp1 pdp1:currentcommand ?cmd. FILTER(?cmd=24) ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:state ?state. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pdp1 pdp1:programmcounter ?pc. ?pdp1 pdp1:overflowbit ?ov. ?pdp1 pdp1:flags ?flags. } } # JSP OPTIONAL { select (?ov*131072 + ?pc as ?acnew) (?io as ?ionew) (xsd:integer(?md-floor(?md/4096)*4096) as ?pcnew) (?ov as ?ovnew) (?flags as ?flagsnew) (0 as ?statenew) (?md as ?mdnew) (?cmd as ?cmdnew) WHERE { ?pdp1 pdp1:currentcommand ?cmd. FILTER(?cmd=25) ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:state ?state. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pdp1 pdp1:programmcounter ?pc. ?pdp1 pdp1:overflowbit ?ov. ?pdp1 pdp1:flags ?flags. } } # SKP OPTIONAL { select (?ac as ?acnew) (?io as ?ionew) (if(?ib,if(!?cond,?pc+1,?pc),if(?cond,?pc+1,?pc)) as ?pcnew) (if(floor(?y/512) - floor(?y/(2*512))*2,0,?ov) as ?ovnew) (?flags as ?flagsnew) (0 as ?statenew) (?md as ?mdnew) (?cmd as ?cmdnew) WHERE { ?pdp1 pdp1:currentcommand ?cmd. FILTER(?cmd=26) ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:state ?state. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pdp1 pdp1:programmcounter ?pc. ?pdp1 pdp1:overflowbit ?ov. ?pdp1 pdp1:flags ?flags. { SELECT ?word ?ib ?y ( (floor(?y/64) - floor(?y/(2*64))*2 && !?ac) || (floor(?y/128) - floor(?y/(2*128))*2 && floor(?ac/131072)=0) || (floor(?y/256) - floor(?y/(2*256))*2 && floor(?ac/131072)=1) || (floor(?y/512) - floor(?y/(2*512))*2 && ?ov=0) || (floor(?y/1024) - floor(?y/(2*1024))*2 && floor(?io/131072)=0) || (?y7=7 && ?flags=0) || (?y7!=0 && floor(?flags/?y7shift) - floor(?flags/(2*?y7shift))*2 = 0) || (?y70=7 && ?sense=0) || (?y70!=0 && floor(?sense/?y70shift) - floor(?sense/(2*?y70shift))*2 = 0) as ?cond) WHERE { ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pdp1 pdp1:overflowbit ?ov. ?pdp1 pdp1:flags ?flags. ?pdp1 pdp1:sense ?sense. # compute powers of 2 with lookup table ?pow1 pdp1:exp ?y7minus1. ?pow1 pdp1:pow2 ?y7shift. ?pow2 pdp1:exp ?y70minus1. ?pow2 pdp1:pow2 ?y70shift. { SELECT (if(if(floor(?md/8) - floor(?md/(2*8))*2,1,0) + if(floor(?md/16) - floor(?md/(2*16))*2,2,0) + if(floor(?md/32) - floor(?md/(2*32))*2,4,0), if(floor(?md/8) - floor(?md/(2*8))*2,1,0) + if(floor(?md/16) - floor(?md/(2*16))*2,2,0) + if(floor(?md/32) - floor(?md/(2*32))*2,4,0) - 1, 0) as ?y70minus1) (if(floor(?md/8) - floor(?md/(2*8))*2,1,0) + if(floor(?md/16) - floor(?md/(2*16))*2,2,0) + if(floor(?md/32) - floor(?md/(2*32))*2,4,0) as ?y70) (if(?md-floor(?md/8)*8,xsd:integer(?md-floor(?md/8)*8-1),0) as ?y7minus1) (?md-floor(?md/8)*8 as ?y7) (?md-floor(?md/4096)*4096 as ?y) (floor(?md/4096)-floor(?md/8192)*2 as ?ib) WHERE { ?pdp1 pdp1:currentdata ?md. } } } } } } # SFT OPTIONAL { select ?acnew ?ionew (?pc as ?pcnew) (?ov as ?ovnew) (?flags as ?flagsnew) ?statenew (?md as ?mdnew) (?cmd as ?cmdnew) WHERE { ?pdp1 pdp1:currentcommand ?cmd. FILTER(?cmd=27) ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:programmcounter ?pc. ?pdp1 pdp1:overflowbit ?ov. ?pdp1 pdp1:flags ?flags. # code 661 Rotate Acumulator Left OPTIONAL { ?pdp1 pdp1:currentdata ?md. FILTER(floor(?md/512)=433) { SELECT (xsd:integer(?ac*?mul - floor((?ac*?mul)/262144)*262144 + floor(?ac/?div)) as ?acnew) (?io as ?ionew) (0 as ?statenew) WHERE { ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pow1 pdp1:exp ?nshift. ?pow1 pdp1:pow2 ?mul. ?pow2 pdp1:exp ?nshift1. ?pow2 pdp1:pow2 ?div. { SELECT ?nshift (18-?nshift as ?nshift1) WHERE { SELECT (if(floor(?md/1) - floor(?md/(2*1))*2,1,0)+ if(floor(?md/2) - floor(?md/(2*2))*2,1,0)+ if(floor(?md/4) - floor(?md/(2*4))*2,1,0)+ if(floor(?md/8) - floor(?md/(2*8))*2,1,0)+ if(floor(?md/16) - floor(?md/(2*16))*2,1,0)+ if(floor(?md/32) - floor(?md/(2*32))*2,1,0)+ if(floor(?md/64) - floor(?md/(2*64))*2,1,0)+ if(floor(?md/128) - floor(?md/(2*128))*2,1,0)+ if(floor(?md/256) - floor(?md/(2*256))*2,1,0) as ?nshift) WHERE { ?pdp1 pdp1:currentdata ?md. } } } } } } # code 662 Rotate In-Out Register Left OPTIONAL { ?pdp1 pdp1:currentdata ?md. FILTER(floor(?md/512)=434) { SELECT (?ac as ?acnew) (xsd:integer(?io*?mul - floor((?io*?mul)/262144)*262144 + floor(?io/?div)) as ?ionew) (0 as ?statenew) WHERE { ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pow1 pdp1:exp ?nshift. ?pow1 pdp1:pow2 ?mul. ?pow2 pdp1:exp ?nshift1. ?pow2 pdp1:pow2 ?div. { SELECT ?nshift (18-?nshift as ?nshift1) WHERE { SELECT (if(floor(?md/1) - floor(?md/(2*1))*2,1,0)+ if(floor(?md/2) - floor(?md/(2*2))*2,1,0)+ if(floor(?md/4) - floor(?md/(2*4))*2,1,0)+ if(floor(?md/8) - floor(?md/(2*8))*2,1,0)+ if(floor(?md/16) - floor(?md/(2*16))*2,1,0)+ if(floor(?md/32) - floor(?md/(2*32))*2,1,0)+ if(floor(?md/64) - floor(?md/(2*64))*2,1,0)+ if(floor(?md/128) - floor(?md/(2*128))*2,1,0)+ if(floor(?md/256) - floor(?md/(2*256))*2,1,0) as ?nshift) WHERE { ?pdp1 pdp1:currentdata ?md. } } } } } } # code 663 Rotate AC and IO Left OPTIONAL { ?pdp1 pdp1:currentdata ?md. FILTER(floor(?md/512)=435) { SELECT (xsd:integer(?ac*?mul - floor((?ac*?mul)/262144)*262144 + floor(?io/?div)) as ?acnew) (xsd:integer(?io*?mul - floor((?io*?mul)/262144)*262144 + floor(?ac/?div)) as ?ionew) (0 as ?statenew) WHERE { ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pow1 pdp1:exp ?nshift. ?pow1 pdp1:pow2 ?mul. ?pow2 pdp1:exp ?nshift1. ?pow2 pdp1:pow2 ?div. { SELECT ?nshift (18-?nshift as ?nshift1) WHERE { SELECT (if(floor(?md/1) - floor(?md/(2*1))*2,1,0)+ if(floor(?md/2) - floor(?md/(2*2))*2,1,0)+ if(floor(?md/4) - floor(?md/(2*4))*2,1,0)+ if(floor(?md/8) - floor(?md/(2*8))*2,1,0)+ if(floor(?md/16) - floor(?md/(2*16))*2,1,0)+ if(floor(?md/32) - floor(?md/(2*32))*2,1,0)+ if(floor(?md/64) - floor(?md/(2*64))*2,1,0)+ if(floor(?md/128) - floor(?md/(2*128))*2,1,0)+ if(floor(?md/256) - floor(?md/(2*256))*2,1,0) as ?nshift) WHERE { ?pdp1 pdp1:currentdata ?md. } } } } } } # code 665 Shift Acumulator Left OPTIONAL { ?pdp1 pdp1:currentdata ?md. FILTER(floor(?md/512)=437) { SELECT (xsd:integer(if(floor(?ac/131072),?ac*?mul - floor((?ac*?mul)/131072)*131072 + ?mul-1 + 131072,?ac*?mul - floor((?ac*?mul)/131072)*131072)) as ?acnew) (?io as ?ionew) (0 as ?statenew) WHERE { ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pow1 pdp1:exp ?nshift. ?pow1 pdp1:pow2 ?mul. ?pow2 pdp1:exp ?nshift1. ?pow2 pdp1:pow2 ?div. { SELECT ?nshift (18-?nshift as ?nshift1) WHERE { SELECT (if(floor(?md/1) - floor(?md/(2*1))*2,1,0)+ if(floor(?md/2) - floor(?md/(2*2))*2,1,0)+ if(floor(?md/4) - floor(?md/(2*4))*2,1,0)+ if(floor(?md/8) - floor(?md/(2*8))*2,1,0)+ if(floor(?md/16) - floor(?md/(2*16))*2,1,0)+ if(floor(?md/32) - floor(?md/(2*32))*2,1,0)+ if(floor(?md/64) - floor(?md/(2*64))*2,1,0)+ if(floor(?md/128) - floor(?md/(2*128))*2,1,0)+ if(floor(?md/256) - floor(?md/(2*256))*2,1,0) as ?nshift) WHERE { ?pdp1 pdp1:currentdata ?md. } } } } } } # code 666 Shift In-Out Register Left OPTIONAL { ?pdp1 pdp1:currentdata ?md. FILTER(floor(?md/512)=438) { SELECT (?ac as ?acnew) (xsd:integer(if(floor(?io/131072),?io*?mul - floor((?io*?mul)/131072)*131072 + ?mul-1 + 131072,?io*?mul - floor((?io*?mul)/131072)*131072)) as ?ionew) (0 as ?statenew) WHERE { ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pow1 pdp1:exp ?nshift. ?pow1 pdp1:pow2 ?mul. ?pow2 pdp1:exp ?nshift1. ?pow2 pdp1:pow2 ?div. { SELECT ?nshift (18-?nshift as ?nshift1) WHERE { SELECT (if(floor(?md/1) - floor(?md/(2*1))*2,1,0)+ if(floor(?md/2) - floor(?md/(2*2))*2,1,0)+ if(floor(?md/4) - floor(?md/(2*4))*2,1,0)+ if(floor(?md/8) - floor(?md/(2*8))*2,1,0)+ if(floor(?md/16) - floor(?md/(2*16))*2,1,0)+ if(floor(?md/32) - floor(?md/(2*32))*2,1,0)+ if(floor(?md/64) - floor(?md/(2*64))*2,1,0)+ if(floor(?md/128) - floor(?md/(2*128))*2,1,0)+ if(floor(?md/256) - floor(?md/(2*256))*2,1,0) as ?nshift) WHERE { ?pdp1 pdp1:currentdata ?md. } } } } } } # code 667 Shift AC and IO Left OPTIONAL { ?pdp1 pdp1:currentdata ?md. FILTER(floor(?md/512)=439) { SELECT (xsd:integer(if(floor(?ac/131072),?ac*?mul - floor((?ac*?mul)/131072)*131072 + floor(?io/?div) + 131072,?ac*?mul - floor((?ac*?mul)/131072)*131072 + floor(?io/?div))) as ?acnew) (xsd:integer(if(floor(?ac/131072),?io*?mul - floor((?io*?mul)/262144)*262144 + ?mul-1,?io*?mul - floor((?io*?mul)/262144)*262144)) as ?ionew) (0 as ?statenew) WHERE { ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pow1 pdp1:exp ?nshift. ?pow1 pdp1:pow2 ?mul. ?pow2 pdp1:exp ?nshift1. ?pow2 pdp1:pow2 ?div. { SELECT ?nshift (18-?nshift as ?nshift1) WHERE { SELECT (if(floor(?md/1) - floor(?md/(2*1))*2,1,0)+ if(floor(?md/2) - floor(?md/(2*2))*2,1,0)+ if(floor(?md/4) - floor(?md/(2*4))*2,1,0)+ if(floor(?md/8) - floor(?md/(2*8))*2,1,0)+ if(floor(?md/16) - floor(?md/(2*16))*2,1,0)+ if(floor(?md/32) - floor(?md/(2*32))*2,1,0)+ if(floor(?md/64) - floor(?md/(2*64))*2,1,0)+ if(floor(?md/128) - floor(?md/(2*128))*2,1,0)+ if(floor(?md/256) - floor(?md/(2*256))*2,1,0) as ?nshift) WHERE { ?pdp1 pdp1:currentdata ?md. } } } } } } # code 671 Rotate Acumulator Right OPTIONAL { ?pdp1 pdp1:currentdata ?md. FILTER(floor(?md/512)=441) { SELECT (xsd:integer(?ac*?div - floor((?ac*?div)/262144)*262144 + floor(?ac/?mul)) as ?acnew) (?io as ?ionew) (0 as ?statenew) WHERE { ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pow1 pdp1:exp ?nshift. ?pow1 pdp1:pow2 ?mul. ?pow2 pdp1:exp ?nshift1. ?pow2 pdp1:pow2 ?div. { SELECT ?nshift (18-?nshift as ?nshift1) WHERE { SELECT (if(floor(?md/1) - floor(?md/(2*1))*2,1,0)+ if(floor(?md/2) - floor(?md/(2*2))*2,1,0)+ if(floor(?md/4) - floor(?md/(2*4))*2,1,0)+ if(floor(?md/8) - floor(?md/(2*8))*2,1,0)+ if(floor(?md/16) - floor(?md/(2*16))*2,1,0)+ if(floor(?md/32) - floor(?md/(2*32))*2,1,0)+ if(floor(?md/64) - floor(?md/(2*64))*2,1,0)+ if(floor(?md/128) - floor(?md/(2*128))*2,1,0)+ if(floor(?md/256) - floor(?md/(2*256))*2,1,0) as ?nshift) WHERE { ?pdp1 pdp1:currentdata ?md. } } } } } } # code 672 Rotate In-Out Register Right OPTIONAL { ?pdp1 pdp1:currentdata ?md. FILTER(floor(?md/512)=442) { SELECT (?ac as ?acnew) (xsd:integer(?io*?div - floor((?io*?div)/262144)*262144 + floor(?io/?mul)) as ?ionew) (0 as ?statenew) WHERE { ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pow1 pdp1:exp ?nshift. ?pow1 pdp1:pow2 ?mul. ?pow2 pdp1:exp ?nshift1. ?pow2 pdp1:pow2 ?div. { SELECT ?nshift (18-?nshift as ?nshift1) WHERE { SELECT (if(floor(?md/1) - floor(?md/(2*1))*2,1,0)+ if(floor(?md/2) - floor(?md/(2*2))*2,1,0)+ if(floor(?md/4) - floor(?md/(2*4))*2,1,0)+ if(floor(?md/8) - floor(?md/(2*8))*2,1,0)+ if(floor(?md/16) - floor(?md/(2*16))*2,1,0)+ if(floor(?md/32) - floor(?md/(2*32))*2,1,0)+ if(floor(?md/64) - floor(?md/(2*64))*2,1,0)+ if(floor(?md/128) - floor(?md/(2*128))*2,1,0)+ if(floor(?md/256) - floor(?md/(2*256))*2,1,0) as ?nshift) WHERE { ?pdp1 pdp1:currentdata ?md. } } } } } } # code 673 Rotate AC and IO Right OPTIONAL { ?pdp1 pdp1:currentdata ?md. FILTER(floor(?md/512)=443) { SELECT (xsd:integer(?io*?div - floor((?io*?div)/262144)*262144 + floor(?ac/?mul)) as ?acnew) (xsd:integer(?ac*?div - floor((?ac*?div)/262144)*262144 + floor(?io/?mul)) as ?ionew) (0 as ?statenew) WHERE { ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pow1 pdp1:exp ?nshift. ?pow1 pdp1:pow2 ?mul. ?pow2 pdp1:exp ?nshift1. ?pow2 pdp1:pow2 ?div. { SELECT ?nshift (18-?nshift as ?nshift1) WHERE { SELECT (if(floor(?md/1) - floor(?md/(2*1))*2,1,0)+ if(floor(?md/2) - floor(?md/(2*2))*2,1,0)+ if(floor(?md/4) - floor(?md/(2*4))*2,1,0)+ if(floor(?md/8) - floor(?md/(2*8))*2,1,0)+ if(floor(?md/16) - floor(?md/(2*16))*2,1,0)+ if(floor(?md/32) - floor(?md/(2*32))*2,1,0)+ if(floor(?md/64) - floor(?md/(2*64))*2,1,0)+ if(floor(?md/128) - floor(?md/(2*128))*2,1,0)+ if(floor(?md/256) - floor(?md/(2*256))*2,1,0) as ?nshift) WHERE { ?pdp1 pdp1:currentdata ?md. } } } } } } # code 675 Shift Acumulator Right OPTIONAL { ?pdp1 pdp1:currentdata ?md. FILTER(floor(?md/512)=445) { SELECT (xsd:integer(if(floor(?ac/131072),floor(?ac/?mul) + (?mul-1)*?div,floor(?ac/?mul))) as ?acnew) (?io as ?ionew) (0 as ?statenew) WHERE { ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pow1 pdp1:exp ?nshift. ?pow1 pdp1:pow2 ?mul. ?pow2 pdp1:exp ?nshift1. ?pow2 pdp1:pow2 ?div. { SELECT ?nshift (18-?nshift as ?nshift1) WHERE { SELECT (if(floor(?md/1) - floor(?md/(2*1))*2,1,0)+ if(floor(?md/2) - floor(?md/(2*2))*2,1,0)+ if(floor(?md/4) - floor(?md/(2*4))*2,1,0)+ if(floor(?md/8) - floor(?md/(2*8))*2,1,0)+ if(floor(?md/16) - floor(?md/(2*16))*2,1,0)+ if(floor(?md/32) - floor(?md/(2*32))*2,1,0)+ if(floor(?md/64) - floor(?md/(2*64))*2,1,0)+ if(floor(?md/128) - floor(?md/(2*128))*2,1,0)+ if(floor(?md/256) - floor(?md/(2*256))*2,1,0) as ?nshift) WHERE { ?pdp1 pdp1:currentdata ?md. } } } } } } # code 676 Shift In-Out Register Right OPTIONAL { ?pdp1 pdp1:currentdata ?md. FILTER(floor(?md/512)=446) { SELECT (?ac as ?acnew) (xsd:integer(if(floor(?io/131072),floor(?io/?mul) + (?mul-1)*?div,floor(?io/?mul))) as ?ionew) (0 as ?statenew) WHERE { ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pow1 pdp1:exp ?nshift. ?pow1 pdp1:pow2 ?mul. ?pow2 pdp1:exp ?nshift1. ?pow2 pdp1:pow2 ?div. { SELECT ?nshift (18-?nshift as ?nshift1) WHERE { SELECT (if(floor(?md/1) - floor(?md/(2*1))*2,1,0)+ if(floor(?md/2) - floor(?md/(2*2))*2,1,0)+ if(floor(?md/4) - floor(?md/(2*4))*2,1,0)+ if(floor(?md/8) - floor(?md/(2*8))*2,1,0)+ if(floor(?md/16) - floor(?md/(2*16))*2,1,0)+ if(floor(?md/32) - floor(?md/(2*32))*2,1,0)+ if(floor(?md/64) - floor(?md/(2*64))*2,1,0)+ if(floor(?md/128) - floor(?md/(2*128))*2,1,0)+ if(floor(?md/256) - floor(?md/(2*256))*2,1,0) as ?nshift) WHERE { ?pdp1 pdp1:currentdata ?md. } } } } } } # code 677 Shift AC and IO Right OPTIONAL { ?pdp1 pdp1:currentdata ?md. FILTER(floor(?md/512)=447) { SELECT (xsd:integer(if(floor(?ac/131072),floor(?ac/?mul) + (?mul-1)*?div,floor(?ac/?mul))) as ?acnew) (xsd:integer(floor(?io/?mul) + ?ac*?div - floor((?ac*?div)/262144)*262144) as ?ionew) (0 as ?statenew) WHERE { ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pow1 pdp1:exp ?nshift. ?pow1 pdp1:pow2 ?mul. ?pow2 pdp1:exp ?nshift1. ?pow2 pdp1:pow2 ?div. { SELECT ?nshift (18-?nshift as ?nshift1) WHERE { SELECT (if(floor(?md/1) - floor(?md/(2*1))*2,1,0)+ if(floor(?md/2) - floor(?md/(2*2))*2,1,0)+ if(floor(?md/4) - floor(?md/(2*4))*2,1,0)+ if(floor(?md/8) - floor(?md/(2*8))*2,1,0)+ if(floor(?md/16) - floor(?md/(2*16))*2,1,0)+ if(floor(?md/32) - floor(?md/(2*32))*2,1,0)+ if(floor(?md/64) - floor(?md/(2*64))*2,1,0)+ if(floor(?md/128) - floor(?md/(2*128))*2,1,0)+ if(floor(?md/256) - floor(?md/(2*256))*2,1,0) as ?nshift) WHERE { ?pdp1 pdp1:currentdata ?md. } } } } } } # invalid shift OPTIONAL { ?pdp1 pdp1:currentdata ?md. FILTER(floor(?md/512) NOT IN (433,434,435,437,438,439,441,442,443,445,446,447)) { SELECT (?ac as ?acnew) (?io as ?ionew) (3 as ?statenew) WHERE { ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. } } } } } # LAW OPTIONAL { select (if(?ib,?ycomplement,xsd:integer(?y)) as ?acnew) (?io as ?ionew) (?pc as ?pcnew) (?ov as ?ovnew) (?flags as ?flagsnew) (0 as ?statenew) (?md as ?mdnew) (?cmd as ?cmdnew) WHERE { ?pdp1 pdp1:currentcommand ?cmd. FILTER(?cmd=28) ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:state ?state. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pdp1 pdp1:programmcounter ?pc. ?pdp1 pdp1:overflowbit ?ov. ?pdp1 pdp1:flags ?flags. { SELECT (floor(?md/4096)-floor(?md/8192)*2 as ?ib) (?md-floor(?md/4096)*4096 as ?y) ( if( floor(?md/1) - floor(?md/(2*1))*2 = 1,0,1) +if( floor(?md/2) - floor(?md/(2*2))*2 = 1,0,2) +if( floor(?md/4) - floor(?md/(2*4))*2 = 1,0,4) +if( floor(?md/8) - floor(?md/(2*8))*2 = 1,0,8) +if( floor(?md/16) - floor(?md/(2*16))*2 = 1,0,16) +if( floor(?md/32) - floor(?md/(2*32))*2 = 1,0,32) +if( floor(?md/64) - floor(?md/(2*64))*2 = 1,0,64) +if( floor(?md/128) - floor(?md/(2*128))*2 = 1,0,128) +if( floor(?md/256) - floor(?md/(2*256))*2 = 1,0,256) +if( floor(?md/512) - floor(?md/(2*512))*2 = 1,0,512) +if( floor(?md/1024) - floor(?md/(2*1024))*2 = 1,0,1024) +if( floor(?md/2048) - floor(?md/(2*2048))*2 = 1,0,2048) +4096+8192+16384+32768+65536+131072 as ?ycomplement) WHERE { ?pdp1 pdp1:currentdata ?md. } } } } # IOT 011 (load control word into io register) OPTIONAL { select (?ac as ?acnew) (?control as ?ionew) (?pc as ?pcnew) (?ov as ?ovnew) (?flags as ?flagsnew) (0 as ?statenew) (?md as ?mdnew) (?cmd as ?cmdnew) WHERE { ?pdp1 pdp1:currentcommand ?cmd. ?pdp1 pdp1:currentdata ?md. FILTER(?cmd=29 && ?md-floor(?md/64)*64=9) ?pdp1 pdp1:state ?state. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pdp1 pdp1:programmcounter ?pc. ?pdp1 pdp1:overflowbit ?ov. ?pdp1 pdp1:flags ?flags. ?pdp1 pdp1:control ?control. } } # IOT 7 (draw point on CRT) OPTIONAL { select (?ac as ?acnew) (?io as ?ionew) (?pc as ?pcnew) (?ov as ?ovnew) (?flags as ?flagsnew) (0 as ?statenew) (?md as ?mdnew) (?cmd as ?cmdnew) (xsd:integer(floor((?ac+131072-floor((?ac+131072)/262144)*262144)/512)) as ?xcoordnew) (xsd:integer(floor((?io+131072-floor((?io+131072)/262144)*262144)/512)) as ?ycoordnew) ?numpoints ?numpointsnew WHERE { ?pdp1 pdp1:currentcommand ?cmd. ?pdp1 pdp1:currentdata ?md. FILTER(?cmd=29 && ?md-floor(?md/64)*64=7) ?pdp1 pdp1:state ?state. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pdp1 pdp1:programmcounter ?pc. ?pdp1 pdp1:overflowbit ?ov. ?pdp1 pdp1:flags ?flags. { SELECT ?numpoints (?numpoints+1 as ?numpointsnew) WHERE { ?pdp1 pdp1:numpoints ?numpoints. } } } } # IOT other OPTIONAL { select (?ac as ?acnew) (?io as ?ionew) (?pc as ?pcnew) (?ov as ?ovnew) (?flags as ?flagsnew) (0 as ?statenew) (?md as ?mdnew) (?cmd as ?cmdnew) WHERE { ?pdp1 pdp1:currentcommand ?cmd. ?pdp1 pdp1:currentdata ?md. FILTER(?cmd=29 && ?md-floor(?md/64)*64 NOT IN (9,7)) ?pdp1 pdp1:state ?state. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pdp1 pdp1:programmcounter ?pc. ?pdp1 pdp1:overflowbit ?ov. ?pdp1 pdp1:flags ?flags. } } # OPR # FIXME: this is incomplete OPTIONAL { select (if(?delac,if(?cac,262143,0),if(?cac,?accomplement,?ac)) as ?acnew) (if(?delio,0,?io) as ?ionew) (?pc as ?pcnew) (?ov as ?ovnew) ( if(?y7=0, ?flags, if(?setflags, if(?y7=7, 63, if(floor(?flags/?flag)-floor(?flags/(2*?flag))*2,?flags,?flags+?flag) ), if(?y7=7, 0, if(floor(?flags/?flag)-floor(?flags/(2*?flag))*2,?flags-?flag,?flags) ) ) ) as ?flagsnew) (if(?hlt,4,0) as ?statenew) (?md as ?mdnew) (?cmd as ?cmdnew) WHERE { ?pdp1 pdp1:currentcommand ?cmd. FILTER(?cmd=31) ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:state ?state. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pdp1 pdp1:programmcounter ?pc. ?pdp1 pdp1:overflowbit ?ov. ?pdp1 pdp1:flags ?flags. ?pow pdp1:exp ?y7minus1. ?pow pdp1:pow2 ?flag. { SELECT (floor(?md/8)-floor(?md/(2*8))*2 as ?setflags) (floor(?md/128)-floor(?md/(2*128))*2 as ?delac) (floor(?md/256)-floor(?md/(2*256))*2 as ?hlt) (floor(?md/512)-floor(?md/(2*512))*2 as ?cac) (floor(?md/2048)-floor(?md/(2*2048))*2 as ?delio) (?md-floor(?md/8)*8 as ?y7) (xsd:integer(if(?md-floor(?md/8)*8,?md-floor(?md/8)*8-1,0)) as ?y7minus1) ( if( floor(?ac/1) - floor(?ac/(2*1))*2 = 1,0,1) +if( floor(?ac/2) - floor(?ac/(2*2))*2 = 1,0,2) +if( floor(?ac/4) - floor(?ac/(2*4))*2 = 1,0,4) +if( floor(?ac/8) - floor(?ac/(2*8))*2 = 1,0,8) +if( floor(?ac/16) - floor(?ac/(2*16))*2 = 1,0,16) +if( floor(?ac/32) - floor(?ac/(2*32))*2 = 1,0,32) +if( floor(?ac/64) - floor(?ac/(2*64))*2 = 1,0,64) +if( floor(?ac/128) - floor(?ac/(2*128))*2 = 1,0,128) +if( floor(?ac/256) - floor(?ac/(2*256))*2 = 1,0,256) +if( floor(?ac/512) - floor(?ac/(2*512))*2 = 1,0,512) +if( floor(?ac/1024) - floor(?ac/(2*1024))*2 = 1,0,1024) +if( floor(?ac/2048) - floor(?ac/(2*2048))*2 = 1,0,2048) +if( floor(?ac/4096) - floor(?ac/(2*4096))*2 = 1,0,4096) +if( floor(?ac/8192) - floor(?ac/(2*8192))*2 = 1,0,8192) +if( floor(?ac/16384) - floor(?ac/(2*16384))*2 = 1,0,16384) +if( floor(?ac/32768) - floor(?ac/(2*32768))*2 = 1,0,32768) +if( floor(?ac/65536) - floor(?ac/(2*65536))*2 = 1,0,65536) +if( floor(?ac/131072) - floor(?ac/(2*131072))*2 = 1,0,131072) as ?accomplement) WHERE { ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:accumulator ?ac. } } } } # illegal command OPTIONAL { select (?ac as ?acnew) (?io as ?ionew) (?pc as ?pcnew) (?ov as ?ovnew) (?flags as ?flagsnew) (3 as ?statenew) (?md as ?mdnew) (?cmd as ?cmdnew) WHERE { ?pdp1 pdp1:currentcommand ?cmd. FILTER(?cmd NOT IN (1,2,3,4,7,8,9,10,11,13,14,16,17,18,19,20,21,22,23,24,25,26,27,28,29,31)) ?pdp1 pdp1:currentdata ?md. ?pdp1 pdp1:state ?state. ?pdp1 pdp1:accumulator ?ac. ?pdp1 pdp1:ioregister ?io. ?pdp1 pdp1:programmcounter ?pc. ?pdp1 pdp1:overflowbit ?ov. ?pdp1 pdp1:flags ?flags. } } } } } } }