IMSAI EQU 0 ;1=ENABLE IMSAI CASSETTE STORAGE COMMANDS
;
- IF ROMSTRT = 0x8000 ;IF TESTING IN RAM, DON'T DESTROY MON85 VARS
+ IF ROMSTRT = 8000H ;IF TESTING IN RAM, DON'T DESTROY MON85 VARS
MON85 EQU 1 ;1=LEAVE MON85 RAM INTACT (DEBUGGING)
ELSE
MON85 EQU 0
ENDIF
- IF ACIA
-ACIAINI EQU 1 ;Set to "1" to initialize the ACIA.
+ IF ROMSTRT = 0 ;INITIALIZE SERIAL PORT IF BASIC AT RESET VECTOR
+ACIAINI EQU 1 ;1=INITALIZE ACIA
+UARTINI EQU 1 ;1=INITALIZE UART
ELSE
-ACIAINI EQU 0
+ACIAINI EQU 0 ;1=INITALIZE ACIA
+UARTINI EQU 0 ;1=INITALIZE UART
ENDIF
+
+
;
; CPM EQUATES
;
;
RUBOUT EQU 07FH ;RUBOUT CHARACTER
- IF ROMSTRT != 0
-FATAL EQU 0CDH ;OPCODE FOR FATAL ERROR IS "CALL" TO RST6
- ELSE
+ IF ROMSTRT = 0
FATAL EQU 0F7H ;OPCODE FOR FATAL IS RST 6
+ ELSE
+FATAL EQU 0CDH ;OPCODE FOR FATAL ERROR IS "CALL" TO RST6
ENDIF
;
BASIC:
- IF !CPM
+ IF CPM = 0
ORG ROMSTRT
LXI H,RAM+1024
MVI A,0AEH ;START OF INIT SEQUENCE
JMP INIT1 ;FINISH INIT
- ENDIF
-;
- IF CPM
+ ELSE
ORG TBASE
JMP INITC ;USE TEMPORARY CODE AT END
ENDIF
RST2:
COMP: PUSH B ;SAVE B,C
MVI B,0 ;INIT COUNT
- IF ROMSTRT != 0
-COMP1: CALL RST1 ;CALL TO RAM ADDRESS
- ELSE
+ IF ROMSTRT = 0
COMP1: RST 1 ;SKIP SPACES
+ ELSE
+COMP1: CALL RST1 ;CALL TO RAM ADDRESS
ENDIF
LDAX D ;GET CHAR TO MATCH WITH
JMP COMP2 ;CONTINUE ELSEWHERE
PUSH D
PUSH B
JMP ERROR ;CONTINUE
- IF ROMSTRT != 0
- DB 0,0 ;FILL IN SPACE TILL NEXT VECTOR
- ELSE
+ IF ROMSTRT = 0
DW 0,0 ;FILL IN SPACE TILL NEXT VECTOR
+ ELSE
+ DB 0,0 ;FILL IN SPACE TILL NEXT VECTOR
ENDIF
;
- IF !CPM
+ IF CPM = 0
ORG ROMSTRT+59 ;LEAVE 3 BYTES FOR DDT
ENDIF
;
RST4B: DAD D ;BUMP H,L
POP D ;RESTORE D,E
RET ;RETURN
- DB 'COPYRIGHT (C)1977'
- DB 'IMSAI MFG CORP'
- DB 'SAN LEANDRO CA 94577 USA'
+ DB "COPYRIGHT (C)1977"
+ DB "IMSAI MFG CORP"
+ DB "SAN LEANDRO CA 94577 USA"
;
; INITIALIZATION ROUTINE
; DETERMINE MEMORY SIZE.
; INIT SIO BOARD
;
INIT1:
- IF NOT CPM
- IF UART
+ IF CPM = 0
+ IF UART = 1
UARTB EQU 08H ;Base IO address of 8251 UART (IO)
UARTD EQU UARTB ;Data address
UARTC EQU UARTB+1 ;Control address
RX_MASK EQU 00000010B ;RXRDY flag bit in status byte
TX_MASK EQU 00000001B ;TXRDY flag bit in status byte
+ IF UARTINI = 1
; Initialize the 8251 UART
; Must force setup mode with 3 consecutive NULL characters
MVI A,0 ; Insure not setup mode
MVI A,040H ; Return to setup mode
OUT UARTC ; write it
;Issue Mode Set
- IF MSTRCLK ;4.9152MHz Clock Source Selected
+ IF MSTRCLK = 1 ;4.9152MHz Clock Source Selected
MVI A,04EH ; 8 data, 1 stop, x16 @ 4.5192MHz
ELSE ;3.6864MHz Clock Source Selected
MVI A,04DH ; 8 data, 1 stop, x1 @ 3.6864MHz
OUT UARTC ; Write it
;
ENDIF
+ ENDIF
;
- IF ACIA
+ IF ACIA = 1
ACIAB EQU 0xC0 ;Base I/O address of ACIA
ACIAC EQU ACIAB ;ACIA Control address
ACIAS EQU ACIAB ;ACIA Status address
TX_MASK EQU 00000010B ;ACIA TDRE bit
RX_MASK EQU 00000001B ;ACIA RXRF bit
- IF ACIAINI
+ IF ACIAINI = 1
;Initialize the 6850 ACIA
MVI A,003H ;Master RESET first!
OUT ACIAC
- IF MSTRCLK ;4.9152MHz Clock Source Selected
+ IF MSTRCLK = 1 ;4.9152MHz Clock Source Selected
MVI A,016H ;divide by 64 for 38400 Bd, 8 bit, no parity, 1 stop bit, no IRQ
- ELSE ;3.6864MHz Clock Source Selected
+ ELSE ;3.6864MHz Clock Source Selected
MVI A,015H ;divide by 16 for 115200 Bd, 8 bit, no parity, 1 stop bit, no IRQ
- ENDIF
+ ENDIF
OUT ACIAC
- ENDIF
+ ENDIF
ENDIF
ENDIF
;
; JQ - ADDED SO AS NOT TO OVERWRITE MON85 VARIABLES WHILE DEBUGGING
IF MON85
MOV A,H ;CHECK FOR END OF RAM HARDWALL
- CPI H(RAMEND)
+ CPI RAMEND >> 8
JNZ INIT2 ;NOT HARDWARE, LOOP
MOV A,L
- CPI L(RAMEND)
+ CPI RAMEND & 0FFH
JNZ INIT2 ;NOT HARDWARE, LOOP
ELSE
JNC INIT2 ;LOOP
; SOFTWARE WRITE PROTECT OF FIRST 9K OF RAM.
;
; BUT NO PROTECT UNDER CPM OR FOR 8K (EPROM) VERSION
- IF LARGE AND NOT CPM
+ IF LARGE = 1 && CPM = 0
MVI A,2 ;SET PROTECT OF FIRST 1K BLOCK
PROTC: OUT 0FEH ;SEND IT
ADI 4 ;ADDRESS NEXT 1K BLOCK
CPI 26H ;STOP AFTER 9 BLOCKS
JNZ PROTC ;CONTINUE TO PROTECT
- ENDIF
+ ENDIF
XRA A ;GET A ZERO IN A
PUSH PSW ;SET STACK 1 LEVEL DEEP WITHOUT A GOSUB
LXI H,0 ;CLEAR H,L
MVI B,8 ;LOAD COUNT
CALL COPYD ;COPY TO TRND<X> IN RAM TABLE
MVI M,2 ;SET RANDOM SWITCH
- IF CPM
+ IF CPM = 1
CALL NEW0 ;AUTOMATIC "NEW"
- ENDIF
+ ENDIF
LXI H,VERS ;POINT VERSION MESSAGE
RDYM: CALL TERMM ;WRITE IT
;
PUSH H ;SAE PTR
LXI H,GETCM ;MAKE SUBROUTINE
XTHL ;RESTORE H
- IF ROMSTRT != 0
- CALL RST1 ;CALL TO RAM ADDRESS
- ELSE
+ IF ROMSTRT = 0
RST 1 ;GET 1ST NON-BLANK CHAR AFTER 'NEW'
+ ELSE
+ CALL RST1 ;CALL TO RAM ADDRESS
ENDIF
SBI '*' ;TEST
JZ NEW1 ;BRIF PROGRAM CLEAR ONLY
INX H ;POINT 1ST PGM BYTE
;
; ENTER HERE TO DO IMMEDIATE COMMAND
- IF ROMSTRT != 0
-RUN3: CALL RST1 ;CALL TO RAM ADDRESS
- ELSE
+ IF ROMSTRT = 0
RUN3: RST 1 ;SKIP BLANKS
+ ELSE
+RUN3: CALL RST1 ;CALL TO RAM ADDRESS
ENDIF
RUN4: SHLD ADDR1 ;SAVE ADDR
CALL TSTCC ;GO SEE IF CONTROL-C OR O
; DUMP THE SOURCE PROGRAM TO TTY OR PAPER TAPE
;
;
- IF ROMSTRT != 0
- CALL RST1 ;CALL TO RAM ADDRESS
- ELSE
+ IF ROMSTRT = 0
RST 1 ;SKIP TO NON BLANK
+ ELSE
+ CALL RST1 ;CALL TO RAM ADDRESS
ENDIF
LXI D,0 ;GET A ZERO IN D
XCHG ;FLIP TO H,L
SHLD LINEL ;SAVE IT
SHLD LINEH ;SAME
XCHG ;RESTORE H,L
- IF ROMSTRT != 0
- CALL RST1 ;CALL TO RAM ADDRESS
- ELSE
+ IF ROMSTRT = 0
RST 1 ;SKIP TO NON BLANK
+ ELSE
+ CALL RST1 ;CALL TO RAM ADDRESS
ENDIF
CPI ',' ;TEST IF COMMA
JNZ LIST1 ;BRIF NOT
INX H ;POINT NEXT
- IF ROMSTRT != 0
- CALL RST1 ;CALL TO RAM ADDRESS
- ELSE
+ IF ROMSTRT = 0
RST 1 ;SKIP TO NON-BLANK
+ ELSE
+ CALL RST1 ;CALL TO RAM ADDRESS
ENDIF
CALL PACK ;ELSE, GO GET THE NUMBER
MOV H,B ;COPY TO
XRA A ;CLEAR REG A
PRIN4: STA PRSW ;SET SW TO SAY CRLF AT END OF LINE
LXI D,IOBUF ;POINT BUFFER
- IF ROMSTRT != 0
- CALL RST1 ;CALL TO RAM ADDRESS
- ELSE
+ IF ROMSTRT = 0
RST 1 ;SKIP TO NEXT FIELD
+ ELSE
+ CALL RST1 ;CALL TO RAM ADDRESS
ENDIF
CALL TSTEL ;TEST IF END OF STMT
JZ PRINC ;BRIF IT IS
PUSH D ;SAVE D,E
PUSH H ;SAVE H,L
LXI D,TABLI ;POINT LITERAL
- IF ROMSTRT != 0
- CALL RST2 ;CALL TO RAM ADDRESS
- ELSE
+ IF ROMSTRT = 0
RST 2 ;GO SEE IF TAB(XX)
+ ELSE
+ CALL RST2 ;CALL TO RAM ADDRESS
ENDIF
JZ PRINA ;BRIF IS
POP H ;ELSE, RESTORE H,L
CALL SEARC ;GO LOCATE NAME
XCHG ;PUT ADDR IN H,L
SHLD ADDR1 ;SAVE ADDR
- IF ROMSTRT != 0
- CALL RST3 ;GO STORE THE VALUE
- ELSE
+ IF ROMSTRT = 0
RST 3 ;GO STORE THE VALUE
+ ELSE
+ CALL RST3 ;GO STORE THE VALUE
ENDIF
POP H ;RESTORE POINTER TO STMT
LXI D,TOLIT ;GET LIT ADDR
- IF ROMSTRT != 0
- CALL RST2 ;GO COMPARE
- ELSE
+ IF ROMSTRT = 0
RST 2 ;GO COMPARE
+ ELSE
+ CALL RST2 ;GO COMPARE
ENDIF
JNZ SNERR ;BRIF ERROR
CALL EXPR ;GO EVALUATE TO-EXPR
PUSH H ;SAVE H,L
LXI H,TVAR1 ;POINT 'TO' VALUE
- IF ROMSTRT != 0
- CALL RST3 ;GO STORE THE VALUE
- ELSE
+ IF ROMSTRT = 0
RST 3 ;GO STORE THE VALUE
+ ELSE
+ CALL RST3 ;GO STORE THE VALUE
ENDIF
LXI H,ONE ;POINT CONSTANT: 1
- IF ROMSTRT != 0
- CALL RST5 ;LOAD IT
- ELSE
+ IF ROMSTRT = 0
RST 5 ;LOAD IT
+ ELSE
+ CALL RST5 ;LOAD IT
ENDIF
POP H ;GET H,L
MOV A,M ;GET THE CHAR
JZ FOR2 ;BRIF NO STEP
PUSH H ;RE-SAVE
LXI D,STEPL ;TEST FOR LIT 'STEP'
- IF ROMSTRT != 0
- CALL RST2 ;GO COMPARE
- ELSE
+ IF ROMSTRT = 0
RST 2 ;GO COMPARE
+ ELSE
+ CALL RST2 ;GO COMPARE
ENDIF
JZ FOR1 ;BRIF STEP
POP H ;RESTORE H,L
CALL EXPR ;GO EVALUATE EXPRESSION
FOR2: PUSH H ;SAVE H,L TO END OF STATEMENT
LXI H,TVAR2 ;POINT STEP VALUE
- IF ROMSTRT != 0
- CALL RST3 ;GO STORE THE VALUE
- ELSE
+ IF ROMSTRT = 0
RST 3 ;GO STORE THE VALUE
+ ELSE
+ CALL RST3 ;GO STORE THE VALUE
ENDIF
POP H ;RESTORE H,L
CALL EOL ;ERROR IF NOT END-OF-LINE
CALL FTEST ;GET STATUS OF FACC
PUSH PSW ;SAVE A,STATUS
LXI H,TVAR1 ;GET END VALUE
- IF ROMSTRT != 0
- CALL RST5 ;LOAD IT
- ELSE
+ IF ROMSTRT = 0
RST 5 ;LOAD IT
+ ELSE
+ CALL RST5 ;LOAD IT
ENDIF
POP PSW ;RESTORE STATUS
JP FOR4 ;BRIF FOR IS POSITIVE
CMP E ;TEST IF EQUAL
JZ FOR8 ;BRIF EQUAL
FOR7:
- IF ROMSTRT != 0
- CALL RST4 ;ADJUST H,L
- ELSE
+ IF ROMSTRT = 0
RST 4 ;ADJUST H,L
+ ELSE
+ CALL RST4 ;ADJUST H,L
ENDIF
DB 14
INR C ;COUNT IT
INX H ;POINT NEXT
PUSH H ;SAVE H,L
LXI H,TVAR2 ;POINT STEP VALUE
- IF ROMSTRT != 0
- CALL RST5 ;LOAD IT
- ELSE
+ IF ROMSTRT = 0
RST 5 ;LOAD IT
+ ELSE
+ CALL RST5 ;LOAD IT
ENDIF
POP H ;RESTORE H,L
- IF ROMSTRT != 0
- CALL RST3 ;GO STORE THE VALUE
- ELSE
+ IF ROMSTRT = 0
RST 3 ;GO STORE THE VALUE
+ ELSE
+ CALL RST3 ;GO STORE THE VALUE
ENDIF
PUSH H ;SAVE H,L
LXI H,TVAR1 ;POINT 'TO' VALUE
- IF ROMSTRT != 0
- CALL RST5 ;LOAD IT
- ELSE
+ IF ROMSTRT = 0
RST 5 ;LOAD IT
+ ELSE
+ CALL RST5 ;LOAD IT
ENDIF
POP H ;RESTORE H,L
- IF ROMSTRT != 0
- CALL RST3 ;GO STORE THE VALUE
- ELSE
+ IF ROMSTRT = 0
RST 3 ;GO STORE THE VALUE
+ ELSE
+ CALL RST3 ;GO STORE THE VALUE
ENDIF
XCHG ;FLIP/FLOP
LHLD ENDLI ;GET END ADDR
ORA A ;SEE IF END OF PGM
JZ NXERR ;BRIF IT IS
SHLD STMT ;SAVE ADDRESS
- IF ROMSTRT != 0
- CALL RST4 ;ADJUST H,L
- ELSE
+ IF ROMSTRT = 0
RST 4 ;ADJUST H,L
+ ELSE
+ CALL RST4 ;ADJUST H,L
ENDIF
DB 3
- IF ROMSTRT != 0
- CALL RST1 ;CALL TO RAM ADDRESS
- ELSE
+ IF ROMSTRT = 0
RST 1 ;SKIP SPACES
+ ELSE
+ CALL RST1 ;CALL TO RAM ADDRESS
ENDIF
LXI D,NEXTL ;POINT 'NEXT'
- IF ROMSTRT != 0
- CALL RST2 ;GO COMPARE
- ELSE
+ IF ROMSTRT = 0
RST 2 ;GO COMPARE
+ ELSE
+ CALL RST2 ;GO COMPARE
ENDIF
JNZ FOR9 ;LOOP IF NOT
- IF ROMSTRT != 0
- CALL RST1 ;CALL TO RAM ADDRESS
- ELSE
+ IF ROMSTRT = 0
RST 1 ;SKIP SPACES
+ ELSE
+ CALL RST1 ;CALL TO RAM ADDRESS
ENDIF
LDA INDX+1 ;GET FIRST CHAR
CMP M ;COMPARE
JZ FORA ;BRIF IT IS
CMP M ;COMPARE THE TWO
JNZ FOR9 ;BRIF NOT EQUAL
- IF ROMSTRT != 0
-FORA: CALL RST1 ;CALL TO RAM ADDRESS
- ELSE
+ IF ROMSTRT = 0
FORA: RST 1 ;SKIP TO END (HOPEFULLY)
+ ELSE
+FORA: CALL RST1 ;CALL TO RAM ADDRESS
ENDIF
MOV A,M ;GET THE NON BLANK
ORA A ;SEE IF END
CALL COPYD ;GO MOVE IT
JMP IF2 ;GO AROUND
IF1: LXI H,TVAR1 ;GET ADDR OF TEMP STORAGE
- IF ROMSTRT != 0
- CALL RST3 ;GO STORE THE VALUE
- ELSE
+ IF ROMSTRT = 0
RST 3 ;GO STORE THE VALUE
+ ELSE
+ CALL RST3 ;GO STORE THE VALUE
ENDIF
IF2: POP H ;RESTORE H,L
XRA A ;CLEAR A
RAR ;TEST BIT D0
JNC IF8 ;BRIF NO EQUAL TEST
CALL FTEST ;GET STATUS OF FACC
- JZ TRUE ;BRIF LEFT=RIGHT
+ JZ TRU ;BRIF LEFT=RIGHT
IF8: LDA REL ;LOAD RELATION
ANI 02H ;MASK IT
JZ IF9 ;BRIF NO >
CALL FTEST ;GET STATUS OF FACC
- JM TRUE ;BRIF GT
+ JM TRU ;BRIF GT
IF9: LDA REL ;LOAD RELATION
ANI 04H ;MASK IT
- JZ FALSE ;BRIF NO <
+ JZ FALS ;BRIF NO <
CALL FTEST ;GET STATUS OF FACC
- JM FALSE ;BRIF GT
- JZ FALSE ;BRIF ZERO (NOT EQUAL)
-TRUE: LHLD ADDR1 ;GET POINTER TO STATEMENT
+ JM FALS ;BRIF GT
+ JZ FALS ;BRIF ZERO (NOT EQUAL)
+TRU: LHLD ADDR1 ;GET POINTER TO STATEMENT
LXI D,GOTOL ;POINT 'GO TO'
- IF ROMSTRT != 0
- CALL RST2 ;GO COMPARE
- ELSE
+ IF ROMSTRT = 0
RST 2 ;GO COMPARE
+ ELSE
+ CALL RST2 ;GO COMPARE
ENDIF
JZ GOTO ;BRIF IF ... GOTO NN
LHLD ADDR1 ;GET POINTER TO STATEMENT
LXI D,GOSBL ;POINT LITERAL
- IF ROMSTRT != 0
- CALL RST2 ;GO COMPARE
- ELSE
+ IF ROMSTRT = 0
RST 2 ;GO COMPARE
+ ELSE
+ CALL RST2 ;GO COMPARE
ENDIF
JZ GOSUB ;BRIF IF ... GOSUB NN
LHLD ADDR1 ;GET POINTER TO STATEMENT
LXI D,THENL ;GET ADDR 'THEN'
- IF ROMSTRT != 0
- CALL RST2 ;GO COMPARE
- ELSE
+ IF ROMSTRT = 0
RST 2 ;GO COMPARE
+ ELSE
+ CALL RST2 ;GO COMPARE
ENDIF
JNZ SNERR ;BRIF ERROR
CALL NUMER ;TEST IF NUMERIC
JZ GOTO ;BRIF IT IS
JMP RUN4 ;ELSE, MAY BE ANY STMT
-FALSE EQU RUN
+FALS EQU RUN
IFF: LXI H,IOBUF ;POINT PRIOR
MOV B,M ;GET LEN
LXI D,STRIN ;POINT THIS
MVI B,1 ;SET SW= EQUAL
IFL: LDA REL ;GET RELATION
ANA B ;AND WITH RESULT
- JZ FALSE ;BRIF FALSE
- JMP TRUE ;ELSE, TRUE
+ JZ FALS ;BRIF FALSE
+ JMP TRU ;ELSE, TRUE
IFM: MVI B,2 ;SET CODE
JMP IFL ;JUMP
IFN: MVI B,4 ;SET CODE
CALL GETS8 ;GO GET ADDRESS OF VARIABLE
PUSH B ;SAVE NAME
PUSH D ;SAVE ADDRESS
- IF ROMSTRT != 0
- CALL RST1 ;GET NEXT NON-BLANK CHAR
- ELSE
+ IF ROMSTRT = 0
RST 1 ;GET NEXT NON-BLANK CHAR
+ ELSE
+ CALL RST1 ;GET NEXT NON-BLANK CHAR
ENDIF
CPI '=' ;TEST FOR EQUAL SIGN
JZ LET1 ;BRIF IS
JM LET2 ;BRIF STRING
CPI 0E3H ;TEST IF NUMERIC
JNZ SNERR ;BRIF MIXED MODE
- IF ROMSTRT != 0
- CALL RST3 ;GO STORE THE VALUE
- ELSE
+ IF ROMSTRT = 0
RST 3 ;GO STORE THE VALUE
+ ELSE
+ CALL RST3 ;GO STORE THE VALUE
ENDIF
JMP RUN ;CONTINUE
LET2: CPI 0E7H ;TEST IF STRING
MOV M,B ;STORE HI LEN
DCX H ;POINT NEXT
MOV M,C ;STORE LO LEN
- IF ROMSTRT != 0
- CALL RST4 ;ADJUST H,L
- ELSE
+ IF ROMSTRT = 0
RST 4 ;ADJUST H,L
+ ELSE
+ CALL RST4 ;ADJUST H,L
ENDIF
DB 3
DAD B ;COMPUTE END OF ENTRY
CMP E ;COMPARE
JZ NEXT3 ;BRIF EQUAL
NEXT2:
- IF ROMSTRT != 0
- CALL RST4 ;ADJUST H,L
- ELSE
+ IF ROMSTRT = 0
RST 4 ;ADJUST H,L
+ ELSE
+ CALL RST4 ;ADJUST H,L
ENDIF
DB 13
DCR B ;DECR COUNT
CALL SEARC ;GO GET ADDR OF INDEX
XCHG ;PUT TO H,L
SHLD ADDR1 ;SAVR IT
- IF ROMSTRT != 0
- CALL RST5 ;LOAD IT
- ELSE
+ IF ROMSTRT = 0
RST 5 ;LOAD IT
+ ELSE
+ CALL RST5 ;LOAD IT
ENDIF
POP H ;GET H,L (TBL)
PUSH H ;RE-SAVE
CALL FADD ;ADD STEP VALUE
LXI H,TVAR1 ;POINT TEMP AREA
- IF ROMSTRT != 0
- CALL RST3 ;GO STORE THE VALUE
- ELSE
+ IF ROMSTRT = 0
RST 3 ;GO STORE THE VALUE
+ ELSE
+ CALL RST3 ;GO STORE THE VALUE
ENDIF
POP H ;GET H,L (TBL)
PUSH H ;RE-SAVE
- IF ROMSTRT != 0
- CALL RST4 ;ADJUST H,L
- ELSE
+ IF ROMSTRT = 0
RST 4 ;ADJUST H,L
+ ELSE
+ CALL RST4 ;ADJUST H,L
ENDIF
DB 4
CALL FSUB ;SUBTRACT TO VALUE
NEXT5: ORA A ;TEST SIGN OF DIFFERENCE
JM NEXT7 ;BRIF END OF LOOP
NEXT6: POP H ;GET PTR TO TBL
- IF ROMSTRT != 0
- CALL RST4 ;ADJUST H,L
- ELSE
+ IF ROMSTRT = 0
RST 4 ;ADJUST H,L
+ ELSE
+ CALL RST4 ;ADJUST H,L
ENDIF
DB 8
MOV D,M ;GET HI BYTE
INX H ;POINT LINE NUM
SHLD LINE ;SAVE ADDR LINE
LXI H,TVAR1 ;POINT UPDTED VALUE
- IF ROMSTRT != 0
- CALL RST5 ;LOAD IT
- ELSE
+ IF ROMSTRT = 0
RST 5 ;LOAD IT
+ ELSE
+ CALL RST5 ;LOAD IT
ENDIF
LHLD ADDR1 ;GET ADDR OF INDEX
- IF ROMSTRT != 0
- CALL RST3 ;GO STORE THE VALUE
- ELSE
+ IF ROMSTRT = 0
RST 3 ;GO STORE THE VALUE
+ ELSE
+ CALL RST3 ;GO STORE THE VALUE
ENDIF
JMP RUN ;CONTINUE WITH STMT AFTER FOR
INPUT EQU $
;
LXI D,LLINE ;POINT 'LINE'
PUSH H ;SAVE H,L ADDR
- IF ROMSTRT != 0
- CALL RST2 ;GO COMPARE
- ELSE
+ IF ROMSTRT = 0
RST 2 ;GO COMPARE
+ ELSE
+ CALL RST2 ;GO COMPARE
ENDIF
JZ INPL ;BRIF EQUAL
POP D ;ELSE, RESTORE H,L ADDR
SHLD ADDR1 ;SAVE ADDR
MVI M,0 ;MARK BUFFER EMPTY
XCHG ;FLIP/BACK
- IF ROMSTRT != 0
-INPU1: CALL RST1 ;CALL TO RAM ADDRESS
- ELSE
+ IF ROMSTRT = 0
INPU1: RST 1 ;SKIP SPACES
+ ELSE
+INPU1: CALL RST1 ;CALL TO RAM ADDRESS
ENDIF
CPI 27H ;TEST IF QUOTE
JZ INPU2 ;BRIF IS
MVI M,0FEH ;MARK END
CALL TERMO ;GO PRINT PROMPT
XCHG ;GET H,L
- IF ROMSTRT != 0
- CALL RST1 ;CALL TO RAM ADDRESS
- ELSE
+ IF ROMSTRT = 0
RST 1 ;SKIP TO NON BLANK
+ ELSE
+ CALL RST1 ;CALL TO RAM ADDRESS
ENDIF
CPI ',' ;TEST IF COMMA
JZ INPU5 ;BRIF IS
JZ INPU7 ;BRIF CONTINUE FROM PREV
MVI A,'?' ;LOAD PROMPT
CALL TERMI ;GO READ FROM TTY
- IF ROMSTRT != 0
-INPU7: CALL RST1 ;CALL TO RAM ADDRESS
- ELSE
+ IF ROMSTRT = 0
INPU7: RST 1 ;SKIP SPACES
+ ELSE
+INPU7: CALL RST1 ;CALL TO RAM ADDRESS
ENDIF
MOV A,C ;GET LO NAME
ORA A ;TEST IT
JM INPUA ;BRIF STRING
CALL FIN ;GO CONVERT TO FLOATING
- IF ROMSTRT != 0
- CALL RST1 ;CALL TO RAM ADDRESS
- ELSE
+ IF ROMSTRT = 0
RST 1 ;SKIP SPACES
+ ELSE
+ CALL RST1 ;CALL TO RAM ADDRESS
ENDIF
CPI ',' ;TEST IF COMMA
JZ INPU8 ;BRIF IS
JNZ CVERR ;BRIF ERROR
INPU8: SHLD ADDR1 ;SAVE ADDRESS
POP H ;GET VAR ADDR
- IF ROMSTRT != 0
- CALL RST3 ;GO STORE THE VALUE
- ELSE
+ IF ROMSTRT = 0
RST 3 ;GO STORE THE VALUE
+ ELSE
+ CALL RST3 ;GO STORE THE VALUE
ENDIF
INPU9: POP H ;RESTORE STMT POINTER
MOV A,M ;GET CHAR
;
; STMT: READ VAR [,VAR ...]
;
- IF ROMSTRT != 0
- CALL RST1 ;CALL TO RAM ADDRESS
- ELSE
+ IF ROMSTRT = 0
RST 1 ;SKIP BLANKS
+ ELSE
+ CALL RST1 ;CALL TO RAM ADDRESS
ENDIF
CALL GETS8 ;GET VAR ADDR
PUSH H ;SAVE H,L
SHLD DATAP ;SAVE ADDR
ORA A ;TEST IF END OF PGM
JZ DAERR ;BRIF OUT OF DATA
- IF ROMSTRT != 0
- CALL RST4 ;ADJUST H,L
- ELSE
+ IF ROMSTRT = 0
RST 4 ;ADJUST H,L
+ ELSE
+ CALL RST4 ;ADJUST H,L
ENDIF
DB 3
LXI D,DATAL ;POINT 'DATA'
- IF ROMSTRT != 0
- CALL RST2 ;GO COMPARE
- ELSE
+ IF ROMSTRT = 0
RST 2 ;GO COMPARE
+ ELSE
+ CALL RST2 ;GO COMPARE
ENDIF
JZ READ2 ;BRIF IT IS DATA STMT
LHLD DATAP ;GET ADDR START
MVI D,0 ;CLEAR D
DAD D ;POINT NEXT STMT
JMP READ1 ;LOOP NEXT STMT
- IF ROMSTRT != 0
-READ2: CALL RST1 ;CALL TO RAM ADDRESS
- ELSE
+ IF ROMSTRT = 0
READ2: RST 1 ;SKIP SPACES
+ ELSE
+READ2: CALL RST1 ;CALL TO RAM ADDRESS
ENDIF
MOV A,C ;LOAD LO NAME
ORA A ;TEST IT
INX H ;POINT NEXT
READ3: SHLD DATAP ;SAVE ADDRESS
POP H ;RESTORE ADDR OF VAR
- IF ROMSTRT != 0
- CALL RST3 ;GO STORE THE VALUE
- ELSE
+ IF ROMSTRT = 0
RST 3 ;GO STORE THE VALUE
+ ELSE
+ CALL RST3 ;GO STORE THE VALUE
ENDIF
READ4: POP H ;RESTORE POINTER TO STM
MOV A,M ;GET THE CHAR
STA REL ;TURN OFF SWITCH
LXI D,GOTOL ;POINT LITERAL
PUSH H ;SAVE H,L ADDRESS
- IF ROMSTRT != 0
- CALL RST2 ;GO COMPARE
- ELSE
+ IF ROMSTRT = 0
RST 2 ;GO COMPARE
+ ELSE
+ CALL RST2 ;GO COMPARE
ENDIF
JZ ON3 ;BRIF ON...GOTO
POP H ;ELSE, RESTORE H,L
LXI D,GOSBL ;POINT LITERAL
- IF ROMSTRT != 0
- CALL RST2 ;GO COMPARE
- ELSE
+ IF ROMSTRT = 0
RST 2 ;GO COMPARE
+ ELSE
+ CALL RST2 ;GO COMPARE
ENDIF
JNZ SNERR ;BRIF ERROR
MVI A,1 ;GET ON SETTING
ON3A: MOV A,C ;GET COUNT
ORA A ;TEST IT
JZ ON6 ;BRIF VALUE 1
- IF ROMSTRT != 0
- CALL RST1 ;CALL TO RAM ADDRESS
- ELSE
+ IF ROMSTRT = 0
RST 1 ;ELSE, SKIP BLANKS
+ ELSE
+ CALL RST1 ;CALL TO RAM ADDRESS
ENDIF
ORA A ;TEST IF END OF LINE
JZ SNERR ;BRIF IS
CALL SEARC ;GET ADDR
PUSH D ;SAVE IT
LXI D,TOLIT ;POINT 'TO'
- IF ROMSTRT != 0
- CALL RST2 ;GO COMPARE
- ELSE
+ IF ROMSTRT = 0
RST 2 ;GO COMPARE
+ ELSE
+ CALL RST2 ;GO COMPARE
ENDIF
JNZ SNERR ;BRIF ERROR
CALL VAR ;GET NEXT VARIABLE
ORI 80H ;SET MASK FOR ARRAY
MOV D,A ;REPLACE
CALL SEARC ;GET ADDRESS
- IF ROMSTRT != 0
- CALL RST4 ;ADJUST H,L
- ELSE
+ IF ROMSTRT = 0
RST 4 ;ADJUST H,L
+ ELSE
+ CALL RST4 ;ADJUST H,L
ENDIF
- DB -11 AND 0FFH
+ DB -11
POP D ;GET PTR TO STMT
XCHG ;FLIP
CALL EOL ;NEXT MUST BE E-O-L
PUSH H ;SAVE ADDR NUM
CALL FDEC ;CONVERT TO F.P.
POP H ;GET ADDR
- IF ROMSTRT != 0
- CALL RST3 ;GO STORE THE VALUE
- ELSE
+ IF ROMSTRT = 0
RST 3 ;GO STORE THE VALUE
- ENDIF
- IF ROMSTRT != 0
- CALL RST4 ;ADJUST H,L
ELSE
+ CALL RST3 ;GO STORE THE VALUE
+ ENDIF
+ IF ROMSTRT = 0
RST 4 ;ADJUST H,L
+ ELSE
+ CALL RST4 ;ADJUST H,L
ENDIF
- DB -8 AND 0FFH
+ DB -8
POP D ;RESTORE STRING
POP B ;AND CTR
INX D ;POINT NEXT CHAR
ORI 80H ;MAKE ARRAY NAME
MOV D,A ;SAVE
CALL SEARC ;GET ADDR
- IF ROMSTRT != 0
- CALL RST4 ;ADJUST H,L
- ELSE
+ IF ROMSTRT = 0
RST 4 ;ADJUST H,L
+ ELSE
+ CALL RST4 ;ADJUST H,L
ENDIF
- DB -11 AND 0FFH
+ DB -11
XTHL ;SAVE ON STACK
LXI D,TOLIT ;POINT 'TO'
- IF ROMSTRT != 0
- CALL RST2 ;GO COMPARE
- ELSE
+ IF ROMSTRT = 0
RST 2 ;GO COMPARE
+ ELSE
+ CALL RST2 ;GO COMPARE
ENDIF
JNZ SNERR ;BRIF ERROR
CALL VAR ;GET NAME
PUSH D ;SAVE D,E
LXI D,STRIN ;POINT STRING BUFFER
PUSH D ;SAVE IT
- IF ROMSTRT != 0
- CALL RST5 ;LOAD IT
- ELSE
+ IF ROMSTRT = 0
RST 5 ;LOAD IT
- ENDIF
- IF ROMSTRT != 0
- CALL RST4 ;ADJUST H,L
ELSE
+ CALL RST5 ;LOAD IT
+ ENDIF
+ IF ROMSTRT = 0
RST 4 ;ADJUST H,L
+ ELSE
+ CALL RST4 ;ADJUST H,L
ENDIF
- DB -8 AND 0FFH
+ DB -8
PUSH H ;SAVE H,L
CALL FBIN ;CONVERT
POP H ;RESTORE
INX D ;POINT NEXT STR LOC.
PUSH B ;SAVE CTRS
PUSH D ;AND AD^DR
- IF ROMSTRT != 0
- CALL RST5 ;LOAD IT
- ELSE
+ IF ROMSTRT = 0
RST 5 ;LOAD IT
- ENDIF
- IF ROMSTRT != 0
- CALL RST4 ;ADJUST H,L
ELSE
+ CALL RST5 ;LOAD IT
+ ENDIF
+ IF ROMSTRT = 0
RST 4 ;ADJUST H,L
+ ELSE
+ CALL RST4 ;ADJUST H,L
ENDIF
- DB -8 AND 0FFH
+ DB -8
PUSH H ;AND H ADDR
CALL FBIN ;CONVERT
POP H ;RESTORE H,L
; INIT REGISTERS
;
LXI H,TEMP1 ;POINT IT
- IF ROMSTRT != 0
- CALL RST3 ;GO STORE THE VALUE
- ELSE
+ IF ROMSTRT = 0
RST 3 ;GO STORE THE VALUE
+ ELSE
+ CALL RST3 ;GO STORE THE VALUE
ENDIF
LDA FACC ;GET SIGN&EXPONENT
CALL FEXP ;EXPAND EXPON.
SIN3A: LXI H,HALFP ;POINT PI/2
CALL FDIV ;COMPUTE X/PI/2
LXI H,TEMP2 ;POINT T2
- IF ROMSTRT != 0
- CALL RST3 ;GO STORE THE VALUE
- ELSE
+ IF ROMSTRT = 0
RST 3 ;GO STORE THE VALUE
+ ELSE
+ CALL RST3 ;GO STORE THE VALUE
ENDIF
LXI H,TEMP2 ;POINT BACK
CALL FMUL ;COMPUTE SQUARE
;
EVPS: PUSH H ;SAVE POINTER TO COEFFICIENTS
LXI H,TEMP3 ;SAVE FACC
- IF ROMSTRT != 0
- CALL RST3 ;GO STORE THE VALUE
- ELSE
+ IF ROMSTRT = 0
RST 3 ;GO STORE THE VALUE
+ ELSE
+ CALL RST3 ;GO STORE THE VALUE
ENDIF
POP H ;RESTORE H
PUSH H
LXI H,TEMP3 ;POINTER TO X^N
EVPS2: CALL FMUL ;FACC*X^N->FACC
POP H ;COEFFICENT PTR
- IF ROMSTRT != 0
- CALL RST4 ;ADJUST H,L
- ELSE
+ IF ROMSTRT = 0
RST 4 ;ADJUST H,L
+ ELSE
+ CALL RST4 ;ADJUST H,L
ENDIF
- DB -4 AND 0FFH
+ DB -4
MOV A,M ;GET EXPONENT
DCR A ;TEST FOR 1
JNZ EVPS1 ;BRIF NOT 1
; COS(X)
;
LXI H,TEMP4 ;POINT SAVE AREA
- IF ROMSTRT != 0
- CALL RST3 ;GO STORE THE VALUE
- ELSE
+ IF ROMSTRT = 0
RST 3 ;GO STORE THE VALUE
+ ELSE
+ CALL RST3 ;GO STORE THE VALUE
ENDIF
CALL COS ;COMPUTE COS(X)
LXI H,TEMP7 ;SAVE COS(X)->TEMP7
- IF ROMSTRT != 0
- CALL RST3 ;GO STORE THE VALUE
- ELSE
+ IF ROMSTRT = 0
RST 3 ;GO STORE THE VALUE
+ ELSE
+ CALL RST3 ;GO STORE THE VALUE
ENDIF
LXI H,TEMP4 ;MOVE X->FACC
- IF ROMSTRT != 0
- CALL RST5 ;LOAD IT
- ELSE
+ IF ROMSTRT = 0
RST 5 ;LOAD IT
+ ELSE
+ CALL RST5 ;LOAD IT
ENDIF
CALL SIN ;COMPUTE SINE
ATN1: LXI H,ONE ;POINT: 1
CALL FADD ;GO ADD
LXI H,TEMP1 ;POINT SAVE
- IF ROMSTRT != 0
- CALL RST3 ;GO STORE THE VALUE
- ELSE
+ IF ROMSTRT = 0
RST 3 ;GO STORE THE VALUE
+ ELSE
+ CALL RST3 ;GO STORE THE VALUE
ENDIF
LXI H,TWO ;POINT: 2
CALL FSUB ;GO SUBTRACT
LXI H,TEMP1 ;POINT SAVED
CALL FDIV ;DIVIDE
LXI H,TEMP2 ;POINT SAVE
- IF ROMSTRT != 0
- CALL RST3 ;SAVE X'=(X-1)/(X+1)
- ELSE
+ IF ROMSTRT = 0
RST 3 ;SAVE X'=(X-1)/(X+1)
+ ELSE
+ CALL RST3 ;SAVE X'=(X-1)/(X+1)
ENDIF
LXI H,QTRPI ;X'+PI/4 -> TEMP1
CALL FADD
LXI H,TEMP1
- IF ROMSTRT != 0
- CALL RST3 ;GO STORE THE VALUE
- ELSE
+ IF ROMSTRT = 0
RST 3 ;GO STORE THE VALUE
+ ELSE
+ CALL RST3 ;GO STORE THE VALUE
ENDIF
PUSH H ;SAVE PTR TO TEMP2
- IF ROMSTRT != 0
- CALL RST5 ;LOAD IT
- ELSE
+ IF ROMSTRT = 0
RST 5 ;LOAD IT
+ ELSE
+ CALL RST5 ;LOAD IT
ENDIF
POP H
CALL FMUL ;FACC=X'*X'
JM ZMERR ;LN(-X)=NO NO
JZ ZMERR ;LN(0)=NO NO ALSO
LXI H,TEMP2 ;POINT SAVE AREA
- IF ROMSTRT != 0
- CALL RST3 ;GO STORE THE VALUE
- ELSE
+ IF ROMSTRT = 0
RST 3 ;GO STORE THE VALUE
+ ELSE
+ CALL RST3 ;GO STORE THE VALUE
ENDIF
LDA FACC ;GET EXPON
CALL FEXP ;EXPAND TO 8 BITS
LN2: LXI H,LN2C ;POINT LN(2)
CALL FMUL ;MULTIPLY
LXI H,TEMP1 ;POINT SAVE AREA
- IF ROMSTRT != 0
- CALL RST3 ;GO STORE THE VALUE
- ELSE
+ IF ROMSTRT = 0
RST 3 ;GO STORE THE VALUE
- ENDIF
- IF ROMSTRT != 0
- CALL RST5 ;LOAD IT
ELSE
+ CALL RST3 ;GO STORE THE VALUE
+ ENDIF
+ IF ROMSTRT = 0
RST 5 ;LOAD IT
+ ELSE
+ CALL RST5 ;LOAD IT
ENDIF
MVI A,1 ;GET EXPONENT: 1
STA FACC ;ADJUST TO RANGE (1,2)
CALL NEG ;ELSE, REVERSE SIGN
CALL EXP1 ;COMPUTE POSITIVE EXP
LXI H,TEMP1 ;POINT SAVE AREA
- IF ROMSTRT != 0
- CALL RST3 ;GO STORE THE VALUE
- ELSE
+ IF ROMSTRT = 0
RST 3 ;GO STORE THE VALUE
+ ELSE
+ CALL RST3 ;GO STORE THE VALUE
ENDIF
LXI H,ONE ;POINT 1
- IF ROMSTRT != 0
- CALL RST5 ;LOAD IT
- ELSE
+ IF ROMSTRT = 0
RST 5 ;LOAD IT
+ ELSE
+ CALL RST5 ;LOAD IT
ENDIF
LXI H,TEMP1 ;POINT PREV
EXP1: LXI H,LN2E ;POINT LN BASE 2 OF E
CALL FMUL ;FACC=X*(LN2E)
LXI H,TEMP3 ;POINT SAVE AREA
- IF ROMSTRT != 0
- CALL RST3 ;GO STORE THE VALUE
- ELSE
+ IF ROMSTRT = 0
RST 3 ;GO STORE THE VALUE
+ ELSE
+ CALL RST3 ;GO STORE THE VALUE
ENDIF
CALL INT ;FACC=INT(X*LN2E)
LXI H,TEMP4 ;POINT SAVE AREA
- IF ROMSTRT != 0
- CALL RST3 ;GO STORE THE VALUE
- ELSE
+ IF ROMSTRT = 0
RST 3 ;GO STORE THE VALUE
- ENDIF
- IF ROMSTRT != 0
- CALL RST3 ;GO STORE THE VALUE
ELSE
+ CALL RST3 ;GO STORE THE VALUE
+ ENDIF
+ IF ROMSTRT = 0
RST 3 ;GO STORE THE VALUE
+ ELSE
+ CALL RST3 ;GO STORE THE VALUE
ENDIF
LDA FACC ;GET THE EXPONENT COUNT
MOV B,A ;SAVE COUNT IN B
MVI A,80H ;LOAD CONSTANT
STA TEMP4+1 ;STORE AS MANTISSA
LXI H,ONE ;1 -> TEMP1, TEMP2
- IF ROMSTRT != 0
- CALL RST5 ;LOAD IT
- ELSE
+ IF ROMSTRT = 0
RST 5 ;LOAD IT
+ ELSE
+ CALL RST5 ;LOAD IT
ENDIF
LXI H,TEMP1
- IF ROMSTRT != 0
- CALL RST3 ;GO STORE THE VALUE
- ELSE
+ IF ROMSTRT = 0
RST 3 ;GO STORE THE VALUE
- ENDIF
- IF ROMSTRT != 0
- CALL RST3 ;GO STORE THE VALUE
ELSE
- RST 3 ;GO STORE THE VALUE
+ CALL RST3 ;GO STORE THE VALUE
ENDIF
- IF ROMSTRT != 0
- CALL RST5 ;LOAD TEMP3=INT(X*LN2E)
+ IF ROMSTRT = 0
+ RST 3 ;GO STORE THE VALUE
ELSE
+ CALL RST3 ;GO STORE THE VALUE
+ ENDIF
+ IF ROMSTRT = 0
RST 5 ;LOAD TEMP3=INT(X*LN2E)
+ ELSE
+ CALL RST5 ;LOAD TEMP3=INT(X*LN2E)
ENDIF
LXI H,TEMP5 ;GET FACC=FP(X*LN2E)
CALL FSUB
SGN1: ORI 1 ;CREATE EXPONENT
PUSH PSW ;SAVE IT
LXI H,ONE ;GET ADDRESS OF CONSTANT 1
- IF ROMSTRT != 0
- CALL RST5 ;LOAD IT
- ELSE
+ IF ROMSTRT = 0
RST 5 ;LOAD IT
+ ELSE
+ CALL RST5 ;LOAD IT
ENDIF
POP PSW ;RESTORE SIGN
STA FACC ;SET THE SIGN
XRA A ;GET A ZERO
STA FACC ;PUT ARG IN RANGE [.5, 1]
LXI H,TEMP2 ;POINT SAVE AREA
- IF ROMSTRT != 0
- CALL RST3 ;GO STORE THE VALUE
- ELSE
+ IF ROMSTRT = 0
RST 3 ;GO STORE THE VALUE
+ ELSE
+ CALL RST3 ;GO STORE THE VALUE
ENDIF
;
; INITIAL APPROXIMATION 0.41730759 + 0.59016206 * MANTISSA
LXI H,SQC2 ;PINT .4173
CALL FADD ;GO ADD
LXI H,TEMP1 ;POINT SAVE AREA
- IF ROMSTRT != 0
- CALL RST3 ;GO STORE THE VALUE
- ELSE
+ IF ROMSTRT = 0
RST 3 ;GO STORE THE VALUE
+ ELSE
+ CALL RST3 ;GO STORE THE VALUE
ENDIF
;
; NEWTON'S METHOD OF ITERATION TO THE APPROXIMATE
;
CALL SQR1 ;FIRST ITERATION
LXI H,TEMP1 ;POINT SAVE AREA
- IF ROMSTRT != 0
- CALL RST3 ;GO STORE THE VALUE
- ELSE
+ IF ROMSTRT = 0
RST 3 ;GO STORE THE VALUE
+ ELSE
+ CALL RST3 ;GO STORE THE VALUE
ENDIF
CALL SQR1 ;SECOND ITERATION
;
; TO THE SQUARE ROOT FUNCTION
;
SQR1: LXI H,TEMP2 ;POINT MANTISSA
- IF ROMSTRT != 0
- CALL RST5 ;LOAD IT
- ELSE
+ IF ROMSTRT = 0
RST 5 ;LOAD IT
+ ELSE
+ CALL RST5 ;LOAD IT
ENDIF
LXI H,TEMP1 ;POINT PREV GUESS
CALL FDIV ;FORM MANT/TEMP1
;
;
LXI H,TEMP7 ;SAVE ARG
- IF ROMSTRT != 0
- CALL RST3 ;GO STORE THE VALUE
- ELSE
+ IF ROMSTRT = 0
RST 3 ;GO STORE THE VALUE
+ ELSE
+ CALL RST3 ;GO STORE THE VALUE
ENDIF
MVI B,4 ;LOOP CTR
LXI H,FACC ;POINT FLOAT ACCUM
DCR C ;SUBT CTR
JNZ CONC6 ;LOOP
POP H ;RESTORE H,L
- IF ROMSTRT != 0
- CALL RST4 ;ADJUST H,L
- ELSE
+ IF ROMSTRT = 0
RST 4 ;ADJUST H,L
+ ELSE
+ CALL RST4 ;ADJUST H,L
ENDIF
- DB -7 AND 0FFH
+ DB -7
MVI A,4 ;DELETE 4 BYTES
CALL SQUIS ;GO COMPRESS
JMP EVAL ;CONTINUE EVALUATION
ORA A ;TEST IF AT END
JZ SNERR ;BRIF FN NOT FOUND
PUSH H ;SAVE PTR
- IF ROMSTRT != 0
- CALL RST4 ;ADJUST H,L
- ELSE
+ IF ROMSTRT = 0
RST 4 ;ADJUST H,L
+ ELSE
+ CALL RST4 ;ADJUST H,L
ENDIF
DB 3
LXI D,DEFLI ;LITERAL
- IF ROMSTRT != 0
- CALL RST2 ;GO COMPARE
- ELSE
+ IF ROMSTRT = 0
RST 2 ;GO COMPARE
+ ELSE
+ CALL RST2 ;GO COMPARE
ENDIF
JNZ FN3 ;BRIF NOT EQUAL
PUSH B ;SAVE TEST NAME
DAD D ;POINT NEXT STMT
JMP FN2 ;LOOP
FN4: POP D ;ADJUST STACK
- IF ROMSTRT != 0
- CALL RST1 ;CALL TO RAM ADDRESS
- ELSE
+ IF ROMSTRT = 0
RST 1 ;SKIP BLANKS
+ ELSE
+ CALL RST1 ;CALL TO RAM ADDRESS
ENDIF
CPI '(' ;TEST IF OPEN PAREN
JNZ SNERR ;BRIF NOT
MOV A,M ;GET LO ADDR
STAX D ;PUT TO TABLE
POP H ;RESTORE PTR TO STMT
- IF ROMSTRT != 0
- CALL RST1 ;CALL TO RAM ADDRESS
- ELSE
+ IF ROMSTRT = 0
RST 1 ;SKIP BLANKS
+ ELSE
+ CALL RST1 ;CALL TO RAM ADDRESS
ENDIF
CPI ')' ;TEST IF CLOSE PAREN
JNZ SNERR ;BRIF NOT
INX H ;SKIP IT
- IF ROMSTRT != 0
- CALL RST1 ;CALL TO RAM ADDRESS
- ELSE
+ IF ROMSTRT = 0
RST 1 ;SKIP BLANKS
+ ELSE
+ CALL RST1 ;CALL TO RAM ADDRESS
ENDIF
CPI '=' ;TEST IF EQUAL SIGN
JNZ SNERR ;BRIF NOT
POP D ;GET D,E
DCX H ;POINT 2ND BYTE FOLLOWING OP
SHLD ADDR2 ;SAVE IT
- IF ROMSTRT != 0
- CALL RST4 ;ADJUST H,L
- ELSE
+ IF ROMSTRT = 0
RST 4 ;ADJUST H,L
+ ELSE
+ CALL RST4 ;ADJUST H,L
ENDIF
DB 5
SHLD ADDR1 ;SAVE ADDR
XCHG ;RESTORE H,L
;
LOOKD EQU $ ;LOOK FOR CON, VAR, OR FUNCTION
- IF ROMSTRT != 0
- CALL RST1 ;CALL TO RAM ADDRESS
- ELSE
+ IF ROMSTRT = 0
RST 1 ;SKIP TO NON-BLANK
+ ELSE
+ CALL RST1 ;CALL TO RAM ADDRESS
ENDIF
CALL NUMER ;GO TEST IF NUMERIC
JNZ LDALP ;BRIF NOT
JNZ LDFN ;BRIF NOT
INX H ;POINT NEXT
MOV C,A ;SAVE THE CHAR
- IF ROMSTRT != 0
-LDV1: CALL RST1 ;CALL TO RAM ADDRESS
- ELSE
+ IF ROMSTRT = 0
LDV1: RST 1 ;GET NEXT CHAR
+ ELSE
+LDV1: CALL RST1 ;CALL TO RAM ADDRESS
ENDIF
CPI '$' ;TEST IF STRING
PUSH PSW ;SAVE STATUS
ORI 80H ;SET STRING
MOV C,A ;SAVE IT
INX H ;SKIP $
- IF ROMSTRT != 0
- CALL RST1 ;CALL TO RAM ADDRESS
- ELSE
+ IF ROMSTRT = 0
RST 1 ;SKIP SPACES
+ ELSE
+ CALL RST1 ;CALL TO RAM ADDRESS
ENDIF
LDV2: CPI '(' ;TEST IF PAREN
JZ LDV2A ;BRIF IS
JZ LDFN1 ;LOOP IF TRUE
PUSH H ;SAVE H,L
LXI D,RNDLI ;POINT LITERAL
- IF ROMSTRT != 0
- CALL RST2 ;GO COMPARE
- ELSE
+ IF ROMSTRT = 0
RST 2 ;GO COMPARE
+ ELSE
+ CALL RST2 ;GO COMPARE
ENDIF
JZ LDRND ;BRIF FND
POP H ;GET H,L
PUSH H ;RESAVE
LXI D,FNLIT ;POINT LITERAL
- IF ROMSTRT != 0
- CALL RST2 ;GO COMPARE
- ELSE
+ IF ROMSTRT = 0
RST 2 ;GO COMPARE
+ ELSE
+ CALL RST2 ;GO COMPARE
ENDIF
JZ FNL ;BRIF IS
POP H ;GET H,L
PUSH H ;RESAVE
LXI D,PILIT ;POINT LIT
- IF ROMSTRT != 0
- CALL RST2 ;GO COMPARE
- ELSE
+ IF ROMSTRT = 0
RST 2 ;GO COMPARE
+ ELSE
+ CALL RST2 ;GO COMPARE
ENDIF
JZ LDPI ;BRIF PI
FUNC0: POP H ;GET H,L
INX D ;POINT NEXT
LDAX D ;GET HI BYTE
MOV B,A ;SAVE IT (B,C = ADDR OF FUNC)
- IF ROMSTRT != 0
- CALL RST1 ;CALL TO RAM ADDRESS
- ELSE
+ IF ROMSTRT = 0
RST 1 ;GET 1ST NON-BLANK CHAR AFTER 'NEW'
+ ELSE
+ CALL RST1 ;CALL TO RAM ADDRESS
ENDIF
CPI '(' ;TEST FOR OPEN PAREN
JNZ SNERR ;BRIF MISSING PAREN
MVI M,0CFH ;MOVE CODE
FNL3: SHLD EXPRS ;SAVE POINTER
XCHG ;GET H,L
- IF ROMSTRT != 0
- CALL RST1 ;CALL TO RAM ADDRESS
- ELSE
+ IF ROMSTRT = 0
RST 1 ;GET NEXT CHAR
+ ELSE
+ CALL RST1 ;CALL TO RAM ADDRESS
ENDIF
CPI '(' ;TEST IF OPEN PAREN
JNZ SNERR ;BRIF NOT
JZ FUNC0 ;BRIF IS
PUSH H ;ELSE, SAVE H,L
LXI H,ONE ;USE RANGE (0,1)
- IF ROMSTRT != 0
- CALL RST5 ;LOAD IT
- ELSE
+ IF ROMSTRT = 0
RST 5 ;LOAD IT
+ ELSE
+ CALL RST5 ;LOAD IT
ENDIF
CALL RND ;GO GET RANDOM NUMBER
POP H ;RESTORE H,L
SHLD EXPRS ;SAVE ADDR
XCHG ;RESTORE H,L
JMP SKPP ;GO SKIP CHAR
- IF ROMSTRT != 0
-LOOKO: CALL RST1 ;CALL TO RAM ADDRESS
- ELSE
+ IF ROMSTRT = 0
LOOKO: RST 1 ;SKIP BLANKS
+ ELSE
+LOOKO: CALL RST1 ;CALL TO RAM ADDRESS
ENDIF
CPI '+' ;TEST IF PLUS
MVI B,21H ;CODE
CMP C ;PRECEDENCE REDUCTION?
JNC INS ;IF NC, YES, INSERT 05
LHLD EXPRS ;NO, INSERT OPCODE BEFORE VAR AT END
- IF ROMSTRT != 0
- CALL RST4 ;ADJUST H,L
- ELSE
+ IF ROMSTRT = 0
RST 4 ;ADJUST H,L
+ ELSE
+ CALL RST4 ;ADJUST H,L
ENDIF
- DB -3 AND 0FFH
+ DB -3
MVI D,4 ;BYTE COUNT
MOV E,B ;INSERT THIS OP CODE
INS: MOV B,E ;SAVE FOR BRANCH AFTER INSERTION
DAD SP ;GET STACK ADDR
PUSH B ;SAVE CTRS
PUSH H ;SAVE ADDR
- IF ROMSTRT != 0
- CALL RST3 ;GO STORE THE VALUE
- ELSE
+ IF ROMSTRT = 0
RST 3 ;GO STORE THE VALUE
+ ELSE
+ CALL RST3 ;GO STORE THE VALUE
ENDIF
MVI A,0E3H ;TYPE=NUM
EV3A: POP D ;GET ADDR IN STACK
INX H ;POINT TYPE
MOV A,M ;LOAD TYPE
MOV B,M ;GET TYPE
- IF ROMSTRT != 0
- CALL RST4 ;ADJUST H,L
- ELSE
+ IF ROMSTRT = 0
RST 4 ;ADJUST H,L
+ ELSE
+ CALL RST4 ;ADJUST H,L
ENDIF
- DB -3 AND 0FFH
+ DB -3
MOV A,B ;LOAD TYPE
POP B ;RESTORE CTRS
ANI 18H ;ISOLATE #ARGS
JMP FADD ;ELSE, GO ADD
POWER: PUSH H ;SAVE ADDR OF VAR
LXI H,TEMP1 ;POINT SAVE AREA
- IF ROMSTRT != 0
- CALL RST3 ;GO STORE THE VALUE
- ELSE
+ IF ROMSTRT = 0
RST 3 ;GO STORE THE VALUE
+ ELSE
+ CALL RST3 ;GO STORE THE VALUE
ENDIF
POP H ;RESTORE H,L
- IF ROMSTRT != 0
- CALL RST5 ;LOAD IT
- ELSE
+ IF ROMSTRT = 0
RST 5 ;LOAD IT
+ ELSE
+ CALL RST5 ;LOAD IT
ENDIF
CALL FTEST ;TEST FOR ZERO
JZ SGN1 ;GIVE RESULT = 1 IF POWER = 0
LXI H,TEMP7 ;POINT SAVE AREA
- IF ROMSTRT != 0
- CALL RST3 ;GO STORE THE VALUE
- ELSE
+ IF ROMSTRT = 0
RST 3 ;GO STORE THE VALUE
+ ELSE
+ CALL RST3 ;GO STORE THE VALUE
ENDIF
LXI H,TEMP1 ;POINT X
- IF ROMSTRT != 0
- CALL RST5 ;LOAD IT
- ELSE
+ IF ROMSTRT = 0
RST 5 ;LOAD IT
+ ELSE
+ CALL RST5 ;LOAD IT
ENDIF
CALL FTEST ;TEST FOR ZERO
RZ ;0^X = 0
JMP EXP ;GET EXP FUNC
; X^B = EXP(B*LN(X))
XSQR: LXI H,TEMP1 ;POINT X
- IF ROMSTRT != 0
- CALL RST5 ;LOAD IT
- ELSE
+ IF ROMSTRT = 0
RST 5 ;LOAD IT
+ ELSE
+ CALL RST5 ;LOAD IT
ENDIF
LXI H,TEMP1 ;POINT X
JMP FMUL ;TIMES X
DCX H ;POINT BACK
DCX H ;AND AGAIN
CALL GTEMP ;GO SAVE FACC
- IF ROMSTRT != 0
- CALL RST4 ;ADJUST H,L
- ELSE
+ IF ROMSTRT = 0
RST 4 ;ADJUST H,L
+ ELSE
+ CALL RST4 ;ADJUST H,L
ENDIF
- DB -7 AND 0FFH
+ DB -7
MVI A,4 ;DELETE 4 BYTES
CALL SQUIS ;GO COMPRESS
JMP EVAL ;CONTINUE
POP H ;GET LOCATINO
POP B ;GET CTRS
CALL GTEMP ;GO STORE FACC IN STACK
- IF ROMSTRT != 0
- CALL RST4 ;ADJUST H,L
- ELSE
+ IF ROMSTRT = 0
RST 4 ;ADJUST H,L
+ ELSE
+ CALL RST4 ;ADJUST H,L
ENDIF
- DB -4 AND 0FFH
+ DB -4
EVCOM: MVI A,1 ;DELETE 1 BYTE
CALL SQUIS ;COMPRESS
LXI H,CMACT ;GET COUNT
RET ;RETURN
EDM3: CPI 2 ;TEST IF 2
JNZ SNERR ;ELSE, ERROR
- IF ROMSTRT != 0
- CALL RST4 ;ADJUST H,L
- ELSE
+ IF ROMSTRT = 0
RST 4 ;ADJUST H,L
+ ELSE
+ CALL RST4 ;ADJUST H,L
ENDIF
DB 5
MOV D,M ;GET HI ADDR
MOV E,M ;GET LO ADDR
CALL EVLD ;LOAD THE ARG
LXI H,TEMP1 ;POINT AREA
- IF ROMSTRT != 0
- CALL RST3 ;GO STORE THE VALUE
- ELSE
+ IF ROMSTRT = 0
RST 3 ;GO STORE THE VALUE
+ ELSE
+ CALL RST3 ;GO STORE THE VALUE
ENDIF
JMP EDM2A ;CONTINUE
EDM4: CALL FACDE ;CONVERT FACC TO D,E
POP B
PUSH B ;SAVE COL
LXI H,TEMP1 ;POINT 2ND ARGUMENT
- IF ROMSTRT != 0
- CALL RST5 ;LOAD IT
- ELSE
+ IF ROMSTRT = 0
RST 5 ;LOAD IT
+ ELSE
+ CALL RST5 ;LOAD IT
ENDIF
CALL FACDE ;CONVERT TO D,E
POP B ;GET COL
CPI 'E' ;TEST IF EXPONENT
JNZ FIN4 ;BRIF NOT
LXI H,FTEMP ;POINT SAVE AREA
- IF ROMSTRT != 0
- CALL RST3 ;GO STORE THE VALUE
- ELSE
+ IF ROMSTRT = 0
RST 3 ;GO STORE THE VALUE
+ ELSE
+ CALL RST3 ;GO STORE THE VALUE
ENDIF
POP D ;RESTORE PTR
INX D ;SKIP 'E'
PUSH PSW ;SAVE COUNT
LXI H,FTEMP ;RESTORE NUMBER
PUSH D ;SAVE PTR
- IF ROMSTRT != 0
- CALL RST5 ;LOAD IT
- ELSE
+ IF ROMSTRT = 0
RST 5 ;LOAD IT
+ ELSE
+ CALL RST5 ;LOAD IT
ENDIF
FIN4: POP H ;RESTORE PTR
POP PSW ;RESTORE COUNT
ORA A ;TEST FOR OVERFLOW
JZ FINB ;BRIF NO OVERFLOW
LXI H,FTEMP+4
- IF ROMSTRT != 0
- CALL RST5 ;LOAD IT
- ELSE
+ IF ROMSTRT = 0
RST 5 ;LOAD IT
+ ELSE
+ CALL RST5 ;LOAD IT
ENDIF
POP B ;RESTORE COUNTERS
INR C ;EXCESS DIGIT
; MULTIPLY FACC BY TEN
;
FMTEN: LXI H,FTEMP+4
- IF ROMSTRT != 0
- CALL RST3 ;GO STORE THE VALUE
- ELSE
+ IF ROMSTRT = 0
RST 3 ;GO STORE THE VALUE
+ ELSE
+ CALL RST3 ;GO STORE THE VALUE
ENDIF
CALL FIND ;*2
CALL FIND ;*4
FOUT6: CPI 5 ;TEST HIGH RANGE
JP FOUT4 ;BRIF 5 OR GREATER
LXI H,FTEMP ;POINT SAVE AREA
- IF ROMSTRT != 0
- CALL RST3 ;GO STORE THE VALUE
- ELSE
+ IF ROMSTRT = 0
RST 3 ;GO STORE THE VALUE
+ ELSE
+ CALL RST3 ;GO STORE THE VALUE
ENDIF
LDA FACC ;GET EXPONENT
CALL FEXP ;EXPAND
CPI 10 ;TEST IF DECIMAL POINT
JM FOUTU ;BRIF LT
LXI H,FTEMP ;POINT SAVE AREA
- IF ROMSTRT != 0
- CALL RST5 ;LOAD IT
- ELSE
+ IF ROMSTRT = 0
RST 5 ;LOAD IT
+ ELSE
+ CALL RST5 ;LOAD IT
ENDIF
JMP FOUT4 ;ONCE MORE
FOUTU: CALL FOUT9 ;PUT DIGIT
INR A ;PLUS ONE
FOUTI: INX H ;POINT NEXT
PUSH H ;SAVE PTR
- MVI E,-1 AND 0FFH ;INIT CTR (TENS)
+ MVI E,-1 ;INIT CTR (TENS)
FOUTJ: INR E ;ADD ONE
SUI 10 ;LESS 10
JP FOUTJ ;LOOP
MOV A,D ;GET DEC EXPON
ORA A ;SET FLAGS
JP FOUTK ;BRIF POS.
- CPI -2 AND 0FFH ;TEST FOR MIN
+ CPI -2 ;TEST FOR MIN
RC ;RETURN IF LESS THAN -2
JMP FOUTL ;GO AROUND
FOUTK: CPI 6 ;TEST IF TOO BIG
INX D ;POINT NEXT
STAX D ;PUT CHAR
INX H ;POINT NEXT
- IF ROMSTRT != 0
- CALL RST1 ;CALL TO RAM ADDRESS
- ELSE
+ IF ROMSTRT = 0
RST 1 ;SKIP TO NON BLANK
+ ELSE
+ CALL RST1 ;CALL TO RAM ADDRESS
ENDIF
JMP GETS1 ;LOOP
GETS2: MOV C,A ;SAVE DELIM
STAX D ;PUT CHAR
JMP GETS3 ;LOOP
GETS4: INX H ;SKIP END QUOTE
- IF ROMSTRT != 0
- CALL RST1 ;CALL TO RAM ADDRESS
- ELSE
+ IF ROMSTRT = 0
RST 1 ;SKIP TO TRAILING SPACES
+ ELSE
+ CALL RST1 ;CALL TO RAM ADDRESS
ENDIF
GETS5: LXI D,STRIN ;POINT BEGIN BUFFER
MOV A,B ;GET COUNT
; H HAS ADDR NAME
;
PUSH D ;SAVE COL
- IF ROMSTRT != 0
- CALL RST4 ;ADJUST H,L
- ELSE
+ IF ROMSTRT = 0
RST 4 ;ADJUST H,L
+ ELSE
+ CALL RST4 ;ADJUST H,L
ENDIF
- DB -4 AND 0FFH ;BY FOUR
+ DB -4 ;BY FOUR
MOV D,M ;GET HI
DCX H ;POINT LO
MOV E,M ;GET LO
MOV D,A ;SAVE
POP H ;GET ADDR (0,0)
DAD D ;COMPUTE (I,J) RIGHT SIDE
- IF ROMSTRT != 0
- CALL RST4 ;ADJUST H,L
- ELSE
+ IF ROMSTRT = 0
RST 4 ;ADJUST H,L
+ ELSE
+ CALL RST4 ;ADJUST H,L
ENDIF
- DB -4 AND 0FFH
+ DB -4
RET ;RETURN
FTEST EQU $
;
; FIRST PROMPT WITH THE CHAR IN THE A REG
; TERMINATE THE LINE WITH A X'00'
; IGNORE EMPTY LINES
-; CONTROL C WILL CANCLE THE LINE
+; CONTROL C WILL CANCEL THE LINE
; CONTROL O WILL TOGGLE THE OUTPUT SWITCH
; RUBOUT WILL DELETE THE LAST CHAR INPUT
;
MVI A,' ' ;GET SPACE
CALL TESTO ;WRITE TO TERMINAL
TREAD EQU $
- IF !CPM
- IF UART ;FOR 8251 UART
+ IF CPM = 0
+ IF UART = 1 ;FOR 8251 UART
IN UARTS ;GET TTY STATUS
ANI RX_MASK ;TEST IF RXRDY
JZ TREAD ;LOOP TIL CHAR
- ENDIF
+ ENDIF
- IF ACIA ;FOR MC6850 ACIA
+ IF ACIA = 1 ;FOR MC6850 ACIA
IN ACIAS ;GET TTY STATUS
ANI RX_MASK ;TEST IF RXRDY
JZ TREAD ;LOOP TIL CHAR
- ENDIF
+ ENDIF
ENDIF
CALL GETCH ;GO READ THE CHAR
MOV M,A ;PUT IN BUFFER
TESTO EQU $
- IF NOT CPM
- IF UART ;8251 UART SUPPORT
+ IF CPM = 0
+ IF UART = 1 ;8251 UART SUPPORT
PUSH PSW ;SAVE CHAR
TEST1: IN UARTS ;GET STATUS
ANI TX_MASK ;TEST IF TXRDY
JZ TEST1 ;LOOP TILL READY
POP PSW ;GET CHAR
OUT UARTD ;WRITE IT
- ENDIF
+ ENDIF
- IF ACIA ;MC6850 ACIA SUPPORT
+ IF ACIA = 1 ;MC6850 ACIA SUPPORT
PUSH PSW ;SAVE CHAR
TEST1: IN ACIAS ;GET STATUS
ANI TX_MASK ;TEST IF TXRDY
JZ TEST1 ;LOOP TILL READY
POP PSW ;GET CHAR
OUT ACIAD ;WRITE IT
- ENDIF
ENDIF
-
- IF CPM
+ ELSE
PUSH B ;BIOS CALLS DESTROYS C,DE
PUSH D
PUSH H
POP D ;RESTORE
POP B
ENDIF
- IF LARGE ;SAVE ROOM ONLY IN 8+K VERSIONS
+ IF LARGE = 1 ;SAVE ROOM ONLY IN 8+K VERSIONS
DB 0,0,0 ;SAVE ROOM FOR CALL TO USER ROUTINE
ENDIF
RET ;RETURN
CALL TESTO ;WRITE IT
;2019-0222 - JQ - Added to increase speed of console output
; by bypassing paper-tape support.
- IF PT_SUPP ;INSERT RUBOUTS AND A PAUSE BETWEEN CR/LF COMBOS
+ IF PT_SUPP = 1 ;INSERT RUBOUTS AND A PAUSE BETWEEN CR/LF COMBOS
MVI A,RUBOUT;GET RUBOUT CHAR
MVI B,0FAH ;LOAD 255-RUBOUT COUNT
PAUZ: CALL TESTO ;SEND RUBOUT
CALL TESTO ;WRITE IT
JMP TREAD ;GET REPLACEMENT CHARACTER
NOTBS: EQU $
- IF LARGE ;CONTROL H WORKS ONLY ON 9K VERSION
+ IF LARGE = 1 ;CONTROL H WORKS ONLY ON 9K VERSION
CPI 8 ;TEST FOR ASCII BACKSPACE
JNZ NOTCH ;BRIF NOT CONTROL H
DCX H ;POINT PRIOR
CALL TERMM ;WRITE IT
POP H ;RESTORE H,L
JMP TREAD ;GET REPLACEMENT CHARACTER
- ENDIF
+ ENDIF
NOTCH: LDA TAPES ;GET PAPER TAPE SWITCH
RAR ;FLAG TO CARRY
JC ECHO ;NO ECHO IF TAPE
; CANCEL IF CONTROL-C
; TOGGLE OUTPUT SUPPRESS SW IF CONTROL-O
;
- IF !CPM
- IF UART ;FOR 8251 UART
+ IF CPM = 0
+ IF UART = 1 ;FOR 8251 UART
IN UARTS ;GET TTY STATUS
ANI RX_MASK ;MASK FOR RXRDY
RZ ;RETURN IF NO CHAR
GETCH: IN UARTD ;READ THE CHAR
ANI 7FH ;TURN OFF PARITY
- ENDIF
+ ENDIF
- IF ACIA ;FOR MC6850 ACIA
+ IF ACIA = 1 ;FOR MC6850 ACIA
IN ACIAS ;GET TTY STATUS
ANI RX_MASK ;MASK FOR RXRDY
RZ ;RETURN IF NO CHAR
GETCH: IN ACIAD ;READ THE CHAR
ANI 7FH ;TURN OFF PARITY
- ENDIF
ENDIF
-
- IF CPM
+ ELSE
;NOTE: FOLLOWING CLOBBERS REGISTERS,
; PUSH AND POP IF FOUND TO CREATE BUGS.
CALL BTSTAT ;CALL BIOS
POP H
POP D
POP B
- ENDIF
+ ENDIF
CPI 3 ;TEST IF CONTROL C
JNZ TSTC1 ;BRIF NOT
CALL PRCNT ;GO PRINT ^C
; TESTS IF (H,L) IS END OF LINE
; ERROR-DL IF NOT
;
- IF ROMSTRT != 0
- CALL RST1 ;CALL TO RAM ADDRESS
- ELSE
+ IF ROMSTRT = 0
RST 1 ;SKIP TO NON BLANK
+ ELSE
+ CALL RST1 ;CALL TO RAM ADDRESS
ENDIF
CALL TSTEL ;TEST IF END LINE
JNZ SNERR ;ERROR IF NOT
; TEST IF (H,L) IS END OF LINE
; RETURN IF NOT, ERROR-DL IF IS
;
- IF ROMSTRT != 0
- CALL RST1 ;CALL TO RAM ADDRESS
- ELSE
+ IF ROMSTRT = 0
RST 1 ;SKIP TO NON BLANK
+ ELSE
+ CALL RST1 ;CALL TO RAM ADDRESS
ENDIF
CALL TSTEL ;TEST IF END OF LINE
JZ SNERR ;ERROR IF IS
PUSH B ;SAVE CTRS
PUSH D ;SAVE EXPR ADDR
PUSH H ;SAVE TEMP ADDR
- IF ROMSTRT != 0
- CALL RST3 ;GO STORE THE VALUE
- ELSE
+ IF ROMSTRT = 0
RST 3 ;GO STORE THE VALUE
+ ELSE
+ CALL RST3 ;GO STORE THE VALUE
ENDIF
POP D ;RESTORE TEMP ADDR
LHLD SPCTR ;GET COUNT
MOV B,M ;GET HI LEN
DCX H ;POINT NEXT
MOV C,M ;GET LO LEN
- IF ROMSTRT != 0
- CALL RST4 ;ADJUST H,L
- ELSE
+ IF ROMSTRT = 0
RST 4 ;ADJUST H,L
+ ELSE
+ CALL RST4 ;ADJUST H,L
ENDIF
DB 3
MOV A,M ;LOAD 1ST CHAR
; PUTS THE NAME IN D,E IF FOUND
; ERROR SN IF NONE FOUND
;
- IF ROMSTRT != 0
- CALL RST1 ;CALL TO RAM ADDRESS
- ELSE
+ IF ROMSTRT = 0
RST 1 ;SKIP TO NON BLANK
+ ELSE
+ CALL RST1 ;CALL TO RAM ADDRESS
ENDIF
CALL ALPHA ;TEST IF ALPHA
JNZ SNERR ;BRIF NOT ALPHA
MOV D,A ;FIRST CHAR
MVI E,' ' ;DEFAULT
INX H ;POINT NEXT
- IF ROMSTRT != 0
- CALL RST1 ;CALL TO RAM ADDRESS
- ELSE
+ IF ROMSTRT = 0
RST 1 ;GET 2ND CHAR
+ ELSE
+ CALL RST1 ;CALL TO RAM ADDRESS
ENDIF
CALL NUMER ;TEST IF NUMERIC
JNZ VAR2 ;BRIF NOT NUMERIC
MOV E,A ;SAVE 2ND CHAR
INX H ;POINT NEXT
- IF ROMSTRT != 0
- CALL RST1 ;CALL TO RAM ADDRESS
- ELSE
+ IF ROMSTRT = 0
RST 1 ;SKIP TO NON BLANK
+ ELSE
+ CALL RST1 ;CALL TO RAM ADDRESS
ENDIF
VAR2: CPI '$' ;TEST IF STRING
JNZ VAR3 ;BRIF NOT
EM EQU 0FEH
;
ULERR:
- IF ROMSTRT != 0
+ IF ROMSTRT = 0
+ RST 6 ;CALL ERROR ROUTINE
+ DB "UL",EM,FATAL ;NOTE FATAL = CODE FOR RST 6
+ZMERR EQU $-1 ;LOG(X<=0),SQR(-X),0 DIVIDE
+ DB "OF",EM,FATAL
+STERR EQU $-1 ;ERROR IN EXPRESSION STACK
+ DB "ST",EM,FATAL
+SNERR EQU $-1 ;DELIMITER ERROR
+ DB "SN",EM,FATAL
+RTERR EQU $-1 ;RETURN & NO GOSUB
+ DB "RT",EM,FATAL
+DAERR EQU $-1 ;OUT OF DATA
+ DB "DA",EM,FATAL
+NXERR EQU $-1 ;NEXT & NO FOR / >8 FOR'S
+ DB "NX",EM,FATAL
+CVERR EQU $-1 ;CONVERSION ERROR
+ DB "CV",EM,FATAL
+CKERR EQU $-1 ;CHECKSUM ERROR
+ DB "CK",EM,FATAL
+ ELSE
CALL RST6 ;CALL ERROR ROUTINE
- DB 'UL',EM
+ DB "UL",EM
CALL RST6 ;CALL ERROR ROUTINE
ZMERR EQU $-3 ;LOG(X<=0),SQR(-X),0 DIVIDE
- DB 'OF',EM
+ DB "OF",EM
CALL RST6 ;CALL ERROR ROUTINE
STERR EQU $-3 ;ERROR IN EXPRESSION STACK
- DB 'ST',EM
+ DB "ST",EM
CALL RST6 ;CALL ERROR ROUTINE
SNERR EQU $-3 ;DELIMITER ERROR
- DB 'SN',EM
+ DB "SN",EM
CALL RST6 ;CALL ERROR ROUTINE
RTERR EQU $-3 ;RETURN & NO GOSUB
- DB 'RT',EM
+ DB "RT",EM
CALL RST6 ;CALL ERROR ROUTINE
DAERR EQU $-3 ;OUT OF DATA
- DB 'DA',EM
+ DB "DA",EM
CALL RST6 ;CALL ERROR ROUTINE
NXERR EQU $-3 ;NEXT & NO FOR / >8 FOR'S
- DB 'NX',EM
+ DB "NX",EM
CALL RST6 ;CALL ERROR ROUTINE
CVERR EQU $-3 ;CONVERSION ERROR
- DB 'CV',EM
+ DB "CV",EM
CALL RST6 ;CALL ERROR ROUTINE
CKERR EQU $-3 ;CHECKSUM ERROR
- DB 'CK',EM
+ DB "CK",EM
CALL RST6 ;CALL ERROR ROUTINE
- ELSE
- RST 6 ;CALL ERROR ROUTINE
- DB 'UL',EM,FATAL ;NOTE FATAL = CODE FOR RST 6
-ZMERR EQU $-1 ;LOG(X<=0),SQR(-X),0 DIVIDE
- DB 'OF',EM,FATAL
-STERR EQU $-1 ;ERROR IN EXPRESSION STACK
- DB 'ST',EM,FATAL
-SNERR EQU $-1 ;DELIMITER ERROR
- DB 'SN',EM,FATAL
-RTERR EQU $-1 ;RETURN & NO GOSUB
- DB 'RT',EM,FATAL
-DAERR EQU $-1 ;OUT OF DATA
- DB 'DA',EM,FATAL
-NXERR EQU $-1 ;NEXT & NO FOR / >8 FOR'S
- DB 'NX',EM,FATAL
-CVERR EQU $-1 ;CONVERSION ERROR
- DB 'CV',EM,FATAL
-CKERR EQU $-1 ;CHECKSUM ERROR
- DB 'CK',EM,FATAL
ENDIF
;
; NON-FATAL ERRORS
;
OVERR EQU $-1 ;OVERFLOW ERROR
- DB 'OV',EM
+ DB "OV",EM
RET ;RETURN TO ROUTINE
UNERR:
- IF ROMSTRT != 0
- CALL RST6 ;CALL ERROR ROUTINE
- ELSE
+ IF ROMSTRT = 0
RST 6 ;CALL ERROR ROUTINE
+ ELSE
+ CALL RST6 ;CALL ERROR ROUTINE
ENDIF
- DB 'UN',EM
+ DB "UN",EM
RET
;
; CONTINUATION OF ERROR MESSAGE ROUTINE (RST 6)
; TABLE IS TERMINATED WITH A '00'
;
FUNCT EQU $
- DB 'ABS',0
+ DB "ABS",0
DW ABS
DB 0ABH
- DB 'SQR',0
+ DB "SQR",0
DW SQR
DB 0ABH
- DB 'INT',0
+ DB "INT",0
DW INT
DB 0ABH
- DB 'SGN',0
+ DB "SGN",0
DW SGN
DB 0ABH
-; DB 'AND',0
+; DB "AND",0
; DW LOGAND
; DB 0ABH
-; DB 'OR',0
+; DB "OR",0
; DW LOGOR
; DB 0ABH
-RNDLI: DB 'RND',0
+RNDLI: DB "RND",0
DW RND
DB 0ABH
- DB 'SIN',0
+ DB "SIN",0
DW SIN
DB 0ABH
- DB 'COS',0
+ DB "COS",0
DW COS
DB 0ABH
- DB 'TAN',0
+ DB "TAN",0
DW TAN
DB 0ABH
- DB 'ATN',0
+ DB "ATN",0
DW ATN
DB 0ABH
- DB 'INP',0
+ DB "INP",0
DW INP
DB 0ABH
- DB 'LN',0
+ DB "LN",0
DW LN
DB 0ABH
- DB 'LOG',0
+ DB "LOG",0
DW LOG
DB 0ABH
- DB 'EXP',0
+ DB "EXP",0
DW EXP
DB 0ABH
- DB 'POS',0
+ DB "POS",0
DW POS
DB 0ABH
- DB 'LEN',0
+ DB "LEN",0
DW LENFN
DB 0ABH
- DB 'CHR$',0
+ DB "CHR$",0
DW CHRFN
DB 0CBH
- DB 'ASCII',0
+ DB "ASCII",0
DW ASCII
DB 0ABH
- DB 'NUM$',0
+ DB "NUM$",0
DW NUMFN
DB 0CBH
- DB 'VAL',0
+ DB "VAL",0
DW VAL
DB 0ABH
- DB 'SPACE$',0
+ DB "SPACE$",0
DW SPACE
DB 0CBH
- DB 'STRING$',0
+ DB "STRING$",0
DW STRFN
DB 0D3H
- DB 'LEFT$',0
+ DB "LEFT$",0
DW LEFT
DB 0D3H
- DB 'RIGHT$',0
+ DB "RIGHT$",0
DW RIGHT
DB 0D3H
- DB 'MID$',0
+ DB "MID$",0
DW MIDFN
DB 0DBH
- DB 'INSTR',0
+ DB "INSTR",0
DW INSTR
DB 0BBH
- DB 'PEEK',0
+ DB "PEEK",0
DW PEEK
DB 0ABH
- IF LARGE
+ IF LARGE = 1
DB 0,0,0,0 ;ROOM FOR ONE MORE FUNCTION
DB 0,0,0,0
- ENDIF
+ ENDIF
DB 0 ;END OF FUNCTION TABLE
;
; PROGRAM CONSTANTS
DB 33H,0D3H
DB 1AH,85H
DB 2BH,1EH
-WHATL: DB 'WHAT',0
+WHATL: DB "WHAT",0
VERS EQU $ ;VERSION MESSAGE
- IF LARGE
- DB 0x0D,0x0A,'BASIC 9K VERS 1.42 '
- IF ACIA
- DB '(6850 ACIA)'
- ELSE
- DB '(8251 UART)'
- ENDIF
+ IF LARGE = 1
+ DB 0DH,0AH,"BASIC 9K VERS 1.42 "
+ IF ACIA = 1
+ DB "(6850 ACIA)"
+ ELSE
+ DB "(8251 UART)"
+ ENDIF
DB 0
RBOUT: DB 08H,20H,08H,0FEH ;RUBOUT SEQUENCE (9K ONLY)
- ELSE
- DB 0x0D,0x0A,'BASIC 8K VERS 1.42 '
- IF ACIA
- DB '(6850 ACIA)'
- ELSE
- DB '(8251 UART)'
- ENDIF
+ ELSE
+ DB 0DH,0AH,"BASIC 8K VERS 1.42 "
+ IF ACIA = 1
+ DB "(6850 ACIA)"
+ ELSE
+ DB "(8251 UART)"
+ ENDIF
DB 0
- ENDIF
-LLINE: DB 'LINE',0
-TABLI: DB 'TAB',0
-STEPL: DB 'STEP',0
-THENL: DB 'THEN',0
-PILIT: DB 'PI',0
+ ENDIF
+LLINE: DB "LINE",0
+TABLI: DB "TAB",0
+STEPL: DB "STEP",0
+THENL: DB "THEN",0
+PILIT: DB "PI",0
TWO: DB 02H,80H,00H,00H ;CONSTANT: 2
TEN: DB 04H,0A0H,00H,00H ;CONSTANT: 10
PI: DB 02H,0C9H,0FH,0D7H ;CONSTANT: 3.141593
LNC: DB 07FH,0DEH,05BH,0D0H ;C=LOG BASE 10 OF E
READY EQU $
DB 0FDH
- DB 'READY',0
+ DB "READY",0
STOPM EQU $
DB 0FDH
- DB 'STOP AT LINE ',0FEH
-ERRMS: DB ' ERROR IN LINE ',0FEH
+ DB "STOP AT LINE ",0FEH
+ERRMS: DB " ERROR IN LINE ",0FEH
;
; VERB (STATEMENT/COMMAND) TABLE
; FORMAT IS: DB 'VERB',0
; END OF TABLE IS MARKED BY DB 0
;
JMPTB EQU $
- DB 'LIST',0
+ DB "LIST",0
DW LIST
- DB 'RUN',0
+ DB "RUN",0
DW RUNCM
- DB 'XEQ',0
+ DB "XEQ",0
DW XEQ
- DB 'NEW',0
+ DB "NEW",0
DW NEW
- DB 'CON',0
+ DB "CON",0
DW CONTI
IF IMSAI
- DB 'TAPE',0
+ DB "TAPE",0
DW TAPE
- DB 'SAVE',0
+ DB "SAVE",0
DW SAVE
-KEYL: DB 'KEY',0
+KEYL: DB "KEY",0
DW KEY
ENDIF
- DB 'FRE',0
+ DB "FRE",0
DW FREE
- DB 'IF',0
+ DB "IF",0
DW IFSTM
- DB 'READ',0
+ DB "READ",0
DW READ
- DB 'RESTORE',0
+ DB "RESTORE",0
DW RESTO
-DATAL: DB 'DATA',0
+DATAL: DB "DATA",0
DW RUN
- DB 'FOR',0
+ DB "FOR",0
DW FOR
-NEXTL: DB 'NEXT',0
+NEXTL: DB "NEXT",0
DW NEXT
-GOSBL: DB 'GOSUB',0
+GOSBL: DB "GOSUB",0
DW GOSUB
- DB 'RETURN',0
+ DB "RETURN",0
DW RETUR
- DB 'INPUT',0
+ DB "INPUT",0
DW INPUT
- DB 'PRINT',0
+ DB "PRINT",0
DW PRINT
-GOTOL: DB 'GO'
-TOLIT: DB 'TO',0
+GOTOL: DB "GO"
+TOLIT: DB "TO",0
DW GOTO
- DB 'LET',0
+ DB "LET",0
DW LET
- DB 'STOP',0
+ DB "STOP",0
DW STOP
- DB 'END',0
+ DB "END",0
DW ENDIT
- DB 'REM',0
+ DB "REM",0
DW RUN
- DB '!',0
+ DB "!",0
DW RUN
- DB '?',0
+ DB "?",0
DW PRINT
- DB 'RANDOMIZE',0
+ DB "RANDOMIZE",0
DW RANDO
- DB 'ON',0
+ DB "ON",0
DW ON
- DB 'OUT',0
+ DB "OUT",0
DW OUTP
- DB 'DIM',0
+ DB "DIM",0
DW DIM
- DB 'CHANGE',0
+ DB "CHANGE",0
DW CHANG
-DEFLI: DB 'DEF'
-FNLIT: DB 'FN',0
+DEFLI: DB "DEF"
+FNLIT: DB "FN",0
DW RUN
- IF CPM
- DB 'DDT',0
+ IF CPM = 1
+ DB "DDT",0
DW DDT
- ENDIF
- DB 'BYE',0
+ ENDIF
+ DB "BYE",0
DW BOOT
- DB 'POKE',0
+ DB "POKE",0
DW POKE
- DB 'CALL',0
+ DB "CALL",0
DW JUMP
- IF LARGE ;INCLUDE ONLY IN 8K+ VERSION
- DB 'EDIT',0
+ IF LARGE = 1 ;INCLUDE ONLY IN 8K+ VERSION
+ DB "EDIT",0
DW FIX
- IF IMSAI
- DB 'CLOAD',0
+ IF IMSAI = 1
+ DB "CLOAD",0
DW CLOAD
- DB 'CSAVE',0
+ DB "CSAVE",0
DW CSAVE
- ENDIF
+ ENDIF
ENDIF
- IF HUNTER
- DB 'BAUD',0
+ IF HUNTER = 1
+ DB "BAUD",0
DW BAUD
- ENDIF
+ ENDIF
DB 0 ;END OF TABLE
;
; DDT COMMAND, CPM ONLY
;
- IF CPM
+ IF CPM = 1
DDT: RST 7
JMP RDY
- ENDIF
+ ENDIF
;
FACDE EQU $
;
LDAX D ;GET BYTE FROM TABLE
ORA A ;TEST IT
JZ SEEK3 ;BRIF END OF TABLE
- IF ROMSTRT != 0
- CALL RST2 ;GO COMPARE
- ELSE
+ IF ROMSTRT = 0
RST 2 ;GO COMPARE
+ ELSE
+ CALL RST2 ;GO COMPARE
ENDIF
JNZ SEEK2 ;BRIF NOT FOUND
XTHL ;PUT CURRENT H,L ON STACK
; EDIT <LINE #><DELIMITER><OLD TEXT><DELIMITER><NEW TEXT>
;
FIX: EQU $
- IF ROMSTRT != 0
- CALL RST1 ;CALL TO RAM ADDRESS
- ELSE
+ IF ROMSTRT = 0
RST 1 ;SKIP TO NON BLANK
+ ELSE
+ CALL RST1 ;CALL TO RAM ADDRESS
ENDIF
CALL PACK ;GET LINE # IN B,C
- IF ROMSTRT != 0
- CALL RST1 ;CALL TO RAM ADDRESS
- ELSE
+ IF ROMSTRT = 0
RST 1 ;SKIP TO NON BLANK
+ ELSE
+ CALL RST1 ;CALL TO RAM ADDRESS
ENDIF
SHLD ADDR2 ;SAVE COMMAND POINTER
CALL LOCAT ;SEARCH FOR LINE # IN PROGRAM
PUSH H ;SAVE IT
JMP EDIT2 ;PROCESS AS NEW LINE
;
- IF IMSAI
+ IF IMSAI = 1
;
; TAPE CASSETTE COMMANDS
;
;
; CSAVE COMMAND
;
- IF ROMSTRT != 0
-CSAVE: CALL RST1 ;CALL TO RAM ADDRESS
- ELSE
+ IF ROMSTRT = 0
CSAVE: RST 1 ;SKIP ANY SPACES
+ ELSE
+CSAVE: CALL RST1 ;CALL TO RAM ADDRESS
ENDIF
MVI A,10H ;ENABLE WRITE
OUT CASC
CPI 20H ;TEST FOR NO NAME
CNZ TERMO ;PRINT NAME IF THERE
JMP BELL
- ENDIF
+ ENDIF
ENDIF
;
PEEK EQU $
XCHG ;MOVE ADDRESS TO HL
PCHL ;EXECUTE USER'S ROUTINE
;
- IF HUNTER
+ IF HUNTER = 1
;
BAUD EQU $
;
;
; COMMAND 'BAUD <RATE>' WHERE <RATE>=110,300,1200,2400,9600
;
- IF ROMSTRT != 0
- CALL RST1 ;CALL TO RAM ADDRESS
- ELSE
+ IF ROMSTRT = 0
RST 1 ;SKIP TO NON BLANK
+ ELSE
+ CALL RST1 ;CALL TO RAM ADDRESS
ENDIF
LXI D,BAUDS+6 ;POINT BAUD TABLE
CALL SEEK ;GO SEARCH BAUD TABLE
ORA A ;TEST IT
JZ RUN ;BRIF RUN MODE
JMP GETCM ;BRIF IMMEDIATE MODE
-BAUDS: DB 'BAUD',0FEH ;BAUD MESSAGE
+BAUDS: DB "BAUD",0FEH ;BAUD MESSAGE
;
; BAUD TABLE.
;
-B110: DB '110 ',0FAH,2,0
+B110: DB "110 ",0FAH,2,0
DW B110
-B300: DB '300 ',0FBH,0
+B300: DB "300 ",0FBH,0
DW B300
-B1200: DB '1200',0FAH,0
+B1200: DB "1200",0FAH,0
DW B1200
-B2400: DB '2400',0FAH,32,0
+B2400: DB "2400",0FAH,32,0
DW B2400
-B9600: DB '9600',0FAH,34,0
+B9600: DB "9600",0FAH,34,0
DW B9600
DB 0 ;END OF BAUD TABLE
;
ENDIF
;
- IF CPM ;CPM INITIALIZATION STORES
+ IF CPM ;CPM INITIALIZATION STORES
;...BIOS JUMP TABLE HERE
BTSTAT: DS 3 ;JMP TO BIOS CONSOLE STATUS
BTIN: DS 3 ;JMP TO BIOS CONSOLE INPUT
BTOUT: DS 3 ;JMP TO BIOS CONSOLE OUTPUT
- ENDIF
+ ENDIF
ROMEND EQU $-1
;
ORG RAMSTRT ;RAM STARTS OF 32K BOUNDARY
- IF LARGE OR CPM ;ADJUST START OF RAM IF 8+K
+ IF LARGE = 1 || CPM = 1 ;ADJUST START OF RAM IF 8+K
ORG RAMSTRT ;RAM STARTS OF 32K BOUNDARY
- ENDIF
+ ENDIF
;
; ALL CODE ABOVE THIS POINT IS READ ONLY AND CAN BE PROM'ED
;
DATAB: DS 2 ;ADDRESS OF DATA POOL
PROGE: DS 2 ;ADDRESS OF PROGRAM END
;
- IF CPM
+ IF CPM = 1
;TEMPORARY CODE FOR INITIALIZATION HERE
;
INITC: LHLD BOOT+1 ;PTR TO BIOS TABLE
SHLD 31H
LHLD BDOS+1 ;LOCATE TOP OF RAM
JMP INIT1 ;CONTINUE AS IN NON-CPM VERSION
- ENDIF
+ ENDIF
;
;
DS 1 ;DATA STATEMENT FLAG (MUST BE HERE)