1
0
mirror of https://github.com/PDP-10/its.git synced 2026-02-17 05:07:20 +00:00

OCM chess.

This commit is contained in:
Lars Brinkhoff
2018-02-16 12:04:18 +01:00
committed by Eric Swenson
parent 289754fb69
commit c6ae98e915
10 changed files with 26607 additions and 1 deletions

6541
src/chprog/ccheop.484 Executable file

File diff suppressed because it is too large Load Diff

395
src/chprog/chnet.29 Executable file
View File

@@ -0,0 +1,395 @@
;CHAOSNET ROUTINES, BASICALLY FROM MC:MOON;NNETWK >
.INSRT SYSTEM; CHSDEF >
DEFINE SYSCAL NAME,ARGS
.CALL [SETZ ? SIXBIT /NAME/ ? ARGS ((SETZ))]
TERMIN
;CHESS PACKET TYPES
PKTPOS==1 ;SEND OVER POSITION
PKTRQR==2 ;REQUEST RESULT
PKTRES==3 ;RETURNNED RESULTS
PKTBKS==4 ;CLOSE RING AND START BACKGROUND
;FORMATING OF PACKET FOR TRANSFERING A CHESS POSITION:
$CXPKT==242000,,%CPKDT ;PACKET TYPE
$CXBFM==042000,,%CPKDT ;CHEOPS BUFFER MEMORY LOCN
$CXPRI==242000,,%CPKDT+1 ;PRIORITY OPTION
$CXMOD==042000,,%CPKDT+1 ;MODES (WD2 OF CHEOPS ARG BLOCK)
$CXSTD==242000,,%CPKDT+2 ;SETD (WD3)
$CXALP==042000,,%CPKDT+2 ;ALPHA (WD4)
$CXBET==242000,,%CPKDT+3 ;BETA (WD5)
$CXFLG==042000,,%CPKDT+3 ;FLAGWORD (WD6)
$CXCHN==242000,,%CPKDT+4 ;CHAIN WORD (WD7)
$CXPOS==$CXCHN ;FIRST DATA WORD OF POSITION. NOTE IDPB THIS..
%CXPKL==<10.*2>+<33.*2> ;MAX BYTE LENGTH OF MESSAGE. THIS IS HOW LONG POSITION PACKETS
; ACTUALLY ARE
;FORMATTING FOR CHEOPS RESULT PACKET
$CRPKT==242000,,%CPKDT ;PACKET TYPE, SAME AS ABOVE
$CRBFM==042000,,%CPKDT ;BUFFER ADR, SAME AS ABOVE
$CRSTD==242000,,%CPKDT+1 ;SETD FROM WD3 OF PARAM BLOCK
$CRPAD==042000,,%CPKDT+1 ;PADDING TO MAKE FOLLOWING ALIGN ON PDP10 WORD BOUNDARIES.
;MUST ALIGN ON WORD BOUNDARY
$CRSTA==242000,,%CPKDT+2 ;WD16 STATA (LOW ORDER)
$CRSTB==042000,,%CPKDT+2 ;WD17 STATB (HIGH ORDER)
$CRVAL==242000,,%CPKDT+3 ;WD20 VALUE
$CRIVL==042000,,%CPKDT+3 ;WD21 INITIAL VALUE
$CRPV1==%CPKDT+4 ;WD22,23 PV1
$CRPV2==%CPKDT+5 ;WD24,25 PV2
$CRPV3==%CPKDT+6 ;WD26,27 PV3
$CRPH1==%CPKDT+7 ;WD30,31 PV1 WITH HIM TO MOVE
$CRPH2==%CPKDT+10 ;WD32,33 PV2 "
$CRPH3==%CPKDT+11 ;WD34,35 PV3 "
$CRHVL==242000,,%CPKDT+12 ;VALUE WITH HIM TO MOVE
;FORMATTING FOR CLOSE RING AND START BACKGROUND PACKET
$CCPKT==242000,,%CPKDT ;PACKET TYPE, SAME AS ABOVE
$CCBFM==042000,,%CPKDT ;BUFFER ADR, HEAD OF RING
$CCBF1==242000,,%CPKDT+1 ;BUFFER ADR OF BLOCK TO RING TO HEAD BUFFER
;PV WITH OTHER SIDE TO MOVE
;CHAOS NETWORK CONNECT ROUTINE
;
;Call:
; MOVEI B,host ;host number to connect to
; MOVEI C,contact name ;an ASCIZ string
; MOVEI D,window size
; PUSHJ P,CHACON
; lossage ;you may call ANALYZE to get an error message.
; ;If $$ERRHAN is nonzero, we call ANALYZE for you.
;
;Clobbers only T and TT.
;
.VECTOR PKTBUF(%CPMXW) ;Buffer used by Open, Close, and Analyze
CHACON: MOVEI TT,%CORFC
SETZM PKTBUF
MOVE T,[PKTBUF,,PKTBUF+1]
BLT T,PKTBUF+%CPMXW-1 ;For extra luck, clear the packet buffer
DPB B,[$CPKDA+PKTBUF] ;Destination host
DPB TT,[$CPKOP+PKTBUF]
PUSHJ P,CHSTNG ;Store string from C
SYSCAL CHAOSO,[MOVEI CHNETI ? MOVEI CHNETO] ;Assign Chaos index
JRST CHACNL
SYSCAL PKTIOT,[MOVEI CHNETO ? MOVEI PKTBUF] ;Send RFC or LSN
.LOSE 1000
MOVEI TT,30.*30. ;30-second timeout
SKIPE DEBUG
MOVSI TT,177777 ;Or infinite, in debug mode
LDB T,[$CPKOP+PKTBUF]
CAIE T,%COLSN ;Get the boring state
SKIPA T,[%CSRFS]
MOVEI T,%CSLSN
SYSCAL NETBLK,[MOVEI CHNETO ? T ? TT ? MOVEM TT] ;Await completion of connection
JRST CHACNL
CAIE TT,%CSOPN
JRST CHACNL
JRST POPJ1 ;CHACON done
CHACNL: ;CHACON lost
MOVEI A,CHNETI
PUSHJ P,ANALYZE
JFCL ;SKIPS SOMETIMES
.CLOSE CHNETI,
POPJ P,
;Send CLOSE packet, then close connection
;Call: MOVEI C,message ;asciz string
; PUSHJ P,CHACLS
; lossage
CHACLS: MOVEI T,%COCLS
DPB T,[$CPKOP+PKTBUF]
PUSHJ P,CHSTNG
SYSCAL PKTIOT,[MOVEI CHNETO ? MOVEI PKTBUF]
SKIPA
AOS (P)
.CLOSE CHNETI,
.CLOSE CHNETO,
JRST POPJ1
CHSDTO: MOVEI T,%CODAT ;FINISH FORMATING AND SEND DATA PACKET
DPB T,[$CPKOP+PKTBUF] ;-NOTE--BYTE LENGTH SHOULD ALREADY BE IN [$CPKNB+PKTBUF]
SYSCAL PKTIOT,[MOVEI CHNETO ? MOVEI PKTBUF]
.VALUE
POPJ P,
;Store string from C into PKTBUF. Bash T, TT
CHSTNG: PUSH P,B
PUSH P,C
MOVE B,[440800,,PKTBUF+%CPKDT]
MOVEI TT,0
HRLI C,440700
CHSTG1: ILDB T,C
JUMPE T,CHSTG2
IDPB T,B
CAIGE TT,%CPMXC-1
AOJA TT,CHSTG1
CHSTG2: DPB TT,[$CPKNB+PKTBUF]
POP P,C
POP P,B
POPJ P,
; Network error analysis.
;Call: MOVEI A,pin ;channel number that is losing
; PUSHJ P,ANALYZE
; .VALUE ;always skip-returns
;
;Clobbers only T and TT. Uses the PUTCHR routine to type out its messages.
.VECTOR WHYINT(4) ;Cruft returned from WHYINT
ANALYZE:
AOS (P)
PUSH P,B
PUSH P,C
ANALN1: SYSCAL WHYINT,[A ? MOVEM T ;Get device type
MOVEM WHYINT ? MOVEM WHYINT+1 ? MOVEM WHYINT+2 ? MOVEM WHYINT+3 ]
MOVEI T,0 ;Channel not open, probably
CAIN T,%WYCHA
JRST ANLCHA ;Chaos net channel open, further info available
SYSCAL USRVAR,[MOVEI %JSELF ? MOVEI .RIOS(A) ? MOVEM T] ;Get I/O status wd for channel
.LOSE 1000
LDB TT,[220600,,T] ;only the open-loss code is available
CAIE TT,%ENAPP ;Other end of pipeline gone, or
CAIN TT,%ENSDR ;No such directory
JRST [ JSP TT,SPEAK ;means destination host dead
ASCIZ\Destination Host dead.\ ]
CAIN TT,%EFLDV ;Device full (this one applies to both Arpanet & Chaos net)
JRST [ JSP TT,SPEAK
ASCIZ \All sockets in use.\ ]
CAIN TT,%ENRDV ;Device not ready
JRST [ JSP TT,SPEAK
ASCIZ \Network down.\ ]
CAIN TT,%ESCO ;Self-contradictory open
JRST [ JSP TT,SPEAK
ASCIZ \Connection cannot be opened because of inconsistent byte sizes.\ ]
.CALL [ SETZ ;Some other error - get ITS error message
'IOPUSH
SETZ A ]
.LOSE 1000
.CALL [ SETZ
SIXBIT/OPEN/
MOVEI (A) ;here we rely on .UAI=0
['ERR,,]
MOVEI 3
SETZ T ]
.LOSE 1400
MOVEI TT,[ASCIZ\? Internal error - \]
PUSHJ P,ZTYPE
ANAL0: .CALL [ SETZ ;copy error message to output device
'IOT,,
MOVEI (A)
SETZM T ]
.LOSE 1000
CAIGE T,40
JRST ANALYX
PUSHJ P,PUTCHR
JRST ANAL0
ANALYX: .CALL [ SETZ
SIXBIT/IOPOP/
SETZI (A) ]
.LOSE 1000
ANALX: MOVEI TT,[ASCIZ /
/]
PUSHJ P,ZTYPE
POP P,C
POP P,B
POPJ P,
ANALT: MOVEI TT,[ASCIZ /Attempt to open connection timed out./]
SPEAK: PUSHJ P,ZTYPE ;send message from TT
JRST ANALX ; and return
;Analyze on chaos channel, still open
ANLCHA: MOVE TT,WHYINT ;Connection state
CAIE TT,%CSLOS
CAIN TT,%CSCLS
JRST ANLCH1
CAIE TT,%CSINC
JRST ANLCH0 ;Still open
JSP TT,SPEAK
ASCIZ /Connection broken -- foreign host not communicating./
ANLCH0: PUSH P,CHSTTB(TT)
MOVEI TT,[ASCIZ/Timed-out while connection /]
PUSHJ P,ZTYPE
POP P,TT
JRST SPEAK
CHSTTB: [ASCIZ/closed/]
[ASCIZ/listening/]
[ASCIZ/has received RFC/]
[ASCIZ/has sent RFC/]
[ASCIZ/open/]
[ASCIZ/lost/]
[ASCIZ/broken/]
ANLCH1: PUSH P,CHSTTB(TT)
MOVEI TT,[ASCIZ/Connection /]
PUSHJ P,ZTYPE
POP P,TT
PUSHJ P,ZTYPE
MOVEI TT,[ASCIZ/ -- /]
PUSHJ P,ZTYPE
HLRZ TT,WHYINT+1 ;get number of input packets
ANLCH2: SOJL TT,ANALX ;scan input looking for CLS, LOS
HLRZ T,WHYINT+3 ;Pick up input channel number
SYSCAL PKTIOT,[T ? MOVEI PKTBUF]
.LOSE 1000
LDB T,[$CPKOP+PKTBUF]
CAIE T,%COCLS
CAIN T,%COLOS
SKIPA B,[440800,,PKTBUF+%CPKDT]
JRST ANLCH2
LDB C,[$CPKNB+PKTBUF]
ANLCH3: SOJL C,ANALX
ILDB T,B
PUSHJ P,PUTCHR
JRST ANLCH3
ZTYPE: PUSH P,B
PUSH P,A
MOVEI B,TYO
SOUT (TT)
POP P,A
POP P,B
POPJ P,
PUTCHR: PUSH P,A
MOVE A,T
PUSHJ P,TYO
POP P,A
POPJ P,
DEBUG: 0 ;NON-ZERO -> INIFINITE TIMEOUT ON RFC
NSTRT: MOVEI C,CBABL ;PRIORITY BLOCK, WANT 16 BIT WORD ADR
MOVEI T,CHXTB
MOVEI D,1 ;USE PRIORITY POINTER
CXTPO1: PUSHJ P,CXNPOS
MOVEI ZR,%CXPKL
DPB ZR,[$CPKNB+PKTBUF] ;SET # BYTES TO SOMETHING BIG ENUF
PUSHJ P,CHSDTO
POPJ P,
CXTPOS: MOVEI D,2 ;ADD TO BACKGROUND
JRST CXTPO1
CXNPOS: MOVEI ZR,PKTPOS ;FOLLOWING ROUTINE SEMI-COMPATABLE WITH CXBPOS
DPB ZR,[$CXPKT+PKTBUF] ;CHEOPS PACKET TYPE
MOVE ZR,C
LSH ZR,1 ;LISPM ADDRESS 1 UNIBUS LOCN PER ADR, NOT TWO
DPB ZR,[$CXBFM+PKTBUF] ;CHEOPS BUFFER ADR
DPB D,[$CXPRI+PKTBUF] ;PRIORITY OPTION
MOVE TT,[$CXPOS+PKTBUF]
MOVE B,[-NPC,,1]
CXPK1: SKIPN A,PIECEL(B)
JRST CXPK2
SKIPGE D,CHEOPC(B)
JRST [ LDB ZR,[PTID,,PIECE(B)]
CAIE ZR,PID
TRO D,40 ;THIS P PROMOTED
JRST .+1]
MOVE ZR,CHEOSQ(A)
DPB D,[101000,,ZR]
IDPB ZR,TT
CXPK2: AOBJN B,CXPK1
MOVEI ZR,0
IDPB ZR,TT ;TERMINATE LIST
MOVE ZR,-1(T) ;BITS AND MODES WD
DPB ZR,[$CXMOD+PKTBUF]
MOVE ZR,-5(T) ;DEPTH
DPB ZR,[$CXSTD+PKTBUF]
MOVE ZR,-4(T) ;INITIAL ALPHA
DPB ZR,[$CXALP+PKTBUF]
MOVE ZR,-3(T) ;INITIAL BETA
DPB ZR,[$CXBET+PKTBUF]
MOVE ZR,-2(T) ;INITIAL FLAGWORD
DPB ZR,[$CXFLG+PKTBUF]
MOVE ZR,-6(T) ;CHAIN WORD
DPB ZR,[$CXCHN+PKTBUF]
POPJ P,
CXBFNT: MOVE C,CBBIP ;CLOSE RING, AND START BACKGROUND SEARCH
LSH C,1
MOVE T,CBBBP
SUBI T,40
LSH T,1
MOVEI ZR,PKTBKS
DPB ZR,[$CCPKT+PKTBUF]
DPB C,[$CCBFM+PKTBUF]
DPB T,[$CCBF1+PKTBUF]
MOVEI ZR,3*2
DPB ZR,[$CPKNB+PKTBUF] ;DATA BYTES IN PACKET
PUSHJ P,CHSDTO
POPJ P,
;REQUEST RESULTS FROM CHEOPS
NGTV: MOVEI C,CBABL
CXGVN: MOVEI ZR,PKTRQR
DPB ZR,[$CXPKT+PKTBUF]
MOVE ZR,C
LSH ZR,1
DPB ZR,[$CXBFM+PKTBUF]
MOVEI ZR,2*2
DPB ZR,[$CPKNB+PKTBUF] ;PACKET DATA LENGTH IN BYTES
PUSHJ P,CHSDTO ;SEND REQUEST FOR RESULTS.
SYSCAL PKTIOT,[MOVEI CHNETI ? MOVEI PKTBUF]
;FOLLOWING SEMI-COMPATABLE WITH HCHGVR
LDB T,[$CPKOP+PKTBUF]
CAIE T,%CODAT
.VALUE ;NOT DATA PACKET
LDB T,[$CXPKT+PKTBUF]
CAIE T,PKTRES
.VALUE ;NOT RESULT PACKET
LDB J,[$CRSTD+PKTBUF]
MOVEM J,HCHSTD
MOVEM J,CHXSTD
MOVE J,$CRPV1+PKTBUF
SOSL HCHSTD
TLNN J,777774
JRST [ CLEARM CHXPV1
CLEARM CHXPV2
CLEARM CHXPV3
JRST NTGV1]
PUSHJ P,HCHMMV
MOVEM R,CHXPV1
MOVE J,$CRPV2+PKTBUF
SOSL HCHSTD
TLNN J,777774
JRST [ CLEARM CHXPV2
CLEARM CHXPV3
JRST NTGV1]
PUSHJ P,HCHMMV
MOVEM R,CHXPV2
MOVE J,$CRPV3+PKTBUF
SOSL HCHSTD
TLNN J,777774
JRST [ CLEARM CHXPV3
JRST NTGV1]
PUSHJ P,HCHMMV
MOVEM R,CHXPV3
NTGV1: LDB R,[$CRIVL+PKTBUF]
TRNE R,100000
ORCMI R,77777
MOVEM R,CHXIMB
LDB R,[$CRSTA+PKTBUF]
LDB J,[$CRSTB+PKTBUF]
LSH J,20
IOR J,R
MOVEM J,CHXSTA
LDB R,[$CRVAL+PKTBUF]
TRNE R,100000
ORCMI R,77777
MOVEM R,CHXVAL
POPJ P,

8093
src/chprog/ocaux.224 Executable file

File diff suppressed because it is too large Load Diff

821
src/chprog/ocdagb.31 Executable file
View File

@@ -0,0 +1,821 @@
; TV CHESSBOARD, INTENDED TO BE .INSRT'ED
IFN TS-DECTS,[
;VARIABLES WITH PREFIX Z ARE FOR FONT 1 (SMALL BOARD) MODE
TVBBAS==370*2000 ;BASE OF VIDEO BUFFER
NWSCNL==22 ;# WDS / SCAN LINE
TVSQW==50. ;# BITS SQUARE IS WIDE FONT 0
ZTVSQW==30. ; FONT 1
TVBBW==TVSQW*8 ;# BITS BASIC BOARD WIDE
ZTVBBW==ZTVSQW*8
TVBDRW==3 ;# BITS BOARDERS WIDE
NWBEDG==<TVBBW+2*TVBDRW>/32. ;# FULL WORDS IN BOTTOM BORDER
ZNWBEDG==<ZTVBBW+2*TVBDRW>/32.
NBBEDG==<TVBBW+2*TVBDRW>-NWBEDG*32. ;# EXTRA BITS IN BOTTOM BORDER
ZNBBEDG==<ZTVBBW+2*TVBDRW>-ZNWBEDG*32.
BLDGP==<4_12.>+NBBEDG*100,,NWSCNL-NWBEDG-1 ;BP TO LEFT EDGE OF BOTTOM BORDER
ZBLDGP==<4_12.>+ZNBBEDG*100,,NWSCNL-ZNWBEDG-1
TVLBTS==1100-TVBBW-2*TVBDRW ;BITS TO LEFT OF BOARD
ZTVLBTS==1100-ZTVBBW-2*TVBDRW
TVLWDS==TVLBTS/32. ;# FULL WORDS TO LEFT OF BORDER
ZTVLWDS==ZTVLBTS/32.
TLEBTS==TVLBTS-TVLWDS*32. ;# EXTRA BITS TO LEFT OF BORDER
ZTLEBTS==ZTVLBTS-ZTVLWDS*32.
IFL TLEBTS-TVBDRW,.ERR SPIT ACROSS PDP-10 WORD BOUNDARY
IFL ZTLEBTS-TVBDRW,.ERR SMALL FONT LEFT EDGE SPLIT ACROSS PDP-10 WORD BOUNDARY
LEDGP==<<44-TLEBTS-TVBDRW>_12.>+300,,TVLWDS+NWSCNL*TVBDRW
;BYTE POINTER FOR LEFT EDGE
ZLEDGP==<<44-ZTLEBTS-TVBDRW>_12.>+300,,ZTVLWDS+NWSCNL*TVBDRW
TVCTAB: MOVE A,61C(B) ; VACANT WHITE SQ
MOVE A,153C(B) ; WP ON W SQ
MOVE A,151C(B) ; WN ON W SQ
MOVE A,147C(B) ; WB ON W SQ
MOVE A,145C(B) ; WR ON W SQ
MOVE A,143C(B) ; WQ ON W SQ
MOVE A,141C(B) ; WK ON W SQ
MOVE A,113C(B) ; BP ON W SQ
MOVE A,111C(B) ; BN ON W SQ
MOVE A,107C(B) ; BB ON W SQ
MOVE A,105C(B) ; BR ON W SQ
MOVE A,103C(B) ; BQ ON W SQ
MOVE A,101C(B) ; BK ON W SQ
JFCL [0] ; VACANT BLACK SQ
MOVE A,152C(B) ; WP ON B SQ
MOVE A,150C(B) ; WN ON B SQ
MOVE A,146C(B) ; WB ON B SQ
MOVE A,144C(B) ; WR ON B SQ
MOVE A,142C(B) ; WQ ON B SQ
MOVE A,140C(B) ; WK ON B SQ
MOVE A,112C(B) ; BP ON B SQ
MOVE A,110C(B) ; BN ON B SQ
MOVE A,106C(B) ; BB ON B SQ
MOVE A,104C(B) ; BR ON B SQ
MOVE A,102C(B) ; BQ ON B SQ
MOVE A,100C(B) ; BK ON B SQ
DSQ: MOVE TT,BOARD(A) ; DISPLAY SQ WHOSE NUMBER IS IN RIGHT HALF OF A
DSQC: JUMPLE TT,DSQ2 ;DISPLAY CONTENTS IN TT ON SQUARE IN A
HRRZ ZR,TT ;SAVE A COPY
LDB TT,[PTID,,(TT)]
ADDI TT,1
SKIPL @ZR
ADDI TT,7-1
; CAIGE TT,PIECE+20
; SKIPA TT,[1]
; MOVEI TT,7
; ADD TT,@BOARD(A)
DSQ2: SKIPE BFLIP
SETCMI A,-170(A) ; WANT INVERTED BOARD
MOVEI A,-2*BW(A)
IDIVI A,BW
MOVE T,REVERS+2(A)
SKIPE FONT
JRST ZDSQ1 ;USE 30. HIGH FONT
IMULI T,TVSQW*NWSCNL
MOVE D,REVERS(B) ;FILE NUMBER (+1)
EQVI B,(A) ;RANK NUMBER
TRNN B,1 ? SKIPA B,TVCTAB+15(TT) ? MOVE B,TVCTAB(TT)
HLLZM B,MRBTS2 ? MOVEI C,44 ? MOVE A,(B)
HRLI T,-TVSQW ? JRST @DSQ3-1(D)
DSQ3: BLOCK 10
DEFINE DPBSEQ A,B
MOVEI D,A ? JSP TT,MORBTS
IFL A-40, DPB ZR,[<44-<A>>_36+<A>_30+ZAZ2+B(T)]
IFE A-40, LSH ZR,4 ? MOVEM ZR,ZAZ2+B(T)
TERMIN
REPEAT 8,[
$$==. ? LOC DSQ3+.RPCNT ? $$ ? LOC $$
;ZZ==1100-403.+50.*.RPCNT
ZZ==1100-TVBBW-TVBDRW+TVSQW*.RPCNT ;BIT ADDRESS OF LEFT EDGE OF SQUARE
;ZZ2==760066+<ZZ-1>/40
ZAZ2=TVBBAS+NWSCNL*TVBDRW+<ZZ-1>/40 ;WORD ADDRESS
ZZ==ZZ/40*40+40-ZZ ;# BITS IN SQUARE IN ADDRESSED WD
MOVEI D,ZZ ? JSP TT,MORBTS
DPB ZR,[<400+ZZ>_30+ZAZ2(T)]
IFLE 22-ZZ, DPBSEQ 62-ZZ,1
IFG 22-ZZ, DPBSEQ 40,1, ? DPBSEQ 22-ZZ,2
ADDI T,NWSCNL-1 ? AOBJN T,$$ ? POPJ P,
]
MORBTS: MOVEI ZR,0 ;GET # OF BITS IN D
CAILE D,(C) ? AOJA B,MRBTS1
LSHC ZR,(D) ? SUBI C,(D) ? JRST (TT)
MRBTS1: LSHC ZR,(C)
MRBTS2: MOVE A,(B)
SUBI D,(C) ? LSHC ZR,(D)
SETCMI C,-45(D) ? JRST (TT)
TVDINI: .CALL [ SETZ
'CNSGET
1000,,TYOC
2000,, ;VERTICAL SCREEN SIZE
2000,, ;HORIZ SCREEN SIZE
402000,,ZR ] ; TCTYP
.VALUE
CAIE ZR,5 ; SKIP IF TV
JRST NO.TV
MOVEI ZR,28.
SKIPE FONT
MOVEI ZR,50.
MOVEM ZR,LINEL
SETOM TVFLG
MOVE A,[-10,,TVBBAS/2000]
MOVEI B,0
.CALL [ SETZ
'CORBLK
1000,,600000
1000,,-1
A
1000,,-2
SETZ B ]
.VALUE
POPJ P,
NO.TV: SETZM TVFLG ? MOVSI ZR,(POPJ P,) ? MOVEM ZR,DBRD ? MOVEM ZR,INCD
MOVEI ZR,79. ? MOVEM ZR,LINEL
POPJ P,
DBRD: CAI
SKIPE FONT
JRST ZDBRD
MOVSI A,-8*TVSQW ;WRITE BORDERS
SETO B,
DBRD1: DPB B,[TVBBAS+LEDGP(A)]
DPB B,[<4_12.>+<TVBDRW_6>,,TVBBAS+NWSCNL-1+NWSCNL*TVBDRW(A)]
ADDI A,NWSCNL-1
AOBJN A,DBRD1
SETCMI C,17 ? MOVSI A,-14
REPEAT 3, DPB B,[42600,,760005+22*.RPCNT(A)]
REPEAT 3, DPB B,[42600,,776133+22*.RPCNT(A)]
DBRD2: REPEAT 3, MOVEM C,760006+22*.RPCNT(A)
REPEAT 3, MOVEM C,776134+22*.RPCNT(A)
AOBJN A,DBRD2
; MOVSI S,-12.*BW+2*BW+1-1 ;-142+25-1
;TVBD: MOVEI A,2*BW+1(S)
; SKIPL BOARD(A)
; PUSHJ P,DSQ
; AOBJN S,TVBD
ZTVBD: MOVEI S,8*BW+2*BW-1-1 ;BLACK'S QR1
TVBD: MOVE A,S
SKIPL BOARD(A)
PUSHJ P,DSQ
CAILE S,2*BW+1
SOJA S,TVBD
TVBD1: MOVE ZR,[PIECEL+1,,DPCL] ;SAVE STATE SO CAN UPDATE WHAT HAS CHANGED
BLT ZR,DPCL+37
POPJ P,
CHSQS: BLOCK 100
DPCL: BLOCK 40 ;LOCN OF PCS WHEN LAST UPDATED
NOINCU: 0 ;-> NO INCREMENTAL UPDATE, REDIS WHOLE THING.
INCDU: MOVEM 16,INCDUT+16 ;INCR UPDATE OF DISPLAY, SAVING ALL ACS (P=17)
MOVEI 16,INCDUT
BLT 16,INCDUT+15
PUSHJ P,INCD
MOVSI 16,INCDUT
BLT 16,16
POPJ P,
INCDUT: BLOCK 17
INCD: CAI
SKIPGE TTYOFF
POPJ P, ;TTY OFF, SO DONT UPDATE DISPLAY EITHER
AOSG NOINCU
JRST DBRD ;INCR UPDATE NOT REALLY GOING TO WIN.
MOVEI S,CHSQS-1
MOVSI A,-40
INCD1: MOVE ZR,PIECEL+1(A)
CAMN ZR,DPCL(A)
JRST INCD2 ;THAT PC IN SAME PLACE
PUSH S,ZR ;PUSH WHERE IT IS
PUSH S,DPCL(A) ;PUSH WHERE IT WAS
INCD2: AOBJN A,INCD1
PUSHJ P,INCD3 ;FLUSH THINGS THAT HAVE GONE
SKIPE BOARD(A)
PUSHJ P,INCD3 ;THEN PUT ON THINGS THAT HAVE COME ON
SKIPG BOARD(A)
JRST TVBD1
INCD3:; SETCMI R,-CHSQS+2(S)
; HRLOI R,(R)
; AOBJP R,CPOPJ1
HRREI R,-CHSQS(S)
JUMPL R,POPJ1
INCD3A: SKIPLE A,CHSQS(R)
XCT @(P)
JRST INCD3B
PUSHJ P,DSQ
INCD3B: SOJGE R,INCD3A
JRST POPJ1
TVCR:
IRP A,,[^P,"H,^H,^P,"D]
.IOT TYOC,[A] ? TERMIN
TVCEOL:
IRP A,,[ZR,A,B]
PUSH P,A ? TERMIN
.CALL [ SETZ
SIXBIT /RCPOS/
1000,,TYOC
402000,,A ]
.VALUE
MUL A,[22*14/2,,]
ADD A,[-14,,TVBBAS]
SETZ B,
HRRM A,TVCR2
TVCR1: HRLI B,-5
SKIPE FONT
HRLI B,-9
TVCR2: SETZB (B)
AOBJN B,.-1
DPB [321200,,@TVCR2]
ADDI B,22-9
SKIPN FONT
ADDI B,4
AOBJN A,TVCR1
IRP A,,[B,A,ZR]
POP P,A ? TERMIN
POPJ P,
61C:
600300140060 ? 030010014006 ? 003001400400 ? 600300140060 ? 030030014006 ? 003001401400
600300140060 ? 060030014006 ? 003003001400 ? 600300140140 ? 060030014006 ? 006003001400
600300300140 ? 060030014014 ? 006003001400 ? 600200300140 ? 060030010014 ? 006003001400
600600300140 ? 060030030014 ? 006003001401 ? 400600300140 ? 060060030014 ? 006003003001
400600300140 ? 140060030014 ? 006006003001 ? 400600300300 ? 140060030014 ? 004006003001
400600200300 ? 140060030014 ? 014006003001 ? 400600600300 ? 140060030030 ? 014006003001
401400600300 ? 140060060030 ? 014006003003 ? 001400600300 ? 140140060030 ? 014006006003
001400600300 ? 100140060030 ? 014004006003 ? 001400600300 ? 300140060030 ? 014014006003
001400600600 ? 300140060030 ? 030014006003 ? 001401400600 ? 300140060060 ? 030014006003
003001400600 ? 300140140060 ? 030014006002 ? 003001400600 ? 300100140060 ? 030014006006
003001400600 ? 300300140060 ? 030014014006 ? 003001400600 ? 600300140060 ? 030030014006
003001401400 ? 600300140060 ? 060030014006 ? 003000000000
101C:
600300140060 ? 030010014006 ? 003001400400 ? 600300140060 ? 030030014006 ? 003001401400
600000140060 ? 060030000006 ? 003003001401 ? 700300140140 ? 060022014006 ? 006003000440
600300300140 ? 011000014014 ? 006007637000 ? 600200300100 ? 020030010014 ? 002000401400
600600076370 ? 060030030000 ? 044000001401 ? 400701101600 ? 060060077622 ? 377003003007
017476034140 ? 140300071600 ? 142006014000 ? 360001400300 ? 600003000014 ? 004010000060
000100200600 ? 001400003014 ? 030000030000 ? 030600600000 ? 600000630010 ? 000014000004
400200360001 ? 700100044004 ? 600062002003 ? 140304001060 ? 140141014140 ? 060602006020
201001004040 ? 100604020020 ? 103004004140 ? 601406040300 ? 101004020101 ? 014003030100
406060600620 ? 202010101030 ? 030777777777 ? 761401407777 ? 777777060060 ? 140000000063
003003000000 ? 001440140060 ? 601403030002 ? 001414030060 ? 600100030000 ? 000014006004
600000000300 ? 300317777777 ? 776014014377 ? 777777740600 ? 600000000000 ? 030030000000
000001401400 ? 600300140060 ? 060030014006 ? 003000000000
103C:
600300140060 ? 030010014006 ? 003001400400 ? 600300140060 ? 030030014006 ? 003001401400
600300140060 ? 060030014006 ? 003003001400 ? 600300140140 ? 060030014006 ? 006003001400
600300300000 ? 060030000014 ? 000003001400 ? 000200000000 ? 000000010000 ? 000000000000
600700000000 ? 007030013000 ? 000000320400 ? 330000000015 ? 400003201400 ? 140260002024
030003005000 ? 140500300140 ? 120006012007 ? 007002400300 ? 240120120050 ? 004005402402
403200200110 ? 050050044014 ? 003201201201 ? 300600024024 ? 024024030000 ? 500500500501
401012012012 ? 012020060260 ? 260640640003 ? 004404411011 ? 000140150150 ? 260260006001
201205005000 ? 100024027720 ? 120004000543 ? 777706400300 ? 011360007510 ? 014000236000
036200600007 ? 777777774030 ? 020177777777 ? 701401403000 ? 000006020060 ? 060000000140
003001400000 ? 003000140030 ? 301406060002 ? 000606030141 ? 400100014000 ? 000030006000
300000000600 ? 300007777777 ? 774014000177 ? 777777700600 ? 600000000000 ? 030030000000
000001401400 ? 600300140060 ? 060030014006 ? 003000000000
105C:
600300140060 ? 030010014006 ? 003001400400 ? 600300140060 ? 030030014006 ? 003001401400
600300140060 ? 060000000000 ? 003003000000 ? 000000140140 ? 000000000006 ? 006000000000
000300300000 ? 000000004014 ? 000760770370 ? 000200010410 ? 204200010000 ? 217607704000
600404000000 ? 100030030100 ? 000002001401 ? 402000000040 ? 060060040000 ? 001003003001
000000020140 ? 140037777777 ? 406006000006 ? 003000300300 ? 000140060004 ? 004000006000
600000200200 ? 140014000014 ? 014006000140 ? 000600600140 ? 003000030030 ? 006000030001
401400140000 ? 600060060006 ? 000006003003 ? 000140000140 ? 140140006000 ? 001406006000
140000030100 ? 100006000000 ? 300004000140 ? 000006000300 ? 006000000060 ? 014000140000
001400600406 ? 000000014030 ? 030140000000 ? 300401406000 ? 000003000060 ? 140000000060
003002000000 ? 000400140077 ? 777777770002 ? 001000000000 ? 200100020000 ? 000004006000
400000000100 ? 300017777777 ? 776014000377 ? 777777740600 ? 600000000000 ? 030030000000
000001401400 ? 600300140060 ? 060030014006 ? 003000000000
107C:
600300140060 ? 030010014006 ? 003001400400 ? 600300140060 ? 030030014000 ? 003001401400
600000140060 ? 060030000006 ? 003003001400 ? 000300140140 ? 060014000006 ? 006003000740
000300300140 ? 031400014014 ? 006001414000 ? 600200300060 ? 140030010014 ? 003001401400
600600140014 ? 020030030006 ? 000600001401 ? 400100030000 ? 060060006001 ? 400003003000
100060000140 ? 140002003014 ? 006006000140 ? 041700300300 ? 102001163014 ? 004006040036
020600200301 ? 000000410014 ? 014030000030 ? 000600600200 ? 000400030030 ? 004000010001
401400100300 ? 200060060002 ? 006004003003 ? 000060770300 ? 140140040417 ? 604006006003
010060100300 ? 100140201402 ? 014004006006 ? 030140600300 ? 300040002010 ? 014014001000
040000600600 ? 030003000030 ? 030000200040 ? 001401400006 ? 003000060060 ? 000040040003
003000001403 ? 000140140000 ? 010040000002 ? 000000303000 ? 000100000002 ? 040000006000
000077000000 ? 300077777777 ? 777414001777 ? 777777770200 ? 600000000000 ? 030030000000
000001401400 ? 600300140060 ? 060030014006 ? 003000000000
111C:
600300140060 ? 030010014006 ? 003001400400 ? 600300140060 ? 030030014006 ? 003001401400
600300140060 ? 060030014006 ? 003003001400 ? 000300140140 ? 060000014006 ? 006003000000
600300300140 ? 700000014014 ? 006017400000 ? 600200300316 ? 000030010014 ? 002070001400
600600040340 ? 060030030003 ? 001401001401 ? 400140014000 ? 060060006000 ? 140003003000
306001400140 ? 140014100014 ? 006006000600 ? 000100300300 ? 030000003004 ? 004000400000
030000200030 ? 000000300014 ? 001400000002 ? 000600060000 ? 000060030001 ? 000160000401
400060016600 ? 014060001000 ? 606000101002 ? 060070140003 ? 000141417003 ? 000020006017
600140000400 ? 100160006000 ? 014004000000 ? 300000100300 ? 000014000002 ? 014000001600
000060600000 ? 060000001410 ? 020007000000 ? 030001400300 ? 000000600060 ? 014000000014
003001600000 ? 000300140060 ? 000000006002 ? 003000000000 ? 140100140000 ? 000003006003
000000000060 ? 300077777777 ? 777414001777 ? 777777770200 ? 600000000000 ? 030030000000
000001401400 ? 600300140060 ? 060030014006 ? 003000000000
113C:
600300140060 ? 030010014006 ? 003001400400 ? 600300140060 ? 030030014006 ? 003001401400
600300140060 ? 060030014006 ? 003003001400 ? 600300140140 ? 060030014006 ? 006003001400
600300300140 ? 060030014014 ? 006000000400 ? 600200300000 ? 000030010014 ? 000000001400
600600001400 ? 060030030000 ? 176003001401 ? 400016070040 ? 060060000600 ? 300003003001
010002000140 ? 140060600060 ? 006006003010 ? 000400300300 ? 140600014014 ? 004006014000
300600200300 ? 100004030014 ? 014003000301 ? 400600600020 ? 004020030030 ? 000600300001
401400007034 ? 000060060020 ? 077600003003 ? 001401004000 ? 140140060020 ? 100006006003
001403000300 ? 100140030060 ? 014004006000 ? 400400600300 ? 300010010030 ? 014014000600
300400600600 ? 010002000030 ? 030000200040 ? 001401400004 ? 001000060060 ? 000700034001
003000070000 ? 160000140007 ? 000000700002 ? 000700000003 ? 400100030000 ? 000014006000
600000000300 ? 300017777777 ? 776014010377 ? 777777740600 ? 600000000000 ? 030030000000
000001401400 ? 600300140060 ? 060030014006 ? 003000000000
141C:
600300140060 ? 030010014006 ? 003001400400 ? 600300140060 ? 030030014000 ? 003001401400
600000140060 ? 060030000006 ? 003003001400 ? 000300140140 ? 060014000006 ? 006003000300
000300300140 ? 006000014014 ? 006000140000 ? 200200300077 ? 740000010014 ? 001777000000
600600001400 ? 000030030000 ? 030000001401 ? 400700601600 ? 020060077614 ? 377000003007
777337774000 ? 140377777777 ? 740006017777 ? 777777400300 ? 777774777774 ? 004017777717
777700200777 ? 776377777014 ? 037777747777 ? 770200777777 ? 177777600017 ? 777763777774
000377417776 ? 077700007770 ? 177701776002 ? 177403776017 ? 740141760037 ? 700176006037
400776003740 ? 100770017740 ? 077004007600 ? 176001740300 ? 176003740077 ? 014003740077
001760600037 ? 401760077010 ? 020777777777 ? 760001407777 ? 777777000060 ? 140000000060
003003000000 ? 001400140060 ? 601403030002 ? 001414030060 ? 600100030000 ? 000014006000
600000000300 ? 300017777777 ? 776014010377 ? 777777740600 ? 600000000000 ? 030030000000
000001401400 ? 600300140060 ? 060030014006 ? 003000000000
143C:
600300140060 ? 030010014006 ? 003001400400 ? 600300140060 ? 030030014006 ? 003001401400
600300140060 ? 060030014006 ? 003003001400 ? 600300140140 ? 060030014006 ? 006003001400
600300300000 ? 060030000014 ? 000003001400 ? 000200000000 ? 000000010000 ? 000000000000
600700000000 ? 007030017000 ? 000000360400 ? 370000000017 ? 400003601400 ? 140360002074
030003007400 ? 140700300140 ? 160006016007 ? 007003400300 ? 340160160070 ? 004007403403
403600200170 ? 070070074014 ? 003601601601 ? 700600034034 ? 034034030000 ? 700700700701
401016016016 ? 016020060360 ? 360740740003 ? 007407417017 ? 000140170170 ? 360360006001
601607007000 ? 100034037760 ? 160004000743 ? 777707400300 ? 017360007570 ? 014000376000
037600600007 ? 777777774030 ? 020177777777 ? 701401403777 ? 777776020060 ? 077777777740
003001777777 ? 777000140037 ? 476371760002 ? 000771747637 ? 400100017777 ? 777770006000
377777777600 ? 300007777777 ? 774014000177 ? 777777700600 ? 600000000000 ? 030030000000
000001401400 ? 600300140060 ? 060030014006 ? 003000000000
145C:
600300140060 ? 030010014006 ? 003001400400 ? 600300140060 ? 030030014006 ? 003001401400
600300140060 ? 060030014006 ? 003003000000 ? 000000140140 ? 000000000006 ? 006000000000
000300300000 ? 000000004014 ? 000760770370 ? 000200017417 ? 607600010000 ? 377777774000
600407777777 ? 700030030177 ? 777776001401 ? 403777777740 ? 060060077777 ? 777003003001
777777760140 ? 140037777777 ? 402006000007 ? 777000000300 ? 000177760000 ? 004000007777
600000200200 ? 177774000014 ? 014007777740 ? 000600600177 ? 777000030030 ? 007777770001
401400177777 ? 600060060007 ? 777776003003 ? 000177777740 ? 040140007777 ? 777400006000
177777770000 ? 100007777777 ? 700004000177 ? 777776000300 ? 007777777760 ? 014000177777
777400600407 ? 777777774030 ? 030177777777 ? 701401407777 ? 777777020060 ? 177777777760
003003000000 ? 001400140060 ? 000000030002 ? 001400000000 ? 600100037777 ? 777774006000
777777777700 ? 300017777777 ? 776014000377 ? 777777740600 ? 600000000000 ? 030030000000
000001401400 ? 600300140060 ? 060030014006 ? 003000000000
147C:
600300140060 ? 030010014006 ? 003001400400 ? 600300140060 ? 030030014000 ? 003001401400
600000140060 ? 060030000006 ? 003003001400 ? 000300140140 ? 060014000006 ? 006003000740
000300300140 ? 037400014014 ? 006001774000 ? 600200300077 ? 740030010014 ? 003777401400
600600177774 ? 020030030007 ? 777600001401 ? 400177770000 ? 060060007777 ? 400003003000
177760000140 ? 140003777014 ? 006006000177 ? 741700300300 ? 103777177014 ? 004006077777
760600200301 ? 777777410014 ? 014037777770 ? 000600600377 ? 777400030030 ? 007777770001
401400177477 ? 600060060003 ? 771774003003 ? 000077007700 ? 140140040760 ? 174006006003
017717700300 ? 100140376376 ? 014004006007 ? 747740600300 ? 300077776010 ? 014014001777
740000600600 ? 037777000030 ? 030000377740 ? 001401400007 ? 777000060060 ? 000077740003
003000001777 ? 000140140000 ? 017740000002 ? 000000377000 ? 000100000003 ? 740000006000
000077000000 ? 300077777777 ? 777414001777 ? 777777770200 ? 600000000000 ? 030030000000
000001401400 ? 600300140060 ? 060030014006 ? 003000000000
151C:
600300140060 ? 030010014006 ? 003001400400 ? 600300140060 ? 030030014006 ? 003001401400
600300140060 ? 060030014006 ? 003003001400 ? 000300140140 ? 060000014006 ? 006003000000
600300300140 ? 700010014014 ? 006017400000 ? 600200300376 ? 000030010014 ? 003770001400
600600077740 ? 060030030003 ? 777401001401 ? 400177774000 ? 060060007777 ? 740003003000
363777400140 ? 140017577774 ? 006006000777 ? 777700300300 ? 037777777004 ? 004000777777
770000200037 ? 777777700014 ? 001777777776 ? 000600077777 ? 777760030001 ? 777777777401
400077776777 ? 774060001777 ? 607777701002 ? 073770177777 ? 000141777003 ? 777760006017
600177777400 ? 100160007777 ? 774004000000 ? 377777700300 ? 000017777776 ? 014000001777
777760600000 ? 077777777410 ? 020007777777 ? 770001400377 ? 777777600060 ? 017777777774
003001777777 ? 777700140077 ? 777777776002 ? 003777777777 ? 740100140000 ? 000003006003
000000000060 ? 300077777777 ? 777414001777 ? 777777770200 ? 600000000000 ? 030030000000
000001401400 ? 600300140060 ? 060030014006 ? 003000000000
153C:
600300140060 ? 030010014006 ? 003001400400 ? 600300140060 ? 030030014006 ? 003001401400
600700140060 ? 060030030006 ? 003003001401 ? 400300140140 ? 060060014006 ? 006003003000
600300300140 ? 140030014014 ? 006006000400 ? 600200300000 ? 000030010014 ? 000000001400
600600001400 ? 060030030000 ? 176003001401 ? 400017770040 ? 060060000777 ? 700003003000
017776000140 ? 140040777760 ? 006006003017 ? 777400300300 ? 140777774014 ? 004006017777
700600200300 ? 177774030014 ? 014003777701 ? 400600600037 ? 774020030030 ? 000777700001
401400007774 ? 000060060000 ? 077600003003 ? 001001774000 ? 140140060037 ? 700006006003
001777000300 ? 100140037760 ? 014004006000 ? 777400600300 ? 300017770030 ? 014014000777
700400600600 ? 017776000030 ? 030000377740 ? 001401400007 ? 777000060060 ? 000777774001
003000077777 ? 760000140007 ? 777777700002 ? 000760000017 ? 400100036000 ? 000074006000
777777777700 ? 300017777777 ? 776014010377 ? 777777740600 ? 600000000000 ? 030030000000
000001401400 ? 600300140060 ? 060030014006 ? 003000000000
100C:
REPEAT 8, 0
000000000001 ? 700000000000 ? 000022000000 ? 000000000440
000000000000 ? 011000000000 ? 000007637000 ? 000000000100 ? 020000000000 ? 002000400000
000000076370 ? 000000000000 ? 044000000000 ? 000701101600 ? 000000077622 ? 377000000007
017476034000 ? 000300071600 ? 140000014000 ? 360001400000 ? 600003000014 ? 000010000060
000100000600 ? 001400003000 ? 030000030000 ? 030000600000 ? 600000600010 ? 000014000004
000200360001 ? 700100004004 ? 600062002000 ? 140304001060 ? 140001014140 ? 060602000020
201001004040 ? 000604020020 ? 103000004140 ? 601406040000 ? 101004020101 ? 000003030100
406060000020 ? 202010101000 ? 000777777777 ? 760000007777 ? 777777000000 ? 140000000060
000003000000 ? 001400000060 ? 601403030000 ? 001414030060 ? 600000030000 ? 000014000000
600000000300 ? 000017777777 ? 776000000377 ? 777777740000
; PLUS 6 ZEROES TELESCOPED INTO NEXT CHAR
102C:
REPEAT 22, 0
000700000000 ? 007000013000 ? 000000320000 ? 330000000015 ? 400003201400 ? 140260000024
030003005000 ? 000500300140 ? 120000012007 ? 007002400000 ? 240120120050 ? 000005402402
403200000110 ? 050050044000 ? 003201201201 ? 300000024024 ? 024024000000 ? 500500500500
000012012012 ? 012000000260 ? 260640640000 ? 004404411011 ? 000000150150 ? 260260000001
201205005000 ? 000024027720 ? 120000000543 ? 777706400000 ? 011360007510 ? 000000236000
036200000007 ? 777777774000 ? 000177777777 ? 700000003000 ? 000006000000 ? 060000000140
000001400000 ? 003000000030 ? 301406060000 ? 000606030141 ? 400000014000 ? 000030000000
300000000600 ? 000007777777 ? 774000000177 ? 777777700000
; PLUS 6 ZEROES TELESCOPED INTO NEXT CHAR
104C:
REPEAT 16, 0
000760770370 ? 000000010410 ? 204200000000 ? 217607704000
000004000000 ? 100000000100 ? 000002000000 ? 002000000040 ? 000000040000 ? 001000000001
000000020000 ? 000037777777 ? 400000000006 ? 003000000000 ? 000140060000 ? 000000006000
600000000000 ? 140014000000 ? 000006000140 ? 000000000140 ? 003000000000 ? 006000030000
000000140000 ? 600000000006 ? 000006000000 ? 000140000140 ? 000000006000 ? 001400000000
140000030000 ? 000006000000 ? 300000000140 ? 000006000000 ? 006000000060 ? 000000140000
001400000006 ? 000000014000 ? 000140000000 ? 300000006000 ? 000003000000 ? 140000000060
000002000000 ? 000400000077 ? 777777770000 ? 001000000000 ? 200000020000 ? 000004000000
400000000100 ? 000017777777 ? 776000000377 ? 777777740000
; PLUS 6 ZEROES TELESCOPED INTO NEXT CHAR
106C:
REPEAT 12, 0
000014000000 ? 000000000740
000000000000 ? 031400000000 ? 000001414000 ? 000000000060 ? 140000000000 ? 003001400000
000000140014 ? 000000000006 ? 000600000000 ? 000100030000 ? 000000006001 ? 400000000000
100060000000 ? 000002003014 ? 000000000140 ? 041700000000 ? 002001163000 ? 000000040036
020000000001 ? 000000400000 ? 000030000030 ? 000000000200 ? 000400000000 ? 004000010000
000000100300 ? 200000000002 ? 006004000000 ? 000060770300 ? 000000000417 ? 604000000000
010060100000 ? 000000201402 ? 000000000006 ? 030140000000 ? 000040002000 ? 000000001000
040000000000 ? 030003000000 ? 000000200040 ? 000000000006 ? 003000000000 ? 000040040000
000000001403 ? 000000000000 ? 010040000000 ? 000000303000 ? 000000000002 ? 040000000000
000077000000 ? 000077777777 ? 777400001777 ? 777777770000
; PLUS 6 ZEROES TELESCOPED INTO NEXT CHAR
110C:
REPEAT 15, 0
700000000000 ? 000017400000 ? 000000000316 ? 000000000000 ? 002070000000
000000040340 ? 000000000003 ? 001400000000 ? 000140014000 ? 000000006000 ? 140000000000
306001400000 ? 000014100014 ? 000000000600 ? 000100000000 ? 030000003000 ? 000000400000
030000000030 ? 000000300000 ? 001400000002 ? 000000060000 ? 000060000001 ? 000160000400
000060016600 ? 014000001000 ? 606000100000 ? 060070140003 ? 000001417003 ? 000020000017
600140000400 ? 000160006000 ? 014000000000 ? 300000100000 ? 000014000002 ? 000000001600
000060000000 ? 060000001400 ? 000007000000 ? 030000000300 ? 000000600000 ? 014000000014
000001600000 ? 000300000060 ? 000000006000 ? 003000000000 ? 140000140000 ? 000003000003
000000000060 ? 000077777777 ? 777400001777 ? 777777770000
; PLUS 6 ZEROES TELESCOPED INTO NEXT CHAR
112C:
REPEAT 22, 0
000000001400 ? 000000000000 ? 176000000000 ? 000016070000 ? 000000000600 ? 300000000000
010002000000 ? 000000600060 ? 000000000010 ? 000400000000 ? 000600014000 ? 000000014000
300000000000 ? 100004000000 ? 000003000300 ? 000000000020 ? 004000000000 ? 000600300000
000000007034 ? 000000000000 ? 077600000000 ? 000001004000 ? 000000000020 ? 100000000000
001403000000 ? 000000030060 ? 000000000000 ? 400400000000 ? 000010010000 ? 000000000600
300000000000 ? 010002000000 ? 000000200040 ? 000000000004 ? 001000000000 ? 000700034000
000000070000 ? 160000000007 ? 000000700000 ? 000700000003 ? 400000030000 ? 000014000000
600000000300 ? 000017777777 ? 776000000377 ? 777777740000
; PLUS 6 ZEROES TELESCOPED INTO NEXT CHAR
140C:
REPEAT 12, 0
000014000000 ? 000000000300
000000000000 ? 006000000000 ? 000000140000 ? 000000000077 ? 740000000000 ? 001777000000
000000001400 ? 000000000000 ? 030000000000 ? 000700601600 ? 000000077614 ? 377000000007
777337774000 ? 000377777777 ? 740000017777 ? 777777400000 ? 777774777774 ? 000017777717
777700000777 ? 776377777000 ? 037777747777 ? 770000777777 ? 177777600017 ? 777763777774
000377417776 ? 077700007770 ? 177701776000 ? 177403776017 ? 740001760037 ? 700176000037
400776003740 ? 000770017740 ? 077000007600 ? 176001740000 ? 176003740077 ? 000003740077
001760000037 ? 401760077000 ? 000777777777 ? 760000007777 ? 777777000000 ? 177777777760
000003777777 ? 777400000077 ? 176374770000 ? 001763747717 ? 600000037777 ? 777774000000
777777777700 ? 000017777777 ? 776000000377 ? 777777740000
; PLUS 6 ZEROES TELESCOPED INTO NEXT CHAR
142C:
REPEAT 22, 0
000700000000 ? 007000017000 ? 000000360000 ? 370000000017 ? 400003601400 ? 140360000074
030003007400 ? 000700300140 ? 160000016007 ? 007003400000 ? 340160160070 ? 000007403403
403600000170 ? 070070074000 ? 003601601601 ? 700000034034 ? 034034000000 ? 700700700700
000016016016 ? 016000000360 ? 360740740000 ? 007407417017 ? 000000170170 ? 360360000001
601607007000 ? 000034037760 ? 160000000743 ? 777707400000 ? 017360007570 ? 000000376000
037600000007 ? 777777774000 ? 000177777777 ? 700000003777 ? 777776000000 ? 077777777740
000001777777 ? 777000000037 ? 476371760000 ? 000771747637 ? 400000017777 ? 777770000000
377777777600 ? 000007777777 ? 774000000177 ? 777777700000
; PLUS 6 ZEROES TELESCOPED INTO NEXT CHAR
144C:
REPEAT 16, 0
000760770370 ? 000000017417 ? 607600000000 ? 377777774000
000007777777 ? 700000000177 ? 777776000000 ? 003777777740 ? 000000077777 ? 777000000001
777777760000 ? 000037777777 ? 400000000007 ? 777000000000 ? 000177760000 ? 000000007777
600000000000 ? 177774000000 ? 000007777740 ? 000000000177 ? 777000000000 ? 007777770000
000000177777 ? 600000000007 ? 777776000000 ? 000177777740 ? 000000007777 ? 777400000000
177777770000 ? 000007777777 ? 700000000177 ? 777776000000 ? 007777777760 ? 000000177777
777400000007 ? 777777774000 ? 000177777777 ? 700000007777 ? 777777000000 ? 177777777760
000003000000 ? 001400000060 ? 000000030000 ? 001400000000 ? 600000037777 ? 777774000000
777777777700 ? 000017777777 ? 776000000377 ? 777777740000
; PLUS 6 ZEROES TELESCOPED INTO NEXT CHAR
146C:
REPEAT 12, 0
000014000000 ? 000000000740
000000000000 ? 037400000000 ? 000001774000 ? 000000000077 ? 740000000000 ? 003777400000
000000177774 ? 000000000007 ? 777600000000 ? 000177770000 ? 000000007777 ? 400000000000
177760000000 ? 000003777014 ? 000000000177 ? 741700000000 ? 003777177000 ? 000000077777
760000000001 ? 777777400000 ? 000037777770 ? 000000000377 ? 777400000000 ? 007777770000
000000177477 ? 600000000003 ? 771774000000 ? 000077007700 ? 000000000760 ? 174000000000
017717700000 ? 000000376376 ? 000000000007 ? 747740000000 ? 000077776000 ? 000000001777
740000000000 ? 037777000000 ? 000000377740 ? 000000000007 ? 777000000000 ? 000077740000
000000001777 ? 000000000000 ? 017740000000 ? 000000377000 ? 000000000003 ? 740000000000
000077000000 ? 000077777777 ? 777400001777 ? 777777770000
; PLUS 6 ZEROES TELESCOPED INTO NEXT CHAR
150C:
REPEAT 15, 0
700000000000 ? 000017400000 ? 000000000376 ? 000000000000 ? 003770000000
000000077740 ? 000000000003 ? 777400000000 ? 000177774000 ? 000000007777 ? 740000000000
363777400000 ? 000017577774 ? 000000000777 ? 777700000000 ? 037777777000 ? 000000777777
770000000037 ? 777777700000 ? 001777777776 ? 000000077777 ? 777760000001 ? 777777777400
000077776777 ? 774000001777 ? 607777700000 ? 073770177777 ? 000001777003 ? 777760000017
600177777400 ? 000160007777 ? 774000000000 ? 377777700000 ? 000017777776 ? 000000001777
777760000000 ? 077777777400 ? 000007777777 ? 770000000377 ? 777777600000 ? 017777777774
000001777777 ? 777700000077 ? 777777776000 ? 003777777777 ? 740000140000 ? 000003000003
000000000060 ? 000077777777 ? 777400001777 ? 777777770000
; PLUS 6 ZEROES TELESCOPED INTO NEXT CHAR
152C:
REPEAT 22, 0
000000001400 ? 000000000000 ? 176000000000 ? 000017770000 ? 000000000777 ? 700000000000
017776000000 ? 000000777760 ? 000000000017 ? 777400000000 ? 000777774000 ? 000000017777
700000000000 ? 177774000000 ? 000003777700 ? 000000000037 ? 774000000000 ? 000777700000
000000007774 ? 000000000000 ? 077600000000 ? 000001774000 ? 000000000037 ? 700000000000
001777000000 ? 000000037760 ? 000000000000 ? 777400000000 ? 000017770000 ? 000000000777
700000000000 ? 017776000000 ? 000000377740 ? 000000000007 ? 777000000000 ? 000777774000
000000077777 ? 760000000007 ? 777777700000 ? 000760000017 ? 400000036000 ? 000074000000
777777777700 ? 000017777777 ? 776000000377 ? 777777740000
REPEAT 6, 0
ZTVCTB: MOVE A,Z61C(B) ; VACANT WHITE SQ ... THESE LABELS ARE SWAPPED WHITE FOR
MOVE A,Z153C(B) ; WP ON W SQ BLACK AS USED BY OCM
MOVE A,Z151C(B) ; WN ON W SQ
MOVE A,Z147C(B) ; WB ON W SQ
MOVE A,Z145C(B) ; WR ON W SQ
MOVE A,Z143C(B) ; WQ ON W SQ
MOVE A,Z141C(B) ; WK ON W SQ
MOVE A,Z113C(B) ; BP ON W SQ
MOVE A,Z111C(B) ; BN ON W SQ
MOVE A,Z107C(B) ; BB ON W SQ
MOVE A,Z105C(B) ; BR ON W SQ
MOVE A,Z103C(B) ; BQ ON W SQ
MOVE A,Z101C(B) ; BK ON W SQ
MOVEI A,0 ; VACANT BLACK SQ
MOVE A,Z152C(B) ; WP ON B SQ
MOVE A,Z150C(B) ; WN ON B SQ
MOVE A,Z146C(B) ; WB ON B SQ
MOVE A,Z144C(B) ; WR ON B SQ
MOVE A,Z142C(B) ; WQ ON B SQ
MOVE A,Z140C(B) ; WK ON B SQ
MOVE A,Z112C(B) ; BP ON B SQ
MOVE A,Z110C(B) ; BN ON B SQ
MOVE A,Z106C(B) ; BB ON B SQ
MOVE A,Z104C(B) ; BR ON B SQ
MOVE A,Z102C(B) ; BQ ON B SQ
MOVE A,Z100C(B) ; BK ON B SQ
ZDSQ1: IMULI T,ZTVSQW*NWSCNL
MOVE D,REVERS(B)
EQVI B,(A)
TRNN B,1
ADDI TT,15
MOVSI B,-ZTVSQW
JRST @ZDSQD-1(D)
ZDSQD: REPEAT 8,CONC ZDQS,\.RPCNT
REPEAT 8,[
CONC ZDQS,\.RPCNT,:
ZLBTBA== 1100-ZTVBBW-TVBDRW+ZTVSQW*.RPCNT ;BIT ADDRESS OF LEFT EDGE OF SQUARE
ZLBTWA== TVBBAS+NWSCNL*TVBDRW+ZLBTBA/40 ;WORD ADDRESS
ZLBN== 40-ZLBTBA+<ZLBTBA/40*40> ;# ACTIVE BITS IN ADDRESSED WD
ZLBS== 40-ZLBN ;# INACTIVE BITS AT LEFT OF ADR WD
IFGE ZLBN-ZTVSQW,[ ;WILL FIT IN ONE WHACK
CONC ZTT,\.RPCNT,:
XCT ZTVCTB(TT) ; MOVE A,CHTAB(B)
DPB A,[<4+<32.-ZTVSQW>-ZLBS>_12.+ZTVSQW*100,,ZLBTWA(T)]
ADDI T,NWSCNL
AOBJN B, CONC ZTT,\.RPCNT,
POPJ P,
]
.ELSE [
ZLWBTS==ZTVSQW-ZLBN ;NUMBER OF ACTIVE BITS IN LOW WORD
CONC ZTT,\.RPCNT,:
XCT ZTVCTB(TT) ;MOVE A,CHTAB(B)
DPB A,[<44-ZLWBTS>_12.+<ZLWBTS*100>,,ZLBTWA+1(T)] ;DBP LOW BITS FIRST
;(THESE ARE LEFT ADJUSTED)
LSH A,-ZLWBTS ;FLUSH THEM
DPB A,[4_12.+<<ZTVSQW-ZLWBTS>*100>,,ZLBTWA(T)] ;THESE ARE RIGHT ADJUSTED
ADDI T,NWSCNL
AOBJN B,CONC ZTT,\.RPCNT,
POPJ P,
]
]
ZDBRD: MOVSI A,-8*ZTVSQW ;WRITE BORDERS
SETO B,
ZDBRD1: DPB B,[TVBBAS+ZLEDGP(A)]
DPB B,[<4_12.>+<TVBDRW_6>,,TVBBAS+NWSCNL-1+NWSCNL*TVBDRW(A)]
ADDI A,NWSCNL-1
AOBJN A,ZDBRD1
SETCMI C,17
MOVSI A,-ZNWBEDG
REPEAT TVBDRW, DPB B,[<4_12.>+<ZNBBEDG*100>,,TVBBAS+NWSCNL*.RPCNT+ZTVLWDS(A)]
REPEAT TVBDRW,[
DPB B,[<4_12.>+<ZNBBEDG*100>,,TVBBAS+NWSCNL*.RPCNT+ZTVLWDS+ZTVBBW*NWSCNL+TVBDRW*NWSCNL(A)]
]
ZDBRD2:
REPEAT TVBDRW, MOVEM C,TVBBAS+NWSCNL*.RPCNT+ZTVLWDS+1(A)
REPEAT TVBDRW, MOVEM C,TVBBAS+NWSCNL*.RPCNT+ZTVLWDS+1+ZTVBBW*NWSCNL+TVBDRW*NWSCNL(A)
AOBJN A,ZDBRD2
JRST ZTVBD
Z61C: 4141414141 ? 303030303 ? 606060606 ? 1414141414 ? 3030303030 ? 6060606060
4141414141 ? 303030303 ? 606060606 ? 1414141414 ? 3030303030 ? 6060606060
4141414141 ? 303030303 ? 606060606 ? 1414141414 ? 3030303030 ? 6060606060
4141414141 ? 303030303 ? 606060606 ? 1414141414 ? 3030303030 ? 6060606060
4141414141 ? 303030303 ? 606060606 ? 1414141414 ? 3030303030 ? 6060606060
Z100C: 0 ? 0 ? 0 ? 340000 ? 240000 ? 1670000
1010000 ? 1670000 ? 240000 ? 16247000 ? 61670600 ? 100340100
200100040 ? 200100040 ? 400100020 ? 400000020 ? 416007020 ? 421010420
221010440 ? 220420440 ? 210421040 ? 177777700 ? 100000100 ? 104102100
104102100 ? 100000100 ? 177777700 ? 0 ? 0 ? 0
Z101C: 4141414141 ? 303030303 ? 606000606 ? 1414341414 ? 3030243030 ? 6061670060
4141010141 ? 301670303 ? 600240006 ? 1416247014 ? 3061670630 ? 6100340100
4200100041 ? 200100043 ? 400100026 ? 400000020 ? 2416007020 ? 6421010420
4221010441 ? 220420443 ? 210421046 ? 1177777714 ? 3100000110 ? 6104102100
4104102101 ? 100000103 ? 577777706 ? 1400000014 ? 3000000030 ? 6060606060
Z102C: 0 ? 0 ? 0 ? 0 ? 0 ? 0
0 ? 0 ? 300000140 ? 340000340 ? 142004300 ? 143014300
141430300 ? 141430300 ? 141430300 ? 141430300 ? 61430600 ? 61430600
61350600 ? 63774600 ? 56007200 ? 77777600 ? 40000200 ? 42104200
42104200 ? 40000200 ? 77777600 ? 0 ? 0 ? 0
Z103C: 4141414141 ? 303030303 ? 606060606 ? 1414141414 ? 3030303030 ? 6000606000
4000000001 ? 3 ? 300000142 ? 340000340 ? 2142004300 ? 6143014300
4141430301 ? 141430303 ? 141430306 ? 141430304 ? 2061430600 ? 6061430600
4061350601 ? 63774603 ? 56007206 ? 77777614 ? 2040000210 ? 6042104200
4042104201 ? 40000203 ? 77777606 ? 14 ? 3000000030 ? 6060606060
Z104C: 0 ? 0 ? 0 ? 0 ? 0 ? 0
34343400 ? 23434400 ? 20000400 ? 20000400 ? 20000400 ? 37777400
1010000 ? 2004000 ? 2004000 ? 4002000 ? 4002000 ? 10001000
10001000 ? 20000400 ? 20000400 ? 40000200 ? 40000200 ? 40000200
77777600 ? 40000200 ? 77777600 ? 0 ? 0 ? 0
Z105C: 4141414141 ? 303030303 ? 606060606 ? 1400000014 ? 3000000030 ? 6000000020
4034343401 ? 23434403 ? 420000406 ? 1420000414 ? 3020000430 ? 6037777460
4001010001 ? 202004003 ? 602004006 ? 1404002014 ? 3004002030 ? 6010001060
4010001001 ? 20000403 ? 20000406 ? 1040000204 ? 3040000200 ? 6040000200
4077777601 ? 40000203 ? 77777606 ? 14 ? 2000000030 ? 6060606060
Z106C: 0 ? 0 ? 0 ? 0 ? 100000 ? 340000
420000 ? 1010000 ? 2010000 ? 2020000 ? 4040000 ? 4046000
4062000 ? 4002000 ? 4002000 ? 4002000 ? 4102000 ? 4342000
2104000 ? 2104000 ? 2004000 ? 1010000 ? 1010000 ? 420000
420000 ? 240000 ? 77777600 ? 0 ? 0 ? 0
Z107C: 4141414141 ? 303030303 ? 606000606 ? 1414001414 ? 3030100030 ? 6060340060
4140420141 ? 301010303 ? 602010006 ? 1402020014 ? 3004040030 ? 6004046060
4104072141 ? 304002103 ? 604002006 ? 1404002014 ? 3004102030 ? 6004342060
4142104141 ? 302104303 ? 602004006 ? 1401010014 ? 3001010030 ? 6000420060
4000420001 ? 240003 ? 77777606 ? 0 ? 2000000000 ? 6060606060
Z110C: 0 ? 0 ? 0 ? 0 ? 0 ? 0
3600000 ? 1140000 ? 1020000 ? 2010000 ? 4404000 ? 10402000
20001000 ? 40000400 ? 100000400 ? 100600200 ? 203100200 ? 214100200
160200100 ? 400100 ? 1000100 ? 6000040 ? 10000040 ? 60000040
100000040 ? 200000040 ? 377777740 ? 0 ? 0 ? 0
Z111C: 4141414141 ? 303030303 ? 606060606 ? 1414001414 ? 3030003030 ? 6060000060
4143600141 ? 301140303 ? 601020206 ? 1402010014 ? 3004404030 ? 6010402060
4020001001 ? 40000403 ? 100000406 ? 100600214 ? 203100210 ? 4214100200
4160200101 ? 400103 ? 1000106 ? 6000040 ? 2010000040 ? 6060000040
4100000041 ? 200000043 ? 377777746 ? 0 ? 2000000000 ? 6060606060
Z112C: 0 ? 0 ? 0 ? 0 ? 0 ? 0
0 ? 0 ? 340000 ? 1430000 ? 1010000 ? 2004000
2004000 ? 2004000 ? 1010000 ? 1010000 ? 760000 ? 420000
420000 ? 1010000 ? 1010000 ? 1010000 ? 1010000 ? 6006000
30001400 ? 40000200 ? 77777600 ? 0 ? 0 ? 0
Z113C: 4141414141 ? 303030303 ? 606060606 ? 1414141414 ? 3030303030 ? 6060606060
4140000141 ? 300000303 ? 600340606 ? 1401430014 ? 3021010030 ? 6062004060
4142004141 ? 302004303 ? 601010206 ? 1401010014 ? 3020760030 ? 6060420060
4140420141 ? 301010303 ? 601010206 ? 1401010014 ? 3001010030 ? 6006006000
4030001401 ? 40000203 ? 77777606 ? 1000000014 ? 3000000030 ? 6060606060
Z140C: 0 ? 0 ? 0 ? 0 ? 100000 ? 100000
760000 ? 760000 ? 100000 ? 16107000 ? 77537600 ? 177777700
377677740 ? 377677740 ? 777677760 ? 777777760 ? 761770760 ? 760760760
340760340 ? 340340340 ? 360340740 ? 177777700 ? 177777700 ? 173675700
173675700 ? 177777700 ? 177777700 ? 0 ? 0 ? 0
Z141C: 4141414141 ? 303030303 ? 606000606 ? 1414001414 ? 3030100030 ? 6060100060
4140760001 ? 300760003 ? 600100006 ? 1416107000 ? 3077537600 ? 6177777700
4377677741 ? 377677743 ? 777677760 ? 777777760 ? 761770760 ? 4760760760
4340760341 ? 340340343 ? 360340746 ? 177777700 ? 2177777700 ? 6173675700
4173675701 ? 177777703 ? 177777706 ? 1000000014 ? 3000000030 ? 6060606060
Z142C: 0 ? 0 ? 0 ? 0 ? 0 ? 0
0 ? 0 ? 300000140 ? 340000340 ? 342004340 ? 143014300
141430300 ? 141430300 ? 141430300 ? 141430300 ? 61430600 ? 61430600
61770600 ? 63774600 ? 76007600 ? 77777600 ? 77777600 ? 75673600
75673600 ? 77777600 ? 77777600 ? 0 ? 0 ? 0
Z143C: 4141414141 ? 303030303 ? 606060606 ? 1414141414 ? 3030303030 ? 6000606000
4000000001 ? 3 ? 300000142 ? 340000340 ? 2342004340 ? 6143014300
4141430301 ? 141430303 ? 141430306 ? 141430304 ? 2061430600 ? 6061430600
4061770601 ? 63774603 ? 76007606 ? 77777614 ? 2077777610 ? 6075673600
4075673601 ? 77777603 ? 77777606 ? 14 ? 3000000030 ? 6060606060
Z144C: 0 ? 0 ? 0 ? 0 ? 0 ? 0
34343400 ? 37777400 ? 37777400 ? 37777400 ? 37777400 ? 3774000
1770000 ? 3774000 ? 3774000 ? 7776000 ? 7776000 ? 17777000
17777000 ? 37777400 ? 37777400 ? 77777600 ? 77777600 ? 40000200
40000200 ? 77777600 ? 77777600 ? 0 ? 0 ? 0
Z145C: 4141414141 ? 303030303 ? 606060606 ? 1400000014 ? 3000000030 ? 6000000020
4034343401 ? 37777403 ? 437777406 ? 1437777414 ? 3037777430 ? 6003774000
4001770001 ? 203774003 ? 603774006 ? 1407776014 ? 3007776030 ? 6017777000
4017777001 ? 37777403 ? 37777406 ? 1077777614 ? 3077777610 ? 6040000200
4040000201 ? 77777603 ? 77777606 ? 14 ? 3000000030 ? 6060606060
Z146C: 0 ? 0 ? 0 ? 0 ? 100000 ? 340000
760000 ? 1770000 ? 3770000 ? 3760000 ? 7740000 ? 7706000
7776000 ? 7776000 ? 7776000 ? 7776000 ? 7676000 ? 7436000
3674000 ? 3674000 ? 3774000 ? 1774000 ? 1770000 ? 760000
760000 ? 340000 ? 77777600 ? 0 ? 0 ? 0
Z147C: 4141414141 ? 303030303 ? 606000606 ? 1414001414 ? 3030100030 ? 6060340060
4140760141 ? 301770303 ? 603770006 ? 1403760014 ? 3007740030 ? 6007706060
4107776141 ? 307776103 ? 607776006 ? 1407776014 ? 3007676030 ? 6007436060
4143674141 ? 303674303 ? 603774006 ? 1401774014 ? 3001770030 ? 6000760060
4000760001 ? 340003 ? 77777606 ? 0 ? 2000000000 ? 6060606060
Z150C: 0 ? 0 ? 0 ? 0 ? 0 ? 0
3600000 ? 1740000 ? 1760000 ? 3770000 ? 7374000 ? 17376000
37777000 ? 77777400 ? 177777400 ? 177777600 ? 377177600 ? 374177600
160377700 ? 777700 ? 1777700 ? 7777740 ? 17777740 ? 77777740
177777740 ? 300000140 ? 377777740 ? 0 ? 0 ? 0
Z151C: 4141414141 ? 303030303 ? 606060606 ? 1414001414 ? 3030003030 ? 6060002060
4143600141 ? 301740303 ? 601760206 ? 1403770014 ? 3007374030 ? 6017376060
4037777001 ? 77777403 ? 177777406 ? 177777614 ? 377177610 ? 4374177600
4160377701 ? 777703 ? 1777706 ? 7777740 ? 2017777740 ? 6077777740
4177777741 ? 300000143 ? 377777746 ? 0 ? 2000000000 ? 6060606060
Z152C: 0 ? 0 ? 0 ? 0 ? 0 ? 0
0 ? 0 ? 340000 ? 1770000 ? 1770000 ? 3774000
3774000 ? 3774000 ? 1770000 ? 1770000 ? 760000 ? 760000
760000 ? 1770000 ? 1770000 ? 1770000 ? 1770000 ? 7776000
37777400 ? 60000600 ? 77777600 ? 0 ? 0 ? 0
Z153C: 4141414141 ? 303030303 ? 606060606 ? 1414101414 ? 3030203030 ? 6060406060
4140000141 ? 300000303 ? 600340606 ? 1401770014 ? 3001770030 ? 6043774060
4143774141 ? 303774303 ? 601770206 ? 1401770014 ? 3000760030 ? 6040760060
4140760141 ? 301770303 ? 601770206 ? 1401770014 ? 3001770030 ? 6007776000
4037777401 ? 60000603 ? 77777606 ? 1000000014 ? 3000000030 ? 6060606060
]

118
src/chprog/ocdis.21 Executable file
View File

@@ -0,0 +1,118 @@
IFE TS+DECTS,[
DIS1: 0
IDIVI A,10.
JSR DISC
IDIVI A,6.
JSR DISC
MOVEI B,":-"0
JSR DISC
JRST @DIS1
DISC: 0
ADDI B,"0
DPB B,DISIP
MOVE B,DISIP
ADD B,[60000,,]
SKIPGE B
SUB B,[440000,,1]
MOVEM B,DISIP
JRST @DISC
APREX: MOVE A,CASAVE
MOVE B,CBSAVE
APREX1: CONO 1000+APRCHN
JRST 12,@IAPRBRK
DISL2: 20156220054
61200274040
WNUM: 607260607260
605660343337
20000
61200024040
BNUM: 607260607260
605660373737
3000,,
]
IFN DSPLY,[
FONT: 1 ;FONT ON TV. 0-> 50. WIDE BIG, 1-> 30. WIDE SMALL
FFANCY: -2
FANCY: PUSHJ P,GETNUM
FANSET: MOVE A,FFANCY ;OLD VALUE
MOVEM C,FFANCY
CLEARM TOPVP
CAILE C,2
JRST FFANTV
CAILE A,2
PUSHJ P,TVBOFF ;FLUSH TV PAGES
AOJL C,PSRET ;NO DISPLAY
MOVEI C,11.
MOVEM C,TOPVP
PUSHJ P,TOS
PUSHJ P,DISUP
JRST PSRET
FFANTV: PUSHJ P,TVDINI
PUSHJ P,DBRD
SKIPGE TVFLG
.CALL [ SETZ ;FLUSH ECHOING OF CR, LF, AND TAB
SIXBIT /TTYSET/
1000,,TYIC
[232323232323]
SETZ [230323032323]]
JFCL
POPJ P,
TVBOFF: CLEARM TVFLG
.CALL [ SETZ ;ECHO CR, LF AND TAB AS NORMAL
SIXBIT /TTYSET/
1000,,TYIC
[232323232323]
SETZ [232323232323]]
.VALUE
TVBCLR: MOVE A,[-10,,TVBBAS/2000] ;FLUSH VIDEO BUFFER PAGES
.CALL [ SETZ
SIXBIT /CORBLK/
1000,,0
1000,,-1
SETZ A]
.VALUE
POPJ P,
DISUP:
IFN TS,[
MOVE A,FFANCY
CAILE A,2
JRST INCD ;DO INCR UPDATE OF TV BOARD
SKIPL TTYOFF
SKIPL GETTY
POPJ P, ;NO DISPLAY
HRROI B,TYO1
.IOT TYOC,[^P]
.IOT TYOC,["S] ;SAVE CURSOR POSITION
.IOT TYOC,[^P]
.IOT TYOC,["T]
.IOT TYOC,[^P]
.IOT TYOC,["L]
PUSHJ P,.DISBD
.IOT TYOC,[^P]
.IOT TYOC,["R] ;RESTORE CURSOR POSITION
POPJ P,
]
.DISBD: SKIPLE FFANCY
SOUT [ASCII / !/] ;3 TAB'S
MOVE A,PLYN
TRNE A,1
SOUT [ASCII /BLACK!/]
TRNN A,1
SOUT [ASCII /WHITE!/]
SOUT [ASCII / TO MOVE
!/]
.DISB1: SKIPE FFANCY
PUSHJ P,BDOUT
DISUP3: POPJ P,
.INSRT OCDAGB >
]

10617
src/chprog/ocm.470 Executable file

File diff suppressed because it is too large Load Diff