;----------------------------------------------------------------------------- ; NIBL.ASM - Tiny BASIC for the National Semiconductor SC/MP microprocessor ; (NIBL-P, release date 12/17/76) ; ; This file has been prepared via OCR and text editor from the original ; assembly listing; then re-assembled and rigorously checked for errors. ; ;The following differences exist from the original listing: ; - Many original local labels (mostly for short jumps) have been given ; new names to insure global uniqueness. ; - Macros have been modified (or created) to allow compatibility with a ; modern, generic, macro-assembler. ; - After being passed through the OCR process, neatness of the original ; text has suffered some cosmetic inconsistency. ; ;Of further note: ; - The macro-assembler used here is a free tool, "AS", by Alfred Arnold: ; http://john.ccac.rwth-aachen.de:8000/as/ ; - The cryptic syntax "./256" used as the operand of the instruction at ; address 0087 suggests that there may have been "hooks" incorporated ; for relocation of the NIBL interpreter code. An assembled operand value ; of zero has been retained as in the original. ; - On my original hardcopy listing, hand written notations indicate that the ; "OR HI(P2)" instructions at addresses 05D3 and 0936 were later changed ; to "ANI 01". As I recall, this was a minor bug fix that may have been ; published in a National Semiconductor newsletter or in an issue of ; Dr. Dobb's Journal. ; ; A full assembly listing of this source file is also appended below. ; Enjoy! ; ; Roger Marin, January 2008 ; Portland, Oregon, USA. ; ramarin(AT)teleport.com ;-------------------------------------------------------------------------- --- CPU SC/MP L FUNCTION VAL16, (VAL16 & 0xFF) H FUNCTION VAL16, ((VAL16 >> 8) & 0xFF) JS MACRO P,VAL LDI H(VAL-1) XPAH P LDI L(VAL-1) XPAL P XPPC P ENDM LDPI MACRO P,VAL LDI H(VAL) XPAH P LDI L(VAL) XPAL P ENDM ;***************************************************** ;* WE ARE TIED DOWN TO A LANGUAGE WHICH * ;* MAKES UP IN OBSCURITY WHAT IT LACKS * ;* IN STYLE. * ;* - TOM STOPPARD * ;* * ;***************************************************** TSTBIT = 0x20 ;I. L. INSTRUCTION FLAGS JMPBIT = 0x40 CALBIT = 0x80 P1 = 1 ;SC/MP POINTER ASSIGNMENTS P2 = 2 P3 = 3 EREG = -128 ;THE EXTENSION REGISTER ; DISPLACEMENTS FOR RAM VARIABLES USED BY INTERPRETER DOPTR = -1 ;DO-STACK POINTER FORPTR = -2 ;FOR-STACK POINTER LSTK = -3 ;ARITHMETIC STACK POINTER SBRPTR = -4 ;GOSUB STACK POINTER PCLOW = -5 ;I. L. PROGRAM COUNTER PCHIGH = -6 PCSTK = -7 ;I. L. CALL STACK POINTER LOLINE = -8 ;CURRENT LINE NUMBER HILINE = -9 PAGE = -10 ;VALUE OF CURRENT PAGE LISTNG = -11 ;LISTING FLAG RUNMOD = -12 ;RUN/EDIT FLAG LABLLO = -13 LABLHI = -14 P1L0W = -15 ;SPACE TO SAVE CURSOR P1HIGH = -16 LO = -17 HI = -18 FAILLO = -19 FAILHI = -20 NUM = -21 TEMP = -22 TEMP2 = -23 TEMP3 = -24 CHRNUM = -25 RNDF = -26 RNDX = -27 ; SEEDS FOR RANDOM NUMBER RNDY = -28 ; ALLOCATION OF RAM FOR NIBL VARIABLES, STACKS, ; AND LINE BUFFER VARS = 0x1000 +28 ;NIBL VARIABLES A-Z AESTK: = VARS +52 ;ARITHMETIC STACK SBRSTK: = AESTK +26 ;G0SUB STACK DOSTAK: = SBRSTK +16 ;DO/UNTIL STACK FORSTK: = DOSTAK +16 ;FOR/NEXT STACK PCSTAK: = FORSTK +28 ;I.L. CALL STACK LBUF: = PCSTAK +48 ;LINE BUFFER PGM: = LBUF +74 ;USER'S PROGRAM ;************************************* ;* INITIALIZATION OF NIBL * ;************************************* NOP LDPI P2,VARS ; POINT P2 AT VARIABLES LDPI P1,PGM ; POINT PI AT PAGE ONE PROGRAM LDI -1 ; STORE -1 AT START OF PROGRAM ST 0(P1) ST 1(P1) LDI 0x0D ;ALSO STORE A DUMMY ST -1(P1) ; CARRIAGE RETURN LDI 2 ;POINT P2 AT PAGE 2, ST PAGE(P2) ; INITIALLY SET PAGE TO 2 XPAL P1 LDI 0x20 XPAH P1 DLD 2(P1) ; CHECK IF THERE IS REALLY XAE ; A PROGRAM IN PAGE 2: LD EREG(P1) ; IF FIRST LINE LENGTH XRI 0x0D ; POINTS TO CARR. RETURN JZ L000 ; AT END OF LINE DLD PAGE(P2) ;IF NOT, PAGE = 1 L000: LDI 0x20 LOOP1: XPAH P1 LDI -1 ; STORE -1 IN 2 CONSECUTIVE ST (P1) ; LOCATIONS AT START OF PAGE ST 1(P1) LDI 0x0D ;ALSO PUT A DUMMY END-OF-LINE ST -1(P1) ; JUST BEFORE TEXT XPAH P1 ; UPDATE P1 TO POINT TO CCL ; NEXT PAGE (UNTIL PAGE=8) ADI 0x10 ; REPEAT INITIALIZATION XRI 0x80 ; FOR PAGES 2-7 JZ L001 XRI 0x80 JMP LOOP1 L001: LDI 0 ; CLEAR SOME FLAGS ST RUNMOD(P2) ST LISTNG(P2) LDI L(BEGIN) ; INITIALIZE IL PC SO THAT ST PCLOW(P2) ; NIBL PROGRAM LDI H(BEGIN) ; IS EXECUTED IMMEDIATELY ST PCHIGH(P2) CLEAR: LDI 0 ST TEMP(P2) XAE CLEAR1: LDI 0 ; SET ALL VARIABLES ST EREG(P2) ; TO ZERO ILD TEMP(P2) XAE LDI 52 XRE JNZ CLEAR1 LDI L(AESTK) ; INITIALIZE SOME STACKS? ST LSTK(P2) ; ARITHMETIC STACK, LDI L(DOSTAK) ST DOPTR(P2) ; DO/UNTIL STACK, LDI L(SBRSTK) ST SBRPTR(P2) ; GOSUB STACK, LDI L(PCSTAK) ST PCSTK(P2) ; I. L. CALL STACK, LDI L(FORSTK) ST FORPTR(P2) ; FOR/NEXT STACK ;************************************* ;* INTERMEDIATE LANGUAGE EXECUTOR * ;************************************* EXECIL: LD PCLOW(P2) ;SET P3 TO CURRENT XPAL P3 ; IL PC. LD PCHIGH(P2) XPAH P3 CHEAT: LD @1(P3) XAE ;GET NEW I.L. INSTRUCTION LD @1(P3) ; INTO P3 THROUGH XPAL P3 ; OBSCURE METHODS ST PCLOW(P2) ;SIMULTANEOUSLY, INCREMENT LDE ; THE I.L. PC BY 2 ANI 0x0F ;REMOVE FLAG FROM INSTRUCTION ORI 0 ; TURN INTO ACTUAL ADDRESS, (see note at top of file) XPAH P3 ; PUT BACK INTO P3 ST PCHIGH(P2) LDE ANI 0xF0 ; CHECK IF I.L. INSTRUCTION XRI TSTBIT ; IS A 'TEST' JZ TST XRI CALBIT|TSTBIT ;CHECK FOR I. L. CALL JZ ILCALL XRI JMPBIT|CALBIT ;CHECK FOR I.L. JUMP JZ CHEAT ;l.L. JUMP IS TRIVIAL NOJUMP: XPPC P3 ;MUST BE AN ML SUBROUTINE JMP EXECIL ; IF NONE OF THE ABOVE ;************************************* ;* INTERMEDIATE LANGUAGE CALL * ;************************************* ILCALL: LD PCSTK(P2) XRI L(LBUF) ;CHECK FOR STACK OVERFLOW JNZ ILC1 LDI 10 JMP EOA ILC1: XRI L(LBUF) ;RESTORE ACCUMULATOR XPAL P3 ;SAVE LOW BYTE OF NEW ST TEMP(P2) ; I.L. PC IN TEMP LDI H(PCSTAK) ;POINT P3 AT I.L. XPAH P3 ; SUBROUTINE STACK XAE ;SAVE NEW I.L. PC HIGH IN EX LD PCLOW(P2) ;SAVE OLD I.L. PC ON STACK ST @1(P3) LD PCHIGH(P2) ST @1(P3) LD TEMP(P2) ;GET LOW BYTE OF NEW XPAL P3 ; I.L. PC INTO P3 LOW ST PCSTK(P2) ;UPDATE I.L. STACK POINTER LDE ;GET HIGH BYTE OF NEW XPAH P3 ; I.L. PC INTO P3 HIGH CHEAT1: JMP CHEAT ;************************************* ;* I.L. 'TEST' INSTRUCTION * ;************************************* TST: ST CHRNUM(P2) ;CLEAR NUMBER OF CHARS SCANNED SCAN: LD @1(P1) ;SLEW OFF SPACES XRI ' ' JZ SCAN LD @-1(P1) ;REPOSITION CURSOR LD PCHIGH(P2) ; POINT P3 AT I.L. TABLE XPAH P3 ST FAILHI(P2) ;OLD P3 BECOMES THE LD PCLOW(P2) ; TEST FAIL ADDRESS XPAL P3 ST FAILLO(P2) LOOP2: LD @1(P3) XAE ;SAVE CHAR FROM TABLE DLD CHRNUM(P2) ;DECREMENT CHAR COUNT LDE ;GET CHAR BACK ANI 0x7F ;SCRUB OFF FLAG (IF ANY) XOR @1(P1) ;IS CHAR EQUAL TO TEXT CHAR? JNZ LNEQ ;NO - END TEST LDE ;YES - BUT IS IT LAST CHAR? JP LOOP2 ;IF NOT, CONTINUE TO COMPARE JMP CHEAT ; IF SO, GET NEXT I. L. XO: JMP EXECIL ; INSTRUCTION LNEQ: LD CHRNUM(P2) ;RESTORE P1 TO XAE ; ORIGINAL VALUE LD @EREG(P1) LD FAILLO(P2) ;LOAD TEST-FAIL ADDRESS XPAL P3 ; INTO P3 LD FAILHI(P2) XPAH P3 JMP CHEAT1 ;GET NEXT I. L. INSTRUCTION ;************************************* ;* I.L. SUBROUTINE RETURN * ;************************************* RTN: LDI H(PCSTAK) ; POINT P3 AT I.L. PC STACK XPAH P3 LD PCSTK(P2) XPAL P3 LD @-1(P3) ;GET HIGH PART OF OLD PC XAE LD @-1(P3) ;GET LOW PART OF OLD PC XPAL P3 ST PCSTK(P2) ;UPDATE IL STACK POINTER LDE XPAH P3 ;P3 NOW HAS OLD IL PC JMP CHEAT1 EOA: JMP EO ;************************************* ;* SAVE GOSUB RETURN ADDRESS * ;************************************* SAV: LD SBRPTR(P2) XRI L(DOSTAK) ;CHECK FOR MORE JZ SAV2 ; THAN 8 SAVES ILD SBRPTR(P2) ILD SBRPTR(P2) XPAL P3 ;SET P3 TO LDI H(SBRSTK) ; SUBROUTINE STACK TOP. XPAH P3 LD RUNMOD(P2) ;IF IMMEDIATE MODE, JZ SAV1 ; SAVE NEGATIVE ADDRESS. XPAH P1 ;SAVE HIGH PORTION ST -1(P3) ; OF CURSOR XPAH P1 XPAL P1 ;SAVE LOW PORTION ST -2(P3) ; OF CURSOR XPAL P1 JMP XO ; RETURN SAV1: LDI -1 ; IMMEDIATE MODE ST -1(P3) ; RETURN ADDRESS IS JMP XO ; NEGATIVE. SAV2: LDI 10 ; ERROR: MORE THAN JMP EO ; 8 GOSUBS ;************************************* ;* CHECK STATEMENT FINISHED * ;************************************* DONE: LD @1(P1) ;SKIP SPACES XRI ' ' JZ DONE XRI ' ' | 0x0D ;IS IT CARRIAGE RETURN? JZ DONE1 ;YES - RETURN XRI 0x37 ;IS CHAR A ':'? JNZ DONE2 ;NO - ERROR DONE1: XPPC P3 ;YES - RETURN DONE2: LDI 4 JMP EO ;************************************* ; RETURN FROM GOSUB * ;************************************* RSTR: LD SBRPTR(P2) XRI L(SBRSTK) ; CHECK FOR RETURN JNZ RSTR1 ; W/0 GOSUB LDI 9 EO: JMP El ; REPORT THE ERROR RSTR1: DLD SBRPTR(P2) DLD SBRPTR(P2) ;POP GOSUB STACK, XPAL P3 ; PUT PTR INTO P3 LDI H(SBRSTK) XPAH P3 LD 1(P3) ;IF ADDRESS NEGATIVE, JP RSTR2 ; SUBROUTINE WAS CALLED LDI 0 ; FROM EDIT MODE, ST RUNMOD(P2) ; SO RETURN TO EDITING XI: JMP XO RSTR2: XPAH P1 ; RESTORE CURSOR HIGH LD 0(P3) XPAL P1 ; RESTORE CURSOR LOW LDI 1 ;SET RUN MODE ST RUNMOD(P2) JMP XI ;************************************* ;* TRANSFER TO NEW STATEMENT * ;************************************* XFER: LD LABLHI(P2) ;CHECK FOR NON-EXISTENT LINE JP XFER1 LDI 8 JMP El XFER1: LDI 1 ;SET RUN MODE TO 1 ST RUNMOD(P2) XPPC P3 ;************************************* ;* PRINT STRING IN TEXT * ;************************************* PRS: LDPI P3,PUTC-1 ;POINT P3 AT PUTC ROUTINE LD @1(P1) ;L0AD NEXT CHAR XRI '"' ;IF ", END OF JZ XI ; STRING XRI 0x2F ;IF CR, ERROR JZ PRS1 XRI 0x0D ;RESTORE CHAR XPPC P3 ;PRINT CHAR JMP PRS ;GET NEXT CHAR PRS1: LDI 7 ;SYNTAX ERROR El: JMP E2 ;************************************* ;* PRINT NUMBER ON STACK * ;************************************* ; THIS ROUTINE IS BASED ON DENNIS ALLISON'S BINARY TO DECIMAL ; CONVERSION ROUTINE IN VOL. 1, #1 OF "DR. DOBB'S JOURNAL", ; BUT IS MUCH MORE OBSCURE BECAUSE OF THE STACK MANIPULATION. PRN: LDI H(AESTK) ; POINT P3 AT A. E. STACK XPAH P3 ILD LSTK(P2) ILD LSTK(P2) XPAL P3 LDI 10 ;PUT 10 ON STACK (WE'LL BE ST -2(P3) ; DIVIDING BY IT LATER) LDI 0 ST -1(P3) LDI 5 ;SET CHRNUM TO POINT TO PLACE ST CHRNUM(P2) ; IN STACK WHERE WE STORE LDI -1 ; THE CHARACTERS TO PRINT ST 5(P3) ;FIRST CHAR IS A FLAG (-1) LD -3(P3) ;CHECK IF NUMBER IS NEGATIVE JP LPNOS LDI '-' ;PUT '-' ON STACK, AND NEGATE ST 4(P3) ; THE NUMBER LDI 0 SCL CAD -4(P3) ST -4(P3) LDI 0 CAD -3(P3) ST -3(P3) JMP XI ; GO DO DIVISION BY 10 LPNOS: LDI ' ' ;IF POSITIVE, PUT ' ' ON ST 4(P3) ; STACK BEFORE DIVISION X4: JMP XI E2: JMP ERR1 ; THE DIVISION IS PERFORMED, THEN CONTROL IS TRANSFERRED ; TO PRN1, WHICH FOLLOWS. PRN1: ILD LSTK(P2) ; POINT P1 AT A. E. STACK ILD LSTK(P2) XPAL P1 LDI H(AESTK) XPAH P1 ILD CHRNUM(P2) ;INCREMENT CHARACTER STACK XAE ; POINTER, PUT IN EX. REG. LD 1(P1) ;GET REMAINDER FROM DIVIDE, ORI '0' ST EREG(P1) ;PUT IT ON THE STACK LD -3(P1) ;IS THE QUOTIENT ZERO YET? OR -4(P1) JZ QPRNT ;YES - GO PRINT THE NUMBER LDI H(PRNUM1) ;N0 - CHANGE THE I. L. PC ST PCHIGH(P2) ; SO THAT DIVIDE IS LDI L(PRNUM1) ; PERFORMED AGAIN ST PCLOW(P2) JMP X4 ;G0 DO DIVISION BY 10 AGAIN QPRNT: LDPI P3,PUTC-1 ;POINT P3 AT PUTC ROUTINE LD LISTNG(P2) ;IF LISTING, SKIP PRINTING JNZ QPRNT2 ; LEADING SPACE LD 4(P1) ;PRINT EITHER XPPC P3 ; OR LEADING SPACE LD CHRNUM(P2) ;GET EX. REG. VALUE BACK XAE QPRNT2: LD @EREG(P1) ;POINT P3 AT FIRST CHAR LD (P1) ; TO BE PRINTED LOOP3: XPPC P3 ;PRINT THE CHARACTER LD @-1(P1) ;GET NEXT CHARACTER JP LOOP3 ;REPEAT UNTIL = -1 LDI L(AESTK) ST LSTK(P2) ; CLEAR THE A. E. STACK LD LISTNG(P2) ;PRINT A TRAILING SPACE JNZ X4 ; IF NOT LISTING PROGRAM LDI ' ' XPPC P3 JMP X4 ;************************************* ;* CARRIAGE RETURN/LINE FEED * ;************************************* NLINE: LDPI P3,PUTC-1 ;POINT P3 AT PUTC ROUTINE LDI 0x0D ;CARRIAGE RETURN XPPC P3 LDI 0x0A ;LINE FEED XPPC P3 X5: JMP X4 ;************************************* ;* ERROR ROUTINE * ;************************************* ERR: LDI 5 ;SYNTAX ERROR ERR1: ST NUM(P2) ;SAVE ERROR # ERR2: LD NUM(P2) ST TEMP(P2) LDPI P3,PUTC-1 ;POINT P3 AT PUTC LDI 0x0D ; PRINT CR/LF XPPC P3 LDI 0x0A XPPC P3 LDPI P1,MESGS ;P1 -> ERROR MESSAGES QQ1: DLD NUM(P2) ;IS THIS THE RIGHT MESSAGE? JZ QQMSG ;YES - GO PRINT IT LOOP4: LD @1(P1) ;N0 - SCAN THROUGH TO JP LOOP4 ; NEXT MESSAGE JMP QQ1 QQMSG: LD @1(P1) ;GET MESSAGE CHAR XPPC P3 ;PRINT IT LD -1(P1) ; IS MESSAGE DONE? JP QQMSG ;N0 - GET NEXT CHAR LD TEMP(P2) ;WAS THIS A BREAK MESSAGE? XRI 14 JZ QQ3 ;YES - SKIP PRINTING 'ERROR' LDPI P1,MESGS ;NO - PRINT ERROR QQ2: LD @1(P1) ;GET CHARACTER XPPC P3 ;PRINT IT LD -1(P1) ;DONE? JP QQ2 ;NO- REPEAT LOOP QQ3: LD RUNMOD(P2) ;DON'T PRINT LINE # JZ FIN ; IF IMMEDIATE MODE LDI ' ' XPPC P3 ;SPACE LDI 'A' ;AT XPPC P3 LDI 'T' XPPC P3 LDI H(AESTK) ; POINT P3 AT A. E. STACK XPAH P3 ILD LSTK(P2) ILD LSTK(P2) XPAL P3 LD HILINE(P2) ;GET HIGH BYTE OF LINE # ST -1(P3) ;PUT ON STACK LD LOLINE(P2) ; GET LOW BYTE OF LINE # ST -2(P3) ;PUT ON STACK LDI L(ERRNUM) ; GO TO PRN ST PCLOW(P2) LDI H(ERRNUM) ST PCHIGH(P2) X5A: JMP X5 ;************************************* ;* BREAK, NXT, FIN, & STRT * ;************************************* BREAK: LDI 14 ;*** CAUSE A BREAK *** E3A: JMP ERR1 ;*** NEXT STATEMENT *** NXT: LD RUNMOD(P2) ; IF IN EDIT MODE, JZ FIN ; STOP EXECUTION LD (P1) ;IF WE HIT END OF FILE, ANI 0x80 ; FINISH UP THINGS JNZ FIN CSA ; BREAK IF SOMEONE IS ANI 0x20 ; TYPING ON THE CONSOLE JZ BREAK LD -1(P1) ;GET LAST CHARACTER SCANNED XRI 0x0D ;WAS IT CARRIAGE RETURN? JNZ NXT1 ;YES - SKIP FOLLOWING UPDATES LD @1(P1) ;GET HIGH BYTE OF NEXT LINE # ST HILINE(P2) ;SAVE IT LD @2(P1) ;GET LOW BYTE OF LINE #, SKIP ST LOLINE(P2) ; LINE LENGTH BYTE NXT1: LDI H(STMT) ; GO TO STMT IN IL TABLE ST PCHIGH(P2) LDI L(STMT) ST PCLOW(P2) XPPC P3 FIN: LDI 0 ;*** FINISH EXECUTION *** ST RUNMOD(P2) ; CLEAR RUN MODE LDI L(AESTK) ; CLEAR ARITHMETIC STACK ST LSTK(P2) LDI L(START) ; MODIFY I.L. PC TO RETURN ST PCLOW(P2) ; TO PROMPT FOR COMMAND LDI H(START) ST PCHIGH(P2) LDI L(PCSTAK) ST PCSTK(P2) JMP X5A ;*** START EXECUTION *** STRT: ILD RUNMOD(P2) ;RUN MODE = 1 LD TEMP2(P2) ;POINT CURSOR TO XPAH P1 ; START OF NIBL PROGRAM LD TEMP3(P2) XPAL P1 LDI L(SBRSTK) ;EMPTY SOME STACKS: ST SBRPTR(P2) ; GOSUB STACK, LDI L(FORSTK) ST FORPTR(P2) ; FOR STACK LDI L(DOSTAK) ST DOPTR(P2) ; & DO/UNTIL STACK XPPC P3 ;RETURN X6: JMP X5A E4: JMP E3A ;************************************* ;* LIST NIBL PROGRAM * ;************************************* LST: LD (P1) ;CHECK FOR END OF FILE XRI 0x80 JP LST2 LDI H(AESTK) ;GET LINE NUMBER ONTO STACK XPAH P3 ILD LSTK(P2) ILD LSTK(P2) XPAL P3 LD @1(P1) ST -1(P3) LD @1(P1) ST -2(P3) LD @1(P1) ;SKIP OVER LINE LENGTH LDI 1 ST LISTNG(P2) ;SET LISTING FLAG JMP X6 ; GO PRINT LINE NUMBER LST2: LDI 0 ST LISTNG(P2) ;CLEAR LISTING FLAG JS P3,NXT ; GO TO NXT X6A: JMP X6 E5: JMP E4 LST3: LDPI P3,PUTC-1 ;POINT P3 AT PUTC LST4: CSA ANI 0x20 JZ LST2 ;IF TYPING, STOP LD @1(P1) ;GET NEXT CHAR XRI 0x0D ;TEST FOR CR JZ LST5 XRI 0x0D ;GET CHARACTER XPPC P3 ;PRINT CHARACTER JMP LST4 LST5: LDI 0x0D ; CARRIAGE RETURN XPPC P3 LDI 0x0A ;LINE FEED XPPC P3 CCL LDI L(LIST3) ST PCLOW(P2) LDI H(LIST3) ST PCHIGH(P2) JMP LST ;GET NEXT LINE ;************************************* ;* ADD AND SUBTRACT * ;************************************* ADD: LDI H(AESTK) ;SET P3 TO CURRENT XPAH P3 ; STACK LOCATION DLD LSTK(P2) DLD LSTK(P2) XPAL P3 CCL LD -2(P3) ; REPLACE TWO TOP ITEMS ADD 0(P3) ; ON STACK BY THEIR SUM ST -2(P3) LD -1(P3) ADD 1(P3) ST -1(P3) X7: JMP X6A SUB: LDI H(AESTK) ;SET P3 TO CURRENT XPAH P3 ; STACK LOCATION DLD LSTK(P2) DLD LSTK(P2) XPAL P3 SCL LD -2(P3) ;REPLACE TWO TOP ITEMS CAD 0(P3) ; ON STACK BY THEIR ST -2(P3) ; DIFFERENCE LD -1(P3) CAD 1(P3) ST -1(P3) JMP X6A ;************************************* ;* NEGATE * ;************************************* NEG: LDI H(AESTK) ;SET P3 TO CURRENT XPAH P3 ; STACK LOCATION LD LSTK(P2) XPAL P3 SCL LDI 0 CAD -2(P3) ; NEGATE TOP ITEM ON STACK ST -2(P3) LDI 0 CAD -1(P3) ST -1(P3) X8: JMP X7 E6: JMP E5 ;************************************* ;* MULTIPLY * ;************************************* MUL: LDI H(AESTK) ;SET P3 TO CURRENT XPAH P3 ; STACK LOCATION LD LSTK(P2) XPAL P3 ; DETERMINE SIGN OF PRODUCT, LD -1(P3) ; SAVE IN TEMP(P2) XOR -3(P3) ST TEMP(P2) LD -1(P3) ; CHECK FOR NEGATIVE JP MM1 ; MULTIPLIER SCL LDI 0 ;IF NEGATIVE, CAD -2(P3) ; NEGATE ST -2(P3) LDI 0 CAD -1(P3) ST -1(P3) MM1: LD -3(P3) ; CHECK FOR NEGATIVE JP MM2 ; MULTIPLICAND SCL LDI 0 ; IF NEGATIVE, CAD -4(P3) ; NEGATE ST -4(P3) LDI 0 CAD -3(P3) ST -3(P3) MM2: LDI 0 ; CLEAR WORKSPACE ST 0(P3) ST 1(P3) ST 2(P3) ST 3(P3) LDI 16 ;SET COUNTER TO 16 ST NUM(P2) LOOP5: LD -1(P3) ; ROTATE MULTIPLIER RRL ; RIGHT ONE BIT ST -1(P3) LD -2(P3) RRL ST -2(P3) CSA ;CHECK FOR CARRY BIT JP MM3 ;IF NOT SET, DON'T DO ADD CCL LD 2(P3) ;ADD MULTIPLICAND ADD -4(P3) ; INTO WORKSPACE ST 2(P3) LD 3(P3) ADD -3(P3) ST 3(P3) JMP MM3 E6A: JMP E6 MM3: CCL LD 3(P3) ;SHIFT WORKSPACE RIGHT BY 1 RRL ST 3(P3) LD 2(P3) RRL ST 2(P3) LD 1(P3) RRL ST 1(P3) LD 0(P3) RRL ST 0(P3) DLD NUM(P2) ;DECREMENT COUNTER JNZ LOOP5 ;LOOP IF NOT ZERO JMP MM4 X9: JMP X8 MM4: LD TEMP(P2) ; CHECK SIGN WORD JP MMEXIT ;IF BIT7 = 1, NEGATE PRODUCT SCL LDI 0 CAD 0(P3) ST 0(P3) LDI 0 CAD 1(P3) ST 1(P3) MMEXIT: LD 0(P3) ;PUT PRODUCT ON TOP ST -4(P3) ; OF STACK LD 1(P3) ST -3(P3) DLD LSTK(P2) ;SUBTRACT 2 FROM DLD LSTK(P2) ; LSTK JMP X9 ;************************************* ;* DIVIDE * ;************************************* DIV: LDI H(AESTK) XPAH P3 LD LSTK(P2) XPAL P3 LD -1(P3) ; CHECK FOR DIVISION BY 0 OR -2(P3) JNZ QD0 LDI 13 JMP E6A QD0: LD -3(P3) XOR -1(P3) ST TEMP(P2) ;SAVE SIGN OF QUOTIENT LD -3(P3) ; IS DIVIDEND POSITIVE? JP QDPOS ;YES - JUMP LDI 0 SCL CAD -4(P3) ;N0 - NEGATE DIVIDEND, ST 3(P3) ; STORE IN RIGHT HALF LDI 0 ; OF 32-BIT ACCUMULATOR CAD -3(P3) ST 2(P3) JMP QD1 X9A: JMP X9 QDPOS: LD -3(P3) ; STORE NON-NEGATED DIVIDEND ST 2(P3) ; IN 32-BIT ACCUMULATOR LD -4(P3) ST 3(P3) QD1: LD -1(P3) ; CHECK FOR NEGATIVE DIVISOR JP QD2 LDI 0 ; NEGATE DIVISOR SCL CAD -2(P3) ST -2(P3) LDI 0 CAD -1(P3) ST -1(P3) QD2: LDI 0 ;PUT ZERO IN ST 1(P3) ; LEFT HALF OF 32-BIT ACC, ST 0(P3) ST NUM(P2) ; THE COUNTER, AND ST -3(P3) ; IN THE DIVIDEND, NOW USED ST -4(P3) ; STORE THE QUOTIENT LOOP6: CCL ; BEGIN MAIN DIVIDE LOOP - LD -4(P3) ; SHIFT QUOTIENT LEFT, ADD -4(P3) ST -4(P3) LD -3(P3) ADD -3(P3) ST -3(P3) CCL ; SHIFT 32-BIT ACC LEFT, LD 3(P3) ADD 3(P3) ST 3(P3) LD 2(P3) ADD 2(P3) ST 2(P3) LD 1(P3) ADD 1(P3) ST 1(P3) LD (P3) ADD (P3) ST (P3) SCL LD 1(P3) ; SUBTRACT DIVISOR INTO CAD -2(P3) ; LEFT HALF OF ACC, ST 1(P3) LD (P3) CAD -1(P3) ST (P3) JP QDENT1 ; IF RESULT IS NEGATIVE, CCL ; RESTORE ORIGINAL CONTENTS LD 1(P3) ; OF ACC BY ADDING DIVISOR ADD -2(P3) ST 1(P3) LD (P3) ADD -1(P3) ST (P3) JMP QD3 X9B: JMP X9A QDENT1: LD -4(P3) ;ELSE IF RESULT POSITIVE, ORI 1 ;RECORD A 1 IN QUOTIENT ST -4(P3) ;W/0 RESTORING THE ACC QD3: ILD NUM(P2) ;INCREMENT THE COUNTER XRI 16 ;ARE WE DONE? JNZ LOOP6 ;LOOP IF NOT DONE LD TEMP(P2) ;CHECK THE QUOTIENT'S SIGN, JP QDEND ; NEGATING IF NECESSARY LDI 0 SCL CAD -4(P3) ST -4(P3) LDI 0 CAD -3(P3) ST -3(P3) QDEND: DLD LSTK(P2) ;DECREMENT THE STACK POINTER, DLD LSTK(P2) JMP X9B ; AND EXIT ;************************************* ;* STORE VARIABLE * ;************************************* STORE: LDI H(AESTK) ;SET P3 TO STACK XPAH P3 LD LSTK(P2) XPAL P3 LD @-3(P3) ;GET VARIABLE INDEX XAE ;PUT IN E REG LD 1(P3) ST EREG(P2) ;STORE LOWER 3 BITS CCL ; INTO VARIABLE LDE ;INCREMENT INDEX ADI 1 XAE LD 2(P3) ST EREG(P2) ;STORE UPPER 8 BITS XPAL P3 ;INTO VARIABLE ST LSTK(P2) ;UPDATE STACK POINTER X10: JS P3,EXECIL ;************************************* ;* TEST FOR VARIABLE IN TEXT * ;************************************* TSTVAR: LD @1(P1) XRI ' ' ;SLEW OFF SPACES JZ TSTVAR LD -1(P1) ;CHARACTER IN QUESTION SCL CAI 'Z'+1 ;SUBTRACT 'Z'+l JP TV_FAIL ;N0T VARIABLE IF POSITIVE SCL CAI 'A'-'Z'-1 ;SUBTRACT 'A' JP TVMAYBE ;IF POS, MAY BE VARIABLE TV_FAIL: LD @-1(P1) ;BACKSPACE CURSOR LD PCLOW(P2) ;GET TEST-FAIL ADDRESS XPAL P3 ; FROM I. L. TABLE, PUT IT LD PCHIGH(P2) ; INTO I.L. PROGRAM COUNTER XPAH P3 LD (P3) ST PCHIGH(P2) LD 1(P3) ST PCLOW(P2) JMP X10 TVMAYBE: XAE ;SAVE VALUE (0-25) LD (P1) ;CHECK FOLLOWING CHAR SCL ;MUST NOT BE A LETTER CAI 'Z'+1 ;OTHERWISE WE'D BE LOOKING JP TV_OK ;AT A KEYWORD, NOT A VARIABLE SCL CAI 'A'-'Z'-1 JP TV_FAIL TV_OK: LDI H(AESTK) ;SET PS TO CURRENT XPAH P3 ; STACK LOCATION ILD LSTK(P2) ;INCR STACK POINTER XPAL P3 CCL ;DOUBLE VARIABLE INDEX LDE ADE ST -1(P3) ;PUT INDEX ON STACK LDI 2 ; INCREMENT I.L. PC, SKIPPING CCL ; OVER TEST-FAIL ADDRESS ADD PCLOW(P2) ST PCLOW(P2) LDI 0 ADD PCHIGH(P2) ST PCHIGH(P2) JMP X10 ;************************************* ;* IND - EVALUATE A VARIABLE * ;************************************* IND: LDI H(AESTK) ;SET P3 TO STACK XPAH P3 ILD LSTK(P2) XPAL P3 LD -2(P3) ;GET INDEX OFF TOP XAE ;PUT INDEX IN E REG LD EREG(P2) ;GET LOWER 8 BITS ST -2(P3) ;SAVE ON STACK CCL LDE ; INCREMENT E REG ADI 1 XAE LD EREG(P2) ;GET UPPER 8 BITS ST -1(P3) ;SAVE ON STACK XI1: JMP X10 ;************************************* ;* RELATIONAL OPERATORS * ;************************************* EQ: LDI 1 ;EACH RELATIONAL OPERATOR JMP CMP ; LOADS A NUMBER USED LATER NEQ: LDI 2 ; AS A CASE SELECTOR, AFTER JMP CMP ; THE TWO OPERANDS ARE COM- LSS: LDI 3 ; PARED. BASED ON THE COM- JMP CMP ; PARISON, FLAGS ARE SET THAT LEQ: LDI 4 ; ARE EQUIVALENT TO THOSE SET JMP CMP ; BY THE "CMP" INSTRUCTION IN GTR: LDI 5 ; THE PDP-11. THESE PSEUDO- JMP CMP ; FLAGS ARE USED TO DETERMINE GEQ: LDI 6 ; WHETHER THE PARTICULAR ; RELATION IS SATISFIED OR NO CMP: ST NUM(P2) LDI H(AESTK) ;SET P3 -> ARITH STACK XPAH P3 DLD LSTK(P2) DLD LSTK(P2) XPAL P3 SCL LD -2(P3) ; SUBTRACT THE TWO OPERANDS, CAD (P3) ; STORING RESULT IN LO & HI ST LO(P2) LD -1(P3) CAD 1(P3) ST HI(P2) XOR -1(P3) ;OVERFLOW OCCURS IF SIGNS OF XAE ; RESULT AND 1ST OPERAND LD -1(P3) ; DIFFER, AND SIGNS OF THE XOR 1(P3) ; TWO OPERANDS DIFFER ANE ;BIT 7 EQUIVALENT TO V FLAG XOR HI(P2) ;BIT 7 EQUIVALENT TO N XOR V ST TEMP(P2) ;STORE IN TEMP LD HI(P2) ;DETERMINE IF RESULT WAS ZERO OR LO(P2) JZ SETZ ;IF RESULT=0, SET Z FLAG LDI 0x80 ; ELSE CLEAR Z FLAG SETZ: XRI 0x80 XAE ;BIT 7 OF EX = Z FLAG DLD NUM(P2) ;TEST FOR = JNZ NEQ1 LDE ; EQUAL IF Z = 1 JMP CMP1 X12: JMP XI1 NEQ1: DLD NUM(P2) ;TEST FOR <> JNZ LSS1 LDE ; NOT EQUAL IF Z = 0 XRI 0x80 JMP CMP1 LSS1: DLD NUM(P2) ;TEST FOR < JNZ LEQ1 LD TEMP(P2) ; LESS THAN IF (N XOR V)=l JMP CMP1 LEQ1: DLD NUM(P2) ;TEST FOR <= JNZ GTR1 LDE ; LESS THAN OR EQUAL OR TEMP(P2) ; IF (Z OR (N XOR V))=l JMP CMP1 GTR1: DLD NUM(P2) ;TEST FOR > JNZ GEQ1 LDE ; GREATER THAN OR TEMP(P2) ; IF (Z OR (N XOR V))=0 XRI 0x80 JMP CMP1 GEQ1: LD TEMP(P2) ;GREATER THAN OR EQUAL XRI 0x80 ; IF (N XOR V)=0 CMP1: JP FALSE1 ;IS RELATION SATISFIED? LDI 1 ;YES - PUSH 1 ON STACK JMP CMP2 FALSE1: LDI 0 ;N0 - PUSH 0 ON STACK CMP2: ST -2(P3) LDI 0 ST -1(P3) JS P3,RTN ;DO AN I. L. RETURN JMP X12 ;************************************* ;* IF STATEMENT TEST FOR ZERO * ;************************************* CMPR: LD LO(P2) ;GET LOW & HI BYTES OF EXPR. OR HI(P2) ;TEST IF EXPRESSION IS ZERO (LATER CHANGED TO 'ANI 01'(R.MARIN JAN 2008)) JZ FAIL ;YES - IT IS JMP X12 ;N0 - IT ISN'T SO CONTINUE FAIL: LD @1(P1) ;SKIP TO NEXT LINE IN PROGRAM XRI 0x0D ; (I.E. TIL NEXT CR) JNZ FAIL JS P3,NXT ;CALL NXT AND RETURN X12A: JMP X12 ;************************************* ;* AND, OR, & NOT * ;************************************* ANDOP: LDI 1 ;EACH OPERATION HAS ITS JMP AON1 ; OWN CASE SELECTOR. OROP: LDI 2 JMP AON1 NOTOP: LDI 3 AON1: ST NUM(P2) LDI H(AESTK) ;SET P3 -> ARITH. STACK XPAH P3 DLD LSTK(P2) DLD LSTK(P2) XPAL P3 DLD NUM(P2) ;TEST FOR AND JNZ AON_0R LD 1(P3) ; REPLACE TWO TOP ITEMS ON AND -1(P3) ; STACK BY THEIR AND ST -1(P3) LD 0(P3) AND -2(P3) ST -2(P3) JMP X12A AON_0R: DLD NUM(P2) ;TEST FOR OR JNZ AON_NT LD 1(P3) ;REPLACE TWO TOP ITEMS ON OR -1(P3) ; STACK BY THEIR 'OR' ST -1(P3) LD 0(P3) OR -2(P3) ST -2(P3) JMP X12A AON_NT: LD @1(P3) ; NOT OPERATION XRI 0xFF ST -1(P3) ; REPLACE TOP ITEM ON STACK LD @1(P3) ; BY ITS ONE'S COMPLEMENT XRI 0xFF ST -1(P3) XPAL P3 ST LSTK(P2) ;STACK POINTER FIXUP X12B: JMP X12A ;************************************* ;* EXCHANGE CURSOR WITH RAM * ;************************************* XCHGP1: LD P1L0W(P2) ;THIS ROUTINE IS HANDY WHEN XPAL P1 ;EXECUTING AN 'INPUT' STMT ST P1L0W(P2) ;IT EXCHANGES THE CURRENT LD P1HIGH(P2) ;TEXT CURSOR WITH ONE SAVED XPAH P1 ;IN RAM ST P1HIGH(P2) XPPC P3 ;************************************* ;* CHECK RUN MODE * ;************************************* CKMODE: LD RUNMOD(P2) ;THIS ROUTINE CAUSES AN ERROR JZ CK1 ;IF CURRENTLY IN EDIT MODE XPPC P3 CK1: LDI 3 E8: ST NUM(P2) ;ERROR IF RUN MODE = 0 JS P3,ERR2 ;MINOR KLUGE ;************************************* ;* GET HEXADECIMAL NUMBER * ;************************************* HEX: ILD LSTK(P2) ;POINT P3 AT ARITH STACK ILD LSTK(P2) XPAL P3 LDI H(AESTK) XPAH P3 LDI 0 ;NUMBER INITIALLY ZERO ST -1(P3) ;PUT IT ON STACK ST -2(P3) ST NUM(P2) ;ZERO NUMBER OF DIGITS HSKIP: LD @1(P1) ;SKIP ANY SPACES XRI ' ' JZ HSKIP LD @-1(P1) LOOP7: LD (P1) ;GET A CHARACTER SCL CAI '9'+1 ;CHECK FOR A NUMERIC CHAR JP HLETR SCL CAI '0'-'9'-1 ;IF NUMERIC, SHIFT NUMBER JP HENTER ; AND ADD NEW HEX DIGIT JMP HEND X12C: JMP X12B HLETR: SCL ;CHECK FOR HEX LETTER CAI 'G'-'9'-1 JP HEND SCL CAI 'A'-'G' JP HX0K JMP HEND HX0K: CCL ;ADD 10 TO GET TRUE VALUE ADI 10 ; OF LETTER HENTER: XAE ;NEW DIGIT IN EX REG LDI 4 ;SET SHIFT COUNTER ST TEMP(P2) ST NUM(P2) ;DIGIT COUNT IS NON-ZERO HSHIFT: LD -2(P3) ;SHIFT NUMBER LEFT BY 4 CCL ADD -2(P3) ST -2(P3) LD -1(P3) ADD -1(P3) ST -1(P3) DLD TEMP(P2) JNZ HSHIFT LD -2(P3) ;ADD NEW DIGIT ORE ; INTO NUMBER ST -2(P3) LD @1(P1) ;ADVANCE THE CURSOR JMP LOOP7 ;GET NEXT CHAR HEND: LD NUM(P2) ;CHECK IF THERE WERE JNZ X12B ;MORE THAN 0 CHARACTERS LDI 5 ;ERROR IF THERE WERE NONE E8B: JMP E8 ;************************************* ;* TEST FOR NUMBER IN TEXT * ;************************************* ; THIS ROUTINE TESTS FOR A NUMBER IN THE TEXT. IF NO ; NUMBER IS FOUND, I.L. CONTROL PASSES TO THE ADDRESS ; INDICATED IN THE 'TSTN' INSTRUCTION. OTHERWISE, THE ; NUMBER IS SCANNED AND PUT ON THE ARITHMETIC STACK, ; WITH I.L. CONTROL PASSING TO THE NEXT INSTRUCTION. TSTNUM: LD @1(P1) XRI ' ' ; SKIP OVER ANY SPACES JZ TSTNUM LD @-1(P1) ;GET FIRST CHAR SCL ;TEST FOR DIGIT CAI '9'+1 JP TNABRT SCL CAI '0'-'9'-1 JP TNL1 TNABRT: LD PCLOW(P2) ;CET TEST-FAIL ADDRESS XPAL P3 ;FROM I. L. TABLE LD PCHIGH(P2) XPAH P3 LD (P3) ;PUT TEST-FAIL ADDRESS ST PCHIGH(P2) ;INTO I. L. PC LD 1(P3) ST PCLOW(P2) JMP X12C TNRET: LDI 2 ;SKIP OVER ONE IL INSTRUCTION CCL ;IF NUMBER IS DONE ADD PCLOW(P2) ST PCLOW(P2) LDI 0 ADD PCHIGH(P2) ST PCHIGH(P2) X13: JMP X12C ESA: JMP E8B TNL1: XAE ;SAVE DIGIT IN EX REG LDI H(AESTK) ;POINT P3 AT AE STACK XPAH P3 ILD LSTK(P2) ILD LSTK(P2) XPAL P3 LDI 0 ST -1(P3) LDE ST -2(P3) LOOP8: LD @1(P1) ;GET NEXT CHAR LD (P1) SCL ;TEST IF IT IS DIGIT CAI '9'+1 JP TNRET ;RETURN IF IT ISN'T SCL CAI '0'-'9'-1 JP TNL2 JMP TNRET TNL2: XAE ;SAVE DIGIT LD -1(P3) ;PUT RESULT IN SCRATCH SPACE ST 1(P3) LD -2(P3) ST (P3) LDI 2 ST TEMP(P2) ;MULTIPLY RESULT BY 10 TNSHFT: CCL ;FIRST MULTIPLY BY 4 LD -2(P3) ADD -2(P3) ST -2(P3) LD -1(P3) ADD -1(P3) ST -1(P3) ANI 0x80 ; MAKE SURE N0 OVERFLOW JNZ TNERR ; OCCURRED DLD TEMP(P2) JNZ TNSHFT CCL ;THEN ADD OLD RESULT, LD -2(P3) ; SO WE HAVE RESULT * 5 ADD (P3) ST -2(P3) LD -1(P3) ADD 1(P3) ST -1(P3) ANI 0x80 ;MAKE SURE NO OVERFLOW JNZ TNERR ; OCCURRED CCL ;THEN MULTIPLY, BY TWO LD -2(P3) ADD -2(P3) ST -2(P3) LD -1(P3) ADD -1(P3) ST -1(P3) ANI 0x80 ;MAKE SURE NO OVERFLOW JNZ TNERR ; OCCURRED CCL ;THEN ADD IN NEW DIGIT LDE ADD -2(P3) ST -2(P3) LDI 0 ADD -1(P3) ST -1(P3) JP LOOP8 ;REPEAT IF NO OVERFLOW TNERR: LDI 6 E9: JMP ESA ;ELSE REPORT ERROR X14: JMP X13 ;************************************* ;* GET LINE FROM TELETYPE * ;************************************* GETL: LDPI P1,LBUF ;SET P1 TO LBUF LDI 0 ;CLEAR NO. OF CHAR ST CHRNUM(P2) LDPI P3,PUTC-1 ;POINT P3 AT PUTC ROUTINE LD RUNMOD(P2) ;PRINT '? ' IF RUNNING JZ GETL0 ; (I.E. DURING 'INPUT') LDI '?' XPPC P3 LDI ' ' XPPC P3 JMP GETL1 GETL0: LDI '>' ; OTHERWISE PRINT '>' XPPC P3 GETL1: JS P3,GECO ;GET CHARACTER LDI L(PUTC)-1 ; POINT PS AT PUTC AGAIN XPAL P3 LDE ;GET TYPED CHAR JZ GETL1 ; IGNORE NULLS XRI 0x0A ; IGNORE LINE FEED JZ GETL1 LDE XRI 0x0D ; CHECK FOR CR JZ GETLCR LDE XRI 'O'+0x10 ; CHECK FOR SHIFT/0 JZ GETRUB LDE ;CHECK FOR CTRL/H XRI 8 JZ GXH LDE XRI 0x15 ;CHECK FOR CTRL/U JZ GXU LDE XRI 3 ;CHECK FOR CTRL/C JNZ GENTR LDI '^' ;ECHO CONTROL/C AS ^C XPPC P3 LDI 'C' XPPC P3 LDI 14 ; CAUSE A BREAK JMP E9 GXU: LDI '^' ;ECHO CONTROL/U AS ^U XPPC P3 LDI 'U' XPPC P3 LDI 0x0D ; PRINT CR/LF XPPC P3 LDI 0x0A XPPC P3 JMP GETL ; G0 GET ANOTHER LINE X15: JMP X14 GENTR: LDE ST @1(P1) ;PUT CHAR IN LBUF ILD CHRNUM(P2) ; INCREMENT CHRNUM XRI 72 ;IF=72, LINE FULL JNZ GETL1 LDI 0x0D XAE ;SAVE CARRIAGE RET LDE XPPC P3 ; PRINT IT JMP GETLCR ; STORE IT IN LBUF E10: JMP E9 GXH: LDI ' ' ; BLANK OUT THE CHARACTER XPPC P3 LDI 8 ; PRINT ANOTHER BACKSPACE XPPC P3 GETRUB: LD CHRNUM(P2) JZ GETL1 DLD CHRNUM(P2) ;0NE LESS CHAR LD @-1(P1) ;BACKSPACE CURSOR JMP GETL1 GETLCR: LDE ST @1(P1) ;STORE CR IN LBUF LDI 0x0A ;PRINT LINE FEED XPPC P3 LDI H(LBUF) ;SET P1 TO BEGIN- XPAH P1 ; NING OF LBUF LDI L(LBUF) XPAL P1 X16: JMP X15 ;************************************* ;* EVAL -- GET MEMORY CONTENTS * ;************************************* ; THIS ROUTINE IMPLEMENTS THE '@' OPERATOR IN EXPRESSIONS EVAL: LDI H(AESTK) XPAH P3 LD LSTK(P2) XPAL P3 ; P3 -> ARITH STACK LD -1(P3) ; GET ADDR OFF STACK, XPAH P1 ; AND INTO P1, XAE ; SAVING OLD P1 IN EX & LO LD -2(P3) XPAL P1 ST LO(P2) LD 0(P1) ;GET MEMORY CONTENTS, ST -2(P3) ; SHOVE ONTO STACK LDI 0 ST -1(P3) ;HIGH ORDER 3 BITS ZEROED LD LO(P2) XPAL P1 ;RESTORE ORIGINAL P1 LDE XPAH P1 JMP X15 ;************************************* ;* MOVE - STORE INTO MEMORY * ;************************************* ; THIS ROUTINE IMPLEMENTS THE STATEMENT: ; '@' FACTOR '=' REL-EXP MOVE: LDI H(AESTK) XPAH P3 LD LSTK(P2) XPAL P3 ;P3 -> ARITH STACK LD @-2(P3) ;GET BYTE TO BE MOVED XAE LD @-1(P3) ;NOW GET ADDRESS INTO P3 ST TEMP(P2) LD @-1(P3) XPAL P3 ST LSTK(P2) ;STACK PTR UPDATED NOW LD TEMP(P2) XPAH P3 LDE ST 0(P3) ;MOVE THE BYTE INTO MEMORY X17: JMP X16 Ell: JMP E10 ;************************************* ;* TEXT EDITOR * ;************************************* ;INPUTS TO THIS ROUTINE: POINTER TO LINE BUFFER IN P1L0W & ; P1HIGH. P1 POINTS TO THE INSERTION POINT IN THE TEXT. ; THE A.E. STACK HAS THE LINE NUMBER ON IT (STACK POINTER ; IS ALREADY POPPED). ; EACH LINE IN THE NIBL TEXT IS STORED IN THE FOLLOWING ; FORMAT: TWO BYTES CONTAINING THE LINE NUMBER (IN BINARY, ; HIGH ORDER BYTE FIRST), THEN ONE BYTE CONTAINING THE ; LENGTH OF THE LINE., AND FINALLY THE LINE ITSELF FOLLOWED ; BY A CARRIAGE RETURN. THE LAST LINE IN THE TEXT IS ; FOLLOWED BY TWO CONSECUTIVE BYTES OF XFF. INSRT: LDI H(AESTK) ;POINT P3 AT AE STACK, XPAH P3 ;WHICH HAS THE LINE # LD LSTK(P2) ;ON IT XPAL P3 LD 1(P3) ;SAVE NEW LINE'S NUMBER ST HILINE(P2) LD 0(P3) ST LOLINE(P2) LD P1L0W(P2) ;PUT POINTER TO LBUF INTO P3 XPAL P3 LD P1HIGH(P2) XPAH P3 LDI 4 ;INITIALLY LENGTH OF NEW LINE ST CHRNUM(P2) ; = 4. ADD 1 TO LENGTH FOR INSRT1: LD @1(P3) ; EACH CHAR IN LINE UP TO, XRI 0x0D ; BUT NOT INCLUDING, JZ INSRT2 ; CARRIAGE RETURN ILD CHRNUM(P2) JMP INSRT1 INSRT2: LD CHRNUM(P2) ; IF LENGTH STILL 4, XRI 4 ; WE'LL DELETE A LINE, JNZ INSRT3 ; SO SET LENGTH = 0 ST CHRNUM(P2) INSRT3: LD CHRNUM(P2) ;PUT NEW LINE LENGTH IN EX XAE LD LABLHI(P2) ; IS NEW LINE REPLACING OLD? JP INSRT4 ;YES - DO REPLACE ANI 0x7F ;N0 - WE'LL INSERT LINE HERE, ST LABLHI(P2) ; WHERE FNDLBL GOT US JMP AMOVE ;BUT FIR3T MAKE ROOM INSRT4: LD @3(P1) ;SKIP LINE # AND LENGTH LDE ;EX, NOW HOLDING NEW LINE CCL ; LENGTH, WILL SOON HOLD ADI -4 ; DISPLACEMENT OF LINES XAE ; TO BE MOVED INSRT5: LD @1(P1) ;SUBTRACT 1 FROM DISPLACEMENT XRI 0x0D ; FOR EACH CHAR IN LINE BEING JZ AMOVE ; REPLACED LDE CCL ADI -1 XAE JMP INSRT5 X19: JMP X17 E12: JMP Ell AMOVE: LDE ;IF DISPLACEMENT AND LENGTH OR CHRNUM(P2) ; OF NEW LINE ARE 0, RETURN JZ X19 LDI L(DOSTAK) ; CLEAR SOME STACKS ST DOPTR(P2) LDI L(SBRSTK) ST SBRPTR(P2) LDI L(FORSTK) ST FORPTR(P2) LDE JZ INSAD0 ;DON'T NEED TO MOVE LINES JP INSUP0 ;SKIP IF DISP. POSITIVE ADOWN: LD 0(P1) ; NEGATIVE DISPLACEMENT: ST EREG(P1) ;DO; LD @1(P1) ; M(P1+DISP) = M(P1); JP ADOWN ; P1 = Pl+1; LD 0(P1) ;UNTIL M(P1)<0 & M(P1-1)<0; JP ADOWN ST EREG(P1) ;M(P1+DISP) = M(P1); JMP INSAD0 INSUP0: LD -2(P1) ;POSITIVE DISPLACEMENT: ST TEMP(P2) ;FLAG BEGINNING OF MOVE WITH LDI -1 ; A -1 FOLLOWED BY 30, WHICH ST -2(P1) ; CAN NEVER APPEAR IN A LDI 80 ; NIBL TEXT ST -1(P1) INSUP1: LD @1(P1) ; ADVANCE P1 TO END OF TEXT JP INSUP1 LD 0(P1) JP INSUP1 XPAH P1 ;SAVE P1 IN LO, HI ST HI(P2) XPAH P1 XPAL P1 ST LO(P2) XPAL P1 LD LO(P2) ;ADD DISPLACEMENT TO CCL ;VALUE OF P1, TO CHECK ADE ;WHETHER WE'RE OUT OF LDI 0 ;RAM FOR USER'S PROGRAM ADD HI(P2) XOR HI(P2) ANI 0xF0 JZ INSUP2 LDI 0 ;IF OUT OF RAM, CHANGE XAE ; DISPLACEMENT TO ZERO INSUP2: LDI -1 INSUP3: ST EREG(P1) ;MOVE TEXT UP UNTIL WE REACH LD @-1(P1) ; THE FLAGS SET ABOVE JP INSUP3 LD 1(P1) XRI 80 JZ INSUP4 LD 0(P1) JMP INSUP3 INSUP4: LD TEMP(P2) ;RESTORE THE FLAGGED LOCATION ST 0(P1) ; TO THEIR ORIGINAL VALUES LDI 0x0D ST 1(P1) LDE ;IF DISPLACEMENT = 0, WE'RE JNZ INSAD0 ; OUT OF RAM, SO REPORT ERROR LDI 2 E12A: JMP E12 INSAD0: LD CHRNUM(P2) ;INSERT NEW LINE X19A: JZ X19 ; UNLESS LENGTH IS ZERO LD P1L0W(P2) ;POINT P1 AT LINE BUFFER XPAL P1 LD P1HIGH(P2) XPAH P1 LD LABLLO(P2) ;POINT P3 AT INSERTION PLACE XPAL P3 LD LABLHI(P2) XPAH P3 LD HILINE(P2) ;PUT LINE NUMBER INTO TEXT ST @1(P3) LD LOLINE(P2) ST @1(P3) LD CHRNUM(P2) ;STORE LINE LENGTH IN TEXT ST @1(P3) INSAD1: LD @1(P1) ;PUT REST OF CHARS ST @1(P3) ; (INCLUDING OR) INTO TEXT XRI 0x0D JNZ INSAD1 JMP X19A ;RETURN X20: JS P3,EXECIL E13: JMP E12A ;************************************ ;* POP ARITHMETIC STACK * ;************************************ POPAE: DLD LSTK(P2) ;THIS ROUTINE POP THE A. E. DLD LSTK(P2) ;STACK, AND PUTS THE RESULT XPAL P3 ;INTO LO(P2) AND HI(P2) LDI H(AESTK) XPAH P3 LD (P3) ST LO(P2) LD 1(P3) ST HI(P2) JMP X20 ;************************************* ;* UNTIL * ;************************************* UNTIL: LD DOPTR(P2) ; CHECK FOR DO-STACK UNDERFLOW XAE LDE XRI L(DOSTAK) JNZ UNTL1 LDI 15 JMP E13 UNTL1: LD LO(P2) ; CHECK FOR EXPRESSION = 0 OR HI(P2) ;<- CHANGED AFTER 12/17/76 TO 'ANI 01' (R.MARIN, JAN 2008) JZ SREDO ;IF ZERO, REPEAT DO-LOOP DLD DOPTR(P2) ;ELSE POP SAVE STACK DLD DOPTR(P2) JMP X20 ;CONTINUE TO NEXT STMT SREDO: LDE ; POINT P3 AT DO-STACK XPAL P3 LDI H(DOSTAK) XPAH P3 LD -1(P3) ;LOAD P1 FROM DO STACK XPAH P1 LD -2(P3) XPAL P1 ; CURSOR NOW POINTS TO FIRST JMP X20 ; STATEMENT OF DO-LOOP ;************************************* ;* STORE INTO STATUS REGISTER * ;************************************* ; THIS ROUTINE IMPLEMENTS THE STATEMENT: ; 'STAT' '=' REL-EXP MOVESR: LD LO(P2) ;LOW BYTE GOES TO STATUS ANI 0xF7 ; BUT WITH IEN BIT CLEARED CAS X21: JMP X20 E14: JMP E13 ;************************************* ;* STAT FUNCTION * ;************************************* STATUS: LDI H(AESTK) XPAH P3 ;POINT P3 AT AE STACK ILD LSTK(P2) ILD LSTK(P2) XPAL P3 CSA ST -2(P3) ;STATUS REG IS, LOW BYTE LDI 0 ST -1(P3) ;ZERO IS HIGH BYTE JMP X21 ;************************************* ;* MACHINE LANGUAGE SUBROUTINE * ;************************************* ; THIS ROUTINE IMPLEMENTS THE 'LINK' STATEMENT CALLML: LD HI(P2) ;GET HIGH BYTE OF ADDRESS XPAH P3 LD LO(P2) ;GET LOW BYTE XPAL P3 ;P3 -> USER'S ROUTINE LD @-1(P3) ;CORRECT P3 XPPC P3 ;CALL ROUTINE (PRAY IT WORKS) LDPI P2,VARS ;RESTORE RAM POINTER JMP X21 ;RETURN ;************************************* ;* SAVE DO LOOP ADDRESS * ;************************************* ; THIS ROUTINE IMPLEMENTS THE 'DO' STATEMENT. SAVEDO: LD DOPTR(P2) ;CHECK FOR STACK OVERFLOW XRI L(FORSTK) JNZ SVDO1 LDI 10 E15: JMP E14 SVDO1: ILD DOPTR(P2) ILD DOPTR(P2) XPAL P3 LDI H(DOSTAK) XPAH P3 ;P3 -> TOP OF DO STACK XPAH P1 ;SAVE CURSOR ON THE STACK ST -1(P3) XPAH P1 XPAL P1 ST -2(P3) XPAL P1 X22: JMP X21 ;************************************* ;* TOP OF RAM FUNCTION * ;************************************* TOP: LD TEMP2(P2) ;SET P3 TO POINT TO XPAH P3 ; START OF NIBL TEXT LD TEMP3(P2) XPAL P3 TOP0: LD (P3) ;HAVE WE HIT END OF TEXT? JP TOP1 ; NO - SKIP TO NEXT LINE JMP TOP2 ; YES - PUT CURSOR ON STACK TOP1: LD 2(P3) ;GET LENGTH OF LINE XAE LD @EREG(P3) ;SKIP TO NEXT LINE JMP TOP0 ; GO CHECK FOR EOF TOP2: LD @2(P3) ; P3 := P3 + 2 ILD LSTK(P2) ;SET PS TO STACK, SAVING ILD LSTK(P2) ; OLD P3 (WHICH CONTAINS TOP) XPAL P3 ; ON IT SOMEHOW XAE LDI H(AESTK) XPAH P3 ST -1(P3) LDE ST -2(P3) JMP X22 ;************************************* ;* SKIP TO NEXT NIBL LINE * ;************************************* IGNORE: LD @1(P1) ;SCAN TIL WE'RE PAST XRI 0x0D ; CARRIAGE RETURN JNZ IGNORE XPPC P3 ;************************************* ;* MODULO FUNCTION * ;************************************* MODULO: LD LSTK(P2) ;THIS ROUTINE MUST BE XPAL P3 ; IMMEDIATELY AFTER A LDI H(AESTK) ; DIVIDE TO WORK CORRECTLY XPAH P3 LD 3(P3) ;GET LOW BYTE OF REMAINDER ST -2(P3) ;PUT ON STACK LD 2(P3) ;GET HIGH BYTE OF REMAINDER ST -1(P3) ;PUT ON STACK X23: JMP X22 E16: JMP E15 ;************************************* ;* RANDOM FUNCTION * ;************************************* RANDOM: LDI 8 ;LOOP COUNTER FOR MULTIPLY ST NUM(P2) LD RNDX(P2) XAE LD RNDY(P2) ST TEMP2(P2) LOOP9: LD RNDX(P2) ;MULTIPLY THE SEEDS BY 9 CCL ADE XAE LD RNDY(P2) CCL ADD TEMP2(P2) ST RNDY(P2) DLD NUM(P2) JNZ LOOP9 LDE ;ADD 7 TO SEEDS CCL ADI 7 XAE LD RNDY(P2) CCL ADI 7 RR ST RNDY(P2) ILD RNDF(P2) ;HAVE WE GONE THROUGH JZ RND1 ; 256 GENERATIONS? LDE ;IF SO, SKIP GENERATING ST RNDX(P2) ; THE NEW RNDX RND1: LD LSTK(P2) ;START MESSING WITH THE STACK XPAL P3 LDI H(AESTK) XPAH P3 LDI 1 ;FIRST PUT 1 ON STACK ST (P3) LDI 0 ST 1(P3) LD -2(P3) ;PUT EXPR2 ON STACK ST 2(P3) LD -1(P3) ST 3(P3) LD -4(P3) ;PUT EXPR1 ON STACK ST 4(P3) LD -3(P3) ST 5(P3) LD RNDY(P2) ;PUT RANDOM # ON STACK ST -2(P3) LD RNDX(P2) XRI 0xFF ANI 0x7F ST -1(P3) LD @6(P3) ; ADD 6 TO STACK POINTER XPAL P3 ST LSTK(P2) X24: JMP X23 E16A: JMP E16 ;************************************* ;* PU3H 1 ON ARITHMETIC STACK * ;************************************* LIT1: ILD LSTK(P2) ILD LSTK(P2) XPAL P3 LDI H(AESTK) XPAH P3 LDI 0 ST -1(P3) LDI 1 ST -2(P3) JMP X24 ;************************************* ;* FOR-LOOP INITIALIZATION * ;************************************* SAVFOR: LD FORPTR(P2) ; CHECK FOR FOR STACK XRI L(PCSTAK) ; OVERFLOW JNZ SFOR1 LDI 10 E17: JMP E16A SFOR1: XRI L(PCSTAK) XPAL P1 ; POINT P1 AT FOR STACK ST P1L0W(P2) ; SAVING OLD P1 LDI H(FORSTK) XPAH P1 ST P1HIGH(P2) LD LSTK(P2) ; POINT P2 AT AE STACK XPAL P3 LDI H(AESTK) XPAH P3 LD -7(P3) ;GET VARIABLE INDEX ST @1(P1) ;SAVE ON FOR-STACK LD -4(P3) ;GET L(LIMIT) ST @1(P1) ;SAVE LD -3(P3) ;GET H(LIMIT) ST @1(P1) ;SAVE LD -2(P3) ;GET L(STEP) ST @1(P1) ;SAVE LD -1(P3) ;GET H(STEP) ST @1(P1) ;SAVE LD P1L0W(P2) ;GET L(P1) ST @1(P1) ;SAVE LD P1HIGH(P2) ;GET H(P1) ST @1(P1) ;SAVE XPAH P1 ;RESTORE OLD P1 LD P1L0W(P2) XPAL P1 ST FORPTR(P2) ;UPDATE POR STACK PTR LD @-4(P3) XPAL P3 ST LSTK(P2) ;UPDATE AE STACK PTR X25: JMP X24 ;************************************* ;* FIRST PART OF 'NEXT VAR' * ;************************************* NEXTV: LD FORPTR(P2) ;POINT P1 AT FOR STACK, XRI L(FORSTK) ; CHECKING FOR UNDERFLOW JNZ QNXTV1 LDI 11 ;REPORT ERROR JMP E17 QNXTV1: XRI L(FORSTK) XPAL P1 ST P1L0W(P2) ;SAVE OLD P1 LDI H(FORSTK) XPAH P1 ST P1HIGH(P2) LD LSTK(P2) ;POINT P3 AT AE STACK XPAL P3 LDI H(AESTK) XPAH P3 LD @-1(P3) ;GET VARIABLE INDEX XOR -7(P1) ;COMPARE WITH INDEX JZ NXTV10 ; ON FOR STACK: ERROR LDI 12 ; IF NOT EQUAL E18: JMP E17 NXTV10: XOR -7(P1) ;RESTORE INDEX XAE ;SAVE IN EREG LD EREG(P2) ;GET L(VARIABLE) CCL ADD -4(P1) ;ADD L(STEP) ST EREG(P2) ;STORE IN VARIABLE ST (P3) ; AND ON STACK LD @1(P2) ; INCREMENT RAM PTR LD EREG(P2) ;GET H(VARIABLE) ADD -3(P1) ;ADD H(STEP) ST EREG(P2) ; STORE IN VARIABLE ST 1(P3) ; AND ON STACK LD @-1(P2) ; RESTORE RAM POINTER LD -6(P1) ;GET L(LIMIT) ST 2(P3) ;PUT ON STACK LD -5(P1) ;GET H(LIMIT) ST 3(P3) ;PUT ON STACK LD -3(P1) ;GET H(STEP) JP NXTV2 ; IF NEGATIVE, INVERT LDI 4 ; ITEMS ON A. E. STACK ST NUM(P2) ;NUM = LOOP COUNTER LOOP10: LD @1(P3) ;GET BYTE FROM STACK XRI 0xFF ; INVERT IT ST -1(P3) ;PUT BACK ON STACK DLD NUM(P2) ; DO UNTIL NUM = 0 JNZ LOOP10 JMP NXTV3 NXTV2: LD @4(P3) ;UPDATE AE STACK POINTER NXTV3: XPAL P3 ST LSTK(P2) LD P1L0W(P2) ; RESTORE OLD P1 XPAL P1 LD P1HIGH(P2) XPAH P1 X26: JMP X25 ;************************************* ;* SECOND PART OF 'NEXT VAR' * ;************************************* NEXTV1: LD LO(P2) ;IS FOR-LOOP OVER WITH? JZ X_REDO ;N0 - REPEAT LOOP LD FORPTR(P2) ;YES - POP FOR-STACK CCL ADI -7 ST FORPTR(P2) XPPC P3 ; RETURN TO I.L. INTERPRETER X_REDO: LD FORPTR(P2) ; POINT P3 AT FOR STACK XPAL P3 LDI H(FORSTK) XPAH P3 LD -1(P3) ;GET OLD P1 OFF STACK XPAH P1 LD -2(P3) XPAL P1 JMP X26 E19: JMP E18 ;************************************ ;* PRINT MEMORY AS STRING * ;************************************ ; THIS ROUTINE IMPLEMENTS THE STATEMENT: ; 'PRINT' '$' FACTOR PSTRNG: LD HI(P2) ;POINT P1 AT STRING TO PRINT XPAH P1 LD LO(P2) XPAL P1 LDPI P3,PUTC-1 ;POINT P3 AT PUTC ROUTINE PRSTR1: LD @1(P1) ;GET A CHARACTER XRI 0x0D ;IS IT A CARRIAGE RETURN? JZ X26 ;YES - WE'RE DONE XRI 0x0D ;NO - PRINT THE CHARACTER XPPC P3 CSA ;MAKE SURE NO ONE IS ANI 0x20 ;TYPING ON THE TTY JNZ PRSTR1 ;BEFORE REPEATING LOOP JMP X26 ;************************************ ;* INPUT A STRING * ;************************************ ; THIS ROUTINE IMPLEMENTS THE STATEMENT: ; 'INPUT' '$' FACTOR ISTRNG: LD HI(P2) ;GET ADDRESS TO STORE THE XPAH P3 ; STRING, PUT IT INTO P3 LD LO(P2) XPAL P3 INPST2: LD @1(P1) ;GET A BYTE FROM LINE BUFFER ST @1(P3) ;PUT IT IN SPECIFIED LOCATION XRI 0x0D ;DO UNTIL CHAR = CARR. RETURN JNZ INPST2 X27: JMP X26 ;************************************ ;* STRING CONSTANT ASSIGNMENT * ;************************************ ; THIS ROUTINE IMPLEMENTS THE STATEMENT: ; '$' FACTOR '=' STRING PUTSTR: LD LO(P2) ;GET ADDRESS TO STORE STRING, XPAL P3 ; PUT IT INTO P3 LD HI(P2) XPAH P3 LOOP11: LD @1(P1) ;GET A BYTE FROM STRING XRI '"' ;CHECK FOR END OF STRING JZ STREND XRI '"' | 0x0D ;MAKE SURE THERE'S NO CR JNZ PTSTR1 LDI 7 JMP E19 ;ERROR IF CARRIAGE RETURN PTSTR1: XRI 0x0D ;RESTORE CHARACTER ST @1(P3) ;PUT IN SPECIFIED LOCATION JMP LOOP11 ;GET NEXT CHARACTER STREND: LDI 0x0D ;APPEND CARRIAGE RETURN ST (P3) ; TO STRING JMP X27 ;************************************ ;* MOVE STRING * ;************************************ ; THIS ROUTINE IMPLEMENTS THE STATEMENT: ; '$' FACTOR '=' '$' FACTOR MOVSTR: LD LSTK(P2) ; POINT P3 AT A. E. STACK XPAL P3 LDI H(AESTK) XPAH P3 LD @-1(P3) ;GET ADDRESS OF SOURCE STRING XPAH P1 ; INTO P1 LD @-1(P3) XPAL P1 LD @-1(P3) ;GET ADDRESS OF DESTINATION XAE ; STRING INTO P3 LD @-1(P3) XPAL P3 ST LSTK(P2) ;UPDATE STACK POINTER LDE XPAH P3 LOOP12: LD @1(P1) ;GET A SOURCE CHARACTER ST @1(P3) ;SEND IT TO DESTINATION XRI 0x0D ;REPEAT UNTIL CARRIAGE RET. JZ X27 CSA ; OR KEYBOARD INTERRUPT ANI 0x20 JNZ LOOP12 JMP X27 ;************************************ ;* PUT PAGE NUMBER ON STACK * ;************************************ PUTPGE: ILD LSTK(P2) ILD LSTK(P2) XPAL P3 LDI H(AESTK) XPAH P3 LD PAGE(P2) ST -2(P3) LDI 0 ST -1(P3) JMP X27 ;************************************ ;* ASSIGN NEW PAGE * ;************************************ NUPAGE: LD LO(P2) ;GET PAGE # FROM STACK, ANI 7 ;GET THE LOW 3 BITS JNZ NUPGE0 ;PAGE 0 BECOMES PAGE 1 LDI 1 NUPGE0: ST PAGE(P2) XPPC P3 ; RETURN ;************************************* ;* FIND START OF PAGE * ;************************************* ; THIS ROUTINE COMPUTES THE START OF THE CURRENT TEXT PAGE, ; STORING THE ADDRESS IN TEMP2(P2) [THE HIGH BYTE], AND ; TEMP3(P2) [THE LOW BYTE]. FNDPGE: LD PAGE(P2) XRI 1 ;SPECIAL CASE IS PAGE 1, BUT JNZ FPGE1 ;OTHERS ARE CONVENTIONAL LDI H(PGM) ;PAGE 1 STARTS AT 'PGM' ST TEMP2(P2) LDI L(PGM) ST TEMP3(P2) XPPC P3 ;RETURN FPGE1: XRI 1 ;RESTORE PAGE # XAE ;SAVE IT LDI 4 ;LOOP COUNTER = 4 ST NUM(P2) LOOP13: LDE ; MULTIPLY PAGE# BY 16 CCL ADE XAE DLD NUM(P2) JNZ LOOP13 LDE ST TEMP2(P2) ;TEMP2 HAS HIGH BYTE LDI 2 ; OF ADDRESS NOW ST TEMP3(P2) ;LOW BYTE IS ALWAYS 2 XPPC P3 ;************************************ ;* MOVE CURSOR TO NEW PAGE * ;************************************ CHPAGE: LD TEMP2(P2) ;PUT START OF PAGE XPAH P1 ; INTO P1. THIS ROUTINE LD TEMP3(P2) ; MUST BE CALLED RIGHT XPAL P1 ; AFTER 'FNDPGE' XPPC P3 ; RETURN ;************************************ ;* DETERMINE CURRENT PAGE * ;************************************ DETPGE: XPAH P1 ;CURRENT PAGE IS HIGH XAE ; PART OF CURSOR DIVIDED LDE ; BY 16 XPAH P1 LDE SR SR SR SR ST PAGE(P2) XPPC P3 ;RETURN ;************************************ ;* CLEAR CURRENT PAGE * ;************************************ NEWPGM: LD TEMP2(P2) ;POINT P1 AT CURRENT PAGE XPAH P1 LD TEMP3(P2) XPAL P1 LDI 0x0D ;PUT DUMMY END-OF-LINE ST -1(P1) ; JUST BEFORE TEXT LDI -1 ;PUT -1 AT START OF TEXT ST (P1) ST 1(P1) XPPC P3 ;RETURN ;************************************* ;* FIND LINE NUMBER IN TEXT * ;************************************* ; INPUTS: THE START OF THE CURRENT PAGE IN TEMP2 AND TEMPS, ; THE LINE NUMBER TO LOOK FOR IN LO AND HI. ; OUTPUTS: THE ADDRESS OF THE FIRST LINE IN THE NIBL TEXT ; WHOSE LINE NUMBER IS GREATER THAN OR EQUAL TO THE ; NUMBER IN HI AND LO, RETURNED IN P1 AND ALSO IN ; IN THE RAM VARIABLES LABLLO AND LABLHI. THE SIGN ; BIT OF LABLHI IS SET IF EXACT LINE IS NOT FOUND. FNDLBL: LD TEMP2(P2) ; POINT P1 AT START OF TEXT XPAH P1 LD TEMP3(P2) XPAL P1 FLBL1: LD (P1) ;HAVE WE HIT END OF TEXT? XRI 0xFF JP FLBL2 ;YES - STOP LOOKING SCL ; NO - COMPARE LINE NUMBERS LD 1(P1) ; BY SUBTRACTING CAD LO(P2) LD 0(P1) CAD HI(P2) ;IS TEXT LINE # >= LINE #? JP FLBL2 ;YES - STOP LOOKING. LD 2(P1) ;NO - TRY NEXT LINE IN TEXT XAE LD @EREG(P1) ; SKIP LENGTH OF LINE JMP FLBL1 FLBL2: XPAL P1 ;SAVE ADDRESS OF FOUND LINE ST LABLLO(P2) ; IN LABLHI AND LABLLO XPAL P1 XPAH P1 ST LABLHI(P2) XPAH P1 LD LO(P2) ;WAS THERE AN EXACT MATCH? XOR 1(P1) JNZ FLBL3 LD HI(P2) XOR 0(P1) JNZ FLBL3 ;NO - FLAG THE ADDRESS XPPC P3 ;YES - RETURN NORMALLY FLBL3: LD LABLHI(P2) ;SET SIGN BIT OF HIGH PART ORI 0x80 ; OF ADDRESS TO INDICATE ST LABLHI(P2) ; INEXACT MATCH OF LINE #'S XPPC P3 ;*********************************** ;* I. L. MACROS * ;*********************************** TSTBITH = TSTBIT*256 CALBITH = CALBIT*256 JMPBITH = JMPBIT*256 TSTR MACRO FAIL,A,B DB H((FAIL & 0x0FFF)| TSTBITH) DB L((FAIL & 0x0FFF)| TSTBITH) IFB B DB A |0x80 ELSE DB A DB B |0x80 ENDIF ENDM TSTCR MACRO FAIL DB H(FAIL & 0x0FFF | TSTBITH) DB L(FAIL & 0x0FFF | TSTBITH) DB 0x0D|0x80 ENDM TSTV MACRO FAIL DB H((TSTVAR-1) & 0x0FFF) DB L((TSTVAR-1) & 0x0FFF) DB H(FAIL) DB L(FAIL) ENDM TSTN MACRO FAIL DB H((TSTNUM-1) & 0x0FFF) DB L((TSTNUM-1) & 0x0FFF) DB H(FAIL) DB L(FAIL) ENDM JUMP MACRO ADR DB H(ADR & 0x0FFF | JMPBITH) DB L(ADR & 0x0FFF | JMPBITH) ENDM CALL MACRO ADR DB H(ADR & 0x0FFF | CALBITH) DB L(ADR & 0x0FFF | CALBITH) ENDM DO MACRO ADR IFNB ADR DB H((ADR-1) & 0x0FFF) DB L((ADR-1) & 0x0FFF) SHIFT DO ALLARGS ENDIF ENDM ;************************************* ;* I. L. TABLE * ;************************************* START: DO NLINE PROMPT: DO GETL TSTCR PRMPT1 JUMP PROMPT PRMPT1: TSTN LIST DO FNDPGE,XCHGP1,POPAE,FNDLBL,INSRT JUMP PROMPT LIST: TSTR RUN,"LIS",'T' DO FNDPGE TSTN LIST1 DO POPAE,FNDLBL JUMP LIST2 LIST1: DO CHPAGE LIST2: DO LST LIST3: CALL PRNUM DO LST3 JUMP START RUN: TSTR CLR,"RU",'N' DO DONE BEGIN: DO FNDPGE,CHPAGE,STRT,NXT CLR: TSTR NEW,"CLEA",'R' DO DONE,CLEAR,NXT NEW: TSTR STMT,"NE",'W' TSTN DFAULT JUMP NEW1 DFAULT: DO LIT1 NEW1: DO DONE,POPAE,NUPAGE,FNDPGE,NEWPGM,NXT STMT: TSTR LET,"LE",'T' LET: TSTV AT TSTR SYNTAX,'=' CALL RELEXP DO STORE,DONE,NXT AT: TSTR IF, '@' CALL FACTOR TSTR SYNTAX,'=' CALL RELEXP DO MOVE,DONE,NXT IF: TSTR UNT,"I",'F' CALL RELEXP TSTR IF1,"THE",'N' IF1: DO POPAE,CMPR JUMP STMT UNT: TSTR DOSTMT,"UNTI",'L' DO CKMODE CALL RELEXP DO DONE,POPAE,UNTIL,DETPGE,NXT DOSTMT: TSTR GOTO,"D",'O' DO CKMODE,DONE,SAVEDO,NXT GOTO: TSTR RETURN,"G",'O' TSTR GOSUB,"T",'O' CALL RELEXP DO DONE JUMP TBL001 GOSUB: TSTR SYNTAX,"SU",'B' CALL RELEXP DO DONE,SAV TBL001: DO FNDPGE, POPAE,FNDLBL,XFER,NXT RETURN: TSTR NEXT,"RETUR",'N' DO DONE,RSTR,DETPGE,NXT NEXT: TSTR FOR,"NEX",'T' DO CKMODE TSTV SYNTAX DO DONE,NEXTV CALL GTROP DO POPAE, NEXTV1,DETPGE,NXT FOR: TSTR STAT,"FO",'R' DO CKMODE TSTV SYNTAX TSTR SYNTAX,'=' CALL RELEXP TSTR SYNTAX,"T",'O' CALL RELEXP TSTR FORI,"STE",'P' CALL RELEXP JUMP FOR2 FORI: DO LIT1 FOR2: DO DONE,SAVFOR,STORE,NXT STAT: TSTR PGE,"STA",'T' TSTR SYNTAX,'=' CALL RELEXP DO POPAE,MOVESR DO DONE,NXT PGE: TSTR DOLLAR,"PAG",'E' TSTR SYNTAX,'=' CALL RELEXP DO DONE,POPAE,NUPAGE,FNDPGE,CHPAGE,NXT DOLLAR: TSTR PRINT,'$' CALL FACTOR TSTR SYNTAX,'=' TSTR DOLR1, '"' DO POPAE,PUTSTR JUMP DOLR2 DOLR1: TSTR SYNTAX,'$' CALL FACTOR DO XCHGP1,MOVSTR,XCHGP1 DOLR2: DO DONE,NXT PRINT: TSTR INPUT,"P",'R' TSTR PR1,"IN",'T' PR1: TSTR PR2,'"' DO PRS JUMP COMMA PR2: TSTR PR3,'$' CALL FACTOR DO XCHGP1,POPAE,PSTRNG,XCHGP1 JUMP COMMA PR3: CALL RELEXP CALL PRNUM COMMA: TSTR PR4,',' JUMP PR1 PR4: TSTR PR5,';' JUMP PR6 PR5: DO NLINE PR6: DO DONE, NXT INPUT: TSTR END,"INPU",'T' DO CKMODE TSTV IN2 DO XCHGP1,GETL IN1: CALL RELEXP DO STORE,XCHGP1 TSTR IN3,',' TSTV SYNTAX DO XCHGP1 TSTR SYNTAX,',' JUMP IN1 IN2: TSTR SYNTAX,'$' CALL FACTOR DO XCHGP1,GETL,POPAE,ISTRNG,XCHGP1 IN3: DO DONE,NXT END: TSTR ML,"EN",'D' DO DONE,BREAK ML: TSTR REM,"LIN",'K' CALL RELEXP DO DONE,XCHGP1,POPAE,CALLML,XCHGP1,NXT REM: TSTR SYNTAX,"RE",'M' DO IGNORE,NXT SYNTAX: DO ERR ERRNUM: CALL PRNUM DO FIN ; NOTE: EACH RELATIONAL OPERATOR (EQ, LEQ, ETC. ) DOES AN ; AUTOMATIC 'RTN' (THIS SAVES VALUABLE BYTES AND TIME) RELEXP: CALL EXPR TSTR REL1,'=' CALL EXPR DO EQ REL1: TSTR REL4,'<' TSTR REL2,'=' CALL EXPR DO LEQ REL2: TSTR REL3,'>' CALL EXPR DO NEQ REL3: CALL EXPR DO LSS REL4: TSTR RETEXP,'>' TSTR REL5,'=' CALL EXPR DO GEQ REL5: CALL EXPR GTROP: DO GTR EXPR: TSTR EX1,'-' CALL TERM DO NEG JUMP EX3 EX1: TSTR EX2,'+' EX2: CALL TERM EX3: TSTR EX4,'+' CALL TERM DO ADD JUMP EX3 EX4: TSTR EX5,'-' CALL TERM DO SUB JUMP EX3 EX5: TSTR RETEXP,"O",'R' CALL TERM DO OROP JUMP EX3 RETEXP: DO RTN TERM: CALL FACTOR Tl: TSTR T2,'*' CALL FACTOR DO MUL JUMP Tl T2: TSTR T3,'/' CALL FACTOR DO DIV JUMP Tl T3: TSTR RETEXP,"AN",'D' CALL FACTOR DO ANDOP JUMP Tl FACTOR: TSTV Fl DO IND,RTN Fl: TSTN F2 DO RTN F2: TSTR F3,'#' DO HEX,RTN F3: TSTR F4,'(' CALL RELEXP TSTR SYNTAX,')' DO RTN F4: TSTR F5,'@' CALL FACTOR DO EVAL,RTN F5: TSTR F6,"NO",'T' CALL FACTOR DO NOTOP,RTN F6: TSTR F7,"STA",'T' DO STATUS,RTN F7: TSTR F8,"TO",'P' DO FNDPGE,TOP,RTN F8: TSTR F9,"MO",'D' CALL DOUBLE DO DIV,MODULO,RTN F9: TSTR F10,"RN",'D' CALL DOUBLE DO RANDOM,SUB,ADD,DIV,MODULO,ADD,RTN F10: TSTR SYNTAX,"PAG",'E' DO PUTPGE,RTN DOUBLE: TSTR SYNTAX,'(' CALL RELEXP TSTR SYNTAX,',' CALL RELEXP TSTR SYNTAX,')' DO RTN PRNUM: DO XCHGP1,PRN PRNUM1: DO DIV,PRN1,XCHGP1,RTN ;************************************* ;* ERROR MESSAGES * ;************************************* MESSAGE MACRO A,B DB A DB B |0x80 ENDM MESGS: MESSAGE " ERRO",'R' ; 1 MESSAGE "ARE",'A' ; 2 MESSAGE "STM",'T' ; 3 MESSAGE "CHA",'R' ; 4 MESSAGE "SNT",'X' ; 5 MESSAGE "VAL",'U' ; 6 MESSAGE "END",'"' ; 7 MESSAGE "NOG",'O' ; 8 MESSAGE "RTR",'N' ; 9 MESSAGE "NES",'T' ; 10 MESSAGE "NEX",'T' ; 11 MESSAGE "FO" ,'R' ; 12 MESSAGE "DIV",'0' ; 13 MESSAGE "BR" ,'K' ; 14 MESSAGE "UNT",'L' ; 15 ; ;************************************* ;* GET CHARACTER AND ECHO IT * ;************************************* GECO: LDI 8 ;SET COUNT = 8 ST NUM(P2) CSA ;SET READER RELAY ORI 2 CAS GETCO1: CSA ;WAIT FOR START BIT ANI 0x20 JNZ GETCO1 ;NOT FOUND LDI 87 ; DELAY 1/2 BIT TIME DLY 4 CSA ; IS START BIT STILL THERE? ANI 0x20 JNZ GETCO1 ; NO CSA ;SEND START BIT ANI 0xFD ; RESET READER RELAY ORI 1 CAS GETCO2: LDI 133 ; DELAY 1 BIT TIME DLY 8 CSA ;GET BIT (SENSED) ANI 0x20 JZ GETCO3 LDI 1 JMP GETCO4 GETCO3: LDI 0 JNZ GETCO4 GETCO4: ST TEMP(P2) ;SAVE BIT VALUE (0 OR 1) RRL ;ROTATE INTO LINK XAE SRL ; SHIFT INTO CHARACTER XAE ; RETURN CHAR TO E CSA ;ECHO BIT TO OUTPUT ORI 1 XOR TEMP(P2) CAS DLD NUM(P2) ;DECREMENT BIT COUNT JNZ GETCO2 ;LOOP UNTIL 0 CSA ;SET STOP BIT ANI 0xFE CAS DLY 8 ; DELAY APPROX. 1 BIT TIME LDE ; AC HAS INPUT CHARACTER ANI 0x7F XAE LDE XPPC P3 ;RETURN JMP GECO ;************************************* ;* PRINT CHARACTER AT TTY * ;************************************* PUTC: XAE LDI 255 ; DELAY ALMOST DLY 23 ; 3 BIT TIMES CSA ;SET OUTPUT BIT TO LOGIC 0 ORI 1 ; FOR START BIT CAS LDI 9 ; INITIALIZE BIT COUNT ST TEMP3(P2) PUTC1: LDI 138 ; DELAY 1 BIT TIME DLY 8 DLD TEMP3(P2) ; DECREMENT BIT COUNT JZ PUTC2 LDE ; PREPARE NEXT BIT ANI 1 ST TEMP2(P2) XAE SR XAE CSA ; SET UP OUTPUT BIT ORI 1 XOR TEMP2(P2) CAS ; PUT BIT INTO TTY JMP PUTC1 PUTC2: CSA ; SET STOP BIT ANI 0xFE CAS XPPC P3 JMP PUTC END 0 ;************************************************************************** **** ;****************** Snip here! Assembly listing follows.... ******************* ;************************************************************************** **** AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 1 - 1/16/2008 0:30:10 1/ 0 : ;-------------------------------------------------------------------------- --- 2/ 0 : ; NIBL.ASM - Tiny BASIC for the National Semiconductor SC/MP microprocessor 3/ 0 : ; (NIBL-P, release date 12/17/76) 4/ 0 : ; 5/ 0 : ; This file has been prepared via OCR and text editor from the original 6/ 0 : ; assembly listing; then re-assembled and rigorously checked for errors. 7/ 0 : ; 8/ 0 : ;The following differences exist from the original listing: 9/ 0 : ; - Many original local labels (mostly for short jumps) have been given 10/ 0 : ; new names to insure global uniqueness. 11/ 0 : ; - Macros have been modified (or created) to allow compatibility with a 12/ 0 : ; modern, generic, macro-assembler. 13/ 0 : ; - After being passed through the OCR process, neatness of the original 14/ 0 : ; text has suffered some cosmetic inconsistency. 15/ 0 : ; 16/ 0 : ;Of further note: 17/ 0 : ; - The macro-assembler used here is a free tool, "AS", by Alfred Arnold: 18/ 0 : ; http://john.ccac.rwth-aachen.de:8000/as/ 19/ 0 : ; - The cryptic syntax "./256" used as the operand of the instruction at 20/ 0 : ; address 0087 suggests that there may have been "hooks" incorporated 21/ 0 : ; for relocation of the NIBL interpreter code. An assembled operand value 22/ 0 : ; of zero has been retained as in the original. 23/ 0 : ; - On my original hardcopy listing, hand written notations indicate that the 24/ 0 : ; "OR HI(P2)" instructions at addresses 05D3 and 0936 were later changed 25/ 0 : ; to "ANI 01". As I recall, this was a minor bug fix that may have been 26/ 0 : ; published in a National Semiconductor newsletter or in an issue of 27/ 0 : ; Dr. Dobb's Journal. 28/ 0 : ; 29/ 0 : ; A full assembly listing of this source file is also appended below. 30/ 0 : ; Enjoy! 31/ 0 : ; 32/ 0 : ; Roger Marin, January 2008 33/ 0 : ; Portland, Oregon, USA. 34/ 0 : ; ramarin(AT)teleport.com 35/ 0 : ;-------------------------------------------------------------------------- --- 36/ 0 : 37/ 0 : 38/ 0 : CPU SC/MP 39/ 0 : L FUNCTION VAL16, (VAL16 & 0xFF) 40/ 0 : H FUNCTION VAL16, ((VAL16 >> 8) & 0xFF) 41/ 0 : 42/ 0 : JS MACRO P,VAL 43/ 0 : LDI H(VAL-1) 44/ 0 : XPAH P 45/ 0 : LDI L(VAL-1) 46/ 0 : XPAL P 47/ 0 : XPPC P 48/ 0 : ENDM 49/ 0 : 50/ 0 : LDPI MACRO P,VAL 51/ 0 : LDI H(VAL) 52/ 0 : XPAH P 53/ 0 : LDI L(VAL) 54/ 0 : XPAL P 55/ 0 : ENDM 56/ 0 : 57/ 0 : ;***************************************************** 58/ 0 : ;* WE ARE TIED DOWN TO A LANGUAGE WHICH * 59/ 0 : ;* MAKES UP IN OBSCURITY WHAT IT LACKS * 60/ 0 : ;* IN STYLE. * AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 2 - 1/16/2008 0:30:10 61/ 0 : ;* - TOM STOPPARD * 62/ 0 : ;* * 63/ 0 : ;***************************************************** 64/ 0 : 65/ 0 : =0x20 TSTBIT = 0x20 ;I. L. INSTRUCTION FLAGS 66/ 0 : =0x40 JMPBIT = 0x40 67/ 0 : =0x80 CALBIT = 0x80 68/ 0 : =0x1 P1 = 1 ;SC/MP POINTER ASSIGNMENTS 69/ 0 : =0x2 P2 = 2 70/ 0 : =0x3 P3 = 3 71/ 0 : =0xFFFFFFFFF.. EREG = -128 ;THE EXTENSION REGISTER 72/ 0 : 73/ 0 : ; DISPLACEMENTS FOR RAM VARIABLES USED BY INTERPRETER 74/ 0 : 75/ 0 : =0xFFFFFFFFF.. DOPTR = -1 ;DO-STACK POINTER 76/ 0 : =0xFFFFFFFFF.. FORPTR = -2 ;FOR-STACK POINTER 77/ 0 : =0xFFFFFFFFF.. LSTK = -3 ;ARITHMETIC STACK POINTER 78/ 0 : =0xFFFFFFFFF.. SBRPTR = -4 ;GOSUB STACK POINTER 79/ 0 : =0xFFFFFFFFF.. PCLOW = -5 ;I. L. PROGRAM COUNTER 80/ 0 : =0xFFFFFFFFF.. PCHIGH = -6 81/ 0 : =0xFFFFFFFFF.. PCSTK = -7 ;I. L. CALL STACK POINTER 82/ 0 : =0xFFFFFFFFF.. LOLINE = -8 ;CURRENT LINE NUMBER 83/ 0 : =0xFFFFFFFFF.. HILINE = -9 84/ 0 : =0xFFFFFFFFF.. PAGE = -10 ;VALUE OF CURRENT PAGE 85/ 0 : =0xFFFFFFFFF.. LISTNG = -11 ;LISTING FLAG 86/ 0 : =0xFFFFFFFFF.. RUNMOD = -12 ;RUN/EDIT FLAG 87/ 0 : =0xFFFFFFFFF.. LABLLO = -13 88/ 0 : =0xFFFFFFFFF.. LABLHI = -14 89/ 0 : =0xFFFFFFFFF.. P1L0W = -15 ;SPACE TO SAVE CURSOR 90/ 0 : =0xFFFFFFFFF.. P1HIGH = -16 91/ 0 : =0xFFFFFFFFF.. LO = -17 92/ 0 : =0xFFFFFFFFF.. HI = -18 93/ 0 : =0xFFFFFFFFF.. FAILLO = -19 94/ 0 : =0xFFFFFFFFF.. FAILHI = -20 95/ 0 : =0xFFFFFFFFF.. NUM = -21 96/ 0 : =0xFFFFFFFFF.. TEMP = -22 97/ 0 : =0xFFFFFFFFF.. TEMP2 = -23 98/ 0 : =0xFFFFFFFFF.. TEMP3 = -24 99/ 0 : =0xFFFFFFFFF.. CHRNUM = -25 100/ 0 : =0xFFFFFFFFF.. RNDF = -26 101/ 0 : =0xFFFFFFFFF.. RNDX = -27 ; SEEDS FOR RANDOM NUMBER 102/ 0 : =0xFFFFFFFFF.. RNDY = -28 103/ 0 : 104/ 0 : ; ALLOCATION OF RAM FOR NIBL VARIABLES, STACKS, 105/ 0 : ; AND LINE BUFFER 106/ 0 : 107/ 0 : =0x101C VARS = 0x1000 +28 ;NIBL VARIABLES A-Z 108/ 0 : =0x1050 AESTK: = VARS +52 ;ARITHMETIC STACK 109/ 0 : =0x106A SBRSTK: = AESTK +26 ;G0SUB STACK 110/ 0 : =0x107A DOSTAK: = SBRSTK +16 ;DO/UNTIL STACK 111/ 0 : =0x108A FORSTK: = DOSTAK +16 ;FOR/NEXT STACK 112/ 0 : =0x10A6 PCSTAK: = FORSTK +28 ;I.L. CALL STACK 113/ 0 : =0x10D6 LBUF: = PCSTAK +48 ;LINE BUFFER 114/ 0 : =0x1120 PGM: = LBUF +74 ;USER'S PROGRAM 115/ 0 : 116/ 0 : 117/ 0 : ;************************************* 118/ 0 : ;* INITIALIZATION OF NIBL * 119/ 0 : ;************************************* 120/ 0 : AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 3 - 1/16/2008 0:30:10 121/ 0 : 122/ 0 : 08 NOP 123/ 1 : (MACRO) LDPI P2,VARS ; POINT P2 AT VARIABLES 123/ 1 : C4 10 LDI H(VARS) 123/ 3 : 36 XPAH P2 123/ 4 : C4 1C LDI L(VARS) 123/ 6 : 32 XPAL P2 124/ 7 : (MACRO) LDPI P1,PGM ; POINT PI AT PAGE ONE PROGRAM 124/ 7 : C4 11 LDI H(PGM) 124/ 9 : 35 XPAH P1 124/ A : C4 20 LDI L(PGM) 124/ C : 31 XPAL P1 125/ D : C4 FF LDI -1 ; STORE -1 AT START OF PROGRAM 126/ F : C9 00 ST 0(P1) 127/ 11 : C9 01 ST 1(P1) 128/ 13 : C4 0D LDI 0x0D ;ALSO STORE A DUMMY 129/ 15 : C9 FF ST -1(P1) ; CARRIAGE RETURN 130/ 17 : C4 02 LDI 2 ;POINT P2 AT PAGE 2, 131/ 19 : CA F6 ST PAGE(P2) ; INITIALLY SET PAGE TO 2 132/ 1B : 31 XPAL P1 133/ 1C : C4 20 LDI 0x20 134/ 1E : 35 XPAH P1 135/ 1F : B9 02 DLD 2(P1) ; CHECK IF THERE IS REALLY 136/ 21 : 01 XAE ; A PROGRAM IN PAGE 2: 137/ 22 : C1 80 LD EREG(P1) ; IF FIRST LINE LENGTH 138/ 24 : E4 0D XRI 0x0D ; POINTS TO CARR. RETURN 139/ 26 : 98 02 JZ L000 ; AT END OF LINE 140/ 28 : BA F6 DLD PAGE(P2) ;IF NOT, PAGE = 1 141/ 2A : C4 20 L000: LDI 0x20 142/ 2C : 35 LOOP1: XPAH P1 143/ 2D : C4 FF LDI -1 ; STORE -1 IN 2 CONSECUTIVE 144/ 2F : C9 00 ST (P1) ; LOCATIONS AT START OF PAGE 145/ 31 : C9 01 ST 1(P1) 146/ 33 : C4 0D LDI 0x0D ;ALSO PUT A DUMMY END-OF-LINE 147/ 35 : C9 FF ST -1(P1) ; JUST BEFORE TEXT 148/ 37 : 35 XPAH P1 ; UPDATE P1 TO POINT TO 149/ 38 : 02 CCL ; NEXT PAGE (UNTIL PAGE=8) 150/ 39 : F4 10 ADI 0x10 ; REPEAT INITIALIZATION 151/ 3B : E4 80 XRI 0x80 ; FOR PAGES 2-7 152/ 3D : 98 04 JZ L001 153/ 3F : E4 80 XRI 0x80 154/ 41 : 90 E9 JMP LOOP1 155/ 43 : C4 00 L001: LDI 0 ; CLEAR SOME FLAGS 156/ 45 : CA F4 ST RUNMOD(P2) 157/ 47 : CA F5 ST LISTNG(P2) 158/ 49 : C4 58 LDI L(BEGIN) ; INITIALIZE IL PC SO THAT 159/ 4B : CA FB ST PCLOW(P2) ; NIBL PROGRAM 160/ 4D : C4 0C LDI H(BEGIN) ; IS EXECUTED IMMEDIATELY 161/ 4F : CA FA ST PCHIGH(P2) 162/ 51 : C4 00 CLEAR: LDI 0 163/ 53 : CA EA ST TEMP(P2) 164/ 55 : 01 XAE 165/ 56 : C4 00 CLEAR1: LDI 0 ; SET ALL VARIABLES 166/ 58 : CA 80 ST EREG(P2) ; TO ZERO 167/ 5A : AA EA ILD TEMP(P2) 168/ 5C : 01 XAE 169/ 5D : C4 34 LDI 52 170/ 5F : 60 XRE 171/ 60 : 9C F4 JNZ CLEAR1 172/ 62 : C4 50 LDI L(AESTK) ; INITIALIZE SOME STACKS? AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 4 - 1/16/2008 0:30:10 173/ 64 : CA FD ST LSTK(P2) ; ARITHMETIC STACK, 174/ 66 : C4 7A LDI L(DOSTAK) 175/ 68 : CA FF ST DOPTR(P2) ; DO/UNTIL STACK, 176/ 6A : C4 6A LDI L(SBRSTK) 177/ 6C : CA FC ST SBRPTR(P2) ; GOSUB STACK, 178/ 6E : C4 A6 LDI L(PCSTAK) 179/ 70 : CA F9 ST PCSTK(P2) ; I. L. CALL STACK, 180/ 72 : C4 8A LDI L(FORSTK) 181/ 74 : CA FE ST FORPTR(P2) ; FOR/NEXT STACK 182/ 76 : 183/ 76 : 184/ 76 : ;************************************* 185/ 76 : ;* INTERMEDIATE LANGUAGE EXECUTOR * 186/ 76 : ;************************************* 187/ 76 : 188/ 76 : C2 FB EXECIL: LD PCLOW(P2) ;SET P3 TO CURRENT 189/ 78 : 33 XPAL P3 ; IL PC. 190/ 79 : C2 FA LD PCHIGH(P2) 191/ 7B : 37 XPAH P3 192/ 7C : C7 01 CHEAT: LD @1(P3) 193/ 7E : 01 XAE ;GET NEW I.L. INSTRUCTION 194/ 7F : C7 01 LD @1(P3) ; INTO P3 THROUGH 195/ 81 : 33 XPAL P3 ; OBSCURE METHODS 196/ 82 : CA FB ST PCLOW(P2) ;SIMULTANEOUSLY, INCREMENT 197/ 84 : 40 LDE ; THE I.L. PC BY 2 198/ 85 : D4 0F ANI 0x0F ;REMOVE FLAG FROM INSTRUCTION 199/ 87 : DC 00 ORI 0 ; TURN INTO ACTUAL ADDRESS, (see note at top of file) 200/ 89 : 37 XPAH P3 ; PUT BACK INTO P3 201/ 8A : CA FA ST PCHIGH(P2) 202/ 8C : 40 LDE 203/ 8D : D4 F0 ANI 0xF0 ; CHECK IF I.L. INSTRUCTION 204/ 8F : E4 20 XRI TSTBIT ; IS A 'TEST' 205/ 91 : 98 2F JZ TST 206/ 93 : E4 A0 XRI CALBIT|TSTBIT ;CHECK FOR I. L. CALL 207/ 95 : 98 07 JZ ILCALL 208/ 97 : E4 C0 XRI JMPBIT|CALBIT ;CHECK FOR I.L. JUMP 209/ 99 : 98 E1 JZ CHEAT ;l.L. JUMP IS TRIVIAL 210/ 9B : 3F NOJUMP: XPPC P3 ;MUST BE AN ML SUBROUTINE 211/ 9C : 90 D8 JMP EXECIL ; IF NONE OF THE ABOVE 212/ 9E : 213/ 9E : 214/ 9E : ;************************************* 215/ 9E : ;* INTERMEDIATE LANGUAGE CALL * 216/ 9E : ;************************************* 217/ 9E : 218/ 9E : C2 F9 ILCALL: LD PCSTK(P2) 219/ A0 : E4 D6 XRI L(LBUF) ;CHECK FOR STACK OVERFLOW 220/ A2 : 9C 04 JNZ ILC1 221/ A4 : C4 0A LDI 10 222/ A6 : 90 60 JMP EOA 223/ A8 : E4 D6 ILC1: XRI L(LBUF) ;RESTORE ACCUMULATOR 224/ AA : 33 XPAL P3 ;SAVE LOW BYTE OF NEW 225/ AB : CA EA ST TEMP(P2) ; I.L. PC IN TEMP 226/ AD : C4 10 LDI H(PCSTAK) ;POINT P3 AT I.L. 227/ AF : 37 XPAH P3 ; SUBROUTINE STACK 228/ B0 : 01 XAE ;SAVE NEW I.L. PC HIGH IN EX 229/ B1 : C2 FB LD PCLOW(P2) ;SAVE OLD I.L. PC ON STACK 230/ B3 : CF 01 ST @1(P3) 231/ B5 : C2 FA LD PCHIGH(P2) 232/ B7 : CF 01 ST @1(P3) AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 5 - 1/16/2008 0:30:10 233/ B9 : C2 EA LD TEMP(P2) ;GET LOW BYTE OF NEW 234/ BB : 33 XPAL P3 ; I.L. PC INTO P3 LOW 235/ BC : CA F9 ST PCSTK(P2) ;UPDATE I.L. STACK POINTER 236/ BE : 40 LDE ;GET HIGH BYTE OF NEW 237/ BF : 37 XPAH P3 ; I.L. PC INTO P3 HIGH 238/ C0 : 90 BA CHEAT1: JMP CHEAT 239/ C2 : 240/ C2 : 241/ C2 : ;************************************* 242/ C2 : ;* I.L. 'TEST' INSTRUCTION * 243/ C2 : ;************************************* 244/ C2 : 245/ C2 : CA E7 TST: ST CHRNUM(P2) ;CLEAR NUMBER OF CHARS SCANNED 246/ C4 : C5 01 SCAN: LD @1(P1) ;SLEW OFF SPACES 247/ C6 : E4 20 XRI ' ' 248/ C8 : 98 FA JZ SCAN 249/ CA : C5 FF LD @-1(P1) ;REPOSITION CURSOR 250/ CC : C2 FA LD PCHIGH(P2) ; POINT P3 AT I.L. TABLE 251/ CE : 37 XPAH P3 252/ CF : CA EC ST FAILHI(P2) ;OLD P3 BECOMES THE 253/ D1 : C2 FB LD PCLOW(P2) ; TEST FAIL ADDRESS 254/ D3 : 33 XPAL P3 255/ D4 : CA ED ST FAILLO(P2) 256/ D6 : C7 01 LOOP2: LD @1(P3) 257/ D8 : 01 XAE ;SAVE CHAR FROM TABLE 258/ D9 : BA E7 DLD CHRNUM(P2) ;DECREMENT CHAR COUNT 259/ DB : 40 LDE ;GET CHAR BACK 260/ DC : D4 7F ANI 0x7F ;SCRUB OFF FLAG (IF ANY) 261/ DE : E5 01 XOR @1(P1) ;IS CHAR EQUAL TO TEXT CHAR? 262/ E0 : 9C 07 JNZ LNEQ ;NO - END TEST 263/ E2 : 40 LDE ;YES - BUT IS IT LAST CHAR? 264/ E3 : 94 F1 JP LOOP2 ;IF NOT, CONTINUE TO COMPARE 265/ E5 : 90 95 JMP CHEAT ; IF SO, GET NEXT I. L. 266/ E7 : 90 8D XO: JMP EXECIL ; INSTRUCTION 267/ E9 : C2 E7 LNEQ: LD CHRNUM(P2) ;RESTORE P1 TO 268/ EB : 01 XAE ; ORIGINAL VALUE 269/ EC : C5 80 LD @EREG(P1) 270/ EE : C2 ED LD FAILLO(P2) ;LOAD TEST-FAIL ADDRESS 271/ F0 : 33 XPAL P3 ; INTO P3 272/ F1 : C2 EC LD FAILHI(P2) 273/ F3 : 37 XPAH P3 274/ F4 : 90 CA JMP CHEAT1 ;GET NEXT I. L. INSTRUCTION 275/ F6 : 276/ F6 : 277/ F6 : ;************************************* 278/ F6 : ;* I.L. SUBROUTINE RETURN * 279/ F6 : ;************************************* 280/ F6 : 281/ F6 : C4 10 RTN: LDI H(PCSTAK) ; POINT P3 AT I.L. PC STACK 282/ F8 : 37 XPAH P3 283/ F9 : C2 F9 LD PCSTK(P2) 284/ FB : 33 XPAL P3 285/ FC : C7 FF LD @-1(P3) ;GET HIGH PART OF OLD PC 286/ FE : 01 XAE 287/ FF : C7 FF LD @-1(P3) ;GET LOW PART OF OLD PC 288/ 101 : 33 XPAL P3 289/ 102 : CA F9 ST PCSTK(P2) ;UPDATE IL STACK POINTER 290/ 104 : 40 LDE 291/ 105 : 37 XPAH P3 ;P3 NOW HAS OLD IL PC 292/ 106 : 90 B8 JMP CHEAT1 AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 6 - 1/16/2008 0:30:10 293/ 108 : 90 41 EOA: JMP EO 294/ 10A : 295/ 10A : ;************************************* 296/ 10A : ;* SAVE GOSUB RETURN ADDRESS * 297/ 10A : ;************************************* 298/ 10A : 299/ 10A : C2 FC SAV: LD SBRPTR(P2) 300/ 10C : E4 7A XRI L(DOSTAK) ;CHECK FOR MORE 301/ 10E : 98 1C JZ SAV2 ; THAN 8 SAVES 302/ 110 : AA FC ILD SBRPTR(P2) 303/ 112 : AA FC ILD SBRPTR(P2) 304/ 114 : 33 XPAL P3 ;SET P3 TO 305/ 115 : C4 10 LDI H(SBRSTK) ; SUBROUTINE STACK TOP. 306/ 117 : 37 XPAH P3 307/ 118 : C2 F4 LD RUNMOD(P2) ;IF IMMEDIATE MODE, 308/ 11A : 98 0A JZ SAV1 ; SAVE NEGATIVE ADDRESS. 309/ 11C : 35 XPAH P1 ;SAVE HIGH PORTION 310/ 11D : CB FF ST -1(P3) ; OF CURSOR 311/ 11F : 35 XPAH P1 312/ 120 : 31 XPAL P1 ;SAVE LOW PORTION 313/ 121 : CB FE ST -2(P3) ; OF CURSOR 314/ 123 : 31 XPAL P1 315/ 124 : 90 C1 JMP XO ; RETURN 316/ 126 : C4 FF SAV1: LDI -1 ; IMMEDIATE MODE 317/ 128 : CB FF ST -1(P3) ; RETURN ADDRESS IS 318/ 12A : 90 BB JMP XO ; NEGATIVE. 319/ 12C : C4 0A SAV2: LDI 10 ; ERROR: MORE THAN 320/ 12E : 90 1B JMP EO ; 8 GOSUBS 321/ 130 : 322/ 130 : ;************************************* 323/ 130 : ;* CHECK STATEMENT FINISHED * 324/ 130 : ;************************************* 325/ 130 : 326/ 130 : C5 01 DONE: LD @1(P1) ;SKIP SPACES 327/ 132 : E4 20 XRI ' ' 328/ 134 : 98 FA JZ DONE 329/ 136 : E4 2D XRI ' ' | 0x0D ;IS IT CARRIAGE RETURN? 330/ 138 : 98 04 JZ DONE1 ;YES - RETURN 331/ 13A : E4 37 XRI 0x37 ;IS CHAR A ':'? 332/ 13C : 9C 01 JNZ DONE2 ;NO - ERROR 333/ 13E : 3F DONE1: XPPC P3 ;YES - RETURN 334/ 13F : C4 04 DONE2: LDI 4 335/ 141 : 90 08 JMP EO 336/ 143 : 337/ 143 : 338/ 143 : ;************************************* 339/ 143 : ; RETURN FROM GOSUB * 340/ 143 : ;************************************* 341/ 143 : 342/ 143 : C2 FC RSTR: LD SBRPTR(P2) 343/ 145 : E4 6A XRI L(SBRSTK) ; CHECK FOR RETURN 344/ 147 : 9C 04 JNZ RSTR1 ; W/0 GOSUB 345/ 149 : C4 09 LDI 9 346/ 14B : 90 40 EO: JMP El ; REPORT THE ERROR 347/ 14D : BA FC RSTR1: DLD SBRPTR(P2) 348/ 14F : BA FC DLD SBRPTR(P2) ;POP GOSUB STACK, 349/ 151 : 33 XPAL P3 ; PUT PTR INTO P3 350/ 152 : C4 10 LDI H(SBRSTK) 351/ 154 : 37 XPAH P3 352/ 155 : C3 01 LD 1(P3) ;IF ADDRESS NEGATIVE, AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 7 - 1/16/2008 0:30:10 353/ 157 : 94 06 JP RSTR2 ; SUBROUTINE WAS CALLED 354/ 159 : C4 00 LDI 0 ; FROM EDIT MODE, 355/ 15B : CA F4 ST RUNMOD(P2) ; SO RETURN TO EDITING 356/ 15D : 90 88 XI: JMP XO 357/ 15F : 35 RSTR2: XPAH P1 ; RESTORE CURSOR HIGH 358/ 160 : C3 00 LD 0(P3) 359/ 162 : 31 XPAL P1 ; RESTORE CURSOR LOW 360/ 163 : C4 01 LDI 1 ;SET RUN MODE 361/ 165 : CA F4 ST RUNMOD(P2) 362/ 167 : 90 F4 JMP XI 363/ 169 : 364/ 169 : 365/ 169 : ;************************************* 366/ 169 : ;* TRANSFER TO NEW STATEMENT * 367/ 169 : ;************************************* 368/ 169 : 369/ 169 : C2 F2 XFER: LD LABLHI(P2) ;CHECK FOR NON-EXISTENT LINE 370/ 16B : 94 04 JP XFER1 371/ 16D : C4 08 LDI 8 372/ 16F : 90 1C JMP El 373/ 171 : C4 01 XFER1: LDI 1 ;SET RUN MODE TO 1 374/ 173 : CA F4 ST RUNMOD(P2) 375/ 175 : 3F XPPC P3 376/ 176 : 377/ 176 : 378/ 176 : ;************************************* 379/ 176 : ;* PRINT STRING IN TEXT * 380/ 176 : ;************************************* 381/ 176 : 382/ 176 : (MACRO) PRS: LDPI P3,PUTC-1 ;POINT P3 AT PUTC ROUTINE 382/ 176 : C4 0F LDI H(PUTC-1) 382/ 178 : 37 XPAH P3 382/ 179 : C4 C1 LDI L(PUTC-1) 382/ 17B : 33 XPAL P3 383/ 17C : C5 01 LD @1(P1) ;L0AD NEXT CHAR 384/ 17E : E4 22 XRI '"' ;IF ", END OF 385/ 180 : 98 DB JZ XI ; STRING 386/ 182 : E4 2F XRI 0x2F ;IF CR, ERROR 387/ 184 : 98 05 JZ PRS1 388/ 186 : E4 0D XRI 0x0D ;RESTORE CHAR 389/ 188 : 3F XPPC P3 ;PRINT CHAR 390/ 189 : 90 EB JMP PRS ;GET NEXT CHAR 391/ 18B : C4 07 PRS1: LDI 7 ;SYNTAX ERROR 392/ 18D : 90 35 El: JMP E2 393/ 18F : 394/ 18F : 395/ 18F : ;************************************* 396/ 18F : ;* PRINT NUMBER ON STACK * 397/ 18F : ;************************************* 398/ 18F : 399/ 18F : ; THIS ROUTINE IS BASED ON DENNIS ALLISON'S BINARY TO DECIMAL 400/ 18F : ; CONVERSION ROUTINE IN VOL. 1, #1 OF "DR. DOBB'S JOURNAL", 401/ 18F : ; BUT IS MUCH MORE OBSCURE BECAUSE OF THE STACK MANIPULATION. 402/ 18F : 403/ 18F : C4 10 PRN: LDI H(AESTK) ; POINT P3 AT A. E. STACK 404/ 191 : 37 XPAH P3 405/ 192 : AA FD ILD LSTK(P2) 406/ 194 : AA FD ILD LSTK(P2) 407/ 196 : 33 XPAL P3 408/ 197 : C4 0A LDI 10 ;PUT 10 ON STACK (WE'LL BE AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 8 - 1/16/2008 0:30:10 409/ 199 : CB FE ST -2(P3) ; DIVIDING BY IT LATER) 410/ 19B : C4 00 LDI 0 411/ 19D : CB FF ST -1(P3) 412/ 19F : C4 05 LDI 5 ;SET CHRNUM TO POINT TO PLACE 413/ 1A1 : CA E7 ST CHRNUM(P2) ; IN STACK WHERE WE STORE 414/ 1A3 : C4 FF LDI -1 ; THE CHARACTERS TO PRINT 415/ 1A5 : CB 05 ST 5(P3) ;FIRST CHAR IS A FLAG (-1) 416/ 1A7 : C3 FD LD -3(P3) ;CHECK IF NUMBER IS NEGATIVE 417/ 1A9 : 94 13 JP LPNOS 418/ 1AB : C4 2D LDI '-' ;PUT '-' ON STACK, AND NEGATE 419/ 1AD : CB 04 ST 4(P3) ; THE NUMBER 420/ 1AF : C4 00 LDI 0 421/ 1B1 : 03 SCL 422/ 1B2 : FB FC CAD -4(P3) 423/ 1B4 : CB FC ST -4(P3) 424/ 1B6 : C4 00 LDI 0 425/ 1B8 : FB FD CAD -3(P3) 426/ 1BA : CB FD ST -3(P3) 427/ 1BC : 90 9F JMP XI ; GO DO DIVISION BY 10 428/ 1BE : C4 20 LPNOS: LDI ' ' ;IF POSITIVE, PUT ' ' ON 429/ 1C0 : CB 04 ST 4(P3) ; STACK BEFORE DIVISION 430/ 1C2 : 90 99 X4: JMP XI 431/ 1C4 : 90 57 E2: JMP ERR1 432/ 1C6 : 433/ 1C6 : ; THE DIVISION IS PERFORMED, THEN CONTROL IS TRANSFERRED 434/ 1C6 : ; TO PRN1, WHICH FOLLOWS. 435/ 1C6 : 436/ 1C6 : AA FD PRN1: ILD LSTK(P2) ; POINT P1 AT A. E. STACK 437/ 1C8 : AA FD ILD LSTK(P2) 438/ 1CA : 31 XPAL P1 439/ 1CB : C4 10 LDI H(AESTK) 440/ 1CD : 35 XPAH P1 441/ 1CE : AA E7 ILD CHRNUM(P2) ;INCREMENT CHARACTER STACK 442/ 1D0 : 01 XAE ; POINTER, PUT IN EX. REG. 443/ 1D1 : C1 01 LD 1(P1) ;GET REMAINDER FROM DIVIDE, 444/ 1D3 : DC 30 ORI '0' 445/ 1D5 : C9 80 ST EREG(P1) ;PUT IT ON THE STACK 446/ 1D7 : C1 FD LD -3(P1) ;IS THE QUOTIENT ZERO YET? 447/ 1D9 : D9 FC OR -4(P1) 448/ 1DB : 98 0A JZ QPRNT ;YES - GO PRINT THE NUMBER 449/ 1DD : C4 0F LDI H(PRNUM1) ;N0 - CHANGE THE I. L. PC 450/ 1DF : CA FA ST PCHIGH(P2) ; SO THAT DIVIDE IS 451/ 1E1 : C4 33 LDI L(PRNUM1) ; PERFORMED AGAIN 452/ 1E3 : CA FB ST PCLOW(P2) 453/ 1E5 : 90 DB JMP X4 ;G0 DO DIVISION BY 10 AGAIN 454/ 1E7 : (MACRO) QPRNT: LDPI P3,PUTC-1 ;POINT P3 AT PUTC ROUTINE 454/ 1E7 : C4 0F LDI H(PUTC-1) 454/ 1E9 : 37 XPAH P3 454/ 1EA : C4 C1 LDI L(PUTC-1) 454/ 1EC : 33 XPAL P3 455/ 1ED : C2 F5 LD LISTNG(P2) ;IF LISTING, SKIP PRINTING 456/ 1EF : 9C 06 JNZ QPRNT2 ; LEADING SPACE 457/ 1F1 : C1 04 LD 4(P1) ;PRINT EITHER 458/ 1F3 : 3F XPPC P3 ; OR LEADING SPACE 459/ 1F4 : C2 E7 LD CHRNUM(P2) ;GET EX. REG. VALUE BACK 460/ 1F6 : 01 XAE 461/ 1F7 : C5 80 QPRNT2: LD @EREG(P1) ;POINT P3 AT FIRST CHAR 462/ 1F9 : C1 00 LD (P1) ; TO BE PRINTED 463/ 1FB : 3F LOOP3: XPPC P3 ;PRINT THE CHARACTER 464/ 1FC : C5 FF LD @-1(P1) ;GET NEXT CHARACTER AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 9 - 1/16/2008 0:30:10 465/ 1FE : 94 FB JP LOOP3 ;REPEAT UNTIL = -1 466/ 200 : C4 50 LDI L(AESTK) 467/ 202 : CA FD ST LSTK(P2) ; CLEAR THE A. E. STACK 468/ 204 : C2 F5 LD LISTNG(P2) ;PRINT A TRAILING SPACE 469/ 206 : 9C BA JNZ X4 ; IF NOT LISTING PROGRAM 470/ 208 : C4 20 LDI ' ' 471/ 20A : 3F XPPC P3 472/ 20B : 90 B5 JMP X4 473/ 20D : 474/ 20D : 475/ 20D : ;************************************* 476/ 20D : ;* CARRIAGE RETURN/LINE FEED * 477/ 20D : ;************************************* 478/ 20D : 479/ 20D : (MACRO) NLINE: LDPI P3,PUTC-1 ;POINT P3 AT PUTC ROUTINE 479/ 20D : C4 0F LDI H(PUTC-1) 479/ 20F : 37 XPAH P3 479/ 210 : C4 C1 LDI L(PUTC-1) 479/ 212 : 33 XPAL P3 480/ 213 : C4 0D LDI 0x0D ;CARRIAGE RETURN 481/ 215 : 3F XPPC P3 482/ 216 : C4 0A LDI 0x0A ;LINE FEED 483/ 218 : 3F XPPC P3 484/ 219 : 90 A7 X5: JMP X4 485/ 21B : 486/ 21B : 487/ 21B : ;************************************* 488/ 21B : ;* ERROR ROUTINE * 489/ 21B : ;************************************* 490/ 21B : 491/ 21B : C4 05 ERR: LDI 5 ;SYNTAX ERROR 492/ 21D : CA EB ERR1: ST NUM(P2) ;SAVE ERROR # 493/ 21F : C2 EB ERR2: LD NUM(P2) 494/ 221 : CA EA ST TEMP(P2) 495/ 223 : (MACRO) LDPI P3,PUTC-1 ;POINT P3 AT PUTC 495/ 223 : C4 0F LDI H(PUTC-1) 495/ 225 : 37 XPAH P3 495/ 226 : C4 C1 LDI L(PUTC-1) 495/ 228 : 33 XPAL P3 496/ 229 : C4 0D LDI 0x0D ; PRINT CR/LF 497/ 22B : 3F XPPC P3 498/ 22C : C4 0A LDI 0x0A 499/ 22E : 3F XPPC P3 500/ 22F : (MACRO) LDPI P1,MESGS ;P1 -> ERROR MESSAGES 500/ 22F : C4 0F LDI H(MESGS) 500/ 231 : 35 XPAH P1 500/ 232 : C4 3B LDI L(MESGS) 500/ 234 : 31 XPAL P1 501/ 235 : BA EB QQ1: DLD NUM(P2) ;IS THIS THE RIGHT MESSAGE? 502/ 237 : 98 06 JZ QQMSG ;YES - GO PRINT IT 503/ 239 : C5 01 LOOP4: LD @1(P1) ;N0 - SCAN THROUGH TO 504/ 23B : 94 FC JP LOOP4 ; NEXT MESSAGE 505/ 23D : 90 F6 JMP QQ1 506/ 23F : C5 01 QQMSG: LD @1(P1) ;GET MESSAGE CHAR 507/ 241 : 3F XPPC P3 ;PRINT IT 508/ 242 : C1 FF LD -1(P1) ; IS MESSAGE DONE? 509/ 244 : 94 F9 JP QQMSG ;N0 - GET NEXT CHAR 510/ 246 : C2 EA LD TEMP(P2) ;WAS THIS A BREAK MESSAGE? 511/ 248 : E4 0E XRI 14 512/ 24A : 98 0D JZ QQ3 ;YES - SKIP PRINTING 'ERROR' AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 10 - 1/16/2008 0:30:10 513/ 24C : (MACRO) LDPI P1,MESGS ;NO - PRINT ERROR 513/ 24C : C4 0F LDI H(MESGS) 513/ 24E : 35 XPAH P1 513/ 24F : C4 3B LDI L(MESGS) 513/ 251 : 31 XPAL P1 514/ 252 : C5 01 QQ2: LD @1(P1) ;GET CHARACTER 515/ 254 : 3F XPPC P3 ;PRINT IT 516/ 255 : C1 FF LD -1(P1) ;DONE? 517/ 257 : 94 F9 JP QQ2 ;NO- REPEAT LOOP 518/ 259 : C2 F4 QQ3: LD RUNMOD(P2) ;DON'T PRINT LINE # 519/ 25B : 98 4D JZ FIN ; IF IMMEDIATE MODE 520/ 25D : C4 20 LDI ' ' 521/ 25F : 3F XPPC P3 ;SPACE 522/ 260 : C4 41 LDI 'A' ;AT 523/ 262 : 3F XPPC P3 524/ 263 : C4 54 LDI 'T' 525/ 265 : 3F XPPC P3 526/ 266 : C4 10 LDI H(AESTK) ; POINT P3 AT A. E. STACK 527/ 268 : 37 XPAH P3 528/ 269 : AA FD ILD LSTK(P2) 529/ 26B : AA FD ILD LSTK(P2) 530/ 26D : 33 XPAL P3 531/ 26E : C2 F7 LD HILINE(P2) ;GET HIGH BYTE OF LINE # 532/ 270 : CB FF ST -1(P3) ;PUT ON STACK 533/ 272 : C2 F8 LD LOLINE(P2) ; GET LOW BYTE OF LINE # 534/ 274 : CB FE ST -2(P3) ;PUT ON STACK 535/ 276 : C4 31 LDI L(ERRNUM) ; GO TO PRN 536/ 278 : CA FB ST PCLOW(P2) 537/ 27A : C4 0E LDI H(ERRNUM) 538/ 27C : CA FA ST PCHIGH(P2) 539/ 27E : 90 99 X5A: JMP X5 540/ 280 : 541/ 280 : 542/ 280 : ;************************************* 543/ 280 : ;* BREAK, NXT, FIN, & STRT * 544/ 280 : ;************************************* 545/ 280 : 546/ 280 : C4 0E BREAK: LDI 14 ;*** CAUSE A BREAK *** 547/ 282 : 90 99 E3A: JMP ERR1 548/ 284 : ;*** NEXT STATEMENT *** 549/ 284 : C2 F4 NXT: LD RUNMOD(P2) ; IF IN EDIT MODE, 550/ 286 : 98 22 JZ FIN ; STOP EXECUTION 551/ 288 : C1 00 LD (P1) ;IF WE HIT END OF FILE, 552/ 28A : D4 80 ANI 0x80 ; FINISH UP THINGS 553/ 28C : 9C 1C JNZ FIN 554/ 28E : 06 CSA ; BREAK IF SOMEONE IS 555/ 28F : D4 20 ANI 0x20 ; TYPING ON THE CONSOLE 556/ 291 : 98 ED JZ BREAK 557/ 293 : C1 FF LD -1(P1) ;GET LAST CHARACTER SCANNED 558/ 295 : E4 0D XRI 0x0D ;WAS IT CARRIAGE RETURN? 559/ 297 : 9C 08 JNZ NXT1 ;YES - SKIP FOLLOWING UPDATES 560/ 299 : C5 01 LD @1(P1) ;GET HIGH BYTE OF NEXT LINE # 561/ 29B : CA F7 ST HILINE(P2) ;SAVE IT 562/ 29D : C5 02 LD @2(P1) ;GET LOW BYTE OF LINE #, SKIP 563/ 29F : CA F8 ST LOLINE(P2) ; LINE LENGTH BYTE 564/ 2A1 : C4 0C NXT1: LDI H(STMT) ; GO TO STMT IN IL TABLE 565/ 2A3 : CA FA ST PCHIGH(P2) 566/ 2A5 : C4 86 LDI L(STMT) 567/ 2A7 : CA FB ST PCLOW(P2) 568/ 2A9 : 3F XPPC P3 AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 11 - 1/16/2008 0:30:10 569/ 2AA : 570/ 2AA : C4 00 FIN: LDI 0 ;*** FINISH EXECUTION *** 571/ 2AC : CA F4 ST RUNMOD(P2) ; CLEAR RUN MODE 572/ 2AE : C4 50 LDI L(AESTK) ; CLEAR ARITHMETIC STACK 573/ 2B0 : CA FD ST LSTK(P2) 574/ 2B2 : C4 1C LDI L(START) ; MODIFY I.L. PC TO RETURN 575/ 2B4 : CA FB ST PCLOW(P2) ; TO PROMPT FOR COMMAND 576/ 2B6 : C4 0C LDI H(START) 577/ 2B8 : CA FA ST PCHIGH(P2) 578/ 2BA : C4 A6 LDI L(PCSTAK) 579/ 2BC : CA F9 ST PCSTK(P2) 580/ 2BE : 90 BE JMP X5A 581/ 2C0 : ;*** START EXECUTION *** 582/ 2C0 : AA F4 STRT: ILD RUNMOD(P2) ;RUN MODE = 1 583/ 2C2 : C2 E9 LD TEMP2(P2) ;POINT CURSOR TO 584/ 2C4 : 35 XPAH P1 ; START OF NIBL PROGRAM 585/ 2C5 : C2 E8 LD TEMP3(P2) 586/ 2C7 : 31 XPAL P1 587/ 2C8 : C4 6A LDI L(SBRSTK) ;EMPTY SOME STACKS: 588/ 2CA : CA FC ST SBRPTR(P2) ; GOSUB STACK, 589/ 2CC : C4 8A LDI L(FORSTK) 590/ 2CE : CA FE ST FORPTR(P2) ; FOR STACK 591/ 2D0 : C4 7A LDI L(DOSTAK) 592/ 2D2 : CA FF ST DOPTR(P2) ; & DO/UNTIL STACK 593/ 2D4 : 3F XPPC P3 ;RETURN 594/ 2D5 : 90 A7 X6: JMP X5A 595/ 2D7 : 90 A9 E4: JMP E3A 596/ 2D9 : 597/ 2D9 : 598/ 2D9 : ;************************************* 599/ 2D9 : ;* LIST NIBL PROGRAM * 600/ 2D9 : ;************************************* 601/ 2D9 : 602/ 2D9 : C1 00 LST: LD (P1) ;CHECK FOR END OF FILE 603/ 2DB : E4 80 XRI 0x80 604/ 2DD : 94 18 JP LST2 605/ 2DF : C4 10 LDI H(AESTK) ;GET LINE NUMBER ONTO STACK 606/ 2E1 : 37 XPAH P3 607/ 2E2 : AA FD ILD LSTK(P2) 608/ 2E4 : AA FD ILD LSTK(P2) 609/ 2E6 : 33 XPAL P3 610/ 2E7 : C5 01 LD @1(P1) 611/ 2E9 : CB FF ST -1(P3) 612/ 2EB : C5 01 LD @1(P1) 613/ 2ED : CB FE ST -2(P3) 614/ 2EF : C5 01 LD @1(P1) ;SKIP OVER LINE LENGTH 615/ 2F1 : C4 01 LDI 1 616/ 2F3 : CA F5 ST LISTNG(P2) ;SET LISTING FLAG 617/ 2F5 : 90 DE JMP X6 ; GO PRINT LINE NUMBER 618/ 2F7 : C4 00 LST2: LDI 0 619/ 2F9 : CA F5 ST LISTNG(P2) ;CLEAR LISTING FLAG 620/ 2FB : (MACRO) JS P3,NXT ; GO TO NXT 620/ 2FB : C4 02 LDI H(NXT-1) 620/ 2FD : 37 XPAH P3 620/ 2FE : C4 83 LDI L(NXT-1) 620/ 300 : 33 XPAL P3 620/ 301 : 3F XPPC P3 621/ 302 : 90 D1 X6A: JMP X6 622/ 304 : 90 D1 E5: JMP E4 623/ 306 : (MACRO) LST3: LDPI P3,PUTC-1 ;POINT P3 AT PUTC AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 12 - 1/16/2008 0:30:10 623/ 306 : C4 0F LDI H(PUTC-1) 623/ 308 : 37 XPAH P3 623/ 309 : C4 C1 LDI L(PUTC-1) 623/ 30B : 33 XPAL P3 624/ 30C : 06 LST4: CSA 625/ 30D : D4 20 ANI 0x20 626/ 30F : 98 E6 JZ LST2 ;IF TYPING, STOP 627/ 311 : C5 01 LD @1(P1) ;GET NEXT CHAR 628/ 313 : E4 0D XRI 0x0D ;TEST FOR CR 629/ 315 : 98 05 JZ LST5 630/ 317 : E4 0D XRI 0x0D ;GET CHARACTER 631/ 319 : 3F XPPC P3 ;PRINT CHARACTER 632/ 31A : 90 F0 JMP LST4 633/ 31C : C4 0D LST5: LDI 0x0D ; CARRIAGE RETURN 634/ 31E : 3F XPPC P3 635/ 31F : C4 0A LDI 0x0A ;LINE FEED 636/ 321 : 3F XPPC P3 637/ 322 : 02 CCL 638/ 323 : C4 4B LDI L(LIST3) 639/ 325 : CA FB ST PCLOW(P2) 640/ 327 : C4 0C LDI H(LIST3) 641/ 329 : CA FA ST PCHIGH(P2) 642/ 32B : 90 AC JMP LST ;GET NEXT LINE 643/ 32D : 644/ 32D : 645/ 32D : ;************************************* 646/ 32D : ;* ADD AND SUBTRACT * 647/ 32D : ;************************************* 648/ 32D : 649/ 32D : C4 10 ADD: LDI H(AESTK) ;SET P3 TO CURRENT 650/ 32F : 37 XPAH P3 ; STACK LOCATION 651/ 330 : BA FD DLD LSTK(P2) 652/ 332 : BA FD DLD LSTK(P2) 653/ 334 : 33 XPAL P3 654/ 335 : 02 CCL 655/ 336 : C3 FE LD -2(P3) ; REPLACE TWO TOP ITEMS 656/ 338 : F3 00 ADD 0(P3) ; ON STACK BY THEIR SUM 657/ 33A : CB FE ST -2(P3) 658/ 33C : C3 FF LD -1(P3) 659/ 33E : F3 01 ADD 1(P3) 660/ 340 : CB FF ST -1(P3) 661/ 342 : 90 BE X7: JMP X6A 662/ 344 : 663/ 344 : C4 10 SUB: LDI H(AESTK) ;SET P3 TO CURRENT 664/ 346 : 37 XPAH P3 ; STACK LOCATION 665/ 347 : BA FD DLD LSTK(P2) 666/ 349 : BA FD DLD LSTK(P2) 667/ 34B : 33 XPAL P3 668/ 34C : 03 SCL 669/ 34D : C3 FE LD -2(P3) ;REPLACE TWO TOP ITEMS 670/ 34F : FB 00 CAD 0(P3) ; ON STACK BY THEIR 671/ 351 : CB FE ST -2(P3) ; DIFFERENCE 672/ 353 : C3 FF LD -1(P3) 673/ 355 : FB 01 CAD 1(P3) 674/ 357 : CB FF ST -1(P3) 675/ 359 : 90 A7 JMP X6A 676/ 35B : 677/ 35B : 678/ 35B : ;************************************* 679/ 35B : ;* NEGATE * AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 13 - 1/16/2008 0:30:10 680/ 35B : ;************************************* 681/ 35B : 682/ 35B : C4 10 NEG: LDI H(AESTK) ;SET P3 TO CURRENT 683/ 35D : 37 XPAH P3 ; STACK LOCATION 684/ 35E : C2 FD LD LSTK(P2) 685/ 360 : 33 XPAL P3 686/ 361 : 03 SCL 687/ 362 : C4 00 LDI 0 688/ 364 : FB FE CAD -2(P3) ; NEGATE TOP ITEM ON STACK 689/ 366 : CB FE ST -2(P3) 690/ 368 : C4 00 LDI 0 691/ 36A : FB FF CAD -1(P3) 692/ 36C : CB FF ST -1(P3) 693/ 36E : 90 D2 X8: JMP X7 694/ 370 : 90 92 E6: JMP E5 695/ 372 : 696/ 372 : 697/ 372 : ;************************************* 698/ 372 : ;* MULTIPLY * 699/ 372 : ;************************************* 700/ 372 : 701/ 372 : C4 10 MUL: LDI H(AESTK) ;SET P3 TO CURRENT 702/ 374 : 37 XPAH P3 ; STACK LOCATION 703/ 375 : C2 FD LD LSTK(P2) 704/ 377 : 33 XPAL P3 ; DETERMINE SIGN OF PRODUCT, 705/ 378 : C3 FF LD -1(P3) ; SAVE IN TEMP(P2) 706/ 37A : E3 FD XOR -3(P3) 707/ 37C : CA EA ST TEMP(P2) 708/ 37E : C3 FF LD -1(P3) ; CHECK FOR NEGATIVE 709/ 380 : 94 0D JP MM1 ; MULTIPLIER 710/ 382 : 03 SCL 711/ 383 : C4 00 LDI 0 ;IF NEGATIVE, 712/ 385 : FB FE CAD -2(P3) ; NEGATE 713/ 387 : CB FE ST -2(P3) 714/ 389 : C4 00 LDI 0 715/ 38B : FB FF CAD -1(P3) 716/ 38D : CB FF ST -1(P3) 717/ 38F : C3 FD MM1: LD -3(P3) ; CHECK FOR NEGATIVE 718/ 391 : 94 0D JP MM2 ; MULTIPLICAND 719/ 393 : 03 SCL 720/ 394 : C4 00 LDI 0 ; IF NEGATIVE, 721/ 396 : FB FC CAD -4(P3) ; NEGATE 722/ 398 : CB FC ST -4(P3) 723/ 39A : C4 00 LDI 0 724/ 39C : FB FD CAD -3(P3) 725/ 39E : CB FD ST -3(P3) 726/ 3A0 : C4 00 MM2: LDI 0 ; CLEAR WORKSPACE 727/ 3A2 : CB 00 ST 0(P3) 728/ 3A4 : CB 01 ST 1(P3) 729/ 3A6 : CB 02 ST 2(P3) 730/ 3A8 : CB 03 ST 3(P3) 731/ 3AA : C4 10 LDI 16 ;SET COUNTER TO 16 732/ 3AC : CA EB ST NUM(P2) 733/ 3AE : C3 FF LOOP5: LD -1(P3) ; ROTATE MULTIPLIER 734/ 3B0 : 1F RRL ; RIGHT ONE BIT 735/ 3B1 : CB FF ST -1(P3) 736/ 3B3 : C3 FE LD -2(P3) 737/ 3B5 : 1F RRL 738/ 3B6 : CB FE ST -2(P3) 739/ 3B8 : 06 CSA ;CHECK FOR CARRY BIT AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 14 - 1/16/2008 0:30:10 740/ 3B9 : 94 11 JP MM3 ;IF NOT SET, DON'T DO ADD 741/ 3BB : 02 CCL 742/ 3BC : C3 02 LD 2(P3) ;ADD MULTIPLICAND 743/ 3BE : F3 FC ADD -4(P3) ; INTO WORKSPACE 744/ 3C0 : CB 02 ST 2(P3) 745/ 3C2 : C3 03 LD 3(P3) 746/ 3C4 : F3 FD ADD -3(P3) 747/ 3C6 : CB 03 ST 3(P3) 748/ 3C8 : 90 02 JMP MM3 749/ 3CA : 90 A4 E6A: JMP E6 750/ 3CC : 02 MM3: CCL 751/ 3CD : C3 03 LD 3(P3) ;SHIFT WORKSPACE RIGHT BY 1 752/ 3CF : 1F RRL 753/ 3D0 : CB 03 ST 3(P3) 754/ 3D2 : C3 02 LD 2(P3) 755/ 3D4 : 1F RRL 756/ 3D5 : CB 02 ST 2(P3) 757/ 3D7 : C3 01 LD 1(P3) 758/ 3D9 : 1F RRL 759/ 3DA : CB 01 ST 1(P3) 760/ 3DC : C3 00 LD 0(P3) 761/ 3DE : 1F RRL 762/ 3DF : CB 00 ST 0(P3) 763/ 3E1 : BA EB DLD NUM(P2) ;DECREMENT COUNTER 764/ 3E3 : 9C C9 JNZ LOOP5 ;LOOP IF NOT ZERO 765/ 3E5 : 90 02 JMP MM4 766/ 3E7 : 90 85 X9: JMP X8 767/ 3E9 : C2 EA MM4: LD TEMP(P2) ; CHECK SIGN WORD 768/ 3EB : 94 0D JP MMEXIT ;IF BIT7 = 1, NEGATE PRODUCT 769/ 3ED : 03 SCL 770/ 3EE : C4 00 LDI 0 771/ 3F0 : FB 00 CAD 0(P3) 772/ 3F2 : CB 00 ST 0(P3) 773/ 3F4 : C4 00 LDI 0 774/ 3F6 : FB 01 CAD 1(P3) 775/ 3F8 : CB 01 ST 1(P3) 776/ 3FA : C3 00 MMEXIT: LD 0(P3) ;PUT PRODUCT ON TOP 777/ 3FC : CB FC ST -4(P3) ; OF STACK 778/ 3FE : C3 01 LD 1(P3) 779/ 400 : CB FD ST -3(P3) 780/ 402 : BA FD DLD LSTK(P2) ;SUBTRACT 2 FROM 781/ 404 : BA FD DLD LSTK(P2) ; LSTK 782/ 406 : 90 DF JMP X9 783/ 408 : 784/ 408 : 785/ 408 : ;************************************* 786/ 408 : ;* DIVIDE * 787/ 408 : ;************************************* 788/ 408 : 789/ 408 : C4 10 DIV: LDI H(AESTK) 790/ 40A : 37 XPAH P3 791/ 40B : C2 FD LD LSTK(P2) 792/ 40D : 33 XPAL P3 793/ 40E : C3 FF LD -1(P3) ; CHECK FOR DIVISION BY 0 794/ 410 : DB FE OR -2(P3) 795/ 412 : 9C 04 JNZ QD0 796/ 414 : C4 0D LDI 13 797/ 416 : 90 B2 JMP E6A 798/ 418 : C3 FD QD0: LD -3(P3) 799/ 41A : E3 FF XOR -1(P3) AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 15 - 1/16/2008 0:30:10 800/ 41C : CA EA ST TEMP(P2) ;SAVE SIGN OF QUOTIENT 801/ 41E : C3 FD LD -3(P3) ; IS DIVIDEND POSITIVE? 802/ 420 : 94 11 JP QDPOS ;YES - JUMP 803/ 422 : C4 00 LDI 0 804/ 424 : 03 SCL 805/ 425 : FB FC CAD -4(P3) ;N0 - NEGATE DIVIDEND, 806/ 427 : CB 03 ST 3(P3) ; STORE IN RIGHT HALF 807/ 429 : C4 00 LDI 0 ; OF 32-BIT ACCUMULATOR 808/ 42B : FB FD CAD -3(P3) 809/ 42D : CB 02 ST 2(P3) 810/ 42F : 90 0A JMP QD1 811/ 431 : 90 B4 X9A: JMP X9 812/ 433 : C3 FD QDPOS: LD -3(P3) ; STORE NON-NEGATED DIVIDEND 813/ 435 : CB 02 ST 2(P3) ; IN 32-BIT ACCUMULATOR 814/ 437 : C3 FC LD -4(P3) 815/ 439 : CB 03 ST 3(P3) 816/ 43B : C3 FF QD1: LD -1(P3) ; CHECK FOR NEGATIVE DIVISOR 817/ 43D : 94 0D JP QD2 818/ 43F : C4 00 LDI 0 ; NEGATE DIVISOR 819/ 441 : 03 SCL 820/ 442 : FB FE CAD -2(P3) 821/ 444 : CB FE ST -2(P3) 822/ 446 : C4 00 LDI 0 823/ 448 : FB FF CAD -1(P3) 824/ 44A : CB FF ST -1(P3) 825/ 44C : C4 00 QD2: LDI 0 ;PUT ZERO IN 826/ 44E : CB 01 ST 1(P3) ; LEFT HALF OF 32-BIT ACC, 827/ 450 : CB 00 ST 0(P3) 828/ 452 : CA EB ST NUM(P2) ; THE COUNTER, AND 829/ 454 : CB FD ST -3(P3) ; IN THE DIVIDEND, NOW USED 830/ 456 : CB FC ST -4(P3) ; STORE THE QUOTIENT 831/ 458 : 02 LOOP6: CCL ; BEGIN MAIN DIVIDE LOOP - 832/ 459 : C3 FC LD -4(P3) ; SHIFT QUOTIENT LEFT, 833/ 45B : F3 FC ADD -4(P3) 834/ 45D : CB FC ST -4(P3) 835/ 45F : C3 FD LD -3(P3) 836/ 461 : F3 FD ADD -3(P3) 837/ 463 : CB FD ST -3(P3) 838/ 465 : 02 CCL ; SHIFT 32-BIT ACC LEFT, 839/ 466 : C3 03 LD 3(P3) 840/ 468 : F3 03 ADD 3(P3) 841/ 46A : CB 03 ST 3(P3) 842/ 46C : C3 02 LD 2(P3) 843/ 46E : F3 02 ADD 2(P3) 844/ 470 : CB 02 ST 2(P3) 845/ 472 : C3 01 LD 1(P3) 846/ 474 : F3 01 ADD 1(P3) 847/ 476 : CB 01 ST 1(P3) 848/ 478 : C3 00 LD (P3) 849/ 47A : F3 00 ADD (P3) 850/ 47C : CB 00 ST (P3) 851/ 47E : 03 SCL 852/ 47F : C3 01 LD 1(P3) ; SUBTRACT DIVISOR INTO 853/ 481 : FB FE CAD -2(P3) ; LEFT HALF OF ACC, 854/ 483 : CB 01 ST 1(P3) 855/ 485 : C3 00 LD (P3) 856/ 487 : FB FF CAD -1(P3) 857/ 489 : CB 00 ST (P3) 858/ 48B : 94 11 JP QDENT1 ; IF RESULT IS NEGATIVE, 859/ 48D : 02 CCL ; RESTORE ORIGINAL CONTENTS AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 16 - 1/16/2008 0:30:10 860/ 48E : C3 01 LD 1(P3) ; OF ACC BY ADDING DIVISOR 861/ 490 : F3 FE ADD -2(P3) 862/ 492 : CB 01 ST 1(P3) 863/ 494 : C3 00 LD (P3) 864/ 496 : F3 FF ADD -1(P3) 865/ 498 : CB 00 ST (P3) 866/ 49A : 90 08 JMP QD3 867/ 49C : 90 93 X9B: JMP X9A 868/ 49E : C3 FC QDENT1: LD -4(P3) ;ELSE IF RESULT POSITIVE, 869/ 4A0 : DC 01 ORI 1 ;RECORD A 1 IN QUOTIENT 870/ 4A2 : CB FC ST -4(P3) ;W/0 RESTORING THE ACC 871/ 4A4 : AA EB QD3: ILD NUM(P2) ;INCREMENT THE COUNTER 872/ 4A6 : E4 10 XRI 16 ;ARE WE DONE? 873/ 4A8 : 9C AE JNZ LOOP6 ;LOOP IF NOT DONE 874/ 4AA : C2 EA LD TEMP(P2) ;CHECK THE QUOTIENT'S SIGN, 875/ 4AC : 94 0D JP QDEND ; NEGATING IF NECESSARY 876/ 4AE : C4 00 LDI 0 877/ 4B0 : 03 SCL 878/ 4B1 : FB FC CAD -4(P3) 879/ 4B3 : CB FC ST -4(P3) 880/ 4B5 : C4 00 LDI 0 881/ 4B7 : FB FD CAD -3(P3) 882/ 4B9 : CB FD ST -3(P3) 883/ 4BB : BA FD QDEND: DLD LSTK(P2) ;DECREMENT THE STACK POINTER, 884/ 4BD : BA FD DLD LSTK(P2) 885/ 4BF : 90 DB JMP X9B ; AND EXIT 886/ 4C1 : 887/ 4C1 : 888/ 4C1 : ;************************************* 889/ 4C1 : ;* STORE VARIABLE * 890/ 4C1 : ;************************************* 891/ 4C1 : 892/ 4C1 : C4 10 STORE: LDI H(AESTK) ;SET P3 TO STACK 893/ 4C3 : 37 XPAH P3 894/ 4C4 : C2 FD LD LSTK(P2) 895/ 4C6 : 33 XPAL P3 896/ 4C7 : C7 FD LD @-3(P3) ;GET VARIABLE INDEX 897/ 4C9 : 01 XAE ;PUT IN E REG 898/ 4CA : C3 01 LD 1(P3) 899/ 4CC : CA 80 ST EREG(P2) ;STORE LOWER 3 BITS 900/ 4CE : 02 CCL ; INTO VARIABLE 901/ 4CF : 40 LDE ;INCREMENT INDEX 902/ 4D0 : F4 01 ADI 1 903/ 4D2 : 01 XAE 904/ 4D3 : C3 02 LD 2(P3) 905/ 4D5 : CA 80 ST EREG(P2) ;STORE UPPER 8 BITS 906/ 4D7 : 33 XPAL P3 ;INTO VARIABLE 907/ 4D8 : CA FD ST LSTK(P2) ;UPDATE STACK POINTER 908/ 4DA : (MACRO) X10: JS P3,EXECIL 908/ 4DA : C4 00 LDI H(EXECIL-1) 908/ 4DC : 37 XPAH P3 908/ 4DD : C4 75 LDI L(EXECIL-1) 908/ 4DF : 33 XPAL P3 908/ 4E0 : 3F XPPC P3 909/ 4E1 : 910/ 4E1 : 911/ 4E1 : ;************************************* 912/ 4E1 : ;* TEST FOR VARIABLE IN TEXT * 913/ 4E1 : ;************************************* 914/ 4E1 : AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 17 - 1/16/2008 0:30:10 915/ 4E1 : C5 01 TSTVAR: LD @1(P1) 916/ 4E3 : E4 20 XRI ' ' ;SLEW OFF SPACES 917/ 4E5 : 98 FA JZ TSTVAR 918/ 4E7 : C1 FF LD -1(P1) ;CHARACTER IN QUESTION 919/ 4E9 : 03 SCL 920/ 4EA : FC 5B CAI 'Z'+1 ;SUBTRACT 'Z'+l 921/ 4EC : 94 05 JP TV_FAIL ;N0T VARIABLE IF POSITIVE 922/ 4EE : 03 SCL 923/ 4EF : FC E6 CAI 'A'-'Z'-1 ;SUBTRACT 'A' 924/ 4F1 : 94 12 JP TVMAYBE ;IF POS, MAY BE VARIABLE 925/ 4F3 : C5 FF TV_FAIL: LD @-1(P1) ;BACKSPACE CURSOR 926/ 4F5 : C2 FB LD PCLOW(P2) ;GET TEST-FAIL ADDRESS 927/ 4F7 : 33 XPAL P3 ; FROM I. L. TABLE, PUT IT 928/ 4F8 : C2 FA LD PCHIGH(P2) ; INTO I.L. PROGRAM COUNTER 929/ 4FA : 37 XPAH P3 930/ 4FB : C3 00 LD (P3) 931/ 4FD : CA FA ST PCHIGH(P2) 932/ 4FF : C3 01 LD 1(P3) 933/ 501 : CA FB ST PCLOW(P2) 934/ 503 : 90 D5 JMP X10 935/ 505 : 01 TVMAYBE: XAE ;SAVE VALUE (0-25) 936/ 506 : C1 00 LD (P1) ;CHECK FOLLOWING CHAR 937/ 508 : 03 SCL ;MUST NOT BE A LETTER 938/ 509 : FC 5B CAI 'Z'+1 ;OTHERWISE WE'D BE LOOKING 939/ 50B : 94 05 JP TV_OK ;AT A KEYWORD, NOT A VARIABLE 940/ 50D : 03 SCL 941/ 50E : FC E6 CAI 'A'-'Z'-1 942/ 510 : 94 E1 JP TV_FAIL 943/ 512 : C4 10 TV_OK: LDI H(AESTK) ;SET PS TO CURRENT 944/ 514 : 37 XPAH P3 ; STACK LOCATION 945/ 515 : AA FD ILD LSTK(P2) ;INCR STACK POINTER 946/ 517 : 33 XPAL P3 947/ 518 : 02 CCL ;DOUBLE VARIABLE INDEX 948/ 519 : 40 LDE 949/ 51A : 70 ADE 950/ 51B : CB FF ST -1(P3) ;PUT INDEX ON STACK 951/ 51D : C4 02 LDI 2 ; INCREMENT I.L. PC, SKIPPING 952/ 51F : 02 CCL ; OVER TEST-FAIL ADDRESS 953/ 520 : F2 FB ADD PCLOW(P2) 954/ 522 : CA FB ST PCLOW(P2) 955/ 524 : C4 00 LDI 0 956/ 526 : F2 FA ADD PCHIGH(P2) 957/ 528 : CA FA ST PCHIGH(P2) 958/ 52A : 90 AE JMP X10 959/ 52C : 960/ 52C : 961/ 52C : ;************************************* 962/ 52C : ;* IND - EVALUATE A VARIABLE * 963/ 52C : ;************************************* 964/ 52C : 965/ 52C : C4 10 IND: LDI H(AESTK) ;SET P3 TO STACK 966/ 52E : 37 XPAH P3 967/ 52F : AA FD ILD LSTK(P2) 968/ 531 : 33 XPAL P3 969/ 532 : C3 FE LD -2(P3) ;GET INDEX OFF TOP 970/ 534 : 01 XAE ;PUT INDEX IN E REG 971/ 535 : C2 80 LD EREG(P2) ;GET LOWER 8 BITS 972/ 537 : CB FE ST -2(P3) ;SAVE ON STACK 973/ 539 : 02 CCL 974/ 53A : 40 LDE ; INCREMENT E REG AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 18 - 1/16/2008 0:30:10 975/ 53B : F4 01 ADI 1 976/ 53D : 01 XAE 977/ 53E : C2 80 LD EREG(P2) ;GET UPPER 8 BITS 978/ 540 : CB FF ST -1(P3) ;SAVE ON STACK 979/ 542 : 90 96 XI1: JMP X10 980/ 544 : 981/ 544 : 982/ 544 : ;************************************* 983/ 544 : ;* RELATIONAL OPERATORS * 984/ 544 : ;************************************* 985/ 544 : 986/ 544 : C4 01 EQ: LDI 1 ;EACH RELATIONAL OPERATOR 987/ 546 : 90 12 JMP CMP ; LOADS A NUMBER USED LATER 988/ 548 : C4 02 NEQ: LDI 2 ; AS A CASE SELECTOR, AFTER 989/ 54A : 90 0E JMP CMP ; THE TWO OPERANDS ARE COM- 990/ 54C : C4 03 LSS: LDI 3 ; PARED. BASED ON THE COM- 991/ 54E : 90 0A JMP CMP ; PARISON, FLAGS ARE SET THAT 992/ 550 : C4 04 LEQ: LDI 4 ; ARE EQUIVALENT TO THOSE SET 993/ 552 : 90 06 JMP CMP ; BY THE "CMP" INSTRUCTION IN 994/ 554 : C4 05 GTR: LDI 5 ; THE PDP-11. THESE PSEUDO- 995/ 556 : 90 02 JMP CMP ; FLAGS ARE USED TO DETERMINE 996/ 558 : C4 06 GEQ: LDI 6 ; WHETHER THE PARTICULAR 997/ 55A : ; RELATION IS SATISFIED OR NO 998/ 55A : CA EB CMP: ST NUM(P2) 999/ 55C : C4 10 LDI H(AESTK) ;SET P3 -> ARITH STACK 1000/ 55E : 37 XPAH P3 1001/ 55F : BA FD DLD LSTK(P2) 1002/ 561 : BA FD DLD LSTK(P2) 1003/ 563 : 33 XPAL P3 1004/ 564 : 03 SCL 1005/ 565 : C3 FE LD -2(P3) ; SUBTRACT THE TWO OPERANDS, 1006/ 567 : FB 00 CAD (P3) ; STORING RESULT IN LO & HI 1007/ 569 : CA EF ST LO(P2) 1008/ 56B : C3 FF LD -1(P3) 1009/ 56D : FB 01 CAD 1(P3) 1010/ 56F : CA EE ST HI(P2) 1011/ 571 : E3 FF XOR -1(P3) ;OVERFLOW OCCURS IF SIGNS OF 1012/ 573 : 01 XAE ; RESULT AND 1ST OPERAND 1013/ 574 : C3 FF LD -1(P3) ; DIFFER, AND SIGNS OF THE 1014/ 576 : E3 01 XOR 1(P3) ; TWO OPERANDS DIFFER 1015/ 578 : 50 ANE ;BIT 7 EQUIVALENT TO V FLAG 1016/ 579 : E2 EE XOR HI(P2) ;BIT 7 EQUIVALENT TO N XOR V 1017/ 57B : CA EA ST TEMP(P2) ;STORE IN TEMP 1018/ 57D : C2 EE LD HI(P2) ;DETERMINE IF RESULT WAS ZERO 1019/ 57F : DA EF OR LO(P2) 1020/ 581 : 98 02 JZ SETZ ;IF RESULT=0, SET Z FLAG 1021/ 583 : C4 80 LDI 0x80 ; ELSE CLEAR Z FLAG 1022/ 585 : E4 80 SETZ: XRI 0x80 1023/ 587 : 01 XAE ;BIT 7 OF EX = Z FLAG 1024/ 588 : BA EB DLD NUM(P2) ;TEST FOR = 1025/ 58A : 9C 05 JNZ NEQ1 1026/ 58C : 40 LDE ; EQUAL IF Z = 1 1027/ 58D : 90 2B JMP CMP1 1028/ 58F : 90 B1 X12: JMP XI1 1029/ 591 : BA EB NEQ1: DLD NUM(P2) ;TEST FOR <> 1030/ 593 : 9C 05 JNZ LSS1 1031/ 595 : 40 LDE ; NOT EQUAL IF Z = 0 1032/ 596 : E4 80 XRI 0x80 1033/ 598 : 90 20 JMP CMP1 1034/ 59A : BA EB LSS1: DLD NUM(P2) ;TEST FOR < AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 19 - 1/16/2008 0:30:10 1035/ 59C : 9C 04 JNZ LEQ1 1036/ 59E : C2 EA LD TEMP(P2) ; LESS THAN IF (N XOR V)=l 1037/ 5A0 : 90 18 JMP CMP1 1038/ 5A2 : BA EB LEQ1: DLD NUM(P2) ;TEST FOR <= 1039/ 5A4 : 9C 05 JNZ GTR1 1040/ 5A6 : 40 LDE ; LESS THAN OR EQUAL 1041/ 5A7 : DA EA OR TEMP(P2) ; IF (Z OR (N XOR V))=l 1042/ 5A9 : 90 0F JMP CMP1 1043/ 5AB : BA EB GTR1: DLD NUM(P2) ;TEST FOR > 1044/ 5AD : 9C 07 JNZ GEQ1 1045/ 5AF : 40 LDE ; GREATER THAN 1046/ 5B0 : DA EA OR TEMP(P2) ; IF (Z OR (N XOR V))=0 1047/ 5B2 : E4 80 XRI 0x80 1048/ 5B4 : 90 04 JMP CMP1 1049/ 5B6 : C2 EA GEQ1: LD TEMP(P2) ;GREATER THAN OR EQUAL 1050/ 5B8 : E4 80 XRI 0x80 ; IF (N XOR V)=0 1051/ 5BA : 94 04 CMP1: JP FALSE1 ;IS RELATION SATISFIED? 1052/ 5BC : C4 01 LDI 1 ;YES - PUSH 1 ON STACK 1053/ 5BE : 90 02 JMP CMP2 1054/ 5C0 : C4 00 FALSE1: LDI 0 ;N0 - PUSH 0 ON STACK 1055/ 5C2 : CB FE CMP2: ST -2(P3) 1056/ 5C4 : C4 00 LDI 0 1057/ 5C6 : CB FF ST -1(P3) 1058/ 5C8 : (MACRO) JS P3,RTN ;DO AN I. L. RETURN 1058/ 5C8 : C4 00 LDI H(RTN-1) 1058/ 5CA : 37 XPAH P3 1058/ 5CB : C4 F5 LDI L(RTN-1) 1058/ 5CD : 33 XPAL P3 1058/ 5CE : 3F XPPC P3 1059/ 5CF : 90 BE JMP X12 1060/ 5D1 : 1061/ 5D1 : 1062/ 5D1 : ;************************************* 1063/ 5D1 : ;* IF STATEMENT TEST FOR ZERO * 1064/ 5D1 : ;************************************* 1065/ 5D1 : 1066/ 5D1 : C2 EF CMPR: LD LO(P2) ;GET LOW & HI BYTES OF EXPR. 1067/ 5D3 : DA EE OR HI(P2) ;TEST IF EXPRESSION IS ZERO (LATER CHANGED TO 'ANI 01'(R.MARIN JAN 2008)) 1068/ 5D5 : 98 02 JZ FAIL ;YES - IT IS 1069/ 5D7 : 90 B6 JMP X12 ;N0 - IT ISN'T SO CONTINUE 1070/ 5D9 : C5 01 FAIL: LD @1(P1) ;SKIP TO NEXT LINE IN PROGRAM 1071/ 5DB : E4 0D XRI 0x0D ; (I.E. TIL NEXT CR) 1072/ 5DD : 9C FA JNZ FAIL 1073/ 5DF : (MACRO) JS P3,NXT ;CALL NXT AND RETURN 1073/ 5DF : C4 02 LDI H(NXT-1) 1073/ 5E1 : 37 XPAH P3 1073/ 5E2 : C4 83 LDI L(NXT-1) 1073/ 5E4 : 33 XPAL P3 1073/ 5E5 : 3F XPPC P3 1074/ 5E6 : 90 A7 X12A: JMP X12 1075/ 5E8 : 1076/ 5E8 : 1077/ 5E8 : ;************************************* 1078/ 5E8 : ;* AND, OR, & NOT * 1079/ 5E8 : ;************************************* 1080/ 5E8 : 1081/ 5E8 : C4 01 ANDOP: LDI 1 ;EACH OPERATION HAS ITS 1082/ 5EA : 90 06 JMP AON1 ; OWN CASE SELECTOR. 1083/ 5EC : C4 02 OROP: LDI 2 1084/ 5EE : 90 02 JMP AON1 AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 20 - 1/16/2008 0:30:10 1085/ 5F0 : C4 03 NOTOP: LDI 3 1086/ 5F2 : CA EB AON1: ST NUM(P2) 1087/ 5F4 : C4 10 LDI H(AESTK) ;SET P3 -> ARITH. STACK 1088/ 5F6 : 37 XPAH P3 1089/ 5F7 : BA FD DLD LSTK(P2) 1090/ 5F9 : BA FD DLD LSTK(P2) 1091/ 5FB : 33 XPAL P3 1092/ 5FC : BA EB DLD NUM(P2) ;TEST FOR AND 1093/ 5FE : 9C 0E JNZ AON_0R 1094/ 600 : C3 01 LD 1(P3) ; REPLACE TWO TOP ITEMS ON 1095/ 602 : D3 FF AND -1(P3) ; STACK BY THEIR AND 1096/ 604 : CB FF ST -1(P3) 1097/ 606 : C3 00 LD 0(P3) 1098/ 608 : D3 FE AND -2(P3) 1099/ 60A : CB FE ST -2(P3) 1100/ 60C : 90 D8 JMP X12A 1101/ 60E : BA EB AON_0R: DLD NUM(P2) ;TEST FOR OR 1102/ 610 : 9C 0E JNZ AON_NT 1103/ 612 : C3 01 LD 1(P3) ;REPLACE TWO TOP ITEMS ON 1104/ 614 : DB FF OR -1(P3) ; STACK BY THEIR 'OR' 1105/ 616 : CB FF ST -1(P3) 1106/ 618 : C3 00 LD 0(P3) 1107/ 61A : DB FE OR -2(P3) 1108/ 61C : CB FE ST -2(P3) 1109/ 61E : 90 C6 JMP X12A 1110/ 620 : C7 01 AON_NT: LD @1(P3) ; NOT OPERATION 1111/ 622 : E4 FF XRI 0xFF 1112/ 624 : CB FF ST -1(P3) ; REPLACE TOP ITEM ON STACK 1113/ 626 : C7 01 LD @1(P3) ; BY ITS ONE'S COMPLEMENT 1114/ 628 : E4 FF XRI 0xFF 1115/ 62A : CB FF ST -1(P3) 1116/ 62C : 33 XPAL P3 1117/ 62D : CA FD ST LSTK(P2) ;STACK POINTER FIXUP 1118/ 62F : 90 B5 X12B: JMP X12A 1119/ 631 : 1120/ 631 : 1121/ 631 : ;************************************* 1122/ 631 : ;* EXCHANGE CURSOR WITH RAM * 1123/ 631 : ;************************************* 1124/ 631 : 1125/ 631 : C2 F1 XCHGP1: LD P1L0W(P2) ;THIS ROUTINE IS HANDY WHEN 1126/ 633 : 31 XPAL P1 ;EXECUTING AN 'INPUT' STMT 1127/ 634 : CA F1 ST P1L0W(P2) ;IT EXCHANGES THE CURRENT 1128/ 636 : C2 F0 LD P1HIGH(P2) ;TEXT CURSOR WITH ONE SAVED 1129/ 638 : 35 XPAH P1 ;IN RAM 1130/ 639 : CA F0 ST P1HIGH(P2) 1131/ 63B : 3F XPPC P3 1132/ 63C : 1133/ 63C : 1134/ 63C : ;************************************* 1135/ 63C : ;* CHECK RUN MODE * 1136/ 63C : ;************************************* 1137/ 63C : 1138/ 63C : C2 F4 CKMODE: LD RUNMOD(P2) ;THIS ROUTINE CAUSES AN ERROR 1139/ 63E : 98 01 JZ CK1 ;IF CURRENTLY IN EDIT MODE 1140/ 640 : 3F XPPC P3 1141/ 641 : C4 03 CK1: LDI 3 1142/ 643 : CA EB E8: ST NUM(P2) ;ERROR IF RUN MODE = 0 1143/ 645 : (MACRO) JS P3,ERR2 ;MINOR KLUGE 1143/ 645 : C4 02 LDI H(ERR2-1) AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 21 - 1/16/2008 0:30:10 1143/ 647 : 37 XPAH P3 1143/ 648 : C4 1E LDI L(ERR2-1) 1143/ 64A : 33 XPAL P3 1143/ 64B : 3F XPPC P3 1144/ 64C : 1145/ 64C : 1146/ 64C : ;************************************* 1147/ 64C : ;* GET HEXADECIMAL NUMBER * 1148/ 64C : ;************************************* 1149/ 64C : 1150/ 64C : AA FD HEX: ILD LSTK(P2) ;POINT P3 AT ARITH STACK 1151/ 64E : AA FD ILD LSTK(P2) 1152/ 650 : 33 XPAL P3 1153/ 651 : C4 10 LDI H(AESTK) 1154/ 653 : 37 XPAH P3 1155/ 654 : C4 00 LDI 0 ;NUMBER INITIALLY ZERO 1156/ 656 : CB FF ST -1(P3) ;PUT IT ON STACK 1157/ 658 : CB FE ST -2(P3) 1158/ 65A : CA EB ST NUM(P2) ;ZERO NUMBER OF DIGITS 1159/ 65C : C5 01 HSKIP: LD @1(P1) ;SKIP ANY SPACES 1160/ 65E : E4 20 XRI ' ' 1161/ 660 : 98 FA JZ HSKIP 1162/ 662 : C5 FF LD @-1(P1) 1163/ 664 : C1 00 LOOP7: LD (P1) ;GET A CHARACTER 1164/ 666 : 03 SCL 1165/ 667 : FC 3A CAI '9'+1 ;CHECK FOR A NUMERIC CHAR 1166/ 669 : 94 09 JP HLETR 1167/ 66B : 03 SCL 1168/ 66C : FC F6 CAI '0'-'9'-1 ;IF NUMERIC, SHIFT NUMBER 1169/ 66E : 94 13 JP HENTER ; AND ADD NEW HEX DIGIT 1170/ 670 : 90 32 JMP HEND 1171/ 672 : 90 BB X12C: JMP X12B 1172/ 674 : 03 HLETR: SCL ;CHECK FOR HEX LETTER 1173/ 675 : FC 0D CAI 'G'-'9'-1 1174/ 677 : 94 2B JP HEND 1175/ 679 : 03 SCL 1176/ 67A : FC FA CAI 'A'-'G' 1177/ 67C : 94 02 JP HX0K 1178/ 67E : 90 24 JMP HEND 1179/ 680 : 02 HX0K: CCL ;ADD 10 TO GET TRUE VALUE 1180/ 681 : F4 0A ADI 10 ; OF LETTER 1181/ 683 : 01 HENTER: XAE ;NEW DIGIT IN EX REG 1182/ 684 : C4 04 LDI 4 ;SET SHIFT COUNTER 1183/ 686 : CA EA ST TEMP(P2) 1184/ 688 : CA EB ST NUM(P2) ;DIGIT COUNT IS NON-ZERO 1185/ 68A : C3 FE HSHIFT: LD -2(P3) ;SHIFT NUMBER LEFT BY 4 1186/ 68C : 02 CCL 1187/ 68D : F3 FE ADD -2(P3) 1188/ 68F : CB FE ST -2(P3) 1189/ 691 : C3 FF LD -1(P3) 1190/ 693 : F3 FF ADD -1(P3) 1191/ 695 : CB FF ST -1(P3) 1192/ 697 : BA EA DLD TEMP(P2) 1193/ 699 : 9C EF JNZ HSHIFT 1194/ 69B : C3 FE LD -2(P3) ;ADD NEW DIGIT 1195/ 69D : 58 ORE ; INTO NUMBER 1196/ 69E : CB FE ST -2(P3) 1197/ 6A0 : C5 01 LD @1(P1) ;ADVANCE THE CURSOR 1198/ 6A2 : 90 C0 JMP LOOP7 ;GET NEXT CHAR 1199/ 6A4 : C2 EB HEND: LD NUM(P2) ;CHECK IF THERE WERE AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 22 - 1/16/2008 0:30:10 1200/ 6A6 : 9C 87 JNZ X12B ;MORE THAN 0 CHARACTERS 1201/ 6A8 : C4 05 LDI 5 ;ERROR IF THERE WERE NONE 1202/ 6AA : 90 97 E8B: JMP E8 1203/ 6AC : 1204/ 6AC : 1205/ 6AC : ;************************************* 1206/ 6AC : ;* TEST FOR NUMBER IN TEXT * 1207/ 6AC : ;************************************* 1208/ 6AC : 1209/ 6AC : ; THIS ROUTINE TESTS FOR A NUMBER IN THE TEXT. IF NO 1210/ 6AC : ; NUMBER IS FOUND, I.L. CONTROL PASSES TO THE ADDRESS 1211/ 6AC : ; INDICATED IN THE 'TSTN' INSTRUCTION. OTHERWISE, THE 1212/ 6AC : ; NUMBER IS SCANNED AND PUT ON THE ARITHMETIC STACK, 1213/ 6AC : ; WITH I.L. CONTROL PASSING TO THE NEXT INSTRUCTION. 1214/ 6AC : 1215/ 6AC : C5 01 TSTNUM: LD @1(P1) 1216/ 6AE : E4 20 XRI ' ' ; SKIP OVER ANY SPACES 1217/ 6B0 : 98 FA JZ TSTNUM 1218/ 6B2 : C5 FF LD @-1(P1) ;GET FIRST CHAR 1219/ 6B4 : 03 SCL ;TEST FOR DIGIT 1220/ 6B5 : FC 3A CAI '9'+1 1221/ 6B7 : 94 05 JP TNABRT 1222/ 6B9 : 03 SCL 1223/ 6BA : FC F6 CAI '0'-'9'-1 1224/ 6BC : 94 21 JP TNL1 1225/ 6BE : C2 FB TNABRT: LD PCLOW(P2) ;CET TEST-FAIL ADDRESS 1226/ 6C0 : 33 XPAL P3 ;FROM I. L. TABLE 1227/ 6C1 : C2 FA LD PCHIGH(P2) 1228/ 6C3 : 37 XPAH P3 1229/ 6C4 : C3 00 LD (P3) ;PUT TEST-FAIL ADDRESS 1230/ 6C6 : CA FA ST PCHIGH(P2) ;INTO I. L. PC 1231/ 6C8 : C3 01 LD 1(P3) 1232/ 6CA : CA FB ST PCLOW(P2) 1233/ 6CC : 90 A4 JMP X12C 1234/ 6CE : C4 02 TNRET: LDI 2 ;SKIP OVER ONE IL INSTRUCTION 1235/ 6D0 : 02 CCL ;IF NUMBER IS DONE 1236/ 6D1 : F2 FB ADD PCLOW(P2) 1237/ 6D3 : CA FB ST PCLOW(P2) 1238/ 6D5 : C4 00 LDI 0 1239/ 6D7 : F2 FA ADD PCHIGH(P2) 1240/ 6D9 : CA FA ST PCHIGH(P2) 1241/ 6DB : 90 95 X13: JMP X12C 1242/ 6DD : 90 CB ESA: JMP E8B 1243/ 6DF : 01 TNL1: XAE ;SAVE DIGIT IN EX REG 1244/ 6E0 : C4 10 LDI H(AESTK) ;POINT P3 AT AE STACK 1245/ 6E2 : 37 XPAH P3 1246/ 6E3 : AA FD ILD LSTK(P2) 1247/ 6E5 : AA FD ILD LSTK(P2) 1248/ 6E7 : 33 XPAL P3 1249/ 6E8 : C4 00 LDI 0 1250/ 6EA : CB FF ST -1(P3) 1251/ 6EC : 40 LDE 1252/ 6ED : CB FE ST -2(P3) 1253/ 6EF : C5 01 LOOP8: LD @1(P1) ;GET NEXT CHAR 1254/ 6F1 : C1 00 LD (P1) 1255/ 6F3 : 03 SCL ;TEST IF IT IS DIGIT 1256/ 6F4 : FC 3A CAI '9'+1 1257/ 6F6 : 94 D6 JP TNRET ;RETURN IF IT ISN'T 1258/ 6F8 : 03 SCL 1259/ 6F9 : FC F6 CAI '0'-'9'-1 AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 23 - 1/16/2008 0:30:10 1260/ 6FB : 94 02 JP TNL2 1261/ 6FD : 90 CF JMP TNRET 1262/ 6FF : 01 TNL2: XAE ;SAVE DIGIT 1263/ 700 : C3 FF LD -1(P3) ;PUT RESULT IN SCRATCH SPACE 1264/ 702 : CB 01 ST 1(P3) 1265/ 704 : C3 FE LD -2(P3) 1266/ 706 : CB 00 ST (P3) 1267/ 708 : C4 02 LDI 2 1268/ 70A : CA EA ST TEMP(P2) ;MULTIPLY RESULT BY 10 1269/ 70C : 02 TNSHFT: CCL ;FIRST MULTIPLY BY 4 1270/ 70D : C3 FE LD -2(P3) 1271/ 70F : F3 FE ADD -2(P3) 1272/ 711 : CB FE ST -2(P3) 1273/ 713 : C3 FF LD -1(P3) 1274/ 715 : F3 FF ADD -1(P3) 1275/ 717 : CB FF ST -1(P3) 1276/ 719 : D4 80 ANI 0x80 ; MAKE SURE N0 OVERFLOW 1277/ 71B : 9C 34 JNZ TNERR ; OCCURRED 1278/ 71D : BA EA DLD TEMP(P2) 1279/ 71F : 9C EB JNZ TNSHFT 1280/ 721 : 02 CCL ;THEN ADD OLD RESULT, 1281/ 722 : C3 FE LD -2(P3) ; SO WE HAVE RESULT * 5 1282/ 724 : F3 00 ADD (P3) 1283/ 726 : CB FE ST -2(P3) 1284/ 728 : C3 FF LD -1(P3) 1285/ 72A : F3 01 ADD 1(P3) 1286/ 72C : CB FF ST -1(P3) 1287/ 72E : D4 80 ANI 0x80 ;MAKE SURE NO OVERFLOW 1288/ 730 : 9C 1F JNZ TNERR ; OCCURRED 1289/ 732 : 02 CCL ;THEN MULTIPLY, BY TWO 1290/ 733 : C3 FE LD -2(P3) 1291/ 735 : F3 FE ADD -2(P3) 1292/ 737 : CB FE ST -2(P3) 1293/ 739 : C3 FF LD -1(P3) 1294/ 73B : F3 FF ADD -1(P3) 1295/ 73D : CB FF ST -1(P3) 1296/ 73F : D4 80 ANI 0x80 ;MAKE SURE NO OVERFLOW 1297/ 741 : 9C 0E JNZ TNERR ; OCCURRED 1298/ 743 : 02 CCL ;THEN ADD IN NEW DIGIT 1299/ 744 : 40 LDE 1300/ 745 : F3 FE ADD -2(P3) 1301/ 747 : CB FE ST -2(P3) 1302/ 749 : C4 00 LDI 0 1303/ 74B : F3 FF ADD -1(P3) 1304/ 74D : CB FF ST -1(P3) 1305/ 74F : 94 9E JP LOOP8 ;REPEAT IF NO OVERFLOW 1306/ 751 : C4 06 TNERR: LDI 6 1307/ 753 : 90 88 E9: JMP ESA ;ELSE REPORT ERROR 1308/ 755 : 90 84 X14: JMP X13 1309/ 757 : 1310/ 757 : 1311/ 757 : ;************************************* 1312/ 757 : ;* GET LINE FROM TELETYPE * 1313/ 757 : ;************************************* 1314/ 757 : 1315/ 757 : (MACRO) GETL: LDPI P1,LBUF ;SET P1 TO LBUF 1315/ 757 : C4 10 LDI H(LBUF) 1315/ 759 : 35 XPAH P1 1315/ 75A : C4 D6 LDI L(LBUF) 1315/ 75C : 31 XPAL P1 AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 24 - 1/16/2008 0:30:10 1316/ 75D : C4 00 LDI 0 ;CLEAR NO. OF CHAR 1317/ 75F : CA E7 ST CHRNUM(P2) 1318/ 761 : (MACRO) LDPI P3,PUTC-1 ;POINT P3 AT PUTC ROUTINE 1318/ 761 : C4 0F LDI H(PUTC-1) 1318/ 763 : 37 XPAH P3 1318/ 764 : C4 C1 LDI L(PUTC-1) 1318/ 766 : 33 XPAL P3 1319/ 767 : C2 F4 LD RUNMOD(P2) ;PRINT '? ' IF RUNNING 1320/ 769 : 98 08 JZ GETL0 ; (I.E. DURING 'INPUT') 1321/ 76B : C4 3F LDI '?' 1322/ 76D : 3F XPPC P3 1323/ 76E : C4 20 LDI ' ' 1324/ 770 : 3F XPPC P3 1325/ 771 : 90 03 JMP GETL1 1326/ 773 : C4 3E GETL0: LDI '>' ; OTHERWISE PRINT '>' 1327/ 775 : 3F XPPC P3 1328/ 776 : (MACRO) GETL1: JS P3,GECO ;GET CHARACTER 1328/ 776 : C4 0F LDI H(GECO-1) 1328/ 778 : 37 XPAH P3 1328/ 779 : C4 76 LDI L(GECO-1) 1328/ 77B : 33 XPAL P3 1328/ 77C : 3F XPPC P3 1329/ 77D : C4 C1 LDI L(PUTC)-1 ; POINT PS AT PUTC AGAIN 1330/ 77F : 33 XPAL P3 1331/ 780 : 40 LDE ;GET TYPED CHAR 1332/ 781 : 98 F3 JZ GETL1 ; IGNORE NULLS 1333/ 783 : E4 0A XRI 0x0A ; IGNORE LINE FEED 1334/ 785 : 98 EF JZ GETL1 1335/ 787 : 40 LDE 1336/ 788 : E4 0D XRI 0x0D ; CHECK FOR CR 1337/ 78A : 98 50 JZ GETLCR 1338/ 78C : 40 LDE 1339/ 78D : E4 5F XRI 'O'+0x10 ; CHECK FOR SHIFT/0 1340/ 78F : 98 41 JZ GETRUB 1341/ 791 : 40 LDE ;CHECK FOR CTRL/H 1342/ 792 : E4 08 XRI 8 1343/ 794 : 98 36 JZ GXH 1344/ 796 : 40 LDE 1345/ 797 : E4 15 XRI 0x15 ;CHECK FOR CTRL/U 1346/ 799 : 98 0F JZ GXU 1347/ 79B : 40 LDE 1348/ 79C : E4 03 XRI 3 ;CHECK FOR CTRL/C 1349/ 79E : 9C 1A JNZ GENTR 1350/ 7A0 : C4 5E LDI '^' ;ECHO CONTROL/C AS ^C 1351/ 7A2 : 3F XPPC P3 1352/ 7A3 : C4 43 LDI 'C' 1353/ 7A5 : 3F XPPC P3 1354/ 7A6 : C4 0E LDI 14 ; CAUSE A BREAK 1355/ 7A8 : 90 A9 JMP E9 1356/ 7AA : C4 5E GXU: LDI '^' ;ECHO CONTROL/U AS ^U 1357/ 7AC : 3F XPPC P3 1358/ 7AD : C4 55 LDI 'U' 1359/ 7AF : 3F XPPC P3 1360/ 7B0 : C4 0D LDI 0x0D ; PRINT CR/LF 1361/ 7B2 : 3F XPPC P3 1362/ 7B3 : C4 0A LDI 0x0A 1363/ 7B5 : 3F XPPC P3 1364/ 7B6 : 90 9F JMP GETL ; G0 GET ANOTHER LINE 1365/ 7B8 : 90 9B X15: JMP X14 1366/ 7BA : 40 GENTR: LDE AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 25 - 1/16/2008 0:30:10 1367/ 7BB : CD 01 ST @1(P1) ;PUT CHAR IN LBUF 1368/ 7BD : AA E7 ILD CHRNUM(P2) ; INCREMENT CHRNUM 1369/ 7BF : E4 48 XRI 72 ;IF=72, LINE FULL 1370/ 7C1 : 9C B3 JNZ GETL1 1371/ 7C3 : C4 0D LDI 0x0D 1372/ 7C5 : 01 XAE ;SAVE CARRIAGE RET 1373/ 7C6 : 40 LDE 1374/ 7C7 : 3F XPPC P3 ; PRINT IT 1375/ 7C8 : 90 12 JMP GETLCR ; STORE IT IN LBUF 1376/ 7CA : 90 87 E10: JMP E9 1377/ 7CC : C4 20 GXH: LDI ' ' ; BLANK OUT THE CHARACTER 1378/ 7CE : 3F XPPC P3 1379/ 7CF : C4 08 LDI 8 ; PRINT ANOTHER BACKSPACE 1380/ 7D1 : 3F XPPC P3 1381/ 7D2 : C2 E7 GETRUB: LD CHRNUM(P2) 1382/ 7D4 : 98 A0 JZ GETL1 1383/ 7D6 : BA E7 DLD CHRNUM(P2) ;0NE LESS CHAR 1384/ 7D8 : C5 FF LD @-1(P1) ;BACKSPACE CURSOR 1385/ 7DA : 90 9A JMP GETL1 1386/ 7DC : 40 GETLCR: LDE 1387/ 7DD : CD 01 ST @1(P1) ;STORE CR IN LBUF 1388/ 7DF : C4 0A LDI 0x0A ;PRINT LINE FEED 1389/ 7E1 : 3F XPPC P3 1390/ 7E2 : C4 10 LDI H(LBUF) ;SET P1 TO BEGIN- 1391/ 7E4 : 35 XPAH P1 ; NING OF LBUF 1392/ 7E5 : C4 D6 LDI L(LBUF) 1393/ 7E7 : 31 XPAL P1 1394/ 7E8 : 90 CE X16: JMP X15 1395/ 7EA : 1396/ 7EA : 1397/ 7EA : ;************************************* 1398/ 7EA : ;* EVAL -- GET MEMORY CONTENTS * 1399/ 7EA : ;************************************* 1400/ 7EA : 1401/ 7EA : ; THIS ROUTINE IMPLEMENTS THE '@' OPERATOR IN EXPRESSIONS 1402/ 7EA : 1403/ 7EA : C4 10 EVAL: LDI H(AESTK) 1404/ 7EC : 37 XPAH P3 1405/ 7ED : C2 FD LD LSTK(P2) 1406/ 7EF : 33 XPAL P3 ; P3 -> ARITH STACK 1407/ 7F0 : C3 FF LD -1(P3) ; GET ADDR OFF STACK, 1408/ 7F2 : 35 XPAH P1 ; AND INTO P1, 1409/ 7F3 : 01 XAE ; SAVING OLD P1 IN EX & LO 1410/ 7F4 : C3 FE LD -2(P3) 1411/ 7F6 : 31 XPAL P1 1412/ 7F7 : CA EF ST LO(P2) 1413/ 7F9 : C1 00 LD 0(P1) ;GET MEMORY CONTENTS, 1414/ 7FB : CB FE ST -2(P3) ; SHOVE ONTO STACK 1415/ 7FD : C4 00 LDI 0 1416/ 7FF : CB FF ST -1(P3) ;HIGH ORDER 3 BITS ZEROED 1417/ 801 : C2 EF LD LO(P2) 1418/ 803 : 31 XPAL P1 ;RESTORE ORIGINAL P1 1419/ 804 : 40 LDE 1420/ 805 : 35 XPAH P1 1421/ 806 : 90 B0 JMP X15 1422/ 808 : 1423/ 808 : 1424/ 808 : ;************************************* 1425/ 808 : ;* MOVE - STORE INTO MEMORY * 1426/ 808 : ;************************************* AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 26 - 1/16/2008 0:30:10 1427/ 808 : 1428/ 808 : ; THIS ROUTINE IMPLEMENTS THE STATEMENT: 1429/ 808 : ; '@' FACTOR '=' REL-EXP 1430/ 808 : 1431/ 808 : C4 10 MOVE: LDI H(AESTK) 1432/ 80A : 37 XPAH P3 1433/ 80B : C2 FD LD LSTK(P2) 1434/ 80D : 33 XPAL P3 ;P3 -> ARITH STACK 1435/ 80E : C7 FE LD @-2(P3) ;GET BYTE TO BE MOVED 1436/ 810 : 01 XAE 1437/ 811 : C7 FF LD @-1(P3) ;NOW GET ADDRESS INTO P3 1438/ 813 : CA EA ST TEMP(P2) 1439/ 815 : C7 FF LD @-1(P3) 1440/ 817 : 33 XPAL P3 1441/ 818 : CA FD ST LSTK(P2) ;STACK PTR UPDATED NOW 1442/ 81A : C2 EA LD TEMP(P2) 1443/ 81C : 37 XPAH P3 1444/ 81D : 40 LDE 1445/ 81E : CB 00 ST 0(P3) ;MOVE THE BYTE INTO MEMORY 1446/ 820 : 90 C6 X17: JMP X16 1447/ 822 : 90 A6 Ell: JMP E10 1448/ 824 : 1449/ 824 : ;************************************* 1450/ 824 : ;* TEXT EDITOR * 1451/ 824 : ;************************************* 1452/ 824 : 1453/ 824 : ;INPUTS TO THIS ROUTINE: POINTER TO LINE BUFFER IN P1L0W & 1454/ 824 : ; P1HIGH. P1 POINTS TO THE INSERTION POINT IN THE TEXT. 1455/ 824 : ; THE A.E. STACK HAS THE LINE NUMBER ON IT (STACK POINTER 1456/ 824 : ; IS ALREADY POPPED). 1457/ 824 : 1458/ 824 : ; EACH LINE IN THE NIBL TEXT IS STORED IN THE FOLLOWING 1459/ 824 : ; FORMAT: TWO BYTES CONTAINING THE LINE NUMBER (IN BINARY, 1460/ 824 : ; HIGH ORDER BYTE FIRST), THEN ONE BYTE CONTAINING THE 1461/ 824 : ; LENGTH OF THE LINE., AND FINALLY THE LINE ITSELF FOLLOWED 1462/ 824 : ; BY A CARRIAGE RETURN. THE LAST LINE IN THE TEXT IS 1463/ 824 : ; FOLLOWED BY TWO CONSECUTIVE BYTES OF XFF. 1464/ 824 : 1465/ 824 : C4 10 INSRT: LDI H(AESTK) ;POINT P3 AT AE STACK, 1466/ 826 : 37 XPAH P3 ;WHICH HAS THE LINE # 1467/ 827 : C2 FD LD LSTK(P2) ;ON IT 1468/ 829 : 33 XPAL P3 1469/ 82A : C3 01 LD 1(P3) ;SAVE NEW LINE'S NUMBER 1470/ 82C : CA F7 ST HILINE(P2) 1471/ 82E : C3 00 LD 0(P3) 1472/ 830 : CA F8 ST LOLINE(P2) 1473/ 832 : C2 F1 LD P1L0W(P2) ;PUT POINTER TO LBUF INTO P3 1474/ 834 : 33 XPAL P3 1475/ 835 : C2 F0 LD P1HIGH(P2) 1476/ 837 : 37 XPAH P3 1477/ 838 : C4 04 LDI 4 ;INITIALLY LENGTH OF NEW LINE 1478/ 83A : CA E7 ST CHRNUM(P2) ; = 4. ADD 1 TO LENGTH FOR 1479/ 83C : C7 01 INSRT1: LD @1(P3) ; EACH CHAR IN LINE UP TO, 1480/ 83E : E4 0D XRI 0x0D ; BUT NOT INCLUDING, 1481/ 840 : 98 04 JZ INSRT2 ; CARRIAGE RETURN 1482/ 842 : AA E7 ILD CHRNUM(P2) 1483/ 844 : 90 F6 JMP INSRT1 1484/ 846 : C2 E7 INSRT2: LD CHRNUM(P2) ; IF LENGTH STILL 4, 1485/ 848 : E4 04 XRI 4 ; WE'LL DELETE A LINE, 1486/ 84A : 9C 02 JNZ INSRT3 ; SO SET LENGTH = 0 AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 27 - 1/16/2008 0:30:10 1487/ 84C : CA E7 ST CHRNUM(P2) 1488/ 84E : C2 E7 INSRT3: LD CHRNUM(P2) ;PUT NEW LINE LENGTH IN EX 1489/ 850 : 01 XAE 1490/ 851 : C2 F2 LD LABLHI(P2) ; IS NEW LINE REPLACING OLD? 1491/ 853 : 94 06 JP INSRT4 ;YES - DO REPLACE 1492/ 855 : D4 7F ANI 0x7F ;N0 - WE'LL INSERT LINE HERE, 1493/ 857 : CA F2 ST LABLHI(P2) ; WHERE FNDLBL GOT US 1494/ 859 : 90 18 JMP AMOVE ;BUT FIR3T MAKE ROOM 1495/ 85B : C5 03 INSRT4: LD @3(P1) ;SKIP LINE # AND LENGTH 1496/ 85D : 40 LDE ;EX, NOW HOLDING NEW LINE 1497/ 85E : 02 CCL ; LENGTH, WILL SOON HOLD 1498/ 85F : F4 FC ADI -4 ; DISPLACEMENT OF LINES 1499/ 861 : 01 XAE ; TO BE MOVED 1500/ 862 : C5 01 INSRT5: LD @1(P1) ;SUBTRACT 1 FROM DISPLACEMENT 1501/ 864 : E4 0D XRI 0x0D ; FOR EACH CHAR IN LINE BEING 1502/ 866 : 98 0B JZ AMOVE ; REPLACED 1503/ 868 : 40 LDE 1504/ 869 : 02 CCL 1505/ 86A : F4 FF ADI -1 1506/ 86C : 01 XAE 1507/ 86D : 90 F3 JMP INSRT5 1508/ 86F : 90 AF X19: JMP X17 1509/ 871 : 90 AF E12: JMP Ell 1510/ 873 : 40 AMOVE: LDE ;IF DISPLACEMENT AND LENGTH 1511/ 874 : DA E7 OR CHRNUM(P2) ; OF NEW LINE ARE 0, RETURN 1512/ 876 : 98 F7 JZ X19 1513/ 878 : C4 7A LDI L(DOSTAK) ; CLEAR SOME STACKS 1514/ 87A : CA FF ST DOPTR(P2) 1515/ 87C : C4 6A LDI L(SBRSTK) 1516/ 87E : CA FC ST SBRPTR(P2) 1517/ 880 : C4 8A LDI L(FORSTK) 1518/ 882 : CA FE ST FORPTR(P2) 1519/ 884 : 40 LDE 1520/ 885 : 98 60 JZ INSAD0 ;DON'T NEED TO MOVE LINES 1521/ 887 : 94 10 JP INSUP0 ;SKIP IF DISP. POSITIVE 1522/ 889 : C1 00 ADOWN: LD 0(P1) ; NEGATIVE DISPLACEMENT: 1523/ 88B : C9 80 ST EREG(P1) ;DO; 1524/ 88D : C5 01 LD @1(P1) ; M(P1+DISP) = M(P1); 1525/ 88F : 94 F8 JP ADOWN ; P1 = Pl+1; 1526/ 891 : C1 00 LD 0(P1) ;UNTIL M(P1)<0 & M(P1-1)<0; 1527/ 893 : 94 F4 JP ADOWN 1528/ 895 : C9 80 ST EREG(P1) ;M(P1+DISP) = M(P1); 1529/ 897 : 90 4E JMP INSAD0 1530/ 899 : C1 FE INSUP0: LD -2(P1) ;POSITIVE DISPLACEMENT: 1531/ 89B : CA EA ST TEMP(P2) ;FLAG BEGINNING OF MOVE WITH 1532/ 89D : C4 FF LDI -1 ; A -1 FOLLOWED BY 30, WHICH 1533/ 89F : C9 FE ST -2(P1) ; CAN NEVER APPEAR IN A 1534/ 8A1 : C4 50 LDI 80 ; NIBL TEXT 1535/ 8A3 : C9 FF ST -1(P1) 1536/ 8A5 : C5 01 INSUP1: LD @1(P1) ; ADVANCE P1 TO END OF TEXT 1537/ 8A7 : 94 FC JP INSUP1 1538/ 8A9 : C1 00 LD 0(P1) 1539/ 8AB : 94 F8 JP INSUP1 1540/ 8AD : 35 XPAH P1 ;SAVE P1 IN LO, HI 1541/ 8AE : CA EE ST HI(P2) 1542/ 8B0 : 35 XPAH P1 1543/ 8B1 : 31 XPAL P1 1544/ 8B2 : CA EF ST LO(P2) 1545/ 8B4 : 31 XPAL P1 1546/ 8B5 : C2 EF LD LO(P2) ;ADD DISPLACEMENT TO AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 28 - 1/16/2008 0:30:10 1547/ 8B7 : 02 CCL ;VALUE OF P1, TO CHECK 1548/ 8B8 : 70 ADE ;WHETHER WE'RE OUT OF 1549/ 8B9 : C4 00 LDI 0 ;RAM FOR USER'S PROGRAM 1550/ 8BB : F2 EE ADD HI(P2) 1551/ 8BD : E2 EE XOR HI(P2) 1552/ 8BF : D4 F0 ANI 0xF0 1553/ 8C1 : 98 03 JZ INSUP2 1554/ 8C3 : C4 00 LDI 0 ;IF OUT OF RAM, CHANGE 1555/ 8C5 : 01 XAE ; DISPLACEMENT TO ZERO 1556/ 8C6 : C4 FF INSUP2: LDI -1 1557/ 8C8 : C9 80 INSUP3: ST EREG(P1) ;MOVE TEXT UP UNTIL WE REACH 1558/ 8CA : C5 FF LD @-1(P1) ; THE FLAGS SET ABOVE 1559/ 8CC : 94 FA JP INSUP3 1560/ 8CE : C1 01 LD 1(P1) 1561/ 8D0 : E4 50 XRI 80 1562/ 8D2 : 98 04 JZ INSUP4 1563/ 8D4 : C1 00 LD 0(P1) 1564/ 8D6 : 90 F0 JMP INSUP3 1565/ 8D8 : C2 EA INSUP4: LD TEMP(P2) ;RESTORE THE FLAGGED LOCATION 1566/ 8DA : C9 00 ST 0(P1) ; TO THEIR ORIGINAL VALUES 1567/ 8DC : C4 0D LDI 0x0D 1568/ 8DE : C9 01 ST 1(P1) 1569/ 8E0 : 40 LDE ;IF DISPLACEMENT = 0, WE'RE 1570/ 8E1 : 9C 04 JNZ INSAD0 ; OUT OF RAM, SO REPORT ERROR 1571/ 8E3 : C4 02 LDI 2 1572/ 8E5 : 90 8A E12A: JMP E12 1573/ 8E7 : C2 E7 INSAD0: LD CHRNUM(P2) ;INSERT NEW LINE 1574/ 8E9 : 98 84 X19A: JZ X19 ; UNLESS LENGTH IS ZERO 1575/ 8EB : C2 F1 LD P1L0W(P2) ;POINT P1 AT LINE BUFFER 1576/ 8ED : 31 XPAL P1 1577/ 8EE : C2 F0 LD P1HIGH(P2) 1578/ 8F0 : 35 XPAH P1 1579/ 8F1 : C2 F3 LD LABLLO(P2) ;POINT P3 AT INSERTION PLACE 1580/ 8F3 : 33 XPAL P3 1581/ 8F4 : C2 F2 LD LABLHI(P2) 1582/ 8F6 : 37 XPAH P3 1583/ 8F7 : C2 F7 LD HILINE(P2) ;PUT LINE NUMBER INTO TEXT 1584/ 8F9 : CF 01 ST @1(P3) 1585/ 8FB : C2 F8 LD LOLINE(P2) 1586/ 8FD : CF 01 ST @1(P3) 1587/ 8FF : C2 E7 LD CHRNUM(P2) ;STORE LINE LENGTH IN TEXT 1588/ 901 : CF 01 ST @1(P3) 1589/ 903 : C5 01 INSAD1: LD @1(P1) ;PUT REST OF CHARS 1590/ 905 : CF 01 ST @1(P3) ; (INCLUDING OR) INTO TEXT 1591/ 907 : E4 0D XRI 0x0D 1592/ 909 : 9C F8 JNZ INSAD1 1593/ 90B : 90 DC JMP X19A ;RETURN 1594/ 90D : (MACRO) X20: JS P3,EXECIL 1594/ 90D : C4 00 LDI H(EXECIL-1) 1594/ 90F : 37 XPAH P3 1594/ 910 : C4 75 LDI L(EXECIL-1) 1594/ 912 : 33 XPAL P3 1594/ 913 : 3F XPPC P3 1595/ 914 : 90 CF E13: JMP E12A 1596/ 916 : 1597/ 916 : 1598/ 916 : ;************************************ 1599/ 916 : ;* POP ARITHMETIC STACK * 1600/ 916 : ;************************************ 1601/ 916 : AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 29 - 1/16/2008 0:30:10 1602/ 916 : BA FD POPAE: DLD LSTK(P2) ;THIS ROUTINE POP THE A. E. 1603/ 918 : BA FD DLD LSTK(P2) ;STACK, AND PUTS THE RESULT 1604/ 91A : 33 XPAL P3 ;INTO LO(P2) AND HI(P2) 1605/ 91B : C4 10 LDI H(AESTK) 1606/ 91D : 37 XPAH P3 1607/ 91E : C3 00 LD (P3) 1608/ 920 : CA EF ST LO(P2) 1609/ 922 : C3 01 LD 1(P3) 1610/ 924 : CA EE ST HI(P2) 1611/ 926 : 90 E5 JMP X20 1612/ 928 : 1613/ 928 : 1614/ 928 : ;************************************* 1615/ 928 : ;* UNTIL * 1616/ 928 : ;************************************* 1617/ 928 : 1618/ 928 : C2 FF UNTIL: LD DOPTR(P2) ; CHECK FOR DO-STACK UNDERFLOW 1619/ 92A : 01 XAE 1620/ 92B : 40 LDE 1621/ 92C : E4 7A XRI L(DOSTAK) 1622/ 92E : 9C 04 JNZ UNTL1 1623/ 930 : C4 0F LDI 15 1624/ 932 : 90 E0 JMP E13 1625/ 934 : C2 EF UNTL1: LD LO(P2) ; CHECK FOR EXPRESSION = 0 1626/ 936 : DA EE OR HI(P2) ;<- CHANGED AFTER 12/17/76 TO 'ANI 01' (R.MARIN, JAN 2008) 1627/ 938 : 98 06 JZ SREDO ;IF ZERO, REPEAT DO-LOOP 1628/ 93A : BA FF DLD DOPTR(P2) ;ELSE POP SAVE STACK 1629/ 93C : BA FF DLD DOPTR(P2) 1630/ 93E : 90 CD JMP X20 ;CONTINUE TO NEXT STMT 1631/ 940 : 40 SREDO: LDE ; POINT P3 AT DO-STACK 1632/ 941 : 33 XPAL P3 1633/ 942 : C4 10 LDI H(DOSTAK) 1634/ 944 : 37 XPAH P3 1635/ 945 : C3 FF LD -1(P3) ;LOAD P1 FROM DO STACK 1636/ 947 : 35 XPAH P1 1637/ 948 : C3 FE LD -2(P3) 1638/ 94A : 31 XPAL P1 ; CURSOR NOW POINTS TO FIRST 1639/ 94B : 90 C0 JMP X20 ; STATEMENT OF DO-LOOP 1640/ 94D : 1641/ 94D : ;************************************* 1642/ 94D : ;* STORE INTO STATUS REGISTER * 1643/ 94D : ;************************************* 1644/ 94D : 1645/ 94D : ; THIS ROUTINE IMPLEMENTS THE STATEMENT: 1646/ 94D : ; 'STAT' '=' REL-EXP 1647/ 94D : 1648/ 94D : C2 EF MOVESR: LD LO(P2) ;LOW BYTE GOES TO STATUS 1649/ 94F : D4 F7 ANI 0xF7 ; BUT WITH IEN BIT CLEARED 1650/ 951 : 07 CAS 1651/ 952 : 90 B9 X21: JMP X20 1652/ 954 : 90 BE E14: JMP E13 1653/ 956 : 1654/ 956 : 1655/ 956 : ;************************************* 1656/ 956 : ;* STAT FUNCTION * 1657/ 956 : ;************************************* 1658/ 956 : 1659/ 956 : C4 10 STATUS: LDI H(AESTK) 1660/ 958 : 37 XPAH P3 ;POINT P3 AT AE STACK 1661/ 959 : AA FD ILD LSTK(P2) AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 30 - 1/16/2008 0:30:10 1662/ 95B : AA FD ILD LSTK(P2) 1663/ 95D : 33 XPAL P3 1664/ 95E : 06 CSA 1665/ 95F : CB FE ST -2(P3) ;STATUS REG IS, LOW BYTE 1666/ 961 : C4 00 LDI 0 1667/ 963 : CB FF ST -1(P3) ;ZERO IS HIGH BYTE 1668/ 965 : 90 EB JMP X21 1669/ 967 : 1670/ 967 : 1671/ 967 : ;************************************* 1672/ 967 : ;* MACHINE LANGUAGE SUBROUTINE * 1673/ 967 : ;************************************* 1674/ 967 : 1675/ 967 : ; THIS ROUTINE IMPLEMENTS THE 'LINK' STATEMENT 1676/ 967 : 1677/ 967 : C2 EE CALLML: LD HI(P2) ;GET HIGH BYTE OF ADDRESS 1678/ 969 : 37 XPAH P3 1679/ 96A : C2 EF LD LO(P2) ;GET LOW BYTE 1680/ 96C : 33 XPAL P3 ;P3 -> USER'S ROUTINE 1681/ 96D : C7 FF LD @-1(P3) ;CORRECT P3 1682/ 96F : 3F XPPC P3 ;CALL ROUTINE (PRAY IT WORKS) 1683/ 970 : (MACRO) LDPI P2,VARS ;RESTORE RAM POINTER 1683/ 970 : C4 10 LDI H(VARS) 1683/ 972 : 36 XPAH P2 1683/ 973 : C4 1C LDI L(VARS) 1683/ 975 : 32 XPAL P2 1684/ 976 : 90 DA JMP X21 ;RETURN 1685/ 978 : 1686/ 978 : 1687/ 978 : ;************************************* 1688/ 978 : ;* SAVE DO LOOP ADDRESS * 1689/ 978 : ;************************************* 1690/ 978 : 1691/ 978 : ; THIS ROUTINE IMPLEMENTS THE 'DO' STATEMENT. 1692/ 978 : 1693/ 978 : C2 FF SAVEDO: LD DOPTR(P2) ;CHECK FOR STACK OVERFLOW 1694/ 97A : E4 8A XRI L(FORSTK) 1695/ 97C : 9C 04 JNZ SVDO1 1696/ 97E : C4 0A LDI 10 1697/ 980 : 90 D2 E15: JMP E14 1698/ 982 : AA FF SVDO1: ILD DOPTR(P2) 1699/ 984 : AA FF ILD DOPTR(P2) 1700/ 986 : 33 XPAL P3 1701/ 987 : C4 10 LDI H(DOSTAK) 1702/ 989 : 37 XPAH P3 ;P3 -> TOP OF DO STACK 1703/ 98A : 35 XPAH P1 ;SAVE CURSOR ON THE STACK 1704/ 98B : CB FF ST -1(P3) 1705/ 98D : 35 XPAH P1 1706/ 98E : 31 XPAL P1 1707/ 98F : CB FE ST -2(P3) 1708/ 991 : 31 XPAL P1 1709/ 992 : 90 BE X22: JMP X21 1710/ 994 : 1711/ 994 : 1712/ 994 : ;************************************* 1713/ 994 : ;* TOP OF RAM FUNCTION * 1714/ 994 : ;************************************* 1715/ 994 : 1716/ 994 : C2 E9 TOP: LD TEMP2(P2) ;SET P3 TO POINT TO 1717/ 996 : 37 XPAH P3 ; START OF NIBL TEXT AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 31 - 1/16/2008 0:30:10 1718/ 997 : C2 E8 LD TEMP3(P2) 1719/ 999 : 33 XPAL P3 1720/ 99A : C3 00 TOP0: LD (P3) ;HAVE WE HIT END OF TEXT? 1721/ 99C : 94 02 JP TOP1 ; NO - SKIP TO NEXT LINE 1722/ 99E : 90 07 JMP TOP2 ; YES - PUT CURSOR ON STACK 1723/ 9A0 : C3 02 TOP1: LD 2(P3) ;GET LENGTH OF LINE 1724/ 9A2 : 01 XAE 1725/ 9A3 : C7 80 LD @EREG(P3) ;SKIP TO NEXT LINE 1726/ 9A5 : 90 F3 JMP TOP0 ; GO CHECK FOR EOF 1727/ 9A7 : C7 02 TOP2: LD @2(P3) ; P3 := P3 + 2 1728/ 9A9 : AA FD ILD LSTK(P2) ;SET PS TO STACK, SAVING 1729/ 9AB : AA FD ILD LSTK(P2) ; OLD P3 (WHICH CONTAINS TOP) 1730/ 9AD : 33 XPAL P3 ; ON IT SOMEHOW 1731/ 9AE : 01 XAE 1732/ 9AF : C4 10 LDI H(AESTK) 1733/ 9B1 : 37 XPAH P3 1734/ 9B2 : CB FF ST -1(P3) 1735/ 9B4 : 40 LDE 1736/ 9B5 : CB FE ST -2(P3) 1737/ 9B7 : 90 D9 JMP X22 1738/ 9B9 : 1739/ 9B9 : 1740/ 9B9 : ;************************************* 1741/ 9B9 : ;* SKIP TO NEXT NIBL LINE * 1742/ 9B9 : ;************************************* 1743/ 9B9 : 1744/ 9B9 : C5 01 IGNORE: LD @1(P1) ;SCAN TIL WE'RE PAST 1745/ 9BB : E4 0D XRI 0x0D ; CARRIAGE RETURN 1746/ 9BD : 9C FA JNZ IGNORE 1747/ 9BF : 3F XPPC P3 1748/ 9C0 : 1749/ 9C0 : 1750/ 9C0 : ;************************************* 1751/ 9C0 : ;* MODULO FUNCTION * 1752/ 9C0 : ;************************************* 1753/ 9C0 : 1754/ 9C0 : C2 FD MODULO: LD LSTK(P2) ;THIS ROUTINE MUST BE 1755/ 9C2 : 33 XPAL P3 ; IMMEDIATELY AFTER A 1756/ 9C3 : C4 10 LDI H(AESTK) ; DIVIDE TO WORK CORRECTLY 1757/ 9C5 : 37 XPAH P3 1758/ 9C6 : C3 03 LD 3(P3) ;GET LOW BYTE OF REMAINDER 1759/ 9C8 : CB FE ST -2(P3) ;PUT ON STACK 1760/ 9CA : C3 02 LD 2(P3) ;GET HIGH BYTE OF REMAINDER 1761/ 9CC : CB FF ST -1(P3) ;PUT ON STACK 1762/ 9CE : 90 C2 X23: JMP X22 1763/ 9D0 : 90 AE E16: JMP E15 1764/ 9D2 : 1765/ 9D2 : 1766/ 9D2 : ;************************************* 1767/ 9D2 : ;* RANDOM FUNCTION * 1768/ 9D2 : ;************************************* 1769/ 9D2 : 1770/ 9D2 : C4 08 RANDOM: LDI 8 ;LOOP COUNTER FOR MULTIPLY 1771/ 9D4 : CA EB ST NUM(P2) 1772/ 9D6 : C2 E5 LD RNDX(P2) 1773/ 9D8 : 01 XAE 1774/ 9D9 : C2 E4 LD RNDY(P2) 1775/ 9DB : CA E9 ST TEMP2(P2) 1776/ 9DD : C2 E5 LOOP9: LD RNDX(P2) ;MULTIPLY THE SEEDS BY 9 1777/ 9DF : 02 CCL AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 32 - 1/16/2008 0:30:10 1778/ 9E0 : 70 ADE 1779/ 9E1 : 01 XAE 1780/ 9E2 : C2 E4 LD RNDY(P2) 1781/ 9E4 : 02 CCL 1782/ 9E5 : F2 E9 ADD TEMP2(P2) 1783/ 9E7 : CA E4 ST RNDY(P2) 1784/ 9E9 : BA EB DLD NUM(P2) 1785/ 9EB : 9C F0 JNZ LOOP9 1786/ 9ED : 40 LDE ;ADD 7 TO SEEDS 1787/ 9EE : 02 CCL 1788/ 9EF : F4 07 ADI 7 1789/ 9F1 : 01 XAE 1790/ 9F2 : C2 E4 LD RNDY(P2) 1791/ 9F4 : 02 CCL 1792/ 9F5 : F4 07 ADI 7 1793/ 9F7 : 1E RR 1794/ 9F8 : CA E4 ST RNDY(P2) 1795/ 9FA : AA E6 ILD RNDF(P2) ;HAVE WE GONE THROUGH 1796/ 9FC : 98 03 JZ RND1 ; 256 GENERATIONS? 1797/ 9FE : 40 LDE ;IF SO, SKIP GENERATING 1798/ 9FF : CA E5 ST RNDX(P2) ; THE NEW RNDX 1799/ A01 : C2 FD RND1: LD LSTK(P2) ;START MESSING WITH THE STACK 1800/ A03 : 33 XPAL P3 1801/ A04 : C4 10 LDI H(AESTK) 1802/ A06 : 37 XPAH P3 1803/ A07 : C4 01 LDI 1 ;FIRST PUT 1 ON STACK 1804/ A09 : CB 00 ST (P3) 1805/ A0B : C4 00 LDI 0 1806/ A0D : CB 01 ST 1(P3) 1807/ A0F : C3 FE LD -2(P3) ;PUT EXPR2 ON STACK 1808/ A11 : CB 02 ST 2(P3) 1809/ A13 : C3 FF LD -1(P3) 1810/ A15 : CB 03 ST 3(P3) 1811/ A17 : C3 FC LD -4(P3) ;PUT EXPR1 ON STACK 1812/ A19 : CB 04 ST 4(P3) 1813/ A1B : C3 FD LD -3(P3) 1814/ A1D : CB 05 ST 5(P3) 1815/ A1F : C2 E4 LD RNDY(P2) ;PUT RANDOM # ON STACK 1816/ A21 : CB FE ST -2(P3) 1817/ A23 : C2 E5 LD RNDX(P2) 1818/ A25 : E4 FF XRI 0xFF 1819/ A27 : D4 7F ANI 0x7F 1820/ A29 : CB FF ST -1(P3) 1821/ A2B : C7 06 LD @6(P3) ; ADD 6 TO STACK POINTER 1822/ A2D : 33 XPAL P3 1823/ A2E : CA FD ST LSTK(P2) 1824/ A30 : 90 9C X24: JMP X23 1825/ A32 : 90 9C E16A: JMP E16 1826/ A34 : 1827/ A34 : 1828/ A34 : ;************************************* 1829/ A34 : ;* PU3H 1 ON ARITHMETIC STACK * 1830/ A34 : ;************************************* 1831/ A34 : 1832/ A34 : AA FD LIT1: ILD LSTK(P2) 1833/ A36 : AA FD ILD LSTK(P2) 1834/ A38 : 33 XPAL P3 1835/ A39 : C4 10 LDI H(AESTK) 1836/ A3B : 37 XPAH P3 1837/ A3C : C4 00 LDI 0 AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 33 - 1/16/2008 0:30:10 1838/ A3E : CB FF ST -1(P3) 1839/ A40 : C4 01 LDI 1 1840/ A42 : CB FE ST -2(P3) 1841/ A44 : 90 EA JMP X24 1842/ A46 : 1843/ A46 : 1844/ A46 : ;************************************* 1845/ A46 : ;* FOR-LOOP INITIALIZATION * 1846/ A46 : ;************************************* 1847/ A46 : 1848/ A46 : C2 FE SAVFOR: LD FORPTR(P2) ; CHECK FOR FOR STACK 1849/ A48 : E4 A6 XRI L(PCSTAK) ; OVERFLOW 1850/ A4A : 9C 04 JNZ SFOR1 1851/ A4C : C4 0A LDI 10 1852/ A4E : 90 E2 E17: JMP E16A 1853/ A50 : E4 A6 SFOR1: XRI L(PCSTAK) 1854/ A52 : 31 XPAL P1 ; POINT P1 AT FOR STACK 1855/ A53 : CA F1 ST P1L0W(P2) ; SAVING OLD P1 1856/ A55 : C4 10 LDI H(FORSTK) 1857/ A57 : 35 XPAH P1 1858/ A58 : CA F0 ST P1HIGH(P2) 1859/ A5A : C2 FD LD LSTK(P2) ; POINT P2 AT AE STACK 1860/ A5C : 33 XPAL P3 1861/ A5D : C4 10 LDI H(AESTK) 1862/ A5F : 37 XPAH P3 1863/ A60 : C3 F9 LD -7(P3) ;GET VARIABLE INDEX 1864/ A62 : CD 01 ST @1(P1) ;SAVE ON FOR-STACK 1865/ A64 : C3 FC LD -4(P3) ;GET L(LIMIT) 1866/ A66 : CD 01 ST @1(P1) ;SAVE 1867/ A68 : C3 FD LD -3(P3) ;GET H(LIMIT) 1868/ A6A : CD 01 ST @1(P1) ;SAVE 1869/ A6C : C3 FE LD -2(P3) ;GET L(STEP) 1870/ A6E : CD 01 ST @1(P1) ;SAVE 1871/ A70 : C3 FF LD -1(P3) ;GET H(STEP) 1872/ A72 : CD 01 ST @1(P1) ;SAVE 1873/ A74 : C2 F1 LD P1L0W(P2) ;GET L(P1) 1874/ A76 : CD 01 ST @1(P1) ;SAVE 1875/ A78 : C2 F0 LD P1HIGH(P2) ;GET H(P1) 1876/ A7A : CD 01 ST @1(P1) ;SAVE 1877/ A7C : 35 XPAH P1 ;RESTORE OLD P1 1878/ A7D : C2 F1 LD P1L0W(P2) 1879/ A7F : 31 XPAL P1 1880/ A80 : CA FE ST FORPTR(P2) ;UPDATE POR STACK PTR 1881/ A82 : C7 FC LD @-4(P3) 1882/ A84 : 33 XPAL P3 1883/ A85 : CA FD ST LSTK(P2) ;UPDATE AE STACK PTR 1884/ A87 : 90 A7 X25: JMP X24 1885/ A89 : 1886/ A89 : 1887/ A89 : ;************************************* 1888/ A89 : ;* FIRST PART OF 'NEXT VAR' * 1889/ A89 : ;************************************* 1890/ A89 : 1891/ A89 : C2 FE NEXTV: LD FORPTR(P2) ;POINT P1 AT FOR STACK, 1892/ A8B : E4 8A XRI L(FORSTK) ; CHECKING FOR UNDERFLOW 1893/ A8D : 9C 04 JNZ QNXTV1 1894/ A8F : C4 0B LDI 11 ;REPORT ERROR 1895/ A91 : 90 BB JMP E17 1896/ A93 : E4 8A QNXTV1: XRI L(FORSTK) 1897/ A95 : 31 XPAL P1 AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 34 - 1/16/2008 0:30:10 1898/ A96 : CA F1 ST P1L0W(P2) ;SAVE OLD P1 1899/ A98 : C4 10 LDI H(FORSTK) 1900/ A9A : 35 XPAH P1 1901/ A9B : CA F0 ST P1HIGH(P2) 1902/ A9D : C2 FD LD LSTK(P2) ;POINT P3 AT AE STACK 1903/ A9F : 33 XPAL P3 1904/ AA0 : C4 10 LDI H(AESTK) 1905/ AA2 : 37 XPAH P3 1906/ AA3 : C7 FF LD @-1(P3) ;GET VARIABLE INDEX 1907/ AA5 : E1 F9 XOR -7(P1) ;COMPARE WITH INDEX 1908/ AA7 : 98 04 JZ NXTV10 ; ON FOR STACK: ERROR 1909/ AA9 : C4 0C LDI 12 ; IF NOT EQUAL 1910/ AAB : 90 A1 E18: JMP E17 1911/ AAD : E1 F9 NXTV10: XOR -7(P1) ;RESTORE INDEX 1912/ AAF : 01 XAE ;SAVE IN EREG 1913/ AB0 : C2 80 LD EREG(P2) ;GET L(VARIABLE) 1914/ AB2 : 02 CCL 1915/ AB3 : F1 FC ADD -4(P1) ;ADD L(STEP) 1916/ AB5 : CA 80 ST EREG(P2) ;STORE IN VARIABLE 1917/ AB7 : CB 00 ST (P3) ; AND ON STACK 1918/ AB9 : C6 01 LD @1(P2) ; INCREMENT RAM PTR 1919/ ABB : C2 80 LD EREG(P2) ;GET H(VARIABLE) 1920/ ABD : F1 FD ADD -3(P1) ;ADD H(STEP) 1921/ ABF : CA 80 ST EREG(P2) ; STORE IN VARIABLE 1922/ AC1 : CB 01 ST 1(P3) ; AND ON STACK 1923/ AC3 : C6 FF LD @-1(P2) ; RESTORE RAM POINTER 1924/ AC5 : C1 FA LD -6(P1) ;GET L(LIMIT) 1925/ AC7 : CB 02 ST 2(P3) ;PUT ON STACK 1926/ AC9 : C1 FB LD -5(P1) ;GET H(LIMIT) 1927/ ACB : CB 03 ST 3(P3) ;PUT ON STACK 1928/ ACD : C1 FD LD -3(P1) ;GET H(STEP) 1929/ ACF : 94 10 JP NXTV2 ; IF NEGATIVE, INVERT 1930/ AD1 : C4 04 LDI 4 ; ITEMS ON A. E. STACK 1931/ AD3 : CA EB ST NUM(P2) ;NUM = LOOP COUNTER 1932/ AD5 : C7 01 LOOP10: LD @1(P3) ;GET BYTE FROM STACK 1933/ AD7 : E4 FF XRI 0xFF ; INVERT IT 1934/ AD9 : CB FF ST -1(P3) ;PUT BACK ON STACK 1935/ ADB : BA EB DLD NUM(P2) ; DO UNTIL NUM = 0 1936/ ADD : 9C F6 JNZ LOOP10 1937/ ADF : 90 02 JMP NXTV3 1938/ AE1 : C7 04 NXTV2: LD @4(P3) ;UPDATE AE STACK POINTER 1939/ AE3 : 33 NXTV3: XPAL P3 1940/ AE4 : CA FD ST LSTK(P2) 1941/ AE6 : C2 F1 LD P1L0W(P2) ; RESTORE OLD P1 1942/ AE8 : 31 XPAL P1 1943/ AE9 : C2 F0 LD P1HIGH(P2) 1944/ AEB : 35 XPAH P1 1945/ AEC : 90 99 X26: JMP X25 1946/ AEE : 1947/ AEE : 1948/ AEE : ;************************************* 1949/ AEE : ;* SECOND PART OF 'NEXT VAR' * 1950/ AEE : ;************************************* 1951/ AEE : 1952/ AEE : C2 EF NEXTV1: LD LO(P2) ;IS FOR-LOOP OVER WITH? 1953/ AF0 : 98 08 JZ X_REDO ;N0 - REPEAT LOOP 1954/ AF2 : C2 FE LD FORPTR(P2) ;YES - POP FOR-STACK 1955/ AF4 : 02 CCL 1956/ AF5 : F4 F9 ADI -7 1957/ AF7 : CA FE ST FORPTR(P2) AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 35 - 1/16/2008 0:30:10 1958/ AF9 : 3F XPPC P3 ; RETURN TO I.L. INTERPRETER 1959/ AFA : C2 FE X_REDO: LD FORPTR(P2) ; POINT P3 AT FOR STACK 1960/ AFC : 33 XPAL P3 1961/ AFD : C4 10 LDI H(FORSTK) 1962/ AFF : 37 XPAH P3 1963/ B00 : C3 FF LD -1(P3) ;GET OLD P1 OFF STACK 1964/ B02 : 35 XPAH P1 1965/ B03 : C3 FE LD -2(P3) 1966/ B05 : 31 XPAL P1 1967/ B06 : 90 E4 JMP X26 1968/ B08 : 90 A1 E19: JMP E18 1969/ B0A : 1970/ B0A : 1971/ B0A : ;************************************ 1972/ B0A : ;* PRINT MEMORY AS STRING * 1973/ B0A : ;************************************ 1974/ B0A : 1975/ B0A : ; THIS ROUTINE IMPLEMENTS THE STATEMENT: 1976/ B0A : ; 'PRINT' '$' FACTOR 1977/ B0A : 1978/ B0A : C2 EE PSTRNG: LD HI(P2) ;POINT P1 AT STRING TO PRINT 1979/ B0C : 35 XPAH P1 1980/ B0D : C2 EF LD LO(P2) 1981/ B0F : 31 XPAL P1 1982/ B10 : (MACRO) LDPI P3,PUTC-1 ;POINT P3 AT PUTC ROUTINE 1982/ B10 : C4 0F LDI H(PUTC-1) 1982/ B12 : 37 XPAH P3 1982/ B13 : C4 C1 LDI L(PUTC-1) 1982/ B15 : 33 XPAL P3 1983/ B16 : C5 01 PRSTR1: LD @1(P1) ;GET A CHARACTER 1984/ B18 : E4 0D XRI 0x0D ;IS IT A CARRIAGE RETURN? 1985/ B1A : 98 D0 JZ X26 ;YES - WE'RE DONE 1986/ B1C : E4 0D XRI 0x0D ;NO - PRINT THE CHARACTER 1987/ B1E : 3F XPPC P3 1988/ B1F : 06 CSA ;MAKE SURE NO ONE IS 1989/ B20 : D4 20 ANI 0x20 ;TYPING ON THE TTY 1990/ B22 : 9C F2 JNZ PRSTR1 ;BEFORE REPEATING LOOP 1991/ B24 : 90 C6 JMP X26 1992/ B26 : 1993/ B26 : 1994/ B26 : ;************************************ 1995/ B26 : ;* INPUT A STRING * 1996/ B26 : ;************************************ 1997/ B26 : 1998/ B26 : ; THIS ROUTINE IMPLEMENTS THE STATEMENT: 1999/ B26 : ; 'INPUT' '$' FACTOR 2000/ B26 : 2001/ B26 : C2 EE ISTRNG: LD HI(P2) ;GET ADDRESS TO STORE THE 2002/ B28 : 37 XPAH P3 ; STRING, PUT IT INTO P3 2003/ B29 : C2 EF LD LO(P2) 2004/ B2B : 33 XPAL P3 2005/ B2C : C5 01 INPST2: LD @1(P1) ;GET A BYTE FROM LINE BUFFER 2006/ B2E : CF 01 ST @1(P3) ;PUT IT IN SPECIFIED LOCATION 2007/ B30 : E4 0D XRI 0x0D ;DO UNTIL CHAR = CARR. RETURN 2008/ B32 : 9C F8 JNZ INPST2 2009/ B34 : 90 B6 X27: JMP X26 2010/ B36 : 2011/ B36 : 2012/ B36 : ;************************************ 2013/ B36 : ;* STRING CONSTANT ASSIGNMENT * AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 36 - 1/16/2008 0:30:10 2014/ B36 : ;************************************ 2015/ B36 : 2016/ B36 : ; THIS ROUTINE IMPLEMENTS THE STATEMENT: 2017/ B36 : ; '$' FACTOR '=' STRING 2018/ B36 : 2019/ B36 : C2 EF PUTSTR: LD LO(P2) ;GET ADDRESS TO STORE STRING, 2020/ B38 : 33 XPAL P3 ; PUT IT INTO P3 2021/ B39 : C2 EE LD HI(P2) 2022/ B3B : 37 XPAH P3 2023/ B3C : C5 01 LOOP11: LD @1(P1) ;GET A BYTE FROM STRING 2024/ B3E : E4 22 XRI '"' ;CHECK FOR END OF STRING 2025/ B40 : 98 0E JZ STREND 2026/ B42 : E4 2F XRI '"' | 0x0D ;MAKE SURE THERE'S NO CR 2027/ B44 : 9C 04 JNZ PTSTR1 2028/ B46 : C4 07 LDI 7 2029/ B48 : 90 BE JMP E19 ;ERROR IF CARRIAGE RETURN 2030/ B4A : E4 0D PTSTR1: XRI 0x0D ;RESTORE CHARACTER 2031/ B4C : CF 01 ST @1(P3) ;PUT IN SPECIFIED LOCATION 2032/ B4E : 90 EC JMP LOOP11 ;GET NEXT CHARACTER 2033/ B50 : C4 0D STREND: LDI 0x0D ;APPEND CARRIAGE RETURN 2034/ B52 : CB 00 ST (P3) ; TO STRING 2035/ B54 : 90 DE JMP X27 2036/ B56 : 2037/ B56 : 2038/ B56 : ;************************************ 2039/ B56 : ;* MOVE STRING * 2040/ B56 : ;************************************ 2041/ B56 : 2042/ B56 : ; THIS ROUTINE IMPLEMENTS THE STATEMENT: 2043/ B56 : ; '$' FACTOR '=' '$' FACTOR 2044/ B56 : 2045/ B56 : C2 FD MOVSTR: LD LSTK(P2) ; POINT P3 AT A. E. STACK 2046/ B58 : 33 XPAL P3 2047/ B59 : C4 10 LDI H(AESTK) 2048/ B5B : 37 XPAH P3 2049/ B5C : C7 FF LD @-1(P3) ;GET ADDRESS OF SOURCE STRING 2050/ B5E : 35 XPAH P1 ; INTO P1 2051/ B5F : C7 FF LD @-1(P3) 2052/ B61 : 31 XPAL P1 2053/ B62 : C7 FF LD @-1(P3) ;GET ADDRESS OF DESTINATION 2054/ B64 : 01 XAE ; STRING INTO P3 2055/ B65 : C7 FF LD @-1(P3) 2056/ B67 : 33 XPAL P3 2057/ B68 : CA FD ST LSTK(P2) ;UPDATE STACK POINTER 2058/ B6A : 40 LDE 2059/ B6B : 37 XPAH P3 2060/ B6C : C5 01 LOOP12: LD @1(P1) ;GET A SOURCE CHARACTER 2061/ B6E : CF 01 ST @1(P3) ;SEND IT TO DESTINATION 2062/ B70 : E4 0D XRI 0x0D ;REPEAT UNTIL CARRIAGE RET. 2063/ B72 : 98 C0 JZ X27 2064/ B74 : 06 CSA ; OR KEYBOARD INTERRUPT 2065/ B75 : D4 20 ANI 0x20 2066/ B77 : 9C F3 JNZ LOOP12 2067/ B79 : 90 B9 JMP X27 2068/ B7B : 2069/ B7B : 2070/ B7B : ;************************************ 2071/ B7B : ;* PUT PAGE NUMBER ON STACK * 2072/ B7B : ;************************************ 2073/ B7B : AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 37 - 1/16/2008 0:30:10 2074/ B7B : AA FD PUTPGE: ILD LSTK(P2) 2075/ B7D : AA FD ILD LSTK(P2) 2076/ B7F : 33 XPAL P3 2077/ B80 : C4 10 LDI H(AESTK) 2078/ B82 : 37 XPAH P3 2079/ B83 : C2 F6 LD PAGE(P2) 2080/ B85 : CB FE ST -2(P3) 2081/ B87 : C4 00 LDI 0 2082/ B89 : CB FF ST -1(P3) 2083/ B8B : 90 A7 JMP X27 2084/ B8D : 2085/ B8D : 2086/ B8D : ;************************************ 2087/ B8D : ;* ASSIGN NEW PAGE * 2088/ B8D : ;************************************ 2089/ B8D : 2090/ B8D : C2 EF NUPAGE: LD LO(P2) ;GET PAGE # FROM STACK, 2091/ B8F : D4 07 ANI 7 ;GET THE LOW 3 BITS 2092/ B91 : 9C 02 JNZ NUPGE0 ;PAGE 0 BECOMES PAGE 1 2093/ B93 : C4 01 LDI 1 2094/ B95 : CA F6 NUPGE0: ST PAGE(P2) 2095/ B97 : 3F XPPC P3 ; RETURN 2096/ B98 : 2097/ B98 : ;************************************* 2098/ B98 : ;* FIND START OF PAGE * 2099/ B98 : ;************************************* 2100/ B98 : 2101/ B98 : ; THIS ROUTINE COMPUTES THE START OF THE CURRENT TEXT PAGE, 2102/ B98 : ; STORING THE ADDRESS IN TEMP2(P2) [THE HIGH BYTE], AND 2103/ B98 : ; TEMP3(P2) [THE LOW BYTE]. 2104/ B98 : 2105/ B98 : C2 F6 FNDPGE: LD PAGE(P2) 2106/ B9A : E4 01 XRI 1 ;SPECIAL CASE IS PAGE 1, BUT 2107/ B9C : 9C 09 JNZ FPGE1 ;OTHERS ARE CONVENTIONAL 2108/ B9E : C4 11 LDI H(PGM) ;PAGE 1 STARTS AT 'PGM' 2109/ BA0 : CA E9 ST TEMP2(P2) 2110/ BA2 : C4 20 LDI L(PGM) 2111/ BA4 : CA E8 ST TEMP3(P2) 2112/ BA6 : 3F XPPC P3 ;RETURN 2113/ BA7 : E4 01 FPGE1: XRI 1 ;RESTORE PAGE # 2114/ BA9 : 01 XAE ;SAVE IT 2115/ BAA : C4 04 LDI 4 ;LOOP COUNTER = 4 2116/ BAC : CA EB ST NUM(P2) 2117/ BAE : 40 LOOP13: LDE ; MULTIPLY PAGE# BY 16 2118/ BAF : 02 CCL 2119/ BB0 : 70 ADE 2120/ BB1 : 01 XAE 2121/ BB2 : BA EB DLD NUM(P2) 2122/ BB4 : 9C F8 JNZ LOOP13 2123/ BB6 : 40 LDE 2124/ BB7 : CA E9 ST TEMP2(P2) ;TEMP2 HAS HIGH BYTE 2125/ BB9 : C4 02 LDI 2 ; OF ADDRESS NOW 2126/ BBB : CA E8 ST TEMP3(P2) ;LOW BYTE IS ALWAYS 2 2127/ BBD : 3F XPPC P3 2128/ BBE : 2129/ BBE : 2130/ BBE : ;************************************ 2131/ BBE : ;* MOVE CURSOR TO NEW PAGE * 2132/ BBE : ;************************************ 2133/ BBE : AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 38 - 1/16/2008 0:30:10 2134/ BBE : C2 E9 CHPAGE: LD TEMP2(P2) ;PUT START OF PAGE 2135/ BC0 : 35 XPAH P1 ; INTO P1. THIS ROUTINE 2136/ BC1 : C2 E8 LD TEMP3(P2) ; MUST BE CALLED RIGHT 2137/ BC3 : 31 XPAL P1 ; AFTER 'FNDPGE' 2138/ BC4 : 3F XPPC P3 ; RETURN 2139/ BC5 : 2140/ BC5 : 2141/ BC5 : ;************************************ 2142/ BC5 : ;* DETERMINE CURRENT PAGE * 2143/ BC5 : ;************************************ 2144/ BC5 : 2145/ BC5 : 35 DETPGE: XPAH P1 ;CURRENT PAGE IS HIGH 2146/ BC6 : 01 XAE ; PART OF CURSOR DIVIDED 2147/ BC7 : 40 LDE ; BY 16 2148/ BC8 : 35 XPAH P1 2149/ BC9 : 40 LDE 2150/ BCA : 1C SR 2151/ BCB : 1C SR 2152/ BCC : 1C SR 2153/ BCD : 1C SR 2154/ BCE : CA F6 ST PAGE(P2) 2155/ BD0 : 3F XPPC P3 ;RETURN 2156/ BD1 : 2157/ BD1 : 2158/ BD1 : ;************************************ 2159/ BD1 : ;* CLEAR CURRENT PAGE * 2160/ BD1 : ;************************************ 2161/ BD1 : 2162/ BD1 : C2 E9 NEWPGM: LD TEMP2(P2) ;POINT P1 AT CURRENT PAGE 2163/ BD3 : 35 XPAH P1 2164/ BD4 : C2 E8 LD TEMP3(P2) 2165/ BD6 : 31 XPAL P1 2166/ BD7 : C4 0D LDI 0x0D ;PUT DUMMY END-OF-LINE 2167/ BD9 : C9 FF ST -1(P1) ; JUST BEFORE TEXT 2168/ BDB : C4 FF LDI -1 ;PUT -1 AT START OF TEXT 2169/ BDD : C9 00 ST (P1) 2170/ BDF : C9 01 ST 1(P1) 2171/ BE1 : 3F XPPC P3 ;RETURN 2172/ BE2 : 2173/ BE2 : 2174/ BE2 : ;************************************* 2175/ BE2 : ;* FIND LINE NUMBER IN TEXT * 2176/ BE2 : ;************************************* 2177/ BE2 : 2178/ BE2 : ; INPUTS: THE START OF THE CURRENT PAGE IN TEMP2 AND TEMPS, 2179/ BE2 : ; THE LINE NUMBER TO LOOK FOR IN LO AND HI. 2180/ BE2 : ; OUTPUTS: THE ADDRESS OF THE FIRST LINE IN THE NIBL TEXT 2181/ BE2 : ; WHOSE LINE NUMBER IS GREATER THAN OR EQUAL TO THE 2182/ BE2 : ; NUMBER IN HI AND LO, RETURNED IN P1 AND ALSO IN 2183/ BE2 : ; IN THE RAM VARIABLES LABLLO AND LABLHI. THE SIGN 2184/ BE2 : ; BIT OF LABLHI IS SET IF EXACT LINE IS NOT FOUND. 2185/ BE2 : 2186/ BE2 : C2 E9 FNDLBL: LD TEMP2(P2) ; POINT P1 AT START OF TEXT 2187/ BE4 : 35 XPAH P1 2188/ BE5 : C2 E8 LD TEMP3(P2) 2189/ BE7 : 31 XPAL P1 2190/ BE8 : C1 00 FLBL1: LD (P1) ;HAVE WE HIT END OF TEXT? 2191/ BEA : E4 FF XRI 0xFF 2192/ BEC : 94 12 JP FLBL2 ;YES - STOP LOOKING 2193/ BEE : 03 SCL ; NO - COMPARE LINE NUMBERS AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 39 - 1/16/2008 0:30:10 2194/ BEF : C1 01 LD 1(P1) ; BY SUBTRACTING 2195/ BF1 : FA EF CAD LO(P2) 2196/ BF3 : C1 00 LD 0(P1) 2197/ BF5 : FA EE CAD HI(P2) ;IS TEXT LINE # >= LINE #? 2198/ BF7 : 94 07 JP FLBL2 ;YES - STOP LOOKING. 2199/ BF9 : C1 02 LD 2(P1) ;NO - TRY NEXT LINE IN TEXT 2200/ BFB : 01 XAE 2201/ BFC : C5 80 LD @EREG(P1) ; SKIP LENGTH OF LINE 2202/ BFE : 90 E8 JMP FLBL1 2203/ C00 : 31 FLBL2: XPAL P1 ;SAVE ADDRESS OF FOUND LINE 2204/ C01 : CA F3 ST LABLLO(P2) ; IN LABLHI AND LABLLO 2205/ C03 : 31 XPAL P1 2206/ C04 : 35 XPAH P1 2207/ C05 : CA F2 ST LABLHI(P2) 2208/ C07 : 35 XPAH P1 2209/ C08 : C2 EF LD LO(P2) ;WAS THERE AN EXACT MATCH? 2210/ C0A : E1 01 XOR 1(P1) 2211/ C0C : 9C 07 JNZ FLBL3 2212/ C0E : C2 EE LD HI(P2) 2213/ C10 : E1 00 XOR 0(P1) 2214/ C12 : 9C 01 JNZ FLBL3 ;NO - FLAG THE ADDRESS 2215/ C14 : 3F XPPC P3 ;YES - RETURN NORMALLY 2216/ C15 : C2 F2 FLBL3: LD LABLHI(P2) ;SET SIGN BIT OF HIGH PART 2217/ C17 : DC 80 ORI 0x80 ; OF ADDRESS TO INDICATE 2218/ C19 : CA F2 ST LABLHI(P2) ; INEXACT MATCH OF LINE #'S 2219/ C1B : 3F XPPC P3 2220/ C1C : 2221/ C1C : 2222/ C1C : 2223/ C1C : ;*********************************** 2224/ C1C : ;* I. L. MACROS * 2225/ C1C : ;*********************************** 2226/ C1C : 2227/ C1C : =0x2000 TSTBITH = TSTBIT*256 2228/ C1C : =0x8000 CALBITH = CALBIT*256 2229/ C1C : =0x4000 JMPBITH = JMPBIT*256 2230/ C1C : 2231/ C1C : 2232/ C1C : TSTR MACRO FAIL,A,B 2233/ C1C : DB H((FAIL & 0x0FFF)| TSTBITH) 2234/ C1C : DB L((FAIL & 0x0FFF)| TSTBITH) 2235/ C1C : IFB B 2236/ C1C : DB A |0x80 2237/ C1C : ELSE 2238/ C1C : DB A 2239/ C1C : DB B |0x80 2240/ C1C : ENDIF 2241/ C1C : ENDM 2242/ C1C : 2243/ C1C : TSTCR MACRO FAIL 2244/ C1C : DB H(FAIL & 0x0FFF | TSTBITH) 2245/ C1C : DB L(FAIL & 0x0FFF | TSTBITH) 2246/ C1C : DB 0x0D|0x80 2247/ C1C : ENDM 2248/ C1C : 2249/ C1C : TSTV MACRO FAIL 2250/ C1C : DB H((TSTVAR-1) & 0x0FFF) 2251/ C1C : DB L((TSTVAR-1) & 0x0FFF) 2252/ C1C : DB H(FAIL) 2253/ C1C : DB L(FAIL) AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 40 - 1/16/2008 0:30:10 2254/ C1C : ENDM 2255/ C1C : 2256/ C1C : TSTN MACRO FAIL 2257/ C1C : DB H((TSTNUM-1) & 0x0FFF) 2258/ C1C : DB L((TSTNUM-1) & 0x0FFF) 2259/ C1C : DB H(FAIL) 2260/ C1C : DB L(FAIL) 2261/ C1C : ENDM 2262/ C1C : 2263/ C1C : JUMP MACRO ADR 2264/ C1C : DB H(ADR & 0x0FFF | JMPBITH) 2265/ C1C : DB L(ADR & 0x0FFF | JMPBITH) 2266/ C1C : ENDM 2267/ C1C : 2268/ C1C : CALL MACRO ADR 2269/ C1C : DB H(ADR & 0x0FFF | CALBITH) 2270/ C1C : DB L(ADR & 0x0FFF | CALBITH) 2271/ C1C : ENDM 2272/ C1C : 2273/ C1C : DO MACRO ADR 2274/ C1C : IFNB ADR 2275/ C1C : DB H((ADR-1) & 0x0FFF) 2276/ C1C : DB L((ADR-1) & 0x0FFF) 2277/ C1C : SHIFT 2278/ C1C : DO ALLARGS 2279/ C1C : ENDIF 2280/ C1C : ENDM 2281/ C1C : 2282/ C1C : 2283/ C1C : 2284/ C1C : ;************************************* 2285/ C1C : ;* I. L. TABLE * 2286/ C1C : ;************************************* 2287/ C1C : 2288/ C1C : (MACRO) START: DO NLINE 2288/ C1C : =>NOT BLANK IFNB NLINE 2288/ C1C : 02 DB H((NLINE-1) & 0x0FFF) 2288/ C1D : 0C DB L((NLINE-1) & 0x0FFF) 2288/ C1E : SHIFT 2288/ C1E : (MACRO) DO 2288/ C1E : =>BLANK IFNB 2288/ C1E : DB H((-1) & 0x0FFF) 2288/ C1E : DB L((-1) & 0x0FFF) 2288/ C1E : SHIFT 2288/ C1E : DO 2288/ C1E : [2288] ENDIF 2288/ C1E : [2288] ENDIF 2289/ C1E : (MACRO) PROMPT: DO GETL 2289/ C1E : =>NOT BLANK IFNB GETL 2289/ C1E : 07 DB H((GETL-1) & 0x0FFF) 2289/ C1F : 56 DB L((GETL-1) & 0x0FFF) 2289/ C20 : SHIFT 2289/ C20 : (MACRO) DO 2289/ C20 : =>BLANK IFNB 2289/ C20 : DB H((-1) & 0x0FFF) 2289/ C20 : DB L((-1) & 0x0FFF) 2289/ C20 : SHIFT 2289/ C20 : DO 2289/ C20 : [2289] ENDIF 2289/ C20 : [2289] ENDIF AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 41 - 1/16/2008 0:30:10 2290/ C20 : (MACRO) TSTCR PRMPT1 2290/ C20 : 2C DB H(PRMPT1 & 0x0FFF | TSTBITH) 2290/ C21 : 25 DB L(PRMPT1 & 0x0FFF | TSTBITH) 2290/ C22 : 8D DB 0x0D|0x80 2291/ C23 : (MACRO) JUMP PROMPT 2291/ C23 : 4C DB H(PROMPT & 0x0FFF | JMPBITH) 2291/ C24 : 1E DB L(PROMPT & 0x0FFF | JMPBITH) 2292/ C25 : (MACRO) PRMPT1: TSTN LIST 2292/ C25 : 06 DB H((TSTNUM-1) & 0x0FFF) 2292/ C26 : AB DB L((TSTNUM-1) & 0x0FFF) 2292/ C27 : 0C DB H(LIST) 2292/ C28 : 35 DB L(LIST) 2293/ C29 : (MACRO) DO FNDPGE,XCHGP1,POPAE,FNDLBL,INSRT 2293/ C29 : =>NOT BLANK IFNB FNDPGE 2293/ C29 : 0B DB H((FNDPGE-1) & 0x0FFF) 2293/ C2A : 97 DB L((FNDPGE-1) & 0x0FFF) 2293/ C2B : SHIFT 2293/ C2B : (MACRO) DO XCHGP1,POPAE,FNDLBL,INSRT 2293/ C2B : =>NOT BLANK IFNB XCHGP1 2293/ C2B : 06 DB H((XCHGP1-1) & 0x0FFF) 2293/ C2C : 30 DB L((XCHGP1-1) & 0x0FFF) 2293/ C2D : SHIFT 2293/ C2D : (MACRO) DO POPAE,FNDLBL,INSRT 2293/ C2D : =>NOT BLANK IFNB POPAE 2293/ C2D : 09 DB H((POPAE-1) & 0x0FFF) 2293/ C2E : 15 DB L((POPAE-1) & 0x0FFF) 2293/ C2F : SHIFT 2293/ C2F : (MACRO) DO FNDLBL,INSRT 2293/ C2F : =>NOT BLANK IFNB FNDLBL 2293/ C2F : 0B DB H((FNDLBL-1) & 0x0FFF) 2293/ C30 : E1 DB L((FNDLBL-1) & 0x0FFF) 2293/ C31 : SHIFT 2293/ C31 : (MACRO) DO INSRT 2293/ C31 : =>NOT BLANK IFNB INSRT 2293/ C31 : 08 DB H((INSRT-1) & 0x0FFF) 2293/ C32 : 23 DB L((INSRT-1) & 0x0FFF) 2293/ C33 : SHIFT 2293/ C33 : (MACRO) DO 2293/ C33 : =>BLANK IFNB 2293/ C33 : DB H((-1) & 0x0FFF) 2293/ C33 : DB L((-1) & 0x0FFF) 2293/ C33 : SHIFT 2293/ C33 : DO 2293/ C33 : [2293] ENDIF 2293/ C33 : [2293] ENDIF 2293/ C33 : [2293] ENDIF 2293/ C33 : [2293] ENDIF 2293/ C33 : [2293] ENDIF 2293/ C33 : [2293] ENDIF 2294/ C33 : (MACRO) JUMP PROMPT 2294/ C33 : 4C DB H(PROMPT & 0x0FFF | JMPBITH) 2294/ C34 : 1E DB L(PROMPT & 0x0FFF | JMPBITH) 2295/ C35 : 2296/ C35 : (MACRO) LIST: TSTR RUN,"LIS",'T' 2296/ C35 : 2C DB H((RUN & 0x0FFF)| TSTBITH) 2296/ C36 : 51 DB L((RUN & 0x0FFF)| TSTBITH) 2296/ C37 : =>NOT BLANK IFB 'T' 2296/ C37 : DB "LIS" |0x80 2296/ C37 : =>TRUE ELSE 2296/ C37 : 4C 49 53 DB "LIS" AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 42 - 1/16/2008 0:30:10 2296/ C3A : D4 DB 'T' |0x80 2296/ C3B : [2296] ENDIF 2297/ C3B : (MACRO) DO FNDPGE 2297/ C3B : =>NOT BLANK IFNB FNDPGE 2297/ C3B : 0B DB H((FNDPGE-1) & 0x0FFF) 2297/ C3C : 97 DB L((FNDPGE-1) & 0x0FFF) 2297/ C3D : SHIFT 2297/ C3D : (MACRO) DO 2297/ C3D : =>BLANK IFNB 2297/ C3D : DB H((-1) & 0x0FFF) 2297/ C3D : DB L((-1) & 0x0FFF) 2297/ C3D : SHIFT 2297/ C3D : DO 2297/ C3D : [2297] ENDIF 2297/ C3D : [2297] ENDIF 2298/ C3D : (MACRO) TSTN LIST1 2298/ C3D : 06 DB H((TSTNUM-1) & 0x0FFF) 2298/ C3E : AB DB L((TSTNUM-1) & 0x0FFF) 2298/ C3F : 0C DB H(LIST1) 2298/ C40 : 47 DB L(LIST1) 2299/ C41 : (MACRO) DO POPAE,FNDLBL 2299/ C41 : =>NOT BLANK IFNB POPAE 2299/ C41 : 09 DB H((POPAE-1) & 0x0FFF) 2299/ C42 : 15 DB L((POPAE-1) & 0x0FFF) 2299/ C43 : SHIFT 2299/ C43 : (MACRO) DO FNDLBL 2299/ C43 : =>NOT BLANK IFNB FNDLBL 2299/ C43 : 0B DB H((FNDLBL-1) & 0x0FFF) 2299/ C44 : E1 DB L((FNDLBL-1) & 0x0FFF) 2299/ C45 : SHIFT 2299/ C45 : (MACRO) DO 2299/ C45 : =>BLANK IFNB 2299/ C45 : DB H((-1) & 0x0FFF) 2299/ C45 : DB L((-1) & 0x0FFF) 2299/ C45 : SHIFT 2299/ C45 : DO 2299/ C45 : [2299] ENDIF 2299/ C45 : [2299] ENDIF 2299/ C45 : [2299] ENDIF 2300/ C45 : (MACRO) JUMP LIST2 2300/ C45 : 4C DB H(LIST2 & 0x0FFF | JMPBITH) 2300/ C46 : 49 DB L(LIST2 & 0x0FFF | JMPBITH) 2301/ C47 : (MACRO) LIST1: DO CHPAGE 2301/ C47 : =>NOT BLANK IFNB CHPAGE 2301/ C47 : 0B DB H((CHPAGE-1) & 0x0FFF) 2301/ C48 : BD DB L((CHPAGE-1) & 0x0FFF) 2301/ C49 : SHIFT 2301/ C49 : (MACRO) DO 2301/ C49 : =>BLANK IFNB 2301/ C49 : DB H((-1) & 0x0FFF) 2301/ C49 : DB L((-1) & 0x0FFF) 2301/ C49 : SHIFT 2301/ C49 : DO 2301/ C49 : [2301] ENDIF 2301/ C49 : [2301] ENDIF 2302/ C49 : (MACRO) LIST2: DO LST 2302/ C49 : =>NOT BLANK IFNB LST 2302/ C49 : 02 DB H((LST-1) & 0x0FFF) 2302/ C4A : D8 DB L((LST-1) & 0x0FFF) 2302/ C4B : SHIFT AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 43 - 1/16/2008 0:30:10 2302/ C4B : (MACRO) DO 2302/ C4B : =>BLANK IFNB 2302/ C4B : DB H((-1) & 0x0FFF) 2302/ C4B : DB L((-1) & 0x0FFF) 2302/ C4B : SHIFT 2302/ C4B : DO 2302/ C4B : [2302] ENDIF 2302/ C4B : [2302] ENDIF 2303/ C4B : (MACRO) LIST3: CALL PRNUM 2303/ C4B : 8F DB H(PRNUM & 0x0FFF | CALBITH) 2303/ C4C : 2F DB L(PRNUM & 0x0FFF | CALBITH) 2304/ C4D : (MACRO) DO LST3 2304/ C4D : =>NOT BLANK IFNB LST3 2304/ C4D : 03 DB H((LST3-1) & 0x0FFF) 2304/ C4E : 05 DB L((LST3-1) & 0x0FFF) 2304/ C4F : SHIFT 2304/ C4F : (MACRO) DO 2304/ C4F : =>BLANK IFNB 2304/ C4F : DB H((-1) & 0x0FFF) 2304/ C4F : DB L((-1) & 0x0FFF) 2304/ C4F : SHIFT 2304/ C4F : DO 2304/ C4F : [2304] ENDIF 2304/ C4F : [2304] ENDIF 2305/ C4F : (MACRO) JUMP START 2305/ C4F : 4C DB H(START & 0x0FFF | JMPBITH) 2305/ C50 : 1C DB L(START & 0x0FFF | JMPBITH) 2306/ C51 : (MACRO) RUN: TSTR CLR,"RU",'N' 2306/ C51 : 2C DB H((CLR & 0x0FFF)| TSTBITH) 2306/ C52 : 60 DB L((CLR & 0x0FFF)| TSTBITH) 2306/ C53 : =>NOT BLANK IFB 'N' 2306/ C53 : DB "RU" |0x80 2306/ C53 : =>TRUE ELSE 2306/ C53 : 52 55 DB "RU" 2306/ C55 : CE DB 'N' |0x80 2306/ C56 : [2306] ENDIF 2307/ C56 : (MACRO) DO DONE 2307/ C56 : =>NOT BLANK IFNB DONE 2307/ C56 : 01 DB H((DONE-1) & 0x0FFF) 2307/ C57 : 2F DB L((DONE-1) & 0x0FFF) 2307/ C58 : SHIFT 2307/ C58 : (MACRO) DO 2307/ C58 : =>BLANK IFNB 2307/ C58 : DB H((-1) & 0x0FFF) 2307/ C58 : DB L((-1) & 0x0FFF) 2307/ C58 : SHIFT 2307/ C58 : DO 2307/ C58 : [2307] ENDIF 2307/ C58 : [2307] ENDIF 2308/ C58 : (MACRO) BEGIN: DO FNDPGE,CHPAGE,STRT,NXT 2308/ C58 : =>NOT BLANK IFNB FNDPGE 2308/ C58 : 0B DB H((FNDPGE-1) & 0x0FFF) 2308/ C59 : 97 DB L((FNDPGE-1) & 0x0FFF) 2308/ C5A : SHIFT 2308/ C5A : (MACRO) DO CHPAGE,STRT,NXT 2308/ C5A : =>NOT BLANK IFNB CHPAGE 2308/ C5A : 0B DB H((CHPAGE-1) & 0x0FFF) 2308/ C5B : BD DB L((CHPAGE-1) & 0x0FFF) 2308/ C5C : SHIFT 2308/ C5C : (MACRO) DO STRT,NXT AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 44 - 1/16/2008 0:30:10 2308/ C5C : =>NOT BLANK IFNB STRT 2308/ C5C : 02 DB H((STRT-1) & 0x0FFF) 2308/ C5D : BF DB L((STRT-1) & 0x0FFF) 2308/ C5E : SHIFT 2308/ C5E : (MACRO) DO NXT 2308/ C5E : =>NOT BLANK IFNB NXT 2308/ C5E : 02 DB H((NXT-1) & 0x0FFF) 2308/ C5F : 83 DB L((NXT-1) & 0x0FFF) 2308/ C60 : SHIFT 2308/ C60 : (MACRO) DO 2308/ C60 : =>BLANK IFNB 2308/ C60 : DB H((-1) & 0x0FFF) 2308/ C60 : DB L((-1) & 0x0FFF) 2308/ C60 : SHIFT 2308/ C60 : DO 2308/ C60 : [2308] ENDIF 2308/ C60 : [2308] ENDIF 2308/ C60 : [2308] ENDIF 2308/ C60 : [2308] ENDIF 2308/ C60 : [2308] ENDIF 2309/ C60 : (MACRO) CLR: TSTR NEW,"CLEA",'R' 2309/ C60 : 2C DB H((NEW & 0x0FFF)| TSTBITH) 2309/ C61 : 6D DB L((NEW & 0x0FFF)| TSTBITH) 2309/ C62 : =>NOT BLANK IFB 'R' 2309/ C62 : DB "CLEA" |0x80 2309/ C62 : =>TRUE ELSE 2309/ C62 : 43 4C 45 41 DB "CLEA" 2309/ C66 : D2 DB 'R' |0x80 2309/ C67 : [2309] ENDIF 2310/ C67 : (MACRO) DO DONE,CLEAR,NXT 2310/ C67 : =>NOT BLANK IFNB DONE 2310/ C67 : 01 DB H((DONE-1) & 0x0FFF) 2310/ C68 : 2F DB L((DONE-1) & 0x0FFF) 2310/ C69 : SHIFT 2310/ C69 : (MACRO) DO CLEAR,NXT 2310/ C69 : =>NOT BLANK IFNB CLEAR 2310/ C69 : 00 DB H((CLEAR-1) & 0x0FFF) 2310/ C6A : 50 DB L((CLEAR-1) & 0x0FFF) 2310/ C6B : SHIFT 2310/ C6B : (MACRO) DO NXT 2310/ C6B : =>NOT BLANK IFNB NXT 2310/ C6B : 02 DB H((NXT-1) & 0x0FFF) 2310/ C6C : 83 DB L((NXT-1) & 0x0FFF) 2310/ C6D : SHIFT 2310/ C6D : (MACRO) DO 2310/ C6D : =>BLANK IFNB 2310/ C6D : DB H((-1) & 0x0FFF) 2310/ C6D : DB L((-1) & 0x0FFF) 2310/ C6D : SHIFT 2310/ C6D : DO 2310/ C6D : [2310] ENDIF 2310/ C6D : [2310] ENDIF 2310/ C6D : [2310] ENDIF 2310/ C6D : [2310] ENDIF 2311/ C6D : (MACRO) NEW: TSTR STMT,"NE",'W' 2311/ C6D : 2C DB H((STMT & 0x0FFF)| TSTBITH) 2311/ C6E : 86 DB L((STMT & 0x0FFF)| TSTBITH) 2311/ C6F : =>NOT BLANK IFB 'W' 2311/ C6F : DB "NE" |0x80 2311/ C6F : =>TRUE ELSE AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 45 - 1/16/2008 0:30:10 2311/ C6F : 4E 45 DB "NE" 2311/ C71 : D7 DB 'W' |0x80 2311/ C72 : [2311] ENDIF 2312/ C72 : (MACRO) TSTN DFAULT 2312/ C72 : 06 DB H((TSTNUM-1) & 0x0FFF) 2312/ C73 : AB DB L((TSTNUM-1) & 0x0FFF) 2312/ C74 : 0C DB H(DFAULT) 2312/ C75 : 78 DB L(DFAULT) 2313/ C76 : (MACRO) JUMP NEW1 2313/ C76 : 4C DB H(NEW1 & 0x0FFF | JMPBITH) 2313/ C77 : 7A DB L(NEW1 & 0x0FFF | JMPBITH) 2314/ C78 : (MACRO) DFAULT: DO LIT1 2314/ C78 : =>NOT BLANK IFNB LIT1 2314/ C78 : 0A DB H((LIT1-1) & 0x0FFF) 2314/ C79 : 33 DB L((LIT1-1) & 0x0FFF) 2314/ C7A : SHIFT 2314/ C7A : (MACRO) DO 2314/ C7A : =>BLANK IFNB 2314/ C7A : DB H((-1) & 0x0FFF) 2314/ C7A : DB L((-1) & 0x0FFF) 2314/ C7A : SHIFT 2314/ C7A : DO 2314/ C7A : [2314] ENDIF 2314/ C7A : [2314] ENDIF 2315/ C7A : (MACRO) NEW1: DO DONE,POPAE,NUPAGE,FNDPGE,NEWPGM,NXT 2315/ C7A : =>NOT BLANK IFNB DONE 2315/ C7A : 01 DB H((DONE-1) & 0x0FFF) 2315/ C7B : 2F DB L((DONE-1) & 0x0FFF) 2315/ C7C : SHIFT 2315/ C7C : (MACRO) DO POPAE,NUPAGE,FNDPGE,NEWPGM,NXT 2315/ C7C : =>NOT BLANK IFNB POPAE 2315/ C7C : 09 DB H((POPAE-1) & 0x0FFF) 2315/ C7D : 15 DB L((POPAE-1) & 0x0FFF) 2315/ C7E : SHIFT 2315/ C7E : (MACRO) DO NUPAGE,FNDPGE,NEWPGM,NXT 2315/ C7E : =>NOT BLANK IFNB NUPAGE 2315/ C7E : 0B DB H((NUPAGE-1) & 0x0FFF) 2315/ C7F : 8C DB L((NUPAGE-1) & 0x0FFF) 2315/ C80 : SHIFT 2315/ C80 : (MACRO) DO FNDPGE,NEWPGM,NXT 2315/ C80 : =>NOT BLANK IFNB FNDPGE 2315/ C80 : 0B DB H((FNDPGE-1) & 0x0FFF) 2315/ C81 : 97 DB L((FNDPGE-1) & 0x0FFF) 2315/ C82 : SHIFT 2315/ C82 : (MACRO) DO NEWPGM,NXT 2315/ C82 : =>NOT BLANK IFNB NEWPGM 2315/ C82 : 0B DB H((NEWPGM-1) & 0x0FFF) 2315/ C83 : D0 DB L((NEWPGM-1) & 0x0FFF) 2315/ C84 : SHIFT 2315/ C84 : (MACRO) DO NXT 2315/ C84 : =>NOT BLANK IFNB NXT 2315/ C84 : 02 DB H((NXT-1) & 0x0FFF) 2315/ C85 : 83 DB L((NXT-1) & 0x0FFF) 2315/ C86 : SHIFT 2315/ C86 : (MACRO) DO 2315/ C86 : =>BLANK IFNB 2315/ C86 : DB H((-1) & 0x0FFF) 2315/ C86 : DB L((-1) & 0x0FFF) 2315/ C86 : SHIFT 2315/ C86 : DO AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 46 - 1/16/2008 0:30:10 2315/ C86 : [2315] ENDIF 2315/ C86 : [2315] ENDIF 2315/ C86 : [2315] ENDIF 2315/ C86 : [2315] ENDIF 2315/ C86 : [2315] ENDIF 2315/ C86 : [2315] ENDIF 2315/ C86 : [2315] ENDIF 2316/ C86 : (MACRO) STMT: TSTR LET,"LE",'T' 2316/ C86 : 2C DB H((LET & 0x0FFF)| TSTBITH) 2316/ C87 : 8B DB L((LET & 0x0FFF)| TSTBITH) 2316/ C88 : =>NOT BLANK IFB 'T' 2316/ C88 : DB "LE" |0x80 2316/ C88 : =>TRUE ELSE 2316/ C88 : 4C 45 DB "LE" 2316/ C8A : D4 DB 'T' |0x80 2316/ C8B : [2316] ENDIF 2317/ C8B : (MACRO) LET: TSTV AT 2317/ C8B : 04 DB H((TSTVAR-1) & 0x0FFF) 2317/ C8C : E0 DB L((TSTVAR-1) & 0x0FFF) 2317/ C8D : 0C DB H(AT) 2317/ C8E : 9A DB L(AT) 2318/ C8F : (MACRO) TSTR SYNTAX,'=' 2318/ C8F : 2E DB H((SYNTAX & 0x0FFF)| TSTBITH) 2318/ C90 : 2F DB L((SYNTAX & 0x0FFF)| TSTBITH) 2318/ C91 : =>BLANK IFB 2318/ C91 : BD DB '=' |0x80 2318/ C92 : =>FALSE ELSE 2318/ C92 : DB '=' 2318/ C92 : DB |0x80 2318/ C92 : [2318] ENDIF 2319/ C92 : (MACRO) CALL RELEXP 2319/ C92 : 8E DB H(RELEXP & 0x0FFF | CALBITH) 2319/ C93 : 35 DB L(RELEXP & 0x0FFF | CALBITH) 2320/ C94 : (MACRO) DO STORE,DONE,NXT 2320/ C94 : =>NOT BLANK IFNB STORE 2320/ C94 : 04 DB H((STORE-1) & 0x0FFF) 2320/ C95 : C0 DB L((STORE-1) & 0x0FFF) 2320/ C96 : SHIFT 2320/ C96 : (MACRO) DO DONE,NXT 2320/ C96 : =>NOT BLANK IFNB DONE 2320/ C96 : 01 DB H((DONE-1) & 0x0FFF) 2320/ C97 : 2F DB L((DONE-1) & 0x0FFF) 2320/ C98 : SHIFT 2320/ C98 : (MACRO) DO NXT 2320/ C98 : =>NOT BLANK IFNB NXT 2320/ C98 : 02 DB H((NXT-1) & 0x0FFF) 2320/ C99 : 83 DB L((NXT-1) & 0x0FFF) 2320/ C9A : SHIFT 2320/ C9A : (MACRO) DO 2320/ C9A : =>BLANK IFNB 2320/ C9A : DB H((-1) & 0x0FFF) 2320/ C9A : DB L((-1) & 0x0FFF) 2320/ C9A : SHIFT 2320/ C9A : DO 2320/ C9A : [2320] ENDIF 2320/ C9A : [2320] ENDIF 2320/ C9A : [2320] ENDIF 2320/ C9A : [2320] ENDIF 2321/ C9A : (MACRO) AT: TSTR IF, '@' 2321/ C9A : 2C DB H((IF & 0x0FFF)| TSTBITH) AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 47 - 1/16/2008 0:30:11 2321/ C9B : AA DB L((IF & 0x0FFF)| TSTBITH) 2321/ C9C : =>BLANK IFB 2321/ C9C : C0 DB '@' |0x80 2321/ C9D : =>FALSE ELSE 2321/ C9D : DB '@' 2321/ C9D : DB |0x80 2321/ C9D : [2321] ENDIF 2322/ C9D : (MACRO) CALL FACTOR 2322/ C9D : 8E DB H(FACTOR & 0x0FFF | CALBITH) 2322/ C9E : AC DB L(FACTOR & 0x0FFF | CALBITH) 2323/ C9F : (MACRO) TSTR SYNTAX,'=' 2323/ C9F : 2E DB H((SYNTAX & 0x0FFF)| TSTBITH) 2323/ CA0 : 2F DB L((SYNTAX & 0x0FFF)| TSTBITH) 2323/ CA1 : =>BLANK IFB 2323/ CA1 : BD DB '=' |0x80 2323/ CA2 : =>FALSE ELSE 2323/ CA2 : DB '=' 2323/ CA2 : DB |0x80 2323/ CA2 : [2323] ENDIF 2324/ CA2 : (MACRO) CALL RELEXP 2324/ CA2 : 8E DB H(RELEXP & 0x0FFF | CALBITH) 2324/ CA3 : 35 DB L(RELEXP & 0x0FFF | CALBITH) 2325/ CA4 : (MACRO) DO MOVE,DONE,NXT 2325/ CA4 : =>NOT BLANK IFNB MOVE 2325/ CA4 : 08 DB H((MOVE-1) & 0x0FFF) 2325/ CA5 : 07 DB L((MOVE-1) & 0x0FFF) 2325/ CA6 : SHIFT 2325/ CA6 : (MACRO) DO DONE,NXT 2325/ CA6 : =>NOT BLANK IFNB DONE 2325/ CA6 : 01 DB H((DONE-1) & 0x0FFF) 2325/ CA7 : 2F DB L((DONE-1) & 0x0FFF) 2325/ CA8 : SHIFT 2325/ CA8 : (MACRO) DO NXT 2325/ CA8 : =>NOT BLANK IFNB NXT 2325/ CA8 : 02 DB H((NXT-1) & 0x0FFF) 2325/ CA9 : 83 DB L((NXT-1) & 0x0FFF) 2325/ CAA : SHIFT 2325/ CAA : (MACRO) DO 2325/ CAA : =>BLANK IFNB 2325/ CAA : DB H((-1) & 0x0FFF) 2325/ CAA : DB L((-1) & 0x0FFF) 2325/ CAA : SHIFT 2325/ CAA : DO 2325/ CAA : [2325] ENDIF 2325/ CAA : [2325] ENDIF 2325/ CAA : [2325] ENDIF 2325/ CAA : [2325] ENDIF 2326/ CAA : 2327/ CAA : (MACRO) IF: TSTR UNT,"I",'F' 2327/ CAA : 2C DB H((UNT & 0x0FFF)| TSTBITH) 2327/ CAB : BC DB L((UNT & 0x0FFF)| TSTBITH) 2327/ CAC : =>NOT BLANK IFB 'F' 2327/ CAC : DB "I" |0x80 2327/ CAC : =>TRUE ELSE 2327/ CAC : 49 DB "I" 2327/ CAD : C6 DB 'F' |0x80 2327/ CAE : [2327] ENDIF 2328/ CAE : (MACRO) CALL RELEXP 2328/ CAE : 8E DB H(RELEXP & 0x0FFF | CALBITH) 2328/ CAF : 35 DB L(RELEXP & 0x0FFF | CALBITH) AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 48 - 1/16/2008 0:30:11 2329/ CB0 : (MACRO) TSTR IF1,"THE",'N' 2329/ CB0 : 2C DB H((IF1 & 0x0FFF)| TSTBITH) 2329/ CB1 : B6 DB L((IF1 & 0x0FFF)| TSTBITH) 2329/ CB2 : =>NOT BLANK IFB 'N' 2329/ CB2 : DB "THE" |0x80 2329/ CB2 : =>TRUE ELSE 2329/ CB2 : 54 48 45 DB "THE" 2329/ CB5 : CE DB 'N' |0x80 2329/ CB6 : [2329] ENDIF 2330/ CB6 : (MACRO) IF1: DO POPAE,CMPR 2330/ CB6 : =>NOT BLANK IFNB POPAE 2330/ CB6 : 09 DB H((POPAE-1) & 0x0FFF) 2330/ CB7 : 15 DB L((POPAE-1) & 0x0FFF) 2330/ CB8 : SHIFT 2330/ CB8 : (MACRO) DO CMPR 2330/ CB8 : =>NOT BLANK IFNB CMPR 2330/ CB8 : 05 DB H((CMPR-1) & 0x0FFF) 2330/ CB9 : D0 DB L((CMPR-1) & 0x0FFF) 2330/ CBA : SHIFT 2330/ CBA : (MACRO) DO 2330/ CBA : =>BLANK IFNB 2330/ CBA : DB H((-1) & 0x0FFF) 2330/ CBA : DB L((-1) & 0x0FFF) 2330/ CBA : SHIFT 2330/ CBA : DO 2330/ CBA : [2330] ENDIF 2330/ CBA : [2330] ENDIF 2330/ CBA : [2330] ENDIF 2331/ CBA : (MACRO) JUMP STMT 2331/ CBA : 4C DB H(STMT & 0x0FFF | JMPBITH) 2331/ CBB : 86 DB L(STMT & 0x0FFF | JMPBITH) 2332/ CBC : 2333/ CBC : (MACRO) UNT: TSTR DOSTMT,"UNTI",'L' 2333/ CBC : 2C DB H((DOSTMT & 0x0FFF)| TSTBITH) 2333/ CBD : D1 DB L((DOSTMT & 0x0FFF)| TSTBITH) 2333/ CBE : =>NOT BLANK IFB 'L' 2333/ CBE : DB "UNTI" |0x80 2333/ CBE : =>TRUE ELSE 2333/ CBE : 55 4E 54 49 DB "UNTI" 2333/ CC2 : CC DB 'L' |0x80 2333/ CC3 : [2333] ENDIF 2334/ CC3 : (MACRO) DO CKMODE 2334/ CC3 : =>NOT BLANK IFNB CKMODE 2334/ CC3 : 06 DB H((CKMODE-1) & 0x0FFF) 2334/ CC4 : 3B DB L((CKMODE-1) & 0x0FFF) 2334/ CC5 : SHIFT 2334/ CC5 : (MACRO) DO 2334/ CC5 : =>BLANK IFNB 2334/ CC5 : DB H((-1) & 0x0FFF) 2334/ CC5 : DB L((-1) & 0x0FFF) 2334/ CC5 : SHIFT 2334/ CC5 : DO 2334/ CC5 : [2334] ENDIF 2334/ CC5 : [2334] ENDIF 2335/ CC5 : (MACRO) CALL RELEXP 2335/ CC5 : 8E DB H(RELEXP & 0x0FFF | CALBITH) 2335/ CC6 : 35 DB L(RELEXP & 0x0FFF | CALBITH) 2336/ CC7 : (MACRO) DO DONE,POPAE,UNTIL,DETPGE,NXT 2336/ CC7 : =>NOT BLANK IFNB DONE 2336/ CC7 : 01 DB H((DONE-1) & 0x0FFF) AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 49 - 1/16/2008 0:30:11 2336/ CC8 : 2F DB L((DONE-1) & 0x0FFF) 2336/ CC9 : SHIFT 2336/ CC9 : (MACRO) DO POPAE,UNTIL,DETPGE,NXT 2336/ CC9 : =>NOT BLANK IFNB POPAE 2336/ CC9 : 09 DB H((POPAE-1) & 0x0FFF) 2336/ CCA : 15 DB L((POPAE-1) & 0x0FFF) 2336/ CCB : SHIFT 2336/ CCB : (MACRO) DO UNTIL,DETPGE,NXT 2336/ CCB : =>NOT BLANK IFNB UNTIL 2336/ CCB : 09 DB H((UNTIL-1) & 0x0FFF) 2336/ CCC : 27 DB L((UNTIL-1) & 0x0FFF) 2336/ CCD : SHIFT 2336/ CCD : (MACRO) DO DETPGE,NXT 2336/ CCD : =>NOT BLANK IFNB DETPGE 2336/ CCD : 0B DB H((DETPGE-1) & 0x0FFF) 2336/ CCE : C4 DB L((DETPGE-1) & 0x0FFF) 2336/ CCF : SHIFT 2336/ CCF : (MACRO) DO NXT 2336/ CCF : =>NOT BLANK IFNB NXT 2336/ CCF : 02 DB H((NXT-1) & 0x0FFF) 2336/ CD0 : 83 DB L((NXT-1) & 0x0FFF) 2336/ CD1 : SHIFT 2336/ CD1 : (MACRO) DO 2336/ CD1 : =>BLANK IFNB 2336/ CD1 : DB H((-1) & 0x0FFF) 2336/ CD1 : DB L((-1) & 0x0FFF) 2336/ CD1 : SHIFT 2336/ CD1 : DO 2336/ CD1 : [2336] ENDIF 2336/ CD1 : [2336] ENDIF 2336/ CD1 : [2336] ENDIF 2336/ CD1 : [2336] ENDIF 2336/ CD1 : [2336] ENDIF 2336/ CD1 : [2336] ENDIF 2337/ CD1 : 2338/ CD1 : (MACRO) DOSTMT: TSTR GOTO,"D",'O' 2338/ CD1 : 2C DB H((GOTO & 0x0FFF)| TSTBITH) 2338/ CD2 : DD DB L((GOTO & 0x0FFF)| TSTBITH) 2338/ CD3 : =>NOT BLANK IFB 'O' 2338/ CD3 : DB "D" |0x80 2338/ CD3 : =>TRUE ELSE 2338/ CD3 : 44 DB "D" 2338/ CD4 : CF DB 'O' |0x80 2338/ CD5 : [2338] ENDIF 2339/ CD5 : (MACRO) DO CKMODE,DONE,SAVEDO,NXT 2339/ CD5 : =>NOT BLANK IFNB CKMODE 2339/ CD5 : 06 DB H((CKMODE-1) & 0x0FFF) 2339/ CD6 : 3B DB L((CKMODE-1) & 0x0FFF) 2339/ CD7 : SHIFT 2339/ CD7 : (MACRO) DO DONE,SAVEDO,NXT 2339/ CD7 : =>NOT BLANK IFNB DONE 2339/ CD7 : 01 DB H((DONE-1) & 0x0FFF) 2339/ CD8 : 2F DB L((DONE-1) & 0x0FFF) 2339/ CD9 : SHIFT 2339/ CD9 : (MACRO) DO SAVEDO,NXT 2339/ CD9 : =>NOT BLANK IFNB SAVEDO 2339/ CD9 : 09 DB H((SAVEDO-1) & 0x0FFF) 2339/ CDA : 77 DB L((SAVEDO-1) & 0x0FFF) 2339/ CDB : SHIFT 2339/ CDB : (MACRO) DO NXT AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 50 - 1/16/2008 0:30:11 2339/ CDB : =>NOT BLANK IFNB NXT 2339/ CDB : 02 DB H((NXT-1) & 0x0FFF) 2339/ CDC : 83 DB L((NXT-1) & 0x0FFF) 2339/ CDD : SHIFT 2339/ CDD : (MACRO) DO 2339/ CDD : =>BLANK IFNB 2339/ CDD : DB H((-1) & 0x0FFF) 2339/ CDD : DB L((-1) & 0x0FFF) 2339/ CDD : SHIFT 2339/ CDD : DO 2339/ CDD : [2339] ENDIF 2339/ CDD : [2339] ENDIF 2339/ CDD : [2339] ENDIF 2339/ CDD : [2339] ENDIF 2339/ CDD : [2339] ENDIF 2340/ CDD : (MACRO) GOTO: TSTR RETURN,"G",'O' 2340/ CDD : 2D DB H((RETURN & 0x0FFF)| TSTBITH) 2340/ CDE : 00 DB L((RETURN & 0x0FFF)| TSTBITH) 2340/ CDF : =>NOT BLANK IFB 'O' 2340/ CDF : DB "G" |0x80 2340/ CDF : =>TRUE ELSE 2340/ CDF : 47 DB "G" 2340/ CE0 : CF DB 'O' |0x80 2340/ CE1 : [2340] ENDIF 2341/ CE1 : (MACRO) TSTR GOSUB,"T",'O' 2341/ CE1 : 2C DB H((GOSUB & 0x0FFF)| TSTBITH) 2341/ CE2 : EB DB L((GOSUB & 0x0FFF)| TSTBITH) 2341/ CE3 : =>NOT BLANK IFB 'O' 2341/ CE3 : DB "T" |0x80 2341/ CE3 : =>TRUE ELSE 2341/ CE3 : 54 DB "T" 2341/ CE4 : CF DB 'O' |0x80 2341/ CE5 : [2341] ENDIF 2342/ CE5 : (MACRO) CALL RELEXP 2342/ CE5 : 8E DB H(RELEXP & 0x0FFF | CALBITH) 2342/ CE6 : 35 DB L(RELEXP & 0x0FFF | CALBITH) 2343/ CE7 : (MACRO) DO DONE 2343/ CE7 : =>NOT BLANK IFNB DONE 2343/ CE7 : 01 DB H((DONE-1) & 0x0FFF) 2343/ CE8 : 2F DB L((DONE-1) & 0x0FFF) 2343/ CE9 : SHIFT 2343/ CE9 : (MACRO) DO 2343/ CE9 : =>BLANK IFNB 2343/ CE9 : DB H((-1) & 0x0FFF) 2343/ CE9 : DB L((-1) & 0x0FFF) 2343/ CE9 : SHIFT 2343/ CE9 : DO 2343/ CE9 : [2343] ENDIF 2343/ CE9 : [2343] ENDIF 2344/ CE9 : (MACRO) JUMP TBL001 2344/ CE9 : 4C DB H(TBL001 & 0x0FFF | JMPBITH) 2344/ CEA : F6 DB L(TBL001 & 0x0FFF | JMPBITH) 2345/ CEB : (MACRO) GOSUB: TSTR SYNTAX,"SU",'B' 2345/ CEB : 2E DB H((SYNTAX & 0x0FFF)| TSTBITH) 2345/ CEC : 2F DB L((SYNTAX & 0x0FFF)| TSTBITH) 2345/ CED : =>NOT BLANK IFB 'B' 2345/ CED : DB "SU" |0x80 2345/ CED : =>TRUE ELSE 2345/ CED : 53 55 DB "SU" 2345/ CEF : C2 DB 'B' |0x80 AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 51 - 1/16/2008 0:30:11 2345/ CF0 : [2345] ENDIF 2346/ CF0 : (MACRO) CALL RELEXP 2346/ CF0 : 8E DB H(RELEXP & 0x0FFF | CALBITH) 2346/ CF1 : 35 DB L(RELEXP & 0x0FFF | CALBITH) 2347/ CF2 : (MACRO) DO DONE,SAV 2347/ CF2 : =>NOT BLANK IFNB DONE 2347/ CF2 : 01 DB H((DONE-1) & 0x0FFF) 2347/ CF3 : 2F DB L((DONE-1) & 0x0FFF) 2347/ CF4 : SHIFT 2347/ CF4 : (MACRO) DO SAV 2347/ CF4 : =>NOT BLANK IFNB SAV 2347/ CF4 : 01 DB H((SAV-1) & 0x0FFF) 2347/ CF5 : 09 DB L((SAV-1) & 0x0FFF) 2347/ CF6 : SHIFT 2347/ CF6 : (MACRO) DO 2347/ CF6 : =>BLANK IFNB 2347/ CF6 : DB H((-1) & 0x0FFF) 2347/ CF6 : DB L((-1) & 0x0FFF) 2347/ CF6 : SHIFT 2347/ CF6 : DO 2347/ CF6 : [2347] ENDIF 2347/ CF6 : [2347] ENDIF 2347/ CF6 : [2347] ENDIF 2348/ CF6 : (MACRO) TBL001: DO FNDPGE, POPAE,FNDLBL,XFER,NXT 2348/ CF6 : =>NOT BLANK IFNB FNDPGE 2348/ CF6 : 0B DB H((FNDPGE-1) & 0x0FFF) 2348/ CF7 : 97 DB L((FNDPGE-1) & 0x0FFF) 2348/ CF8 : SHIFT 2348/ CF8 : (MACRO) DO POPAE,FNDLBL,XFER,NXT 2348/ CF8 : =>NOT BLANK IFNB POPAE 2348/ CF8 : 09 DB H((POPAE-1) & 0x0FFF) 2348/ CF9 : 15 DB L((POPAE-1) & 0x0FFF) 2348/ CFA : SHIFT 2348/ CFA : (MACRO) DO FNDLBL,XFER,NXT 2348/ CFA : =>NOT BLANK IFNB FNDLBL 2348/ CFA : 0B DB H((FNDLBL-1) & 0x0FFF) 2348/ CFB : E1 DB L((FNDLBL-1) & 0x0FFF) 2348/ CFC : SHIFT 2348/ CFC : (MACRO) DO XFER,NXT 2348/ CFC : =>NOT BLANK IFNB XFER 2348/ CFC : 01 DB H((XFER-1) & 0x0FFF) 2348/ CFD : 68 DB L((XFER-1) & 0x0FFF) 2348/ CFE : SHIFT 2348/ CFE : (MACRO) DO NXT 2348/ CFE : =>NOT BLANK IFNB NXT 2348/ CFE : 02 DB H((NXT-1) & 0x0FFF) 2348/ CFF : 83 DB L((NXT-1) & 0x0FFF) 2348/ D00 : SHIFT 2348/ D00 : (MACRO) DO 2348/ D00 : =>BLANK IFNB 2348/ D00 : DB H((-1) & 0x0FFF) 2348/ D00 : DB L((-1) & 0x0FFF) 2348/ D00 : SHIFT 2348/ D00 : DO 2348/ D00 : [2348] ENDIF 2348/ D00 : [2348] ENDIF 2348/ D00 : [2348] ENDIF 2348/ D00 : [2348] ENDIF 2348/ D00 : [2348] ENDIF 2348/ D00 : [2348] ENDIF AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 52 - 1/16/2008 0:30:11 2349/ D00 : 2350/ D00 : (MACRO) RETURN: TSTR NEXT,"RETUR",'N' 2350/ D00 : 2D DB H((NEXT & 0x0FFF)| TSTBITH) 2350/ D01 : 10 DB L((NEXT & 0x0FFF)| TSTBITH) 2350/ D02 : =>NOT BLANK IFB 'N' 2350/ D02 : DB "RETUR" |0x80 2350/ D02 : =>TRUE ELSE 2350/ D02 : 52 45 54 55 52 DB "RETUR" 2350/ D07 : CE DB 'N' |0x80 2350/ D08 : [2350] ENDIF 2351/ D08 : (MACRO) DO DONE,RSTR,DETPGE,NXT 2351/ D08 : =>NOT BLANK IFNB DONE 2351/ D08 : 01 DB H((DONE-1) & 0x0FFF) 2351/ D09 : 2F DB L((DONE-1) & 0x0FFF) 2351/ D0A : SHIFT 2351/ D0A : (MACRO) DO RSTR,DETPGE,NXT 2351/ D0A : =>NOT BLANK IFNB RSTR 2351/ D0A : 01 DB H((RSTR-1) & 0x0FFF) 2351/ D0B : 42 DB L((RSTR-1) & 0x0FFF) 2351/ D0C : SHIFT 2351/ D0C : (MACRO) DO DETPGE,NXT 2351/ D0C : =>NOT BLANK IFNB DETPGE 2351/ D0C : 0B DB H((DETPGE-1) & 0x0FFF) 2351/ D0D : C4 DB L((DETPGE-1) & 0x0FFF) 2351/ D0E : SHIFT 2351/ D0E : (MACRO) DO NXT 2351/ D0E : =>NOT BLANK IFNB NXT 2351/ D0E : 02 DB H((NXT-1) & 0x0FFF) 2351/ D0F : 83 DB L((NXT-1) & 0x0FFF) 2351/ D10 : SHIFT 2351/ D10 : (MACRO) DO 2351/ D10 : =>BLANK IFNB 2351/ D10 : DB H((-1) & 0x0FFF) 2351/ D10 : DB L((-1) & 0x0FFF) 2351/ D10 : SHIFT 2351/ D10 : DO 2351/ D10 : [2351] ENDIF 2351/ D10 : [2351] ENDIF 2351/ D10 : [2351] ENDIF 2351/ D10 : [2351] ENDIF 2351/ D10 : [2351] ENDIF 2352/ D10 : (MACRO) NEXT: TSTR FOR,"NEX",'T' 2352/ D10 : 2D DB H((FOR & 0x0FFF)| TSTBITH) 2352/ D11 : 2A DB L((FOR & 0x0FFF)| TSTBITH) 2352/ D12 : =>NOT BLANK IFB 'T' 2352/ D12 : DB "NEX" |0x80 2352/ D12 : =>TRUE ELSE 2352/ D12 : 4E 45 58 DB "NEX" 2352/ D15 : D4 DB 'T' |0x80 2352/ D16 : [2352] ENDIF 2353/ D16 : (MACRO) DO CKMODE 2353/ D16 : =>NOT BLANK IFNB CKMODE 2353/ D16 : 06 DB H((CKMODE-1) & 0x0FFF) 2353/ D17 : 3B DB L((CKMODE-1) & 0x0FFF) 2353/ D18 : SHIFT 2353/ D18 : (MACRO) DO 2353/ D18 : =>BLANK IFNB 2353/ D18 : DB H((-1) & 0x0FFF) 2353/ D18 : DB L((-1) & 0x0FFF) 2353/ D18 : SHIFT AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 53 - 1/16/2008 0:30:11 2353/ D18 : DO 2353/ D18 : [2353] ENDIF 2353/ D18 : [2353] ENDIF 2354/ D18 : (MACRO) TSTV SYNTAX 2354/ D18 : 04 DB H((TSTVAR-1) & 0x0FFF) 2354/ D19 : E0 DB L((TSTVAR-1) & 0x0FFF) 2354/ D1A : 0E DB H(SYNTAX) 2354/ D1B : 2F DB L(SYNTAX) 2355/ D1C : (MACRO) DO DONE,NEXTV 2355/ D1C : =>NOT BLANK IFNB DONE 2355/ D1C : 01 DB H((DONE-1) & 0x0FFF) 2355/ D1D : 2F DB L((DONE-1) & 0x0FFF) 2355/ D1E : SHIFT 2355/ D1E : (MACRO) DO NEXTV 2355/ D1E : =>NOT BLANK IFNB NEXTV 2355/ D1E : 0A DB H((NEXTV-1) & 0x0FFF) 2355/ D1F : 88 DB L((NEXTV-1) & 0x0FFF) 2355/ D20 : SHIFT 2355/ D20 : (MACRO) DO 2355/ D20 : =>BLANK IFNB 2355/ D20 : DB H((-1) & 0x0FFF) 2355/ D20 : DB L((-1) & 0x0FFF) 2355/ D20 : SHIFT 2355/ D20 : DO 2355/ D20 : [2355] ENDIF 2355/ D20 : [2355] ENDIF 2355/ D20 : [2355] ENDIF 2356/ D20 : (MACRO) CALL GTROP 2356/ D20 : 8E DB H(GTROP & 0x0FFF | CALBITH) 2356/ D21 : 5F DB L(GTROP & 0x0FFF | CALBITH) 2357/ D22 : (MACRO) DO POPAE, NEXTV1,DETPGE,NXT 2357/ D22 : =>NOT BLANK IFNB POPAE 2357/ D22 : 09 DB H((POPAE-1) & 0x0FFF) 2357/ D23 : 15 DB L((POPAE-1) & 0x0FFF) 2357/ D24 : SHIFT 2357/ D24 : (MACRO) DO NEXTV1,DETPGE,NXT 2357/ D24 : =>NOT BLANK IFNB NEXTV1 2357/ D24 : 0A DB H((NEXTV1-1) & 0x0FFF) 2357/ D25 : ED DB L((NEXTV1-1) & 0x0FFF) 2357/ D26 : SHIFT 2357/ D26 : (MACRO) DO DETPGE,NXT 2357/ D26 : =>NOT BLANK IFNB DETPGE 2357/ D26 : 0B DB H((DETPGE-1) & 0x0FFF) 2357/ D27 : C4 DB L((DETPGE-1) & 0x0FFF) 2357/ D28 : SHIFT 2357/ D28 : (MACRO) DO NXT 2357/ D28 : =>NOT BLANK IFNB NXT 2357/ D28 : 02 DB H((NXT-1) & 0x0FFF) 2357/ D29 : 83 DB L((NXT-1) & 0x0FFF) 2357/ D2A : SHIFT 2357/ D2A : (MACRO) DO 2357/ D2A : =>BLANK IFNB 2357/ D2A : DB H((-1) & 0x0FFF) 2357/ D2A : DB L((-1) & 0x0FFF) 2357/ D2A : SHIFT 2357/ D2A : DO 2357/ D2A : [2357] ENDIF 2357/ D2A : [2357] ENDIF 2357/ D2A : [2357] ENDIF 2357/ D2A : [2357] ENDIF AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 54 - 1/16/2008 0:30:11 2357/ D2A : [2357] ENDIF 2358/ D2A : 2359/ D2A : (MACRO) FOR: TSTR STAT,"FO",'R' 2359/ D2A : 2D DB H((STAT & 0x0FFF)| TSTBITH) 2359/ D2B : 54 DB L((STAT & 0x0FFF)| TSTBITH) 2359/ D2C : =>NOT BLANK IFB 'R' 2359/ D2C : DB "FO" |0x80 2359/ D2C : =>TRUE ELSE 2359/ D2C : 46 4F DB "FO" 2359/ D2E : D2 DB 'R' |0x80 2359/ D2F : [2359] ENDIF 2360/ D2F : (MACRO) DO CKMODE 2360/ D2F : =>NOT BLANK IFNB CKMODE 2360/ D2F : 06 DB H((CKMODE-1) & 0x0FFF) 2360/ D30 : 3B DB L((CKMODE-1) & 0x0FFF) 2360/ D31 : SHIFT 2360/ D31 : (MACRO) DO 2360/ D31 : =>BLANK IFNB 2360/ D31 : DB H((-1) & 0x0FFF) 2360/ D31 : DB L((-1) & 0x0FFF) 2360/ D31 : SHIFT 2360/ D31 : DO 2360/ D31 : [2360] ENDIF 2360/ D31 : [2360] ENDIF 2361/ D31 : (MACRO) TSTV SYNTAX 2361/ D31 : 04 DB H((TSTVAR-1) & 0x0FFF) 2361/ D32 : E0 DB L((TSTVAR-1) & 0x0FFF) 2361/ D33 : 0E DB H(SYNTAX) 2361/ D34 : 2F DB L(SYNTAX) 2362/ D35 : (MACRO) TSTR SYNTAX,'=' 2362/ D35 : 2E DB H((SYNTAX & 0x0FFF)| TSTBITH) 2362/ D36 : 2F DB L((SYNTAX & 0x0FFF)| TSTBITH) 2362/ D37 : =>BLANK IFB 2362/ D37 : BD DB '=' |0x80 2362/ D38 : =>FALSE ELSE 2362/ D38 : DB '=' 2362/ D38 : DB |0x80 2362/ D38 : [2362] ENDIF 2363/ D38 : (MACRO) CALL RELEXP 2363/ D38 : 8E DB H(RELEXP & 0x0FFF | CALBITH) 2363/ D39 : 35 DB L(RELEXP & 0x0FFF | CALBITH) 2364/ D3A : (MACRO) TSTR SYNTAX,"T",'O' 2364/ D3A : 2E DB H((SYNTAX & 0x0FFF)| TSTBITH) 2364/ D3B : 2F DB L((SYNTAX & 0x0FFF)| TSTBITH) 2364/ D3C : =>NOT BLANK IFB 'O' 2364/ D3C : DB "T" |0x80 2364/ D3C : =>TRUE ELSE 2364/ D3C : 54 DB "T" 2364/ D3D : CF DB 'O' |0x80 2364/ D3E : [2364] ENDIF 2365/ D3E : (MACRO) CALL RELEXP 2365/ D3E : 8E DB H(RELEXP & 0x0FFF | CALBITH) 2365/ D3F : 35 DB L(RELEXP & 0x0FFF | CALBITH) 2366/ D40 : (MACRO) TSTR FORI,"STE",'P' 2366/ D40 : 2D DB H((FORI & 0x0FFF)| TSTBITH) 2366/ D41 : 4A DB L((FORI & 0x0FFF)| TSTBITH) 2366/ D42 : =>NOT BLANK IFB 'P' 2366/ D42 : DB "STE" |0x80 2366/ D42 : =>TRUE ELSE 2366/ D42 : 53 54 45 DB "STE" AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 55 - 1/16/2008 0:30:11 2366/ D45 : D0 DB 'P' |0x80 2366/ D46 : [2366] ENDIF 2367/ D46 : (MACRO) CALL RELEXP 2367/ D46 : 8E DB H(RELEXP & 0x0FFF | CALBITH) 2367/ D47 : 35 DB L(RELEXP & 0x0FFF | CALBITH) 2368/ D48 : (MACRO) JUMP FOR2 2368/ D48 : 4D DB H(FOR2 & 0x0FFF | JMPBITH) 2368/ D49 : 4C DB L(FOR2 & 0x0FFF | JMPBITH) 2369/ D4A : (MACRO) FORI: DO LIT1 2369/ D4A : =>NOT BLANK IFNB LIT1 2369/ D4A : 0A DB H((LIT1-1) & 0x0FFF) 2369/ D4B : 33 DB L((LIT1-1) & 0x0FFF) 2369/ D4C : SHIFT 2369/ D4C : (MACRO) DO 2369/ D4C : =>BLANK IFNB 2369/ D4C : DB H((-1) & 0x0FFF) 2369/ D4C : DB L((-1) & 0x0FFF) 2369/ D4C : SHIFT 2369/ D4C : DO 2369/ D4C : [2369] ENDIF 2369/ D4C : [2369] ENDIF 2370/ D4C : (MACRO) FOR2: DO DONE,SAVFOR,STORE,NXT 2370/ D4C : =>NOT BLANK IFNB DONE 2370/ D4C : 01 DB H((DONE-1) & 0x0FFF) 2370/ D4D : 2F DB L((DONE-1) & 0x0FFF) 2370/ D4E : SHIFT 2370/ D4E : (MACRO) DO SAVFOR,STORE,NXT 2370/ D4E : =>NOT BLANK IFNB SAVFOR 2370/ D4E : 0A DB H((SAVFOR-1) & 0x0FFF) 2370/ D4F : 45 DB L((SAVFOR-1) & 0x0FFF) 2370/ D50 : SHIFT 2370/ D50 : (MACRO) DO STORE,NXT 2370/ D50 : =>NOT BLANK IFNB STORE 2370/ D50 : 04 DB H((STORE-1) & 0x0FFF) 2370/ D51 : C0 DB L((STORE-1) & 0x0FFF) 2370/ D52 : SHIFT 2370/ D52 : (MACRO) DO NXT 2370/ D52 : =>NOT BLANK IFNB NXT 2370/ D52 : 02 DB H((NXT-1) & 0x0FFF) 2370/ D53 : 83 DB L((NXT-1) & 0x0FFF) 2370/ D54 : SHIFT 2370/ D54 : (MACRO) DO 2370/ D54 : =>BLANK IFNB 2370/ D54 : DB H((-1) & 0x0FFF) 2370/ D54 : DB L((-1) & 0x0FFF) 2370/ D54 : SHIFT 2370/ D54 : DO 2370/ D54 : [2370] ENDIF 2370/ D54 : [2370] ENDIF 2370/ D54 : [2370] ENDIF 2370/ D54 : [2370] ENDIF 2370/ D54 : [2370] ENDIF 2371/ D54 : 2372/ D54 : (MACRO) STAT: TSTR PGE,"STA",'T' 2372/ D54 : 2D DB H((PGE & 0x0FFF)| TSTBITH) 2372/ D55 : 67 DB L((PGE & 0x0FFF)| TSTBITH) 2372/ D56 : =>NOT BLANK IFB 'T' 2372/ D56 : DB "STA" |0x80 2372/ D56 : =>TRUE ELSE 2372/ D56 : 53 54 41 DB "STA" AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 56 - 1/16/2008 0:30:11 2372/ D59 : D4 DB 'T' |0x80 2372/ D5A : [2372] ENDIF 2373/ D5A : (MACRO) TSTR SYNTAX,'=' 2373/ D5A : 2E DB H((SYNTAX & 0x0FFF)| TSTBITH) 2373/ D5B : 2F DB L((SYNTAX & 0x0FFF)| TSTBITH) 2373/ D5C : =>BLANK IFB 2373/ D5C : BD DB '=' |0x80 2373/ D5D : =>FALSE ELSE 2373/ D5D : DB '=' 2373/ D5D : DB |0x80 2373/ D5D : [2373] ENDIF 2374/ D5D : (MACRO) CALL RELEXP 2374/ D5D : 8E DB H(RELEXP & 0x0FFF | CALBITH) 2374/ D5E : 35 DB L(RELEXP & 0x0FFF | CALBITH) 2375/ D5F : (MACRO) DO POPAE,MOVESR 2375/ D5F : =>NOT BLANK IFNB POPAE 2375/ D5F : 09 DB H((POPAE-1) & 0x0FFF) 2375/ D60 : 15 DB L((POPAE-1) & 0x0FFF) 2375/ D61 : SHIFT 2375/ D61 : (MACRO) DO MOVESR 2375/ D61 : =>NOT BLANK IFNB MOVESR 2375/ D61 : 09 DB H((MOVESR-1) & 0x0FFF) 2375/ D62 : 4C DB L((MOVESR-1) & 0x0FFF) 2375/ D63 : SHIFT 2375/ D63 : (MACRO) DO 2375/ D63 : =>BLANK IFNB 2375/ D63 : DB H((-1) & 0x0FFF) 2375/ D63 : DB L((-1) & 0x0FFF) 2375/ D63 : SHIFT 2375/ D63 : DO 2375/ D63 : [2375] ENDIF 2375/ D63 : [2375] ENDIF 2375/ D63 : [2375] ENDIF 2376/ D63 : (MACRO) DO DONE,NXT 2376/ D63 : =>NOT BLANK IFNB DONE 2376/ D63 : 01 DB H((DONE-1) & 0x0FFF) 2376/ D64 : 2F DB L((DONE-1) & 0x0FFF) 2376/ D65 : SHIFT 2376/ D65 : (MACRO) DO NXT 2376/ D65 : =>NOT BLANK IFNB NXT 2376/ D65 : 02 DB H((NXT-1) & 0x0FFF) 2376/ D66 : 83 DB L((NXT-1) & 0x0FFF) 2376/ D67 : SHIFT 2376/ D67 : (MACRO) DO 2376/ D67 : =>BLANK IFNB 2376/ D67 : DB H((-1) & 0x0FFF) 2376/ D67 : DB L((-1) & 0x0FFF) 2376/ D67 : SHIFT 2376/ D67 : DO 2376/ D67 : [2376] ENDIF 2376/ D67 : [2376] ENDIF 2376/ D67 : [2376] ENDIF 2377/ D67 : 2378/ D67 : (MACRO) PGE: TSTR DOLLAR,"PAG",'E' 2378/ D67 : 2D DB H((DOLLAR & 0x0FFF)| TSTBITH) 2378/ D68 : 7E DB L((DOLLAR & 0x0FFF)| TSTBITH) 2378/ D69 : =>NOT BLANK IFB 'E' 2378/ D69 : DB "PAG" |0x80 2378/ D69 : =>TRUE ELSE 2378/ D69 : 50 41 47 DB "PAG" AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 57 - 1/16/2008 0:30:11 2378/ D6C : C5 DB 'E' |0x80 2378/ D6D : [2378] ENDIF 2379/ D6D : (MACRO) TSTR SYNTAX,'=' 2379/ D6D : 2E DB H((SYNTAX & 0x0FFF)| TSTBITH) 2379/ D6E : 2F DB L((SYNTAX & 0x0FFF)| TSTBITH) 2379/ D6F : =>BLANK IFB 2379/ D6F : BD DB '=' |0x80 2379/ D70 : =>FALSE ELSE 2379/ D70 : DB '=' 2379/ D70 : DB |0x80 2379/ D70 : [2379] ENDIF 2380/ D70 : (MACRO) CALL RELEXP 2380/ D70 : 8E DB H(RELEXP & 0x0FFF | CALBITH) 2380/ D71 : 35 DB L(RELEXP & 0x0FFF | CALBITH) 2381/ D72 : (MACRO) DO DONE,POPAE,NUPAGE,FNDPGE,CHPAGE,NXT 2381/ D72 : =>NOT BLANK IFNB DONE 2381/ D72 : 01 DB H((DONE-1) & 0x0FFF) 2381/ D73 : 2F DB L((DONE-1) & 0x0FFF) 2381/ D74 : SHIFT 2381/ D74 : (MACRO) DO POPAE,NUPAGE,FNDPGE,CHPAGE,NXT 2381/ D74 : =>NOT BLANK IFNB POPAE 2381/ D74 : 09 DB H((POPAE-1) & 0x0FFF) 2381/ D75 : 15 DB L((POPAE-1) & 0x0FFF) 2381/ D76 : SHIFT 2381/ D76 : (MACRO) DO NUPAGE,FNDPGE,CHPAGE,NXT 2381/ D76 : =>NOT BLANK IFNB NUPAGE 2381/ D76 : 0B DB H((NUPAGE-1) & 0x0FFF) 2381/ D77 : 8C DB L((NUPAGE-1) & 0x0FFF) 2381/ D78 : SHIFT 2381/ D78 : (MACRO) DO FNDPGE,CHPAGE,NXT 2381/ D78 : =>NOT BLANK IFNB FNDPGE 2381/ D78 : 0B DB H((FNDPGE-1) & 0x0FFF) 2381/ D79 : 97 DB L((FNDPGE-1) & 0x0FFF) 2381/ D7A : SHIFT 2381/ D7A : (MACRO) DO CHPAGE,NXT 2381/ D7A : =>NOT BLANK IFNB CHPAGE 2381/ D7A : 0B DB H((CHPAGE-1) & 0x0FFF) 2381/ D7B : BD DB L((CHPAGE-1) & 0x0FFF) 2381/ D7C : SHIFT 2381/ D7C : (MACRO) DO NXT 2381/ D7C : =>NOT BLANK IFNB NXT 2381/ D7C : 02 DB H((NXT-1) & 0x0FFF) 2381/ D7D : 83 DB L((NXT-1) & 0x0FFF) 2381/ D7E : SHIFT 2381/ D7E : (MACRO) DO 2381/ D7E : =>BLANK IFNB 2381/ D7E : DB H((-1) & 0x0FFF) 2381/ D7E : DB L((-1) & 0x0FFF) 2381/ D7E : SHIFT 2381/ D7E : DO 2381/ D7E : [2381] ENDIF 2381/ D7E : [2381] ENDIF 2381/ D7E : [2381] ENDIF 2381/ D7E : [2381] ENDIF 2381/ D7E : [2381] ENDIF 2381/ D7E : [2381] ENDIF 2381/ D7E : [2381] ENDIF 2382/ D7E : 2383/ D7E : (MACRO) DOLLAR: TSTR PRINT,'$' 2383/ D7E : 2D DB H((PRINT & 0x0FFF)| TSTBITH) AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 58 - 1/16/2008 0:30:11 2383/ D7F : 9E DB L((PRINT & 0x0FFF)| TSTBITH) 2383/ D80 : =>BLANK IFB 2383/ D80 : A4 DB '$' |0x80 2383/ D81 : =>FALSE ELSE 2383/ D81 : DB '$' 2383/ D81 : DB |0x80 2383/ D81 : [2383] ENDIF 2384/ D81 : (MACRO) CALL FACTOR 2384/ D81 : 8E DB H(FACTOR & 0x0FFF | CALBITH) 2384/ D82 : AC DB L(FACTOR & 0x0FFF | CALBITH) 2385/ D83 : (MACRO) TSTR SYNTAX,'=' 2385/ D83 : 2E DB H((SYNTAX & 0x0FFF)| TSTBITH) 2385/ D84 : 2F DB L((SYNTAX & 0x0FFF)| TSTBITH) 2385/ D85 : =>BLANK IFB 2385/ D85 : BD DB '=' |0x80 2385/ D86 : =>FALSE ELSE 2385/ D86 : DB '=' 2385/ D86 : DB |0x80 2385/ D86 : [2385] ENDIF 2386/ D86 : (MACRO) TSTR DOLR1, '"' 2386/ D86 : 2D DB H((DOLR1 & 0x0FFF)| TSTBITH) 2386/ D87 : 8F DB L((DOLR1 & 0x0FFF)| TSTBITH) 2386/ D88 : =>BLANK IFB 2386/ D88 : A2 DB '"' |0x80 2386/ D89 : =>FALSE ELSE 2386/ D89 : DB '"' 2386/ D89 : DB |0x80 2386/ D89 : [2386] ENDIF 2387/ D89 : (MACRO) DO POPAE,PUTSTR 2387/ D89 : =>NOT BLANK IFNB POPAE 2387/ D89 : 09 DB H((POPAE-1) & 0x0FFF) 2387/ D8A : 15 DB L((POPAE-1) & 0x0FFF) 2387/ D8B : SHIFT 2387/ D8B : (MACRO) DO PUTSTR 2387/ D8B : =>NOT BLANK IFNB PUTSTR 2387/ D8B : 0B DB H((PUTSTR-1) & 0x0FFF) 2387/ D8C : 35 DB L((PUTSTR-1) & 0x0FFF) 2387/ D8D : SHIFT 2387/ D8D : (MACRO) DO 2387/ D8D : =>BLANK IFNB 2387/ D8D : DB H((-1) & 0x0FFF) 2387/ D8D : DB L((-1) & 0x0FFF) 2387/ D8D : SHIFT 2387/ D8D : DO 2387/ D8D : [2387] ENDIF 2387/ D8D : [2387] ENDIF 2387/ D8D : [2387] ENDIF 2388/ D8D : (MACRO) JUMP DOLR2 2388/ D8D : 4D DB H(DOLR2 & 0x0FFF | JMPBITH) 2388/ D8E : 9A DB L(DOLR2 & 0x0FFF | JMPBITH) 2389/ D8F : (MACRO) DOLR1: TSTR SYNTAX,'$' 2389/ D8F : 2E DB H((SYNTAX & 0x0FFF)| TSTBITH) 2389/ D90 : 2F DB L((SYNTAX & 0x0FFF)| TSTBITH) 2389/ D91 : =>BLANK IFB 2389/ D91 : A4 DB '$' |0x80 2389/ D92 : =>FALSE ELSE 2389/ D92 : DB '$' 2389/ D92 : DB |0x80 2389/ D92 : [2389] ENDIF 2390/ D92 : (MACRO) CALL FACTOR AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 59 - 1/16/2008 0:30:11 2390/ D92 : 8E DB H(FACTOR & 0x0FFF | CALBITH) 2390/ D93 : AC DB L(FACTOR & 0x0FFF | CALBITH) 2391/ D94 : (MACRO) DO XCHGP1,MOVSTR,XCHGP1 2391/ D94 : =>NOT BLANK IFNB XCHGP1 2391/ D94 : 06 DB H((XCHGP1-1) & 0x0FFF) 2391/ D95 : 30 DB L((XCHGP1-1) & 0x0FFF) 2391/ D96 : SHIFT 2391/ D96 : (MACRO) DO MOVSTR,XCHGP1 2391/ D96 : =>NOT BLANK IFNB MOVSTR 2391/ D96 : 0B DB H((MOVSTR-1) & 0x0FFF) 2391/ D97 : 55 DB L((MOVSTR-1) & 0x0FFF) 2391/ D98 : SHIFT 2391/ D98 : (MACRO) DO XCHGP1 2391/ D98 : =>NOT BLANK IFNB XCHGP1 2391/ D98 : 06 DB H((XCHGP1-1) & 0x0FFF) 2391/ D99 : 30 DB L((XCHGP1-1) & 0x0FFF) 2391/ D9A : SHIFT 2391/ D9A : (MACRO) DO 2391/ D9A : =>BLANK IFNB 2391/ D9A : DB H((-1) & 0x0FFF) 2391/ D9A : DB L((-1) & 0x0FFF) 2391/ D9A : SHIFT 2391/ D9A : DO 2391/ D9A : [2391] ENDIF 2391/ D9A : [2391] ENDIF 2391/ D9A : [2391] ENDIF 2391/ D9A : [2391] ENDIF 2392/ D9A : (MACRO) DOLR2: DO DONE,NXT 2392/ D9A : =>NOT BLANK IFNB DONE 2392/ D9A : 01 DB H((DONE-1) & 0x0FFF) 2392/ D9B : 2F DB L((DONE-1) & 0x0FFF) 2392/ D9C : SHIFT 2392/ D9C : (MACRO) DO NXT 2392/ D9C : =>NOT BLANK IFNB NXT 2392/ D9C : 02 DB H((NXT-1) & 0x0FFF) 2392/ D9D : 83 DB L((NXT-1) & 0x0FFF) 2392/ D9E : SHIFT 2392/ D9E : (MACRO) DO 2392/ D9E : =>BLANK IFNB 2392/ D9E : DB H((-1) & 0x0FFF) 2392/ D9E : DB L((-1) & 0x0FFF) 2392/ D9E : SHIFT 2392/ D9E : DO 2392/ D9E : [2392] ENDIF 2392/ D9E : [2392] ENDIF 2392/ D9E : [2392] ENDIF 2393/ D9E : 2394/ D9E : (MACRO) PRINT: TSTR INPUT,"P",'R' 2394/ D9E : 2D DB H((INPUT & 0x0FFF)| TSTBITH) 2394/ D9F : D1 DB L((INPUT & 0x0FFF)| TSTBITH) 2394/ DA0 : =>NOT BLANK IFB 'R' 2394/ DA0 : DB "P" |0x80 2394/ DA0 : =>TRUE ELSE 2394/ DA0 : 50 DB "P" 2394/ DA1 : D2 DB 'R' |0x80 2394/ DA2 : [2394] ENDIF 2395/ DA2 : (MACRO) TSTR PR1,"IN",'T' 2395/ DA2 : 2D DB H((PR1 & 0x0FFF)| TSTBITH) 2395/ DA3 : A7 DB L((PR1 & 0x0FFF)| TSTBITH) 2395/ DA4 : =>NOT BLANK IFB 'T' AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 60 - 1/16/2008 0:30:11 2395/ DA4 : DB "IN" |0x80 2395/ DA4 : =>TRUE ELSE 2395/ DA4 : 49 4E DB "IN" 2395/ DA6 : D4 DB 'T' |0x80 2395/ DA7 : [2395] ENDIF 2396/ DA7 : (MACRO) PR1: TSTR PR2,'"' 2396/ DA7 : 2D DB H((PR2 & 0x0FFF)| TSTBITH) 2396/ DA8 : AE DB L((PR2 & 0x0FFF)| TSTBITH) 2396/ DA9 : =>BLANK IFB 2396/ DA9 : A2 DB '"' |0x80 2396/ DAA : =>FALSE ELSE 2396/ DAA : DB '"' 2396/ DAA : DB |0x80 2396/ DAA : [2396] ENDIF 2397/ DAA : (MACRO) DO PRS 2397/ DAA : =>NOT BLANK IFNB PRS 2397/ DAA : 01 DB H((PRS-1) & 0x0FFF) 2397/ DAB : 75 DB L((PRS-1) & 0x0FFF) 2397/ DAC : SHIFT 2397/ DAC : (MACRO) DO 2397/ DAC : =>BLANK IFNB 2397/ DAC : DB H((-1) & 0x0FFF) 2397/ DAC : DB L((-1) & 0x0FFF) 2397/ DAC : SHIFT 2397/ DAC : DO 2397/ DAC : [2397] ENDIF 2397/ DAC : [2397] ENDIF 2398/ DAC : (MACRO) JUMP COMMA 2398/ DAC : 4D DB H(COMMA & 0x0FFF | JMPBITH) 2398/ DAD : C1 DB L(COMMA & 0x0FFF | JMPBITH) 2399/ DAE : (MACRO) PR2: TSTR PR3,'$' 2399/ DAE : 2D DB H((PR3 & 0x0FFF)| TSTBITH) 2399/ DAF : BD DB L((PR3 & 0x0FFF)| TSTBITH) 2399/ DB0 : =>BLANK IFB 2399/ DB0 : A4 DB '$' |0x80 2399/ DB1 : =>FALSE ELSE 2399/ DB1 : DB '$' 2399/ DB1 : DB |0x80 2399/ DB1 : [2399] ENDIF 2400/ DB1 : (MACRO) CALL FACTOR 2400/ DB1 : 8E DB H(FACTOR & 0x0FFF | CALBITH) 2400/ DB2 : AC DB L(FACTOR & 0x0FFF | CALBITH) 2401/ DB3 : (MACRO) DO XCHGP1,POPAE,PSTRNG,XCHGP1 2401/ DB3 : =>NOT BLANK IFNB XCHGP1 2401/ DB3 : 06 DB H((XCHGP1-1) & 0x0FFF) 2401/ DB4 : 30 DB L((XCHGP1-1) & 0x0FFF) 2401/ DB5 : SHIFT 2401/ DB5 : (MACRO) DO POPAE,PSTRNG,XCHGP1 2401/ DB5 : =>NOT BLANK IFNB POPAE 2401/ DB5 : 09 DB H((POPAE-1) & 0x0FFF) 2401/ DB6 : 15 DB L((POPAE-1) & 0x0FFF) 2401/ DB7 : SHIFT 2401/ DB7 : (MACRO) DO PSTRNG,XCHGP1 2401/ DB7 : =>NOT BLANK IFNB PSTRNG 2401/ DB7 : 0B DB H((PSTRNG-1) & 0x0FFF) 2401/ DB8 : 09 DB L((PSTRNG-1) & 0x0FFF) 2401/ DB9 : SHIFT 2401/ DB9 : (MACRO) DO XCHGP1 2401/ DB9 : =>NOT BLANK IFNB XCHGP1 2401/ DB9 : 06 DB H((XCHGP1-1) & 0x0FFF) AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 61 - 1/16/2008 0:30:11 2401/ DBA : 30 DB L((XCHGP1-1) & 0x0FFF) 2401/ DBB : SHIFT 2401/ DBB : (MACRO) DO 2401/ DBB : =>BLANK IFNB 2401/ DBB : DB H((-1) & 0x0FFF) 2401/ DBB : DB L((-1) & 0x0FFF) 2401/ DBB : SHIFT 2401/ DBB : DO 2401/ DBB : [2401] ENDIF 2401/ DBB : [2401] ENDIF 2401/ DBB : [2401] ENDIF 2401/ DBB : [2401] ENDIF 2401/ DBB : [2401] ENDIF 2402/ DBB : (MACRO) JUMP COMMA 2402/ DBB : 4D DB H(COMMA & 0x0FFF | JMPBITH) 2402/ DBC : C1 DB L(COMMA & 0x0FFF | JMPBITH) 2403/ DBD : (MACRO) PR3: CALL RELEXP 2403/ DBD : 8E DB H(RELEXP & 0x0FFF | CALBITH) 2403/ DBE : 35 DB L(RELEXP & 0x0FFF | CALBITH) 2404/ DBF : (MACRO) CALL PRNUM 2404/ DBF : 8F DB H(PRNUM & 0x0FFF | CALBITH) 2404/ DC0 : 2F DB L(PRNUM & 0x0FFF | CALBITH) 2405/ DC1 : (MACRO) COMMA: TSTR PR4,',' 2405/ DC1 : 2D DB H((PR4 & 0x0FFF)| TSTBITH) 2405/ DC2 : C6 DB L((PR4 & 0x0FFF)| TSTBITH) 2405/ DC3 : =>BLANK IFB 2405/ DC3 : AC DB ',' |0x80 2405/ DC4 : =>FALSE ELSE 2405/ DC4 : DB ',' 2405/ DC4 : DB |0x80 2405/ DC4 : [2405] ENDIF 2406/ DC4 : (MACRO) JUMP PR1 2406/ DC4 : 4D DB H(PR1 & 0x0FFF | JMPBITH) 2406/ DC5 : A7 DB L(PR1 & 0x0FFF | JMPBITH) 2407/ DC6 : (MACRO) PR4: TSTR PR5,';' 2407/ DC6 : 2D DB H((PR5 & 0x0FFF)| TSTBITH) 2407/ DC7 : CB DB L((PR5 & 0x0FFF)| TSTBITH) 2407/ DC8 : =>BLANK IFB 2407/ DC8 : BB DB ';' |0x80 2407/ DC9 : =>FALSE ELSE 2407/ DC9 : DB ';' 2407/ DC9 : DB |0x80 2407/ DC9 : [2407] ENDIF 2408/ DC9 : (MACRO) JUMP PR6 2408/ DC9 : 4D DB H(PR6 & 0x0FFF | JMPBITH) 2408/ DCA : CD DB L(PR6 & 0x0FFF | JMPBITH) 2409/ DCB : (MACRO) PR5: DO NLINE 2409/ DCB : =>NOT BLANK IFNB NLINE 2409/ DCB : 02 DB H((NLINE-1) & 0x0FFF) 2409/ DCC : 0C DB L((NLINE-1) & 0x0FFF) 2409/ DCD : SHIFT 2409/ DCD : (MACRO) DO 2409/ DCD : =>BLANK IFNB 2409/ DCD : DB H((-1) & 0x0FFF) 2409/ DCD : DB L((-1) & 0x0FFF) 2409/ DCD : SHIFT 2409/ DCD : DO 2409/ DCD : [2409] ENDIF 2409/ DCD : [2409] ENDIF 2410/ DCD : (MACRO) PR6: DO DONE, NXT AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 62 - 1/16/2008 0:30:11 2410/ DCD : =>NOT BLANK IFNB DONE 2410/ DCD : 01 DB H((DONE-1) & 0x0FFF) 2410/ DCE : 2F DB L((DONE-1) & 0x0FFF) 2410/ DCF : SHIFT 2410/ DCF : (MACRO) DO NXT 2410/ DCF : =>NOT BLANK IFNB NXT 2410/ DCF : 02 DB H((NXT-1) & 0x0FFF) 2410/ DD0 : 83 DB L((NXT-1) & 0x0FFF) 2410/ DD1 : SHIFT 2410/ DD1 : (MACRO) DO 2410/ DD1 : =>BLANK IFNB 2410/ DD1 : DB H((-1) & 0x0FFF) 2410/ DD1 : DB L((-1) & 0x0FFF) 2410/ DD1 : SHIFT 2410/ DD1 : DO 2410/ DD1 : [2410] ENDIF 2410/ DD1 : [2410] ENDIF 2410/ DD1 : [2410] ENDIF 2411/ DD1 : (MACRO) INPUT: TSTR END,"INPU",'T' 2411/ DD1 : 2E DB H((END & 0x0FFF)| TSTBITH) 2411/ DD2 : 09 DB L((END & 0x0FFF)| TSTBITH) 2411/ DD3 : =>NOT BLANK IFB 'T' 2411/ DD3 : DB "INPU" |0x80 2411/ DD3 : =>TRUE ELSE 2411/ DD3 : 49 4E 50 55 DB "INPU" 2411/ DD7 : D4 DB 'T' |0x80 2411/ DD8 : [2411] ENDIF 2412/ DD8 : (MACRO) DO CKMODE 2412/ DD8 : =>NOT BLANK IFNB CKMODE 2412/ DD8 : 06 DB H((CKMODE-1) & 0x0FFF) 2412/ DD9 : 3B DB L((CKMODE-1) & 0x0FFF) 2412/ DDA : SHIFT 2412/ DDA : (MACRO) DO 2412/ DDA : =>BLANK IFNB 2412/ DDA : DB H((-1) & 0x0FFF) 2412/ DDA : DB L((-1) & 0x0FFF) 2412/ DDA : SHIFT 2412/ DDA : DO 2412/ DDA : [2412] ENDIF 2412/ DDA : [2412] ENDIF 2413/ DDA : (MACRO) TSTV IN2 2413/ DDA : 04 DB H((TSTVAR-1) & 0x0FFF) 2413/ DDB : E0 DB L((TSTVAR-1) & 0x0FFF) 2413/ DDC : 0D DB H(IN2) 2413/ DDD : F6 DB L(IN2) 2414/ DDE : (MACRO) DO XCHGP1,GETL 2414/ DDE : =>NOT BLANK IFNB XCHGP1 2414/ DDE : 06 DB H((XCHGP1-1) & 0x0FFF) 2414/ DDF : 30 DB L((XCHGP1-1) & 0x0FFF) 2414/ DE0 : SHIFT 2414/ DE0 : (MACRO) DO GETL 2414/ DE0 : =>NOT BLANK IFNB GETL 2414/ DE0 : 07 DB H((GETL-1) & 0x0FFF) 2414/ DE1 : 56 DB L((GETL-1) & 0x0FFF) 2414/ DE2 : SHIFT 2414/ DE2 : (MACRO) DO 2414/ DE2 : =>BLANK IFNB 2414/ DE2 : DB H((-1) & 0x0FFF) 2414/ DE2 : DB L((-1) & 0x0FFF) 2414/ DE2 : SHIFT AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 63 - 1/16/2008 0:30:11 2414/ DE2 : DO 2414/ DE2 : [2414] ENDIF 2414/ DE2 : [2414] ENDIF 2414/ DE2 : [2414] ENDIF 2415/ DE2 : (MACRO) IN1: CALL RELEXP 2415/ DE2 : 8E DB H(RELEXP & 0x0FFF | CALBITH) 2415/ DE3 : 35 DB L(RELEXP & 0x0FFF | CALBITH) 2416/ DE4 : (MACRO) DO STORE,XCHGP1 2416/ DE4 : =>NOT BLANK IFNB STORE 2416/ DE4 : 04 DB H((STORE-1) & 0x0FFF) 2416/ DE5 : C0 DB L((STORE-1) & 0x0FFF) 2416/ DE6 : SHIFT 2416/ DE6 : (MACRO) DO XCHGP1 2416/ DE6 : =>NOT BLANK IFNB XCHGP1 2416/ DE6 : 06 DB H((XCHGP1-1) & 0x0FFF) 2416/ DE7 : 30 DB L((XCHGP1-1) & 0x0FFF) 2416/ DE8 : SHIFT 2416/ DE8 : (MACRO) DO 2416/ DE8 : =>BLANK IFNB 2416/ DE8 : DB H((-1) & 0x0FFF) 2416/ DE8 : DB L((-1) & 0x0FFF) 2416/ DE8 : SHIFT 2416/ DE8 : DO 2416/ DE8 : [2416] ENDIF 2416/ DE8 : [2416] ENDIF 2416/ DE8 : [2416] ENDIF 2417/ DE8 : (MACRO) TSTR IN3,',' 2417/ DE8 : 2E DB H((IN3 & 0x0FFF)| TSTBITH) 2417/ DE9 : 05 DB L((IN3 & 0x0FFF)| TSTBITH) 2417/ DEA : =>BLANK IFB 2417/ DEA : AC DB ',' |0x80 2417/ DEB : =>FALSE ELSE 2417/ DEB : DB ',' 2417/ DEB : DB |0x80 2417/ DEB : [2417] ENDIF 2418/ DEB : (MACRO) TSTV SYNTAX 2418/ DEB : 04 DB H((TSTVAR-1) & 0x0FFF) 2418/ DEC : E0 DB L((TSTVAR-1) & 0x0FFF) 2418/ DED : 0E DB H(SYNTAX) 2418/ DEE : 2F DB L(SYNTAX) 2419/ DEF : (MACRO) DO XCHGP1 2419/ DEF : =>NOT BLANK IFNB XCHGP1 2419/ DEF : 06 DB H((XCHGP1-1) & 0x0FFF) 2419/ DF0 : 30 DB L((XCHGP1-1) & 0x0FFF) 2419/ DF1 : SHIFT 2419/ DF1 : (MACRO) DO 2419/ DF1 : =>BLANK IFNB 2419/ DF1 : DB H((-1) & 0x0FFF) 2419/ DF1 : DB L((-1) & 0x0FFF) 2419/ DF1 : SHIFT 2419/ DF1 : DO 2419/ DF1 : [2419] ENDIF 2419/ DF1 : [2419] ENDIF 2420/ DF1 : (MACRO) TSTR SYNTAX,',' 2420/ DF1 : 2E DB H((SYNTAX & 0x0FFF)| TSTBITH) 2420/ DF2 : 2F DB L((SYNTAX & 0x0FFF)| TSTBITH) 2420/ DF3 : =>BLANK IFB 2420/ DF3 : AC DB ',' |0x80 2420/ DF4 : =>FALSE ELSE 2420/ DF4 : DB ',' AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 64 - 1/16/2008 0:30:11 2420/ DF4 : DB |0x80 2420/ DF4 : [2420] ENDIF 2421/ DF4 : (MACRO) JUMP IN1 2421/ DF4 : 4D DB H(IN1 & 0x0FFF | JMPBITH) 2421/ DF5 : E2 DB L(IN1 & 0x0FFF | JMPBITH) 2422/ DF6 : (MACRO) IN2: TSTR SYNTAX,'$' 2422/ DF6 : 2E DB H((SYNTAX & 0x0FFF)| TSTBITH) 2422/ DF7 : 2F DB L((SYNTAX & 0x0FFF)| TSTBITH) 2422/ DF8 : =>BLANK IFB 2422/ DF8 : A4 DB '$' |0x80 2422/ DF9 : =>FALSE ELSE 2422/ DF9 : DB '$' 2422/ DF9 : DB |0x80 2422/ DF9 : [2422] ENDIF 2423/ DF9 : (MACRO) CALL FACTOR 2423/ DF9 : 8E DB H(FACTOR & 0x0FFF | CALBITH) 2423/ DFA : AC DB L(FACTOR & 0x0FFF | CALBITH) 2424/ DFB : (MACRO) DO XCHGP1,GETL,POPAE,ISTRNG,XCHGP1 2424/ DFB : =>NOT BLANK IFNB XCHGP1 2424/ DFB : 06 DB H((XCHGP1-1) & 0x0FFF) 2424/ DFC : 30 DB L((XCHGP1-1) & 0x0FFF) 2424/ DFD : SHIFT 2424/ DFD : (MACRO) DO GETL,POPAE,ISTRNG,XCHGP1 2424/ DFD : =>NOT BLANK IFNB GETL 2424/ DFD : 07 DB H((GETL-1) & 0x0FFF) 2424/ DFE : 56 DB L((GETL-1) & 0x0FFF) 2424/ DFF : SHIFT 2424/ DFF : (MACRO) DO POPAE,ISTRNG,XCHGP1 2424/ DFF : =>NOT BLANK IFNB POPAE 2424/ DFF : 09 DB H((POPAE-1) & 0x0FFF) 2424/ E00 : 15 DB L((POPAE-1) & 0x0FFF) 2424/ E01 : SHIFT 2424/ E01 : (MACRO) DO ISTRNG,XCHGP1 2424/ E01 : =>NOT BLANK IFNB ISTRNG 2424/ E01 : 0B DB H((ISTRNG-1) & 0x0FFF) 2424/ E02 : 25 DB L((ISTRNG-1) & 0x0FFF) 2424/ E03 : SHIFT 2424/ E03 : (MACRO) DO XCHGP1 2424/ E03 : =>NOT BLANK IFNB XCHGP1 2424/ E03 : 06 DB H((XCHGP1-1) & 0x0FFF) 2424/ E04 : 30 DB L((XCHGP1-1) & 0x0FFF) 2424/ E05 : SHIFT 2424/ E05 : (MACRO) DO 2424/ E05 : =>BLANK IFNB 2424/ E05 : DB H((-1) & 0x0FFF) 2424/ E05 : DB L((-1) & 0x0FFF) 2424/ E05 : SHIFT 2424/ E05 : DO 2424/ E05 : [2424] ENDIF 2424/ E05 : [2424] ENDIF 2424/ E05 : [2424] ENDIF 2424/ E05 : [2424] ENDIF 2424/ E05 : [2424] ENDIF 2424/ E05 : [2424] ENDIF 2425/ E05 : (MACRO) IN3: DO DONE,NXT 2425/ E05 : =>NOT BLANK IFNB DONE 2425/ E05 : 01 DB H((DONE-1) & 0x0FFF) 2425/ E06 : 2F DB L((DONE-1) & 0x0FFF) 2425/ E07 : SHIFT 2425/ E07 : (MACRO) DO NXT AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 65 - 1/16/2008 0:30:11 2425/ E07 : =>NOT BLANK IFNB NXT 2425/ E07 : 02 DB H((NXT-1) & 0x0FFF) 2425/ E08 : 83 DB L((NXT-1) & 0x0FFF) 2425/ E09 : SHIFT 2425/ E09 : (MACRO) DO 2425/ E09 : =>BLANK IFNB 2425/ E09 : DB H((-1) & 0x0FFF) 2425/ E09 : DB L((-1) & 0x0FFF) 2425/ E09 : SHIFT 2425/ E09 : DO 2425/ E09 : [2425] ENDIF 2425/ E09 : [2425] ENDIF 2425/ E09 : [2425] ENDIF 2426/ E09 : 2427/ E09 : (MACRO) END: TSTR ML,"EN",'D' 2427/ E09 : 2E DB H((ML & 0x0FFF)| TSTBITH) 2427/ E0A : 12 DB L((ML & 0x0FFF)| TSTBITH) 2427/ E0B : =>NOT BLANK IFB 'D' 2427/ E0B : DB "EN" |0x80 2427/ E0B : =>TRUE ELSE 2427/ E0B : 45 4E DB "EN" 2427/ E0D : C4 DB 'D' |0x80 2427/ E0E : [2427] ENDIF 2428/ E0E : (MACRO) DO DONE,BREAK 2428/ E0E : =>NOT BLANK IFNB DONE 2428/ E0E : 01 DB H((DONE-1) & 0x0FFF) 2428/ E0F : 2F DB L((DONE-1) & 0x0FFF) 2428/ E10 : SHIFT 2428/ E10 : (MACRO) DO BREAK 2428/ E10 : =>NOT BLANK IFNB BREAK 2428/ E10 : 02 DB H((BREAK-1) & 0x0FFF) 2428/ E11 : 7F DB L((BREAK-1) & 0x0FFF) 2428/ E12 : SHIFT 2428/ E12 : (MACRO) DO 2428/ E12 : =>BLANK IFNB 2428/ E12 : DB H((-1) & 0x0FFF) 2428/ E12 : DB L((-1) & 0x0FFF) 2428/ E12 : SHIFT 2428/ E12 : DO 2428/ E12 : [2428] ENDIF 2428/ E12 : [2428] ENDIF 2428/ E12 : [2428] ENDIF 2429/ E12 : 2430/ E12 : (MACRO) ML: TSTR REM,"LIN",'K' 2430/ E12 : 2E DB H((REM & 0x0FFF)| TSTBITH) 2430/ E13 : 26 DB L((REM & 0x0FFF)| TSTBITH) 2430/ E14 : =>NOT BLANK IFB 'K' 2430/ E14 : DB "LIN" |0x80 2430/ E14 : =>TRUE ELSE 2430/ E14 : 4C 49 4E DB "LIN" 2430/ E17 : CB DB 'K' |0x80 2430/ E18 : [2430] ENDIF 2431/ E18 : (MACRO) CALL RELEXP 2431/ E18 : 8E DB H(RELEXP & 0x0FFF | CALBITH) 2431/ E19 : 35 DB L(RELEXP & 0x0FFF | CALBITH) 2432/ E1A : (MACRO) DO DONE,XCHGP1,POPAE,CALLML,XCHGP1,NXT 2432/ E1A : =>NOT BLANK IFNB DONE 2432/ E1A : 01 DB H((DONE-1) & 0x0FFF) 2432/ E1B : 2F DB L((DONE-1) & 0x0FFF) 2432/ E1C : SHIFT AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 66 - 1/16/2008 0:30:11 2432/ E1C : (MACRO) DO XCHGP1,POPAE,CALLML,XCHGP1,NXT 2432/ E1C : =>NOT BLANK IFNB XCHGP1 2432/ E1C : 06 DB H((XCHGP1-1) & 0x0FFF) 2432/ E1D : 30 DB L((XCHGP1-1) & 0x0FFF) 2432/ E1E : SHIFT 2432/ E1E : (MACRO) DO POPAE,CALLML,XCHGP1,NXT 2432/ E1E : =>NOT BLANK IFNB POPAE 2432/ E1E : 09 DB H((POPAE-1) & 0x0FFF) 2432/ E1F : 15 DB L((POPAE-1) & 0x0FFF) 2432/ E20 : SHIFT 2432/ E20 : (MACRO) DO CALLML,XCHGP1,NXT 2432/ E20 : =>NOT BLANK IFNB CALLML 2432/ E20 : 09 DB H((CALLML-1) & 0x0FFF) 2432/ E21 : 66 DB L((CALLML-1) & 0x0FFF) 2432/ E22 : SHIFT 2432/ E22 : (MACRO) DO XCHGP1,NXT 2432/ E22 : =>NOT BLANK IFNB XCHGP1 2432/ E22 : 06 DB H((XCHGP1-1) & 0x0FFF) 2432/ E23 : 30 DB L((XCHGP1-1) & 0x0FFF) 2432/ E24 : SHIFT 2432/ E24 : (MACRO) DO NXT 2432/ E24 : =>NOT BLANK IFNB NXT 2432/ E24 : 02 DB H((NXT-1) & 0x0FFF) 2432/ E25 : 83 DB L((NXT-1) & 0x0FFF) 2432/ E26 : SHIFT 2432/ E26 : (MACRO) DO 2432/ E26 : =>BLANK IFNB 2432/ E26 : DB H((-1) & 0x0FFF) 2432/ E26 : DB L((-1) & 0x0FFF) 2432/ E26 : SHIFT 2432/ E26 : DO 2432/ E26 : [2432] ENDIF 2432/ E26 : [2432] ENDIF 2432/ E26 : [2432] ENDIF 2432/ E26 : [2432] ENDIF 2432/ E26 : [2432] ENDIF 2432/ E26 : [2432] ENDIF 2432/ E26 : [2432] ENDIF 2433/ E26 : 2434/ E26 : (MACRO) REM: TSTR SYNTAX,"RE",'M' 2434/ E26 : 2E DB H((SYNTAX & 0x0FFF)| TSTBITH) 2434/ E27 : 2F DB L((SYNTAX & 0x0FFF)| TSTBITH) 2434/ E28 : =>NOT BLANK IFB 'M' 2434/ E28 : DB "RE" |0x80 2434/ E28 : =>TRUE ELSE 2434/ E28 : 52 45 DB "RE" 2434/ E2A : CD DB 'M' |0x80 2434/ E2B : [2434] ENDIF 2435/ E2B : (MACRO) DO IGNORE,NXT 2435/ E2B : =>NOT BLANK IFNB IGNORE 2435/ E2B : 09 DB H((IGNORE-1) & 0x0FFF) 2435/ E2C : B8 DB L((IGNORE-1) & 0x0FFF) 2435/ E2D : SHIFT 2435/ E2D : (MACRO) DO NXT 2435/ E2D : =>NOT BLANK IFNB NXT 2435/ E2D : 02 DB H((NXT-1) & 0x0FFF) 2435/ E2E : 83 DB L((NXT-1) & 0x0FFF) 2435/ E2F : SHIFT 2435/ E2F : (MACRO) DO 2435/ E2F : =>BLANK IFNB AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 67 - 1/16/2008 0:30:11 2435/ E2F : DB H((-1) & 0x0FFF) 2435/ E2F : DB L((-1) & 0x0FFF) 2435/ E2F : SHIFT 2435/ E2F : DO 2435/ E2F : [2435] ENDIF 2435/ E2F : [2435] ENDIF 2435/ E2F : [2435] ENDIF 2436/ E2F : 2437/ E2F : (MACRO) SYNTAX: DO ERR 2437/ E2F : =>NOT BLANK IFNB ERR 2437/ E2F : 02 DB H((ERR-1) & 0x0FFF) 2437/ E30 : 1A DB L((ERR-1) & 0x0FFF) 2437/ E31 : SHIFT 2437/ E31 : (MACRO) DO 2437/ E31 : =>BLANK IFNB 2437/ E31 : DB H((-1) & 0x0FFF) 2437/ E31 : DB L((-1) & 0x0FFF) 2437/ E31 : SHIFT 2437/ E31 : DO 2437/ E31 : [2437] ENDIF 2437/ E31 : [2437] ENDIF 2438/ E31 : (MACRO) ERRNUM: CALL PRNUM 2438/ E31 : 8F DB H(PRNUM & 0x0FFF | CALBITH) 2438/ E32 : 2F DB L(PRNUM & 0x0FFF | CALBITH) 2439/ E33 : (MACRO) DO FIN 2439/ E33 : =>NOT BLANK IFNB FIN 2439/ E33 : 02 DB H((FIN-1) & 0x0FFF) 2439/ E34 : A9 DB L((FIN-1) & 0x0FFF) 2439/ E35 : SHIFT 2439/ E35 : (MACRO) DO 2439/ E35 : =>BLANK IFNB 2439/ E35 : DB H((-1) & 0x0FFF) 2439/ E35 : DB L((-1) & 0x0FFF) 2439/ E35 : SHIFT 2439/ E35 : DO 2439/ E35 : [2439] ENDIF 2439/ E35 : [2439] ENDIF 2440/ E35 : 2441/ E35 : ; NOTE: EACH RELATIONAL OPERATOR (EQ, LEQ, ETC. ) DOES AN 2442/ E35 : ; AUTOMATIC 'RTN' (THIS SAVES VALUABLE BYTES AND TIME) 2443/ E35 : 2444/ E35 : (MACRO) RELEXP: CALL EXPR 2444/ E35 : 8E DB H(EXPR & 0x0FFF | CALBITH) 2444/ E36 : 61 DB L(EXPR & 0x0FFF | CALBITH) 2445/ E37 : (MACRO) TSTR REL1,'=' 2445/ E37 : 2E DB H((REL1 & 0x0FFF)| TSTBITH) 2445/ E38 : 3E DB L((REL1 & 0x0FFF)| TSTBITH) 2445/ E39 : =>BLANK IFB 2445/ E39 : BD DB '=' |0x80 2445/ E3A : =>FALSE ELSE 2445/ E3A : DB '=' 2445/ E3A : DB |0x80 2445/ E3A : [2445] ENDIF 2446/ E3A : (MACRO) CALL EXPR 2446/ E3A : 8E DB H(EXPR & 0x0FFF | CALBITH) 2446/ E3B : 61 DB L(EXPR & 0x0FFF | CALBITH) 2447/ E3C : (MACRO) DO EQ 2447/ E3C : =>NOT BLANK IFNB EQ 2447/ E3C : 05 DB H((EQ-1) & 0x0FFF) 2447/ E3D : 43 DB L((EQ-1) & 0x0FFF) AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 68 - 1/16/2008 0:30:11 2447/ E3E : SHIFT 2447/ E3E : (MACRO) DO 2447/ E3E : =>BLANK IFNB 2447/ E3E : DB H((-1) & 0x0FFF) 2447/ E3E : DB L((-1) & 0x0FFF) 2447/ E3E : SHIFT 2447/ E3E : DO 2447/ E3E : [2447] ENDIF 2447/ E3E : [2447] ENDIF 2448/ E3E : (MACRO) REL1: TSTR REL4,'<' 2448/ E3E : 2E DB H((REL4 & 0x0FFF)| TSTBITH) 2448/ E3F : 53 DB L((REL4 & 0x0FFF)| TSTBITH) 2448/ E40 : =>BLANK IFB 2448/ E40 : BC DB '<' |0x80 2448/ E41 : =>FALSE ELSE 2448/ E41 : DB '<' 2448/ E41 : DB |0x80 2448/ E41 : [2448] ENDIF 2449/ E41 : (MACRO) TSTR REL2,'=' 2449/ E41 : 2E DB H((REL2 & 0x0FFF)| TSTBITH) 2449/ E42 : 48 DB L((REL2 & 0x0FFF)| TSTBITH) 2449/ E43 : =>BLANK IFB 2449/ E43 : BD DB '=' |0x80 2449/ E44 : =>FALSE ELSE 2449/ E44 : DB '=' 2449/ E44 : DB |0x80 2449/ E44 : [2449] ENDIF 2450/ E44 : (MACRO) CALL EXPR 2450/ E44 : 8E DB H(EXPR & 0x0FFF | CALBITH) 2450/ E45 : 61 DB L(EXPR & 0x0FFF | CALBITH) 2451/ E46 : (MACRO) DO LEQ 2451/ E46 : =>NOT BLANK IFNB LEQ 2451/ E46 : 05 DB H((LEQ-1) & 0x0FFF) 2451/ E47 : 4F DB L((LEQ-1) & 0x0FFF) 2451/ E48 : SHIFT 2451/ E48 : (MACRO) DO 2451/ E48 : =>BLANK IFNB 2451/ E48 : DB H((-1) & 0x0FFF) 2451/ E48 : DB L((-1) & 0x0FFF) 2451/ E48 : SHIFT 2451/ E48 : DO 2451/ E48 : [2451] ENDIF 2451/ E48 : [2451] ENDIF 2452/ E48 : (MACRO) REL2: TSTR REL3,'>' 2452/ E48 : 2E DB H((REL3 & 0x0FFF)| TSTBITH) 2452/ E49 : 4F DB L((REL3 & 0x0FFF)| TSTBITH) 2452/ E4A : =>BLANK IFB 2452/ E4A : BE DB '>' |0x80 2452/ E4B : =>FALSE ELSE 2452/ E4B : DB '>' 2452/ E4B : DB |0x80 2452/ E4B : [2452] ENDIF 2453/ E4B : (MACRO) CALL EXPR 2453/ E4B : 8E DB H(EXPR & 0x0FFF | CALBITH) 2453/ E4C : 61 DB L(EXPR & 0x0FFF | CALBITH) 2454/ E4D : (MACRO) DO NEQ 2454/ E4D : =>NOT BLANK IFNB NEQ 2454/ E4D : 05 DB H((NEQ-1) & 0x0FFF) 2454/ E4E : 47 DB L((NEQ-1) & 0x0FFF) 2454/ E4F : SHIFT AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 69 - 1/16/2008 0:30:11 2454/ E4F : (MACRO) DO 2454/ E4F : =>BLANK IFNB 2454/ E4F : DB H((-1) & 0x0FFF) 2454/ E4F : DB L((-1) & 0x0FFF) 2454/ E4F : SHIFT 2454/ E4F : DO 2454/ E4F : [2454] ENDIF 2454/ E4F : [2454] ENDIF 2455/ E4F : (MACRO) REL3: CALL EXPR 2455/ E4F : 8E DB H(EXPR & 0x0FFF | CALBITH) 2455/ E50 : 61 DB L(EXPR & 0x0FFF | CALBITH) 2456/ E51 : (MACRO) DO LSS 2456/ E51 : =>NOT BLANK IFNB LSS 2456/ E51 : 05 DB H((LSS-1) & 0x0FFF) 2456/ E52 : 4B DB L((LSS-1) & 0x0FFF) 2456/ E53 : SHIFT 2456/ E53 : (MACRO) DO 2456/ E53 : =>BLANK IFNB 2456/ E53 : DB H((-1) & 0x0FFF) 2456/ E53 : DB L((-1) & 0x0FFF) 2456/ E53 : SHIFT 2456/ E53 : DO 2456/ E53 : [2456] ENDIF 2456/ E53 : [2456] ENDIF 2457/ E53 : (MACRO) REL4: TSTR RETEXP,'>' 2457/ E53 : 2E DB H((RETEXP & 0x0FFF)| TSTBITH) 2457/ E54 : 8B DB L((RETEXP & 0x0FFF)| TSTBITH) 2457/ E55 : =>BLANK IFB 2457/ E55 : BE DB '>' |0x80 2457/ E56 : =>FALSE ELSE 2457/ E56 : DB '>' 2457/ E56 : DB |0x80 2457/ E56 : [2457] ENDIF 2458/ E56 : (MACRO) TSTR REL5,'=' 2458/ E56 : 2E DB H((REL5 & 0x0FFF)| TSTBITH) 2458/ E57 : 5D DB L((REL5 & 0x0FFF)| TSTBITH) 2458/ E58 : =>BLANK IFB 2458/ E58 : BD DB '=' |0x80 2458/ E59 : =>FALSE ELSE 2458/ E59 : DB '=' 2458/ E59 : DB |0x80 2458/ E59 : [2458] ENDIF 2459/ E59 : (MACRO) CALL EXPR 2459/ E59 : 8E DB H(EXPR & 0x0FFF | CALBITH) 2459/ E5A : 61 DB L(EXPR & 0x0FFF | CALBITH) 2460/ E5B : (MACRO) DO GEQ 2460/ E5B : =>NOT BLANK IFNB GEQ 2460/ E5B : 05 DB H((GEQ-1) & 0x0FFF) 2460/ E5C : 57 DB L((GEQ-1) & 0x0FFF) 2460/ E5D : SHIFT 2460/ E5D : (MACRO) DO 2460/ E5D : =>BLANK IFNB 2460/ E5D : DB H((-1) & 0x0FFF) 2460/ E5D : DB L((-1) & 0x0FFF) 2460/ E5D : SHIFT 2460/ E5D : DO 2460/ E5D : [2460] ENDIF 2460/ E5D : [2460] ENDIF 2461/ E5D : (MACRO) REL5: CALL EXPR 2461/ E5D : 8E DB H(EXPR & 0x0FFF | CALBITH) AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 70 - 1/16/2008 0:30:11 2461/ E5E : 61 DB L(EXPR & 0x0FFF | CALBITH) 2462/ E5F : (MACRO) GTROP: DO GTR 2462/ E5F : =>NOT BLANK IFNB GTR 2462/ E5F : 05 DB H((GTR-1) & 0x0FFF) 2462/ E60 : 53 DB L((GTR-1) & 0x0FFF) 2462/ E61 : SHIFT 2462/ E61 : (MACRO) DO 2462/ E61 : =>BLANK IFNB 2462/ E61 : DB H((-1) & 0x0FFF) 2462/ E61 : DB L((-1) & 0x0FFF) 2462/ E61 : SHIFT 2462/ E61 : DO 2462/ E61 : [2462] ENDIF 2462/ E61 : [2462] ENDIF 2463/ E61 : 2464/ E61 : (MACRO) EXPR: TSTR EX1,'-' 2464/ E61 : 2E DB H((EX1 & 0x0FFF)| TSTBITH) 2464/ E62 : 6A DB L((EX1 & 0x0FFF)| TSTBITH) 2464/ E63 : =>BLANK IFB 2464/ E63 : AD DB '-' |0x80 2464/ E64 : =>FALSE ELSE 2464/ E64 : DB '-' 2464/ E64 : DB |0x80 2464/ E64 : [2464] ENDIF 2465/ E64 : (MACRO) CALL TERM 2465/ E64 : 8E DB H(TERM & 0x0FFF | CALBITH) 2465/ E65 : 8D DB L(TERM & 0x0FFF | CALBITH) 2466/ E66 : (MACRO) DO NEG 2466/ E66 : =>NOT BLANK IFNB NEG 2466/ E66 : 03 DB H((NEG-1) & 0x0FFF) 2466/ E67 : 5A DB L((NEG-1) & 0x0FFF) 2466/ E68 : SHIFT 2466/ E68 : (MACRO) DO 2466/ E68 : =>BLANK IFNB 2466/ E68 : DB H((-1) & 0x0FFF) 2466/ E68 : DB L((-1) & 0x0FFF) 2466/ E68 : SHIFT 2466/ E68 : DO 2466/ E68 : [2466] ENDIF 2466/ E68 : [2466] ENDIF 2467/ E68 : (MACRO) JUMP EX3 2467/ E68 : 4E DB H(EX3 & 0x0FFF | JMPBITH) 2467/ E69 : 6F DB L(EX3 & 0x0FFF | JMPBITH) 2468/ E6A : (MACRO) EX1: TSTR EX2,'+' 2468/ E6A : 2E DB H((EX2 & 0x0FFF)| TSTBITH) 2468/ E6B : 6D DB L((EX2 & 0x0FFF)| TSTBITH) 2468/ E6C : =>BLANK IFB 2468/ E6C : AB DB '+' |0x80 2468/ E6D : =>FALSE ELSE 2468/ E6D : DB '+' 2468/ E6D : DB |0x80 2468/ E6D : [2468] ENDIF 2469/ E6D : (MACRO) EX2: CALL TERM 2469/ E6D : 8E DB H(TERM & 0x0FFF | CALBITH) 2469/ E6E : 8D DB L(TERM & 0x0FFF | CALBITH) 2470/ E6F : (MACRO) EX3: TSTR EX4,'+' 2470/ E6F : 2E DB H((EX4 & 0x0FFF)| TSTBITH) 2470/ E70 : 78 DB L((EX4 & 0x0FFF)| TSTBITH) 2470/ E71 : =>BLANK IFB 2470/ E71 : AB DB '+' |0x80 AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 71 - 1/16/2008 0:30:11 2470/ E72 : =>FALSE ELSE 2470/ E72 : DB '+' 2470/ E72 : DB |0x80 2470/ E72 : [2470] ENDIF 2471/ E72 : (MACRO) CALL TERM 2471/ E72 : 8E DB H(TERM & 0x0FFF | CALBITH) 2471/ E73 : 8D DB L(TERM & 0x0FFF | CALBITH) 2472/ E74 : (MACRO) DO ADD 2472/ E74 : =>NOT BLANK IFNB ADD 2472/ E74 : 03 DB H((ADD-1) & 0x0FFF) 2472/ E75 : 2C DB L((ADD-1) & 0x0FFF) 2472/ E76 : SHIFT 2472/ E76 : (MACRO) DO 2472/ E76 : =>BLANK IFNB 2472/ E76 : DB H((-1) & 0x0FFF) 2472/ E76 : DB L((-1) & 0x0FFF) 2472/ E76 : SHIFT 2472/ E76 : DO 2472/ E76 : [2472] ENDIF 2472/ E76 : [2472] ENDIF 2473/ E76 : (MACRO) JUMP EX3 2473/ E76 : 4E DB H(EX3 & 0x0FFF | JMPBITH) 2473/ E77 : 6F DB L(EX3 & 0x0FFF | JMPBITH) 2474/ E78 : (MACRO) EX4: TSTR EX5,'-' 2474/ E78 : 2E DB H((EX5 & 0x0FFF)| TSTBITH) 2474/ E79 : 81 DB L((EX5 & 0x0FFF)| TSTBITH) 2474/ E7A : =>BLANK IFB 2474/ E7A : AD DB '-' |0x80 2474/ E7B : =>FALSE ELSE 2474/ E7B : DB '-' 2474/ E7B : DB |0x80 2474/ E7B : [2474] ENDIF 2475/ E7B : (MACRO) CALL TERM 2475/ E7B : 8E DB H(TERM & 0x0FFF | CALBITH) 2475/ E7C : 8D DB L(TERM & 0x0FFF | CALBITH) 2476/ E7D : (MACRO) DO SUB 2476/ E7D : =>NOT BLANK IFNB SUB 2476/ E7D : 03 DB H((SUB-1) & 0x0FFF) 2476/ E7E : 43 DB L((SUB-1) & 0x0FFF) 2476/ E7F : SHIFT 2476/ E7F : (MACRO) DO 2476/ E7F : =>BLANK IFNB 2476/ E7F : DB H((-1) & 0x0FFF) 2476/ E7F : DB L((-1) & 0x0FFF) 2476/ E7F : SHIFT 2476/ E7F : DO 2476/ E7F : [2476] ENDIF 2476/ E7F : [2476] ENDIF 2477/ E7F : (MACRO) JUMP EX3 2477/ E7F : 4E DB H(EX3 & 0x0FFF | JMPBITH) 2477/ E80 : 6F DB L(EX3 & 0x0FFF | JMPBITH) 2478/ E81 : (MACRO) EX5: TSTR RETEXP,"O",'R' 2478/ E81 : 2E DB H((RETEXP & 0x0FFF)| TSTBITH) 2478/ E82 : 8B DB L((RETEXP & 0x0FFF)| TSTBITH) 2478/ E83 : =>NOT BLANK IFB 'R' 2478/ E83 : DB "O" |0x80 2478/ E83 : =>TRUE ELSE 2478/ E83 : 4F DB "O" 2478/ E84 : D2 DB 'R' |0x80 2478/ E85 : [2478] ENDIF AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 72 - 1/16/2008 0:30:11 2479/ E85 : (MACRO) CALL TERM 2479/ E85 : 8E DB H(TERM & 0x0FFF | CALBITH) 2479/ E86 : 8D DB L(TERM & 0x0FFF | CALBITH) 2480/ E87 : (MACRO) DO OROP 2480/ E87 : =>NOT BLANK IFNB OROP 2480/ E87 : 05 DB H((OROP-1) & 0x0FFF) 2480/ E88 : EB DB L((OROP-1) & 0x0FFF) 2480/ E89 : SHIFT 2480/ E89 : (MACRO) DO 2480/ E89 : =>BLANK IFNB 2480/ E89 : DB H((-1) & 0x0FFF) 2480/ E89 : DB L((-1) & 0x0FFF) 2480/ E89 : SHIFT 2480/ E89 : DO 2480/ E89 : [2480] ENDIF 2480/ E89 : [2480] ENDIF 2481/ E89 : (MACRO) JUMP EX3 2481/ E89 : 4E DB H(EX3 & 0x0FFF | JMPBITH) 2481/ E8A : 6F DB L(EX3 & 0x0FFF | JMPBITH) 2482/ E8B : (MACRO) RETEXP: DO RTN 2482/ E8B : =>NOT BLANK IFNB RTN 2482/ E8B : 00 DB H((RTN-1) & 0x0FFF) 2482/ E8C : F5 DB L((RTN-1) & 0x0FFF) 2482/ E8D : SHIFT 2482/ E8D : (MACRO) DO 2482/ E8D : =>BLANK IFNB 2482/ E8D : DB H((-1) & 0x0FFF) 2482/ E8D : DB L((-1) & 0x0FFF) 2482/ E8D : SHIFT 2482/ E8D : DO 2482/ E8D : [2482] ENDIF 2482/ E8D : [2482] ENDIF 2483/ E8D : 2484/ E8D : (MACRO) TERM: CALL FACTOR 2484/ E8D : 8E DB H(FACTOR & 0x0FFF | CALBITH) 2484/ E8E : AC DB L(FACTOR & 0x0FFF | CALBITH) 2485/ E8F : (MACRO) Tl: TSTR T2,'*' 2485/ E8F : 2E DB H((T2 & 0x0FFF)| TSTBITH) 2485/ E90 : 98 DB L((T2 & 0x0FFF)| TSTBITH) 2485/ E91 : =>BLANK IFB 2485/ E91 : AA DB '*' |0x80 2485/ E92 : =>FALSE ELSE 2485/ E92 : DB '*' 2485/ E92 : DB |0x80 2485/ E92 : [2485] ENDIF 2486/ E92 : (MACRO) CALL FACTOR 2486/ E92 : 8E DB H(FACTOR & 0x0FFF | CALBITH) 2486/ E93 : AC DB L(FACTOR & 0x0FFF | CALBITH) 2487/ E94 : (MACRO) DO MUL 2487/ E94 : =>NOT BLANK IFNB MUL 2487/ E94 : 03 DB H((MUL-1) & 0x0FFF) 2487/ E95 : 71 DB L((MUL-1) & 0x0FFF) 2487/ E96 : SHIFT 2487/ E96 : (MACRO) DO 2487/ E96 : =>BLANK IFNB 2487/ E96 : DB H((-1) & 0x0FFF) 2487/ E96 : DB L((-1) & 0x0FFF) 2487/ E96 : SHIFT 2487/ E96 : DO 2487/ E96 : [2487] ENDIF AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 73 - 1/16/2008 0:30:11 2487/ E96 : [2487] ENDIF 2488/ E96 : (MACRO) JUMP Tl 2488/ E96 : 4E DB H(TL & 0x0FFF | JMPBITH) 2488/ E97 : 8F DB L(TL & 0x0FFF | JMPBITH) 2489/ E98 : (MACRO) T2: TSTR T3,'/' 2489/ E98 : 2E DB H((T3 & 0x0FFF)| TSTBITH) 2489/ E99 : A1 DB L((T3 & 0x0FFF)| TSTBITH) 2489/ E9A : =>BLANK IFB 2489/ E9A : AF DB '/' |0x80 2489/ E9B : =>FALSE ELSE 2489/ E9B : DB '/' 2489/ E9B : DB |0x80 2489/ E9B : [2489] ENDIF 2490/ E9B : (MACRO) CALL FACTOR 2490/ E9B : 8E DB H(FACTOR & 0x0FFF | CALBITH) 2490/ E9C : AC DB L(FACTOR & 0x0FFF | CALBITH) 2491/ E9D : (MACRO) DO DIV 2491/ E9D : =>NOT BLANK IFNB DIV 2491/ E9D : 04 DB H((DIV-1) & 0x0FFF) 2491/ E9E : 07 DB L((DIV-1) & 0x0FFF) 2491/ E9F : SHIFT 2491/ E9F : (MACRO) DO 2491/ E9F : =>BLANK IFNB 2491/ E9F : DB H((-1) & 0x0FFF) 2491/ E9F : DB L((-1) & 0x0FFF) 2491/ E9F : SHIFT 2491/ E9F : DO 2491/ E9F : [2491] ENDIF 2491/ E9F : [2491] ENDIF 2492/ E9F : (MACRO) JUMP Tl 2492/ E9F : 4E DB H(TL & 0x0FFF | JMPBITH) 2492/ EA0 : 8F DB L(TL & 0x0FFF | JMPBITH) 2493/ EA1 : (MACRO) T3: TSTR RETEXP,"AN",'D' 2493/ EA1 : 2E DB H((RETEXP & 0x0FFF)| TSTBITH) 2493/ EA2 : 8B DB L((RETEXP & 0x0FFF)| TSTBITH) 2493/ EA3 : =>NOT BLANK IFB 'D' 2493/ EA3 : DB "AN" |0x80 2493/ EA3 : =>TRUE ELSE 2493/ EA3 : 41 4E DB "AN" 2493/ EA5 : C4 DB 'D' |0x80 2493/ EA6 : [2493] ENDIF 2494/ EA6 : (MACRO) CALL FACTOR 2494/ EA6 : 8E DB H(FACTOR & 0x0FFF | CALBITH) 2494/ EA7 : AC DB L(FACTOR & 0x0FFF | CALBITH) 2495/ EA8 : (MACRO) DO ANDOP 2495/ EA8 : =>NOT BLANK IFNB ANDOP 2495/ EA8 : 05 DB H((ANDOP-1) & 0x0FFF) 2495/ EA9 : E7 DB L((ANDOP-1) & 0x0FFF) 2495/ EAA : SHIFT 2495/ EAA : (MACRO) DO 2495/ EAA : =>BLANK IFNB 2495/ EAA : DB H((-1) & 0x0FFF) 2495/ EAA : DB L((-1) & 0x0FFF) 2495/ EAA : SHIFT 2495/ EAA : DO 2495/ EAA : [2495] ENDIF 2495/ EAA : [2495] ENDIF 2496/ EAA : (MACRO) JUMP Tl 2496/ EAA : 4E DB H(TL & 0x0FFF | JMPBITH) 2496/ EAB : 8F DB L(TL & 0x0FFF | JMPBITH) AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 74 - 1/16/2008 0:30:11 2497/ EAC : 2498/ EAC : (MACRO) FACTOR: TSTV Fl 2498/ EAC : 04 DB H((TSTVAR-1) & 0x0FFF) 2498/ EAD : E0 DB L((TSTVAR-1) & 0x0FFF) 2498/ EAE : 0E DB H(FL) 2498/ EAF : B4 DB L(FL) 2499/ EB0 : (MACRO) DO IND,RTN 2499/ EB0 : =>NOT BLANK IFNB IND 2499/ EB0 : 05 DB H((IND-1) & 0x0FFF) 2499/ EB1 : 2B DB L((IND-1) & 0x0FFF) 2499/ EB2 : SHIFT 2499/ EB2 : (MACRO) DO RTN 2499/ EB2 : =>NOT BLANK IFNB RTN 2499/ EB2 : 00 DB H((RTN-1) & 0x0FFF) 2499/ EB3 : F5 DB L((RTN-1) & 0x0FFF) 2499/ EB4 : SHIFT 2499/ EB4 : (MACRO) DO 2499/ EB4 : =>BLANK IFNB 2499/ EB4 : DB H((-1) & 0x0FFF) 2499/ EB4 : DB L((-1) & 0x0FFF) 2499/ EB4 : SHIFT 2499/ EB4 : DO 2499/ EB4 : [2499] ENDIF 2499/ EB4 : [2499] ENDIF 2499/ EB4 : [2499] ENDIF 2500/ EB4 : (MACRO) Fl: TSTN F2 2500/ EB4 : 06 DB H((TSTNUM-1) & 0x0FFF) 2500/ EB5 : AB DB L((TSTNUM-1) & 0x0FFF) 2500/ EB6 : 0E DB H(F2) 2500/ EB7 : BA DB L(F2) 2501/ EB8 : (MACRO) DO RTN 2501/ EB8 : =>NOT BLANK IFNB RTN 2501/ EB8 : 00 DB H((RTN-1) & 0x0FFF) 2501/ EB9 : F5 DB L((RTN-1) & 0x0FFF) 2501/ EBA : SHIFT 2501/ EBA : (MACRO) DO 2501/ EBA : =>BLANK IFNB 2501/ EBA : DB H((-1) & 0x0FFF) 2501/ EBA : DB L((-1) & 0x0FFF) 2501/ EBA : SHIFT 2501/ EBA : DO 2501/ EBA : [2501] ENDIF 2501/ EBA : [2501] ENDIF 2502/ EBA : (MACRO) F2: TSTR F3,'#' 2502/ EBA : 2E DB H((F3 & 0x0FFF)| TSTBITH) 2502/ EBB : C1 DB L((F3 & 0x0FFF)| TSTBITH) 2502/ EBC : =>BLANK IFB 2502/ EBC : A3 DB '#' |0x80 2502/ EBD : =>FALSE ELSE 2502/ EBD : DB '#' 2502/ EBD : DB |0x80 2502/ EBD : [2502] ENDIF 2503/ EBD : (MACRO) DO HEX,RTN 2503/ EBD : =>NOT BLANK IFNB HEX 2503/ EBD : 06 DB H((HEX-1) & 0x0FFF) 2503/ EBE : 4B DB L((HEX-1) & 0x0FFF) 2503/ EBF : SHIFT 2503/ EBF : (MACRO) DO RTN 2503/ EBF : =>NOT BLANK IFNB RTN 2503/ EBF : 00 DB H((RTN-1) & 0x0FFF) AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 75 - 1/16/2008 0:30:11 2503/ EC0 : F5 DB L((RTN-1) & 0x0FFF) 2503/ EC1 : SHIFT 2503/ EC1 : (MACRO) DO 2503/ EC1 : =>BLANK IFNB 2503/ EC1 : DB H((-1) & 0x0FFF) 2503/ EC1 : DB L((-1) & 0x0FFF) 2503/ EC1 : SHIFT 2503/ EC1 : DO 2503/ EC1 : [2503] ENDIF 2503/ EC1 : [2503] ENDIF 2503/ EC1 : [2503] ENDIF 2504/ EC1 : (MACRO) F3: TSTR F4,'(' 2504/ EC1 : 2E DB H((F4 & 0x0FFF)| TSTBITH) 2504/ EC2 : CB DB L((F4 & 0x0FFF)| TSTBITH) 2504/ EC3 : =>BLANK IFB 2504/ EC3 : A8 DB '(' |0x80 2504/ EC4 : =>FALSE ELSE 2504/ EC4 : DB '(' 2504/ EC4 : DB |0x80 2504/ EC4 : [2504] ENDIF 2505/ EC4 : (MACRO) CALL RELEXP 2505/ EC4 : 8E DB H(RELEXP & 0x0FFF | CALBITH) 2505/ EC5 : 35 DB L(RELEXP & 0x0FFF | CALBITH) 2506/ EC6 : (MACRO) TSTR SYNTAX,')' 2506/ EC6 : 2E DB H((SYNTAX & 0x0FFF)| TSTBITH) 2506/ EC7 : 2F DB L((SYNTAX & 0x0FFF)| TSTBITH) 2506/ EC8 : =>BLANK IFB 2506/ EC8 : A9 DB ')' |0x80 2506/ EC9 : =>FALSE ELSE 2506/ EC9 : DB ')' 2506/ EC9 : DB |0x80 2506/ EC9 : [2506] ENDIF 2507/ EC9 : (MACRO) DO RTN 2507/ EC9 : =>NOT BLANK IFNB RTN 2507/ EC9 : 00 DB H((RTN-1) & 0x0FFF) 2507/ ECA : F5 DB L((RTN-1) & 0x0FFF) 2507/ ECB : SHIFT 2507/ ECB : (MACRO) DO 2507/ ECB : =>BLANK IFNB 2507/ ECB : DB H((-1) & 0x0FFF) 2507/ ECB : DB L((-1) & 0x0FFF) 2507/ ECB : SHIFT 2507/ ECB : DO 2507/ ECB : [2507] ENDIF 2507/ ECB : [2507] ENDIF 2508/ ECB : (MACRO) F4: TSTR F5,'@' 2508/ ECB : 2E DB H((F5 & 0x0FFF)| TSTBITH) 2508/ ECC : D4 DB L((F5 & 0x0FFF)| TSTBITH) 2508/ ECD : =>BLANK IFB 2508/ ECD : C0 DB '@' |0x80 2508/ ECE : =>FALSE ELSE 2508/ ECE : DB '@' 2508/ ECE : DB |0x80 2508/ ECE : [2508] ENDIF 2509/ ECE : (MACRO) CALL FACTOR 2509/ ECE : 8E DB H(FACTOR & 0x0FFF | CALBITH) 2509/ ECF : AC DB L(FACTOR & 0x0FFF | CALBITH) 2510/ ED0 : (MACRO) DO EVAL,RTN 2510/ ED0 : =>NOT BLANK IFNB EVAL 2510/ ED0 : 07 DB H((EVAL-1) & 0x0FFF) AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 76 - 1/16/2008 0:30:11 2510/ ED1 : E9 DB L((EVAL-1) & 0x0FFF) 2510/ ED2 : SHIFT 2510/ ED2 : (MACRO) DO RTN 2510/ ED2 : =>NOT BLANK IFNB RTN 2510/ ED2 : 00 DB H((RTN-1) & 0x0FFF) 2510/ ED3 : F5 DB L((RTN-1) & 0x0FFF) 2510/ ED4 : SHIFT 2510/ ED4 : (MACRO) DO 2510/ ED4 : =>BLANK IFNB 2510/ ED4 : DB H((-1) & 0x0FFF) 2510/ ED4 : DB L((-1) & 0x0FFF) 2510/ ED4 : SHIFT 2510/ ED4 : DO 2510/ ED4 : [2510] ENDIF 2510/ ED4 : [2510] ENDIF 2510/ ED4 : [2510] ENDIF 2511/ ED4 : (MACRO) F5: TSTR F6,"NO",'T' 2511/ ED4 : 2E DB H((F6 & 0x0FFF)| TSTBITH) 2511/ ED5 : DF DB L((F6 & 0x0FFF)| TSTBITH) 2511/ ED6 : =>NOT BLANK IFB 'T' 2511/ ED6 : DB "NO" |0x80 2511/ ED6 : =>TRUE ELSE 2511/ ED6 : 4E 4F DB "NO" 2511/ ED8 : D4 DB 'T' |0x80 2511/ ED9 : [2511] ENDIF 2512/ ED9 : (MACRO) CALL FACTOR 2512/ ED9 : 8E DB H(FACTOR & 0x0FFF | CALBITH) 2512/ EDA : AC DB L(FACTOR & 0x0FFF | CALBITH) 2513/ EDB : (MACRO) DO NOTOP,RTN 2513/ EDB : =>NOT BLANK IFNB NOTOP 2513/ EDB : 05 DB H((NOTOP-1) & 0x0FFF) 2513/ EDC : EF DB L((NOTOP-1) & 0x0FFF) 2513/ EDD : SHIFT 2513/ EDD : (MACRO) DO RTN 2513/ EDD : =>NOT BLANK IFNB RTN 2513/ EDD : 00 DB H((RTN-1) & 0x0FFF) 2513/ EDE : F5 DB L((RTN-1) & 0x0FFF) 2513/ EDF : SHIFT 2513/ EDF : (MACRO) DO 2513/ EDF : =>BLANK IFNB 2513/ EDF : DB H((-1) & 0x0FFF) 2513/ EDF : DB L((-1) & 0x0FFF) 2513/ EDF : SHIFT 2513/ EDF : DO 2513/ EDF : [2513] ENDIF 2513/ EDF : [2513] ENDIF 2513/ EDF : [2513] ENDIF 2514/ EDF : (MACRO) F6: TSTR F7,"STA",'T' 2514/ EDF : 2E DB H((F7 & 0x0FFF)| TSTBITH) 2514/ EE0 : E9 DB L((F7 & 0x0FFF)| TSTBITH) 2514/ EE1 : =>NOT BLANK IFB 'T' 2514/ EE1 : DB "STA" |0x80 2514/ EE1 : =>TRUE ELSE 2514/ EE1 : 53 54 41 DB "STA" 2514/ EE4 : D4 DB 'T' |0x80 2514/ EE5 : [2514] ENDIF 2515/ EE5 : (MACRO) DO STATUS,RTN 2515/ EE5 : =>NOT BLANK IFNB STATUS 2515/ EE5 : 09 DB H((STATUS-1) & 0x0FFF) 2515/ EE6 : 55 DB L((STATUS-1) & 0x0FFF) AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 77 - 1/16/2008 0:30:11 2515/ EE7 : SHIFT 2515/ EE7 : (MACRO) DO RTN 2515/ EE7 : =>NOT BLANK IFNB RTN 2515/ EE7 : 00 DB H((RTN-1) & 0x0FFF) 2515/ EE8 : F5 DB L((RTN-1) & 0x0FFF) 2515/ EE9 : SHIFT 2515/ EE9 : (MACRO) DO 2515/ EE9 : =>BLANK IFNB 2515/ EE9 : DB H((-1) & 0x0FFF) 2515/ EE9 : DB L((-1) & 0x0FFF) 2515/ EE9 : SHIFT 2515/ EE9 : DO 2515/ EE9 : [2515] ENDIF 2515/ EE9 : [2515] ENDIF 2515/ EE9 : [2515] ENDIF 2516/ EE9 : (MACRO) F7: TSTR F8,"TO",'P' 2516/ EE9 : 2E DB H((F8 & 0x0FFF)| TSTBITH) 2516/ EEA : F4 DB L((F8 & 0x0FFF)| TSTBITH) 2516/ EEB : =>NOT BLANK IFB 'P' 2516/ EEB : DB "TO" |0x80 2516/ EEB : =>TRUE ELSE 2516/ EEB : 54 4F DB "TO" 2516/ EED : D0 DB 'P' |0x80 2516/ EEE : [2516] ENDIF 2517/ EEE : (MACRO) DO FNDPGE,TOP,RTN 2517/ EEE : =>NOT BLANK IFNB FNDPGE 2517/ EEE : 0B DB H((FNDPGE-1) & 0x0FFF) 2517/ EEF : 97 DB L((FNDPGE-1) & 0x0FFF) 2517/ EF0 : SHIFT 2517/ EF0 : (MACRO) DO TOP,RTN 2517/ EF0 : =>NOT BLANK IFNB TOP 2517/ EF0 : 09 DB H((TOP-1) & 0x0FFF) 2517/ EF1 : 93 DB L((TOP-1) & 0x0FFF) 2517/ EF2 : SHIFT 2517/ EF2 : (MACRO) DO RTN 2517/ EF2 : =>NOT BLANK IFNB RTN 2517/ EF2 : 00 DB H((RTN-1) & 0x0FFF) 2517/ EF3 : F5 DB L((RTN-1) & 0x0FFF) 2517/ EF4 : SHIFT 2517/ EF4 : (MACRO) DO 2517/ EF4 : =>BLANK IFNB 2517/ EF4 : DB H((-1) & 0x0FFF) 2517/ EF4 : DB L((-1) & 0x0FFF) 2517/ EF4 : SHIFT 2517/ EF4 : DO 2517/ EF4 : [2517] ENDIF 2517/ EF4 : [2517] ENDIF 2517/ EF4 : [2517] ENDIF 2517/ EF4 : [2517] ENDIF 2518/ EF4 : (MACRO) F8: TSTR F9,"MO",'D' 2518/ EF4 : 2F DB H((F9 & 0x0FFF)| TSTBITH) 2518/ EF5 : 01 DB L((F9 & 0x0FFF)| TSTBITH) 2518/ EF6 : =>NOT BLANK IFB 'D' 2518/ EF6 : DB "MO" |0x80 2518/ EF6 : =>TRUE ELSE 2518/ EF6 : 4D 4F DB "MO" 2518/ EF8 : C4 DB 'D' |0x80 2518/ EF9 : [2518] ENDIF 2519/ EF9 : (MACRO) CALL DOUBLE 2519/ EF9 : 8F DB H(DOUBLE & 0x0FFF | CALBITH) AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 78 - 1/16/2008 0:30:11 2519/ EFA : 20 DB L(DOUBLE & 0x0FFF | CALBITH) 2520/ EFB : (MACRO) DO DIV,MODULO,RTN 2520/ EFB : =>NOT BLANK IFNB DIV 2520/ EFB : 04 DB H((DIV-1) & 0x0FFF) 2520/ EFC : 07 DB L((DIV-1) & 0x0FFF) 2520/ EFD : SHIFT 2520/ EFD : (MACRO) DO MODULO,RTN 2520/ EFD : =>NOT BLANK IFNB MODULO 2520/ EFD : 09 DB H((MODULO-1) & 0x0FFF) 2520/ EFE : BF DB L((MODULO-1) & 0x0FFF) 2520/ EFF : SHIFT 2520/ EFF : (MACRO) DO RTN 2520/ EFF : =>NOT BLANK IFNB RTN 2520/ EFF : 00 DB H((RTN-1) & 0x0FFF) 2520/ F00 : F5 DB L((RTN-1) & 0x0FFF) 2520/ F01 : SHIFT 2520/ F01 : (MACRO) DO 2520/ F01 : =>BLANK IFNB 2520/ F01 : DB H((-1) & 0x0FFF) 2520/ F01 : DB L((-1) & 0x0FFF) 2520/ F01 : SHIFT 2520/ F01 : DO 2520/ F01 : [2520] ENDIF 2520/ F01 : [2520] ENDIF 2520/ F01 : [2520] ENDIF 2520/ F01 : [2520] ENDIF 2521/ F01 : (MACRO) F9: TSTR F10,"RN",'D' 2521/ F01 : 2F DB H((F10 & 0x0FFF)| TSTBITH) 2521/ F02 : 16 DB L((F10 & 0x0FFF)| TSTBITH) 2521/ F03 : =>NOT BLANK IFB 'D' 2521/ F03 : DB "RN" |0x80 2521/ F03 : =>TRUE ELSE 2521/ F03 : 52 4E DB "RN" 2521/ F05 : C4 DB 'D' |0x80 2521/ F06 : [2521] ENDIF 2522/ F06 : (MACRO) CALL DOUBLE 2522/ F06 : 8F DB H(DOUBLE & 0x0FFF | CALBITH) 2522/ F07 : 20 DB L(DOUBLE & 0x0FFF | CALBITH) 2523/ F08 : (MACRO) DO RANDOM,SUB,ADD,DIV,MODULO,ADD,RTN 2523/ F08 : =>NOT BLANK IFNB RANDOM 2523/ F08 : 09 DB H((RANDOM-1) & 0x0FFF) 2523/ F09 : D1 DB L((RANDOM-1) & 0x0FFF) 2523/ F0A : SHIFT 2523/ F0A : (MACRO) DO SUB,ADD,DIV,MODULO,ADD,RTN 2523/ F0A : =>NOT BLANK IFNB SUB 2523/ F0A : 03 DB H((SUB-1) & 0x0FFF) 2523/ F0B : 43 DB L((SUB-1) & 0x0FFF) 2523/ F0C : SHIFT 2523/ F0C : (MACRO) DO ADD,DIV,MODULO,ADD,RTN 2523/ F0C : =>NOT BLANK IFNB ADD 2523/ F0C : 03 DB H((ADD-1) & 0x0FFF) 2523/ F0D : 2C DB L((ADD-1) & 0x0FFF) 2523/ F0E : SHIFT 2523/ F0E : (MACRO) DO DIV,MODULO,ADD,RTN 2523/ F0E : =>NOT BLANK IFNB DIV 2523/ F0E : 04 DB H((DIV-1) & 0x0FFF) 2523/ F0F : 07 DB L((DIV-1) & 0x0FFF) 2523/ F10 : SHIFT 2523/ F10 : (MACRO) DO MODULO,ADD,RTN 2523/ F10 : =>NOT BLANK IFNB MODULO AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 79 - 1/16/2008 0:30:11 2523/ F10 : 09 DB H((MODULO-1) & 0x0FFF) 2523/ F11 : BF DB L((MODULO-1) & 0x0FFF) 2523/ F12 : SHIFT 2523/ F12 : (MACRO) DO ADD,RTN 2523/ F12 : =>NOT BLANK IFNB ADD 2523/ F12 : 03 DB H((ADD-1) & 0x0FFF) 2523/ F13 : 2C DB L((ADD-1) & 0x0FFF) 2523/ F14 : SHIFT 2523/ F14 : (MACRO) DO RTN 2523/ F14 : =>NOT BLANK IFNB RTN 2523/ F14 : 00 DB H((RTN-1) & 0x0FFF) 2523/ F15 : F5 DB L((RTN-1) & 0x0FFF) 2523/ F16 : SHIFT 2523/ F16 : (MACRO) DO 2523/ F16 : =>BLANK IFNB 2523/ F16 : DB H((-1) & 0x0FFF) 2523/ F16 : DB L((-1) & 0x0FFF) 2523/ F16 : SHIFT 2523/ F16 : DO 2523/ F16 : [2523] ENDIF 2523/ F16 : [2523] ENDIF 2523/ F16 : [2523] ENDIF 2523/ F16 : [2523] ENDIF 2523/ F16 : [2523] ENDIF 2523/ F16 : [2523] ENDIF 2523/ F16 : [2523] ENDIF 2523/ F16 : [2523] ENDIF 2524/ F16 : (MACRO) F10: TSTR SYNTAX,"PAG",'E' 2524/ F16 : 2E DB H((SYNTAX & 0x0FFF)| TSTBITH) 2524/ F17 : 2F DB L((SYNTAX & 0x0FFF)| TSTBITH) 2524/ F18 : =>NOT BLANK IFB 'E' 2524/ F18 : DB "PAG" |0x80 2524/ F18 : =>TRUE ELSE 2524/ F18 : 50 41 47 DB "PAG" 2524/ F1B : C5 DB 'E' |0x80 2524/ F1C : [2524] ENDIF 2525/ F1C : (MACRO) DO PUTPGE,RTN 2525/ F1C : =>NOT BLANK IFNB PUTPGE 2525/ F1C : 0B DB H((PUTPGE-1) & 0x0FFF) 2525/ F1D : 7A DB L((PUTPGE-1) & 0x0FFF) 2525/ F1E : SHIFT 2525/ F1E : (MACRO) DO RTN 2525/ F1E : =>NOT BLANK IFNB RTN 2525/ F1E : 00 DB H((RTN-1) & 0x0FFF) 2525/ F1F : F5 DB L((RTN-1) & 0x0FFF) 2525/ F20 : SHIFT 2525/ F20 : (MACRO) DO 2525/ F20 : =>BLANK IFNB 2525/ F20 : DB H((-1) & 0x0FFF) 2525/ F20 : DB L((-1) & 0x0FFF) 2525/ F20 : SHIFT 2525/ F20 : DO 2525/ F20 : [2525] ENDIF 2525/ F20 : [2525] ENDIF 2525/ F20 : [2525] ENDIF 2526/ F20 : 2527/ F20 : (MACRO) DOUBLE: TSTR SYNTAX,'(' 2527/ F20 : 2E DB H((SYNTAX & 0x0FFF)| TSTBITH) 2527/ F21 : 2F DB L((SYNTAX & 0x0FFF)| TSTBITH) 2527/ F22 : =>BLANK IFB AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 80 - 1/16/2008 0:30:11 2527/ F22 : A8 DB '(' |0x80 2527/ F23 : =>FALSE ELSE 2527/ F23 : DB '(' 2527/ F23 : DB |0x80 2527/ F23 : [2527] ENDIF 2528/ F23 : (MACRO) CALL RELEXP 2528/ F23 : 8E DB H(RELEXP & 0x0FFF | CALBITH) 2528/ F24 : 35 DB L(RELEXP & 0x0FFF | CALBITH) 2529/ F25 : (MACRO) TSTR SYNTAX,',' 2529/ F25 : 2E DB H((SYNTAX & 0x0FFF)| TSTBITH) 2529/ F26 : 2F DB L((SYNTAX & 0x0FFF)| TSTBITH) 2529/ F27 : =>BLANK IFB 2529/ F27 : AC DB ',' |0x80 2529/ F28 : =>FALSE ELSE 2529/ F28 : DB ',' 2529/ F28 : DB |0x80 2529/ F28 : [2529] ENDIF 2530/ F28 : (MACRO) CALL RELEXP 2530/ F28 : 8E DB H(RELEXP & 0x0FFF | CALBITH) 2530/ F29 : 35 DB L(RELEXP & 0x0FFF | CALBITH) 2531/ F2A : (MACRO) TSTR SYNTAX,')' 2531/ F2A : 2E DB H((SYNTAX & 0x0FFF)| TSTBITH) 2531/ F2B : 2F DB L((SYNTAX & 0x0FFF)| TSTBITH) 2531/ F2C : =>BLANK IFB 2531/ F2C : A9 DB ')' |0x80 2531/ F2D : =>FALSE ELSE 2531/ F2D : DB ')' 2531/ F2D : DB |0x80 2531/ F2D : [2531] ENDIF 2532/ F2D : (MACRO) DO RTN 2532/ F2D : =>NOT BLANK IFNB RTN 2532/ F2D : 00 DB H((RTN-1) & 0x0FFF) 2532/ F2E : F5 DB L((RTN-1) & 0x0FFF) 2532/ F2F : SHIFT 2532/ F2F : (MACRO) DO 2532/ F2F : =>BLANK IFNB 2532/ F2F : DB H((-1) & 0x0FFF) 2532/ F2F : DB L((-1) & 0x0FFF) 2532/ F2F : SHIFT 2532/ F2F : DO 2532/ F2F : [2532] ENDIF 2532/ F2F : [2532] ENDIF 2533/ F2F : 2534/ F2F : (MACRO) PRNUM: DO XCHGP1,PRN 2534/ F2F : =>NOT BLANK IFNB XCHGP1 2534/ F2F : 06 DB H((XCHGP1-1) & 0x0FFF) 2534/ F30 : 30 DB L((XCHGP1-1) & 0x0FFF) 2534/ F31 : SHIFT 2534/ F31 : (MACRO) DO PRN 2534/ F31 : =>NOT BLANK IFNB PRN 2534/ F31 : 01 DB H((PRN-1) & 0x0FFF) 2534/ F32 : 8E DB L((PRN-1) & 0x0FFF) 2534/ F33 : SHIFT 2534/ F33 : (MACRO) DO 2534/ F33 : =>BLANK IFNB 2534/ F33 : DB H((-1) & 0x0FFF) 2534/ F33 : DB L((-1) & 0x0FFF) 2534/ F33 : SHIFT 2534/ F33 : DO 2534/ F33 : [2534] ENDIF AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 81 - 1/16/2008 0:30:11 2534/ F33 : [2534] ENDIF 2534/ F33 : [2534] ENDIF 2535/ F33 : (MACRO) PRNUM1: DO DIV,PRN1,XCHGP1,RTN 2535/ F33 : =>NOT BLANK IFNB DIV 2535/ F33 : 04 DB H((DIV-1) & 0x0FFF) 2535/ F34 : 07 DB L((DIV-1) & 0x0FFF) 2535/ F35 : SHIFT 2535/ F35 : (MACRO) DO PRN1,XCHGP1,RTN 2535/ F35 : =>NOT BLANK IFNB PRN1 2535/ F35 : 01 DB H((PRN1-1) & 0x0FFF) 2535/ F36 : C5 DB L((PRN1-1) & 0x0FFF) 2535/ F37 : SHIFT 2535/ F37 : (MACRO) DO XCHGP1,RTN 2535/ F37 : =>NOT BLANK IFNB XCHGP1 2535/ F37 : 06 DB H((XCHGP1-1) & 0x0FFF) 2535/ F38 : 30 DB L((XCHGP1-1) & 0x0FFF) 2535/ F39 : SHIFT 2535/ F39 : (MACRO) DO RTN 2535/ F39 : =>NOT BLANK IFNB RTN 2535/ F39 : 00 DB H((RTN-1) & 0x0FFF) 2535/ F3A : F5 DB L((RTN-1) & 0x0FFF) 2535/ F3B : SHIFT 2535/ F3B : (MACRO) DO 2535/ F3B : =>BLANK IFNB 2535/ F3B : DB H((-1) & 0x0FFF) 2535/ F3B : DB L((-1) & 0x0FFF) 2535/ F3B : SHIFT 2535/ F3B : DO 2535/ F3B : [2535] ENDIF 2535/ F3B : [2535] ENDIF 2535/ F3B : [2535] ENDIF 2535/ F3B : [2535] ENDIF 2535/ F3B : [2535] ENDIF 2536/ F3B : 2537/ F3B : 2538/ F3B : ;************************************* 2539/ F3B : ;* ERROR MESSAGES * 2540/ F3B : ;************************************* 2541/ F3B : 2542/ F3B : MESSAGE MACRO A,B 2543/ F3B : DB A 2544/ F3B : DB B |0x80 2545/ F3B : ENDM 2546/ F3B : 2547/ F3B : (MACRO) MESGS: MESSAGE " ERRO",'R' ; 1 2547/ F3B : 20 45 52 52 4F DB " ERRO" 2547/ F40 : D2 DB 'R' |0x80 2548/ F41 : (MACRO) MESSAGE "ARE",'A' ; 2 2548/ F41 : 41 52 45 DB "ARE" 2548/ F44 : C1 DB 'A' |0x80 2549/ F45 : (MACRO) MESSAGE "STM",'T' ; 3 2549/ F45 : 53 54 4D DB "STM" 2549/ F48 : D4 DB 'T' |0x80 2550/ F49 : (MACRO) MESSAGE "CHA",'R' ; 4 2550/ F49 : 43 48 41 DB "CHA" 2550/ F4C : D2 DB 'R' |0x80 2551/ F4D : (MACRO) MESSAGE "SNT",'X' ; 5 2551/ F4D : 53 4E 54 DB "SNT" 2551/ F50 : D8 DB 'X' |0x80 2552/ F51 : (MACRO) MESSAGE "VAL",'U' ; 6 AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 82 - 1/16/2008 0:30:11 2552/ F51 : 56 41 4C DB "VAL" 2552/ F54 : D5 DB 'U' |0x80 2553/ F55 : (MACRO) MESSAGE "END",'"' ; 7 2553/ F55 : 45 4E 44 DB "END" 2553/ F58 : A2 DB '"' |0x80 2554/ F59 : (MACRO) MESSAGE "NOG",'O' ; 8 2554/ F59 : 4E 4F 47 DB "NOG" 2554/ F5C : CF DB 'O' |0x80 2555/ F5D : (MACRO) MESSAGE "RTR",'N' ; 9 2555/ F5D : 52 54 52 DB "RTR" 2555/ F60 : CE DB 'N' |0x80 2556/ F61 : (MACRO) MESSAGE "NES",'T' ; 10 2556/ F61 : 4E 45 53 DB "NES" 2556/ F64 : D4 DB 'T' |0x80 2557/ F65 : (MACRO) MESSAGE "NEX",'T' ; 11 2557/ F65 : 4E 45 58 DB "NEX" 2557/ F68 : D4 DB 'T' |0x80 2558/ F69 : (MACRO) MESSAGE "FO" ,'R' ; 12 2558/ F69 : 46 4F DB "FO" 2558/ F6B : D2 DB 'R' |0x80 2559/ F6C : (MACRO) MESSAGE "DIV",'0' ; 13 2559/ F6C : 44 49 56 DB "DIV" 2559/ F6F : B0 DB '0' |0x80 2560/ F70 : (MACRO) MESSAGE "BR" ,'K' ; 14 2560/ F70 : 42 52 DB "BR" 2560/ F72 : CB DB 'K' |0x80 2561/ F73 : (MACRO) MESSAGE "UNT",'L' ; 15 2561/ F73 : 55 4E 54 DB "UNT" 2561/ F76 : CC DB 'L' |0x80 2562/ F77 : ; 2563/ F77 : 2564/ F77 : ;************************************* 2565/ F77 : ;* GET CHARACTER AND ECHO IT * 2566/ F77 : ;************************************* 2567/ F77 : 2568/ F77 : C4 08 GECO: LDI 8 ;SET COUNT = 8 2569/ F79 : CA EB ST NUM(P2) 2570/ F7B : 06 CSA ;SET READER RELAY 2571/ F7C : DC 02 ORI 2 2572/ F7E : 07 CAS 2573/ F7F : 06 GETCO1: CSA ;WAIT FOR START BIT 2574/ F80 : D4 20 ANI 0x20 2575/ F82 : 9C FB JNZ GETCO1 ;NOT FOUND 2576/ F84 : C4 57 LDI 87 ; DELAY 1/2 BIT TIME 2577/ F86 : 8F 04 DLY 4 2578/ F88 : 06 CSA ; IS START BIT STILL THERE? 2579/ F89 : D4 20 ANI 0x20 2580/ F8B : 9C F2 JNZ GETCO1 ; NO 2581/ F8D : 06 CSA ;SEND START BIT 2582/ F8E : D4 FD ANI 0xFD ; RESET READER RELAY 2583/ F90 : DC 01 ORI 1 2584/ F92 : 07 CAS 2585/ F93 : C4 85 GETCO2: LDI 133 ; DELAY 1 BIT TIME 2586/ F95 : 8F 08 DLY 8 2587/ F97 : 06 CSA ;GET BIT (SENSED) 2588/ F98 : D4 20 ANI 0x20 2589/ F9A : 98 04 JZ GETCO3 2590/ F9C : C4 01 LDI 1 2591/ F9E : 90 04 JMP GETCO4 2592/ FA0 : C4 00 GETCO3: LDI 0 AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 83 - 1/16/2008 0:30:11 2593/ FA2 : 9C 00 JNZ GETCO4 2594/ FA4 : CA EA GETCO4: ST TEMP(P2) ;SAVE BIT VALUE (0 OR 1) 2595/ FA6 : 1F RRL ;ROTATE INTO LINK 2596/ FA7 : 01 XAE 2597/ FA8 : 1D SRL ; SHIFT INTO CHARACTER 2598/ FA9 : 01 XAE ; RETURN CHAR TO E 2599/ FAA : 06 CSA ;ECHO BIT TO OUTPUT 2600/ FAB : DC 01 ORI 1 2601/ FAD : E2 EA XOR TEMP(P2) 2602/ FAF : 07 CAS 2603/ FB0 : BA EB DLD NUM(P2) ;DECREMENT BIT COUNT 2604/ FB2 : 9C DF JNZ GETCO2 ;LOOP UNTIL 0 2605/ FB4 : 06 CSA ;SET STOP BIT 2606/ FB5 : D4 FE ANI 0xFE 2607/ FB7 : 07 CAS 2608/ FB8 : 8F 08 DLY 8 ; DELAY APPROX. 1 BIT TIME 2609/ FBA : 40 LDE ; AC HAS INPUT CHARACTER 2610/ FBB : D4 7F ANI 0x7F 2611/ FBD : 01 XAE 2612/ FBE : 40 LDE 2613/ FBF : 3F XPPC P3 ;RETURN 2614/ FC0 : 90 B5 JMP GECO 2615/ FC2 : 2616/ FC2 : ;************************************* 2617/ FC2 : ;* PRINT CHARACTER AT TTY * 2618/ FC2 : ;************************************* 2619/ FC2 : 2620/ FC2 : 01 PUTC: XAE 2621/ FC3 : C4 FF LDI 255 ; DELAY ALMOST 2622/ FC5 : 8F 17 DLY 23 ; 3 BIT TIMES 2623/ FC7 : 06 CSA ;SET OUTPUT BIT TO LOGIC 0 2624/ FC8 : DC 01 ORI 1 ; FOR START BIT 2625/ FCA : 07 CAS 2626/ FCB : C4 09 LDI 9 ; INITIALIZE BIT COUNT 2627/ FCD : CA E8 ST TEMP3(P2) 2628/ FCF : C4 8A PUTC1: LDI 138 ; DELAY 1 BIT TIME 2629/ FD1 : 8F 08 DLY 8 2630/ FD3 : BA E8 DLD TEMP3(P2) ; DECREMENT BIT COUNT 2631/ FD5 : 98 10 JZ PUTC2 2632/ FD7 : 40 LDE ; PREPARE NEXT BIT 2633/ FD8 : D4 01 ANI 1 2634/ FDA : CA E9 ST TEMP2(P2) 2635/ FDC : 01 XAE 2636/ FDD : 1C SR 2637/ FDE : 01 XAE 2638/ FDF : 06 CSA ; SET UP OUTPUT BIT 2639/ FE0 : DC 01 ORI 1 2640/ FE2 : E2 E9 XOR TEMP2(P2) 2641/ FE4 : 07 CAS ; PUT BIT INTO TTY 2642/ FE5 : 90 E8 JMP PUTC1 2643/ FE7 : 06 PUTC2: CSA ; SET STOP BIT 2644/ FE8 : D4 FE ANI 0xFE 2645/ FEA : 07 CAS 2646/ FEB : 3F XPPC P3 2647/ FEC : 90 D4 JMP PUTC 2648/ FEE : 2649/ FEE : END 0 AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 84 - 1/16/2008 0:30:11 symbol table (* = unused): ------------------------ ADD : 32D C | ADOWN : 889 C | AESTK : 1050 - | AMOVE : 873 C | ANDOP : 5E8 C | AON1 : 5F2 C | AON_0R : 60E C | AON_NT : 620 C | *ARCHITECTURE : i386-unknown-win32 - | AT : C9A C | BEGIN : C58 C | *BIGENDIAN : 0 - | *BRANCHEXT : 0 - | BREAK : 280 C | CALBIT : 80 - | CALBITH : 8000 - | CALLML : 967 C | *CASESENSITIVE : 0 - | CHEAT : 7C C | CHEAT1 : C0 C | CHPAGE : BBE C | CHRNUM : FFFFFFFFFFFFFFE7 - | CK1 : 641 C | CKMODE : 63C C | CLEAR : 51 C | CLEAR1 : 56 C | CLR : C60 C | CMP : 55A C | CMP1 : 5BA C | CMP2 : 5C2 C | CMPR : 5D1 C | COMMA : DC1 C | *CONSTPI : 3.141592653589793 - | *DATE : 1/16/2008 - | DETPGE : BC5 C | DFAULT : C78 C | DIV : 408 C | DOLLAR : D7E C | DOLR1 : D8F C | DOLR2 : D9A C | DONE : 130 C | DONE1 : 13E C | DONE2 : 13F C | DOPTR : FFFFFFFFFFFFFFFF - | DOSTAK : 107A - | DOSTMT : CD1 C | DOUBLE : F20 C | E10 : 7CA C | E12 : 871 C | E12A : 8E5 C | E13 : 914 C | E14 : 954 C | E15 : 980 C | E16 : 9D0 C | E16A : A32 C | E17 : A4E C | E18 : AAB C | E19 : B08 C | E2 : 1C4 C | E3A : 282 C | E4 : 2D7 C | E5 : 304 C | E6 : 370 C | E6A : 3CA C | E8 : 643 C | E8B : 6AA C | E9 : 753 C | EL : 18D C | ELL : 822 C | END : E09 C | EO : 14B C | EOA : 108 C | EQ : 544 C | EREG : FFFFFFFFFFFFFF80 - | ERR : 21B C | ERR1 : 21D C | ERR2 : 21F C | ERRNUM : E31 C | ESA : 6DD C | EVAL : 7EA C | EX1 : E6A C | EX2 : E6D C | EX3 : E6F C | EX4 : E78 C | EX5 : E81 C | EXECIL : 76 C | EXPR : E61 C | F10 : F16 C | F2 : EBA C | F3 : EC1 C | F4 : ECB C | F5 : ED4 C | F6 : EDF C | F7 : EE9 C | F8 : EF4 C | F9 : F01 C | FACTOR : EAC C | FAIL : 5D9 C | FAILHI : FFFFFFFFFFFFFFEC - | FAILLO : FFFFFFFFFFFFFFED - | *FALSE : 0 - | FALSE1 : 5C0 C | FIN : 2AA C | FL : EB4 C | FLBL1 : BE8 C | FLBL2 : C00 C | FLBL3 : C15 C | FNDLBL : BE2 C | FNDPGE : B98 C | FOR : D2A C | FOR2 : D4C C | FORI : D4A C | FORPTR : FFFFFFFFFFFFFFFE - | FORSTK : 108A - | AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 85 - 1/16/2008 0:30:11 FPGE1 : BA7 C | *FULLPMMU : 1 - | GECO : F77 C | GENTR : 7BA C | GEQ : 558 C | GEQ1 : 5B6 C | GETCO1 : F7F C | GETCO2 : F93 C | GETCO3 : FA0 C | GETCO4 : FA4 C | GETL : 757 C | GETL0 : 773 C | GETL1 : 776 C | GETLCR : 7DC C | GETRUB : 7D2 C | GOSUB : CEB C | GOTO : CDD C | GTR : 554 C | GTR1 : 5AB C | GTROP : E5F C | GXH : 7CC C | GXU : 7AA C | *HAS64 : 1 - | *HASDSP : 0 - | *HASFPU : 0 - | *HASPMMU : 0 - | HEND : 6A4 C | HENTER : 683 C | HEX : 64C C | HI : FFFFFFFFFFFFFFEE - | HILINE : FFFFFFFFFFFFFFF7 - | HLETR : 674 C | HSHIFT : 68A C | HSKIP : 65C C | HX0K : 680 C | IF : CAA C | IF1 : CB6 C | IGNORE : 9B9 C | ILC1 : A8 C | ILCALL : 9E C | IN1 : DE2 C | IN2 : DF6 C | IN3 : E05 C | IND : 52C C | *INEXTMODE : 0 - | *INLWORDMODE : 0 - | *INMAXMODE : 0 - | INPST2 : B2C C | INPUT : DD1 C | INSAD0 : 8E7 C | INSAD1 : 903 C | *INSRCMODE : 0 - | INSRT : 824 C | INSRT1 : 83C C | INSRT2 : 846 C | INSRT3 : 84E C | INSRT4 : 85B C | INSRT5 : 862 C | INSUP0 : 899 C | INSUP1 : 8A5 C | INSUP2 : 8C6 C | INSUP3 : 8C8 C | INSUP4 : 8D8 C | *INSUPMODE : 0 - | ISTRNG : B26 C | JMPBIT : 40 - | JMPBITH : 4000 - | L000 : 2A C | L001 : 43 C | LABLHI : FFFFFFFFFFFFFFF2 - | LABLLO : FFFFFFFFFFFFFFF3 - | LBUF : 10D6 - | LEQ : 550 C | LEQ1 : 5A2 C | LET : C8B C | LIST : C35 C | LIST1 : C47 C | LIST2 : C49 C | LIST3 : C4B C | LISTNG : FFFFFFFFFFFFFFF5 - | *LISTON : 1 - | LIT1 : A34 C | LNEQ : E9 C | LO : FFFFFFFFFFFFFFEF - | LOLINE : FFFFFFFFFFFFFFF8 - | LOOP1 : 2C C | LOOP10 : AD5 C | LOOP11 : B3C C | LOOP12 : B6C C | LOOP13 : BAE C | LOOP2 : D6 C | LOOP3 : 1FB C | LOOP4 : 239 C | LOOP5 : 3AE C | LOOP6 : 458 C | LOOP7 : 664 C | LOOP8 : 6EF C | LOOP9 : 9DD C | LPNOS : 1BE C | LSS : 54C C | LSS1 : 59A C | LST : 2D9 C | LST2 : 2F7 C | LST3 : 306 C | LST4 : 30C C | LST5 : 31C C | LSTK : FFFFFFFFFFFFFFFD - | *MACEXP : 1 - | MESGS : F3B C | ML : E12 C | MM1 : 38F C | MM2 : 3A0 C | MM3 : 3CC C | MM4 : 3E9 C | MMEXIT : 3FA C | MODULO : 9C0 C | *MOMCPU : C - | *MOMCPUNAME : SC/MP - | MOVE : 808 C | MOVESR : 94D C | AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 86 - 1/16/2008 0:30:11 MOVSTR : B56 C | MUL : 372 C | NEG : 35B C | NEQ : 548 C | NEQ1 : 591 C | *NESTMAX : 100 - | NEW : C6D C | NEW1 : C7A C | NEWPGM : BD1 C | NEXT : D10 C | NEXTV : A89 C | NEXTV1 : AEE C | NLINE : 20D C | *NOJUMP : 9B C | NOTOP : 5F0 C | NUM : FFFFFFFFFFFFFFEB - | NUPAGE : B8D C | NUPGE0 : B95 C | NXT : 284 C | NXT1 : 2A1 C | NXTV10 : AAD C | NXTV2 : AE1 C | NXTV3 : AE3 C | OROP : 5EC C | *P1 : 1 - | P1HIGH : FFFFFFFFFFFFFFF0 - | P1L0W : FFFFFFFFFFFFFFF1 - | *P2 : 2 - | *P3 : 3 - | *PACKING : 0 - | *PADDING : 1 - | PAGE : FFFFFFFFFFFFFFF6 - | PCHIGH : FFFFFFFFFFFFFFFA - | PCLOW : FFFFFFFFFFFFFFFB - | PCSTAK : 10A6 - | PCSTK : FFFFFFFFFFFFFFF9 - | PGE : D67 C | PGM : 1120 - | POPAE : 916 C | PR1 : DA7 C | PR2 : DAE C | PR3 : DBD C | PR4 : DC6 C | PR5 : DCB C | PR6 : DCD C | PRINT : D9E C | PRMPT1 : C25 C | PRN : 18F C | PRN1 : 1C6 C | PRNUM : F2F C | PRNUM1 : F33 C | PROMPT : C1E C | PRS : 176 C | PRS1 : 18B C | PRSTR1 : B16 C | PSTRNG : B0A C | PTSTR1 : B4A C | PUTC : FC2 C | PUTC1 : FCF C | PUTC2 : FE7 C | PUTPGE : B7B C | PUTSTR : B36 C | QD0 : 418 C | QD1 : 43B C | QD2 : 44C C | QD3 : 4A4 C | QDEND : 4BB C | QDENT1 : 49E C | QDPOS : 433 C | QNXTV1 : A93 C | QPRNT : 1E7 C | QPRNT2 : 1F7 C | QQ1 : 235 C | QQ2 : 252 C | QQ3 : 259 C | QQMSG : 23F C | RANDOM : 9D2 C | REL1 : E3E C | REL2 : E48 C | REL3 : E4F C | REL4 : E53 C | REL5 : E5D C | *RELAXED : 0 - | RELEXP : E35 C | REM : E26 C | RETEXP : E8B C | RETURN : D00 C | RND1 : A01 C | RNDF : FFFFFFFFFFFFFFE6 - | RNDX : FFFFFFFFFFFFFFE5 - | RNDY : FFFFFFFFFFFFFFE4 - | RSTR : 143 C | RSTR1 : 14D C | RSTR2 : 15F C | RTN : F6 C | RUN : C51 C | RUNMOD : FFFFFFFFFFFFFFF4 - | SAV : 10A C | SAV1 : 126 C | SAV2 : 12C C | SAVEDO : 978 C | SAVFOR : A46 C | SBRPTR : FFFFFFFFFFFFFFFC - | SBRSTK : 106A - | SCAN : C4 C | SETZ : 585 C | SFOR1 : A50 C | SREDO : 940 C | START : C1C C | STAT : D54 C | STATUS : 956 C | STMT : C86 C | STORE : 4C1 C | STREND : B50 C | STRT : 2C0 C | SUB : 344 C | SVDO1 : 982 C | SYNTAX : E2F C | T2 : E98 C | T3 : EA1 C | AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 87 - 1/16/2008 0:30:11 TBL001 : CF6 C | TEMP : FFFFFFFFFFFFFFEA - | TEMP2 : FFFFFFFFFFFFFFE9 - | TEMP3 : FFFFFFFFFFFFFFE8 - | TERM : E8D C | *TIME : 0:30:06 - | TL : E8F C | TNABRT : 6BE C | TNERR : 751 C | TNL1 : 6DF C | TNL2 : 6FF C | TNRET : 6CE C | TNSHFT : 70C C | TOP : 994 C | TOP0 : 99A C | TOP1 : 9A0 C | TOP2 : 9A7 C | *TRUE : 1 - | TST : C2 C | TSTBIT : 20 - | TSTBITH : 2000 - | TSTNUM : 6AC C | TSTVAR : 4E1 C | TVMAYBE : 505 C | TV_FAIL : 4F3 C | TV_OK : 512 C | UNT : CBC C | UNTIL : 928 C | UNTL1 : 934 C | VARS : 101C - | *VERSION : 142F - | X10 : 4DA C | X12 : 58F C | X12A : 5E6 C | X12B : 62F C | X12C : 672 C | X13 : 6DB C | X14 : 755 C | X15 : 7B8 C | X16 : 7E8 C | X17 : 820 C | X19 : 86F C | X19A : 8E9 C | X20 : 90D C | X21 : 952 C | X22 : 992 C | X23 : 9CE C | X24 : A30 C | X25 : A87 C | X26 : AEC C | X27 : B34 C | X4 : 1C2 C | X5 : 219 C | X5A : 27E C | X6 : 2D5 C | X6A : 302 C | X7 : 342 C | X8 : 36E C | X9 : 3E7 C | X9A : 431 C | X9B : 49C C | XCHGP1 : 631 C | XFER : 169 C | XFER1 : 171 C | XI : 15D C | XI1 : 542 C | XO : E7 C | X_REDO : AFA C | 422 symbols 32 unused symbols AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 88 - 1/16/2008 0:30:11 defined macros: --------------- CALL | DO JS | JUMP LDPI | MESSAGE TSTCR | TSTN TSTR | TSTV 10 macros AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 89 - 1/16/2008 0:30:11 defined functions: ------------------ H | L AS V1.42 Beta [Bld 57] - source file NIBL.asm - page 90 - 1/16/2008 0:30:11 codepages: ---------- STANDARD (0 changed characters) 4.61 seconds assembly time 2649 lines source file 4977 lines incl. macro expansions 2 passes 0 errors 0 warnings