nba-jam-tournament-edition/MPROC.EQU

362 lines
6.3 KiB
Plaintext
Executable File
Raw Permalink Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

*.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