.TITLE ATTUNI .IDENT /V01.0/ ;+ ; ; Routine to attach either MTREK, PLAYER, or PLAYEM to the static ; data common UNICOM, which is the universe for MTREK. ; ; D. O'Reilly 20-Dec-82 ; ; Modifications : ; ; D. Carroll Jan - 83 ; ; Add universe offsets for the common ; ; D. Carroll 09-Feb-83 ; ; Change signed multiply to unsigned ; ; ;- .MCALL DIR$,ATRG$,CRAW$,RDBBK$,WDBBK$,QIOW$ .PSECT MAPPNG,RW,D,GBL,OVR RDB:: RDBBK$ 0,UNICOM,GEN, WDB:: WDBBK$ 7,128.,0,0,0, MAPS: .WORD 0,0 CURBAS: .WORD 0 CURTOP: .WORD 0 UNIBAS: .BLKW 5 .PSECT DATA,RW,D ATRG: ATRG$ RDB CRAW: CRAW$ WDB .PSECT TRKCOM,RW,D,GBL,OVR MAXX: .BLKW 1 MAXY: .BLKW 1 IUNIV: .BLKW 8. IUNIMX: .BLKW 1 .PSECT RODATA,RO,D TOHIGH: QIOW$ IO.WVB,5,1,,,, HIGH: .ASCII /ATTUNI -- Address wrap around initialization failure./ HIGHL =.-HIGH .EVEN .PSECT ATTUNI:: DIR$ #ATRG ;ATTACH TO THE REGION BCS 10$ ;IF CS, AN ERROR OCCCURRED MOV RDB+R.GID,WDB+W.NRID ;GET THE ID OF THE REGION FOR MAPPING DIR$ #CRAW ;CREATE AN ADDRESS WINDOW AND MAP IT BCS 20$ ;IF CS, AN ERROR OCCURRED CLR CURBAS ;SET MAPPING BASE TO ZERO MOV #20000,CURTOP ;AND THE MAPPING TOP TO 4K MOV #1,@2(R5) ;RETURN SUCCESS ; ; Calculate the base addresses for the respective universes ; MOV MAXX,R1 ; get the max number for it MOV MAXY,R0 ; get max Y also CALL $MUL ; multiply it out ADD #100,R1 ; round to next mapping index BIC #77,R1 ; clean up the low garbage CLR R0 ; set base offset MOV IUNIMX,R2 ; set loop count MOV #UNIBAS,R3 ; set the base address for the universes 5$: MOV R0,(R3)+ ; save the base address ADD R1,R0 ; get the offset BCS 50$ ; overflow resulted SOB R2,5$ ; loop on it ... BR 40$ ;AND GO AWAY 10$: MOVB #1,@3(R5) ;THE FUNCTION BR 30$ ;AND GO FINISH UP 20$: 30$: MOVB $DSW,@2(R5) ;THE ERROR 40$: RETURN ;BYE, BYE 50$: DIR$ #TOHIGH ; address wrap around BPT .END