377 lines
6.6 KiB
Plaintext
377 lines
6.6 KiB
Plaintext
|
*.Last mod - 4/8/95 19:55
|
|||
|
|
|||
|
.globl GETPRC,SUCIDE,PRCSLP,PRCLSP
|
|||
|
.globl process_exist,EXISTP
|
|||
|
.globl XFERPROC
|
|||
|
.globl KILL,KILALL,KIL1C,KILALLN
|
|||
|
.globl RAND,ACTIVE,FREE,PRCSTR
|
|||
|
.globl snd_play1,snd_play,SNDSND
|
|||
|
.globl SFREE,SPRCSTR,GETSPRC,GETPRC_INSERT
|
|||
|
|
|||
|
;Process data structure
|
|||
|
*STRUCT PROC
|
|||
|
PLINK .set 0 ;UHL LINK TO NEXT 32 BITS
|
|||
|
PROCID .set 20h ;UHW PROCESS ID 16 BITS
|
|||
|
PTIME .set 30h ;UHW SLEEP TIME X 16MSEC 16 BITS
|
|||
|
PSPTR .set 40h ;UHL PROCESS STACK POINTER 32 BITS
|
|||
|
PA11 .set 60h ;UHL REGISTERS SAVED
|
|||
|
PA10 .set 80h ;UHL
|
|||
|
PA9 .set 0A0h ;UHL
|
|||
|
PA8 .set 0C0h ;UHL
|
|||
|
PWAKE .set 0E0h ;UHL
|
|||
|
PDATA .set 100h ;PROCESS DATA STORE
|
|||
|
|
|||
|
PSDATA .set 400h ;PROCESS STACK DATA
|
|||
|
PRCSIZ .set 600h ;END OF DATA STRUCTURE
|
|||
|
*ENDSTRUCT
|
|||
|
|
|||
|
SPSDATA .set 1080h ;SUPER-PROCESS STACK DATA
|
|||
|
SPRCSIZ .set 1380h ;SUPER-PROCESS END OF STRUCT
|
|||
|
|
|||
|
SNPROC .SET 7 ;# of super-procs
|
|||
|
|
|||
|
;NPROC .SET 100 ;# processes
|
|||
|
NPROC .SET 150 ;# processes
|
|||
|
|
|||
|
*GSP MACROS
|
|||
|
|
|||
|
*SUBTRACT REGISTER FROM MEMORY
|
|||
|
* SUBRM REG,ADDR,FIELD SIZE
|
|||
|
*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY
|
|||
|
|
|||
|
SUBRM .macro P1,P2,P3
|
|||
|
MOVE :P2:,A14,:P3:
|
|||
|
SUB :P1:,A14
|
|||
|
MOVE A14,:P2:,:P3:
|
|||
|
.endm
|
|||
|
|
|||
|
*ADD REGISTER TO MEMORY
|
|||
|
* ADDRM REG,ADDR,FIELD SIZE
|
|||
|
*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY
|
|||
|
|
|||
|
ADDRM .macro P1,P2,P3
|
|||
|
MOVE :P2:,A14,:P3:
|
|||
|
ADD :P1:,A14
|
|||
|
MOVE A14,:P2:,:P3:
|
|||
|
.endm
|
|||
|
|
|||
|
*INCREMENT LOCATION
|
|||
|
*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY
|
|||
|
|
|||
|
INCW .macro P1
|
|||
|
MOVE :P1:,A14
|
|||
|
INC A14
|
|||
|
MOVE A14,:P1:
|
|||
|
.endm
|
|||
|
|
|||
|
*DECREMENT WORD
|
|||
|
*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY
|
|||
|
|
|||
|
DECW .macro P1
|
|||
|
MOVE :P1:,A14
|
|||
|
DEC A14
|
|||
|
MOVE A14,:P1:
|
|||
|
.endm
|
|||
|
|
|||
|
*INCREMENT MEMORY
|
|||
|
* INCM ADDR,FIELD SIZE
|
|||
|
*A14 DESTROYED
|
|||
|
|
|||
|
INCM .macro P1,P2
|
|||
|
MOVE :P1:,A14,:P2:
|
|||
|
INC A14
|
|||
|
MOVE A14,:P1:,:P2:
|
|||
|
.endm
|
|||
|
|
|||
|
*DECREMENT MEMORY
|
|||
|
* DECM ADDR,FIELD SIZE
|
|||
|
*A14 DESTROYED
|
|||
|
|
|||
|
DECM .macro P1,P2
|
|||
|
MOVE :P1:,A14,:P2:
|
|||
|
DEC A14
|
|||
|
MOVE A14,:P1:,:P2:
|
|||
|
.endm
|
|||
|
|
|||
|
*SUBTRACT MEMORY
|
|||
|
* SUBM ADDR,REG,FIELD SIZE
|
|||
|
*SUBTRACTS ADDRESS FROM REGISTER
|
|||
|
*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY
|
|||
|
|
|||
|
SUBM .macro P1,P2,P3
|
|||
|
MOVE :P1:,A14,:P3:
|
|||
|
SUB A14,:P2:
|
|||
|
.endm
|
|||
|
|
|||
|
*ADD MEMORY
|
|||
|
* ADDM ADDR,REG,FIELD SIZE
|
|||
|
*ADDS ADDRESS FROM REGISTER
|
|||
|
*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY
|
|||
|
|
|||
|
ADDM .macro P1,P2,P3
|
|||
|
MOVE :P1:,A14,:P3:
|
|||
|
ADD A14,:P2:
|
|||
|
.endm
|
|||
|
|
|||
|
*NEGATE MEMORY
|
|||
|
* NEGM ADDR,FIELD SIZE
|
|||
|
*NEGATES ADDRESS CONTENTS
|
|||
|
*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY
|
|||
|
|
|||
|
NEGM .macro P1,P2
|
|||
|
MOVE :P1:,A14,:P2:
|
|||
|
NEG A14
|
|||
|
MOVE A14,:P1:,:P2:
|
|||
|
.endm
|
|||
|
|
|||
|
*COMPARE MEMORY
|
|||
|
* CMPM ADDR,REG,FIELD SIZE
|
|||
|
*COMPARES ADDRESS TO REGISTER
|
|||
|
*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY
|
|||
|
|
|||
|
CMPM .macro P1,P2,P3
|
|||
|
MOVE :P1:,A14,:P3:
|
|||
|
CMP A14,:P2:
|
|||
|
.endm
|
|||
|
|
|||
|
*CLEAR MEMORY
|
|||
|
* CLRM ADDR,FIELD SIZE
|
|||
|
*CLEARS ADDRESS CONTENTS
|
|||
|
*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY
|
|||
|
|
|||
|
CLRM .macro P1,P2
|
|||
|
CLR A14
|
|||
|
MOVE A14,:P1:,:P2:
|
|||
|
.endm
|
|||
|
|
|||
|
*COMPLEMENT MEMORY
|
|||
|
* COMM ADDR,FIELD SIZE
|
|||
|
*COMPLEMENTS ADDRESS CONTENTS
|
|||
|
*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY
|
|||
|
|
|||
|
COMM .macro P1,P2
|
|||
|
MOVE :P1:,A14,:P2:
|
|||
|
NOT A14
|
|||
|
MOVE A14,:P1:,:P2:
|
|||
|
.endm
|
|||
|
|
|||
|
*SHIFT LEFT MEMORY
|
|||
|
* SLLM SHIFT COUNT,ADDR,FIELD SIZE
|
|||
|
*SHIFTS ADDRESS CONTENTS
|
|||
|
*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY
|
|||
|
|
|||
|
SLLM .macro P1,P2,P3
|
|||
|
MOVE :P2:,A14,:P3:
|
|||
|
SLL :P1:,A14
|
|||
|
MOVE A14,:P2:,:P3:
|
|||
|
.endm
|
|||
|
|
|||
|
*SHIFT RIGHT ARITHMETIC MEMORY
|
|||
|
* SRAM SHIFT COUNT,ADDR,FIELD SIZE
|
|||
|
*SHIFTS ADDRESS CONTENTS
|
|||
|
*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY
|
|||
|
|
|||
|
SRAM .macro P1,P2,P3
|
|||
|
MOVE :P2:,A14,:P3:
|
|||
|
SEXT A14,:P3:
|
|||
|
SRA :P1:,A14
|
|||
|
MOVE A14,:P2:,:P3:
|
|||
|
.endm
|
|||
|
|
|||
|
*SHIFT RIGHT LOGICAL MEMORY
|
|||
|
* SRLM SHIFT COUNT,ADDR,FIELD SIZE
|
|||
|
*SHIFTS ADDRESS CONTENTS
|
|||
|
*A14 DESTROYED, 'A' REGISTER TYPE INSTRUCTIONS ONLY
|
|||
|
|
|||
|
SRLM .macro P1,P2,P3
|
|||
|
MOVE :P2:,A14,:P3:
|
|||
|
ZEXT A14,:P3:
|
|||
|
SRL :P1:,A14
|
|||
|
MOVE A14,:P2:,:P3:
|
|||
|
.endm
|
|||
|
|
|||
|
*BIT SET
|
|||
|
* BSET BIT# 0-31(KONSTANT OR REGISTER),REGISTER TO SET BIT IN
|
|||
|
* NOTE: A14 IS DESTROYED, 'A' FILE REGISTERS ONLY
|
|||
|
|
|||
|
BSET .macro P1,R1
|
|||
|
MOVK 1,A14
|
|||
|
SLL :P1:,A14
|
|||
|
OR A14,:R1:
|
|||
|
.endm
|
|||
|
|
|||
|
|
|||
|
*BIT CLR
|
|||
|
* BCLR BIT# 0-31(KONSTANT OR REGISTER),REGISTER TO CLR BIT IN
|
|||
|
* NOTE: A14 IS DESTROYED, 'A' FILE REGISTERS ONLY
|
|||
|
|
|||
|
BCLR .macro P1,R1
|
|||
|
MOVK 1,A14
|
|||
|
SLL :P1:,A14
|
|||
|
ANDN A14,:R1:
|
|||
|
.endm
|
|||
|
|
|||
|
*SET THE Z BIT
|
|||
|
* SETZ
|
|||
|
* STATUS BITS:
|
|||
|
* N Unaffected
|
|||
|
* C Unaffected
|
|||
|
* Z 1
|
|||
|
* V Unaffected
|
|||
|
* NOTE: A14 IS CLEARED
|
|||
|
|
|||
|
SETZ .macro
|
|||
|
CLR A14
|
|||
|
.endm
|
|||
|
|
|||
|
*CLR THE Z BIT
|
|||
|
* CLRZ
|
|||
|
* STATUS BITS:
|
|||
|
* N Unaffected
|
|||
|
* C Unaffected
|
|||
|
* Z 0
|
|||
|
* V Unaffected
|
|||
|
* NOTE: A14 IS SET TO 1
|
|||
|
|
|||
|
CLRZ .macro
|
|||
|
CLR A14
|
|||
|
NOT A14
|
|||
|
.endm
|
|||
|
|
|||
|
*PROCESS SLEEP CONSTANT
|
|||
|
*A=Sleep time 1-7fff
|
|||
|
*RET ADDR ON STACK
|
|||
|
|
|||
|
SLEEP .macro A
|
|||
|
movi :A:,a0
|
|||
|
calla PRCSLP
|
|||
|
.endm
|
|||
|
|
|||
|
SLEEPK .macro A
|
|||
|
movk :A:,a0
|
|||
|
calla PRCSLP
|
|||
|
.endm
|
|||
|
|
|||
|
*PROCESS SLEEP REGISTER
|
|||
|
*REG1=REGISTER THAT CONTAINS SLEEP TIME 1-FFFF LOADED INTO A0
|
|||
|
*RET ADDR ON STACK
|
|||
|
|
|||
|
SLEEPR .macro REG1
|
|||
|
MOVE :REG1:,A0
|
|||
|
CALLA PRCSLP
|
|||
|
.endm
|
|||
|
|
|||
|
*PROCESS LOOP SLEEP
|
|||
|
*s=Sleep time, a=*Wakeup addr
|
|||
|
|
|||
|
SLOOP .macro s,a
|
|||
|
.if :s: < 33
|
|||
|
movk :s:,a0
|
|||
|
.else
|
|||
|
movi :s:,a0
|
|||
|
.endif
|
|||
|
movi :a:,a7,L
|
|||
|
jauc PRCLSP
|
|||
|
.endm
|
|||
|
|
|||
|
*PROCESS LOOP SLEEP REGISTER
|
|||
|
*P1=REGISTER CONTAINING SLEEP TIME 1-FFFF, P2 =WAKEUP ADDR-->A7
|
|||
|
|
|||
|
SLOOPR .macro P1,P2
|
|||
|
MOVE :P1:,A0
|
|||
|
MOVI :P2:,A7,L
|
|||
|
JAUC PRCLSP
|
|||
|
.endm
|
|||
|
|
|||
|
*PROCESS CREATION MACRO
|
|||
|
*P1=ID-->A1, P2=PC-->A7
|
|||
|
|
|||
|
CREATE .macro p1,p2
|
|||
|
movi :p1:,a1
|
|||
|
movi :p2:,a7,L
|
|||
|
calla GETPRC
|
|||
|
.endm
|
|||
|
|
|||
|
*PROCESS CREATION MACRO
|
|||
|
*A=PC-->A7
|
|||
|
CREATE0 .macro A
|
|||
|
clr a1
|
|||
|
movi :A:,a7,L
|
|||
|
calla GETPRC
|
|||
|
.endm
|
|||
|
|
|||
|
SCREATE .macro p1,p2
|
|||
|
movi :p1:,a1
|
|||
|
movi :p2:,a7,L
|
|||
|
calla GETSPRC
|
|||
|
.endm
|
|||
|
|
|||
|
*KILL PROCESS(ES)
|
|||
|
*P1=ID-->A0,P2=MASK-->A1
|
|||
|
|
|||
|
KILLIT .macro P1,P2
|
|||
|
MOVI :P1:,A0
|
|||
|
MOVI :P2:,A1
|
|||
|
CALLA KILALL
|
|||
|
.endm
|
|||
|
|
|||
|
*CALL IT QUITS
|
|||
|
|
|||
|
DIE .macro
|
|||
|
jauc SUCIDE
|
|||
|
.endm
|
|||
|
|
|||
|
*PROCESS JUMP SUBROUTINE
|
|||
|
*P1=ADDRESS OF SLEEPING PROCESS
|
|||
|
*A7 IS USED FOR PC STORAGE
|
|||
|
|
|||
|
JSRP .macro P1
|
|||
|
GETPC A7
|
|||
|
ADDI 060h,A7
|
|||
|
MOVE A7,-*A12,L ;PUSH RET ADDR
|
|||
|
JAUC :P1:
|
|||
|
.endm
|
|||
|
|
|||
|
*PROCESS JUMP SUBROUTINE ON REGISTER
|
|||
|
*R1=REGISTER CONTAINING ADDRESS OF SLEEPING PROCESS
|
|||
|
*A7 IS USED FOR PC STORAGE
|
|||
|
|
|||
|
JSRPR .macro R1
|
|||
|
GETPC A7
|
|||
|
ADDI 040h,A7
|
|||
|
MOVE A7,-*A12,L ;PUSH RET ADDR
|
|||
|
JUMP :R1:
|
|||
|
.endm
|
|||
|
|
|||
|
*RETURN FROM SLEEPING SUBROUTINE
|
|||
|
*A7 IS USED FOR PC STORAGE
|
|||
|
*STATUS REGISTER IS NOT AFFECTED
|
|||
|
|
|||
|
RETP .macro
|
|||
|
mmfm a12,a7 ;PULL RETURN ADDR, W/O ZAPPING STAT
|
|||
|
exgpc a7
|
|||
|
.endm
|
|||
|
|
|||
|
*FIND MATCHING PROCESS(ES), BRANCH IF ONE WAS FOUND
|
|||
|
*P1=ID-->A0,P2=MASK-->A1,P3=BRANCH LABEL
|
|||
|
MATCHP .macro P1,P2,P3
|
|||
|
MOVI :P1:,A0
|
|||
|
MOVI :P2:,A1
|
|||
|
CALLA EXISTP
|
|||
|
JANZ :P3:
|
|||
|
.endm
|
|||
|
|
|||
|
*FIND MATCHING PROCESS(ES), BRANCH IF NONE WERE FOUND
|
|||
|
*P1=ID-->A0,P2=MASK-->A1,P3=BRANCH LABEL
|
|||
|
NOMATCHP .macro P1,P2,P3
|
|||
|
MOVI :P1:,A0
|
|||
|
MOVI :P2:,A1
|
|||
|
CALLA EXISTP
|
|||
|
JAZ :P3:
|
|||
|
.endm
|
|||
|
|
|||
|
LOCKUP .macro
|
|||
|
trap 29
|
|||
|
.endm
|
|||
|
|
|||
|
|