Changed the remainder operator from '%' to '^/', mainly because '%' must be allowed in MACRO-10 symbols instead, but also because '%' led one to believe it was a "mod" operator (it wasn't); added IFDEF support to the MACRO-10 Mini-Assembler; updated the Debugger's assemble command to recognize filenames with "KLM" extensions, too.
This commit is contained in:
parent
71e2ecb5cb
commit
e7988597c5
17 changed files with 573 additions and 142 deletions
|
|
@ -569,3 +569,4 @@ DEFINE SDFARP (T,A,B,C,D,E,F,G,H,I,M,K,L) <
|
|||
CAME AC+1,[K,,L]
|
||||
ER4 AC+1,T
|
||||
JUMPL AC+4,.-^D6 ;LOOP ON ERROR SWITCH>
|
||||
|
||||
|
|
|
|||
362
apps/pdp10/diags/klad/FIXED.KLM.txt
Normal file
362
apps/pdp10/diags/klad/FIXED.KLM.txt
Normal file
|
|
@ -0,0 +1,362 @@
|
|||
SUBTTL *FIXED* FIXED CONTROL AND DISPATCH STORAGE, SEPT 18,1979
|
||||
|
||||
LOC 30000
|
||||
|
||||
; **********************************************************************
|
||||
;PROGRAM STARTING ADDRESSES
|
||||
;THESE ADDRESSES CALL VARIOUS SPECIAL START ROUTINES AND OR OPTIONS
|
||||
;NORMAL START ADDRESS IS 30000 ALL OTHERS ARE SPECIAL. INVOKED BECAUSE
|
||||
;OF END OF PASS, POWER FAILURE, DDT START, RE-ENTERING(TYPICALLY USER
|
||||
;MODE), OR ANY NUMBER OF SPECIAL FEATURE TESTS.
|
||||
; **********************************************************************
|
||||
|
||||
BEGIN: JRST @MODLNK ;STAND-ALONE START
|
||||
$START: JRST START ;MODE CHECK STARTING ADDRESS
|
||||
|
||||
DIAGMN: JRST @LDLNK ;DIAGNOSTIC MONITOR START
|
||||
|
||||
SYSEXR: JRST @LDLNK ;SYSTEM EXERCISER START
|
||||
|
||||
SFSTRT: JRST SADR1 ;SPECIAL FEATURE START
|
||||
|
||||
PFSTRT: JRST SADR2 ;POWER FAIL RESTART
|
||||
|
||||
REENTR: JRST SADR3 ;REENTER START(USUALLY USER MODE ONLY)
|
||||
|
||||
SRTDDT: ;COMMONLY MISTAKEN NAME FOR "DDTSRT"
|
||||
DDTSRT: JRST @DDTLNK ;DDT START
|
||||
|
||||
BEGIN1: JRST STARTA ;LOOP START(END OF PASS COMES HERE)
|
||||
SBINIT: JRST @SUBLNK ;PMGINT LINKAGE
|
||||
RETURN: 0 ;RETURN ADDRESS STORAGE
|
||||
|
||||
START1: SADR7 ;OPTIONAL STARTING ADR/INSTRUCTIONS
|
||||
START2: SADR8 ; "
|
||||
START3: SADR9 ; "
|
||||
START4: SADR10 ; "
|
||||
START5: SADR11 ; "
|
||||
; **********************************************************************
|
||||
;PROGRAM FIXED PARAMETER AREA
|
||||
; **********************************************************************
|
||||
|
||||
PNTNAM: PAREA3 ;SIXBIT PROGRAM NAME
|
||||
PNTEXT: PAREA4 ;SIXBIT PROGRAM EXTENSION
|
||||
RANDBS: PAREA1 ;RANDOM BASE NUMBER
|
||||
SWTEXR: PAREA2 ;SYSTEM EXERCISER SWITCHES
|
||||
ITRCNT: ITERAT ;PROGRAM ITERATIONS
|
||||
$PNAME: PGMNAM ;POINTER TO PROGRAMS NAME
|
||||
$PVER: MCNVER,,DECVER ;MCN & DEC VERSION LEVEL
|
||||
$MODVL: MODDVL ;DEVICE CODE CHANGE LOWER LIMIT
|
||||
$MODVU: MODDVU ;DEVICE CODE CHANGE UPPER LIMIT
|
||||
$EMODE: IFNDEF EXCASB,<0> IFDEF EXCASB,<-1> ;EXEC ALLOWED
|
||||
$UMODE: IFNDEF USRASB,<0> IFDEF USRASB,<-1> ;USER ALLOWED
|
||||
$DSKUP: IFNDEF DSKUPD,<0> IFDEF DSKUPD,<-1> ;DISK UPDATE MODE
|
||||
$MMAP: IFNDEF MEMMAP,<0> IFDEF MEMMAP,<-1> ;ALLOW MEMORY RTNS
|
||||
PAREA7: PAREA5 ;OPTIONAL PARAMETER
|
||||
PAREA8: PAREA6 ;OPTIONAL PARAMETER
|
||||
|
||||
; **********************************************************************
|
||||
;PROGRAM VARIABLE PARAMETER AREA
|
||||
; **********************************************************************
|
||||
|
||||
USER: 0 ; 0 = EXEC, -1 = USER MODE FLAG
|
||||
KAIFLG: 0 ;PROCESSOR TYPE, 0 = KA10, -1 = KI10
|
||||
KLFLG: 0 ;PROCESSOR TYPE, 0 = KA/KI, -1 = KL10
|
||||
MONFLG: -1 ;DIAG MONITOR SPECIAL USER FLAG
|
||||
MONCTL: 0 ;DIAG MON/SYS EXR FLAG
|
||||
MONTEN: 0 ;-1= LOADED BY 10
|
||||
CLOCKF: 0 ;CLOCK TICKED FLAG
|
||||
CONSW: 0 ;CONSOLE SWITCH SETTINGS
|
||||
PASCNT: 0 ;PROGRAM PASS COUNT
|
||||
RUNFLG: 0 ;PROGRAM RUN FLAG
|
||||
TESTPC: 0 ;SUBTEST PC
|
||||
ERRPC: 0 ;ERROR PC
|
||||
ERRTLS: 0 ;ERROR TOTALS
|
||||
TICKS: 0 ;PROGRAM RUNNING TIME
|
||||
MARGIN: 0 ;KI10 MARGIN WORD VALUE
|
||||
$ONETM: 0 ;SUBROUTINE INITIALIZATION FLAG
|
||||
; **********************************************************************
|
||||
;SPECIAL PROGRAM DISPATCH ADDRESSES
|
||||
; **********************************************************************
|
||||
|
||||
BEGEND: ENDUUO ;END OF PASS
|
||||
$BEND1: JRST BEGIN1 ;KEEP RUNNING PROGRAM
|
||||
$BEND2: EOPUUO ;END OF PROGRAM - NO RETURN
|
||||
CNTLC: SADR5 ;CONTROL C XFER ADDRESS
|
||||
ALTMGO: SADR6 ;ALTMODE XFER ADDRESS
|
||||
CPOPJ1: ;SKIP RETURN
|
||||
UUOSKP: AOS (P) ;SKIP RETURN FROM UUO
|
||||
CPOPJ: ;NON-SKIP REGULAR RETURN
|
||||
UUOEXT: RTN ;UUO RETURN
|
||||
UUORTN: JFCL ;ADDITIONAL USERS UUO ROUTINE
|
||||
$UORTX: JFCL ;ADDITIONAL UUO LINKAGE
|
||||
$UUOER: JFCL ;INITED AS (JRST $UOERX)
|
||||
$ITRHL: JFCL ;ADDITIONAL INTERRUPT LINKAGE
|
||||
$ITRX1: JFCL ; "
|
||||
$USRHL: JFCL ; "
|
||||
$RSRTX: JFCL ;ADDITIONAL POWER FAIL LINKAGE
|
||||
$RSRTY: JFCL ; "
|
||||
RESRT1: JFCL ; INITED AS (JRST RESRTX)
|
||||
RESRT2: JFCL ; "
|
||||
$PARER: JFCL ;ADDITIONAL PARITY ERROR LINKAGE
|
||||
ERMORE: JFCL ;ADDITIONAL ERROR HANDLER LINKAGE
|
||||
HALT . ;IMPROPER TRANSFER HALT
|
||||
|
||||
$PSHER: 0 ;INITED AS (JRST PSHERR)
|
||||
ITRCH1: 0 ;PC & FLAGS OF CURRENT INTERRUPT
|
||||
0 ;INITED AS (JRST $ITRC1)
|
||||
|
||||
; **********************************************************************
|
||||
;PROCESSOR CONTROL STORAGE
|
||||
; **********************************************************************
|
||||
|
||||
$ACC0: 0 ;INTERRUPT SAVED AC0
|
||||
$SVPI: 0 ;INTERRUPT SAVED PI
|
||||
$SVAPR: 0 ;INTERRUPT SAVED APR
|
||||
$SVPAG: 0 ;INTERRUPT SAVED PAG (DATAI)
|
||||
$SPAG1: 0 ;INTERRUPT SAVED PAG (CONI)
|
||||
|
||||
$SVUUO: 0 ;CURRENT USERS UUO
|
||||
$SVUPC: 0 ;PC OF CURRENT USERS UUO
|
||||
|
||||
REPTU: 0 ;REPEAT UUO ITERATIONS
|
||||
SCOPE: 0 ;ERROR HANDLER SCOPE LOOP FLAG
|
||||
%CORFLG:0 ; " CORRECT FLAG
|
||||
%COREC: 0 ; " CORRECT DATA
|
||||
%ACTFL: 0 ; " ACTUAL FLAG
|
||||
%ACTUL: 0 ; " ACTUAL DATA
|
||||
%DISCR: 0 ; " DISCREPENCY DATA
|
||||
; **********************************************************************
|
||||
;UUO DISPATCH TABLE
|
||||
; **********************************************************************
|
||||
XLIST
|
||||
IFNDEF LUUO1,<LUUO1=$UUOER>
|
||||
IFNDEF LUUO2,<LUUO2=$UUOER>
|
||||
IFNDEF LUUO3,<LUUO3=$UUOER>
|
||||
IFNDEF LUUO4,<LUUO4=$UUOER>
|
||||
IFNDEF LUUO5,<LUUO5=$UUOER>
|
||||
IFNDEF LUUO6,<LUUO6=$UUOER>
|
||||
IFNDEF LUUO7,<LUUO7=$UUOER>
|
||||
IFNDEF LUUO10,<LUUO10=$UUOER>
|
||||
IFNDEF LUUO11,<LUUO11=$UUOER>
|
||||
IFNDEF LUUO12,<LUUO12=$UUOER>
|
||||
IFNDEF LUUO13,<LUUO13=$UUOER>
|
||||
IFNDEF LUUO14,<LUUO14=$UUOER>
|
||||
IFNDEF LUUO15,<LUUO15=$UUOER>
|
||||
IFNDEF LUUO16,<LUUO16=$UUOER>
|
||||
IFNDEF LUUO17,<LUUO17=$UUOER>
|
||||
IFNDEF LUUO20,<LUUO20=$UUOER>
|
||||
IFNDEF LUUO21,<LUUO21=$UUOER>
|
||||
IFNDEF LUUO22,<LUUO22=$UUOER>
|
||||
IFNDEF LUUO23,<LUUO23=$UUOER>
|
||||
IFNDEF LUUO24,<LUUO24=$UUOER>
|
||||
IFNDEF LUUO25,<LUUO25=$UUOER>
|
||||
IFNDEF LUUO26,<LUUO26=$UUOER>
|
||||
IFNDEF LUUO27,<LUUO27=$UUOER>
|
||||
IFNDEF LUUO30,<LUUO30=$UUOER>
|
||||
IFNDEF LUUO31,<LUUO31=$UUOER>
|
||||
IFNDEF LUUO32,<LUUO32=$UUOER>
|
||||
IFNDEF LUUO33,<LUUO33=$UUOER>
|
||||
LIST
|
||||
UUODIS: LUUO1,,$UUOER
|
||||
LUUO3,,LUUO2
|
||||
LUUO5,,LUUO4
|
||||
LUUO7,,LUUO6
|
||||
LUUO11,,LUUO10
|
||||
LUUO13,,LUUO12
|
||||
LUUO15,,LUUO14
|
||||
LUUO17,,LUUO16
|
||||
LUUO21,,LUUO20
|
||||
LUUO23,,LUUO22
|
||||
LUUO25,,LUUO24
|
||||
LUUO27,,LUUO26
|
||||
LUUO31,,LUUO30
|
||||
LUUO33,,LUUO32
|
||||
|
||||
; **********************************************************************
|
||||
;MEMORY MANAGMENT STORAGE
|
||||
; **********************************************************************
|
||||
|
||||
DF22F: 0 ;DF10 CONTROL FLAG, 0 = 18, -1 = 22 BIT
|
||||
MAPNEW: 0 ;MEMORY MAPPING CONTROL FLAG, -1 = 4096K MAPPING
|
||||
MEMTOT: 0 ;TOTAL MEMORY SIZE IN K (1024.)
|
||||
MEMLOW: 0 ;LOWEST USABLE MEMORY
|
||||
MEMSIZ: BLOCK ^D41 ;MEMORY SEGMENT POINTER TABLE
|
||||
|
||||
; **********************************************************************
|
||||
;PRINT CONTROL STORAGE
|
||||
; **********************************************************************
|
||||
|
||||
PNTFLG: 0 ;PRINT FLAG, -1 WHILE IN PRINT ROUTINE
|
||||
PNTENB: 0 ;PRINT ENABLE
|
||||
PDISF: 0 ;PRINT DISABLED FLAG
|
||||
PNTINH: 0 ;INHIBIT PRINT INPUT CHECKS
|
||||
PNTSPC: 0 ;PRINT SPACE CONTROL
|
||||
OPTIME: 0 ;TYPE-IN WAIT TIME
|
||||
$TWCNT: 0 ;TIME WAITED
|
||||
$DVOFF: 0 ;LOGICAL DEVICE INITED FLAG
|
||||
TTYFIL: 0 ;TTY EXEC FILLERS FLAG
|
||||
TTYSPD: 0 ;TTY EXEC BAUD RATE
|
||||
$TTCHR: 0 ;ACTUAL TYPED IN CHAR
|
||||
$CHRIN: 0 ;UPPER CASED & PARITY STRIPPED CHAR
|
||||
$TYPNB: 0 ;TYPED IN NUMBER
|
||||
$CRLF: 0 ;FREE CR/LF FLAG
|
||||
$TABF: 0 ;TAB CONVERSION FLAG
|
||||
$FFF: 0 ;FORM FEED CONVERSION FLAG
|
||||
$VTF: 0 ;VERTICAL TAB CONVERSION FLAG
|
||||
USRLFF: 0 ;USER LF FILLERS
|
||||
USRCRF: 0 ;USER CR FILLERS
|
||||
; **********************************************************************
|
||||
;THE FOLLOWING MISCELLANEOUS PRINT CHARACTERS ARE INCLUDED
|
||||
;TO FACILITATE PRINTING AND ARE CALLED AS FOLLOWS:
|
||||
; MOVEI NAME
|
||||
; PNTA ;OR PNTAF
|
||||
; **********************************************************************
|
||||
|
||||
CRLF: ASCII/
|
||||
/
|
||||
CRLF2: ASCII/
|
||||
|
||||
/
|
||||
COMMA: ASCII/,/
|
||||
PERIOD: ASCII/./
|
||||
SPACE: ASCII/ /
|
||||
TAB: ASCII/ /
|
||||
MINUS:
|
||||
HYPEN: ASCII/-/
|
||||
PLUS: ASCII/+/
|
||||
AST: ASCII/*/
|
||||
ATSIN: ASCII/@/
|
||||
LFP: ASCII/(/
|
||||
RTP: ASCII/)/
|
||||
BELL: BYTE (7) 007
|
||||
QUEST: ASCII/?/
|
||||
SLASH: ASCII!/!
|
||||
DOLLAR: ASCII/$/
|
||||
RADIX: ^D10 ;DECIMAL PRINT RADIX
|
||||
RADLSP: 40 ;DECIMAL PRINT LEADING CHAR
|
||||
RADLSC: ^D10 ;DECIMAL PRINT LEADING CHAR COUNT
|
||||
|
||||
; **********************************************************************
|
||||
;USER MODE OUTPUT FILE INFORMATION
|
||||
; **********************************************************************
|
||||
|
||||
$OBUF: BLOCK 3 ;LOGICAL FILE OUTPUT BUFFER HEADER
|
||||
$OUTNM: SIXBIT /PRINT/ ;FILE NAME
|
||||
$OUTEX: SIXBIT /PNT/ ;FILE NAME EXTENSION
|
||||
BLOCK 2
|
||||
|
||||
; **********************************************************************
|
||||
;DISK UPDATE MODE FILE INFORMATION
|
||||
; **********************************************************************
|
||||
|
||||
$IBUF: BLOCK 3
|
||||
$INNM: SIXBIT /PRINT/
|
||||
$INEXT: SIXBIT /PNT/
|
||||
BLOCK 2
|
||||
; **********************************************************************
|
||||
;PUSHDOWN LIST CONTROL INFORMATION
|
||||
; **********************************************************************
|
||||
|
||||
PLIST: PLIST-PLISTE,,PLIST
|
||||
PLISTS: BLOCK 200
|
||||
PLISTE: 0 ;END OF PUSHDOWN LIST
|
||||
|
||||
; **********************************************************************
|
||||
;POWER LINE CLOCK FREQUENCY FLAG
|
||||
; **********************************************************************
|
||||
|
||||
CYCL60: 0 ;0 = 60, -1 = 50 CYCLE
|
||||
|
||||
; **********************************************************************
|
||||
;KL10 CACHE CONTROL FLAGS
|
||||
; **********************************************************************
|
||||
|
||||
CSHFLG: 0 ;ALLOW CACHE IF 0
|
||||
CSHMEM: 0 ;CACHE MEMORY SEGMENTS IF 0
|
||||
|
||||
; **********************************************************************
|
||||
;NUMBER INPUT DIGIT FLAG
|
||||
; **********************************************************************
|
||||
|
||||
TTNBRF: 0 ;-1 IF ANY DIGIT TYPED
|
||||
|
||||
; **********************************************************************
|
||||
;KL10 & KI10 "INHPAG" SWITCH PAGING PREVENTION
|
||||
; **********************************************************************
|
||||
|
||||
PVPAGI: 0 ;IF NON-ZERO, OVERRIDE "INHPAG" SWITCH ACTION
|
||||
|
||||
; **********************************************************************
|
||||
;ERROR REPORTING ROUTINE ADDITIONAL USERS CONTROL INSTRUCTIONS
|
||||
; **********************************************************************
|
||||
|
||||
%ERHI1: 0 ;IF NON-ZERO, XCT'D AT START OF %ERUUO
|
||||
%ERHI2: 0 ;IF NON-ZERO, XCT'D AT END OF %ERUUO
|
||||
%ERHI3: 0 ;IF NON-ZERO, XCT'D AFTER "PC" OF %ERUUO
|
||||
|
||||
; **********************************************************************
|
||||
;SPECIAL USERS UUO INTERCEPT INSTRUCTION
|
||||
; **********************************************************************
|
||||
|
||||
$$UUO: 0 ;IF NON-ZERO, XCT'D AT START OF $UORTN
|
||||
; **********************************************************************
|
||||
;USER MODE MONITOR TYPE FLAG
|
||||
; **********************************************************************
|
||||
|
||||
MONTYP: 0 ;0 = TOPS10, -1 = TOPS20
|
||||
|
||||
;*********************************************************************^
|
||||
;*KL10 PROCESSOR TYPE FLAG, 0=P0, 1=BBD NEW, 2=BBD OLD
|
||||
;*********************************************************************^
|
||||
|
||||
KLTYP: 0
|
||||
|
||||
; **********************************************************************
|
||||
;SPECIAL USERS MUUO INTERCEPT INSTRUCTION
|
||||
; **********************************************************************
|
||||
|
||||
$$MUUO: 0 ;IF NON-ZERO, XCT'D AT START OF MUUOER
|
||||
|
||||
; **********************************************************************
|
||||
;SPECIAL USERS USER MODE OUTPUT ERROR INTERCEPT INSTUCTION
|
||||
; **********************************************************************
|
||||
|
||||
$$OUTER:0 ;IF NON-ZERO, XCT'D AT END OF USER MODE ERROR
|
||||
|
||||
; **********************************************************************
|
||||
;"SWITCH" CALL USAGE CONTROL
|
||||
; **********************************************************************
|
||||
|
||||
$$TOGGLE:0 ;IF NON-ZERO, USE C(CONSW) FOR SWITCHES
|
||||
|
||||
; **********************************************************************
|
||||
;SPECIAL USERS ALTMODE SWITCH CALL INTERCEPT INSTRUCTIONS
|
||||
; **********************************************************************
|
||||
|
||||
$$TAX1: 0 ;IF NON-ZERO, XCT'D AT START OF ALTMODE SWITCH CALL
|
||||
$$TAX2: 0 ;IF NON-ZERO, XCT'D AT END OF ALTMODE SWITCH CALL
|
||||
|
||||
; **********************************************************************
|
||||
;SM10 (KS-10) PROCESSOR TYPE FLAG
|
||||
; **********************************************************************
|
||||
|
||||
SM10: 0 ;IF -1 THIS IS A KS-10
|
||||
|
||||
; **********************************************************************
|
||||
;RIGHT HALF SWITCHES PROMPT TABLE ADDRESS
|
||||
; **********************************************************************
|
||||
|
||||
SWPTAB: 0 ;0 = NO PROMPT, ADR = ADR OF SIXBIT PROMPT TABLE
|
||||
|
||||
; **********************************************************************
|
||||
;SPECIAL FUTURE EXPANSION ROOM
|
||||
; **********************************************************************
|
||||
|
||||
; **********************************************************************
|
||||
;END OF FIXED STORAGE
|
||||
; **********************************************************************
|
||||
|
||||
LOC 30577
|
||||
ENDFIX: 0 ;END OF FIXED STORAGE
|
||||
|
||||
|
|
@ -6771,3 +6771,4 @@ XP HALT,2542B11 >
|
|||
|
||||
; END
|
||||
END DDT ;KLDDT HAS START ADDRESS
|
||||
|
||||
|
|
|
|||
|
|
@ -1084,3 +1084,4 @@ LMBXML==507 ;M-BOX CYCLE METER, LO
|
|||
|
||||
>> ;END CONDITIONAL ON KL10
|
||||
LIST
|
||||
|
||||
|
|
|
|||
|
|
@ -7395,4 +7395,3 @@ IPAG: BLOCK ^D512
|
|||
|
||||
END <3,,EV>
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -287,3 +287,4 @@ $ACF: [ASCIZ/C(AC) FAILED/]
|
|||
TLNN PALERS ;PRINT ALL ERRORS ?
|
||||
JRST %ERRS1 ;NO
|
||||
JRST %ERMS1 ;YES
|
||||
|
||||
|
|
|
|||
|
|
@ -315,3 +315,4 @@ SUBTTL DIAGNOSTIC SECTION - MPY TEST - NON-ZERO PRODUCT
|
|||
|
||||
MOP1 (\ADR,XX,0,V1,V3,V2)
|
||||
LAST1: JRST BEGEND
|
||||
|
||||
|
|
|
|||
|
|
@ -119,3 +119,4 @@ F'T'0: AA1=A1 ;INITIAL C(AC)
|
|||
CAME E,[EE] ;WAS C(E) CLOBBERED?
|
||||
ER5 E,T'3 ;C(E) WAS CLOBBERED
|
||||
JUMPL AC+2,F'T'0 ;LOOP ON ERROR SWITCH>
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ machines:
|
|||
type: pdp10
|
||||
config: /devices/pdp10/machine/ka10/test/debugger/machine.xml
|
||||
debugger: true
|
||||
commands: a DAKAK.MAC;g 043004
|
||||
commands: a 'dakakt.mac;../param.klm;../fixed.klm;dakakm.mac;../uuoerr.klm'
|
||||
---
|
||||
|
||||
PDP-10 KA10 Basic Instruction Diagnostic #11
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -2642,7 +2642,7 @@ class DebuggerPDP10 extends Debugger {
|
|||
return true;
|
||||
}
|
||||
|
||||
var match = sOpcode.match(/^(['"]?)(.*\.mac|.*\.html|.*\.txt)\1$/i);
|
||||
var match = sOpcode.match(/^(['"]?)(.*\.klm|.*\.mac|.*\.html|.*\.txt)\1$/i);
|
||||
if (match) {
|
||||
var dbg = this;
|
||||
var cpu = this.cpu;
|
||||
|
|
|
|||
|
|
@ -656,6 +656,7 @@ class Macro10 {
|
|||
break;
|
||||
|
||||
case Macro10.PSEUDO_OP.DEFINE:
|
||||
case Macro10.PSEUDO_OP.IFDEF:
|
||||
case Macro10.PSEUDO_OP.IFE:
|
||||
case Macro10.PSEUDO_OP.IFG:
|
||||
case Macro10.PSEUDO_OP.IFL:
|
||||
|
|
@ -781,6 +782,12 @@ class Macro10 {
|
|||
var sOperator = name.substr(1);
|
||||
|
||||
switch(sOperator) {
|
||||
case Macro10.PSEUDO_OP.IFDEF:
|
||||
if (macro.nOperand) {
|
||||
this.parseText(macro.sText);
|
||||
}
|
||||
break;
|
||||
|
||||
case Macro10.PSEUDO_OP.IFE:
|
||||
if (!macro.nOperand) {
|
||||
this.parseText(macro.sText);
|
||||
|
|
@ -919,18 +926,6 @@ class Macro10 {
|
|||
this.println("warning" + (this.nLine? " at line " + Str.toDec(this.nLine) : "") + ": " + sWarning);
|
||||
}
|
||||
|
||||
/**
|
||||
* isSymbolChar(ch)
|
||||
*
|
||||
* @this {Macro10}
|
||||
* @param {string} ch
|
||||
* @return {boolean}
|
||||
*/
|
||||
isSymbolChar(ch)
|
||||
{
|
||||
return !!ch.match(/[0-9A-Z$%.]/i);
|
||||
}
|
||||
|
||||
/**
|
||||
* getExpression(sOperands, sDelim)
|
||||
*
|
||||
|
|
@ -1224,6 +1219,54 @@ class Macro10 {
|
|||
return aValues;
|
||||
}
|
||||
|
||||
/**
|
||||
* isDefined(sName)
|
||||
*
|
||||
* @this {Macro10}
|
||||
* @param {string} sName
|
||||
* @return {boolean}
|
||||
*/
|
||||
isDefined(sName)
|
||||
{
|
||||
return this.isMacro(sName) || this.isSymbol(sName) || this.dbg.isVariable(sName);
|
||||
}
|
||||
|
||||
/**
|
||||
* isMacro(sName)
|
||||
*
|
||||
* @this {Macro10}
|
||||
* @param {string} sName
|
||||
* @return {boolean}
|
||||
*/
|
||||
isMacro(sName)
|
||||
{
|
||||
return this.tblMacros[sName] !== undefined;
|
||||
}
|
||||
|
||||
/**
|
||||
* isSymbol(sName)
|
||||
*
|
||||
* @this {Macro10}
|
||||
* @param {string} sName
|
||||
* @return {boolean}
|
||||
*/
|
||||
isSymbol(sName)
|
||||
{
|
||||
return this.tblSymbols[sName] !== undefined;
|
||||
}
|
||||
|
||||
/**
|
||||
* isSymbolChar(ch)
|
||||
*
|
||||
* @this {Macro10}
|
||||
* @param {string} ch
|
||||
* @return {boolean}
|
||||
*/
|
||||
isSymbolChar(ch)
|
||||
{
|
||||
return !!ch.match(/[0-9A-Z$%.]/i);
|
||||
}
|
||||
|
||||
/**
|
||||
* defASCII(sOperands)
|
||||
*
|
||||
|
|
@ -1385,11 +1428,16 @@ class Macro10 {
|
|||
sOperand = sOperand.trim();
|
||||
match = sOperands.match(/\s*(<|)([\s\S]*)/i);
|
||||
name = '?' + sOperator;
|
||||
|
||||
if (sOperator == Macro10.PSEUDO_OP.IFDEF) {
|
||||
nOperand = this.isDefined(sOperand)? 1 : 0;
|
||||
} else {
|
||||
/*
|
||||
* The expression is either a repeat count or a condition. Either way, we must be able to
|
||||
* resolve it now, so we don't set fPass1 (but that doesn't mean it's the second pass, either).
|
||||
*/
|
||||
nOperand = this.parseExpression(sOperand) || 0;
|
||||
}
|
||||
iMatch = 1;
|
||||
}
|
||||
|
||||
|
|
@ -1678,6 +1726,7 @@ Macro10.PSEUDO_OP = {
|
|||
DEFINE: "DEFINE",
|
||||
END: "END",
|
||||
EXP: "EXP",
|
||||
IFDEF: "IFDEF",
|
||||
IFE: "IFE",
|
||||
IFG: "IFG",
|
||||
IFL: "IFL",
|
||||
|
|
|
|||
|
|
@ -519,7 +519,7 @@ class Debugger extends Component
|
|||
if (!val2) return false;
|
||||
valNew = Math.trunc(val1 / val2);
|
||||
break;
|
||||
case '%':
|
||||
case '^/':
|
||||
if (!val2) return false;
|
||||
valNew = val1 % val2;
|
||||
break;
|
||||
|
|
@ -883,6 +883,8 @@ class Debugger extends Component
|
|||
* added '!' as an alias for '|' (bitwise inclusive-or), '^-' as an alias for '~' (one's complement operator),
|
||||
* and '_' as a shift operator (+/- values specify a left/right shift, and the count is not limited to 32).
|
||||
*
|
||||
* And to avoid conflicts with MACRO-10 syntax, I've replaced the original mod operator ('%') with '^/'.
|
||||
*
|
||||
* The MACRO-10 binary shifting suffix ('B') is a bit more problematic, since a capital B can also appear
|
||||
* inside symbols. So I pre-scan for that suffix and replace all non-symbolic occurrences with an internal
|
||||
* shift operator ('^_').
|
||||
|
|
@ -901,7 +903,7 @@ class Debugger extends Component
|
|||
* to remove spaces entirely, because if an operator-less expression like "A B" was passed in, we would want
|
||||
* that to generate an error; if we converted it to "AB", evaluation might inadvertently succeed.
|
||||
*/
|
||||
var regExp = /({|}|\|\||&&|\||\^!|\^B|\^O|\^D|\^L|\^-|~|\^_|_|&|!=|!|==|>=|>>>|>>|>|<=|<<|<|-|\+|%|\/|\*| )/;
|
||||
var regExp = /({|}|\|\||&&|\||\^!|\^B|\^O|\^D|\^L|\^-|~|\^_|_|&|!=|!|==|>=|>>>|>>|>|<=|<<|<|-|\+|\^\/|\/|\*| )/;
|
||||
sExp = sExp.replace(/(^|[^A-Z0-9$%.])([0-9]+)B/, "$1$2^_").replace(/\s+/g, ' ');
|
||||
var asValues = sExp.split(regExp);
|
||||
value = this.parseArray(asValues, 0, asValues.length, this.nBase, fQuiet);
|
||||
|
|
@ -1150,6 +1152,18 @@ class Debugger extends Component
|
|||
return this.aVariables[sVar];
|
||||
}
|
||||
|
||||
/**
|
||||
* isVariable(sVar)
|
||||
*
|
||||
* @this {Debugger}
|
||||
* @param {string} sVar
|
||||
* @return {boolean}
|
||||
*/
|
||||
isVariable(sVar)
|
||||
{
|
||||
return this.aVariables[sVar] !== undefined;
|
||||
}
|
||||
|
||||
/**
|
||||
* setVariable(sVar, value)
|
||||
*
|
||||
|
|
@ -1230,7 +1244,7 @@ if (DEBUGGER) {
|
|||
'<<': 12, // bitwise left shift
|
||||
'-': 13, // subtraction
|
||||
'+': 13, // addition
|
||||
'%': 14, // remainder
|
||||
'^/': 14, // remainder
|
||||
'/': 14, // division
|
||||
'*': 14, // multiplication
|
||||
'_': 19, // MACRO-10 shift operator
|
||||
|
|
@ -1252,7 +1266,7 @@ if (DEBUGGER) {
|
|||
'<<': 12, // bitwise left shift
|
||||
'-': 13, // subtraction
|
||||
'+': 13, // addition
|
||||
'%': 14, // remainder
|
||||
'^/': 14, // remainder
|
||||
'/': 14, // division
|
||||
'*': 14, // multiplication
|
||||
'!': 15, // bitwise OR (conflicts with logical NOT, but we never supported that)
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
Reference in a new issue