1:         .title  code
   2: 
   3:         .ident  /10may4/
   4: 
   5:         .mcall  (at)always,st.flg,xmit,zwrite
   6:         always
   7:         st.flg
   8: 
   9:         .mcall  (at)genedt,setnz,next,append,zap,error
  10: 
  11:         .globl  objchn, objlen
  12:         .globl  savreg, ioftbl, buftbl, cnttbl
  13: 
  14:         .globl  dmprld, endp1c, endp2c, pcroll, prgttl
  15:         .globl  setdsp, setimm, setrld, stcode
  16: 
  17:         .globl  abserr, clcloc, clcnam, clcsec
  18:         .globl  codrol, endvec, mode,   objsec
  19:         ;.globl	pass,	psaflg,	rolupd,	secrol
  20:         .globl  pass,   rolupd, secrol
  21:         .globl  sector, setpf0, setpf1, setsec, setxpr
  22:         .globl  symbol, symrol, value
  23:         .globl  edmask, ed.abs, ed.pnc
  24:         .globl  dflgbm, opclas
  25: cc.opr  =       040
  26: cc.nam  =       020
  27: cc.sec  =       010
  28: cc.val  =       004
  29: cc.dsp  =       002
  30: 
  31: 
  32: gsdt00= 00*400          ; object module name
  33: gsdt01= 01*400          ; program section name
  34: gsdt02= 02*400          ; internal symbol table
  35: gsdt03= 03*400          ; transfer address
  36: gsdt04= 04*400          ; symbol declaration
  37: gsdt05= 05*400          ; local section name
  38: gsdt06= 06*400          ; version identification
  39: 
  40: blkt01= 01              ; gsd
  41: blkt02= 02              ; gsd end
  42: blkt03= 03              ; text block
  43: blkt04= 04              ; rld block
  44: blkt05= 05              ; isd
  45: blkt06= 06              ; module end
  46: blkt17= 17
  47:         .sbttl  expression to code-roll conversions
  48: 
  49:         xitsec                  ;start in default psect
  50: 
  51: setimm:                         ;
  52:         call    savreg
  53:         call    setxpr
  54:         clr     -(sp)
  55:         bitb    #glbflg,(r3)
  56:         bne     setds3
  57:         bit     #relflg,(r3)
  58:         beq     setdsx
  59:         cmpb    (r2),clcsec
  60:         bne     setds1
  61:         bis     #cc.sec,(sp)
  62:         br      setdsx
  63: 
  64: setdsp:
  65:         call    savreg
  66:         call    setxpr
  67:         mov     #cc.dsp,-(sp)
  68:         bit     #glbflg,(r3)
  69:         bne     setds3
  70:         cmpb    (r2),clcsec
  71:         beq     setds2
  72:         bit     #relflg,(r3)
  73:         beq     setdsx
  74: setds1: call    setsec
  75:         bis     #cc.sec!cc.nam,(sp)
  76:         br      setdsx
  77: 
  78: setds2: clr     (r3)
  79:         clr     (sp)
  80:         movb    <^pl rolsiz>+codrol+1,r0
  81:         ;movb	@(pc)+,r0
  82:         ; .word	<^pl rolsiz>+codrol+1
  83:         inc     r0
  84:         asl     r0
  85:         add     clcloc,r0
  86:         sub     r0,(r4)
  87:         br      setdsx
  88: 
  89: setds3: bis     #cc.nam,(sp)
  90: setdsx: bit     #dflgbm,opclas
  91:         beq     4$
  92:         tstb    (r4)+
  93:         movb    (r4),r0
  94:         beq     1$
  95:         inc     r0
  96:         bne     2$
  97: 1$:     bit     #cc.sec,(sp)
  98:         beq     3$
  99: 2$:     call    abserr
 100: 3$:     clrb    (r4)
 101:         bis     #200,(sp)
 102: 4$:     movb    (sp)+,(r2)
 103:         return
 104:         .globl  limit
 105: 
 106: limit:
 107:         call    setrld
 108: 1$:     inc     r3
 109:         movb    #cc.opr,(r2)+
 110:         movb    r3,(r2)+
 111:         movb    r3,(r2)+
 112:         call    dmprld
 113:         mov     #symbol,r0
 114:         clr     (r0)+
 115:         mov     r3,(r0)+
 116:         mov     #cc.nam*400,(r0)+
 117:         clr     (r0)+
 118:         call    stcode
 119:         cmp     r3,#2
 120:         blo     1$
 121:         return
 122: 
 123:         .globl  ident,  rad50
 124: ident:                          ;"ident" directive
 125:         call    rad50           ;treat as rad 50
 126:         clr     rolupd          ;point to start of code roll
 127:         mov     #prgidn,r2      ;  and to ident block
 128: 1$:     next    codrol          ;get the next entry
 129:         mov     value,(r2)+     ;stuff it
 130:         cmp     r2,#prgidn+4    ;two words?
 131:         blo     1$              ;  no
 132:         mov     #gsdt06,(r2)+   ;yes, set gsd type
 133:         zap     codrol          ;clear code
 134:         return
 135: 
 136: 
 137:         entsec  impure
 138: prgttl: .blkw   4               ;title block
 139: prgidn: .blkw   4               ;ident   "
 140:         xitsec
 141:         .sbttl  object code handlers
 142: 
 143: endp1c:                         ;end pass1 code init
 144:         tstb    ioftbl+objchn   ;any obj file?
 145:         beq     9$              ;  no
 146:         call    objini          ;init output
 147:         mov     #blkt01,@buftbl+objchn  ;set block type 1
 148:         mov     #prgttl,r1      ;set "from" index
 149:         call    gsddmp          ;output gsd block
 150:         mov     #prgidn,r1      ;point to sub-ttl buffer
 151:         tst     4(r1)           ;set?
 152:         beq     1$              ;  no
 153:         call    gsddmp          ;yes, stuff it
 154: 1$:     clr     -(sp)           ;init for sector scan
 155: 2$:     mov     (sp)+,rolupd    ;set scan marker
 156:         next    secrol          ;get the next sector
 157:         beq     6$              ;branch if through
 158:         mov     rolupd,-(sp)    ;save marker
 159:         mov     #value+2,r1
 160:         mov     (r1),-(r1)
 161:         clr     r5
 162:         bisb    -(r1),r5
 163:         movb    #gsdt05/400,(r1)
 164:         ;tst	psaflg				; who cares?  a .csect is a
 165:         ;bne	3$				;special kind of .psect
 166:         ;movb	#gsdt01/400,(r1)		; so dont need this code
 167:         ;bicb	#^c<defflg!relflg>,-(r1)	;	j reeds sept 81.
 168: 3$:     clr     rolupd          ;set for inner scan
 169: 4$:     mov     #symbol,r1
 170:         call    gsddmp          ;output this block
 171: 5$:     next    symrol          ;fetch the next symbol
 172:         beq     2$              ;  finished with this guy
 173:         bit     #glbflg,mode    ;global?
 174:         beq     5$              ;  no
 175:         bit     #regflg,mode    ;is register (prevent god's wrath)
 176:         bne     5$              ;no global registers with ==*
 177:         cmpb    sector,r5       ;yes, proper sector?
 178:         bne     5$              ;  no
 179:         bic     #^c<defflg!200!relflg!glbflg>,mode      ;clear most (leave hk up)
 180:         bis     #gsdt04,mode    ;set type 4
 181:         br      4$              ;output it
 182: 
 183: 
 184: 6$:     bic     #^c<relflg>,endvec+4    ;clear all but rel flag
 185:         bis     #gsdt03+defflg,endvec+4
 186:         mov     #endvec,r1
 187:         call    gsddmp          ;output end block
 188:         call    objdmp          ;dump it
 189:         mov     #blkt02,@buftbl+objchn  ;set "end of gsd"
 190:         call    objdmf
 191:         mov     #blkt17,@buftbl+objchn  ;init for text blocks
 192: 9$:
 193:         inc     pass            ;set for pass 2
 194:         return
 195: 
 196: 
 197: gsddmp:                         ;dump a gsd block
 198:         call    setrld
 199:         xmit    4
 200:         jmp     dmprld
 201: endp2c:
 202:         tst     objpnt          ;any object output?
 203:         beq     1$              ;  no
 204:         call    objdmp          ;yes, dump it
 205: .if     ne,mk.symbol
 206:         tst     out$ym
 207:         beq     22$
 208: .endc
 209: 32$:    mov     #blkt06,@buftbl+objchn  ;set end
 210:         call    objdmf          ;dump it
 211:         .if ndf xedabs
 212:         bit     #ed.abs,edmask  ;abs output?
 213:         bne     1$              ;  no
 214:         mov     objpnt,r0
 215:         mov     endvec+6,(r0)+  ;set end vector
 216:         mov     r0,objpnt
 217:         call    objdmp
 218:         .endc
 219: 1$:     return
 220: 
 221: .if     ne,mk.symbol
 222: 22$:    mov     #blkssym,@buftbl+objchn
 223:         clr     rolupd
 224: 3$:     next    symrol
 225:         beq     31$
 226:         bit     #glbflg,mode
 227:         bne     3$
 228:         mov     #symbol,r1
 229:         call    gsddmp
 230:         br      3$
 231: 
 232: 31$:    tst     objpnt
 233:         beq     30$
 234:         call    objdmp
 235: 30$:
 236:         call    locdmp
 237:         mov     #blksye,@buftbl+objchn
 238:         tst     objpnt
 239:         beq     32$
 240:         call    objdmf
 241:         br      32$
 242: 
 243:         entsec  impure
 244: out$ym: .blkw   1
 245:         xitsec
 246: 
 247: blksye=21
 248: blkssys=22
 249: 
 250: .globl  out$ym
 251: .endc
 252: 
 253:         .sbttl  code roll handlers
 254: 
 255: stcode: append  codrol          ;append to codrol
 256:         return
 257: 
 258:         .globl  pcrcnt
 259: pcroll:                         ;
 260:         next    codrol
 261:         beq     9$
 262:         call    savreg
 263:         movb    sector,r4
 264:         tst     pass
 265:         beq     7$
 266:         inc     pcrcnt
 267:         bne     1$
 268:         call    setpf0
 269: 1$:     call    setpf1
 270:         tst     objpnt
 271:         beq     7$
 272:         .if ndf xedpnc
 273:         bit     #ed.pnc,edmask
 274:         bne     7$
 275:         .endc
 276:         call    setrld
 277:         mov     r4,-(sp)
 278:         mov     #cc.sec!cc.nam!cc.opr,r4
 279:         cmpb    clcsec,objsec
 280:         bne     2$
 281:         cmp     clcloc,objloc
 282:         beq     3$
 283:         bic     #cc.nam,r4
 284: 2$:     mov     #clcnam,r1
 285:         call    pcrolx
 286:         clrb    (r2)+
 287:         call    dmprld
 288: 3$:     mov     (sp)+,r4
 289:         mov     #symbol,r1
 290:         call    pcrolx
 291:         call    dmprld
 292: 7$:     inc     clcloc
 293:         tstb    r4
 294:         bmi     8$
 295:         inc     clcloc
 296: 8$:     movb    clcsec,objsec
 297:         mov     clcloc,objloc
 298:         setnz   r0
 299: 9$:     return
 300: pcrolx:
 301:         movb    r4,(r2)+
 302:         bit     #cc.nam,r4
 303:         beq     3$
 304:         .rept   4
 305:         movb    (r1)+,(r2)+
 306:         .endm
 307:         cmp     -(r1),-(r1)
 308: 3$:     add     #6,r1
 309:         tst     (r1)
 310:         beq     4$
 311:         movb    (r1)+,(r2)+
 312:         bisb    #cc.val,rldtmp
 313:         tstb    r4
 314:         bmi     4$
 315:         movb    (r1)+,(r2)+
 316: 4$:     return
 317: 
 318:         entsec  implin
 319: pcrcnt: .blkw                   ;extension line flag
 320:         entsec  imppas
 321:         .odd
 322: objsec: .blkb   1               ;object file sector
 323: objloc: .blkw   1               ;object file location
 324: 
 325: 
 326: 
 327: 
 328: 
 329:         .if ndf xedpnc
 330:         genedt  pnc,pncset      ;punch control
 331: 
 332: pncset: movb    #377,objsec     ;force sequence break
 333:         return
 334:         .endc
 335: objdmp:                         ;dump the object buffer
 336:         tst     objpnt
 337:         beq     objinx          ;exit if not pre-set
 338:         mov     buftbl+objchn,r0
 339:         tst     (r0)+           ;ignore first word
 340:         cmp     objpnt,r0       ;anything in rld?
 341:         blos    objini          ;  no, just init
 342: objdmf:
 343:         mov     objpnt,@cnttbl+objchn
 344:         sub     buftbl+objchn,@cnttbl+objchn    ;compute byte count
 345:         zwrite  obj
 346: 
 347: objini: mov     buftbl+objchn,objpnt
 348:         add     #2,objpnt       ;reserve word for block type
 349: objinx: return
 350: 
 351: dmprld: tst     objpnt
 352:         beq     setrld
 353:         mov     r1,-(sp)        ;save byte count
 354:         mov     #rldtmp,r1
 355:         mov     r2,r0
 356:         sub     r1,r0
 357:         beq     9$
 358:         add     objpnt,r0
 359:         sub     buftbl+objchn,r0
 360:         cmp     r0,#objlen      ;room to store?
 361:         blos    1$              ;  yes
 362:         call    objdmp          ;no, dump current
 363: 1$:     mov     objpnt,r0       ;return with pointer in r2
 364: 2$:     movb    (r1)+,(r0)+
 365:         cmp     r1,r2
 366:         blo     2$
 367:         mov     r0,objpnt
 368: 9$:     mov     (sp)+,r1
 369: setrld: mov     #rldtmp,r2
 370:         return
 371: 
 372:         entsec  impure
 373: objpnt: .blkw
 374: rldtmp: .blkb   100.
 375:         xitsec
 376: 
 377: 
 378:         xitsec
 379:         .globl  sx.flg ,lsyrol
 380: locdmp:
 381:         call    savreg
 382:         mov     r0,-(sp)
 383:         tst     sx.flg
 384:         beq     9$
 385:         clr     rolupd
 386: 1$:
 387:         next    lsyrol
 388:         beq     2$
 389:         bit     #glbflg,mode
 390:         bne     1$
 391:         call    unlocl
 392:         mov     #symbol,r1
 393:         call    gsddmp
 394:         br      1$
 395: 2$:
 396:         tst     objpnt
 397:         beq     9$
 398:         call    objdmp
 399: 9$:
 400:         mov     (sp)+,r0
 401:         return
 402: 
 403: .globl  dnc ,chrpnt,    getsym,..z
 404: unlocl:
 405:         call    savreg
 406:         mov     r0,-(sp)
 407:         mov     #work.x,r2
 408:         mov     symbol+2,r1
 409:         call    dnc
 410:         movb    #'$,(r2)+
 411:         movb    #0,(r2)+
 412:         call    tor50
 413:         mov     (sp)+,r0
 414:         return
 415:         entsec  mixed
 416: work.x: .blkw   5
 417:         xitsec
 418: tor50:
 419:         call    savreg
 420:         mov     #work.x,r4
 421:         call    1$
 422:         mov     r0,symbol
 423:         mov     #3+work.x,r4
 424:         call    1$
 425:         mov     r0,2+symbol
 426:         return
 427: 1$:
 428:         clr     r3
 429:         tstb    (r4)
 430:         beq     10$
 431:         movb    (r4)+,r0
 432:         br      20$
 433: 10$:    movb    (r4),r0
 434: 20$:    mov     r0,r2
 435:         call    40$
 436:         mov     r0,r3
 437:         mov     r3,r1
 438:         mul     #50,r1
 439:         mov     r1,r3
 440:         tstb    (r4)
 441:         beq     12$
 442:         movb    (r4)+,r0
 443:         br      21$
 444: 12$:    movb    (r4),r0
 445: 21$:    mov     r0,r2
 446:         call    40$
 447:         add     r0,r3
 448:         mov     r3,r1
 449:         mul     #50,r1
 450:         mov     r1,r3
 451:         movb    (r4),r0
 452:         mov     r0,r2
 453:         call    40$
 454:         add     r0,r3
 455:         mov     r3,r0
 456:         return
 457: 40$:
 458:         cmpb    #44,r2
 459:         bne     30$
 460:         mov     #33,r0
 461:         br      9$
 462: 14$:    clr     r0
 463: 9$:     return
 464: 30$:    tstb    r2
 465:         beq     14$
 466:         cmpb    #40,r2
 467:         beq     14$
 468:         movb    r2,r0
 469:         add     #-22,r0
 470:         br      9$
 471:         .end
 472: 
 473:         .end
Last modified: 1982-12-11
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 502
Valid CSS Valid XHTML 1.0 Strict