        tabs    8,8                     ; first tab is 8, then each tab is 8 ahead
        width   132                     ; prevent folding of long lines
        noproces                        ; disable fancy stuff, speed is what we want
;
        title   "Phunsy 2650 Micro Computer"
        stitle  "MicroWorld BASIC Interpreter"
;
        name    MWBasic                 ; the module name
;
        INCLUDE "2650.inc"              ; 2650 definitions
        INCLUDE "ascii.inc"             ; ascii definitions
        INCLUDE "monitor.inc"           ; monitor definitions
;
pm      equ    01fffh                   ; page mask - this is to fool the VASC assembler
;
prgbase equ     02000H                  ; address of basic 2650 program code (must be 2000h, 4000h or 6000h)
txtbase equ     04000H                  ; address of basic user program text (must be 2000h, 4000h or 6000h and different from prgbase)
;
; Note: basic text starts at address txtbase.
; The first char is STX (02) followed by basic text lines.
; The end of the basic text is indicated with ETX (03).
; Each line must start with a line number and must be terminated with CR.
; (for some reason the STX is followed by a cr always but it is not required for the interpreter.)
; There are no special codes in the basic text. Everything is stored as typed.
;
; Note: for PHUNSY some changec were made. e.g. line length is different. esc aborts, Q jumps to address 0 (monitor reset)
; The read and write file are kept but useless. a saved file must be stored at address txtbase before exec at prgbase.
;
        ORG     prgbase                 ;
;
BASST   BSTA,UN *USRINAC                ;initialize user stuff
;
PRNAM   EORZ    R0                      ;
        LPSU                            ;
        LODI,R0 COM                     ;
        LPSL                            ;
        LODI,R2 0FFh                    ;
PRNAMA  LODA,R0 SOTXTS&pm,R2+           ;
        COMI,R0 text                    ;
        BCFA,EQ CSTART                  ;
        LODI,R0 CR                      ;
        BSTA,UN *CH0OUTV                ;
        LODI,R0 LF                      ;
        BSTA,UN *CH0OUTV                ;
        LODA,R0 SOTXTS&pm,R2+           ;
        STRZ    R1                      ;
PRNAMB  LODA,R0 SOTXTS&pm,R2+           ;
        BSTA,UN *CH0OUTV                ;
        BDRR,R1 PRNAMB                  ;
        BCTR,UN PRNAMA                  ;
;
SOTXTS  BYTE    text,SOTXT1Z-SOTXT1
SOTXT1  BYTE    "MicroWorld Basic interpreter"
SOTXT1Z equ     $
;
        BYTE    text,SOTXT2Z-SOTXT2
SOTXT2  BYTE    "ver 08, FP, 2014-04-12"
SOTXT2Z equ     $
;
CSTART  LODI,R2 WORDARZ-WORDAR          ; 
        EORZ    R0                      ;
CSTARTA STRA,R0 WORDAR&pm,R2-           ; clear word array
        BRNR,R2 CSTARTA                 ;
        STRA,R0 FLAGS&pm                ;
        STRA,R0 NROCHS&pm               ;
;       STRA,R0 PROMPT&pm               ; this is done later anyway
;       STRA,R0 UNKN1&pm                ; looks like this is not used
WSTART  EORZ    R0                      ;
        LPSU                            ;
        LODI,R0 COM                     ;
        LPSL                            ;
        LODI,R2 2                       ;
WSTARTA LODA,R0 PRGSTV&pm,R2-           ;
        STRA,R0 WORD0&pm,R2             ; move basic-program start address to WORD[0]
        BRNR,R2 WSTARTA                 ;
        LODI,R0 020h                    ;
        BSTA,UN WRDINC                  ; word[2] = word[1]+1
        BSTR,UN SETIO                   ; set standard user i/o
        LODI,R0 ">"                     ; prompt char
        STRA,R0 PROMPT&pm               ;
        BSTA,UN CRLF                    ; new line
        BSTA,UN LINPR                   ; get user input to text buffer
        BCFA,LT BFERR                   ; BUFFER ERROR then WSTART (more chars entered then line buffer length)
        BSTA,UN BENTR                   ; basic entry
        LODA,R0 FLAGS&pm                ;
        IORI,R0 001h                    ; indicate basic program runned ?
        STRA,R0 FLAGS&pm                ;
        BCTR,UN WSTART                  ;
;
;                                         == select i/o channels 0
SETIO   LODI,R3 4                       ;
SETIOA  LODA,R0 CH0INPV&pm,R3-          ; character input and output vectors in rom
        STRA,R0 CINPPTR&pm,R3           ; character input and output pointers in ram
        BRNR,R3 SETIOA                  ;
        STRA,R3 CURPOS&pm               ; R1 ??? 20140412 changed to R3 (ok to do this here?)
        STRA,R3 W5DBC&pm                ; R1 ??? 20140412 changed to R3
        STRA,R3 V5FEA&pm                ; R1 ??? 20140412 changed to R3
        RETC,UN                         ;
;
;                                         == wordarray[R0hi]=wordarray[R0lo] (RS=1)
MVWRD   BSTR,UN SPLITRS                 ;
        LODA,R0 WORD0&pm,R2             ;
        STRA,R0 WORD0&pm,R3             ;
        LODA,R0 WORD0&pm,R2+            ;
        STRA,R0 WORD0&pm,R3+            ;
        CPSL    RS                      ;
        RETC,UN                         ;
;
;                                         == wordarray[R0lo] >=<? wordarray[R0hi] (RS=1)
CPWRD   PPSL    RS+COM                  ;
        BSTR,UN SPLITR0                 ;
        LODA,R0 WORD0&pm,R2             ;
        COMA,R0 WORD0&pm,R3             ;
        BCFR,EQ CPWRDA                  ;
        LODA,R0 WORD0&pm,R2+            ;
        COMA,R0 WORD0&pm,R3+            ;
CPWRDA  CPSL    RS                      ;
        RETC,UN                         ;
;
;                                         == wordarray[R0hi]=aconarray4D73[R0lo] (RS=1)
TRCOS   BSTR,UN SPLITRS                 ;
        LODA,R0 INPBAC&pm,R2            ;
        STRA,R0 WORD0&pm,R3             ;
        LODA,R0 INPBAC&pm,R2+           ;
        STRA,R0 WORD0&pm,R3+            ;
        CPSL    RS                      ;
        RETC,UN                         ;
;
;                                         == split R0 into two pointers R2=low nibble*2 and R3=high nibble*2
SPLITRS PPSL    RS                      ;
SPLITR0 STRZ    R2                      ;
        ANDI,R0 0F0h                    ;
        ANDI,R2 00Fh                    ;
        RRR,R0                          ;
        RRR,R0                          ;
        RRR,R0                          ;
        RRL,R2                          ;
        STRZ    R3                      ;
        RETC,UN                         ;
;
;                                         == wordarray[R0hi]+=wordarray[R0lo] (RS=1)
ADWRD   BSTR,UN SPLITRS                 ;
        LODA,R0 WORD0&pm,R2+            ;
        ADDA,R0 WORD0&pm,R3+            ;
        STRA,R0 WORD0&pm,R3             ;
        PPSL    WC                      ;
        LODA,R0 WORD0&pm,R2-            ;
        ADDA,R0 WORD0&pm,R3-            ;
        STRA,R0 WORD0&pm,R3             ;
        CPSL    RS+WC                   ;
        RETC,UN                         ;
;
;                                         == wordarray[R0hi]-=wordarray[R0lo] (RS=1)
SBWRD   BSTR,UN SPLITRS                 ;
        PPSL    WC+C                    ;
        LODA,R0 WORD0&pm,R3+            ;
        SUBA,R0 WORD0&pm,R2+            ;
        STRA,R0 WORD0&pm,R3             ;
        LODA,R0 WORD0&pm,R3-            ;
        SUBA,R0 WORD0&pm,R2-            ;
        STRA,R0 WORD0&pm,R3             ;
        CPSL    RS+WC+C                 ;
        RETC,UN                         ;
;
;                                         == get user input to text buffer
;                                         return = escape
;                                         return + more chars then allowed
;                                         return - normal return
;                                         enter 61-CURPOS chars max for PHUNSY plus CR
LINPR   LODI,R0 " "                     ; space
        LODI,R2 80                      ; 80 characters (60 would be enough for PHUNSY)
LINPRA  STRA,R0 INPBUF&pm,R2-           ; clear input buffer with spaces
        BRNR,R2 LINPRA                  ; note: R2 = 0
        LODA,R0 PROMPT&pm               ; get prompt character (> or ?)
        BSTA,UN *COUTPTR                ; prompt to screen
        LODI,R0 " "                     ; space
LINPRB  BSTA,UN *COUTPTR                ;
LINPRC  BSTA,UN *CINPPTR                ; get char foom user
        COMI,R0 ESC                     ; excape / abort ?
        RETC,EQ                         ;
;        COMI,R0 CAN                     ; ctrl X
;        BCTR,EQ LINPRG                  ;
        COMI,R0 BS                      ; ctrl H, backspace?
        BCFR,EQ LINPRD                  ;
        COMI,R2 0                       ; at begin of line?
        BCTR,EQ LINPRC                  ; yes
        SUBI,R2 1                       ; decrement nr chars in buffer
        BCTR,UN LINPRB                  ; output and get new input
;
LINPRD  COMI,R0 CR                      ; cr
        BCTR,EQ LINPRF                  ; yes
        ADDA,R2 CURPOS&pm               ;
        COMI,R2 61-1                    ; check if cursor at end of screen
        RETC,GT                         ; too many chars in line
        SUBA,R2 CURPOS&pm               ;
        COMI,R0 NAK                     ; ctrl U
        BCFR,EQ LINPRE                  ;
        LODA,R0 INPBUF&pm,R2            ;
LINPRE  COMI,R0 " "                     ;
        BCTR,LT LINPRC                  ;
        COMI,R0 "~"                     ;
        BCTR,GT LINPRC                  ;
LINPRF  STRA,R0 INPBUF&pm,R2            ; store char in buff
        ADDI,R2 1                       ;
        COMI,R0 cr                      ;
        BCFR,EQ LINPRB                  ;
        STRA,R2 NROCHS&pm               ;
        PPSL    CC1                     ;
        RETC,UN                         ;
;                                        ctrl X pressed (do we need this ?)
;LINPRG  ADDA,R2 CURPOS&pm               ;
;LINPRH  COMI,R2 61-2                    ;
;        BCTR,LT LINPRI                  ;
;        LODI,R0 BS                      ;
;        BSTA,UN *COUTPTR                ; make room for *** at near end of lime
;        BDRR,R2 LINPRH                  ;
;LINPRI  LODI,R2 3                       ;
;LINPRJ  LODI,R0 "*"                     ; print *** indicated line not accepted
;        BSTA,UN *COUTPTR                ;
;        BDRR,R2 LINPRJ                  ;
;        BSTA,UN CRLF                    ;
;        BCTA,UN LINPR                   ; get user input to text buffer
;
;                                         == Word[6]=atoi(*Word[4])
GETNR   EORZ    R0                      ;
        STRZ    R1                      ;
        STRZ    R3                      ;
GETNRA  LODA,R0 *WORD4&pm,R2            ;
        SUBI,R0 "0"                     ;
        BCTR,LT GETNRB                  ;
        COMI,R0 9                       ;
        BCTR,GT GETNRB                  ;
        PPSL    WC                      ;
        CPSL    C                       ;
        RRL,R3                          ;
        RRL,R1                          ;
        RRL,R3                          ;
        RRL,R1                          ;
        RRL,R3                          ;
        RRL,R1                          ;
        RRL,R3                          ;
        RRL,R1                          ;
        IORZ    R3                      ;
        STRZ    R3                      ;
        CPSL    WC                      ;
        BSTA,UN INCW4                   ; Increment word[4+1]:R2
        BCTR,UN GETNRA                  ;
;
GETNRB  STRA,R1 WORD6&pm                ;
        STRA,R3 WORD6+1&pm              ;
        RETC,UN                         ;
;
W2TOW4  LODA,R0 WORD2&pm                ;
        STRA,R0 WORD4&pm                ;
        EORZ    R0                      ;
        STRA,R0 WORD4+1&pm              ;
        LODA,R2 WORD2+1&pm              ;
        RETC,UN                         ;
;
REMRT   BSTR,UN W2TOW4                  ;
REMRTA  BSTA,UN INCW4                   ; Increment word[4+1]:R2
        LODA,R0 *WORD4&pm,R2            ;
        COMI,R0 003h                    ;
        RETC,EQ                         ;
        COMI,R0 00Dh                    ;
        BCFR,EQ REMRTA                  ;
W4TOW2  LODA,R0 WORD4&pm                ;
        STRA,R0 WORD2&pm                ;
        STRA,R2 WORD2+1&pm              ;
        PPSL    CC1                     ;
        RETC,UN                         ;
;
WRTLN   BSTA,UN CRLF                    ;
WRTLNA  BSTA,UN INCW4                   ; Increment word[4+1]:R2
        LODA,R0 *WORD4&pm,R2            ;
        COMI,R0 003h                    ;
        RETC,EQ                         ;
        COMI,R0 00Dh                    ;
        BCTR,EQ WRTLNB                  ;
        BSTA,UN *COUTPTR                ;
        BCTR,UN WRTLNA                  ;
;
WRTLNB  PPSL    CC1                     ;
        RETC,UN                         ;
;
;                                         == wordarray[R0hi]=wordarray[R0lo]+1 (RS=0)
WRDINC  LODI,R1 1                       ;
;                                         == wordarray[R0hi]=wordarray[R0lo]+R1 (RS=0)
WRDPR1  BSTA,UN SPLITR0                 ;
        LODA,R0 WORD0&pm,R2+            ;
        ADDZ    R1                      ;
        STRA,R0 WORD0&pm,R3+            ;
        PPSL    WC                      ;
        EORZ    R0                      ;
        ADDA,R0 WORD0&pm,R2-            ;
        STRA,R0 WORD0&pm,R3-            ;
        CPSL    WC                      ;
        RETC,UN                         ;
;
;                                         == execute user command / BASIC entry
BENTR   LODI,R0 040h                    ; word[4] & acon[0]
        BSTA,UN TRCOS                   ; wordarray[R0hi]=aconarray4D73[R0lo] (RS=1)
        LODI,R2 0                       ; index
        LODA,R0 INPBUF&pm               ;
        COMI,R0 "9"                     ;
        BCTA,GT CHCOM                   ; no line number, get user command
EDITR   LODA,R0 FLAGS&pm                ;
        BCTA,EQ FLERR                   ; FILE ERROR
        ANDI,R0 00Fh                    ;
        STRA,R0 FLAGS&pm                ;
        BSTA,UN GETNR                   ; Word[6]=atoi(*Word[4])
        LODZ    R1                      ;
        IORZ    R3                      ;
        BCTA,EQ SXERR                   ; no decimal value or 0 > SYNTAX ERROR
        LODA,R0 *WORD4&pm,R2            ;
        STRA,R0 TMPBUF&pm               ;
        BSTR,UN FNDLN                   ;
        BSTA,EQ MOVDN                   ;
        LODA,R0 TMPBUF&pm               ;
        COMI,R0 00Dh                    ;
        BCTA,GT INSLN                   ;
        RETC,UN                         ;
;
FNDLN   LODI,R0 076h                    ;
        BSTA,UN MVWRD                   ; wordarray[R0hi]=wordarray[R0lo] (RS=1)
        BSTA,UN W2TOW4                  ;
FNDLNA  BSTA,UN INCW4                   ; Increment word[4+1]:R2
        BSTA,UN GETNR                   ; Word[6]=atoi(*Word[4])
        LODI,R0 076h                    ;
        BSTA,UN CPWRD                   ; wordarray[R0lo] >=<? wordarray[R0hi] (RS=1)
        RETC,GT                         ;
        RETC,EQ                         ;
        BSTA,UN REMRT                   ;
        BCFR,EQ FNDLNA                  ;
        PPSL    CC1                     ;
        RETC,UN                         ;
;
CHCOM   BSTA,UN CRLF                    ;
        LODI,R3 7                       ;
CHCOMA  LODA,R0 INPBUF&pm,R3-           ;
        STRA,R0 V5DA1&pm,R3             ;
        BRNR,R3 CHCOMA                  ;
        BSTA,UN FDCOMB                  ;
        BRNA,R1 DIRMD                   ;
        LODA,R0 INPBUF&pm               ;
        COMI,R0 "Q"                     ; quit?
        BCTA,EQ *QUITAC                 ; yes
        COMI,R0 "O"                     ; old ?
        BCTR,EQ STOLD                   ; yes
        COMI,R0 "N"                     ; new ?
        BCFR,EQ CHCOMB                  ; no
STNEW   LODI,R0 2                       ;
        STRZ    R1                      ;
        STRA,R0 *WORD0&pm               ;
        LODI,R0 00Dh                    ;
        STRA,R0 *WORD2&pm               ;
        LODI,R0 3                       ;
        STRA,R0 *WORD0&pm,R1            ;
STOLD   LODA,R0 *WORD0&pm               ;
        COMI,R0 002h                    ;
        BCFA,EQ FLERR                   ; FILE ERROR
STOLDA  BSTA,UN REMRT                   ;
        BCFR,EQ STOLDA                  ;
        LODA,R0 WORD4&pm                ;
        STRA,R0 WORD1&pm                ;
        STRA,R2 WORD1+1&pm              ;
        RETC,UN                         ;
;
CHCOMB  COMI,R0 "L"                     ; L list or load
        BCFR,EQ CHCOMC                  ;
        LODA,R1 INPBUF+1&pm             ;
        COMI,R1 "O"                     ; LO load
        BCFR,EQ CHCOMC                  ;
        BSTA,UN *RDFLAC                 ;
        BCTA,UN STOLD                   ;
;
CHCOMC  LODA,R1 FLAGS&pm                ;
        BCTA,EQ FLERR                   ; FILE ERROR
        COMI,R0 "L"                     ;
        BCFA,EQ CHCOMD                  ; not List
LISTR   LODA,R0 *WORD4&pm,R2+           ;
        COMI,R0 041h                    ;
        BCFR,LT LISTR                   ;
        BSTA,UN SKPSP                   ;
        BSTA,UN SETPN                   ; set printer number
        COMI,R0 031h                    ;
        BCTR,LT LSTALL                  ;
        BSTA,UN GETNR                   ; Word[6]=atoi(*Word[4])
        STRA,R2 TMPBUF&pm               ;
        BSTA,UN FNDLN                   ;
        LODI,R0 040h                    ;
        BSTA,UN TRCOS                   ; wordarray[R0hi]=aconarray4D73[R0lo] (RS=1)
        LODA,R2 TMPBUF&pm               ;
        LODA,R0 *WORD4&pm,R2            ;
        COMI,R0 020h                    ;
        BCTR,LT LISTRA                  ;
        ADDI,R2 001h                    ;
        BSTA,UN GETNR                   ; Word[6]=atoi(*Word[4])
        LODI,R0 076h                    ;
        BSTA,UN MVWRD                   ; wordarray[R0hi]=wordarray[R0lo] (RS=1)
        BCTR,UN LISTRA                  ;
;
LSTALL  LODI,R0 099h                    ;
        STRA,R0 WORD7&pm                ;
        STRA,R0 WORD7+1&pm              ;
LISTRA  BSTA,UN W2TOW4                  ;
LISTRB  BSTA,UN *CHINAC                 ; check if key pressed
        TMI,R0  07Fh                    ;
        BCTR,EQ LISTRC                  ; aparently not
        BSTA,UN *CH0INPV                ; get key
        COMI,R0 ESC                     ; escape?
        RETC,EQ                         ; Yes
LISTRC  BSTA,UN INCW4                   ; Increment word[4+1]:R2
        BSTA,UN GETNR                   ; Word[6]=atoi(*Word[4])
        LODI,R0 076h                    ;
        BSTA,UN CPWRD                   ; wordarray[R0lo] >=<? wordarray[R0hi] (RS=1)
        RETC,GT                         ;
        BSTA,UN W2TOW4                  ;
        BSTA,UN WRTLN                   ;
        RETC,EQ                         ;
        BSTA,UN W4TOW2                  ;
        BCTR,UN LISTRB                  ;
;
MOVDN   LODI,R0 072h                    ;
        BSTA,UN MVWRD                   ; wordarray[R0hi]=wordarray[R0lo] (RS=1)
        LODI,R0 032h                    ;
        BSTA,UN MVWRD                   ; wordarray[R0hi]=wordarray[R0lo] (RS=1)
        BSTA,UN REMRT                   ;
        LODI,R0 042h                    ;
        BSTA,UN MVWRD                   ; wordarray[R0hi]=wordarray[R0lo] (RS=1)
        LODI,R0 051h                    ;
        BSTA,UN MVWRD                   ; wordarray[R0hi]=wordarray[R0lo] (RS=1)
        BSTR,UN MOVDNA                  ;
        LODI,R0 027h                    ;
        BCTA,UN MVWRD                   ; wordarray[R0hi]=wordarray[R0lo] (RS=1)
;
MOVDNA  BSTR,UN PRMOV                   ;
        BCTR,EQ MOVDND                  ;
MOVDNB  LODA,R0 *WORD4&pm,R2            ;
        STRA,R0 *WORD3&pm,R3            ;
        BIRR,R3 MOVDNC                  ;
        LODA,R0 WORD3&pm                ;
        ADDI,R0 001h                    ;
        STRA,R0 WORD3&pm                ;
MOVDNC  BSTR,UN INCW4                   ; Increment word[4+1]:R2
        BDRR,R1 MOVDNB                  ;
MOVDND  LODA,R0 WORD5&pm                ;
        COMA,R0 WORD4&pm                ;
        BCFR,EQ MOVDNB                  ;
        LODA,R0 *WORD4&pm,R2            ;
        STRA,R0 *WORD3&pm,R3            ;
        STRA,R3 WORD3+1&pm              ;
MOVDNE  LODI,R0 013h                    ;
        BCTA,UN MVWRD                   ; wordarray[R0hi]=wordarray[R0lo] (RS=1)
;
;                                         == Increment word[4+1]:R2
INCW4   BIRR,R2 INCW4B                  ;
INCW4A  LODA,R0 WORD4&pm                ;
        ADDI,R0 1                       ;
        STRA,R0 WORD4&pm                ;
INCW4B  RETC,UN                         ;
;
PRMOV   CPSL    WC                      ;
        LODA,R2 WORD4+1&pm              ;
        LODA,R3 WORD3+1&pm              ;
        EORZ    R0                      ;
        STRA,R0 WORD4+1&pm              ;
        STRA,R0 WORD3+1&pm              ;
        LODA,R0 WORD5+1&pm              ;
        SUBZ    R2                      ;
        STRZ    R1                      ;
        RETC,UN                         ;
;
MOVUP   LODI,R0 041h                    ;
        BSTA,UN MVWRD                   ; wordarray[R0hi]=wordarray[R0lo] (RS=1)
        LODA,R0 *WORD3&pm               ;
        EORI,R0 0FFh                    ;
        STRA,R0 *WORD3&pm               ;
        COMA,R0 *WORD3&pm               ;
        BCFA,EQ MEMERR                  ; MEMORY ERROR
        LODI,R0 013h                    ;
        BSTA,UN MVWRD                   ; wordarray[R0hi]=wordarray[R0lo] (RS=1)
        BSTR,UN PRMOV                   ;
        BCFR,EQ MOVUPA                  ;
        LODA,R0 WORD5&pm                ;
        COMA,R0 WORD4&pm                ;
        RETC,EQ                         ;
MOVUPA  LODA,R0 *WORD4&pm,R2            ;
        STRA,R0 *WORD3&pm,R3            ;
        BCTR,UN MOVUPC                  ;
;
MOVUPB  LODA,R0 *WORD4&pm,R2-           ;
        STRA,R0 *WORD3&pm,R3-           ;
        BIRR,R1 MOVUPC                  ;
        LODA,R0 WORD5&pm                ;
        COMA,R0 WORD4&pm                ;
        RETC,EQ                         ;
MOVUPC  BRNR,R3 MOVUPD                  ;
        LODA,R0 WORD3&pm                ;
        SUBI,R0 001h                    ;
        STRA,R0 WORD3&pm                ;
MOVUPD  BRNR,R2 MOVUPB                  ;
        BSTR,UN DWRD4H                  ;
        BCTR,UN MOVUPB                  ;
;
DWRD4H  LODA,R0 WORD4&pm                ;
        SUBI,R0 001h                    ;
        STRA,R0 WORD4&pm                ;
        RETC,UN                         ;
;
INSLN   LODA,R1 NROCHS&pm               ;
        RETC,EQ                         ;
        LODI,R0 031h                    ;
        BSTA,UN WRDPR1                  ; wordarray[R0hi]=wordarray[R0lo]+R1 (RS=0)
        LODI,R0 052h                    ;
        BSTA,UN MVWRD                   ; wordarray[R0hi]=wordarray[R0lo] (RS=1)
        BSTA,UN MOVUP                   ;
        LODA,R1 NROCHS&pm               ;
        LODI,R3 0FFh                    ;
        BSTA,UN W2TOW4                  ;
INSLNA  BSTA,UN INCW4                   ; Increment word[4+1]:R2
        LODA,R0 INPBUF&pm,R3+           ;
        STRA,R0 *WORD4&pm,R2            ;
        BDRR,R1 INSLNA                  ;
        RETC,UN                         ;
;
SIZERA  BSTA,UN MVWRD                   ; wordarray[R0hi]=wordarray[R0lo] (RS=1)
        LODI,R0 060h                    ;
        BSTA,UN SBWRD                   ; wordarray[R0hi]-=wordarray[R0lo] (RS=1)
        BSTA,UN HCTDC                   ;
        BSTA,UN P4AA3                   ;
        LODA,R1 NROCHS&pm               ;
        LODI,R3 0FFh                    ;
SIZERB  LODA,R0 INPBUF&pm,R3+           ;
        BSTA,UN *COUTPTR                ;
        BDRR,R1 SIZERB                  ;
        RETC,UN                         ;
;
CHCOMD  COMI,R0 "S"                     ; save basic-program ?
        BCFR,EQ CHCOME                  ; no
        LODA,R0 INPBUF+1&pm             ;
        COMI,R0 "A"                     ; SA?
        BCTA,EQ *WRFLAC                 ; pointer to basic-program-file output routine
SIZER   BSTA,UN CRLF                    ;
        LODI,R0 061h                    ;
        BSTR,UN SIZERA                  ;
        LODI,R0 06Dh                    ;
        LODA,R1 FLAGS&pm                ;
        BCTR,LT SIZERA                  ;
        RETC,UN                         ;
;
CHCOME  COMI,R0 "C"                     ; continue ?
        BCFR,EQ CHCOMF                  ; no
CONTR   LODA,R0 FLAGS&pm                ;
        TMI,R0  040h                    ;
        BCFA,EQ P4D0B                   ; CONT. ERROR
        LODI,R0 02Bh                    ;
        BSTA,UN MVWRD                   ; wordarray[R0hi]=wordarray[R0lo] (RS=1)
        LODI,R0 01Dh                    ;
        BSTA,UN MVWRD                   ; wordarray[R0hi]=wordarray[R0lo] (RS=1)
        BSTA,UN W2TOW4                  ;
        BCTA,UN RUNRTE                  ;
;
CHCOMF  COMI,R0 "R"                     ; Run?
        BCTA,EQ RINIT                   ; yes
        BCTA,UN SXERR                   ; no SYNTAX ERROR
;
DIRMD   LODA,R0 FLAGS&pm                ;
        BCTA,EQ FLERR                   ; FILE ERROR
        LODI,R0 021h                    ;
        BSTA,UN TRCOS                   ; wordarray[R0hi]=aconarray4D73[R0lo] (RS=1)
        LODI,R0 003h                    ;
        LODA,R1 NROCHS&pm               ;
        BIRR,R1 DIRMDC                  ;
DIRMDB  LODA,R0 INPBUF-1&pm,R1          ;
DIRMDC  STRA,R0 DRMDTB&pm,R1            ;
        BDRR,R1 DIRMDB                  ;
        LODI,R0 00Dh                    ;
        STRA,R0 DRMDTB&pm               ;
        LODA,R0 FLAGS&pm                ;
        BCTR,GT RINIT                   ;
        LODI,R0 01Dh                    ;
        BSTA,UN MVWRD                   ; wordarray[R0hi]=wordarray[R0lo] (RS=1)
        BCTA,UN P44DC                   ;
;
;                                         == run basic interpreter
RINIT   EORZ    R0                      ;
        STRA,R0 RASPTR&pm               ;
        LODI,R1 4                       ;
RINITA  STRA,R0 CURPOS&pm,R1-           ;
        BRNR,R1 RINITA                  ;
RINITB  STRA,R0 VARBUF&pm,R1            ; clear memory 5E00-5F48
        STRA,R0 WORDAR-256&pm,R1        ;
        BIRR,R1 RINITB                  ;
        LODI,R3 02Dh                    ;
        LODI,R0 040h                    ;
RINITC  STRA,R0 VARBUF&pm,R1            ;
        ADDI,R1 004h                    ;
        BDRR,R3 RINITC                  ;
        LODI,R1 004h                    ;
        LODI,R0 011h                    ;
        BSTA,UN WRDPR1                  ; wordarray[R0hi]=wordarray[R0lo]+R1 (RS=0)
        LODA,R0 WORD1+1&pm              ;
        ANDI,R0 0FCh                    ;
        STRA,R0 WORD1+1&pm              ;
        LODI,R0 081h                    ;
        BSTA,UN MVWRD                   ; wordarray[R0hi]=wordarray[R0lo] (RS=1)
        LODI,R0 0C1h                    ;
        BSTA,UN MVWRD                   ; wordarray[R0hi]=wordarray[R0lo] (RS=1)
        LODI,R0 090h                    ;
        BSTA,UN WRDINC                  ; wordarray[R0hi]=wordarray[R0lo]+1 (RS=0)
P44DC   BSTA,UN CRLF                    ;
        BCTR,UN RUNRTA                  ;
;
NXTCM   BSTA,UN W2TOW4                  ;
NXTCMA  BSTR,UN NXTCMC                  ;
        BCTR,UN RUNRTB                  ;
;
NXTCMB  BSTA,UN W2TOW4                  ;
NXTCMC  LODA,R0 *WORD4&pm,R2            ;
        COMI,R0 cr                      ; line separator
        RETC,EQ                         ;
        COMI,R0 ":"                     ; statement separator
        RETC,EQ                         ;
        BSTA,UN INCW4                   ; Increment word[4+1]:R2
        BCTR,UN NXTCMC                  ;
;
;                                         == key word rem = key word data
DTARM   BSTA,UN REMRT                   ;
RUNRTA  BSTA,UN W2TOW4                  ;
RUNRTB  BSTA,UN P4E4E                   ;
        BCTR,EQ RUNRTB                  ;
RUNRTC  BSTA,UN *CHINAC                 ;
        TMI,R0  07Fh                    ;
        BCTR,EQ RUNRTD                  ;
        BSTA,UN *CH0INPV                ;
        COMI,R0 esc                     ;
        BCTA,EQ STOPRB                  ;
RUNRTD  BSTA,UN W4TOW2                  ;
RUNRTE  LODA,R0 *WORD4&pm,R2            ;
        COMI,R0 003h                    ;
        BCTA,EQ ENDRT                   ;
        EORZ    R0                      ;
        STRA,R0 V5FEA&pm                ;
        LODI,R1 0FFh                    ;
        LODI,R3 7                       ;
RUNRTF  LODA,R0 *WORD4&pm,R2            ;
        STRA,R0 V5DA1&pm,R1+            ;
        BSTA,UN INCW4                   ; Increment word[4+1]:R2
        BDRR,R3 RUNRTF                  ;
        LODA,R0 V5DA1+1&pm              ;
        COMI,R0 041h                    ;
        BCFR,LT FDCOM                   ;
        BSTA,UN W2TOW4                  ;
        LODA,R0 *WORD4&pm,R2            ;
        BCTA,UN LETRT                   ;
;
FDCOM   BSTR,UN FDCOMB                  ;
        STRA,R3 W5DBC&pm                ;
        BSTA,UN W2TOW4                  ;
        LODZ    R1                      ;
        BCTA,EQ STXERR                  ; SYNTAX ERROR
FDCOMA  BSTA,UN INCW4                   ; Increment word[4+1]:R2
        BDRR,R1 FDCOMA                  ;
        BSTR,UN SKPSP                   ;
        BXA     KWJTBL,R3               ;
;
FDCOMB  LODI,R3 0FFh                    ;
FDCOMC  LODI,R1 000h                    ;
FDCOMD  LODA,R0 KWTBL&pm,R3+            ;
        RETC,EQ                         ;
        BCTR,LT FDCOMF                  ;
        COMA,R0 TMPBUF&pm,R1+           ;
        BCTR,EQ FDCOMD                  ;
FDCOME  LODA,R0 KWTBL&pm,R3+            ;
        BCFR,LT FDCOME                  ;
        BCTR,UN FDCOMC                  ;
;
FDCOMF  ANDI,R0 07Fh                    ;
        STRZ    R3                      ;
        RETC,UN                         ;
;
SKPSP   LODA,R0 *WORD4&pm,R2            ;
        COMI,R0 " "                     ;
        RETC,LT                         ;
        RETC,GT                         ;
SKPSPA  BIRR,R2 SKPSP                   ;
        BSTA,UN INCW4A                  ;
        BCTR,UN SKPSP                   ;
;
;                                         == key word table
        BYTE    text,KWTBLE-KWTBL
KWTBL   BYTE    "NEXT",080H!KWNEXT-KWJTBL
        BYTE    "GOTO",080H!KWGOTO-KWJTBL
        BYTE    "THEN",080H!KWTHEN-KWJTBL
        BYTE    "PRINT",080H!KWPRNT-KWJTBL
        BYTE    "FOR",080H!KWFOR-KWJTBL
        BYTE    "LET",080H!KWLET-KWJTBL
        BYTE    "IF",080H!KWIF-KWJTBL
        BYTE    "GOSUB",080H!KWGOSB-KWJTBL
        BYTE    "RETURN",080H!KWRTRN-KWJTBL
        BYTE    "POKE",080H!KWPOKE-KWJTBL
        BYTE    "CALL",080H!KWCALL-KWJTBL
        BYTE    "READ",080H!KWREAD-KWJTBL
        BYTE    "RESTORE",080H!KWREST-KWJTBL
        BYTE    "DATA",080H!KWDATA-KWJTBL
        BYTE    "DIM",080H!KWDIM-KWJTBL
        BYTE    "REM",080H!KWREM-KWJTBL
        BYTE    "STOP",080H!KWSTOP-KWJTBL
        BYTE    "END",080H!KWEND-KWJTBL
        BYTE    "PR",080H!KWPR-KWJTBL
        BYTE    "INPUT",080H!KWINP-KWJTBL
        BYTE    0
KWTBLE  EQU     $
;
;                                        == key word jump table
KWJTBL  EQU     $
KWNEXT  BCTA,UN NEXTR                   ;
KWGOTO  BCTA,UN GOTOR                   ;
KWTHEN  BCTA,UN THENR                   ;
KWPRNT  BCTA,UN PRINT                   ;
KWFOR   BCTA,UN FORRT                   ;
KWLET   BCTA,UN LETRT                   ;
KWIF    BCTA,UN IFRTN                   ;
KWGOSB  BCTA,UN GOSUB                   ;
KWRTRN  BCTA,UN RETRN                   ;
KWPOKE  BCTA,UN POKER                   ;
KWCALL  BCTA,UN CALLR                   ;
KWREAD  BCTA,UN READR                   ;
KWREST  BCTA,UN RSTOR                   ;
KWDATA  BCTA,UN DTARM                   ;
KWDIM   BCTA,UN DIMRT                   ;
KWREM   BCTA,UN DTARM                   ;
KWSTOP  BCTA,UN STOPR                   ;
KWEND   BCTA,UN ENDRT                   ;
KWPR    BCTA,UN PRINT                   ;
KWINP   BCTA,UN INPUT                   ;
;
;                                         == key word then
THENR   BSTA,UN P4E53                   ;
        BCFA,EQ RUNRTC                  ;

;                                         == key word goto
GOTOR   BSTA,UN GETNR                   ; Word[6]=atoi(*Word[4])
;
GOTORA  LODI,R0 052h                    ;
        BSTA,UN MVWRD                   ; wordarray[R0hi]=wordarray[R0lo] (RS=1)
        LODI,R0 020h                    ;
        BSTA,UN WRDINC                  ; wordarray[R0hi]=wordarray[R0lo]+1 (RS=0)
        BSTA,UN FNDLN                   ;
        BCTA,EQ RUNRTA                  ;
        LODI,R0 025h                    ;
        BSTA,UN MVWRD                   ; wordarray[R0hi]=wordarray[R0lo] (RS=1)
        BCTA,UN NGOERR                  ; NOGO ERROR
;
;                                         == key word gosub
GOSUB   LODI,R0 0FFh                    ;
        STRA,R0 WORDF&pm                ;
        BSTA,UN GETNR                   ; Word[6]=atoi(*Word[4])
        BSTA,UN FORRTE                  ;
        BCTR,UN GOTORA                  ;
;
;                                         == key word return
RETRN   LODI,R0 032h                    ;
        BSTA,UN TRCOS                   ; wordarray[R0hi]=aconarray4D73[R0lo] (RS=1)
        LODA,R3 RASPTR&pm               ;
        BCTR,EQ RETRNB                  ;
RETRNA  BSTA,UN ASTR3                   ;
        LODA,R0 WORDF&pm                ;
        COMI,R0 0FFh                    ;
        BCTA,EQ NEXTRC                  ;
        BRNR,R3 RETRNA                  ;
RETRNB  BCTA,UN RETERR                  ; RETURN ERROR
;
IFRTNA  COMI,R0 03Eh                    ;
        BCTA,EQ P4D7C                   ;
        COMI,R0 03Ch                    ;
        BCTA,EQ P4D7C                   ;
        COMI,R0 03Dh                    ;
        BCTA,EQ P4D7C                   ;
        EORZ    R0                      ;
        RETC,UN                         ;
;
;                                         == key word if
IFRTN   BSTA,UN P4D93                   ;
        LODA,R0 V5DB2&pm                ;
        STRA,R0 V5DA7&pm                ;
        BCFR,EQ IFRTNC                  ;
        LODA,R3 NROCHS&pm               ;
        STRA,R3 V5DA9&pm                ;
        BCTR,EQ IFRTNC                  ;
IFRTNB  LODA,R0 INPBUF&pm,R3-           ;
        STRA,R0 DRMDTB&pm,R3            ;
        BRNR,R3 IFRTNB                  ;
IFRTNC  BSTA,UN SKPSP                   ;
        BSTR,UN IFRTNA                  ;
        BCTA,EQ STXERR                  ; SYNTAX ERROR
        BSTA,UN SKPSPA                  ;
        BSTA,UN IFRTNA                  ;
        BSFA,EQ SKPSPA                  ;
        BSTA,UN P4D93                   ;
        LODA,R0 V5DA7&pm                ;
        BCTR,EQ IFRTND                  ;
        LODA,R0 V5DB2&pm                ;
        BCTA,EQ TYPERR                  ; TYPE ERROR
        BSTA,UN P5550                   ;
        BCTR,UN IFRTNG                  ;
;
IFRTND  LODA,R0 V5DB2&pm                ;
        BCFA,EQ TYPERR                  ; TYPE ERROR
        LODI,R3 000h                    ;
IFRTNE  COMA,R3 V5DA9&pm                ;
        BCTR,EQ IFRTNF                  ;
        COMA,R3 NROCHS&pm               ;
        BCTR,EQ IFRTNF                  ;
        LODA,R0 DRMDTB&pm,R3            ;
        COMA,R0 INPBUF&pm,R3            ;
        BCFR,EQ IFRTNG                  ;
        BIRR,R3 IFRTNE                  ;
IFRTNF  LODA,R0 V5DA9&pm                ;
        COMA,R0 NROCHS&pm               ;
IFRTNG  BCFR,LT IFRTNH                  ;
        LODI,R1 03Ch                    ;
        BCTR,UN IFRTNJ                  ;
;
IFRTNH  BCTR,EQ IFRTNI                  ;
        LODI,R1 03Eh                    ;
        BCTR,UN IFRTNJ                  ;
;
IFRTNI  LODI,R1 03Dh                    ;
IFRTNJ  BSTA,UN P4D89                   ;
        COMZ    R1                      ;
        BCTA,EQ RUNRTC                  ;
        BRNR,R3 IFRTNJ                  ;
        BCTA,UN DTARM                   ;
;
;                                         == key word restore
RSTOR   LODI,R0 090h                    ;
        BSTA,UN WRDINC                  ; wordarray[R0hi]=wordarray[R0lo]+1 (RS=0)
        BCTA,UN NXTCM                   ;
;
        BYTE    text,13                 ;
FORD    BYTE    2
        BYTE    "TO"
        BYTE    4
        BYTE    "STEP"
        BYTE    4
        BYTE    "DATA"
;
FORRTA  BSTA,UN SKPSP                   ;
        LODA,R0 FORD&pm,R3              ;
        STRZ    R1                      ;
FORRTB  LODA,R0 *WORD4&pm,R2            ;
        COMA,R0 FORD&pm,R3+             ;
        RETC,GT                         ;
        RETC,LT                         ;
        BSTA,UN INCW4                   ; Increment word[4+1]:R2
        BDRR,R1 FORRTB                  ;
        EORZ    R0                      ;
        RETC,UN                         ;
;
;                                        == key word for
FORRT   BSTA,UN LETRTA                  ;
        LODI,R0 0F3h                    ;
        BSTA,UN MVWRD                   ; wordarray[R0hi]=wordarray[R0lo] (RS=1)
        LODI,R3 000h                    ;
        BSTR,UN FORRTA                  ;
        BCFA,EQ STXERR                  ; SYNTAX ERROR
        BSTA,UN P4D93                   ;
        LODI,R3 004h                    ;
        BSTA,UN TSTOV                   ;
        LODI,R3 003h                    ;
        BSTR,UN FORRTA                  ;
        BCTR,EQ FORRTC                  ;
        LODI,R1 003h                    ;
        BSTA,UN STCON                   ;
        BCTR,UN FORRTD                  ;
;
FORRTC  BSTA,UN P4D93                   ;
FORRTD  BSTR,UN FORRTE                  ;
        BCTA,UN RUNRTA                  ;
;
FORRTE  BSTA,UN NXTCMB                  ;
        BSTA,UN W4TOW2                  ;
        LODI,R0 0E2h                    ;
        BSTA,UN MVWRD                   ; wordarray[R0hi]=wordarray[R0lo] (RS=1)
        LODI,R0 072h                    ;
        BSTA,UN TRCOS                   ; wordarray[R0hi]=aconarray4D73[R0lo] (RS=1)
        BCTA,UN R3TAS                   ;
;
;                                         == key word next
NEXTR   BSTA,UN P489C                   ;
        LODI,R0 032h                    ;
        BSTA,UN TRCOS                   ; wordarray[R0hi]=aconarray4D73[R0lo] (RS=1)
        BSTA,UN ASTR3                   ;
        LODI,R0 07Fh                    ;
        BSTA,UN CPWRD                   ; wordarray[R0lo] >=<? wordarray[R0hi] (RS=1)
        BCFA,EQ NXTERR                  ; NEXT ERROR
        LODI,R3 0F8h                    ;
        BSTA,UN TSTOV                   ;
        BSTA,UN R3TAS                   ;
        LODI,R3 004h                    ;
        BSTA,UN TSTOV                   ;
        BSTA,UN P55D9                   ;
        LODA,R0 FLAGS&pm,R3             ;
        BCFR,LT NEXTRA                  ;
        BSTA,UN P5550                   ;
        BCFR,GT NEXTRB                  ;
        BCTA,UN NXTCM                   ;
;
NEXTRA  BSTA,UN P5550                   ;
        BCTA,LT NXTCM                   ;
NEXTRB  LODI,R3 008h                    ;
        BSTA,UN TSTOV                   ;
        LODI,R0 037h                    ;
        BSTA,UN MVWRD                   ; wordarray[R0hi]=wordarray[R0lo] (RS=1)
        BSTA,UN ASTR3                   ;
        LODI,R3 00Ch                    ;
        BSTA,UN TSTOV                   ;
NEXTRC  LODI,R0 02Eh                    ;
        BSTA,UN MVWRD                   ; wordarray[R0hi]=wordarray[R0lo] (RS=1)
        BCTA,UN RUNRTA                  ;
;
;                                       k
LETRT   BSTR,UN LETRTA                  ;
        BCTA,UN NXTCMA                  ;
;
LETRTA  BSTA,UN P489C                   ;
        BSTA,UN SKPSP                   ;
        COMI,R0 "="                     ;
        BCFA,EQ STXERR                  ; SYNTAX ERROR
        BSTA,UN P49F7                   ;
        LODA,R0 V5DA7&pm                ;
        EORA,R0 V5DB2&pm                ;
        BCTR,EQ P47D4                   ;
        COMI,R0 0FBh                    ;
        BCTA,EQ ASTR3                   ;
        BCTA,UN TYPERR                  ; TYPE ERROR
;
P47D4   BSTA,UN W4TOW2                  ;
P47D7   LODI,R0 072h                    ;
        BSTA,UN MVWRD                   ; wordarray[R0hi]=wordarray[R0lo] (RS=1)
        LODI,R0 02Fh                    ;
        BSTA,UN MVWRD                   ; wordarray[R0hi]=wordarray[R0lo] (RS=1)
        LODA,R1 *WORDE&pm               ;
        BCTR,EQ P47FA                   ;
        ADDI,R1 001h                    ;
        LODI,R0 042h                    ;
        BSTA,UN WRDPR1                  ; wordarray[R0hi]=wordarray[R0lo]+R1 (RS=0)
        LODI,R0 032h                    ;
        BSTA,UN WRDINC                  ; wordarray[R0hi]=wordarray[R0lo]+1 (RS=0)
        LODI,R0 051h                    ;
        BSTA,UN MVWRD                   ; wordarray[R0hi]=wordarray[R0lo] (RS=1)
        BSTA,UN P57E4                   ;
P47FA   BSTA,UN INSLN                   ;
        LODI,R0 027h                    ;
        BSTA,UN MVWRD                   ; wordarray[R0hi]=wordarray[R0lo] (RS=1)
        BSTA,UN W2TOW4                  ;
        LODA,R0 V5DB1&pm                ;
        BCFR,EQ P4820                   ;
        LODA,R1 NROCHS&pm               ;
        SUBA,R1 *WORDE&pm               ;
        PPSL    WC                      ;
        SUBZ    R0                      ;
        CPSL    WC                      ;
        STRA,R0 WORD7&pm                ;
        STRA,R1 WORD7+1&pm              ;
        LODI,R0 0C7h                    ;
        BSTA,UN ADWRD                   ; wordarray[R0hi]+=wordarray[R0lo] (RS=1)
P4820   LODA,R0 NROCHS&pm               ;
        STRA,R0 *WORDE&pm               ;
        RETC,UN                         ;
;
ASTR3   LODI,R1 004h                    ;
        LODA,R3 RASPTR&pm               ;
ASTR3A  LODA,R0 RASBF&pm,R3-            ;
        STRA,R0 *WORD3&pm,R1-           ;
        BRNR,R1 ASTR3A                  ;
        BCTR,UN TSTOVA                  ;
;
TSTOV   ADDA,R3 RASPTR&pm               ;
TSTOVA  COMI,R3 07Bh                    ;
        BCTA,GT SOVERR                  ; STACK OVERFLOW ERROR
        STRA,R3 RASPTR&pm               ;
        RETC,UN                         ;
;
R3TAS   LODI,R1 004h                    ;
        LODI,R3 004h                    ;
        BSTR,UN TSTOV                   ;
R3TASA  LODA,R0 *WORD7&pm,R1-           ;
        STRA,R0 RASBF&pm,R3-            ;
        BRNR,R1 R3TASA                  ;
        RETC,UN                         ;
;
        BYTE    acon,2                  ;
VRBFAC  WORD    VARBUF                  ;
;
P4855   LODR,R0 VRBFAC                  ;
        STRA,R0 WORD7&pm                ;
        EORZ    R0                      ;
        STRA,R0 V5DAA&pm                ;
        LODZ    R3                      ;
        ADDI,R3 001h                    ;
        STRZ    R1                      ;
P4862   COMI,R1 02Dh                    ;
        BCTR,LT P486A                   ;
        SUBI,R1 02Dh                    ;
        BCTR,UN P4862                   ;
;
P486A   LODA,R0 VRUSBF&pm,R1            ;
        BCTR,EQ P4883                   ;
        COMZ    R3                      ;
        BCTR,EQ P4887                   ;
        ADDI,R1 019h                    ;
        LODA,R0 V5DAA&pm                ;
        ADDI,R0 001h                    ;
        STRA,R0 V5DAA&pm                ;
        COMI,R0 02Dh                    ;
        BCFR,EQ P4862                   ;
        BCTA,UN OVFERR                  ; OVERFLOW ERROR
;
P4883   LODZ    R3                      ;
        STRA,R0 VRUSBF&pm,R1            ;
P4887   LODZ    R1                      ;
        ADDZ    R0                      ;
        ADDZ    R0                      ;
        STRA,R0 WORD7+1&pm              ;
        RETC,UN                         ;
;
P488E   COMI,R0 007h                    ;
        BCTA,GT STXERR                  ; SYNTAX ERROR
        ADDI,R0 001h                    ;
P4895   ADDI,R3 01Ah                    ;
        BDRR,R0 P4895                   ;
        BCTA,UN INCW4                   ; Increment word[4+1]:R2
;
P489C   SUBI,R0 041h                    ;
        STRZ    R3                      ;
        BSTA,UN P4E4E                   ;
        BCTR,EQ P48AC                   ;
        COMI,R0 028h                    ;
        BCTR,EQ P48BB                   ;
        COMI,R0 024h                    ;
        BCTR,EQ P48E4                   ;
P48AC   BSTR,EQ P488E                   ;
        BSTA,UN P4855                   ;
        LODI,R0 037h                    ;
        BSTA,UN MVWRD                   ; wordarray[R0hi]=wordarray[R0lo] (RS=1)
        LODI,R0 0FFh                    ;
        BCTA,UN P490D                   ;
;
P48BB   RRL,R3                          ;
        LODA,R0 V5EFB&pm,R3             ;
        BCTR,EQ P48DD                   ;
        STRA,R0 WORD3&pm                ;
        LODA,R0 V5EFB&pm,R3+            ;
        STRA,R0 WORD3+1&pm              ;
        BSTA,UN P4D93                   ;
        BSTA,UN DCTHX                   ;
        BSTA,UN W6SHL4                  ;
        LODI,R0 036h                    ;
        BSTA,UN ADWRD                   ; wordarray[R0hi]+=wordarray[R0lo] (RS=1)
        LODI,R0 083h                    ;
        BSTA,UN CPWRD                   ; wordarray[R0lo] >=<? wordarray[R0hi] (RS=1)
P48DD   BCFA,LT DIMERR                  ; DIM ERROR
        LODI,R0 0FFh                    ;
        BCTR,UN P490D                   ;
;
P48E4   BSTA,UN SKPSPA                  ;
        COMI,R0 028h                    ;
        BCTR,EQ P4911                   ;
        LODI,R0 0E3h                    ;
        BSTA,UN TRCOS                   ; wordarray[R0hi]=aconarray4D73[R0lo] (RS=1)
        LODZ    R3                      ;
        PPSL    RS                      ;
        STRZ    R1                      ;
        LODI,R0 0EEh                    ;
        BSNA,GT WRDPR1                  ; wordarray[R0hi]=wordarray[R0lo]+R1 (RS=0)
        BSTA,UN P4F94                   ;
        STRA,R3 WORDF+1&pm              ;
        LODA,R0 WORD7&pm                ;
        STRA,R0 WORDF&pm                ;
        CPSL    RS                      ;
        LODI,R0 0FFh                    ;
P4909   STRA,R0 V5DB1&pm                ;
        EORZ    R0                      ;
P490D   STRA,R0 V5DA7&pm                ;
        RETC,UN                         ;
;
P4911   STRA,R3 V5DD5&pm                ;
        BSTA,UN P4D93                   ;
        LODA,R3 V5DD5&pm                ;
        BSTA,UN P5115                   ;
        LODI,R0 0E6h                    ;
        BSTA,UN MVWRD                   ; wordarray[R0hi]=wordarray[R0lo] (RS=1)
        LODI,R0 0F7h                    ;
        BSTA,UN MVWRD                   ; wordarray[R0hi]=wordarray[R0lo] (RS=1)
        EORZ    R0                      ;
        BCTR,UN P4909                   ;
;
;                                        == key word dim
DIMRT   SUBI,R0 041h                    ;
        STRZ    R3                      ;
        BSTA,UN SKPSPA                  ;
        COMI,R0 024h                    ;
        BCTR,EQ P494C                   ;
        LODZ    R3                      ;
        ADDZ    R0                      ;
        STRZ    R3                      ;
        LODA,R0 V5EFB&pm,R3             ;
        BCFR,EQ P4952                   ;
        LODA,R0 WORD8&pm                ;
        STRA,R0 V5EFB&pm,R3             ;
        LODA,R0 WORD8+1&pm              ;
        STRA,R0 V5EFB&pm,R3+            ;
        LODI,R3 0FFh                    ;
        BCTR,UN P4955                   ;
;
P494C   BSTA,UN INCW4                   ; Increment word[4+1]:R2
        LODA,R0 V5F2F&pm,R3             ;
P4952   BCFA,EQ DIMERR                  ; DIM ERROR
P4955   STRA,R3 V5DA7&pm                ;
        BSTA,UN P4D93                   ;
        EORZ    R0                      ;
        STRA,R0 WORD6&pm                ;
        STRA,R0 WORD6&pm,R0+            ;
        BSTA,UN DCTHXA                  ;
        LODA,R3 V5DA7&pm                ;
        BCFR,LT P4974                   ;
        BSTA,UN W6SHL4                  ;
        LODI,R0 058h                    ;
        BSTA,UN MVWRD                   ; wordarray[R0hi]=wordarray[R0lo] (RS=1)
        BCTR,UN P4982                   ;
;
P4974   LODA,R0 WORD6+1&pm              ;
        STRA,R0 V5F2F&pm,R3             ;
        BSTA,UN P50F5                   ;
        LODI,R0 057h                    ;
        BSTA,UN MVWRD                   ; wordarray[R0hi]=wordarray[R0lo] (RS=1)
P4982   LODI,R0 031h                    ;
        BSTA,UN MVWRD                   ; wordarray[R0hi]=wordarray[R0lo] (RS=1)
        LODI,R0 036h                    ;
        BSTA,UN ADWRD                   ; wordarray[R0hi]+=wordarray[R0lo] (RS=1)
        BSTA,UN W4TOW2                  ;
        BSTA,UN MOVUP                   ;
        BSTA,UN W2TOW4                  ;
        LODA,R3 V5DA7&pm                ;
        BCFR,LT P49B2                   ;
        LODI,R0 086h                    ;
        BSTA,UN ADWRD                   ; wordarray[R0hi]+=wordarray[R0lo] (RS=1)
P499F   LODI,R0 0C6h                    ;
        BSTA,UN ADWRD                   ; wordarray[R0hi]+=wordarray[R0lo] (RS=1)
        LODA,R0 *WORD4&pm,R2            ;
        COMI,R0 02Ch                    ;
        BCFA,EQ NXTCMA                  ;
        BSTA,UN SKPSPA                  ;
        BCTA,UN DIMRT                   ;
;
P49B2   LODA,R1 WORD6+1&pm              ;
P49B5   PPSL    RS                      ;
        EORZ    R0                      ;
        STRA,R0 *WORD7&pm               ;
        LODI,R0 077h                    ;
        BSTA,UN WRDINC                  ; wordarray[R0hi]=wordarray[R0lo]+1 (RS=0)
        CPSL    RS                      ;
        BDRR,R1 P49B5                   ;
        BCTR,UN P499F                   ;
;
;                                                         key word stop
STOPR   BSTA,UN NXTCMC                  ;
STOPRA  BSTA,UN P4E4E                   ;
        BCTR,EQ STOPRA                  ;
STOPRB  BSTA,UN W4TOW2                  ;
        LODI,R0 0B2h                    ;
        BSTA,UN MVWRD                   ; wordarray[R0hi]=wordarray[R0lo] (RS=1)
        LODI,R0 0C1h                    ;
        STRA,R0 FLAGS&pm                ;
        BCTA,UN ENDRT                   ;
;
;                                        == key word poke
POKER   BSTR,UN P49F7                   ;
        BSTR,UN P49F7                   ;
        BSTA,UN DCTHX                   ;
        LODA,R0 WORD6+1&pm              ;
        STRA,R0 V5DAC&pm                ;
        BSTA,UN DCTHX                   ;
        LODA,R0 V5DAC&pm                ;
        STRA,R0 *WORD6&pm               ;
        BCTA,UN NXTCMA                  ;
;
P49F7   BSTA,UN SKPSPA                  ;
        BCTA,UN P4D93                   ;
;
;                                        == key word call
CALLR   BSTR,UN P49F7                   ;
        BSTA,UN DCTHX                   ;
        BSTA,UN W4TOW2                  ;
        BSTA,UN *WORD6                  ;
        BCTA,UN NXTCM                   ;
;
;                                         == set printer number
SETPN   LODI,R3 000h                    ;
        COMI,R0 023h                    ;
        BCFR,EQ SETPNA                  ;
        BSTR,UN P49F7                   ;
        BSTA,UN DCTHX                   ;
        LODA,R0 *WORD4&pm,R2            ;
        COMI,R0 02Ch                    ;
        BSTA,EQ INCW4                   ; Increment word[4+1]:R2
        LODA,R3 WORD6+1&pm              ;
        ANDI,R3 003h                    ;
SETPNA  STRA,R3 V5DD4&pm                ;
        LODA,R0 CURPOS&pm,R3            ;
        STRA,R0 CURPOS&pm               ;
        RRL,R3                          ;
        RRL,R3                          ;
        LODI,R1 0FCh                    ;
SETPNB  LODA,R0 CH0INPV-1&pm,R3+        ;
        STRA,R0 CINPPTR-0FCH&pm,R1      ;
        BIRR,R1 SETPNB                  ;
        BCTA,UN SKPSP                   ;
;
;                                         == key word print
PRINT   BSTR,UN SETPN                   ;
        BCTA,LT PRINTG                  ;
        COMI,R0 03Ah                    ;
        BCTA,EQ PRINTG                  ;
PRINTA  BSTA,UN P4D93                   ;
        LODA,R0 V5DB2&pm                ;
        BSFA,EQ P4AA3                   ;
        LODA,R1 NROCHS&pm               ;
        BCTR,EQ PRINTC                  ;
        LODZ    R1                      ;
        ADDA,R0 CURPOS&pm               ;
        STRA,R0 CURPOS&pm               ;
        LODI,R3 0FFh                    ;
PRINTB  LODA,R0 INPBUF&pm,R3+           ;
        BSTA,UN *COUTPTR                ;
        BDRR,R1 PRINTB                  ;
PRINTC  LODA,R0 *WORD4&pm,R2            ;
        COMI,R0 03Bh                    ;
        BCTR,EQ PRINTF                  ;
        COMI,R0 02Ch                    ;
        BCFR,EQ PRINTG                  ;
        LODI,R3 0F3h                    ;
PRINTD  ADDI,R3 00Dh                    ;
        COMA,R3 CURPOS&pm               ;
        BCTR,LT PRINTD                  ;
        BCTR,EQ PRINTF                  ;
        LODZ    R3                      ;
        SUBA,R3 CURPOS&pm               ;
        STRA,R0 CURPOS&pm               ;
PRINTE  LODI,R0 020h                    ;
        BSTA,UN *COUTPTR                ;
        BDRR,R3 PRINTE                  ;
PRINTF  BSTA,UN SKPSPA                  ;
        BCTR,LT PRINTH                  ;
        COMI,R0 03Ah                    ;
        BCTR,EQ PRINTH                  ;
        BCTA,UN PRINTA                  ;
;
PRINTG  BSTA,UN CRLF                    ;
PRINTH  LODA,R3 V5DD4&pm                ;
        LODA,R0 CURPOS&pm               ;
        STRA,R0 CURPOS&pm,R3            ;
        BCTA,UN NXTCMA                  ;
;
P4AA3   LODI,R1 0                       ;
        PPSL    RS                      ;
        LODA,R3 RASPTR&pm               ;
        LODI,R2 0                       ;
        LODI,R1 6                       ;
P4AAE   LODA,R0 RASBF&pm,R3-            ;
        BSTR,UN P4AF1                   ;
        LODA,R0 RASBF&pm,R3             ;
        RRR,R0                          ;
        RRR,R0                          ;
        RRR,R0                          ;
        RRR,R0                          ;
        BSTR,UN P4AF1                   ;
        BRNR,R1 P4AAE                   ;
        LODA,R0 RASBF&pm,R3-            ;
        BSTA,UN TSTOVA                  ;
        STRZ    R1                      ;
        LODZ    R1                      ;
        BCTR,LT P4ACC                   ;
        LODI,R0 020h                    ;
        BCTR,UN P4ACE                   ;
;
P4ACC   LODI,R0 02Dh                    ;
P4ACE   BSTA,UN P4B13                   ;
        ANDI,R1 07Fh                    ;
        COMI,R1 040h                    ;
        BCTR,EQ P4AEC                   ;
        COMI,R1 006h                    ;
        BCFR,GT P4AE3                   ;
        LODI,R1 001h                    ;
        LODI,R2 005h                    ;
        BSTR,UN P4AFC                   ;
        BCTR,UN P4B1E                   ;
;
P4AE3   LODZ    R1                      ;
        BCTR,EQ P4AEC                   ;
        SUBI,R0 001h                    ;
        COMZ    R2                      ;
        BCTR,LT P4AEC                   ;
        STRZ    R2                      ;
P4AEC   BSTR,UN P4AFC                   ;
        CPSL    RS                      ;
        RETC,UN                         ;
;
P4AF1   ANDI,R0 00Fh                    ;
        STRA,R0 V5DA1&pm,R1-            ;
        RETC,EQ                         ;
        LODZ    R1                      ;
        COMZ    R2                      ;
        RETC,LT                         ;
        STRZ    R2                      ;
        RETC,UN                         ;
;
P4AFC   LODI,R3 0FFh                    ;
        LODZ    R1                      ;
        BCTR,EQ P4B0D                   ;
P4B01   LODA,R0 V5DA1&pm,R3+            ;
        IORI,R0 030h                    ;
        BSTR,UN P4B13                   ;
        LODZ    R3                      ;
        COMZ    R2                      ;
        RETC,EQ                         ;
        BDRR,R1 P4B01                   ;
P4B0D   LODI,R0 02Eh                    ;
        BSTR,UN P4B13                   ;
        BCTR,UN P4B01                   ;
;
P4B13   CPSL    RS                      ;
        STRA,R0 INPBUF-1&pm,R1+         ;
        STRA,R1 NROCHS&pm               ;
        PPSL    RS                      ;
        RETC,UN                         ;
;
P4B1E   LODI,R0 045h                    ;
        BSTR,UN P4B13                   ;
        LODA,R3 RASPTR&pm               ;
        LODA,R0 RASBF&pm,R3             ;
        ANDI,R0 07Fh                    ;
        SUBI,R0 001h                    ;
        STRZ    R2                      ;
        TMI,R2  040h                    ;
        BCTR,EQ P4B35                   ;
        LODI,R0 02Bh                    ;
        BCTR,UN P4B3B                   ;
;
P4B35   LODI,R0 080h                    ;
        SUBZ    R2                      ;
        STRZ    R2                      ;
        LODI,R0 02Dh                    ;
P4B3B   BSTR,UN P4B13                   ;
        EORZ    R0                      ;
P4B3E   SUBI,R2 00Ah                    ;
        BCTR,LT P4B44                   ;
        BIRR,R0 P4B3E                   ;
P4B44   ADDI,R2 00Ah                    ;
        IORZ    R0                      ;
        BCTR,EQ P4B4D                   ;
        ADDI,R0 030h                    ;
        BSTR,UN P4B13                   ;
P4B4D   LODZ    R2                      ;
        ADDI,R0 030h                    ;
        BSTR,UN P4B13                   ;
        CPSL    RS                      ;
        RETC,UN                         ;
;
;                                         == key word input
INPUT   BSTA,UN SETPN                   ;
        COMI,R0 022h                    ;
        BCFR,EQ INPUTB                  ;
        BSTA,UN P4D93                   ;
        LODA,R1 NROCHS&pm               ;
        LODZ    R1                      ;
        ADDA,R0 CURPOS&pm               ;
        STRA,R0 CURPOS&pm               ;
        LODI,R3 0FFh                    ;
INPUTA  LODA,R0 INPBUF&pm,R3+           ;
        BSTA,UN *COUTPTR                ;
        BDRR,R1 INPUTA                  ;
        BSTA,UN SKPSPA                  ;
INPUTB  BSTA,UN W4TOW2                  ;
INPUTC  LODI,R0 "?"                     ;
        STRA,R0 PROMPT&pm               ;
        LODI,R0 0A0h                    ;
        BSTA,UN TRCOS                   ; wordarray[R0hi]=aconarray4D73[R0lo] (RS=1)
        BSTA,UN LINPR                   ; get user input to text buffer
        BCTA,EQ ENDRT                   ;
        BCTR,GT INPUTE                  ;
        BSTR,UN P4BA4                   ;
INPUTD  BCTA,EQ PRINTG                  ;
        LODA,R1 V5DA7&pm                ;
        BCTR,EQ INPUTF                  ;
        LODI,R0 025h                    ;
        BSTA,UN MVWRD                   ; wordarray[R0hi]=wordarray[R0lo] (RS=1)
INPUTE  BSTA,UN CRLF                    ;
        BCTR,UN INPUTC                  ;
;
INPUTF  BSTA,UN P4C27                   ;
        BCTR,UN INPUTD                  ;
;
P4BA4   BSTA,UN W2TOW4                  ;
        LODI,R0 052h                    ;
        BSTA,UN MVWRD                   ; wordarray[R0hi]=wordarray[R0lo] (RS=1)
        LODA,R0 *WORD4&pm,R2            ;
        COMI,R0 00Dh                    ;
        RETC,EQ                         ;
        COMI,R0 03Ah                    ;
        RETC,EQ                         ;
        BSTA,UN P489C                   ;
        BSTA,UN SKPSP                   ;
        COMI,R0 02Ch                    ;
        BSTA,EQ SKPSPA                  ;
        BSTA,UN W4TOW2                  ;
        BSTR,UN P4BF4                   ;
        STRA,R0 V5DB3&pm                ;
        LODA,R0 *WORD4&pm,R2            ;
        COMI,R0 00Dh                    ;
        BCFR,EQ P4BD1                   ;
        IORZ    R0                      ;
        RETC,UN                         ;
;
P4BD1   LODA,R0 V5DA7&pm                ;
        BCTR,EQ P4C08                   ;
        BSTA,UN P4D93                   ;
        LODA,R0 V5DB2&pm                ;
        BCTR,EQ P4BE1                   ;
        LODA,R0 V5DB3&pm                ;
P4BE1   BCTA,EQ TYPERR                  ; TYPE ERROR
        BSTA,UN SKPSP                   ;
        COMI,R0 02Ch                    ;
        BSTA,EQ SKPSPA                  ;
        BSTR,UN P4BFE                   ;
        BSTA,UN ASTR3                   ;
        BCTA,UN P4BA4                   ;
;
P4BF4   LODA,R0 WORDA&pm                ;
        STRA,R0 WORD4&pm                ;
        LODA,R2 WORDA+1&pm              ;
        RETC,UN                         ;
;
P4BFE   STRA,R2 WORDA+1&pm              ;
        LODA,R0 WORD4&pm                ;
        STRA,R0 WORDA&pm                ;
        RETC,UN                         ;
;
P4C08   BSTA,UN SKPSP                   ;
        COMI,R0 022h                    ;
        BCTR,EQ P4C32                   ;
        LODI,R1 000h                    ;
P4C11   LODA,R0 *WORD4&pm,R2            ;
        COMI,R0 02Ch                    ;
        BCTR,EQ P4C24                   ;
        COMI,R0 00Dh                    ;
        BCTR,EQ P4C27                   ;
        STRA,R0 INPBUF-1&pm,R1+         ;
        BSTA,UN INCW4                   ; Increment word[4+1]:R2
        BCTR,UN P4C11                   ;
;
P4C24   BSTA,UN INCW4                   ; Increment word[4+1]:R2
P4C27   STRA,R1 NROCHS&pm               ;
P4C2A   BSTR,UN P4BFE                   ;
        BSTA,UN P47D7                   ;
        BCTA,UN P4BA4                   ;
;
P4C32   BSTA,UN P4D93                   ;
        BSTA,UN SKPSP                   ;
        COMI,R0 02Ch                    ;
        BSTA,EQ SKPSPA                  ;
        BCTR,UN P4C2A                   ;
;
;                                         == key word read
READR   LODI,R0 0A9h                    ;
        BSTA,UN MVWRD                   ; wordarray[R0hi]=wordarray[R0lo] (RS=1)
        BSTA,UN W4TOW2                  ;
READRA  BSTA,UN P4BA4                   ;
        BCTR,EQ READRD                  ;
        LODI,R0 025h                    ;
        BSTA,UN MVWRD                   ; wordarray[R0hi]=wordarray[R0lo] (RS=1)
        BSTA,UN P4BF4                   ;
READRB  BSTA,UN P4E4E                   ;
        BCTR,EQ READRB                  ;
        LODI,R3 008h                    ;
        BSTA,UN FORRTA                  ;
        BCFR,EQ READRC                  ;
        BSTA,UN P4BFE                   ;
        BCTR,UN READRA                  ;
;
READRC  LODA,R0 *WORD4&pm,R2            ;
        COMI,R0 00Dh                    ;
        BCTR,EQ READRB                  ;
        COMI,R0 003h                    ;
        BCTR,EQ DATERR                  ; DATA ERROR
        BSTA,UN INCW4                   ; Increment word[4+1]:R2
        BCTR,UN READRC                  ;
;
READRD  LODI,R0 09Ah                    ;
        BSTA,UN MVWRD                   ; wordarray[R0hi]=wordarray[R0lo] (RS=1)
        BCTA,UN NXTCMA                  ;
;
CRLF    LODI,R0 CR                      ;
        BSTA,UN *COUTPTR                ;
        EORZ    R0                      ;
        STRA,R0 CURPOS&pm               ;
        LODI,R0 LF                      ;
        BCTA,UN *COUTPTR                ;
;
STXERR  LODI,R0 ERRTXT0-ERRTXT          ; "SYNTAX ERROR"
        BCTR,UN RORRE                   ;
;
SOVERR  LODI,R0 ERRTXT1-ERRTXT          ; "STACK OVERFLOW ERROR"
        BCTR,UN RORRE                   ;
;
OVFERR  LODI,R0 ERRTXTO-ERRTXT          ; "OVERFLOW ERROR"
        BCTR,UN RORRE                   ;
;
NXTERR  LODI,R0 ERRTXT2-ERRTXT          ; "NEXT ERROR"
        BCTR,UN RORRE                   ;
;
ARGERR  LODI,R0 ERRTXT3-ERRTXT          ; "ARG ERROR"
        BCTR,UN RORRE                   ;
;
NGOERR  LODI,R0 ERRTXT4-ERRTXT          ; "NOGO ERROR"
        BCTR,UN RORRE                   ;
;
RETERR  LODI,R0 ERRTXT5-ERRTXT          ; "RETURN ERROR"
        BCTR,UN RORRE                   ;
;
DATERR  LODI,R0 ERRTXT6-ERRTXT          ; "DATA ERROR"
        BCTR,UN RORRE                   ;
;
DIMERR  LODI,R0 ERRTXTA-ERRTXT          ; "DIM ERROR"
        BCTR,UN RORRE                   ;
;
TYPERR  LODI,R0 ERRTXTB-ERRTXT          ; "TYPE ERROR"
RORRE   BSTR,UN WERRM                   ;
        EORZ    R0                      ;
        STRA,R0 RASPTR&pm               ;
        BSTA,UN W2TOW4                  ;
RORREA  BRNR,R2 RORREB                  ;
        BSTA,UN DWRD4H                   ;
RORREB  LODA,R0 *WORD4&pm,R2-           ;
        COMI,R0 00Dh                    ;
        BCTR,GT RORREA                  ;
        BSTA,UN WRTLN                   ;
;
;                                         == key word end
ENDRT   LODI,R0 0D1h                    ;
        BSTA,UN MVWRD                   ; wordarray[R0hi]=wordarray[R0lo] (RS=1)
        LODA,R0 FLAGS&pm                ;
        IORI,R0 080h                    ;
ENDRTA  STRA,R0 FLAGS&pm                ;
        LODI,R0 020h                    ;
        BSTA,UN WRDINC                  ; wordarray[R0hi]=wordarray[R0lo]+1 (RS=0)
        BSTA,UN STOLDA                  ;
        BCTA,UN WSTART                  ;
;
;                                         == error
WERRM   CPSL    RS+WC                   ;
        STRZ    R1                      ;
        BSTA,UN SETIO                   ;
        BSTA,UN CRLF                    ;
        BSTR,UN WERRMA                  ;
        LODI,R1 ERRTXTD-ERRTXT          ; " ERROR"
WERRMA  LODA,R0 ERRTXT&pm,R1            ;
        RETC,EQ                         ;
        BSTA,UN *COUTPTR                ;
        BIRR,R1 WERRMA                  ;
        RETC,UN                         ;
;
MEMERR  LODI,R0 ERRTXT9-ERRTXT          ; "MEMORY ERROR"
        BSTR,UN WERRM                   ;
        LODI,R0 001h                    ;
        BCTR,UN ENDRTA                  ;
;
SXERR   EORZ    R0                      ; "SYNTAX ERROR"
        BCTR,UN BFERRA                  ;
;
;                                         == FILE ERROR
FLERR   EORZ    R0                      ;
        STRA,R0 FLAGS&pm                ;
        LODI,R0 ERRTXT7-ERRTXT          ; "FILE ERROR"
        BCTR,UN BFERRA                  ;
;
P4D0B   LODI,R0 ERRTXTC-ERRTXT          ; "CONT. ERROR"
        BCTR,UN BFERRA                  ;
;
BFERR   LODI,R0 ERRTXT8-ERRTXT          ; "BUFFER ERROR"
BFERRA  BSTR,UN WERRM                   ;
        BCTA,UN WSTART                  ;
;
        BYTE    text,ERRTXTE-ERRTXT     ;
ERRTXT  EQU     $
ERRTXT0 BYTE    "SYNTAX", 0
ERRTXT1 BYTE    "STACK "
ERRTXTO BYTE    "OVERFLOW",0
ERRTXT2 BYTE    "NEXT",0
ERRTXT3 BYTE    "ARG",0
ERRTXT4 BYTE    "NOGO",0
ERRTXT5 BYTE    "RETURN",0
ERRTXT6 BYTE    "DATA",0
ERRTXT7 BYTE    "FILE",0
ERRTXT8 BYTE    "BUFFER",0
ERRTXT9 BYTE    "MEMORY",0
ERRTXTA BYTE    "DIM",0
ERRTXTB BYTE    "TYPE",0
ERRTXTC BYTE    "CONT.",0
ERRTXTD BYTE    " ERROR",0
ERRTXTE EQU     $
;
;
        BYTE    acon,8                  ;
INPBAC  WORD    INPBUF                  ;
        WORD    DRMDTB                  ;
        WORD    WORDE                   ;
        WORD    ALNRS                   ;
;
P4D7B   EORZ    R0                      ;
P4D7C   LODA,R3 V5FEA&pm                ;
        COMI,R3 20                      ;
        BCTA,GT SOVERR                  ; STACK OVERFLOW ERROR
        STRA,R0 V5FEB&pm,R3             ;
        BIRR,R3 P4D8F                   ;
P4D89   LODA,R3 V5FEA&pm                ;
        LODA,R0 V5FEB&pm,R3-            ;
P4D8F   STRA,R3 V5FEA&pm                ;
        RETC,UN                         ;
;
P4D93   BSTR,UN P4D7B                   ;
        STRA,R0 NROCHS&pm               ;
        LODA,R0 RASPTR&pm               ;
        STRA,R0 V5DB2&pm                ;
        BCTR,UN P4DA5                   ;
;
P4DA0   BSTR,UN P4D7C                   ;
        BSTA,UN INCW4                   ; Increment word[4+1]:R2
P4DA5   BSTR,UN P4D7B                   ;
        BSTA,UN SKPSP                   ;
        COMI,R0 02Dh                    ;
        BCFR,EQ P4DB5                   ;
        LODI,R0 049h                    ;
P4DB0   BSTR,UN P4D7C                   ;
        BSTA,UN INCW4                   ; Increment word[4+1]:R2
P4DB5   BSTR,UN P4D7B                   ;
        BCTR,UN P4DBF                   ;
;
P4DB9   BSTA,UN P4D7C                   ;
        BSTA,UN INCW4                   ; Increment word[4+1]:R2
P4DBF   BSTA,UN P4E53                   ;
        BCTA,EQ P4E64                   ;
        COMI,R0 02Eh                    ;
        BCTA,EQ P4E64                   ;
        COMI,R0 028h                    ;
        BCTA,EQ P4DA0                   ;
        COMI,R0 022h                    ;
        BCTA,EQ P500F                   ;
        COMI,R0 041h                    ;
        BCTR,LT P4DDD                   ;
        COMI,R0 05Ah                    ;
        BCFA,GT P4F45                   ;
P4DDD   BCTA,UN STXERR                  ; SYNTAX ERROR
;
P4DE0   BSTA,UN P4F11                   ;
P4DE3   BSTA,UN P4D89                   ;
        COMI,R0 02Ah                    ;
        BSTA,EQ P5734                   ;
        COMI,R0 02Fh                    ;
        BSTA,EQ P5724                   ;
        LODA,R0 *WORD4&pm,R2            ;
        COMI,R0 "*"                     ;
        BCTR,EQ P4DB9                   ;
        COMI,R0 "/"                     ;
        BCTA,EQ P4DB9                   ;
        BSTA,UN P4D89                   ;
        COMI,R0 "+"                     ;
        BSTA,EQ P55D9                   ;
        COMI,R0 "-"                     ;
        BSTA,EQ P55CC                   ;
        COMI,R0 049h                    ;
        BSTR,EQ P4E40                   ;
        LODA,R0 *WORD4&pm,R2            ;
        COMI,R0 "+"                     ;
        BCTA,EQ P4DB0                   ;
        COMI,R0 "-"                     ;
        BCTA,EQ P4DB0                   ;
P4E1A   BSTA,UN P4D89                   ;
        BCFR,EQ P4E29                   ;
        LODA,R0 RASPTR&pm               ;
        SUBA,R0 V5DB2&pm                ;
        STRA,R0 V5DB2&pm                ;
        RETC,UN                         ;
;
P4E29   COMI,R0 028h                    ;
        BCTA,EQ P4DE0                   ;
        TMI,R0  0C0h                    ;
        BCTA,EQ P4F22                   ;
        IORZ    R0                      ;
        BCFA,LT STXERR                  ; SYNTAX ERROR
        ANDI,R0 01Fh                    ;
        STRZ    R3                      ;
        ADDZ    R3                      ;
        ADDZ    R3                      ;
        STRZ    R3                      ;
        BXA     P51F5-3,R3              ;
;
P4E40   LODA,R3 RASPTR&pm               ;
        LODA,R0 FLAGS&pm,R3             ;
        EORI,R0 080h                    ;
        STRA,R0 FLAGS&pm,R3             ;
        BCTA,UN P4D89                   ;
;
P4E4E   BIRR,R2 P4E53                   ;
        BSTA,UN INCW4A                  ;
P4E53   LODA,R0 *WORD4&pm,R2            ;
        COMI,R0 020h                    ;
        BCTR,EQ P4E4E                   ;
        COMI,R0 039h                    ;
        RETC,GT                         ;
        COMI,R0 030h                    ;
        RETC,LT                         ;
        SUBI,R0 030h                    ;
        COMZ    R0                      ;
        RETC,UN                         ;
;
P4E64   EORZ    R0                      ;
        LODI,R1 006h                    ;
P4E67   STRA,R0 V5DA1&pm,R1-            ;
        BRNR,R1 P4E67                   ;
        STRZ    R3                      ;
        LODI,R0 001h                    ;
        STRA,R0 V5DA8&pm                ;
        BSTR,UN P4E53                   ;
        BCTR,UN P4E78                   ;
;
P4E76   BSTR,UN P4E4E                   ;
P4E78   BCTR,EQ P4E89                   ;
        COMI,R0 045h                    ;
        BCTR,EQ P4EA4                   ;
        COMI,R0 02Eh                    ;
        BCFA,EQ P4ED0                   ;
        EORZ    R0                      ;
        STRA,R0 V5DA8&pm                ;
        BCTR,UN P4E76                   ;
;
P4E89   BRNR,R0 P4E96                   ;
        BRNR,R1 P4E96                   ;
        LODA,R0 V5DA8&pm                ;
        BCFR,EQ P4E76                   ;
        LODI,R0 0FFh                    ;
        BCTR,UN P4EA0                   ;
;
P4E96   COMI,R1 006h                    ;
        BCTR,EQ P4E9D                   ;
        STRA,R0 TMPBUF&pm,R1+           ;
P4E9D   LODA,R0 V5DA8&pm                ;
P4EA0   ADDZ    R3                      ;
        STRZ    R3                      ;
        BCTR,UN P4E76                   ;
;
P4EA4   BSTA,UN P4E4E                   ;
        BCTR,EQ P4EBA                   ;
        COMI,R0 02Bh                    ;
        BCTR,EQ P4EB4                   ;
        COMI,R0 02Dh                    ;
        BCFA,EQ STXERR                  ; SYNTAX ERROR
        IORI,R3 080h                    ;
P4EB4   BSTA,UN P4E4E                   ;
        BCFA,EQ STXERR                  ; SYNTAX ERROR
P4EBA   STRZ    R1                      ;
        BSTA,UN P4E4E                   ;
        BCFR,EQ P4EC8                   ;
P4EC0   ADDI,R0 00Ah                    ;
        BDRR,R1 P4EC0                   ;
        STRZ    R1                      ;
        BSTA,UN SKPSPA                  ;
P4EC8   LODZ    R3                      ;
        BCTR,LT P4ECE                   ;
        ADDZ    R1                      ;
        BCTR,UN P4ECF                   ;
;
P4ECE   SUBZ    R1                      ;
P4ECF   STRZ    R3                      ;
P4ED0   LODI,R0 07Fh                    ;
        ANDZ    R3                      ;
        BSTR,UN P4ED8                   ;
        BCTA,UN P4DE3                   ;
;
P4ED8   LODA,R3 RASPTR&pm               ;
        BRNR,R1 P4EDF                   ;
        LODI,R0 040h                    ;
P4EDF   LODI,R1 0FFh                    ;
        BCTR,UN P4EF1                   ;
;
P4EE3   COMI,R1 005h                    ;
        BCTR,EQ P4EF6                   ;
        LODA,R0 V5DA1&pm,R1+            ;
        RRL,R0                          ;
        RRL,R0                          ;
        RRL,R0                          ;
        RRL,R0                          ;
        IORA,R0 V5DA1&pm,R1+            ;
P4EF1   STRA,R0 RASBF&pm,R3             ;
        BIRR,R3 P4EE3                   ;
P4EF6   BCTA,UN TSTOVA                  ;
;
P4EF9   ANDI,R0 01Fh                    ;
        STRZ    R3                      ;
        BSTA,UN P5115                   ;
        LODA,R0 *WORD6&pm               ;
        STRA,R0 V5DAB&pm                ;
        EORZ    R0                      ;
        LODA,R3 WORD7+1&pm              ;
        STRA,R0 WORD7+1&pm              ;
        BSTR,UN P4F11                   ;
        BCTA,UN P4FCB                   ;
;
P4F11   LODA,R0 *WORD4&pm,R2            ;
        COMI,R0 029h                    ;
        BCFA,EQ STXERR                  ; SYNTAX ERROR
        BCTA,UN SKPSPA                  ;
;
P4F1C   LODZ    R1                      ;
        IORI,R0 0C0h                    ;
        BCTA,UN P4DA0                   ;
;
P4F22   TMI,R0  0E0h                    ;
        BCTR,EQ P4EF9                   ;
        ANDI,R0 01Fh                    ;
        ADDZ    R0                      ;
        STRZ    R3                      ;
        LODA,R0 V5EFB&pm,R3             ;
        STRA,R0 WORD7&pm                ;
        LODA,R0 V5EFB&pm,R3+            ;
        STRA,R0 WORD7+1&pm              ;
        BSTA,UN DCTHX                   ;
        BSTA,UN W6SHL4                  ;
        LODI,R0 076h                    ;
        BSTA,UN ADWRD                   ; wordarray[R0hi]+=wordarray[R0lo] (RS=1)
        BSTR,UN P4F11                   ;
        BCTR,UN P4F70                   ;
;
P4F45   SUBI,R0 041h                    ;
        STRZ    R1                      ;
        STRZ    R3                      ;
        EORZ    R0                      ;
        STRA,R0 V5DB3&pm                ;
        STRA,R2 WORD7+1&pm              ;
        LODA,R0 WORD4&pm                ;
        STRA,R0 WORD7&pm                ;
        BSTA,UN INCW4                   ; Increment word[4+1]:R2
        LODA,R0 *WORD4&pm,R2            ;
        COMI,R0 020h                    ;
        BCFR,GT P4F6D                   ;
        COMI,R0 037h                    ;
        BCTR,GT P4F84                   ;
        COMI,R0 030h                    ;
        BCTR,LT P4F84                   ;
        SUBI,R0 030h                    ;
        BSTA,UN P488E                   ;
P4F6D   BSTA,UN P4855                   ;
P4F70   BSTA,UN R3TAS                   ;
        BSTA,UN SKPSP                   ;
        BCTA,UN P4DE3                   ;
;
P4F79   LODA,R0 *WORD4&pm,R2            ;
        SUBI,R0 041h                    ;
        STRZ    R3                      ;
        BSTA,UN INCW4                   ; Increment word[4+1]:R2
        BCTR,UN P4F6D                   ;
;
P4F84   COMI,R0 028h                    ;
        BCTA,EQ P4F1C                   ;
        COMI,R0 041h                    ;
        BCFA,LT P5026                   ;
        COMI,R0 024h                    ;
        BCTR,EQ P4FB6                   ;
        BCTR,UN P4F6D                   ;
;
P4F94   EORZ    R0                      ;
        STRA,R0 WORD7+1&pm              ;
        LODA,R0 WORDC&pm                ;
        LODA,R3 WORDC+1&pm              ;
        STRA,R0 WORD7&pm                ;
        LODZ    R1                      ;
        RETC,EQ                         ;
P4FA3   LODA,R0 ALNRS&pm,R1-            ;
        ADDZ    R3                      ;
        STRZ    R3                      ;
        PPSL    WC                      ;
        EORZ    R0                      ;
        ADDA,R0 WORD7&pm                ;
        STRA,R0 WORD7&pm                ;
        CPSL    WC                      ;
        BRNR,R1 P4FA3                   ;
        RETC,UN                         ;
;
P4FB6   BSTA,UN SKPSPA                  ;
        COMI,R0 028h                    ;
        BCFR,EQ P4FC3                   ;
        LODZ    R1                      ;
        IORI,R0 0E0h                    ;
        BCTA,UN P4DA0                   ;
;
P4FC3   LODA,R0 ALNRS&pm,R1             ;
        STRA,R0 V5DAB&pm                ;
        BSTR,UN P4F94                   ;
P4FCB   LODA,R1 NROCHS&pm               ;
        LODA,R0 V5DAB&pm                ;
        ADDZ    R1                      ;
        STRA,R0 NROCHS&pm               ;
P4FD5   COMA,R1 NROCHS&pm               ;
        BCFR,LT P4FEF                   ;
        BIRR,R3 P4FE4                   ;
        LODA,R0 WORD7&pm                ;
        ADDI,R0 001h                    ;
        STRA,R0 WORD7&pm                ;
P4FE4   LODA,R0 *WORD7&pm,R3            ;
        STRA,R0 INPBUF-1&pm,R1+         ;
        BCTR,UN P4FD5                   ;
;
P4FEC   BSTA,UN P4F11                   ;
P4FEF   STRA,R1 NROCHS&pm               ;
        COMI,R1 0A0h                    ;
        BCTA,GT OVFERR                  ; OVERFLOW ERROR
        LODA,R0 *WORD4&pm,R2            ;
        COMI,R0 02Bh                    ;
        BCTR,EQ P5009                   ;
        LODA,R0 V5FEA&pm                ;
        SUBI,R0 2                       ;
        STRA,R0 V5FEA&pm                ;
        BCTA,UN P4E1A                   ;
;
P5009   BSTA,UN SKPSPA                  ;
        BCTA,UN P4DBF                   ;
;
P500F   LODA,R1 NROCHS&pm               ;
P5012   BSTA,UN INCW4                   ; Increment word[4+1]:R2
        LODA,R0 *WORD4&pm,R2            ;
        COMI,R0 022h                    ;
        BCTR,EQ P5021                   ;
        STRA,R0 INPBUF&pm,R1            ;
        BIRR,R1 P5012                   ;
P5021   BSTA,UN SKPSPA                  ;
        BCTR,UN P4FEF                   ;
;
P5026   LODI,R3 0FFh                    ;
        LODI,R1 001h                    ;
P502A   LODA,R2 WORD7+1&pm              ;
        LODA,R0 WORD7&pm                ;
        STRA,R0 WORD4&pm                ;
        BCTR,UN P5038                   ;
;
P5035   BSTA,UN INCW4                   ; Increment word[4+1]:R2
P5038   LODA,R0 STDATA&pm,R3+           ;
        BCTR,EQ P5049                   ;
        COMA,R0 *WORD4&pm,R2            ;
        BCTR,EQ P5035                   ;
P5042   LODA,R0 STDATA&pm,R3+           ;
        BCFR,EQ P5042                   ;
        BIRR,R1 P502A                   ;
P5049   COMI,R3 051h                    ;
        BCTA,EQ P4F79                   ;
        BSTA,UN SKPSP                   ;
        LODZ    R1                      ;
        IORI,R0 080h                    ;
        BCTA,UN P4DA0                   ;
;
        BYTE    text,STDATAZ-STDATA     ;
STDATA  BYTE    "INT",0                 ;
        BYTE    "ABS",0                 ;
        BYTE    "CHR$",0                ;
        BYTE    "RND",0                 ;
        BYTE    "TAB",0                 ;
        BYTE    "LEN",0                 ;
        BYTE    "SQR",0                 ;
        BYTE    "LEFT$",0               ;
        BYTE    "MID$",0                ;
        BYTE    "RIGHT$",0              ;
        BYTE    "SIN",0                 ;
        BYTE    "COS",0                 ;
        BYTE    "ASC",0                 ;
        BYTE    "STR$",0                ;
        BYTE    "VAL",0                 ;
        BYTE    "PEEK",0                ;
        BYTE    "EXP",0                 ;
        BYTE    "LOG",0                 ;
        BYTE    0
STDATAZ EQU     $
;
P50AB   EORZ    R0                      ;
        LODA,R1 WORD8&pm                ;
        LODA,R3 WORD8+1&pm              ;
        PPSL    RS+WC+C                 ;
        LODA,R2 WORD6+1&pm              ;
        SUBA,R2 WORD8+1&pm              ;
        LODA,R1 WORD6&pm                ;
        STRA,R1 WORD7&pm                ;
        SUBA,R1 WORD8&pm                ;
        LODA,R3 WORD6+1&pm              ;
        STRA,R0 WORD7+1&pm              ;
        BRNR,R2 P50D6                   ;
        BRNR,R1 P50D8                   ;
P50CD   CPSL    RS+WC                   ;
        STRA,R1 WORD7&pm                ;
        STRA,R3 WORD7+1&pm              ;
        RETC,UN                         ;
;
P50D6   BIRR,R1 P50D8                   ;
P50D8   BRNR,R3 P50E2                   ;
        LODA,R0 WORD7&pm                ;
        BDRR,R0 P50DF                   ;
P50DF   STRA,R0 WORD7&pm                ;
P50E2   LODA,R0 *WORD7&pm,R3-           ;
        BCTR,EQ P50EF                   ;
        CPSL    RS+C                    ;
        ADDZ    R3                      ;
        STRZ    R3                      ;
        ADDI,R1 000h                    ;
        PPSL    RS                      ;
P50EF   BDRR,R2 P50D8                   ;
        BDRR,R1 P50D8                   ;
        BCTR,UN P50CD                   ;
;
P50F5   LODI,R0 078h                    ;
        BSTA,UN MVWRD                   ; wordarray[R0hi]=wordarray[R0lo] (RS=1)
        BCTR,UN P5112                   ;
;
P50FC   LODA,R0 V5F2F&pm,R3-            ;
        BCTR,EQ P5112                   ;
        ADDA,R0 WORD7+1&pm              ;
        STRA,R0 WORD7+1&pm              ;
        PPSL    WC                      ;
        EORZ    R0                      ;
        ADDA,R0 WORD7&pm                ;
        STRA,R0 WORD7&pm                ;
        CPSL    WC                      ;
P5112   BRNR,R3 P50FC                   ;
        RETC,UN                         ;
;
P5115   STRA,R3 V5DD5&pm                ;
        BSTR,UN P50F5                   ;
        BSTR,UN DCTHX                   ;
        LODA,R3 V5DD5&pm                ;
        LODA,R0 V5F2F&pm,R3             ;
        COMA,R0 WORD6+1&pm              ;
        BCFA,GT DIMERR                  ; DIM ERROR
        LODI,R0 067h                    ;
        BSTA,UN ADWRD                   ; wordarray[R0hi]+=wordarray[R0lo] (RS=1)
        BSTA,UN P50AB                   ;
        LODI,R3 01Ah                    ;
        BCTR,UN P50FC                   ;
;
DCTHX   EORZ    R0                      ;
        STRA,R0 WORD6+1&pm              ;
        STRA,R0 WORD6&pm                ;
DCTHXA  LODI,R1 006h                    ;
        LODA,R3 RASPTR&pm               ;
        BCTA,EQ TYPERR                  ; TYPE ERROR
DCTHXB  LODA,R0 RASBF&pm,R3-            ;
        ANDI,R0 00Fh                    ;
        STRA,R0 V5DA1&pm,R1-            ;
        LODA,R0 RASBF&pm,R3             ;
        RRR,R0                          ;
        RRR,R0                          ;
        RRR,R0                          ;
        RRR,R0                          ;
        ANDI,R0 00Fh                    ;
        STRA,R0 V5DA1&pm,R1-            ;
        BRNR,R1 DCTHXB                  ;
        LODA,R0 RASBF&pm,R3-            ;
        STRA,R3 RASPTR&pm               ;
        BCTA,LT STXERR                  ; SYNTAX ERROR
        BCTR,EQ DCTHXF                  ;
        TMI,R0  040h                    ;
        BCTR,EQ DCTHXF                  ;
        PPSL    RS+WC                   ;
        LODI,R2 0FFh                    ;
        STRZ    R3                      ;
DCTHXC  LODA,R0 V5DA1&pm,R2+            ;
        BCTR,EQ DCTHXE                  ;
        STRZ    R1                      ;
DCTHXD  CPSL    C                       ;
        LODA,R0 WORD6+1&pm              ;
        ADDA,R0 BINARY+4&pm,R3          ;
        STRA,R0 WORD6+1&pm              ;
        LODA,R0 WORD6&pm                ;
        ADDA,R0 BINARY-1&pm,R3          ;
        STRA,R0 WORD6&pm                ;
        TPSL    C                       ;
        BCTA,EQ OVFERR                  ; OVERFLOW ERROR
        BDRR,R1 DCTHXD                  ;
DCTHXE  BDRR,R3 DCTHXC                  ;
DCTHXF  CPSL    RS+WC                   ;
        RETC,UN                         ;
;
W6SHL4  LODA,R3 WORD6+1&pm              ;
        LODA,R1 WORD6&pm                ;
        CPSL    C                       ;
        PPSL    WC                      ;
        RRL,R3                          ;
        RRL,R1                          ;
        RRL,R3                          ;
        RRL,R1                          ;
        CPSL    WC                      ;
        STRA,R3 WORD6+1&pm              ;
        STRA,R1 WORD6&pm                ;
        RETC,UN                         ;
;
HCTDC   EORZ    R0                      ;
        STRA,R0 V5DA8&pm                ;
        LODI,R1 006h                    ;
HCTDCA  STRA,R0 V5DA1&pm,R1-            ;
        BRNR,R1 HCTDCA                  ;
        LODI,R3 005h                    ;
HCTDCB  LODI,R1 000h                    ;
        LODA,R0 BINARY&pm,R3-           ;
        STRA,R0 WORD5&pm                ;
        LODA,R0 BINARY+5&pm,R3          ;
        STRA,R0 WORD5+1&pm              ;
HCTDCC  LODI,R0 065h                    ;
        BSTA,UN CPWRD                   ; wordarray[R0lo] >=<? wordarray[R0hi] (RS=1)
        BCTR,GT HCTDCD                  ;
        LODI,R0 065h                    ;
        BSTA,UN SBWRD                   ; wordarray[R0hi]-=wordarray[R0lo] (RS=1)
        BIRR,R1 HCTDCC                  ;
HCTDCD  LODZ    R1                      ;
        LODA,R1 V5DA8&pm                ;
        BRNR,R0 HCTDCF                  ;
        BRNR,R1 HCTDCF                  ;
HCTDCE  BRNR,R3 HCTDCB                  ;
        LODZ    R1                      ;
        BCTA,UN P4ED8                   ;
;
HCTDCF  STRA,R0 TMPBUF&pm,R1+           ;
        STRA,R1 V5DA8&pm                ;
        BCTR,UN HCTDCE                  ;
;
        BYTE    data,10                 ;
BINARY  BYTE    0,0,0,3,39              ;
        BYTE    1,10,100,0E8H,010H      ;
;
P51F5   BCTA,UN INTRT                   ;
        BCTA,UN ABSRT                   ;
        BCTA,UN CHRSR                   ;
        BCTA,UN RNDRT                   ;
        BCTA,UN TABRT                   ;
        BCTA,UN LENRT                   ;
        BCTA,UN SQRRT                   ;
        BCTA,UN LFTSR                   ;
        BCTA,UN MIDSR                   ;
        BCTA,UN RGTSR                   ;
        BCTA,UN SINRT                   ;
        BCTA,UN COSRT                   ;
        BCTA,UN ASCRT                   ;
        BCTA,UN STRSR                   ;
        BCTA,UN VALRT                   ;
        BCTA,UN PEEKR                   ;
        BCTA,UN EXPRT                   ;
        BCTA,UN LOGRT                   ;
        BCTA,UN WXRTN                   ;
        BCTA,UN XXRTN                   ;
        BCTA,UN YXRTN                   ;
        BCTA,UN ZXRTN                   ;
;
SQRRT   LODA,R3 RASPTR&pm               ;
        LODA,R0 FLAGS&pm,R3             ;
        BCTA,LT ARGERR                  ; ARG ERROR
        COMI,R0 040h                    ;
        BCTA,EQ P4DE0                   ;
        BCTR,LT SQRRTA                  ;
        IORI,R0 080h                    ;
SQRRTA  STRZ    R1                      ;
        ANDI,R1 001h                    ;
        SUBZ    R1                      ;
        RRR,R0                          ;
        STRA,R0 V5DAC&pm                ;
        LODZ    R1                      ;
        STRA,R0 FLAGS&pm,R3             ;
        BSTA,UN P54A6                   ;
        LODI,R1 003h                    ;
        BSTA,UN STCON                   ;
        LODI,R1 005h                    ;
SQRRTB  STRA,R1 V5DAB&pm                ;
        BSTA,UN P54AB                   ;
        LODI,R1 004h                    ;
SQRRTC  LODA,R0 WORDF&pm,R3+            ;
        STRA,R0 RASPTR&pm,R3            ;
        BDRR,R1 SQRRTC                  ;
        BSTA,UN TSTOVA                  ;
        BSTA,UN P5724                   ;
        BSTA,UN P55D9                   ;
        LODI,R1 033h                    ;
        BSTA,UN STCON                   ;
        BSTA,UN P5734                   ;
        LODA,R1 V5DAB&pm                ;
        BDRR,R1 SQRRTB                  ;
        LODA,R0 V5DAC&pm                ;
        LODA,R3 RASPTR&pm               ;
        ADDA,R0 FLAGS&pm,R3             ;
        ANDI,R0 07Fh                    ;
        STRA,R0 FLAGS&pm,R3             ;
        BCTR,UN ABSRTA                  ;
;
RNDRT   BSTA,UN P54A6                   ;
        LODA,R3 V5F6E&pm                ;
        LODA,R0 V5F6D&pm                ;
        ADDZ    R3                      ;
        ADDI,R3 071h                    ;
        TPSL    C                       ;
        BCFR,EQ RNDRTA                  ;
RNDRTA  ADDI,R0 001h                    ;
        STRA,R0 V5F6D&pm                ;
        STRA,R3 V5F6E&pm                ;
        STRA,R0 WORD6&pm                ;
        STRA,R3 WORD6+1&pm              ;
        BSTA,UN HCTDC                   ;
        LODI,R1 0FFh                    ;
        BSTA,UN STCON                   ;
        BSTA,UN P5724                   ;
        BCTR,UN ABSRTA                  ;
;
ABSRT   LODA,R3 RASPTR&pm               ;
        LODA,R0 FLAGS&pm,R3             ;
        ANDI,R0 07Fh                    ;
        STRA,R0 FLAGS&pm,R3             ;
ABSRTA  BCTA,UN P4DE0                   ;
;
INTRT   BSTA,UN P57C9                   ;
        BCTR,UN ABSRTA                  ;
;
LENRT   LODA,R0 NROCHS&pm               ;
        STRA,R0 WORD6+1&pm              ;
        EORZ    R0                      ;
        STRA,R0 WORD6&pm                ;
        BSTA,UN HCTDC                   ;
        BCTR,UN ABSRTA                  ;
;
ASCRT   LODA,R0 INPBUF&pm               ;
        STRA,R0 WORD6+1&pm              ;
        EORZ    R0                      ;
        STRA,R0 WORD6&pm                ;
        BSTA,UN HCTDC                   ;
        BCTR,UN ABSRTA                  ;
;
ZXRTN   BSTA,UN W2TOW4                  ;
        BCTR,UN ABSRTA                  ;
;
PEEKR   BSTA,UN DCTHX                   ;
        LODA,R0 *WORD6&pm               ;
        STRA,R0 WORD6+1&pm              ;
        EORZ    R0                      ;
        STRA,R0 WORD6&pm                ;
        BSTA,UN HCTDC                   ;
        BCTR,UN ABSRTA                  ;
;
CHRSR   BSTA,UN DCTHX                   ;
        LODA,R0 WORD6+1&pm              ;
        LODA,R1 NROCHS&pm               ;
        STRA,R0 INPBUF-1&pm,R1+         ;
        BCTR,UN TABRTB                  ;
;
TABRT   BSTA,UN DCTHX                   ;
        LODA,R0 WORD6+1&pm              ;
        LODI,R1 000h                    ;
        SUBA,R0 CURPOS&pm               ;
        BCFR,GT TABRTB                  ;
        STRZ    R1                      ;
        STRZ    R3                      ;
        LODI,R0 020h                    ;
TABRTA  STRA,R0 INPBUF&pm,R3-           ;
        BRNR,R3 TABRTA                  ;
TABRTB  BCTA,UN P4FEC                   ;
;
STRSR   BSTA,UN P4AA3                   ;
        LODA,R1 NROCHS&pm               ;
        BCTR,UN TABRTB                  ;
;
WXRTN   BSTA,UN DCTHX                   ;
        LODA,R1 WORD6+1&pm              ;
        LODA,R0 NROCHS&pm               ;
        COMZ    R1                      ;
        BCTR,GT WXRTNA                  ;
        STRZ    R1                      ;
WXRTNA  BCTR,UN TABRTB                  ;
;
YXRTN   BSTA,UN DCTHX                   ;
        LODI,R1 000h                    ;
        LODA,R3 NROCHS&pm               ;
        SUBA,R3 WORD6+1&pm              ;
        BCFR,LT YXRTNA                  ;
        LODI,R3 000h                    ;
YXRTNA  ADDI,R3 001h                    ;
YXRTNB  COMA,R3 NROCHS&pm               ;
        BCTR,GT TABRTB                  ;
        LODA,R0 INPBUF-1&pm,R3          ;
        STRA,R0 INPBUF-1&pm,R1+         ;
        BIRR,R3 YXRTNB                  ;
XXRTN   BSTA,UN DCTHX                   ;
        LODA,R3 WORD6+1&pm              ;
        LODI,R1 000h                    ;
XXRTNA  COMA,R3 NROCHS&pm               ;
        BCTR,GT XXRTNB                  ;
        LODA,R0 INPBUF-1&pm,R3          ;
        STRA,R0 INPBUF-1&pm,R1+         ;
        BIRR,R3 XXRTNA                  ;
XXRTNB  STRA,R1 NROCHS&pm               ;
LFTSR   LODI,R0 093h                    ;
        BCTA,UN P4DA0                   ;
;
RGTSR   LODI,R0 095h                    ;
        BCTA,UN P4DA0                   ;
;
MIDSR   LODI,R0 094h                    ;
        BCTA,UN P4DA0                   ;
;
        BYTE    acon,2                  ;
R538D   WORD    INPBUF-1                ;
;
VALRT   LODA,R3 NROCHS&pm               ;
        LODI,R0 00Dh                    ;
        STRA,R0 INPBUF&pm,R3            ;
        BSTA,UN W4TOW2                  ;
        LODR,R0 R538D                   ;
        STRA,R0 WORD4&pm                ;
        LODR,R2 R538D+1                 ;
        LODI,R0 096h                    ;
        BCTA,UN P4DA0                   ;
;
EXPRT   BSTA,UN P54BB                   ;
        BSTA,UN P54AB                   ;
        LODA,R3 RASPTR&pm               ;
        LODA,R0 FLAGS&pm,R3             ;
        BCTR,LT P53C5                   ;
        BSTA,UN DCTHX                   ;
        LODA,R0 WORD6+1&pm              ;
        STRA,R0 V5DAC&pm                ;
        BSTA,UN HCTDC                   ;
        BSTA,UN P55CC                   ;
        BCTR,UN P53E1                   ;
;
P53C5   ANDI,R0 07Fh                    ;
        STRA,R0 FLAGS&pm,R3             ;
        EORZ    R0                      ;
        STRA,R0 WORD6&pm                ;
        STRA,R0 WORD6&pm,R0+            ;
        BSTA,UN DCTHXA                  ;
        EORZ    R0                      ;
        SUBA,R0 WORD6+1&pm              ;
        STRA,R0 V5DAC&pm                ;
        BSTA,UN HCTDC                   ;
        BSTA,UN P55D9                   ;
P53E1   BSTA,UN P54BB                   ;
        LODI,R1 04Bh                    ;
        LODI,R0 005h                    ;
        BSTA,UN P54C9                   ;
        LODI,R1 003h                    ;
        BSTA,UN STCON                   ;
        BSTA,UN P55D9                   ;
        BSTA,UN P54BB                   ;
        BSTA,UN P54AB                   ;
        BSTA,UN P5734                   ;
        LODA,R3 RASPTR&pm               ;
        LODA,R0 FLAGS&pm,R3             ;
        ADDA,R0 V5DAC&pm                ;
        ANDI,R0 07Fh                    ;
        STRA,R0 FLAGS&pm,R3             ;
        BCTA,UN P4DE0                   ;
;
LOGRT   LODA,R3 RASPTR&pm               ;
        LODA,R0 FLAGS&pm,R3             ;
        BCTA,LT ARGERR                  ; ARG ERROR
        COMI,R0 040h                    ;
        BCTA,EQ ARGERR                  ; ARG ERROR
        STRA,R0 V5DAC&pm                ;
        LODI,R0 001h                    ;
        STRA,R0 FLAGS&pm,R3             ;
        BSTA,UN P54BB                   ;
        LODI,R1 01Bh                    ;
        BSTA,UN STCON                   ;
        BSTA,UN P55CC                   ;
        BSTA,UN P54AB                   ;
        LODI,R1 01Bh                    ;
        BSTA,UN STCON                   ;
        BSTA,UN P55D9                   ;
        BSTA,UN P5724                   ;
        BSTA,UN P54BB                   ;
        BSTA,UN P54AB                   ;
        BSTA,UN P54AB                   ;
        BSTA,UN P5734                   ;
        BSTA,UN P54A6                   ;
        LODI,R1 02Fh                    ;
        LODI,R0 004h                    ;
        BSTA,UN P54C9                   ;
        LODI,R1 033h                    ;
        BSTA,UN STCON                   ;
        BSTA,UN P55D9                   ;
        EORZ    R0                      ;
        STRA,R0 WORD6&pm                ;
        LODA,R1 V5DAC&pm                ;
        BCTR,EQ P5478                   ;
        TMI,R1  040h                    ;
        BCTR,EQ P5475                   ;
        SUBI,R1 001h                    ;
        STRA,R1 WORD6+1&pm              ;
        BSTA,UN HCTDC                   ;
        BSTA,UN P55D9                   ;
        BCTA,UN P4DE0                   ;
;
P5475   LODI,R0 080h                    ;
        SUBZ    R1                      ;
P5478   ADDI,R0 001h                    ;
        STRA,R0 WORD6+1&pm              ;
        BSTA,UN HCTDC                   ;
        BSTA,UN P55CC                   ;
        BCTA,UN P4DE0                   ;
;
COSRT   BSTR,UN P54A6                   ;
        LODI,R1 017h                    ;
        BSTA,UN STCON                   ;
        BSTR,UN P54AB                   ;
        BSTA,UN P55CC                   ;
SINRT   BSTR,UN P54BB                   ;
        BSTR,UN P54AB                   ;
        BSTR,UN P54AB                   ;
        BSTA,UN P5734                   ;
        BSTR,UN P54A6                   ;
        LODI,R1 013h                    ;
        LODI,R0 004h                    ;
        BSTR,UN P54C9                   ;
        BCTA,UN P4DE0                   ;
;
P54A6   BSTR,UN P54BB                   ;
        BCTA,UN TSTOVA                  ;
;
P54AB   LODI,R1 0FCh                    ;
        LODA,R3 RASPTR&pm               ;
P54B0   LODA,R0 W5DAD-0FCH&pm,R1        ; 4 bytes
        STRA,R0 RASPTR&pm,R3+           ;
        BIRR,R1 P54B0                   ;
        BCTA,UN TSTOVA                  ;
;
P54BB   LODI,R1 004h                    ;
        LODA,R3 RASPTR&pm               ;
P54C0   LODA,R0 RASBF&pm,R3-            ;
        STRA,R0 W5DAD&pm,R1-            ;
        BRNR,R1 P54C0                   ;
        RETC,UN                         ;
;
P54C9   STRA,R1 V5DAB&pm                ;
        STRA,R2 TMPBUF&pm               ;
        STRZ    R2                      ;
        BSTR,UN STCON                   ;
P54D2   BSTR,UN P54AB                   ;
        BSTA,UN P5734                   ;
        LODA,R1 V5DAB&pm                ;
        SUBI,R1 004h                    ;
        STRA,R1 V5DAB&pm                ;
        BSTR,UN STCON                   ;
        BSTA,UN P55D9                   ;
        BDRR,R2 P54D2                   ;
        LODA,R2 TMPBUF&pm               ;
        BCTA,UN P5734                   ;
;
STCON   LODA,R3 RASPTR&pm               ;
        BCTR,UN STCONB                  ;
;
STCONA  TMI,R1  003h                    ;
        BCTA,EQ TSTOVA                  ;
STCONB  LODA,R0 CONTBL&pm,R1+           ;
        STRA,R0 RASBF&pm,R3             ;
        BIRR,R3 STCONA                  ;
;
        BYTE    data,CONTBLZ-CONTBL     ;
CONTBL  BYTE    005H,065H,053H,050H     ;
        BYTE    001H,010H,000H,000H     ;
        BYTE    080H,016H,066H,067H     ;
        BYTE    07EH,083H,033H,003H     ;
        BYTE    0FDH,019H,080H,074H     ;
        BYTE    07BH,026H,001H,089H     ;
        BYTE    001H,015H,070H,080H     ;
        BYTE    001H,031H,062H,028H     ;
        BYTE    000H,086H,085H,092H     ;
        BYTE    000H,028H,093H,036H     ;
        BYTE    000H,017H,075H,022H     ;
        BYTE    07FH,094H,037H,065H     ;
        BYTE    000H,019H,013H,038H     ;
        BYTE    000H,050H,000H,000H     ;
        BYTE    001H,011H,051H,029H     ;
        BYTE    000H,066H,028H,043H     ;
        BYTE    000H,025H,036H,003H     ;
        BYTE    07FH,075H,046H,075H     ;
        BYTE    07FH,013H,042H,009H     ;
        BYTE    07EH,056H,054H,090H     ;
CONTBLZ equ     $
;
P5550   BSTR,UN P5582                   ;
        CPSL    COM                     ;
        LODA,R0 V5DC4&pm                ;
        COMA,R0 V5DBE&pm                ;
        BCFR,EQ P556F                   ;
        LODA,R0 V5DC3&pm                ;
        COMA,R0 V5DBD&pm                ;
        BCFR,EQ P556B                   ;
        PPSL    COM                     ;
        BSTA,UN P5648                   ;
        BCTR,EQ P556F                   ;
P556B   SPSL                            ;
        EORA,R0 V5DC4&pm                ;
P556F   CPSL    RS                      ;
        PPSL    COM                     ;
        RETC,UN                         ;
;
        BYTE    acon,4                  ;
R5576w  WORD    V5DC3                   ;
        WORD    V5DBD                   ;
;
P557A   PPSL    RS                      ;
        LODI,R3 001h                    ;
        LODI,R1 002h                    ;
        BCTR,UN P5588                   ;
;
P5582   PPSL    RS                      ;
        LODI,R3 002h                    ;
        LODI,R1 004h                    ;
P5588   LODI,R2 002h                    ;
P558A   LODA,R0 R5576w&pm,R1-           ;
        STRA,R0 VARP&pm,R2-             ;
        BRNR,R2 P558A                   ;
        LODA,R2 RASPTR&pm               ;
P5595   LODI,R1 004h                    ;
P5597   LODA,R0 RASBF&pm,R2-            ;
        STRA,R0 *VARP&pm,R1             ;
        BDRR,R1 P5597                   ;
        ANDI,R0 080h                    ;
        STRA,R0 *VARP&pm,R1+            ;
        LODA,R0 RASBF&pm,R2             ;
        ANDI,R0 07Fh                    ;
        TMI,R0  040h                    ;
        BCFR,EQ P55AF                   ;
        IORI,R0 080h                    ;
P55AF   STRA,R0 *VARP&pm                ;
        LODI,R0 0C3h                    ;
        STRA,R0 VARP+1&pm               ;
        BDRR,R3 P5595                   ;
        LODZ    R2                      ;
        BCTA,LT TYPERR                  ; TYPE ERROR
        STRA,R2 RASPTR&pm               ;
        LODI,R1 005h                    ;
        EORZ    R0                      ;
        STRA,R0 W5DC2&pm                ;
P55C6   STRA,R0 W5DC8&pm,R1-            ;
        BRNR,R1 P55C6                   ;
        RETC,UN                         ;
;
P55CC   BSTA,UN P5582                   ;
        LODA,R0 V5DBE&pm                ;
        EORI,R0 080h                    ;
        STRA,R0 V5DBE&pm                ;
        BCTR,UN P55DC                   ;
;
P55D9   BSTA,UN P5582                   ;
P55DC   CPSL    COM+C                   ;
        LODA,R1 V5DC3&pm                ;
        COMA,R1 V5DBD&pm                ;
        PPSL    WC+COM                  ;
        BCTR,LT P55F6                   ;
        BCTR,EQ P55FA                   ;
        LODI,R1 0BDh                    ;
P55EC   LODI,R2 005h                    ;
        BSTA,UN P57A3                   ;
        BSTA,UN P57BE                   ;
        BCTR,UN P55DC                   ;
;
P55F6   LODI,R1 0C3h                    ;
        BCTR,UN P55EC                   ;
;
P55FA   LODA,R0 V5DBE&pm                ;
        COMA,R0 V5DC4&pm                ;
        BCFR,EQ P5610                   ;
        BSTR,UN P5631                   ;
        LODI,R2 006h                    ;
        LODI,R1 0C3h                    ;
        BSTA,UN P57A3                   ;
        BSTA,UN P57BE                   ;
        BCTR,UN P562E                   ;
;
P5610   PPSL    C                       ;
        BSTR,UN P5648                   ;
        BCTR,LT P561A                   ;
        BSTR,UN P5655                   ;
        BCTR,UN P562E                   ;
;
P561A   LODA,R0 V5DBE&pm                ;
        STRA,R0 V5DC4&pm                ;
        LODI,R2 004h                    ;
P5622   LODA,R0 R5DBF&pm,R2-            ;
        SUBA,R0 V5DC5&pm,R2             ;
        DAR,R0                          ;
        STRA,R0 V5DC5&pm,R2             ;
        BRNR,R2 P5622                   ;
P562E   BCTA,UN P568E                   ;
;
P5631   CPSL    C                       ;
        LODI,R1 000h                    ;
        LODI,R2 004h                    ;
P5637   RRR,R1                          ;
        LODA,R0 V5DC5&pm,R2-            ;
        ADDI,R0 066h                    ;
        RRL,R1                          ;
        ADDA,R0 R5DBF&pm,R2             ;
        DAR,R0                          ;
        STRA,R0 V5DC5&pm,R2             ;
        BRNR,R2 P5637                   ;
        RETC,UN                         ;
;
P5648   LODI,R2 0FCh                    ; -4 > move 4 bytes
P564A   LODA,R0 V5DC5-0FCH&pm,R2        ;
        COMA,R0 R5DBF-0FCH&pm,R2        ;
        BCFR,EQ P5654                   ;
        BIRR,R2 P564A                   ;
P5654   RETC,UN                         ;
;
P5655   PPSL    C                       ;
        LODI,R2 004h                    ;
P5659   LODA,R0 V5DC5&pm,R2-            ;
        SUBA,R0 R5DBF&pm,R2             ;
        DAR,R0                          ;
        STRA,R0 V5DC5&pm,R2             ;
        BRNR,R2 P5659                   ;
        RETC,UN                         ;
;
P5666   LODI,R3 007h                    ;
P5668   LODI,R1 000h                    ;
P566A   BSTR,UN P5648                   ;
        BCTR,LT P5675                   ;
        BSTR,UN P5655                   ;
        ADDI,R1 066h                    ;
        DAR,R1                          ;
        BCTR,UN P566A                   ;
;
P5675   ADDA,R1 V5DCC&pm                ;
        STRA,R1 V5DCC&pm                ;
        LODI,R1 0C3h                    ;
        LODI,R2 00Ah                    ;
        BSTA,UN P56FE                   ;
        BDRR,R3 P5668                   ;
        BSTA,UN P57BE                   ;
        LODI,R3 007h                    ;
P5689   BSTA,UN P5704                   ;
        BDRR,R3 P5689                   ;
P568E   LODI,R1 0C3h                    ;
        LODI,R2 007h                    ;
        BSTR,UN P56CD                   ;
        BSTA,UN P578C                   ;
        CPSL    WC+COM                  ;
        LODA,R0 V5DC3&pm                ;
        COMI,R0 03Fh                    ;
        BCTA,GT OVFERR                  ; OVERFLOW ERROR
        COMI,R0 0C0h                    ;
P56A3   BSTR,LT P56C2                   ;
        ANDI,R0 07Fh                    ;
        IORA,R0 V5DC4&pm                ;
        LODA,R2 RASPTR&pm               ;
        LODI,R1 0FFh                    ;
P56AF   COMI,R1 003h                    ;
        BCTR,EQ P56BB                   ;
        STRA,R0 RASBF&pm,R2             ;
        LODA,R0 V5DC5&pm,R1+            ;
        BIRR,R2 P56AF                   ;
P56BB   STRA,R2 RASPTR&pm               ;
        LODI,R0 COM                     ;
        LPSL                            ;
        RETC,UN                         ;
;
P56C2   EORZ    R0                      ;
        LODI,R1 004h                    ;
P56C5   STRA,R0 V5DC3&pm,R1             ;
        BDRR,R1 P56C5                   ;
        LODI,R0 0C0h                    ;
        RETC,UN                         ;
;
P56CD   STRA,R2 V5DCF&pm                ;
        STRA,R1 VARP+1&pm               ;
        LODI,R3 000h                    ;
        LODI,R1 001h                    ;
        CPSL    C                       ;
P56D9   LODA,R0 *VARP&pm,R1+            ;
        BCFR,EQ P56EF                   ;
        ADDI,R3 002h                    ;
        COMI,R1 005h                    ;
        BCFR,EQ P56D9                   ;
        STRZ    R1                      ;
        LODI,R0 0C0h                    ;
        STRA,R0 *VARP&pm                ;
        EORZ    R0                      ;
        STRA,R0 *VARP&pm,R1+            ;
        RETC,UN                         ;
;
P56EF   ANDI,R0 0F0h                    ;
        BCFR,EQ P56F5                   ;
        ADDI,R3 001h                    ;
P56F5   LODZ    R3                      ;
        RETC,EQ                         ;
P56F7   BSTR,UN P5704                   ;
        BSTR,UN P5719                   ;
        BDRR,R3 P56F7                   ;
        RETC,UN                         ;
;
P56FE   STRA,R2 V5DCF&pm                ;
        STRA,R1 VARP+1&pm               ;
P5704   LODI,R1 004h                    ;
P5706   LODA,R2 V5DCF&pm                ;
        CPSL    C                       ;
P570B   LODA,R0 *VARP&pm,R2-            ;
        RRL,R0                          ;
        STRA,R0 *VARP&pm,R2             ;
        COMI,R2 002h                    ;
        BCFR,EQ P570B                   ;
        BDRR,R1 P5706                   ;
        RETC,UN                         ;
;
P5719   LODA,R0 *VARP&pm                ;
        PPSL    C                       ;
        SUBI,R0 001h                    ;
        STRA,R0 *VARP&pm                ;
        RETC,UN                         ;
;
P5724   BSTA,UN P5582                   ;
        LODI,R3 080h                    ;
        PPSL    C                       ;
        EORZ    R0                      ;
        SUBA,R0 V5DBD&pm                ;
        STRA,R0 V5DBD&pm                ;
        BCTR,UN P5739                   ;
;
P5734   BSTA,UN P5582                   ;
        LODI,R3 000h                    ;
P5739   PPSL    WC+COM+C                ;
        LODZ    R3                      ;
        BCTR,EQ P5744                   ;
        LODA,R0 R5DBF&pm                ;
        BCTA,EQ ARGERR                  ; ARG ERROR
P5744   LODA,R0 V5DC4&pm                ;
        COMA,R0 V5DBE&pm                ;
        BCTR,EQ P5750                   ;
        LODI,R0 080h                    ;
        BCTR,UN P5751                   ;
;
P5750   EORZ    R0                      ;
P5751   STRA,R0 V5DC4&pm                ;
        CPSL    C                       ;
        LODA,R0 V5DBD&pm                ;
        ADDA,R0 V5DC3&pm                ;
        STRA,R0 V5DC3&pm                ;
        CPSL    C                       ;
        LODI,R1 0BDh                    ;
        LODI,R2 005h                    ;
        BSTR,UN P57A3                   ;
        BRNA,R3 P5666                   ;
        LODI,R3 008h                    ;
P576C   LODI,R1 0C3h                    ;
        LODI,R2 009h                    ;
        BSTR,UN P57A3                   ;
        BDRR,R3 P576C                   ;
        LODI,R3 006h                    ;
P5776   BSTR,UN P57A9                   ;
P5778   LODA,R0 V5DCC&pm                ;
        BCTR,EQ P5787                   ;
        SUBI,R0 00Fh                    ;
        STRA,R0 V5DCC&pm                ;
        BSTA,UN P5631                   ;
        BCTR,UN P5778                   ;
;
P5787   BDRR,R3 P5776                   ;
        BCTA,UN P568E                   ;
;
P578C   LODI,R0 0B6h                    ;
        LODI,R1 004h                    ;
P5790   ADDA,R0 V5DC5&pm,R1-            ;
        DAR,R0                          ;
        STRA,R0 V5DC5&pm,R1             ;
        LODI,R0 066h                    ;
        BRNR,R1 P5790                   ;
        TPSL    C                       ;
        RETC,LT                         ;
        BSTR,UN P57A9                   ;
        BSTR,UN P57BE                   ;
        RETC,UN                         ;
;
P57A3   STRA,R2 V5DCF&pm                ;
        STRA,R1 VARP+1&pm               ;
P57A9   LODI,R1 004h                    ;
P57AB   LODI,R2 001h                    ;
P57AD   LODA,R0 *VARP&pm,R2+            ;
        RRR,R0                          ;
        STRA,R0 *VARP&pm,R2             ;
        COMA,R2 V5DCF&pm                ;
        BCFR,EQ P57AD                   ;
        CPSL    C                       ;
        BDRR,R1 P57AB                   ;
        RETC,UN                         ;
;
P57BE   LODA,R0 *VARP&pm                ;
        CPSL    C                       ;
        ADDI,R0 001h                    ;
        STRA,R0 *VARP&pm                ;
        RETC,UN                         ;
;
P57C9   BSTA,UN P557A                   ;
        LODI,R0 004h                    ;
        STRA,R0 V5DCF&pm                ;
        LODA,R0 V5DC3&pm                ;
        BCTA,LT P56A3                   ;
        PPSL    WC                      ;
P57D9   COMI,R0 006h                    ;
        BCFA,LT P568E                   ;
        BSTR,UN P57A9                   ;
        BSTR,UN P57BE                   ;
        BCTR,UN P57D9                   ;
;
P57E4   LODA,R1 WORD4+1&pm              ;
        LODA,R0 WORD4&pm                ;
        SUBA,R1 WORD5+1&pm              ;
        PPSL    WC                      ;
        SUBA,R0 WORD5&pm                ;
        CPSL    WC                      ;
        BCFA,EQ MOVDNA                  ;
        BDRA,R1 MOVDNA                  ;
        BCTA,UN MOVDNE                  ;
;
        BYTE    acon,USRACZ-USRAC       ;
USRAC   EQU     $                       ; user address constants
PRGSTV  WORD    txtbase                 ; start of basic text program storage pointer
CH0INPV WORD    redzv                   ; channel 0 input routine
CH0OUTV WORD    wrtzv                   ; channel 0 output routine
        WORD    redzv                   ; channel 1 input routine
        WORD    wrtzv                   ; channel 1 output routine
        WORD    redzv                   ; channel 2 input routine
        WORD    wrtzv                   ; channel 2 output routine
        WORD    redzv                   ; channel 3 input routine
        WORD    wrtzv                   ; channel 3 output routine
RDFLAC  WORD    RFILE                   ; pointer to basic-program-file input routine
WRFLAC  WORD    WFILE                   ; pointer to basic-program-file output routine
FLERAC  WORD    FLERR                   ; pointer to FILE ERROR routine
CHINAC  WORD    CHKKP                   ; check keyboard pressed
USRINAC WORD    USRINIT                 ; initialize user program (if required)
QUITAC  WORD    0                       ; address to return to after using basic
USRACZ  EQU     $                       ; end user address constants
;
;                                         == check key pressed
CHKKP   ZBSR    chizv                   ;
        COMI,R0 ESC                     ;
        RETC,EQ                         ;
        COMI,R0 " "                     ;
        RETC,EQ                         ;
        LODI,R0 DEL                     ;
USRINIT RETC,UN                         ;
;
;                                         == basic-program-file output routine
WFILE   LODA,R1 PRGSTV&pm               ;
        LODA,R2 PRGSTV+1&pm             ;
P582E   STRA,R1 V5CFC&pm                ;
P5831   STRA,R2 V5CFD+1&pm              ;
        LODA,R0 *V5CFC&pm               ;
        COMI,R0 003h                    ;
        BCTR,EQ P5846                   ;
        BIRR,R2 P5831                   ;
        BIRR,R1 P582E                   ;
        BCTA,UN *FLERAC                 ;
;
        BYTE    acon,2                  ;
R5844w  WORD    V5CFC                   ;
;
P5846   BIRR,R2 P584A                   ;
        BIRR,R1 P584A                   ;
P584A   SUBA,R2 PRGSTV+1&pm             ;
        PPSL    WC                      ;
        SUBA,R1 PRGSTV&pm               ;
        CPSL    WC                      ;
        STRA,R1 V5CFC&pm                ;
        STRA,R2 V5CFD+1&pm              ;
        LODI,R3 2                       ;
P585C   LODA,R0 R5844w&pm,R3-           ;
        STRA,R0 V5CFE&pm,R3             ;
        BRNR,R3 P585C                   ;
        LODI,R0 0                       ;
        LODI,R1 0                       ;
        LODI,R2 2                       ;
        LODI,R3 0                       ;
        BSTR,UN P5882                   ;
        LODI,R3 2                       ;
P5870   LODA,R0 PRGSTV&pm,R3-           ;
        STRA,R0 V5CFE&pm,R3             ;
        BRNR,R3 P5870                   ;
        LODI,R0 040h                    ;
        LODA,R1 V5CFC&pm                ;
        LODA,R2 V5CFD+1&pm              ;
        LODI,R3 0                       ;
P5882   PPSL    RS                      ;
P5884   LODI,R1 01Ah                    ;
        LODI,R2 04Eh                    ;
        BCTR,UN P588D                   ;
;
P588A   LODI,R2 050h                    ;
        IORZ    R0                      ;
P588D   BDRR,R2 P588D                   ;
        PPSU    F+II                    ;
        LODI,R2 051h                    ;
        IORZ    R0                      ;
P5894   BDRR,R2 P5894                   ;
        CPSU    F                       ;
        BDRR,R1 P588A                   ;
        BDRR,R0 P5884                   ;
        NOP                             ;
        LODI,R1 014h                    ;
        BSTR,UN P58C9                   ;
        LODI,R3 0FFh                    ;
        LODI,R1 00Ch                    ;
        CPSL    RS                      ;
P58A7   LODA,R0 *V5CFE&pm,R3            ;
        PPSL    RS                      ;
        BSTR,UN P58C7                   ;
        LODI,R1 002h                    ;
        BSTR,UN P58EA                   ;
        IORZ    R0                      ;
        BCFR,EQ P58A7                   ;
        PPSL    RS                      ;
        LODZ    R3                      ;
        LODI,R3 019h                    ;
        LODI,R1 002h                    ;
P58BC   BSTR,UN P58C7                   ;
        EORZ    R0                      ;
        LODI,R1 012h                    ;
        IORZ    R0                      ;
        BDRR,R3 P58BC                   ;
        CPSL    RS                      ;
        RETE,UN                         ;
;
P58C7   LODI,R2 007h                    ;
P58C9   BDRR,R1 P58C9                   ;
        IORZ    R0                      ;
        BCFR,LT P58D2                   ;
        LODI,R1 01Bh                    ;
P58D0   BDRR,R1 P58D0                   ;
P58D2   PPSU    F                       ;
        IORZ    R0                      ;
        BCTR,LT P58DB                   ;
        LODI,R1 017h                    ;
        BCTR,UN P58DD                   ;
;
P58DB   LODI,R1 034h                    ;
P58DD   BDRR,R1 P58DD                   ;
        NOP                             ;
        CPSU    F                       ;
        RRL,R0                          ;
        SUBI,R2 001h                    ;
        RETC,LT                         ;
        LODI,R1 015h                    ;
        BCTR,UN P58C9                   ;
;
P58EA   EORZ    R3                      ;
        STRZ    R3                      ;
        LODI,R0 WC+COM                  ;
        LPSL                            ;
        ADDI,R3 001h                    ;
        LODA,R0 V5CFE&pm                ;
        ADDI,R0 000h                    ;
        STRA,R0 V5CFE&pm                ;
        CPSL    C                       ;
        SUBI,R2 0                       ;
        SUBI,R1 0                       ;
        CPSL    WC                      ;
        LODZ    R1                      ;
        IORZ    R2                      ;
        RETC,UN                         ;
;
;                                         == basic-program-file input routine
RFILE   LODI,R3 002h                    ;
P5906   LODA,R0 R5844w&pm,R3-           ;
        STRA,R0 V5CFE&pm,R3             ;
        BRNR,R3 P5906                   ;
        LODI,R1 000h                    ;
        LODI,R2 002h                    ;
        LODI,R3 000h                    ;
        BSTR,UN P5928                   ;
        LODI,R3 002h                    ;
P5918   LODA,R0 PRGSTV&pm,R3-           ;
        STRA,R0 V5CFE&pm,R3             ;
        BRNR,R3 P5918                   ;
        LODA,R1 V5CFC&pm                ;
        LODA,R2 V5CFD+1&pm              ;
        LODI,R3 000h                    ;
P5928   PPSL    RS                      ;
        LODI,R3 0FFh                    ;
        LODI,R1 020h                    ;
P592E   TPSU    S                       ;
        BCFR,EQ P5934                   ;
        BDRR,R1 P592E                   ;
P5934   BSTR,UN P5963                   ;
        BCFR,LT P5934                   ;
P5938   BSTR,UN P5954                   ;
        CPSL    RS                      ;
        STRA,R0 *V5CFE&pm,R3            ;
        PPSL    RS                      ;
        BSTA,UN P58EA                   ;
        PPSL    RS                      ;
        BCFR,EQ P5938                   ;
        BSTR,UN P5954                   ;
        EORZ    R3                      ;
        BCFR,EQ P5975                   ;
        CPSL    RS                      ;
P594F   BDRR,R1 P594F                   ;
        BDRR,R0 P594F                   ;
        RETC,UN                         ;
;
P5954   LODI,R2 007h                    ;
        EORZ    R0                      ;
P5957   RRL,R0                          ;
        BSTR,UN P5963                   ;
        BCTR,LT P595E                   ;
        IORI,R0 001h                    ;
P595E   SUBI,R2 001h                    ;
        RETC,LT                         ;
        BCTR,UN P5957                   ;
;
P5963   LODI,R1 0E0h                    ;
P5965   TPSU    S                       ;
        BCTR,EQ P596D                   ;
        BIRR,R1 P5965                   ;
        BCTR,UN P5975                   ;
;
P596D   LODI,R1 0E0h                    ;
P596F   TPSU    S                       ;
        BCFR,EQ P597A                   ;
        BIRR,R1 P596F                   ;
P5975   CPSL    RS+WC                   ;
        BCTA,UN *FLERAC                 ;
;
P597A   ADDI,R1 014h                    ;
        RETC,UN                         ;
;
        section ram
        org     prgbase+01D00h          ; ram addresses can not be changed. many hi & lo bytes are used immediately
;
INPBUF  ds      80                      ; command input buffer
DRMDTB  ds      80                      ;
TMPBUF  ds      1                       ;
V5DA1   ds      6                       ; 7 bytes copy of input buffer?
V5DA7   ds      1                       ;
V5DA8   ds      1                       ;
V5DA9   ds      1                       ;
V5DAA   ds      1                       ;
V5DAB   ds      1                       ;
V5DAC   ds      1                       ;
W5DAD   ds      4                       ; 4 bytes value ?
V5DB1   ds      1                       ;
V5DB2   ds      1                       ;
V5DB3   ds      5                       ;
CURPOS  ds      4                       ;
W5DBC   ds      1                       ;
V5DBD   ds      1                       ;
V5DBE   ds      1                       ;
R5DBF   ds      3                       ; 4 bytes bcd value ?
W5DC2   ds      1                       ;
V5DC3   ds      1                       ;
V5DC4   ds      1                       ;
V5DC5   ds      3                       ; 4 bytes bcd value ?
W5DC8   ds      4                       ;
V5DCC   ds      1                       ;
VARP    ds      2                       ;
V5DCF   ds      1                       ;
CINPPTR ds      2                       ; input character pointer
COUTPTR ds      2                       ; output character pointer
V5DD4   ds      1                       ;
V5DD5   ds      43                      ;
;
VARBUF  ds      180                     ; from here to WORDARray is cleared when interpreter starts
VRUSBF  ds      45                      ;
ALNRS   ds      26                      ;
V5EFB   ds      26                      ;
        ds      26                      ;
V5F2F   ds      26                      ;
;
;                                         32 bytes that have to stick together
WORDAR  equ     $                       ; word array 0..F
WORD0   ds      2                       ; pointer to basic program - word array - There are up to 16 words here
WORD1   ds      2                       ;
WORD2   ds      2                       ;
WORD3   ds      2                       ;
WORD4   ds      2                       ;
WORD5   ds      2                       ;
WORD6   ds      2                       ;
WORD7   ds      2                       ;
WORD8   ds      2                       ;
WORD9   ds      2                       ;
WORDA   ds      2                       ;
WORDB   ds      2                       ;
WORDC   ds      2                       ;
WORDD   ds      2                       ;
WORDE   ds      2                       ;
WORDF   ds      2                       ;
WORDARZ equ     $
;
PROMPT  ds      1                       ; prompt character
NROCHS  ds      1                       ; numer of characters in buffer
UNKN1   ds      1                       ; is this used?
FLAGS   ds      1                       ; flags, b0 basic program file presend, b7 if running
;
V5F6D   ds      1                       ;
V5F6E   ds      1                       ;
RASPTR  ds      1                       ;
RASBF   ds      122                     ;
V5FEA   ds      1                       ;
V5FEB   ds      21                      ; all used? or only 20? 10 stack return addresses ?
;
;                                         == storage for serial file i/o
V5CFC   ds      2                       ;
V5CFE   ds      2                       ;
;
        END                             ;
