362 lines
6.3 KiB
Plaintext
Executable File
362 lines
6.3 KiB
Plaintext
Executable File
*.Last mod - 1/7/93 21:10
|
||
|
||
.globl GETPRC,SUCIDE,PRCSLP,PRCLSP
|
||
.globl process_exist,EXISTP
|
||
.globl XFERPROC
|
||
.globl KILL,KILALL,KIL1C,KILALLN,KOP_1C,KOP_ALL
|
||
.globl RAND,ACTIVE,FREE,PRCSTR
|
||
.globl snd_play1,snd_play,SNDSND
|
||
|
||
;Process data structure
|
||
*STRUCT PROC
|
||
PLINK .set 0 ;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 3C0h ;PROCESS STACK DATA
|
||
PRCSIZ .set 5b0h ;END OF DATA STRUCTURE
|
||
*ENDSTRUCT
|
||
|
||
NPROC .SET 190 ;# 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
|
||
|
||
*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
|
||
|