mirror of
https://github.com/livingcomputermuseum/Darkstar.git
synced 2026-02-28 09:37:43 +00:00
39 lines
15 KiB
Plaintext
39 lines
15 KiB
Plaintext
head 1.1;
|
|
branch 1.1.1;
|
|
access ;
|
|
symbols start:1.1.1.1 Xerox:1.1.1;
|
|
locks ; strict;
|
|
comment @# @;
|
|
|
|
|
|
1.1
|
|
date 2001.08.12.22.22.07; author freier; state Exp;
|
|
branches 1.1.1.1;
|
|
next ;
|
|
|
|
1.1.1.1
|
|
date 2001.08.12.22.22.07; author freier; state Exp;
|
|
branches ;
|
|
next ;
|
|
|
|
|
|
desc
|
|
@@
|
|
|
|
|
|
|
|
1.1
|
|
log
|
|
@Initial revision
|
|
@
|
|
text
|
|
@{ Copyright (C) 1980, 1984 by Xerox Corporation. All rights reserved. }
|
|
|
|
{Purcell 6-Feb-84 12:54:25 Added AdjustQ for 8mb real mem}
|
|
|
|
MacroDef[ThenElse, BRANCH[#2, #1]];
|
|
|
|
Set[PicLenShifted, 0CA]; {PicLength = 328'x = 808'd. PicLenShifted = RShift2 PicLength}
|
|
{Format of Display Control Block}
|
|
Set[IOPageHigh, 0];
|
|
Set[IOPage, 0];
|
|
Set[DCBLoc, 08];
|
|
Set[WakeupLoc, 0];
|
|
Set[DBitsLoc, 1];
|
|
Set[BorderLoc, 2];
|
|
Set[cursorXLoc, 3];
|
|
Set[cursorYLoc, 4];
|
|
Set[cursorMapLoc, 5];
|
|
RegDef[acR, R, 0]; {Contains picture pattern -- used by Emulator task}
|
|
RegDef[rA, R, 0]; {Test Use -- used by Emulator task}
|
|
RegDef[rB, R, 1]; {Test Use -- used by Emulator task}
|
|
{RegDef[TT, R, 2], RegDef[rhTT, RH, 2]; {Test Use -- used by Emulator task}}
|
|
RegDef[rC, R, 3]; {Test Use -- used by Emulator task}
|
|
RegDef[rD, R, 4]; {Used by Emulator}
|
|
RegDef[Random, R, 5]; {Used by Emulator}
|
|
RegDef[patternMode, U, 0]; {0=> checkerboard, otherwise chevron}
|
|
RegDef[cursorMode, U, 1]; {0=> slash in cursor, non-zero=> flower in cursor}
|
|
RegDef[moveMode, U, 2]; {0=> no movement, non-zero=> random Walk}
|
|
|
|
|
|
{Emulator task. Initialize Display Control Register, cursor, and paint pattern}
|
|
|
|
SetTask[0]; StartAddress[Start];
|
|
TERROR0: ClrIntErr,CANCELBR[TERROR1,0F], c*, at[0];
|
|
TERROR1: RCTEMP¬TEST, c2 ;
|
|
RCTEMP¬RCTEMP xor 4,ZeroBr, c3 ;
|
|
BRANCH[TERROR,$], c1;
|
|
{restore ADDRESSU from RIADD}
|
|
ADDRESSU ¬ RIADD LRot0, GOTO[RUNLIST4Y], c2;
|
|
|
|
TERROR: GOTO[TERROR], c* ;
|
|
|
|
Start: rC ¬ LShift1 0FF, SE¬1, CANCELBR[$, 0F] ,c1;
|
|
rC ¬ LShift1 rC, SE¬1 ,c2;
|
|
rC ¬ LShift1 rC, SE¬1 ,c3;
|
|
|
|
u7FF ¬ rC ,c1;
|
|
rC ¬ LShift1 rC, SE¬1 ,c2;
|
|
rC ¬ LShift1 rC, SE¬1 ,c3;
|
|
|
|
u1FFF ¬ rC ,c1;
|
|
rC ¬ LShift1 rC, SE¬1 ,c2;
|
|
u3FFF ¬ rC ,c3;
|
|
|
|
rD¬ 3, c1; {808 visible lines}
|
|
rD¬ rD LRot8, c2;
|
|
rD¬ rD or 28, c3;
|
|
|
|
|
|
|
|
|
|
walk: DCtl ¬ 1 ,c1;
|
|
ChkBound: rA ¬ uInitPicLength ,c2;
|
|
[] ¬ rD - rA, NegBr {Y>=328?} ,c3;
|
|
|
|
BRANCH[$, YBotOK] ,c1;
|
|
rD ¬ 0, GOTO[ChkYTop] ,c2;
|
|
YBotOK: Noop ,c2;
|
|
ChkYTop: [] ¬ rD, NegBr {Y<0?} ,c3;
|
|
|
|
rB ¬ u3FF, BRANCH[YTopOK, $] ,c1;
|
|
rD ¬ rA - 1 {rD¬327}, GOTO[ChkDone] ,c2;
|
|
YTopOK: Noop ,c2;
|
|
ChkDone: rC ¬ rC and rB{cursorX and 3FF}, GOTO[StartM] ,c3;
|
|
|
|
|
|
StartM: RCTEMP¬STYPE, c1;
|
|
TYPE¬RCTEMP, c2;
|
|
RCTEMP¬USEED, c3;
|
|
|
|
RCTEMP¬USEED, c1;
|
|
RCTEMP¬RCTEMP LRot8, c2;
|
|
R0¬ LSEED, c3;
|
|
|
|
RCTEMP¬RCTEMP or R0, c1;
|
|
SEED¬RCTEMP , c2;
|
|
R1 ¬43, c3;
|
|
|
|
DCtl ¬ R1 LRot0 ,GOTO[RUNLIST], c1;
|
|
|
|
|
|
RUNLIST: pCall4, c2;
|
|
RUNLISTX: CALL[SETUP], c3, at[0,10];
|
|
|
|
RCTEMP¬TEST, GOTO[RUNL], c1, at[0, 10, RunRet];
|
|
RUNL: RCTEMP¬RCTEMP LRot0,XDisp , c2;
|
|
DISP4[RunTest], c3;
|
|
|
|
RunTest: GOTO[RUNLIST1], c1, at[0, 10, RunTest];
|
|
GOTO[RUNLIST2], c1, at[1, 10, RunTest];
|
|
GOTO[RUNLIST1], c1, at[2, 10, RunTest];
|
|
RCTEMP¬MCTLDATA, GOTO[TRAPTEST], c1, at[4, 10, RunTest];
|
|
|
|
|
|
RUNLIST1: pCall4, c2;
|
|
CALL[SETUP], c3, at[1,10];
|
|
|
|
Noop, c1, at[1,10,RunRet];
|
|
pCall4, c2;
|
|
CALL[SSTORE], c3, at[2,10];
|
|
|
|
R0¬DELAYV,GOTO[Delay], c1, at[2,10,RunRet];
|
|
Delay: R1¬ R0 LRot4, c2;
|
|
|
|
Delay1:[]¬R0 , ZeroBr, c3;
|
|
R0¬R0 - 1,BRANCH[$,Delay2], c1;
|
|
GOTO[Delay1], c2;
|
|
Delay2: RCTEMP¬TEST, c2;
|
|
[]¬R1 , ZeroBr, c3;
|
|
R1¬R1 - 1,BRANCH[$,RUNL1], c1;
|
|
GOTO[Delay1], c2;
|
|
|
|
RUNL1: RCTEMP¬RCTEMP LRot0,XDisp , c2;
|
|
DISP4[RunTest1], c3;
|
|
|
|
RunTest1: GOTO[RUNLIST4], c1, at[0, 10, RunTest1];
|
|
GOTO[RUNLIST2], c1, at[1, 10, RunTest1];
|
|
GOTO[RUNLIST2], c1, at[2, 10, RunTest1];
|
|
GOTO[RUNLIST2], c1, at[3, 10, RunTest1];
|
|
|
|
|
|
RUNLIST2: pCall4, c2;
|
|
Noop, CALL[SETUP], c3, at[3,10];
|
|
|
|
|
|
Noop, c1, at[3,10,RunRet];
|
|
pCall4, c2;
|
|
CALL[CHECK], c3, at[4,10];
|
|
|
|
R4 ¬ SEED, c1, at[4,10,RunRet];
|
|
[] ¬ R6 xor 1,ZeroBr, c2;
|
|
BRANCH[RUNLIST4X,$], c3;
|
|
|
|
ADDRESSL¬ 0, c1;
|
|
ADDRESSU ¬ ADDRESSL LRot0, c2;
|
|
R3¬0FF, c3;
|
|
|
|
|
|
R3¬ R3 LRot8, c1;
|
|
R1¬ 3F,pCall4, c2;
|
|
CALL[MAP], c3, at[6,10];
|
|
|
|
|
|
RUNLIST4: Noop, c2;
|
|
RUNLIST4Y: R4 ¬ SEED, c3;
|
|
RUNLIST4X: RF ¬ R6+1, c1, at[6,10,RunRet];
|
|
RF ¬RF xor 5, c2;
|
|
RF ¬ RF ,ZeroBr, c3;
|
|
|
|
R6 ¬ R6+1, BRANCH[TYPE0,TYPE1], c1;
|
|
|
|
TYPE0: GOTO[TYPE3], c2;
|
|
TYPE1: R6 ¬ 0, c2;
|
|
|
|
TYPE3: TYPE ¬ R6 , c3;
|
|
|
|
|
|
|
|
DATAINC: R0 ¬ R4 LRot8, c1;
|
|
R0 ¬ R0+1, c2;
|
|
R0 ¬ R0 and 0FF , c3;
|
|
|
|
UWSEED ¬ R0 , c1;
|
|
R4 ¬ R4 +1, c2;
|
|
R4 ¬R4 and 0FF, c3;
|
|
|
|
LWSEED ¬ R4 , c1;
|
|
R0 ¬R0 LRot8, c2;
|
|
R4 ¬R4 or R0, c3;
|
|
SEED ¬ R4 , c1;
|
|
RCTEMP ¬ PASSCOUNT, c2;
|
|
|
|
|
|
CHECKPASS: RCTEMP ¬ RCTEMP-1,ZeroBr, c3;
|
|
PASSCOUNT ¬ RCTEMP,BRANCH[RUNLIST,PASSDONE1], c1;
|
|
|
|
|
|
PASSDONE1: RCTEMP ¬ TEST, c2;
|
|
RCTEMP ¬ RCTEMP xor 4,ZeroBr, c3;
|
|
BANKE¬0,BRANCH[REENTER,PASSDONE], c1;
|
|
|
|
REENTER: WORDE¬0, c2;
|
|
R0 ¬ 1, c3;
|
|
|
|
REFCONTROL ¬ R0, c1;
|
|
MAP ¬ R0, c2;
|
|
R0 ¬ 4, c3;
|
|
|
|
TEST ¬ R0, c1;
|
|
R0 ¬ 0C0 , c2;
|
|
MCTLDATA ¬ R0, c3;
|
|
|
|
R0 ¬ 0FF, c1;
|
|
PASSCOUNT ¬ R0 , c2;
|
|
PAGEE¬0,GOTO[Start], c3;
|
|
|
|
|
|
PASSDONE: GOTO[NOERROR], c*;
|
|
|
|
NOERROR: GOTO[NOERROR], c*, at[0FFF];
|
|
|
|
|
|
RUNLISTRET: Noop, c1;
|
|
pRet4, c2;
|
|
RET[RunRet], c3;
|
|
|
|
TRAPTEST: R0 ¬ PARITYMEM, c2;
|
|
[]¬R0,ZeroBr, c3;
|
|
BRANCH[PartyTRAPTEST,$], c1;
|
|
|
|
RCTEMP ¬ LShift1 RCTEMP, c2;
|
|
R0 ¬ RCTEMP LRot8, c3;
|
|
R0 ¬ R0 and 1, c1;
|
|
R0 ¬ LShift1 R0, c2;
|
|
R0 ¬ LShift1 R0, c3;
|
|
RCTEMP ¬ RCTEMP or R0, c1;
|
|
PartyTRAPTEST: RCTEMP ¬ RCTEMP and 0FF, c2;
|
|
MCTLDATA ¬ RCTEMP, c3;
|
|
|
|
{enable large real mem: MCtl ¬ 8002h or xx}
|
|
|
|
RF¬CONF, c1;
|
|
RCTEMP¬ RRot1 (RCTEMP + RCTEMP +1), c2;
|
|
MCtl ¬ 2 or RCTEMP, c3;
|
|
|
|
Q ¬ ADDRESSU, L3 ¬ 9, c1;
|
|
RIADD{ADDRESSU} ¬ Q, CALL[AdjustQ], c2;
|
|
ADDRESSU ¬ Q LRot0, c3, at[9, 10, AdjustRet];
|
|
|
|
MAR ¬ [ADDRESSU, ADDRESSL+0], c1;
|
|
MDR¬R4, c2;
|
|
RIADD¬BANKS, c3;
|
|
MAR ¬ [ADDRESSU, ADDRESSL+0], c1;
|
|
EXPECTED¬R4, c2;
|
|
OBSERVED¬MD , c3;
|
|
|
|
Noop, c1;
|
|
Noop, c2;
|
|
Noop , c3;
|
|
|
|
[]¬RF xor RIADD,ZeroBr, c1;
|
|
R0 ¬ RIADD+1 ,BRANCH[TRAPTEST1,TRAPERR], c2;
|
|
TRAPTEST1: BANKS ¬ R0, c3;
|
|
BANKE ¬ R0,GOTO[REENTER] , c1;
|
|
|
|
|
|
TRAPERR: GOTO[TRAPERR], c*;
|
|
|
|
|
|
|
|
{SUBROUTINES*************************************}
|
|
|
|
{enable large real mem: MCtl ¬ 8002h or xx}
|
|
|
|
SETUP: R1¬MCTLDATA, c1;
|
|
R1¬ RRot1(R1 + R1 +1) , c2;
|
|
MCtl ¬ 2 or R1, c3;
|
|
|
|
RCTEMP¬TEST, c1;
|
|
RCTEMP¬RCTEMP and 7, c2;
|
|
TEST¬RCTEMP, c3;
|
|
|
|
FAULTTYPE¬0, c1;
|
|
R1¬BANKE, c2;
|
|
ADDRESSU¬BANKS, c3;
|
|
|
|
ADDRESSL¬PAGES, c1;
|
|
ADDRESSL¬ADDRESSL LRot8 , c2;
|
|
R3¬WORDS, c3;
|
|
ADDRESSL¬ADDRESSL or R3, c1;
|
|
|
|
|
|
IADDRESSU¬BANKE, c2;
|
|
IADDRESSL¬PAGEE, c3;
|
|
IADDRESSL¬IADDRESSL LRot8 , c1;
|
|
R3¬WORDE, c2;
|
|
IADDRESSL¬IADDRESSL or R3, c3;
|
|
|
|
|
|
R3¬PAGEE , c1;
|
|
R3¬R3 LRot8, c2;
|
|
|
|
R4¬WORDE c3;
|
|
R3¬R3 or R4 , c1;
|
|
R4¬SEED, c2;
|
|
|
|
R6¬TYPE,GOTO[RUNLISTRET], c3;
|
|
|
|
|
|
|
|
{SUBROUTINES*************************************}
|
|
{R1=BANKE}
|
|
{ADDRESSL=PAGES,WORDS ADDRESSU=BANKS}
|
|
{IADDRESSL=PAGEE,WORDE IADDRESSU=BANKE}
|
|
{R3=PAGEE,WORDE }
|
|
{R4=SEED}
|
|
{R5=MODIFIER}
|
|
{R6=TYPE}
|
|
{RIADD formerly SEED}
|
|
|
|
{RCTEMP holds ADDRESSH}
|
|
{RIADD holds IADDRESSH}
|
|
{Q, L3 smashed by AdjustQ}
|
|
|
|
{rearrange highest real address bits in ADDRESSU: 4xx53210}
|
|
|
|
SSTORE: Q ¬ ADDRESSU, L3 ¬ 5, c1;
|
|
RCTEMP{ADDRESSU} ¬ Q, CALL[AdjustQ], c2;
|
|
ADDRESSU ¬ Q LRot0, c3, at[5, 10, AdjustRet];
|
|
|
|
Q ¬ IADDRESSU, L3 ¬ 6, c1;
|
|
RIADD{IADDRESSU} ¬ Q, CALL[AdjustQ], c2;
|
|
IADDRESSU ¬ Q LRot0, c3, at[6, 10, AdjustRet];
|
|
|
|
[] ¬ R6, YDisp, c1;
|
|
DISP4[STYPE, 08], c2;
|
|
|
|
STYPE: R5¬0, GOTO[SSTORE3], c3, at[08,10,STYPE];
|
|
R4¬ADDRESSL, GOTO[SSTORE2], c3, at[09,10,STYPE];
|
|
R5¬R4, GOTO[SSTORE3], c3, at[0A,10,STYPE];
|
|
R5¬0, GOTO[SSTORE3], c3, at[0B,10,STYPE];
|
|
R5¬0, GOTO[SSTORE1], c3, at[0C,10,STYPE];
|
|
|
|
|
|
|
|
SSTORE1: [] ¬ R6, YDisp, c1;
|
|
DISP4[STYPE1, 08], c2;
|
|
|
|
STYPE1: Noop, GOTO[SSTORE3], c3, at[08,10,STYPE1];
|
|
R4¬ ADDRESSL, GOTO[SSTORE2], c3, at[09,10,STYPE1];
|
|
R4¬ R4 + R5, GOTO[SSTORE3], c3, at[0A,10,STYPE1];
|
|
R4¬ R4 xor ~R5, GOTO[SSTORE3], c3, at[0B,10,STYPE1];
|
|
R4 ¬ RCTEMP xor 0FF, c3, at[0C,10,STYPE1];
|
|
R4¬ R4 LRot8 , c1;
|
|
R4¬ R4 or RCTEMP , c2;
|
|
GOTO[SSTORE3], c3;
|
|
|
|
SSTORE2: {RIADD ¬ IADDRESSL, c1;
|
|
Noop, c2;
|
|
Noop, c3;}
|
|
|
|
MAR ¬ [IADDRESSU, IADDRESSL+0], c1;
|
|
MDR¬IADDRESSL{RIADD}, c2;
|
|
Noop, c3;
|
|
|
|
SSTORE3: MAR ¬ [ADDRESSU, ADDRESSL+0], c1;
|
|
MDR¬R4, c2;
|
|
[] ¬ ADDRESSL xor R3, ZeroBr, c3;
|
|
ADDRESSL ¬ ADDRESSL +1, BRANCH[SDOAGAIN,SLMATCH], c1;
|
|
SDOAGAIN: IADDRESSL ¬ IADDRESSL -1, c2;
|
|
GOTO[SSTORE1], c3;
|
|
|
|
SLMATCH: RIADD{IADDRESSU} ¬ RIADD -1, L3 ¬ 7, c2;
|
|
Q ¬ RIADD, CALL[AdjustQ], c3;
|
|
IADDRESSU ¬ Q LRot0, c1, at[7, 10, AdjustRet];
|
|
Noop, c2;
|
|
R5 ¬ R5 + RCTEMP{ADDRESSU} +1, c3;
|
|
|
|
[] ¬ RCTEMP{ADDRESSU} xor R1, ZeroBr, L3 ¬ 8, c1;
|
|
RCTEMP ¬ RCTEMP+1 , BRANCH[SDOAGAIN1,SUMATCH], c2;
|
|
|
|
|
|
SDOAGAIN1: Q ¬ RCTEMP{ADDRESSU}, CALL[AdjustQ], c3;
|
|
ADDRESSU ¬ Q LRot0, GOTO[SDOAGAIN], c1, at[8, 10, AdjustRet];
|
|
SUMATCH: ADDRESSU ¬ RCTEMP LRot0, GOTO[RUNLISTRET], c3;
|
|
|
|
{SUBROUTINES*************************************}
|
|
|
|
{R1=BANKE}
|
|
{ADDRESSL=PAGES,WORDS ADDRESSU=BANKS}
|
|
{R3=PAGEE,WORDE }
|
|
{R4=SEED}
|
|
{R5=MODIFIER}
|
|
{R6=TYPE}
|
|
{OBSERVED=OBSERVED}
|
|
{EXPECTED=EXPECTED}
|
|
|
|
{RCTEMP ¬ ADDRESSU}
|
|
{smashes Q}
|
|
|
|
{rearrange highest real address bits in ADDRESSU: 4xx53210}
|
|
|
|
CHECK: Q ¬ ADDRESSU, L3 ¬ 1, c1;
|
|
RCTEMP{ADDRESSU} ¬ Q, CALL[AdjustQ], c2;
|
|
ADDRESSU ¬ Q LRot0, c3, at[1, 10, AdjustRet];
|
|
|
|
[] ¬ R6, YDisp, c1;
|
|
INMAP¬0,DISP4[CTYPE, 08], c2;
|
|
|
|
CTYPE: R5¬0, GOTO[CHECK2], c3, at[08,10,CTYPE];
|
|
R4¬ADDRESSL, GOTO[CHECK2], c3, at[09,10,CTYPE];
|
|
R5¬R4,GOTO[CHECK2], c3, at[0A,10,CTYPE];
|
|
R5¬0, GOTO[CHECK2], c3, at[0B,10,CTYPE];
|
|
R5¬0, GOTO[CHECK1], c3, at[0C,10,CTYPE];
|
|
|
|
CHECK1: [] ¬ R6, YDisp, c1;
|
|
DISP4[CTYPE1, 08], c2;
|
|
|
|
CTYPE1: Noop, GOTO[CHECK2], c3, at[08,10,CTYPE1];
|
|
R4¬ ADDRESSL, GOTO[CHECK2], c3, at[09,10,CTYPE1];
|
|
R4¬ R4 + R5, GOTO[CHECK2], c3, at[0A,10,CTYPE1];
|
|
R4¬ R4 xor ~R5, GOTO[CHECK2], c3, at[0B,10,CTYPE1];
|
|
R4¬ RCTEMP xor 0FF, c3, at[0C,10,CTYPE1];
|
|
R4¬ R4 LRot8, c1;
|
|
R4¬ R4 or RCTEMP , c2;
|
|
GOTO[CHECK2], c3;
|
|
|
|
CHECK2: MAR ¬ [ADDRESSU, ADDRESSL+0], c1;
|
|
EXPECTED¬~R4, c2;
|
|
OBSERVED¬MD , c3;
|
|
|
|
CHECKENTRY: [] ¬ OBSERVED xor R4, NZeroBr, c1;
|
|
EXPECTED¬ R4, BRANCH[$,DATAERR{restore ADDRESSU}], c2;
|
|
[] ¬ ADDRESSL xor R3, ZeroBr, c3;
|
|
|
|
ADDRESSL ¬ ADDRESSL +1 ,BRANCH[CDOAGAIN,CLMATCH], c1;
|
|
CDOAGAIN: Noop, c2;
|
|
GOTO[CHECK1], c3;
|
|
|
|
CLMATCH: Noop, c2;
|
|
R5 ¬ R5 + RCTEMP{ADDRESSU}+1, c3;
|
|
|
|
|
|
[] ¬ RCTEMP{ADDRESSU} xor R1, ZeroBr, L3 ¬ 2, c1;
|
|
RCTEMP ¬ RCTEMP+1, BRANCH[CDOAGAIN1,CUMATCH], c2;
|
|
|
|
|
|
CDOAGAIN1: Q ¬ RCTEMP{ADDRESSU}, CALL[AdjustQ], c3;
|
|
ADDRESSU ¬ Q LRot0, GOTO[CDOAGAIN], c1, at[2, 10, AdjustRet];
|
|
|
|
CUMATCH: GOTO[RUNLISTRET], c3;
|
|
|
|
DATAERR: ADDRESSU ¬ RCTEMP{ADDRESSU} LRot0, {Purcell 6-Feb-84 8:00:04 Added AdjustQ for 8mb real mem}
|
|
GOTO[DATAERR], c*;
|
|
|
|
{SUBROUTINES*************************************}
|
|
{Q=BANK on entry}
|
|
{Q=Adjusted Bank on exit}
|
|
{uses 3 cycles = 1 click}
|
|
{Link3 return thru AdjustRet}
|
|
|
|
AdjustQ: Xbus ¬ Q{BANK} LRot12, XDisp, c*;
|
|
DISP4[AdjTab, 0C], pRet3, c*;
|
|
|
|
Q ¬ Q xor 0{0=>0}, RET[AdjustRet], c*, at[0C, 10, AdjTab];
|
|
Q ¬ Q xor 90{1=>8}, RET[AdjustRet], c*, at[0D, 10, AdjTab];
|
|
Q ¬ Q xor 30{2=>1}, RET[AdjustRet], c*, at[0E, 10, AdjTab];
|
|
Q ¬ Q xor 0A0{3=>9}, RET[AdjustRet], c*, at[0F, 10, AdjTab];
|
|
|
|
{SUBROUTINES*************************************}
|
|
{R1=BANKE}
|
|
{ADDRESSL=PAGES,WORDS ADDRESSU=BANKS}
|
|
{R3=PAGEE,WORDE }
|
|
{R4=SEED}
|
|
{R5=MODIFIER}
|
|
{R6=TYPE}
|
|
{OBSERVED=OBSERVED}
|
|
{EXPECTED=EXPECTED}
|
|
|
|
MAP: RCTEMP ¬ MAP, c1;
|
|
[] ¬ RCTEMP,ZeroBr, c2;
|
|
RCTEMP ¬ 1, BRANCH[MAPOFF,MAPON] , c3;
|
|
|
|
MAPOFF: INMAP¬0, c1;
|
|
GOTO[MUMATCH], c2;
|
|
|
|
MAPON: INMAP¬RCTEMP,GOTO[MDOAGAIN], c1;
|
|
|
|
|
|
MAP2: Map ¬ [ADDRESSU, ADDRESSL+0], c1;
|
|
OBSERVED¬~EXPECTED, c2;
|
|
OBSERVED¬MD , c3;
|
|
|
|
MAPENTRY: [] ¬ OBSERVED xor EXPECTED, NZeroBr, c1;
|
|
BRANCH[$,MDATAERR], c2;
|
|
[] ¬ ADDRESSL xor R3, ZeroBr, c3;
|
|
|
|
ADDRESSL ¬ ADDRESSL +0FF+1 ,BRANCH[MDOAGAIN,MLMATCH], c1;
|
|
MDOAGAIN: EXPECTED ¬ ADDRESSL LRot8, c2;
|
|
EXPECTED ¬ EXPECTED and 0FF, c3;
|
|
|
|
RCTEMP ¬ ADDRESSL, c1;
|
|
ADDRESSL ¬ ADDRESSU , c2;
|
|
ADDRESSL ¬ ADDRESSL LRot8 , c3;
|
|
|
|
EXPECTED ¬ EXPECTED or ADDRESSL, c1;
|
|
ADDRESSL ¬ RCTEMP , c2;
|
|
GOTO[MAP2], c3;
|
|
|
|
|
|
MLMATCH: RCTEMP ¬ ADDRESSL, c2;
|
|
ADDRESSL ¬ ADDRESSU, c3;
|
|
|
|
[] ¬ ADDRESSL xor R1, ZeroBr, c1;
|
|
ADDRESSL ¬ ADDRESSL +1, BRANCH[MDOAGAIN1,MUMATCH], c2;
|
|
|
|
|
|
MDOAGAIN1: ADDRESSU ¬ ADDRESSL LRot0, c3;
|
|
ADDRESSL ¬ RCTEMP , GOTO[MDOAGAIN], c1;
|
|
|
|
|
|
MUMATCH: GOTO[RUNLISTRET], c3;
|
|
|
|
|
|
MDATAERR: GOTO[MDATAERR], c*;
|
|
|
|
|
|
SetTask[5];
|
|
StartAddress[Task5];
|
|
Task5: CANCELBR[Task5,0F], c*;
|
|
|
|
SetTask[3];
|
|
StartAddress[Task3];
|
|
Task3: CANCELBR[Task3,0F], c*;
|
|
|
|
SetTask[2];
|
|
StartAddress[Task2];
|
|
Task2: CANCELBR[Task2,0F], c*;
|
|
|
|
SetTask[4];
|
|
StartAddress[Task4];
|
|
Task4: CANCELBR[Task4,0F], c*;
|
|
@
|
|
|
|
|
|
1.1.1.1
|
|
log
|
|
@first add
|
|
@
|
|
text
|
|
@@
|