CON cacheArea = $080 ' Start of cache area endOfCache = $100 ' Next location past cache #0 PC, SP ' Special locations for PC and SP bhNext, bhCall, bhRetn, bhCache, bhExp ' Initial set of entry point addresses DAT org 0 jmp #f_initial ' Initialize, then use for program counter long 0 ' Stack pointer if stack in HUB RAM long f_next ' Address of next instruction routine long f_call ' Address of subroutine call routine long f_retn ' Address of subroutine return routine long f_cache ' Address of load & execute cache routine long f_next ' Address of expansion routine (f_next for now) long 0,0,0,0,0,0,0,0,0 ' Reserved for future expansion f_initial mov PC,PAR movs f_ret,#cacheArea jmp #f_next f_cache rdlong cacheArea+0,PC wz add f_cache,dspIncr2 ' (2 << 9) if_nz add PC,#4 :fcache if_nz rdlong cacheArea+1,PC wz add :fcache,dspIncr2 ' (2 << 9) add PC,#4 if_nz jmp #f_cache movd f_cache,#cacheArea+0 movd :fcache,#cacheArea+1 jmp #cacheArea dspIncr2 long 2 << 9 f_retn mov PC,0-0 add f_retn,#1 jmp #f_next f_call rdlong f_temp,PC sub f_retn,#1 movd :storePc,f_retn add PC,#4 :storePc mov 0-0,PC mov PC,f_temp f_next rdlong :inst1,PC add PC,#4 :inst1 nop rdlong :inst2,PC add PC,#4 :inst2 nop rdlong :inst3,PC add PC,#4 :inst3 nop rdlong :inst4,PC add PC,#4 :inst4 nop jmp #f_next f_temp long 0