99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0001 
Version 2.0 (Weiand 1985)     Options : LCSFPF#########                         
[0001]               ***********************************************************
[0002]                      TITL 'RXB 2022'
[0003]               ***********************************************************
[0004] 2002          FSLOC  EQU  >2002             Free Start LOCation in ERAM
[0005]               *                             Free end must follow it.
[0006]               ***********************************************************
[0007]               * RXB move INIT code to ROM 3                             *
[0008] 2006          INITF  EQU  >2006             INIT flag address INIT has be
[0009]               *                             called if ERAM (INITF)=>AA55
[0010]               * Free end initialized to >4000, (>FFF8 for debugger)
[0011]               * Free start is initialized to the first useable memory
[0012]               *  location for assembly language code
[0013]               * CPUBAS EQU  >A040             Expansion RAM base
[0014]               ***********************************************************
[0015]               *           GROM ADDRESSES
[0016]               ***********************************************************
[0017]               * GROM >6000
[0018] 6040          MSGFST EQU  >6040
[0019] 6065          MSG10  EQU  >6065
[0020] 6076          MSG14  EQU  >6076
[0021] 6083          MSG16  EQU  >6083
[0022] 609C          MSG17  EQU  >609C
[0023] 60AD          MSG19  EQU  >60AD
[0024] 60BB          MSG24  EQU  >60BB
[0025] 60D2          MSG25  EQU  >60D2
[0026] 60E4          MSG28  EQU  >60E4
[0027] 60F9          MSG34  EQU  >60F9
[0028] 6110          MSG36  EQU  >6110
[0029] 611C          MSG39  EQU  >611C
[0030] 6128          MSG40  EQU  >6128
[0031] 6137          MSG43  EQU  >6137
[0032] 6148          MSG44  EQU  >6148
[0033] 6159          MSG47  EQU  >6159
[0034] 616F          MSG48  EQU  >616F
[0035] 6189          MSG49  EQU  >6189
[0036] 6198          MSG51  EQU  >6198
[0037] 61AD          MSG54  EQU  >61AD
[0038] 61BE          MSG57  EQU  >61BE
[0039] 61CC          MSG60  EQU  >61CC
[0040] 61DB          MSG61  EQU  >61DB
[0041] 61EB          MSG67  EQU  >61EB
[0042] 61FA          MSG69  EQU  >61FA
[0043] 6215          MSG70  EQU  >6215
[0044] 622D          MSG74  EQU  >622D
[0045] 623A          MSG78  EQU  >623A
[0046] 624D          MSG79  EQU  >624D
[0047] 6257          MSG81  EQU  >6257
[0048] 626F          MSG83  EQU  >626F
[0049] 627B          MSG84  EQU  >627B
[0050] 6286          MSG97  EQU  >6286
[0051] 629B          MSG109 EQU  >629B
[0052] 62A6          MSG130 EQU  >62A6
[0053] 62B0          MSG135 EQU  >62B0
[0054] 62C5          MSG62  EQU  >62C5
[0055] 630A          MSGCIS EQU  >630A
[0056] 6319          MSGCF  EQU  >6319
[0057] 6324          MSG56  EQU  >6324
[0058] 6372          TOPLEV EQU  >6372             RXB PATCH for XBPGM
[0059] 6020          SZNEW  EQU  >6020             RXB PATCH for NEW
[0060] 63DD          TOPL15 EQU  >63DD             * Return from OLD or SAVE
[0061] 6433          TOPL42 EQU  >6433
[0062] 6462          TOPL55 EQU  >6462
[0063] 64EF          ILLST  EQU  >64EF
[0064] 66CF          EDITLN EQU  >66CF             * Edit a line into a program
[0065] 6A8A          READL3 EQU  >6A8A

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0002 
RXB 2022
[0066] 64A0          SZRUNL EQU  >64A0
[0067] 6D78          G6D78  EQU  >6D78             * GKXB ERR routine
[0068] 6E0E          ERPRNT EQU  >6E0E
[0069] 6E1B          ERPNT5 EQU  >6E1B
[0070] 6FBA          DISO   EQU  >6FBA
[0071]               * GROM >8000
[0072] 802A          GRMLST EQU  >802A
[0073] 7B42          CHARS  EQU  >7B42             ADDRESS CHAR DEFINITIONS
[0074] 7000          ALCEND EQU  >7000             RXB moved INIT in ROM3
[0075]               * GROM >A000
[0076] A00A          ASC    EQU  >A00A
[0077] A01A          LNKRT2 EQU  >A01A             Return to XB
[0078] A01C          LNKRTN EQU  >A01C             ) and return to XB
[0079] BFE0          COMB   EQU  >BFE0
[0080] BFE2          STRFCH EQU  >BFE2
[0081] BFE4          STRPAR EQU  >BFE4 
[0082] BFE6          STRGET EQU  >BFE6
[0083] BFE8          NUMFCH EQU  >BFE8
[0084] BFEA          CFIFCH EQU  >BFEA
[0085] BFEC          GNRTN  EQU  >BFEC
[0086] BFEE          NGOOD  EQU  >BFEE
[0087] BFF0          SNDER  EQU  >BFF0
[0088] BFF2          CIFSND EQU  >BFF2
[0089] BFF4          SNDASS EQU  >BFF4
[0090] BFF6          SUBLP3 EQU  >BFF6 
[0091] BFF8          SUBLP4 EQU  >BFF8
[0092] BFFA          CLRFAC EQU  >BFFA
[0093] BFFC          GETNUM EQU  >BFFC
[0094]               * GROM >E000
[0095] E025          GE025  EQU  >E025             RXB PATCH for EA
[0096]               ***********************************************************
[0097]               *    EQUATES FOR ROUTINES FROM OTHER GROM SECTIONS
[0098] 6048          MSGBRK EQU  >6048             * BREAKPOINT
[0099] 6A74          LLIST  EQU  >6A74             List a line
[0100] 6A78          CHKEND EQU  >6A78             Check end of statement
[0101] 6A82          WARNZZ EQU  >6A82             WARNING MESSAGE ROUTINE
[0102] 6A84          ERRZZ  EQU  >6A84             ERROR MESSAGE ROUTINE
[0103]               * ERRZ   EQU  >6A84             ERRor routine
[0104]               * READL1 EQU  >6A86             Read a line from keyboard
[0105] 8012          CLSALL EQU  >8012
[0106] 802C          GRSUB2 EQU  >802C
[0107] 802E          GRSUB3 EQU  >802E
[0108]               ***********************************************************
[0109]               *    Equates for XMLs
[0110] 0000          SYNCHK EQU  >00               SYNCHK XML selector
[0111] 0003          SEETWO EQU  >03               SEETWO XML selector
[0112] 0020          ALSUP  EQU  >20               XML to user AssembLy SUBrouti
[0113] 0070          COMPCT EQU  >70               PREFORM A GARBAGE COLLECTION
[0114] 0071          GETSTR EQU  >71               SYSTEM GET STRING
[0115] 0073          XBCNS  EQU  >73               Convert number to string
[0116] 0074          PARSE  EQU  >74               Parse a value
[0117] 0077          VPUSH  EQU  >77               Push on value stack
[0118] 0078          VPOP   EQU  >78               Pop off value stack
[0119] 0079          PGMCHR EQU  >79               GET PROGRAM CHARACTER
[0120] 0079          INVERS EQU  >79               ROM 3 INVERSE ASSEMBLY 
[0121] 007A          SYM    EQU  >7A               Find SYMBOL entry
[0122] 007B          SMB    EQU  >7B               Find symbol table entry
[0123] 007C          ASSGNV EQU  >7C               Assign VARIABLE
[0124] 007E          SPEED  EQU  >7E               SPEED UP XML
[0125] 007F          CRUNCH EQU  >7F               Crunch an input line
[0126] 0080          CIF    EQU  >80               Convert INTEGER to FLOATING P
[0127] 0083          SCROLL EQU  >83               SCROLL THE SCREEN
[0128]               * GREAD  EQU  >85               READ DATA FROM ERAM
[0129]               * MVDN   EQU  >88               MOVE DATA IN VDP/ERAM

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0003 
RXB 2022
[0130] 0089          MVUP   EQU  >89               MOVE DATA IN VDP/ERAM
[0131]               * GREAD1 EQU  >8C               READ DATA FROM ERAM
[0132]               ***********************************************************
[0133]               *  XML for ROM3  
[0134] 0070          RROLL  EQU  >70               Right ROLL screen ASSEMBLY
[0135] 0071          LROLL  EQU  >71               Left ROLL screen ASSEMBLY
[0136] 0072          UROLL  EQU  >72               Up ROLL screen ASSEMBLY
[0137] 0073          DROLL  EQU  >73               Down ROLL screen ASSEMBLY
[0138] 0074          HCHAR  EQU  >74               HCHAR ASSEMBLY
[0139] 0075          VCHAR  EQU  >75               VCHAR ASSEMBLY
[0140] 0076          ASCHEX EQU  >76               ASC/HEX/DEC ASSEMBLY
[0141] 0077          HPUT   EQU  >77               HPUT ASSEMBLY
[0142] 0078          VPUT   EQU  >78               VPUT ASSEMBLY 
[0143] 007E          ALPHA  EQU  >7E               ALPHA LOCK ASSEMBLY
[0144] 008B          CINIT  EQU  >8B               CALL INIT ASSEMBLY
[0145]               ***********************************************************
[0146]               *    Temporary workspaces in EDIT
[0147] 8301          PAD1   EQU  >8301            TEMPORARY
[0148] 8302          PAD2   EQU  >8302            Ussually a counter
[0149] 8302          CHKSUM EQU  >8302            Check sum word
[0150] 8302          STPT   EQU  >8302            TWO BYTES
[0151] 8302          MNUM   EQU  >8302            Ussually a counter
[0152] 8304          PC     EQU  >8304            Address in ERAM to load next v
[0153] 8304          PAD4   EQU  >8304
[0154] 8304          PABPTR EQU  >8304            Pointer to current PAB
[0155] 8306          PAD6   EQU  >8306            Use in MVDN only
[0156] 8306          CCPPTR EQU  >8306            OFFSET WITHIN RECORED (1)
[0157]               *                             or Pointer to current column
[0158] 8306          OFFADD EQU  >8306            OFFADD of relocatable programs
[0159]               *                             loaded into ERAM.
[0160] 8307          RECLEN EQU  >8307            LENGTH OF CURRENT RECORD (1)
[0161] 8308          SETCRU EQU  >8308            SBO or SBZ bytes SAMS COMMAND
[0162] 8308          CCPADR EQU  >8308            RAM address of current refs
[0163]               *                             or Actual buffer address or c
[0164] 8308          FRESTA EQU  >8308            Start of free memory in ERAM
[0165]               *                         the end of the reloacatable progr
[0166]               *                         (start of next program) is stored
[0167]               *                         in FRESTA once a "0" tag is found
[0168] 830A          FREEND EQU  >830A            End of free memory in ERAM -
[0169]               *                         points to 1st character of last
[0170]               *                         entry into routine name table.
[0171]               *                         (must follow FRESTA!!!)
[0172] 830A          RAMPTR EQU  >830A            Pointer for crunching
[0173] 830C          BYTES  EQU  >830C            BYTE COUNTER
[0174]               *                             or String length for GETSTR
[0175] 830E          BUFPNT EQU  >830E            I/O buffer pointer
[0176] 830E          CURINC EQU  >830E            Increment for auto-num mode
[0177] 8310          VAR5   EQU  >8310            VAR5 through VAR5+3 used in RA
[0178] 8310          TAG    EQU  >8310            TAG FIELD
[0179] 8310          OLDS   EQU  >8310            FLAG BITS
[0180] 8310          TBLPTR EQU  >8310            Table pointer (CHARPAT)
[0181] 8311          FIELD  EQU  >8311            Value after TAG field, 4 bytes
[0182]               *                             (must follow TAG!!!)
[0183] 8311          VAR6   EQU  >8311
[0184] 8312          COUNT  EQU  >8312            FLAG BITS
[0185] 8312          STRPTR EQU  >8312            String pointer (CHARPAT)
[0186] 8314          CURLIN EQU  >8314            Current line for auto-num
[0187]               *                             or Starting line number for L
[0188] 8314          VAR9   EQU  >8314            Used in CHARLY
[0189] 8314          STORE  EQU  >8314            FLAG BITS
[0190] 8315          INDEXC EQU  >8315            Byte index for computing check
[0191] 8316          VARB   EQU  >8316            Source address for XML MVUP
[0192] 8316          TEMP   EQU  >8316            FLAG BITS
[0193] 8317          DEVNUM EQU  >8317            DEVice NUMber for Hard drive

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0004 
RXB 2022
[0194] 8317          DSRFLG EQU  >8317            INTERNAL =60, EXTERNAL =0 (1)
[0195]               ***********************************************************
[0196]               *    Permanent workspace variables
[0197] 831A          STREND EQU  >831A            String space ending
[0198] 831C          SREF   EQU  >831C            Temporary string pointer
[0199] 8320          VARW   EQU  >8320            Screen address (CURSOR)
[0200] 8322          ERRCOD EQU  >8322            Return error code from ALC
[0201] 8324          STVSPT EQU  >8324            Value-stack base
[0202] 832A          VARA   EQU  >832A            Ending display location
[0203] 832C          PGMPTR EQU  >832C            Program text pointer (TOKEN)
[0204] 832E          EXTRAM EQU  >832E            Line number table pointer
[0205] 8330          STLN   EQU  >8330            Start of line number table
[0206] 8332          ENLN   EQU  >8332            End of line number table
[0207] 8340          FREPTR EQU  >8340            Free space pointer
[0208] 8342          CHAT   EQU  >8342            Current charater/token
[0209] 8344          PRGFLG EQU  >8344            Program/imperative flag
[0210] 8345          FLAG   EQU  >8345            General 8-bit flag
[0211]               * BUFLEV EQU  >8346          Crunch-buffer destruction leve
[0212]               * FAC  EQU  >834A            Floating-point ACcurmulator
[0213] 834B          FAC1   EQU  FAC+1
[0214] 834C          FAC2   EQU  FAC+2
[0215] 834D          FAC3   EQU  FAC+3
[0216] 834E          FAC4   EQU  FAC+4
[0217] 834F          FAC5   EQU  FAC+5
[0218] 8350          FAC6   EQU  FAC+6
[0219] 8351          FAC7   EQU  FAC+7
[0220] 8352          FAC8   EQU  FAC+8
[0221] 8353          FAC9   EQU  FAC+9
[0222] 8354          FAC10  EQU  FAC+10
[0223] 8354          TEMP1  EQU  >8354            TEMPorary CPU location 1
[0224] 8355          FAC11  EQU  FAC+11
[0225] 8356          FAC12  EQU  FAC+12
[0226] 8356          TEMP2  EQU  >8356            TEMPorary CPU location 2
[0227] 8357          FAC13  EQU  FAC+13
[0228] 8358          FAC14  EQU  FAC+14
[0229] 8358          EEE1   EQU  FAC+14
[0230] 8359          FAC15  EQU  FAC+15
[0231] 835A          FAC16  EQU  FAC+16
[0232] 835B          FAC17  EQU  FAC+17
[0233]               * ARG  EQU  >835C            Floating-point ARGument
[0234] 835D          ARG1   EQU  ARG+1
[0235] 835E          ARG2   EQU  ARG+2
[0236] 835E          INDEX  EQU  >835E            Label or program ID - 8 bytes
[0237] 835F          ARG3   EQU  ARG+3
[0238] 8360          ARG4   EQU  ARG+4
[0239] 8361          ARG5   EQU  ARG+5
[0240] 8362          ARG6   EQU  ARG+6
[0241]               * FPERAD EQU  >836C            Value stack pointer
[0242]               * VSPTR  EQU  >836E          Value stack pointer
[0243] 8370          HIVDP  EQU  >8370
[0244]               ***********************************************************
[0245]               *    GPL Status Block
[0246]               * STACK  EQU  >8372             STACK FOR DATA
[0247]               * SUBSTK EQU  >8373             SUBROUTINE STACK
[0248] 8375          RKEY   EQU  >8375             KEY CODE
[0249]               * TIMER  EQU  >8379             TIMING REGISTER
[0250] 837C          ERCODE EQU  >837C             STATUS REGISTER
[0251] 837D          CB     EQU  >837D             Character Buffer
[0252]               ***********************************************************
[0253] 8384          RAMTOP EQU  >8384            Highest address in ERAM
[0254]               *                             = 0 if ERAM not present
[0255]               *                             (Starts at >8A)
[0256] 8386          RAMFRE EQU  >8386            Free pointer in the ERAM
[0257] 83C2          GKFLAG EQU  >83C2 * GKXB flag PEEK/LOAD VDP/GROM/QUIT KEY

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0005 
RXB 2022
[0258]               ***********************************************************
[0259]               *    VDP addresses
[0260] 02E2          NLNADD EQU  >02E2             New LiNe ADDress
[0261] 0371          LODFLG EQU  >0371             Auto-boot needed flag
[0262]               * Temporary
[0263]               *                              in FLMGRS (4 bytes used)
[0264] 0376          SYMBOL EQU  >0376             Saved symbol table pointer
[0265] 038C          BUFSRT EQU  >038C             Edit recall start addr (VARW)
[0266] 038E          BUFEND EQU  >038E             Edit recall end addr (VARA)
[0267]               * RXB PATCH CODE * MOVED TO >03B8 SIZXPT (Size ACCEPT AT)
[0268]               * MRGPAB EQU  >039E             MERGEd temporary for pab pt
[0269] 039E          PMEM   EQU  >039E             UPPER 24K MEMORY
[0270]               *----------------------------------------------------------
[0271]               *    Flag 0:  99/4  console, 5/29/81
[0272]               *         1:  99/4A console
[0273] 03BB          CONFLG EQU  >03BB
[0274]               *----------------------------------------------------------
[0275] 03C0          VROAZ  EQU  >03C0             Temporary roll-out area
[0276] 0820          CRNBUF EQU  >0820             CRuNch BUFfer address
[0277] 08C0          RECBUF EQU  >08C0             Edit RECall BUFfer
[0278] 0958          VRAMVS EQU  >0958             Default base of value stack
[0279]               ***********************************************************
[0280]               *    IMMEDITATE VALUES
[0281] 000A          DWNARR EQU  >0A
[0282] 000B          UPARR  EQU  >0B
[0283] 000D          CHRTN  EQU  >0D
[0284] 0060          OFFSET EQU  >60               OFFSET FOR VIDEO TABLES
[0285] 0065          STRING EQU  >65               String ID # for FAC
[0286]               ***********************************************************
[0287]               * Editting command equates & keys or tokens
[0288] 0005          OLDZ   EQU  >05               SAMS TOKEN OLD
[0289] 0007          SAVEZ  EQU  >07               SAMS TOKEN SAVE
[0290] 0020          SPACE  EQU  >20               Space key
[0291] 0032          SAMS2Z EQU  >32               SAMS TOKEN 2 
[0292] 0033          SAMS3Z EQU  >33               SAMS TOKEN 3
[0293] 0041          SAMSAZ EQU  >41               SAMS TOKEN A
[0294] 0042          SAMSBZ EQU  >42               SAMS TOKEN B
[0295] 0043          SAMSCZ EQU  >43               SAMS TOKEN C
[0296] 0044          SAMSDZ EQU  >44               SAMS TOKEN D
[0297] 0045          SAMSEZ EQU  >45               SAMS TOKEN E
[0298] 0046          SAMSFZ EQU  >46               SAMS TOKEN F
[0299]               ***********************************************************
[0300]               * PAB offset
[0301] 0001          FLG    EQU  1                 FLAG BYTE ENTRY
[0302] 0002          BUF    EQU  2                 BUFFER ENTRY
[0303] 0004          LEN    EQU  4                 RECORD LENGTH ENTRY
[0304] 0005          CHRCNT EQU  5                 CHARACTER COUNT
[0305] 0008          SCR    EQU  8                 SCREEN OFFSET ENTRY
[0306] 0009          NLEN   EQU  9                 NAME LENGTH
[0307] 000A          PABLEN EQU  10                ACTUAL PAB LENGTH
[0308]               ***********************************************************
[0309]               *    BASIC TOKEN TABLE
[0310]               *      EQU  >80               spare token
[0311] 0081          ELSEZ  EQU  >81               ELSE
[0312] 0082          SSEPZ  EQU  >82               ::
[0313] 0083          TREMZ  EQU  >83               $
[0314] 0084          IFZ    EQU  >84               IF
[0315] 0085          GOZ    EQU  >85               GO
[0316] 0086          GOTOZ  EQU  >86               GOTO
[0317] 0087          GOSUBZ EQU  >87               GOSUB
[0318] 0088          RETURZ EQU  >88               RETURN
[0319] 0089          DEFZ   EQU  >89               DEF
[0320] 008A          DIMZ   EQU  >8A               DIM
[0321] 008B          ENDZ   EQU  >8B               END

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0006 
RXB 2022
[0322] 008C          FORZ   EQU  >8C               FOR
[0323] 008D          LETZ   EQU  >8D               LET   * RXB REMOVED
[0324] 008E          BREAKZ EQU  >8E               BREAK
[0325] 008F          UNBREZ EQU  >8F               UNBREAK
[0326] 0090          TRACEZ EQU  >90               TRACE
[0327] 0091          UNTRAZ EQU  >91               UNTRACE
[0328] 0092          INPUTZ EQU  >92               INPUT
[0329] 0093          DATAZ  EQU  >93               DATA
[0330] 0094          RESTOZ EQU  >94               RESTORE
[0331] 0095          RANDOZ EQU  >95               RANDOMIZE
[0332] 0096          NEXTZ  EQU  >96               NEXT
[0333] 0097          READZ  EQU  >97               READ
[0334] 0098          STOPZ  EQU  >98               STOP
[0335] 0099          DELETZ EQU  >99               DELETE
[0336] 009A          REMZ   EQU  >9A               REM
[0337] 009B          ONZ    EQU  >9B               ON
[0338] 009C          PRINTZ EQU  >9C               PRINT
[0339] 009D          CALLZ  EQU  >9D               CALL
[0340] 009E          OPTIOZ EQU  >9E               OPTION
[0341] 009F          OPENZ  EQU  >9F               OPEN
[0342] 00A0          CLOSEZ EQU  >A0               CLOSE
[0343] 00A1          SUBZ   EQU  >A1               SUB
[0344] 00A2          DISPLZ EQU  >A2               DISPLAY
[0345] 00A3          IMAGEZ EQU  >A3               IMAGE
[0346] 00A4          ACCEPZ EQU  >A4               ACCEPT
[0347] 00A5          ERRORZ EQU  >A5               ERROR
[0348] 00A6          WARNZ  EQU  >A6               WARNING
[0349] 00A7          SUBXTZ EQU  >A7               SUBEXIT
[0350] 00A8          SUBNDZ EQU  >A8               SUBEND
[0351] 00A9          RUNZ   EQU  >A9               RUN
[0352] 00AA          LINPUZ EQU  >AA               LINPUT
[0353]               *      EQU  >AB               spare token (LIBRARY)
[0354]               *      EQU  >AC               spare token (REAL)
[0355]               *      EQU  >AD               spare token (INTEGER)
[0356]               *      EQU  >AE               spare token (SCRATCH)
[0357]               *      EQU  >AF               spare token
[0358] 00B0          THENZ  EQU  >B0               THEN
[0359] 00B1          TOZ    EQU  >B1               TO
[0360] 00B2          STEPZ  EQU  >B2               STEP
[0361] 00B3          COMMAZ EQU  >B3               ,
[0362] 00B4          SEMICZ EQU  >B4               ;
[0363] 00B5          COLONZ EQU  >B5               :
[0364] 00B6          RPARZ  EQU  >B6               )
[0365] 00B7          LPARZ  EQU  >B7               (
[0366] 00B8          CONCZ  EQU  >B8               &          (CONCATENATE)
[0367]               *      EQU  >B9               spare token
[0368] 00BA          ORZ    EQU  >BA               OR
[0369] 00BB          ANDZ   EQU  >BB               AND
[0370] 00BC          XORZ   EQU  >BC               XOR
[0371] 00BD          NOTZ   EQU  >BD               NOT
[0372] 00BE          EQUALZ EQU  >BE               =
[0373] 00BF          LESSZ  EQU  >BF               <
[0374] 00C0          GREATZ EQU  >C0               >
[0375] 00C1          PLUSZ  EQU  >C1               +
[0376] 00C2          MINUSZ EQU  >C2               -
[0377] 00C3          MULTZ  EQU  >C3               *
[0378] 00C4          DIVIZ  EQU  >C4               /
[0379] 00C5          CIRCUZ EQU  >C5               ^
[0380]               *      EQU  >C6               spare token
[0381] 00C7          STRINZ EQU  >C7               QUOTED STRING
[0382] 00C8          UNQSTZ EQU  >C8               UNQUOTED STRING
[0383] 00C8          NUMZ   EQU  >C8               ALSO NUMERICAL STRING
[0384] 00C8          NUMCOZ EQU  >C8               ALSO UNQUOTED STRING
[0385] 00C9          LNZ    EQU  >C9               LINE NUMBER CONSTANT

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0007 
RXB 2022
[0386] 00CA          EOFZ   EQU  >CA               EOF
[0387] 00CB          ABSZ   EQU  >CB               ABS
[0388] 00CC          ATNZ   EQU  >CC               ATN
[0389] 00CD          COSZ   EQU  >CD               COS
[0390] 00CE          EXPZZ  EQU  >CE               EXP
[0391] 00CF          INTZ   EQU  >CF               INT
[0392] 00D0          LOGZ   EQU  >D0               LOG
[0393] 00D1          SGNZZ  EQU  >D1               SGN
[0394] 00D2          SINZ   EQU  >D2               SIN
[0395] 00D3          SQRZ   EQU  >D3               SQR
[0396] 00D4          TANZ   EQU  >D4               TAN
[0397] 00D5          LENZ   EQU  >D5               LEN
[0398] 00D6          CHRZZ  EQU  >D6               CHR$
[0399] 00D7          RNDZ   EQU  >D7               RND
[0400] 00D8          SEGZZ  EQU  >D8               SEG$
[0401] 00D9          POSZ   EQU  >D9               POS
[0402] 00DA          VALZ   EQU  >DA               VAL
[0403] 00DB          STRZZ  EQU  >DB               STR$
[0404] 00DC          ASCZ   EQU  >DC               ASC
[0405] 00DD          PIZ    EQU  >DD               PI
[0406] 00DE          RECZ   EQU  >DE               REC
[0407] 00DF          MAXZ   EQU  >DF               MAX
[0408] 00E0          MINZ   EQU  >E0               MIN
[0409] 00E1          RPTZZ  EQU  >E1               RPT$
[0410]               *      EQU  >E2               unused
[0411]               *      EQU  >E3               unused
[0412]               *      EQU  >E4               unused
[0413]               *      EQU  >E5               unused
[0414]               *      EQU  >E6               unused
[0415]               *      EQU  >E7               unused
[0416] 00E8          NUMERZ EQU  >E8               NUMERIC
[0417] 00E9          DIGITZ EQU  >E9               DIGIT
[0418] 00EA          UALPHZ EQU  >EA               UALPHA
[0419] 00EB          SIZEZ  EQU  >EB               SIZE
[0420] 00EC          ALLZ   EQU  >EC               ALL
[0421] 00ED          USINGZ EQU  >ED               USING
[0422] 00EE          BEEPZ  EQU  >EE               BEEP
[0423] 00EF          ERASEZ EQU  >EF               ERASE
[0424] 00F0          ATZ    EQU  >F0               AT
[0425] 00F1          BASEZ  EQU  >F1               BASE
[0426]               *      EQU  >F2               spare token (TEMPORARY)
[0427] 00F3          VARIAZ EQU  >F3               VARIABLE
[0428] 00F4          RELATZ EQU  >F4               RELATIVE
[0429] 00F5          INTERZ EQU  >F5               INTERNAL
[0430] 00F6          SEQUEZ EQU  >F6               SEQUENTIAL
[0431] 00F7          OUTPUZ EQU  >F7               OUTPUT
[0432] 00F8          UPDATZ EQU  >F8               UPDATE
[0433] 00F9          APPENZ EQU  >F9               APPEND
[0434] 00FA          FIXEDZ EQU  >FA               FIXED
[0435] 00FB          PERMAZ EQU  >FB               PERMANENT
[0436] 00FC          TABZ   EQU  >FC               TAB
[0437] 00FD          NUMBEZ EQU  >FD               #
[0438] 00FE          VALIDZ EQU  >FE               VALIDATE
[0439]               *      EQU  >FF               ILLEGAL VALUE
[0440]               ***********************************************************
[0441]                      GROM >C000
[0442]                      AORG 0
[0443] C000 AA,16           DATA >AA16      * VALID GROM / VERSION 22
[0444] C002 00,00           DATA >0000      * (FUTURE EXPANSION)
[0445] C004 00,00           DATA >0000      * POWERUP
[0446] C006 00,00           DATA >0000     * PROGRAMS
[0447] C008 00,00           DATA >0000      * DSR 
[0448] C00A 00,00           DATA >0000      * CALL
[0449] C00C 00,00           DATA >0000      * INTERUPT

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0008 
RXB 2022
[0450] C00E 00,00           DATA >0000      * BASIC CALL
[0451]               ***********************************************************
[0452]               * ASSEMBLY LANGUAGE SUPPORT FOR 99/4
[0453]               *
[0454]               * LOAD, INIT, PEEK, LINK, CHARPAT      JDH  08/21/80
[0455]               ***********************************************************
[0456]               * FORMAT FOR LOAD:
[0457]               *  CALL LOAD open load-directive (comma load-directive)
[0458]               *            close
[0459]               *    load-directive = file-name / address (comma data)
[0460]               *                     (null / file-name)
[0461]               *    file-name      = string-expression
[0462]               *    address        = numeric-expression
[0463]               *    data           = numeric-expression
[0464]               *
[0465]               *  FILE TYPE = FIXED 80, DISPLAY , SEQUENTIAL FILE
[0466]               *
[0467]               * FUNCTION:
[0468]               *  LOADS ASSEMBLY LANGUAGE CODE INTO EXPANSION RAM
[0469]               *  ADDRESSES: >2000 - >>3FFF RELOCATING
[0470]               *  RELOCATABLE CODE INTO AVAILABLE MEMORY, ABSOLUTE CODE
[0471]               *  IS LOADED
[0472]               *  INTO ITS ABSOLUTE ADDRESS, ENTRY POINTS ARE DEFINED BY
[0473]               *  'DEF' STATEMENTS, AND ARE LOADED INTO HIGH END OF ERAM
[0474]               *
[0475]               *  RELOACATABLE OR ABSOLUTE CODE MAY BE STORED ON A FILE
[0476]               *  9900 OBJECT CODE FORMAT.
[0477]               *   VALID TAGS = 0, 5, 6, 7, 9, A, B, C, F,:
[0478]               *         TAGS 1, 2, I, M, ARE IGNORED
[0479]               *  THE SYMT OPTION IS NOT SUPPORTED.
[0480]               *  ABSOLUTE CODE MAY BE LOADED DIRECTLY FROM PROGRAM
[0481]               *  BY SPECIFYING AN ADDRESS INSTEAD OF A FILE NAME,
[0482]               *  FOLLOWED BY THE DATA TO BE LOADED (WHICH IS PUT IN THE
[0483]               *   RANGE 0 to 255
[0484]               *  THE RANGE OF THE ADDRESS OR DATA IS LIMITED TO
[0485]               *   32767 to -32768
[0486]               *  MULTIPLE DIRECT LOADS CAN BE IN THE SAME LOAD COMMAND
[0487]               *  PROVIDED THEY ARE SEPARATED BY EITHER A FILENAME OR A
[0488]               *   NULL STRING.
[0489]               *
[0490]               * RXB CHANGED MVUP TO GPL MOVE AS MOVING 2 BYTES USING 14 
[0491]               * BYTES OF GPL TO MOVE RAM TO SCRATCH PAD WAS SLOWER.
[0492]               *
[0493]               *  MVUP WAS USED TO TRANSFER DATA FROM CPU RAM TO ERAM
[0494]               *  SINCE IT WAS NOT KNOWN AT FIRST THAT THE MOVE
[0495]               *  INSTRUCTION COULD TRANSFER FROM CPU RAM TO ERAM
[0496]               *   (PROVIDED THAT >8300 IS SUBTRACTED FROM THE ADDRESSES)
[0497]               ***********************************************************
[0498]               * RXB PATCH CHANGED CALL INIT TO A GPL MOVE ALL 1 CHUNK 
[0499]               * REPLACING ORIGINAL TI MOVING 4 CHUNKS WITH MULTIPLE LOOPS
[0500]               ***********************************************************
[0501]               * RXB BRANCH TABLE FOR LONG GROMS
[0502]               * >C010 was CALL LINK
[0503]               ***********************************************************
[0504]               * CALL LINK("subprogram-name",arguement-list,...)         *
[0505]               ***********************************************************
[0506] C010 C0,19           DATA SLOADF
[0507] C012 04,4C,49        STRI 'LINK'
       C015 4E,4B
[0508] C017 C3,14           DATA LINKIT
[0509]               ***********************************************************
[0510]               * CALL LOAD("pathname.file")                              *
[0511]               * CALL LOAD("access-name",byte1,byte2,byte3,...)          *
[0512]               ***********************************************************

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0009 
RXB 2022
[0513] C019 C0,22    SLOADF DATA SINITR
[0514] C01B 04,4C,4F        STRI 'LOAD'
       C01E 41,44
[0515] C020 C0,40           DATA LOAD
[0516]               ***********************************************************
[0517]               * CALL INIT                                               *
[0518]               ***********************************************************
[0519] C022 C0,2B    SINITR DATA SPEEK
[0520] C024 04,49,4E        STRI 'INIT'
       C027 49,54
[0521] C029 C2,AB           DATA INIT
[0522]               ***********************************************************
[0523]               * CALL PEEK(address,numeric-varible-list,...)             *
[0524]               ***********************************************************
[0525] C02B C0,34    SPEEK  DATA CHRPAT
[0526] C02D 04,50,45        STRI 'PEEK'
       C030 45,4B
[0527] C032 C6,09           DATA GKPEEK
[0528]               ***********************************************************
[0529]               * CALL CHARPAT(character#,string-variable,...)            *
[0530]               ***********************************************************
[0531] C034 C5,E5    CHRPAT DATA POKEV
[0532] C036 07,43,48        STRI 'CHARPAT'
       C039 41,52,50
       C03C 41,54
[0533] C03E C4,20           DATA GETCHR
[0534]               * LOAD - LDP1 - LDP4 - LDP5
[0535]               ** CHKSUM is also used as a flag to test if a file has been
[0536]               ** opened (so that it gets closed)
[0537]               ** it is initialized to >0001 and will be changed to some
[0538]               ** other value if a file is used
[0539]               ***********************************************************
[0540]               * CALL LOAD("DSK#.FILENAME")                              *
[0541]               * CALL LOAD(ADDRESS,LIST[,...])                           *
[0542]               ***********************************************************
[0543] C040 BF,02,00 LOAD   DST  >0001,@CHKSUM     {INITIALIZE FILE FLAG}
       C043 01
[0544]               * GKXB Change load routine. Delete check for INIT
[0545]               *      add to clear flag bits.
[0546] C044 06,C5,E0        CALL GKLOAD
[0547] C047 D6,42,B7 LPD0   CEQ  LPARZ,@CHAT       SYNTAX ERROR if no "("
[0548] C04A 45,09           BR   ERRSY1
[0549] C04C 0F,79           XML  PGMCHR            Skip over
[0550]               * MAIN PARESE LOOP *
[0551]               * Check for file-name or address
[0552] C04E 0F,74    LDP1   XML  PARSE
[0553] C050 B6              BYTE RPARZ           * PARSE up to ")" or ","
[0554] C051 D6,4C,65        CEQ  STRING,@FAC2      Process file name
[0555] C054 60,8D           BS   LDP2
[0556]               * Otherwise it is an address
[0557]               * Convert address to integer, save in @PC
[0558] C056 0F,12           XML  CFI               Convert FAC to integer
[0559] C058 D6,54,03        CEQ  3,@FAC10          Check for overflow
[0560] C05B 65,02           BS   ERRN01
[0561] C05D BD,04,4A        DST  @FAC,@PC          Save in ERAM location pointer
[0562]               * Check for "," if there then data should folow
[0563]               *  else end of load statement, goto LDP5
[0564] C060 D6,42,B3 LDP4   CEQ  COMMAZ,@CHAT
[0565] C063 40,85           BR   LDP5
[0566]               * DATA follows or a STRING if no more data
[0567] C065 0F,79           XML  PGMCHR            Skip ","
[0568] C067 0F,74           XML  PARSE             Get data value or string if
[0569]               *                              end of data
[0570] C069 B6              BYTE RPARZ           * Parse up to ")" or ","

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0010 
RXB 2022
[0571] C06A D6,4C,65        CEQ  STRING,@FAC2      No more data
[0572] C06D 60,8D           BS   LDP2
[0573]               * FAC contains a numeric
[0574] C06F 0F,12           XML  CFI               FAC to INTEGER
[0575] C071 D6,54,03        CEQ  3,@FAC10          Check for overflow
[0576] C074 65,02           BS   ERRN01
[0577]               * GKXB Code for CPU write moved to LOADDT. Add code to
[0578]               *      check VDP or GRAM bits and write to VDP.
[0579] C076 DA,80,C2        CLOG >08,@GKFLAG       Check VDP bit
       C079 08
[0580] C07A 66,56           BS   LDGRAM            No, check GRAM bit
[0581] C07C BC,B0,04        ST   @FAC1,V*PC        Yes, write to VDP
       C07F 4B
[0582] C080 91,04           DINC @PC               Point to next byte
[0583] C082 05,C0,60        B    LDP4              Continue with LOAD routine
[0584]               * GROM ADDRESS >C088 FOR LDP5
[0585]               * Check for ")"  IF there return ELSE SYNTAX ERROR
[0586] C085 D6,42,B6 LDP5   CEQ  RPARZ,@CHAT       Return
[0587] C088 61,DE           BS   LDRET
[0588] C08A 05,C5,09        B    ERRSY1            SYNTAX ERROR
[0589]               * LDP2
[0590]               * Process file name
[0591] C08D 8E,51    LDP2   CZ   @FAC7             Check for null string
[0592] C08F 61,CF           BS   LDNE2
[0593]               * GKXB Change 'LOAD FILE' to check for INIT
[0594] C091 06,C5,F9        CALL GKINIT
[0595]               *************** LOAD DATA INTO ERAM ***********************
[0596]               * LOAD FRESTA, FREEND from ERAM
[0597] C094 BF,16,20        DST  FSLOC,@VARB          Source
       C097 02
[0598] C098 BF,00,83        DST  FRESTA,@PAD          Destination
       C09B 08
[0599] C09C BF,5C,00        DST  4,@ARG               # of bytes to move
       C09F 04
[0600] C0A0 0F,89           XML  MVUP                 Load
[0601]               * Initialize PC, OFFSET in case of no "0" tag
[0602] C0A2 BD,04,08        DST  @FRESTA,@PC
[0603] C0A5 BD,06,08        DST  @FRESTA,@OFFADD   Base address for load module
[0604]               * Read in one record, evaluate the TAG field
[0605]               * LDRD - LDTG
[0606] C0A8 BF,02,00 LDRD   DST  0,@CHKSUM         Clear check sum
       C0AB 00
[0607] C0AC 06,C2,54        CALL READIT            Rear in a record
[0608] C0AF 35,00,05 LDTG   MOVE 5,V*BUFPNT,@TAG   Get TAG & field
       C0B2 10,B0,0E
[0609] C0B5 06,C1,F1        CALL LDIPCS            Add 5 to BUFPNT, add ASCII
[0610] C0B8 05              BYTE 5               * Value of chars. Read to check
[0611]               * Convert @FIELD to numeric (from ASCII hex value)
[0612]               * Store result: HIGH BYTE to FIELD, LOW BYTE to FIELD+1
[0613]               * Convert HIGH BYTE first: @FIELD & @FIELD+1
[0614]               * Store result in field
[0615] C0B9 A6,11,30        SUB  >30,@FIELD        >30 = "0"
[0616] C0BC CE,11,09        CGT  9,@FIELD          Subtract ASCII difference
[0617]               *                              between "9" and "A"
[0618] C0BF 40,C4           BR   GC0C7
[0619] C0C1 A6,11,07        SUB  7,@FIELD
[0620] C0C4 E2,11,04 GC0C7  SLL  4,@FIELD          FIELD=FILED*32
[0621] C0C7 A6,12,30        SUB  >30,@FIELD+1
[0622] C0CA CE,12,09        CGT  9,@FIELD+1
[0623] C0CD 40,D2           BR   GC0D5
[0624] C0CF A6,12,07        SUB  7,@FIELD+1
[0625] C0D2 A0,11,12 GC0D5  ADD  @FIELD+1,@FIELD   Add to HIGH BYTE
[0626]               * Now convert LOW BYTE: @FIELD+2 & @FIELD+3
[0627]               * Store result in LOW BYTE of FIELD to FIELD+1

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0011 
RXB 2022
[0628] C0D5 A6,13,30        SUB  >30,@FIELD+2
[0629] C0D8 CE,13,09        CGT  9,@FIELD+2
[0630] C0DB 40,E0           BR   GC0E3
[0631] C0DD A6,13,07        SUB  7,@FIELD+2
[0632] C0E0 BC,12,13 GC0E3  ST   @FIELD+2,@FIELD+1 Store in LOW byte of result
[0633] C0E3 E2,12,04        SLL  4,@FIELD+1        FIELD+1 = FIELD+1*32
[0634] C0E6 A6,14,30        SUB  >30,@FIELD+3
[0635] C0E9 CE,14,09        CGT  9,@FIELD+3
[0636] C0EC 40,F1           BR   GC0F4
[0637] C0EE A6,14,07        SUB  7,@FIELD+3
[0638] C0F1 A0,12,14 GC0F4  ADD  @FIELD+3,@FIELD+1 Add to low byte
[0639]               * Branch to evaluation procedure for TAG
[0640] C0F4 A6,10,30        SUB  >30,@TAG          >30 = "0"
[0641] C0F7 D2,10,00        CGE  0,@TAG            If TAG < "0" ILLEGAL CHAR
[0642] C0FA 45,9E           BR   ERRUC1
[0643] C0FC CE,10,0A        CGT  >0A,@TAG          TAGS "0" to ":"
[0644] C0FF 61,19           BS   GC11C
[0645] C101 8A,10           CASE @TAG
[0646] C103 41,45           BR   TAG0              "0" RELOCATABLE LENGTH
[0647] C105 40,AF           BR   LDTG              IGNORE "1" TAG
[0648] C107 40,AF           BR   LDTG              IGNORE "2" TAG
[0649] C109 45,9E           BR   ERRUC1            No external REF "3"
[0650] C10B 45,9E           BR   ERRUC1            No external REF "4"
[0651] C10D 41,5A           BR   TAG5              "5" relocatable entry DEF
[0652] C10F 41,5D           BR   TAG6              "6" Absolute entry    DEF
[0653] C111 41,8F           BR   TAG7              "7" check sum
[0654] C113 40,AF           BR   LDTG              "8" ignore check sum
[0655] C115 41,9C           BR   TAG9              "9" Absolute LOAD address
[0656] C117 41,B7           BR   LDDNE             ":" end of file
[0657] C119 A6,10,11 GC11C  SUB  >11,@TAG          Subtract offset so
[0658]               *                              that "A" is =0
[0659] C11C D2,10,00        CGE  0,@TAG            ";" to "@" illegal char
[0660] C11F 45,9E           BR   ERRUC1
[0661]               * Skip over "I" tag - 8 char, program ID that follows
[0662] C121 D6,10,08        CEQ  8,@TAG
[0663] C124 61,53           BS   LDTG2
[0664]               * Skip over "M" TAG -10 char, program ID that follows
[0665] C126 D6,10,0C        CEQ  12,@TAG
[0666] C129 41,32           BR   LDTG3
[0667] C12B 06,C1,F1        CALL LDIPCS
[0668] C12E 0A              BYTE 10
[0669] C12F 05,C0,AF        B    LDTG
[0670] C132 CE,10,05 LDTG3  CGT  5,@TAG            TAGS "G" are legal
[0671] C135 65,9E           BS   ERRUC1
[0672] C137 8A,10           CASE @TAG
[0673] C139 41,99           BR   TAGA              "A" RELOCATABLE PROGRAM ADDRE
[0674] C13B 41,A5           BR   TAGB              "B" ABSOLUTE VALUE
[0675] C13D 41,A2           BR   TAGC              "C" RELATIVE ADDRESS
[0676] C13F 45,9E           BR   ERRUC1            "D" ERROR
[0677] C141 45,9E           BR   ERRUC1            "E" ERROR - UNDEFINED
[0678] C143 40,A8           BR   LDRD              "F" END OF RECORD
[0679]               * TAG0 to TAGB
[0680]               * EVALUATE TAG FIELDS
[0681] C145 BD,06,08 TAG0   DST  @FRESTA,@OFFADD   NEW BASE ADDRESS
[0682] C148 BD,04,08        DST  @FRESTA,@PC       NEW PC
[0683] C14B A1,08,11        DADD @FIELD,@FRESTA    ADD LENGTH TO FIND END OF
[0684]               *                              RELOCATABLE PROGRAM WHICH IS
[0685]               *                              START OF NEXT PROGRAM
[0686]               * Make sure we won't run into routine name table now, so we
[0687]               *  don't have to check every time we load a value into ERAM
[0688]               *  routine table must make sure it doesn't run into
[0689]               *  relocatable assembly language code through.
[0690] C14E C9,08,0A        DCHE @FREEND,@FRESTA   OUT OF MEMORY
[0691] C151 65,2C           BS   ERRMF1

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0012 
RXB 2022
[0692]               * SKIP OVER PROGRAM ID - 8 BYTES
[0693] C153 06,C1,F1 LDTG2  CALL LDIPCS
[0694] C156 08              BYTE 8               * INC BUFPNT, COMPUTE CHECKSUM
[0695] C157 05,C0,AF        B    LDTG
[0696] C15A A1,11,06 TAG5   DADD @OFFADD,@FIELD    Add starting offset
[0697]               * TAG6 is an absolute address so do not need to add offset
[0698] C15D 35,00,06 TAG6   MOVE 6,V*BUFPNT,@INDEX    Get symbol name
       C160 5E,B0,0E
[0699] C163 06,C1,F1        CALL LDIPCS            INC BUPNT, COMPUT CHECKSUM
[0700] C166 06              BYTE 6              *  We read 6 chars
[0701]               * Add symbol and its address - stopped in field - to the
[0702]               *  routine entry table. It is put at the end of the table
[0703]               *  (the end of the table is towards the low end of memory)
[0704]               *  Since the table is searched from the end first, if there
[0705]               *  are any duplicate labels the last one entered will have
[0706]               *  precedence over the early one(s).
[0707] C167 97,0A           DDECT @FREEND          Set to address field
[0708]               * Load address (stored in field in CPU RAM) into routine
[0709]               *  Name table which is in expansion RAM
[0710] C169 BF,16,83        DST  FIELD,@VARB       Source
       C16C 11
[0711] C16D BD,00,0A        DST  @FREEND,@PAD      Destination
[0712] C170 BF,5C,00        DST  2,@ARG            # bytes to move
       C173 02
[0713] C174 0F,89           XML  MVUP              CPUR RAM to ERAM
[0714]               * Load symbol into routine name table
[0715] C176 A7,0A,00        DSUB 6,@FREEND         Set to symbol field
       C179 06
[0716] C17A BF,16,83        DST  INDEX,@VARB        Source
       C17D 5E
[0717] C17E BD,00,0A        DST  @FREEND,@PAD       Destination
[0718] C181 BF,5C,00        DST  6,@ARG             Move 6 bytes
       C184 06
[0719] C185 0F,89           XML  MVUP              CPU RAM to ERAM
[0720]               * Check to see if we've run into assembly language code
[0721] C187 C9,08,0A        DCHE @FREEND,@FRESTA   Out of memory
[0722] C18A 65,2C           BS   ERRMF1
[0723] C18C 05,C0,AF        B    LDTG              If not then continue
[0724]               ***********************************************************
[0725]               * ROUTINE NAME TABLE ENTRY
[0726]               *
[0727]               *                     0   1   2   3   4   5   6  7
[0728]               *                   -----------------------------------
[0729]               *        FREEND     | S | Y | M | B | O | L | ADDRESS |
[0730]               *    (AFTER ENTRY)  -----------------------------------
[0731]               *        FREEND     |   |   |   |   |   |   |         |
[0732]               *    (BEFORE ENTRY) -----------------------------------
[0733]               *
[0734]               *  FREEND is initialized to >4000 by INIT, address is at
[0735]               *   a higher memory location then symbol
[0736]               ***********************************************************
[0737] C18F 83,11    TAG7   DNEG @FIELD            Checksum is 1's compelement
[0738] C191 D5,02,11        DCEQ @FIELD,@CHKSUM    Check sum error
[0739] C194 45,87           BR   ERRDE1
[0740] C196 05,C0,AF        B    LDTG
[0741] C199 A1,11,06 TAGA   DADD @OFFADD,@FIELD    PC = OFFADD ^ FIELD
[0742]               * TAG 9 is an absolute address so no need to add offset
[0743] C19C BD,04,11 TAG9   DST  @FIELD,@PC
[0744] C19F 05,C0,AF        B    LDTG
[0745] C1A2 A1,11,06 TAGC   DADD @OFFADD,@FIELD
[0746]               * TAG B is an absolute entry so no need to add offset
[0747]               * Relocatable code is checked to see if it will run into
[0748]               *  is no need to check now. Absolute code can go anywhere.
[0749]               *

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0013 
RXB 2022
[0750]               * Load field into expansion RAM using MVUP routine
[0751] C1A5 BD,00,04 TAGB   DST  @PC,@PAD           Destination
[0752] C1A8 BF,16,83        DST  FIELD,@VARB        Source
       C1AB 11
[0753] C1AC BF,5C,00        DST  2,@ARG             Move 2 bytes
       C1AF 02
[0754] C1B0 0F,89           XML  MVUP              CPU RAM to ERAM
[0755] C1B2 95,04           DINCT @PC              We loaded 2 bytes
[0756] C1B4 05,C0,AF        B    LDTG
[0757]               ********* END OF LOAD FOR CURRENT FILE ********************
[0758]               *
[0759]               * FRESTA & FREEND are stored in CPU RAM (>8308)
[0760]               * While loading a file into expansion RAM.
[0761]               * So if the values of FRESTA or FREEND are to be changed
[0762]               * then word locations >8308 and >830A must be changed and
[0763]               * not expansion RAM.
[0764]               *
[0765]               * LDDNE - LDNE2
[0766]               *
[0767]               *   DONE WITH LOAD
[0768]               * Put FRESTA, FREEND back into expansion RAM
[0769]               * If FRESTA is odd then make it even
[0770]               *  so that the next program starts on an even boundry
[0771] C1B7 DA,09,01 LDDNE  CLOG 1,@FRESTA+1       Low byte odd?
[0772] C1BA 61,BE           BS   GC1C1
[0773] C1BC 91,08           DINC @FRESTA           Force to next even boundry
[0774] C1BE BF,16,83 GC1C1  DST  FRESTA,@VARB         Source
       C1C1 08
[0775] C1C2 BF,00,20        DST  FSLOC,@PAD           Destination
       C1C5 02
[0776] C1C6 BF,5C,00        DST  4,@ARG               Load 4 bytes
       C1C9 04
[0777] C1CA 0F,89           XML  MVUP              CPU RAM to ERAM
[0778] C1CC 06,C2,68        CALL CLSIT             Close file
[0779]               * Check for end of load command ")"
[0780] C1CF D6,42,B6 LDNE2  CEQ  RPARZ,@CHAT       Check for ")"
[0781] C1D2 61,DE           BS   LDRET
[0782] C1D4 D6,42,B3        CEQ  COMMAZ,@CHAT      Syntax error
[0783] C1D7 45,09           BR   ERRSY1
[0784] C1D9 0F,79           XML  PGMCHR            Skip comma
[0785] C1DB 05,C0,4E        B    LDP1              Continue in main loop
[0786]               *************** LDRET - LDRET2 ****************************
[0787]               *
[0788]               * Return to calling routine
[0789] C1DE 0F,79    LDRET  XML  PGMCHR            Skip over
[0790]               * Entry point for INIT
[0791] C1E0 06,6A,78 LDRET2 CALL CHKEND            Check for end of statement
[0792] C1E3 45,09           BR   ERRSY1            If not end then syntax error
[0793] C1E5 06,00,12        CALL RETURN            Return to caller
[0794]               ********************** CHKIN ******************************
[0795]               * Check for INIT-FLAG = >AA55
[0796]               * MOVE ERAM(INITF) to CPU *FAC
[0797] C1E8          PAGE   EQU  $
[0798]               * CHKIN  DST  FAC,@PAD         Destination
[0799]               *        DST  INITF,@VARB      Source
[0800]               *        DST  2,@ARG           2 bytes
[0801]               *        XML  MVUP             Move it
[0802]               * RXB PATCH REPLACE XML MVUP WITH GPL MOVE ****************
[0803]               *        DCEQ >AA55,@FAC        Syntax error
[0804] C1E8 D7,8F,9D CHKIN    DCEQ >AA55,@INITF   *** RXB REPLACEMENT ROUTINE **
       C1EB 06,AA,55
[0805] C1EE 45,0C            BR   ERRSYN   * SYNTAX ERROR
[0806]               * No files have been opened so if there is a syntax error
[0807]               *  goto ERRSYN!

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0014 
RXB 2022
[0808] C1F0 00               RTN           * RETURN TO CALLING ROUTINE
[0809]               *********************** FILE ROUTINES *********************
[0810]               ***********************************************************
[0811]               * INCREMENT BUFFER POINTER by value after call statement
[0812]               * ADD VALUES READ TO CHECKSUM unless the first character
[0813]               * is a "7" = >37 , then add only "7" character to checksum
[0814]               * (other value is the checksum)
[0815]               *
[0816]               *************************** LDIPCS ************************
[0817] C1F1 88,15    LDIPCS FETCH @INDEXC          Index = # of bytes read
[0818] C1F3 D6,B0,0E        CEQ  >37,V*BUFPNT
       C1F6 37
[0819] C1F7 42,04           BR   GC213
[0820] C1F9 A3,02,00        DADD >0037,@CHKSUM     Add value of "7" to checksum
       C1FC 37
[0821] C1FD A3,0E,00        DADD 5,@BUFPNT         1 for "7", 4 for checksum
       C200 05
[0822] C201 05,C2,15        B    GC224
[0823] C204 BC,4B,B0 GC213  ST   V*BUFPNT,@FAC1    Convert to 2 byte value
       C207 0E
[0824] C208 86,4A           CLR  @FAC              -----------------------------
[0825] C20A A1,02,4A        DADD @FAC,@CHKSUM      Add char to checksum
[0826] C20D 91,0E           DINC @BUFPNT
[0827] C20F 92,15           DEC  @INDEXC           Do it index # of times
[0828] C211 8E,15           CZ   @INDEXC
[0829] C213 42,04           BR   GC213
[0830] C215 00       GC224  RTN
[0831]               ********************** OPENIT *****************************
[0832] C216 BD,0C,50 OPENIT DST  @FAC6,@BYTES      Store actual spec length
[0833] C219 A3,0C,00        DADD PABLEN+80,@BYTES  Add in the PAB length and
       C21C 5A
[0834]               *                              buffer length
[0835] C21D 0F,77           XML  VPUSH             Push possible temp string
[0836] C21F 0F,71           XML  GETSTR             and try to allocate space
[0837] C221 0F,78           XML  VPOP              Restore original string data
[0838]               *
[0839]               * THE FOLLOWING VARIABLES CONTAIN IMPORTANT INFO
[0840]               *
[0841]               *   FAC4, FAC5    Start address of original device specific
[0842]               *   FAC6, FAC7    Length of original device specifications
[0843]               *   SREF          Location of PAB in VDP memory
[0844]               *   BYTES         Length of entire PAB including specificat
[0845] C223 34,50,E0        MOVE @FAC6,V*FAC4,V@PABLEN(@SREF) * Device pathname
       C226 0A,1C,B0
       C229 4E
[0846] C22A 86,B0,1C        CLR  V*SREF               Clear the entire PAB
[0847] C22D 35,00,09        MOVE PABLEN-1,V*SREF,V@1(@SREF)   * Clear PAB
       C230 E0,01,1C
       C233 B0,1C
[0848] C235 BC,E0,09        ST   @FAC7,V@NLEN(@SREF)  Copy specifications length
       C238 1C,51
[0849] C23A BE,E0,08        ST   >60,V@SCR(@SREF)     Screen offset
       C23D 1C,60
[0850] C23F BE,E0,01        ST   4,V@FLG(@SREF)       Dis, fix, seq, input
       C242 1C,04
[0851] C244 A1,50,1C        DADD @SREF,@FAC6          Calculate the address of
[0852] C247 A3,50,00        DADD PABLEN,@FAC6          the buffer
       C24A 0A
[0853] C24B BD,E0,02        DST  @FAC6,V@BUF(@SREF) Store buffer address in PAB
       C24E 1C,50
[0854] C250 06,C2,6C        CALL DSRCAL
[0855] C253 00              RTN
[0856]               ***********************************************************
[0857] C254 BD,0E,E0 READIT DST  V@BUF(@SREF),@BUFPNT   INIT buffer pointer

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0015 
RXB 2022
       C257 02,1C
[0858] C259 BE,B0,1C        ST   2,V*SREF
       C25C 02
[0859] C25D BC,E0,05        ST   V@LEN(@SREF),V@CHRCNT(@SREF)
       C260 1C,E0,04
       C263 1C
[0860] C264 06,C2,6C        CALL DSRCAL
[0861] C267 00              RTN
[0862]               ************************* CLSIT ***************************
[0863] C268 BE,B0,1C CLSIT  ST   1,V*SREF          Prepare to close
       C26B 01
[0864]               ******************** DSRCAL - DSKERR **********************
[0865] C26C BD,56,1C DSRCAL DST  @SREF,@FAC12      Compute start address of spec
[0866] C26F A3,56,00        DADD NLEN,@FAC12       Ready to call DSR routine
       C272 09
[0867] C273 06,00,10        CALL LINK              Call DSR thourgh program link
[0868] C276 08              BYTE 8               * Type = DSR (8)
[0869] C277 62,81           BS   DSKERR            Couldn't find the DSR
[0870] C279 DA,E0,01        CLOG >E0,V@FLG(@SREF)  Set condition bit if no error
       C27C 1C,E0
[0871] C27E 42,81           BR   DSKERR
[0872] C280 00              RTN
[0873] C281 BD,04,40 DSKERR DST  @FREPTR,@PABPTR   Set up dummy PAB
[0874] C284 A7,04,00        DSUB 6,@PABPTR         Make it standard size
       C287 06
[0875] C288 BD,E0,04        DST  V*SREF,V@4(@PABPTR) Store error code
       C28B 04,B0,1C
[0876] C28E 06,C2,95        CALL CLSNOE              Close File
[0877] C291 06,6A,84        CALL ERRZZ               Issue I/O error
[0878] C294 24              BYTE 36              *
[0879]               ********************** CLSNOE *****************************
[0880]               * Try to close the current file
[0881]               * Ignore any errors from the closing of the file.
[0882]               * Since the PAB is not in the normal PAB list
[0883]               *  then we have to close the file in the load routine.
[0884]               * ERRZZ will close the rest of the files.
[0885]               *
[0886]               ** CLOSE IT ONLY IF IT HAS BEEN OPENED
[0887] C295 D7,02,00 CLSNOE DCEQ 1,@CHKSUM         Check file flag
       C298 01
[0888] C299 62,AA           BS   GC2B9
[0889] C29B BE,B0,1C        ST   1,V*SREF          Store close file code
       C29E 01
[0890] C29F BD,56,1C        DST  @SREF,@FAC12      Compute start address of spec
[0891] C2A2 A3,56,00        DADD NLEN,@FAC12       Ready to CALL DSR
       C2A5 09
[0892] C2A6 06,00,10        CALL LINK              CALL DSR through program link
[0893] C2A9 08              BYTE 8               * "8" is type of DSR
[0894] C2AA 00       GC2B9  RTN
[0895]               ***********************************************************
[0896]               * INIT                        JDH   9/02/80
[0897]               ***********************************************************
[0898]               * CALL INIT                                               *
[0899]               ***********************************************************
[0900]               * Check if expansion RAM present
[0901]               * Load support into expansion RAM from GROM
[0902] C2AB 8E,80,84 INIT   CZ   @RAMTOP           If no ERAM, SYNTAX ERROR
[0903] C2AE 65,0C           BS   ERRSYN
[0904]               ** Load Assembly header, support routines **
[0905]               * GKXB Correct INIT routine.
[0906] C2B0 86,8F,DD        CLR  @>6004           * Set ROM PAGE 3 at >6004
       C2B3 04
[0907] C2B4 0F,8B           XML  CINIT            * Move from ROM 3 to RAM
[0908] C2B6 05,C5,DA        B    ECRTN            * RXB custom return routine

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0016 
RXB 2022
[0909]               ***********************************************************
[0910]               * PEEK INSTRUCTION            JDH   9/04/80
[0911]               ***********************************************************
[0912]               *
[0913]               * FORMAT:
[0914]               *  CALL PEEK(address comma numeric-variable) * close
[0915]               * FUNCTION:
[0916]               *  RETURNS THE VALUE AT address IN ERAM INTO numeric-variab
[0917]               *  IF MORE THAN ONE numeric-variable IS SPECIFIED THEN
[0918]               *  address IS INCREMENTED AND THE VALUE IN ERAM AT THE NEW
[0919]               *  address IS ASSIGNED TO THE NEXT VARIABLE AND SO ON.
[0920]               *
[0921] C2B9 D6,42,B7 PEEK   CEQ  LPARZ,@CHAT       Chat = "("
[0922] C2BC 45,0C           BR   ERRSYN
[0923] C2BE 0F,79           XML  PGMCHR            Skip "("
[0924] C2C0 0F,74           XML  PARSE             Get value of address
[0925] C2C2 B6              BYTE RPARZ
[0926] C2C3 D6,4C,65        CEQ  STRING,@FAC2      Address MUST BE NUMERIC
[0927] C2C6 65,1C           BS   ERRSNM
[0928] C2C8 0F,12           XML  CFI               Convert FAC to integer
[0929] C2CA D6,54,03        CEQ  3,@FAC10          Overflow?
[0930] C2CD 65,05           BS   ERRNO
[0931] C2CF BD,04,4A        DST  @FAC,@PC          Save peek address
[0932] C2D2 D6,42,B3        CEQ  COMMAZ,@CHAT      CHAT = "," ?
[0933] C2D5 45,0C           BR   ERRSYN
[0934] C2D7 0F,79    PEEK2  XML  PGMCHR            Skip ","
[0935]               * The following check has been put in SYM, 5/26/81
[0936]               * If @CHAT >= >80 then ERRSYN (Don't allow token)
[0937] C2D9 0F,7A           XML  SYM               Get symbol name
[0938] C2DB 0F,7B           XML  SMB               Get value pointer
[0939] C2DD 0F,77           XML  VPUSH             Save FAC on stack for ASSGNV
[0940] C2DF 8E,4C           CZ   @FAC2             Must be numeric
[0941] C2E1 45,1C           BR   ERRSNM
[0942] C2E3 86,4A           CLR  @FAC
[0943] C2E5 35,00,07        MOVE 7,@FAC,@FAC1      Clear FAC
       C2E8 4B,4A
[0944]               ** GET PEEK VALUE FROM ERAM INTO  @FAC1
[0945]               * GKXB Change PEEK routine to read VDP/GRAM. Move CPU read
[0946]               *      code to PEEKDT and add code for bite check and VDP
[0947]               *      read.
[0948] C2EA DA,80,C2        CLOG >08,@GKFLAG       Check VDP bit
       C2ED 08
[0949] C2EE 66,75           BS   PKGRAM            No, check GROM bit
[0950] C2F0 BC,4B,B0        ST   V*PC,@FAC1        Yes, read VDP
       C2F3 04
[0951] C2F4 05,C2,F7        B    GC308
[0952] C2F7 0F,80    GC308  XML  CIF               Convert FAC to F.P. value
[0953] C2F9 0F,7C           XML  ASSGNV            Assign to numeric-variable
[0954] C2FB D6,42,B3        CEQ  COMMAZ,@CHAT
[0955] C2FE 43,05           BR   PEEK5
[0956] C300 91,04           DINC @PC               INC pointer to next ERAM addr
[0957] C302 05,C2,D7        B    PEEK2
[0958]               * CHECK FOR ")" AND END OF STATEMENT
[0959]               * IF ALL OK, THEN RETURN TO CALLER
[0960]               * GETCHR ALSO RETURNS TO HERE
[0961] C305 D6,42,B6 PEEK5  CEQ  RPARZ,@CHAT
[0962] C308 45,0C           BR   ERRSYN
[0963] C30A 0F,79           XML  PGMCHR            Skip ")"
[0964] C30C 06,6A,78        CALL CHKEND
[0965] C30F 45,0C           BR   ERRSYN
[0966] C311 06,00,12        CALL RETURN            RETURN TO CALLER
[0967]               ***********************************************************
[0968]               * LINK INSTRUCTION : SE Sep 1980
[0969]               ***********************************************************

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0017 
RXB 2022
[0970]               *  FORMAT:
[0971]               *  CALL LINK("file-name",parameter1,parameter2,...)
[0972]               *
[0973]               *  LINK ROUTINE READS THE FILE NAME SPECIFIED BY THE USER A
[0974]               *  SAVE THE ADDRESS OF THE NAME FOR LATER USE. THE FILE WIL
[0975]               *  BE SEARCHED IN UTILITY CODE LATER ON.
[0976]               *
[0977]               *  PARAMETERS ARE PASSED EITHER BY REFERENCE OR BY VALUE.
[0978]               *  NUMERIC OR STRING VARIABLES AND NUMERIC OR STRING ARRAYS
[0979]               *  ARE PASSED BY REFERENCE AND ALL OTHERS INCLUDING A USER
[0980]               *  DEFINED FUNCTION ARE PASSED BY VALUE.
[0981]               *
[0982]               *  PARAMETER INFORMATION IS STORED IN CPU >8300 THROUGH >83
[0983]               *  THAT GIVES A PARAMETER TYPE CODE OF EACH PARAMETER.
[0984]               *        CODE 0 ... Numeric expression
[0985]               *        CODE 1 ... String experession
[0986]               *        CODE 2 ... Numeric variable
[0987]               *        CODE 3 ... String variable
[0988]               *        CODE 4 ... Numeric array
[0989]               *        CODE 5 ... String array
[0990]               *
[0991]               *  IF A PARAMETER IS PASSED AS A NUMERIC EXPRESSION ITSL
[0992]               *  ACTUAL VALUE GETS PUSHED INTO THE VALUE STACK. IN CASE O
[0993]               *  A STRING EXPRESSION , ITS VALUE STACK CONTAINS AN ID(>65
[0994]               *  POINTER TO THE VALUE SPACE AND ITS LENGTH. IF A PARAMETE
[0995]               *  GETS PASSED AS A REFERENCE THE PRODUCT OF XML SYM AND XM
[0996]               *  SMB IN THE @FAC AREA GETS PUSHED INTO STACK.
[0997]               *
[0998]               *  AFTER AN ASSEMBLY LANGUAGE SUBPROGRAM IS EXECUTED LINK
[0999]               *  ROUTINE WILL POP THE STACK TO GET RID OF PARAMETER
[1000]               *  INFORMATION. CONTROL WILL BE TRANSFERED TO THE XB MAIN
[1001]               *  PROGRAM AFTERWARDS.
[1002]               *
[1003]               ***********************************************************
[1004]               * CALL LINK("PGNAME",numeric variable,...)                *
[1005]               ***********************************************************
[1006] C314 06,C1,E8 LINKIT CALL CHKIN             Check if INIT has been called
[1007] C317 BD,10,6E        DST  @VSPTR,@OLDS      Save VSPTR for later use
[1008] C31A D6,42,B7        CEQ  LPARZ,@CHAT       Check for "("
[1009] C31D 45,0C           BR   ERRSYN
[1010] C31F 0F,79           XML  PGMCHR            Advance program pointer
[1011] C321 0F,74           XML  PARSE             Get the routine name.
[1012] C323 B6              BYTE RPARZ           * Read up to ")"
[1013] C324 D6,4C,65        CEQ  >65,@FAC2         Should be a string
[1014] C327 45,73           BR   ERRBA
[1015] C329 8F,50           DCZ  @FAC6             Don't accept null string
[1016] C32B 65,73           BS   ERRBA
[1017] C32D C6,51,06        CH   6,@FAC7           Should be less then 6 char
[1018] C330 65,73           BS   ERRBA
[1019] C332 0F,77           XML  VPUSH             Push to make it semi-permanen
[1020] C334 86,12           CLR  @COUNT            Initialize parameter counter
[1021]               ***********************************************************
[1022]               * PARAMETERS get evaluated here
[1023]               ***********************************************************
[1024] C336 D6,42,B6 PAR01  CEQ  RPARZ,@CHAT       No arg. So execute it
[1025] C339 63,F4           BS   EXE01
[1026] C33B D6,42,B3        CEQ  COMMAZ,@CHAT      Should have a comma
[1027] C33E 45,0C           BR   ERRSYN
[1028] C340 BD,22,2C        DST  @PGMPTR,@ERRCOD   Save text pointer
[1029] C343 0F,79           XML  PGMCHR            Get the character
[1030] C345 CA,42,80        CHE  >80,@CHAT         Must be an expression
[1031] C348 63,B6           BS   VAL01
[1032]               * If CHAT = LPARZ then pass by expression
[1033] C34A 06,BF,FA        CALL CLRFAC            Clear FAC entry for SYM

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0018 
RXB 2022
[1034] C34D 0F,7A           XML  SYM               Read in the symbol table info
[1035]               * After XML SYM @FAC area contains a pointer to symbo table
[1036]               * Below statement checks if it is a UDF.
[1037] C34F DA,B0,4A        CLOG >40,V*FAC         Pass by value
       C352 40
[1038] C353 43,B6           BR   VAL01
[1039] C355 D6,42,B3        CEQ  COMMAZ,@CHAT      Pass by reference
[1040] C358 63,D4           BS   REF01
[1041] C35A D6,42,B6        CEQ  RPARZ,@CHAT       Pass by reference
[1042] C35D 63,D4           BS   REF01
[1043] C35F D6,42,B7        CEQ  LPARZ,@CHAT       An array
[1044] C362 63,6B           BS   ARRAY
[1045] C364 CA,42,80        CHE  >80,@CHAT         Pass by value
[1046] C367 63,B6           BS   VAL01
[1047] C369 45,0C           BR   ERRSYN
[1048]               ***********************************************************
[1049]               * ARRAY case gets checked here
[1050]               ***********************************************************
[1051]               * Should look like A(,,) etc.
[1052]               * Stack entry for an array will look like
[1053]               * +--------------+-------+---+-------------+---------------
[1054]               * | Pointer to   |  >00  |   | Pointer to  |
[1055]               * | symbol table |   or  |   | dim info in |
[1056]               * | entry        |  >65  |   | real v.s.   |
[1057]               * +- FAC --------+ FAC2 -+---+- FAC4 ------+- FAC6 --------
[1058]               *
[1059] C36B 0F,79    ARRAY  XML  PGMCHR            Get the next character
[1060] C36D D6,42,B6        CEQ  RPARZ,@CHAT       Pass by reference
[1061] C370 63,7E           BS   ARRAY2
[1062] C372 D6,42,B3        CEQ  COMMAZ,@CHAT      More array information
[1063] C375 63,6B           BS   ARRAY
[1064] C377 93,2C           DDEC @PGMPTR           Adjust the pointer
[1065] C379 BE,42,B7        ST   LPARZ,@CHAT
[1066] C37C 43,D4           BR   REF01             Pass by reference
[1067]               * In array cases the symbol table address gets stored at FA
[1068]               * area, and the pointer to the value space (dimension info)
[1069]               * goes into FAC4
[1070] C37E 0F,79    ARRAY2 XML  PGMCHR            Advance the program pointer
[1071] C380 DA,B0,4A        CLOG >80,V*FAC         Test string bit
       C383 80
[1072] C384 43,8C           BR   GC39D
[1073] C386 BE,90,12        ST   4,*COUNT          Numeric array
       C389 04
[1074] C38A 43,90           BR   GC3A1
[1075] C38C BE,90,12 GC39D  ST   5,*COUNT          String array case
       C38F 05
[1076]               * Check if array is being shared. If it is then go back
[1077]               * through the linkage to get the actuals symbol table
[1078]               * pointer. Put the pointer to the value space (dimension in
[1079]               * into FAC4.
[1080] C390 DA,B0,4A GC3A1  CLOG >20,V*FAC         Shared array?
       C393 20
[1081] C394 63,AD           BS   GC3BE
[1082] C396 35,00,02        MOVE 2,V@6(@FAC),@FAC4 If so, get pointer
       C399 4E,E0,06
       C39C 4A
[1083] C39D DA,EF,FF        CLOG >20,V@-6(@FAC4)   Shared also?
       C3A0 FA,4E,20
[1084] C3A3 63,AB           BS   GC3BC
[1085] C3A5 35,00,02        MOVE 2,V*FAC4,@FAC4    Array is not shared
       C3A8 4E,B0,4E
[1086] C3AB 43,B4    GC3BC  BR   GC3C5
[1087] C3AD BD,4E,4A GC3BE  DST  @FAC,@FAC4        Array is not shared
[1088] C3B0 A3,4E,00        DADD 6,@FAC4           Point to value space

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0019 
RXB 2022
       C3B3 06
[1089] C3B4 43,E9    GC3C5  BR   PUSH
[1090]               ***********************************************************
[1091]               * VALUE
[1092]               *  Passing the parameter by value
[1093]               ***********************************************************
[1094] C3B6 BD,2C,22 VAL01  DST  @ERRCOD,@PGMPTR   Restore program pointer
[1095] C3B9 0F,79           XML  PGMCHR            Skip the first character
[1096] C3BB BD,16,0C        DST  @BYTES,@TEMP      In case of passing a string
[1097] C3BE 0F,74           XML  PARSE             Parsing up to comma
[1098] C3C0 B6              BYTE RPARZ
[1099] C3C1 BD,0C,16        DST  @TEMP,@BYTES      Restore the value in >0C area
[1100]               * After parsing @FAC area contains its actual numeric value
[1101]               *  in a numeric case, and the following information in a
[1102]               *  string case.
[1103]               * +----------------+-----+--+------------+-----------------
[1104]               * | >001C  or      | >65 |  | Pointer to | Length of string
[1105]               * | value pointer  |     |  | string     | string
[1106]               * | address        |     |  |            |
[1107]               * +- FAC ----------+-FAC2+--+-FAC4 ------+- FAC6 ----------
[1108]               *
[1109] C3C4 CE,4C,63        CGT  >63,@FAC2         If more then 99 then
[1110] C3C7 43,CF           BR   GC3E0
[1111] C3C9 BE,90,12        ST   1,*COUNT          Store flag for string express
       C3CC 01
[1112] C3CD 43,D2           BR   GC3E3
[1113] C3CF 86,90,12 GC3E0  CLR  *COUNT            Otherwise it is a numeric exp
[1114] C3D2 43,E9    GC3E3  BR   PUSH              Push into stack
[1115]               ***********************************************************
[1116]               * REFERENCE
[1117]               *   Passing the parameter by reference
[1118]               ***********************************************************
[1119]               * Variables, array element and whole array passing.
[1120]               *
[1121]               * After SMB @FAC entry shold look like;
[1122]               * +--------------+------+-----+-------------+--------------
[1123]               * | Pointer to   | >00  |     | Pointer to  |
[1124]               * | symbol table |      |     | value space |
[1125]               * | entry        |      |     |             |
[1126]               * +-- FAC -------+ FAC2 +-----+- FAC4 ------+- FAC6 -------
[1127]               *  for numeric case, and
[1128]               * +--------------+------+-----+-------------+--------------
[1129]               * | Pointer to   | >65  |     | Pointer to  | String
[1130]               * | value space  |      |     | string      | length
[1131]               * | entry        |      |     |             |
[1132]               * +- FAC --------+ FAC2 +-----+- FAC4 ------+- FAC6 -------
[1133]               * for a string case.
[1134] C3D4 0F,7B    REF01  XML  SMB               Get the location
[1135] C3D6 CA,42,B8        CHE  >B8,@CHAT         Pass array expression
[1136] C3D9 63,B6           BS   VAL01
[1137] C3DB 8E,4C           CZ   @FAC2
[1138] C3DD 43,E5           BR   GC3F6
[1139] C3DF BE,90,12        ST   2,*COUNT          Must be a numeric variable
       C3E2 02
[1140] C3E3 43,E9           BR   PUSH
[1141] C3E5 BE,90,12 GC3F6  ST   3,*COUNT          Must be a string variable
       C3E8 03
[1142]               ***********************************************************
[1143]               * PUSH routine
[1144]               *  Pushes @FAC entry into a value stack.
[1145]               ***********************************************************
[1146] C3E9 90,12    PUSH   INC  @COUNT
[1147] C3EB CE,12,10        CGT  16,@COUNT         Too many parameters
[1148] C3EE 65,73           BS   ERRBA

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0020 
RXB 2022
[1149] C3F0 0F,77           XML  VPUSH
[1150] C3F2 43,36           BR   PAR01             Get the next argument.
[1151]               ***********************************************************
[1152]               * EXECUTE routine
[1153]               *  Restore file name info transfer control over to ALC
[1154]               ***********************************************************
[1155] C3F4 BE,4A,20 EXE01  ST   >20,@FAC          Store blank in the FAC area.
[1156] C3F7 35,00,05        MOVE 5,@FAC,@FAC1
       C3FA 4B,4A
[1157] C3FC 35,00,04        MOVE 4,V@12(@OLDS),@STORE   Get the file name info
       C3FF 14,E0,0C
       C402 10
[1158] C403 34,16,4A        MOVE @STORE+2,V*STORE,@FAC  Move to FAC
       C406 B0,14
[1159]               * RXB PATCH TO FIX CALL LINK SO RANDOM NUMBERS WORK RIGHT
[1160] C408 BF,80,C0        DST  >3567,@>83C0 Initialize random number generator
       C40B 35,67
[1161] C40D 87,22           DCLR @ERRCOD           Clear program pointer for
[1162]               *                              error code
[1163] C40F 0F,20           XML  ALSUP             Go to CPU at >2000 to execute
[1164] C411 64,A2           BS   ERROR             Error found
[1165]               *                             If no error, start checking s
[1166]               ***********************************************************
[1167]               * RETURN to the XB main program.
[1168]               ***********************************************************
[1169] C413 C5,6E,10 NOERR  DCH  @OLDS,@VSPTR      Pop the stack
[1170] C416 44,1D           BR   GC429
[1171] C418 0F,78           XML  VPOP              Pop the stack
[1172] C41A 05,C4,13        B    NOERR
[1173] C41D 05,A0,1C GC429  B    LNKRTN            Check ")" and end of statemen
[1174]               ***********************************************************
[1175]               * CHARPAT ROUTINE             99/4A - JDH 10/01/80
[1176]               ***********************************************************
[1177]               *
[1178]               * FORMAT:
[1179]               *  CALL CHARPAT(numeric-expression,string-variable,...)
[1180]               *
[1181]               *  FUNCTION:
[1182]               *   RETURNS THE CHARACTER DEFINITION PATTERN FOR CHARACTER
[1183]               *   NUMBER <numeric expression> INTO <string variable>
[1184]               *
[1185]               ******************* GETCHR - GETCHR2***********************
[1186] C420 06,BF,E0 GETCHR CALL COMB              Check for (?
[1187] C423 06,BF,F6 GCHR2  CALL SUBLP3  * Skip and parse value convert to INT
[1188] C426 D3,4A,00        DCGE 30,@FAC           30?
       C429 1E
[1189] C42A 45,7B           BR   ERRBV             ERROR BAD VALUE
[1190] C42C CF,4A,00        DCGT 159,@FAC          159?
       C42F 9F
[1191] C430 65,7B           BS   ERRBV             ERROR BAD VALUE
[1192] C432 E3,4A,00        DSLL 3,@FAC     * 8 bytes / entry so times 8 * FAC
       C435 03
[1193] C436 BF,10,03        DST  >0300,@TBLPTR    Base of char table less 32*8
       C439 00
[1194] C43A A1,10,4A        DADD @FAC,@TBLPTR     Add in arg offset
[1195] C43D BF,0C,00        DST  16,@BYTES        16 byte string in string space
       C440 10
[1196] C441 0F,71           XML  GETSTR           Get VDP string space
[1197] C443 BD,12,1C        DST  @SREF,@STRPTR    Save pointer to string
[1198] C446 BE,15,08        ST   8,@INDEXC        Loop counter
[1199] C449 BC,B0,12 GC46D  ST   V*TBLPTR,V*STRPTR
       C44C B0,10
[1200] C44E E6,B0,12        SRL  4,V*STRPTR       Get rid of low nibble
       C451 04

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0021 
RXB 2022
[1201] C452 A2,B0,12        ADD  >30,V*STRPTR     Add ASCII "0"
       C455 30
[1202] C456 CE,B0,12        CGT  >39,V*STRPTR     >39 = ASCII "9"
       C459 39
[1203] C45A 44,60           BR   GCHR3
[1204] C45C A2,B0,12        ADD  7,V*STRPTR       Value "A" to "F"
       C45F 07
[1205] C460 91,12    GCHR3  DINC @STRPTR
[1206] C462 BC,B0,12        ST   V*TBLPTR,V*STRPTR
       C465 B0,10
[1207] C467 B2,B0,12        AND  >0F,V*STRPTR
       C46A 0F
[1208] C46B A2,B0,12        ADD  >30,V*STRPTR     Add ASCII "0"
       C46E 30
[1209] C46F CE,B0,12        CGT  >39,V*STRPTR
       C472 39
[1210] C473 44,79           BR   GCHR4
[1211] C475 A2,B0,12        ADD  7,V*STRPTR       Value "A" to "F"
       C478 07
[1212] C479 91,10    GCHR4  DINC @TBLPTR          Character Table address
[1213] C47B 91,12           DINC @STRPTR          String Variable address
[1214] C47D 92,15           DEC  @INDEXC          String Variable counter
[1215] C47F 8E,15           CZ   @INDEXC          0?
[1216] C481 44,49           BR   GC46D            No, keep going
[1217]               * NOW assign the string just created to the string
[1218]               *  variable following
[1219] C483 0F,79           XML  PGMCHR            Skip comma
[1220]               * The following check has been put in SYM, 5/26/81
[1221]               * If CHAT >= >80 then ERRSYN (Do not allow token).
[1222]               * RXB PATCH CODE REPLACEMENT 
[1223]               *       XML  SYM  * Get symbol table info for next argument
[1224]               *       XML  SMB
[1225]               *       XML  VPUSH         Save on stack for ASSGNV
[1226]               * RXB REPLACE XB WITH RXB CALL SNDER
[1227] C485 06,BF,F0        CALL SNDER * Get symbol table info for next arguemen
[1228] C488 D6,4C,65        CEQ  STRING,@FAC2      Must be a stirng variable
[1229] C48B 45,1C           BR   ERRSNM            ERROR STRING NUMBER MISMATCH
[1230] C48D BF,4A,00        DST  >001C,@FAC        Temp string so use SREF as ad
       C490 1C
[1231] C491 BD,4E,1C        DST  @SREF,@FAC4       Pointer to string
[1232] C494 BF,50,00        DST  16,@FAC6          String length
       C497 10
[1233] C498 0F,7C           XML  ASSGNV            Assign to string variable
[1234] C49A D6,42,B3        CEQ  COMMAZ,@CHAT      Comma?
[1235] C49D 64,23           BS   GCHR2             Restart again
[1236] C49F 05,C3,05        B    PEEK5
[1237]               ***********************************************************
[1238]               ************** ERROR BRANCH TABLE FOR LINK ****************
[1239]               ***********************************************************
[1240] C4A2 8A,22    ERROR  CASE  @ERRCOD
[1241] C4A4 44,13           BR   NOERR
[1242] C4A6 44,13           BR   NOERR
[1243] C4A8 45,05           BR   ERRNO             2 Numeric Overflow
[1244] C4AA 45,0C           BR   ERRSYN            3 SYNtax error
[1245] C4AC 45,10           BR   ERRIBS            4 Illegal after subprogram
[1246] C4AE 45,14           BR   ERRNQS            5 unmatched quotes
[1247] C4B0 45,18           BR   ERRNTL            6 Name Too Long
[1248] C4B2 45,1C           BR   ERRSNM            7 String Number Mismatch
[1249] C4B4 45,20           BR   ERROBE            8 Option Base Error
[1250] C4B6 45,24           BR   ERRMUV            9 iMproperly Used name
[1251] C4B8 45,28           BR   ERRIM            10 IMage error
[1252] C4BA 45,2F           BR   ERRMEM           11 MEMory full
[1253] C4BC 45,33           BR   ERRSO            12 Stack Overflow
[1254] C4BE 45,37           BR   ERRNWF           13 Next Without For

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0022 
RXB 2022
[1255] C4C0 45,3B           BR   ERRFNN           14 For Next Nesting
[1256] C4C2 45,3F           BR   ERRSNS           15 must be in subprogram
[1257] C4C4 45,43           BR   ERRRSC           16 Recursive Subprogram Call
[1258] C4C6 45,47           BR   ERRMS            17 Missing Subend
[1259] C4C8 45,4B           BR   ERRRWG           18 Return Without Gosub
[1260] C4CA 45,4F           BR   ERRST            19 String Truncated
[1261] C4CC 45,53           BR   ERRBS            20 Bad Subscript
[1262] C4CE 45,57           BR   ERRSSL           21 Speech String too Long
[1263] C4D0 45,5B           BR   ERRLNF           22 Line Not Found
[1264] C4D2 45,5F           BR   ERRBLN           23 Bad Line Number
[1265] C4D4 45,63           BR   ERRLTL           24 Line Too Long
[1266] C4D6 45,67           BR   ERRCC            25 Can't Continue
[1267] C4D8 45,6B           BR   ERRCIP           26 Command Illegal in Program
[1268] C4DA 45,6F           BR   ERROLP           27 Only Legal in a Program
[1269] C4DC 45,73           BR   ERRBA            28 Bad Argument
[1270] C4DE 45,77           BR   ERRNPP           29 No Program Present
[1271] C4E0 45,7B           BR   ERRBV            30 Bad Value
[1272] C4E2 45,7F           BR   ERRIAL           31 Incorrect Argument List
[1273] C4E4 45,83           BR   ERRINP           32 INPut error
[1274] C4E6 45,8A           BR   ERRDAT           33 DATa error
[1275] C4E8 45,8E           BR   ERRFE            34 File Error
[1276] C4EA 44,13           BR   NOERR
[1277] C4EC 45,92           BR   ERRIO            36 I/O error
[1278] C4EE 45,96           BR   ERRSNF           37 Subprogram Not Found
[1279] C4F0 44,13           BR   NOERR
[1280] C4F2 45,9A           BR   ERRPV            39 Protected Violation
[1281] C4F4 45,A1           BR   ERRIVN           40 unrecognized Character
[1282] C4F6 45,A5           BR   WRNNO            41 Numeric Number Overflow
[1283] C4F8 45,AB           BR   WRNST            42 String Truncated
[1284] C4FA 45,B1           BR   WRNNPP           43 No Program Present
[1285] C4FC 45,B7           BR   WRNINP           44 INPut error
[1286] C4FE 45,BD           BR   WRNIO            45 I/O error
[1287] C500 45,C3           BR   WRNLNF           46 Line Not Found
[1288]               ***********************************************************
[1289]               **************** ERROR HANDLING SECTION *******************
[1290]               ***********************************************************
[1291] C502 06,C2,95 ERRN01 CALL CLSNOE            * ENTRY FOR LOAD
[1292] C505 06,6A,84 ERRNO  CALL ERRZZ             * Numeric Overflow
[1293] C508 02              BYTE 2
[1294] C509 06,C2,95 ERRSY1 CALL CLSNOE            * ENTRY FOR LOAD
[1295] C50C 06,6A,84 ERRSYN CALL ERRZZ             * SYNtax error
[1296] C50F 03              BYTE 3
[1297] C510 06,6A,84 ERRIBS CALL ERRZZ             * Illegal after subprogram
[1298] C513 04              BYTE 4
[1299] C514 06,6A,84 ERRNQS CALL ERRZZ             * uNmatched QuoteS
[1300] C517 05              BYTE 5
[1301] C518 06,6A,84 ERRNTL CALL ERRZZ             * Name Too Long
[1302] C51B 06              BYTE 6
[1303] C51C 06,6A,84 ERRSNM CALL ERRZZ             * String Number Mismatch
[1304] C51F 07              BYTE 7
[1305] C520 06,6A,84 ERROBE CALL ERRZZ             * Option Base Error
[1306] C523 08              BYTE 8
[1307] C524 06,6A,84 ERRMUV CALL ERRZZ             * Improperly used name
[1308] C527 09              BYTE 9
[1309] C528 06,6A,84 ERRIM  CALL ERRZZ             * Image Error
[1310] C52B 0A              BYTE 10
[1311] C52C 06,C2,95 ERRMF1 CALL CLSNOE            * ENTRY FOR LOAD
[1312] C52F 06,6A,84 ERRMEM CALL ERRZZ             * MEMory full
[1313] C532 0B              BYTE 11
[1314] C533 06,6A,84 ERRSO  CALL ERRZZ             * Stack Overflow
[1315] C536 0C              BYTE 12
[1316] C537 06,6A,84 ERRNWF CALL ERRZZ             * Next Without For
[1317] C53A 0D              BYTE 13
[1318] C53B 06,6A,84 ERRFNN CALL ERRZZ             * For-Next Nesting

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0023 
RXB 2022
[1319] C53E 0E              BYTE 14
[1320] C53F 06,6A,84 ERRSNS CALL ERRZZ             * must be in subprogram
[1321] C542 0F              BYTE 15
[1322] C543 06,6A,84 ERRRSC CALL ERRZZ             * Recursive Subprogram Call
[1323] C546 10              BYTE 16
[1324] C547 06,6A,84 ERRMS  CALL ERRZZ             * Missing Subend
[1325] C54A 11              BYTE 17
[1326] C54B 06,6A,84 ERRRWG CALL ERRZZ             * Return Without Gosub
[1327] C54E 12              BYTE 18
[1328] C54F 06,6A,84 ERRST  CALL ERRZZ             * String Truncated
[1329] C552 13              BYTE 19
[1330] C553 06,6A,84 ERRBS  CALL ERRZZ             * Bad Subscript
[1331] C556 14              BYTE 20
[1332] C557 06,6A,84 ERRSSL CALL ERRZZ             * Speech String too Long
[1333] C55A 15              BYTE 21
[1334] C55B 06,6A,84 ERRLNF CALL ERRZZ             * Line Not Found
[1335] C55E 16              BYTE 22
[1336] C55F 06,6A,84 ERRBLN CALL ERRZZ             * Bad Line Number
[1337] C562 17              BYTE 23
[1338] C563 06,6A,84 ERRLTL CALL ERRZZ             * Line Too Long
[1339] C566 18              BYTE 24
[1340] C567 06,6A,84 ERRCC  CALL ERRZZ             * Can't Continue
[1341] C56A 19              BYTE 25
[1342] C56B 06,6A,84 ERRCIP CALL ERRZZ             * Command Illegal in Program
[1343] C56E 1A              BYTE 26
[1344] C56F 06,6A,84 ERROLP CALL ERRZZ             * Only Legal in a Program
[1345] C572 1B              BYTE 27
[1346] C573 06,6A,84 ERRBA  CALL ERRZZ             * Bad Argument
[1347] C576 1C              BYTE 28
[1348] C577 06,6A,84 ERRNPP CALL ERRZZ             * No Program Present
[1349] C57A 1D              BYTE 29
[1350] C57B 06,6A,84 ERRBV  CALL ERRZZ             * Bad Value
[1351] C57E 1E              BYTE 30
[1352] C57F 06,6A,84 ERRIAL CALL ERRZZ             * Incorrect Argument List
[1353] C582 1F              BYTE 31
[1354] C583 06,6A,84 ERRINP CALL ERRZZ             * INPut error
[1355] C586 29              BYTE 41
[1356] C587 06,C2,95 ERRDE1 CALL CLSNOE            * ENTRY FOR LOAD
[1357] C58A 06,6A,84 ERRDAT CALL ERRZZ             * DATa error / Checksum error
[1358] C58D 21              BYTE 33
[1359] C58E 06,6A,84 ERRFE  CALL ERRZZ             * File Error
[1360] C591 22              BYTE 34
[1361] C592 06,6A,84 ERRIO  CALL ERRZZ             * I/O error
[1362] C595 24              BYTE 36
[1363] C596 06,6A,84 ERRSNF CALL ERRZZ             * Subprogram Not Found
[1364] C599 25              BYTE 37
[1365] C59A 06,6A,84 ERRPV  CALL ERRZZ             * Protection Violation
[1366] C59D 27              BYTE 39
[1367] C59E 06,C2,95 ERRUC1 CALL CLSNOE            * ENTRY FOR LOAD
[1368] C5A1 06,6A,84 ERRIVN CALL ERRZZ             * Unrecognized character / il
[1369] C5A4 28              BYTE 40
[1370] C5A5 06,6A,82 WRNNO  CALL WARNZZ            * Numeric Overflow
[1371] C5A8 02              BYTE 2
[1372] C5A9 44,13           BR   NOERR
[1373] C5AB 06,6A,82 WRNST  CALL WARNZZ            * String Truncated
[1374] C5AE 13              BYTE 19
[1375] C5AF 44,13           BR   NOERR
[1376] C5B1 06,6A,82 WRNNPP CALL WARNZZ            * No Program Present
[1377] C5B4 1D              BYTE 29
[1378] C5B5 44,13           BR   NOERR
[1379] C5B7 06,6A,82 WRNINP CALL WARNZZ            * INPut Error
[1380] C5BA 20              BYTE 32
[1381] C5BB 44,13           BR   NOERR
[1382] C5BD 06,6A,82 WRNIO  CALL WARNZZ            * I/O error

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0024 
RXB 2022
[1383] C5C0 23              BYTE 35
[1384] C5C1 44,13           BR   NOERR
[1385] C5C3 06,6A,82 WRNLNF CALL WARNZZ            * Line Not Found
[1386] C5C6 26              BYTE 38
[1387] C5C7 44,13           BR   NOERR
[1388]               ***********************************************************
[1389]               * RXB COPY OF CHKEND FROM GROM 4 FOR CALL INIT ERROR
[1390]               ***********************************************************
[1391]               * If it's no DISPLAY keyword ( AT, SIZE, BEEP or USING) it
[1392]               * has to be a print separator or colon ":"
[1393]               * If anything is specified is has to be a colon or end of
[1394]               * line... for end-of-line output current record
[1395]               * Check for end of statement
[1396] C5C9 DA,42,80 ENDCHK CLOG >80,@CHAT
[1397] C5CC 65,D3           BS   ECSET
[1398] C5CE CA,42,84        CHE  TREMZ+1,@CHAT
[1399] C5D1 45,D6           BR   ECSET2
[1400] C5D3 8E,42    ECSET  CZ   @CHAT         Set COND according to CHAT
[1401] C5D5 01              RTNC
[1402] C5D6 D4,00,00 ECSET2 CEQ  @>8300,@>8300     Force COND to "SET"
[1403] C5D9 01              RTNC                   Exit with no COND change
[1404]               **************************
[1405] C5DA 06,C5,C9 ECRTN  CALL ENDCHK        Use this CHKEND instead
[1406] C5DD 06,00,12        CALL RETURN
[1407]               ***********************************************************
[1408]               * Set-up for CALL GKLOAD routine
[1409]               *
[1410] C5E0 B2,80,C2 GKLOAD AND  >F0,@GKFLAG  Reset flag bits
       C5E3 F0
[1411] C5E4 00              RTN               Return
[1412]              
[1413]              
[1414]               ***********************************************************
[1415]               * CALL POKEV(VDP address,numeric variable,...)            *
[1416]               ***********************************************************
[1417] C5E5 C6,10    POKEV  DATA PEEKV
[1418] C5E7 05,50,4F        STRI 'POKEV'
       C5EA 4B,45,56
[1419] C5ED C5,EF           DATA POV
[1420] C5EF 06,C6,20 POV    CALL GKSETV       Set VDP bit
[1421] C5F2 BF,02,00        DST  1,@CHKSUM    For GKLOAD routine
       C5F5 01
[1422] C5F6 05,C0,47        B    LPD0         Goto GKLOAD
[1423]               ***********************************************************
[1424]               * Check for CALL GKINIT on 'LOAD FILE'
[1425]               *
[1426] C5F9 0F,77    GKINIT XML  VPUSH        Save FAC
[1427] C5FB 06,C1,E8        CALL CHKIN        Check for GKINIT
[1428] C5FE 0F,78           XML  VPOP         Restore FAC
[1429] C600 DA,80,C2        CLOG >C,@GKFLAG   Error if POKEG or POKEV
       C603 0C
[1430] C604 45,0C           BR   ERRSYN
[1431] C606 05,C2,16        B    OPENIT       Open the file
[1432]               *
[1433]               * New entry point for CALL PEEK,
[1434]               * clears flag bits.
[1435]               *
[1436] C609 B2,80,C2 GKPEEK AND  >F0,@GKFLAG
       C60C F0
[1437] C60D 05,C2,B9        B    PEEK
[1438]               ***********************************************************
[1439]               * CALL PEEKV(VDP address,numeric variable,...)            *
[1440]               ***********************************************************
[1441] C610 C6,32    PEEKV  DATA PEEKG

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0025 
RXB 2022
[1442] C612 05,50,45        STRI 'PEEKV'
       C615 45,4B,56
[1443] C618 C6,1A           DATA PKV
[1444] C61A 06,C6,20 PKV    CALL GKSETV       Set VDP bit
[1445] C61D 05,C2,B9        B    PEEK         Use PEEK routine
[1446]               ***********************************************************
[1447]               * Set flag bit for VDP read & write
[1448]               *
[1449] C620 B2,80,C2 GKSETV AND  >F0,@GKFLAG  Reset both bits
       C623 F0
[1450] C624 B6,80,C2        OR   8,@GKFLAG    Set VDP bit
       C627 08
[1451] C628 00              RTN               Return
[1452]               *
[1453]               * Set flag bit for GROM read & write
[1454]               *
[1455] C629 B2,80,C2 GKSETG AND  >F0,@GKFLAG  Reset both bits
       C62C F0
[1456] C62D B6,80,C2        OR   4,@GKFLAG    Set GROM bit
       C630 04
[1457] C631 00              RTN               Return
[1458]               ***********************************************************
[1459]               * CALL PEEKG(GROM address,numeric variable,...)           *
[1460]               ***********************************************************
[1461] C632 C6,42    PEEKG  DATA POKEG
[1462] C634 05,50,45        STRI 'PEEKG'
       C637 45,4B,47
[1463] C63A C6,3C           DATA PKG
[1464] C63C 06,C6,29 PKG    CALL GKSETG       Set flag bit
[1465] C63F 05,C2,B9        B    PEEK         Use PEEK routine
[1466]               ***********************************************************
[1467]               * CALL POKEG(GROM address,numeric variable,...)           *
[1468]               ***********************************************************
[1469] C642 C6,A0    POKEG  DATA CATLOG
[1470] C644 05,50,4F        STRI 'POKEG'
       C647 4B,45,47
[1471] C64A C6,4C           DATA POG
[1472] C64C 06,C6,29 POG    CALL GKSETG       Set flag bit
[1473] C64F BF,02,00        DST  1,@CHKSUM    For LOAD routine
       C652 01
[1474] C653 05,C0,47        B    LPD0         Use LOAD routine
[1475]               ***********************************************************
[1476]               * Routine to write to GRAM
[1477]               *
[1478] C656 DA,80,C2 LDGRAM CLOG 4,@GKFLAG    Check GROM bit
       C659 04
[1479] C65A 66,68           BS   LOADDT       No, CPU load
[1480] C65C 2D,00,01        MOVE 1,@FAC1,G@0(@PC) Write to GRAM
       C65F 00,00,04
       C662 4B
[1481] C663 91,04           DINC @PC          Point to next byte
[1482] C665 05,C0,60        B    LDP4         Continue
[1483]               *
[1484]               * Relocated data from GKLOAD routine.
[1485]               *
[1486] C668 35,00,01 LOADDT MOVE 1,@FAC1,@0(@PC)   Read byte
       C66B CF,7D,00
       C66E 04,4B
[1487] C670 91,04           DINC @PC                INC ERAM address
[1488] C672 05,C0,60        B    LDP4              Continue with next byte
[1489]               *
[1490]               * Routine to read GRAM/GROM
[1491]               *
[1492] C675 DA,80,C2 PKGRAM CLOG 4,@GKFLAG    Check flag

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0026 
RXB 2022
       C678 04
[1493] C679 66,85           BS   PEEKDT       No, CPU peek
[1494] C67B 33,00,01        MOVE 1,G@0(@PC),@FAC1 Yes, read GRAM
       C67E 4B,00,00
       C681 04
[1495] C682 05,C2,F7        B    GC308        Continue
[1496]               *
[1497]               * Relocated data for CPU PEEK
[1498]               *
[1499] C685 35,00,01 PEEKDT MOVE 1,@0(@PC),@FAC1        Read byte
       C688 4B,CF,7D
       C68B 00,04
[1500] C68D 05,C2,F7        B    GC308              Continue
[1501]               ***********************************************************
[1502] C690 00,10,18 DARROW DATA  >0010,>18FC,>1810,>0000 * RIGHT ARROW
       C693 FC,18,10
       C696 00,00
[1503] C698 00,20,60        DATA  >0020,>60FC,>6020,>0000 * LEFT ARROW
       C69B FC,60,20
       C69E 00,00
[1504]               ***********************************************************
[1505]               *
[1506]               * CALL CAT(pathname)                                      *
[1507]               ***********************************************************
[1508] C6A0 C6,A8    CATLOG DATA DIRECT
[1509] C6A2 03,43,41        STRI 'CAT'             CALL CAT(path)
       C6A5 54
[1510] C6A6 C6,B0           DATA GKCAT
[1511]               ***********************************************************
[1512]               * CALL DIR(pathname)                                      *
[1513]               ***********************************************************
[1514] C6A8 C9,6F    DIRECT DATA SAMS                                      
[1515] C6AA 03,44,49        STRI 'DIR'             
       C6AD 52
[1516] C6AE C6,B0           DATA GKCAT
[1517]               *
[1518]               *
[1519]               *  X-BASIC DEVICE CATALOGER
[1520]               *  Accessed with a CALL
[1521]               *  PAB is installed in crunch buffer area
[1522]               *
[1523]               *  D.C. Warren 12/17/85
[1524]               *  with modifications by Danny Michael, Jan. 86
[1525]               *
[1526]               *
[1527] C6B0 06,BF,E0 GKCAT  CALL COMB              Do we have a '(' ?
[1528] C6B3 06,C9,18 GKCATA CALL DSKNAM            Get path
[1529]               *
[1530]               * Set up PAB at V>8C0
[1531]               *  Put disk information on the screen
[1532]               *
[1533] C6B6 07,80           ALL  >80                 Clear screen
[1534] C6B8 BD,16,50        DST  @FAC6,@VARB         Get name length
[1535] C6BB BF,0C,00        DST  160,@BYTES          Length of CAT PAB use
       C6BE A0
[1536] C6BF 0F,71           XML  GETSTR              Get some string space
[1537] C6C1 35,00,A0        MOVE 160,V@RECBUF,V*SREF Save USER PAB area
       C6C4 B0,1C,A8
       C6C7 C0
[1538] C6C8 31,00,09        MOVE 9,G@GKPABD,V@RECBUF Install PAB
       C6CB A8,C0,C7
       C6CE 49
[1539] C6CF BC,A8,C9        ST   @FAC7,V@>08C9       Save Length 
       C6D2 51

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0027 
RXB 2022
[1540] C6D3 34,16,A8        MOVE @VARB,V*FAC4,V@>08CA Get PATH
       C6D6 CA,B0,4E
[1541]               *
[1542]               * Open Device
[1543]               *
[1544] C6D9 06,C7,34        CALL GKDSRL            Link to device
[1545]               *
[1546]               * Read first record
[1547]               *
[1548] C6DC BF,A8,C0        DST  >020D,V@RECBUF    Make PAB a read
       C6DF 02,0D
[1549] C6E1 06,C7,34 GKCAT2 CALL GKDSRL            Link to device
[1550]               *
[1551] C6E4 BE,02,B9        ST   >B9,@PAD2         Y with offset
[1552] C6E7 06,C7,52        CALL GKSCRN            Set up header
[1553] C6EA 86,01           CLR  @PAD1             For GKSCRL routine
[1554] C6EC 06,C7,B9 GKCATL CALL GKTKEY            Check for pause or quit
[1555] C6EF 66,FE           BS   GKDONE            Stop!
[1556] C6F1 06,C7,CF        CALL GKSCRL            Scroll the screen
[1557] C6F4 06,C7,34        CALL GKDSRL            Read a record
[1558] C6F7 06,C7,F2        CALL GKFNAM            Print it on screen
[1559] C6FA 66,FE           BS   GKDONE            If finished
[1560] C6FC 46,EC           BR   GKCATL            Loop
[1561] C6FE 06,C7,24 GKDONE CALL GKCLSF            Close file
[1562] C701 D6,42,B3        CEQ  COMMAZ,@CHAT      Comma?
[1563] C704 66,B3           BS   GKCATA            Yes, another drive.
[1564] C706 D6,42,B6        CEQ  RPARZ,@CHAT       Last char a ) ?
[1565] C709 45,0C           BR   ERRSYN            No, error
[1566] C70B 0F,79           XML  PGMCHR            Parse past ')'
[1567] C70D 06,6A,78        CALL CHKEND            SYNTAX error if not end
[1568] C710 45,0C           BR   ERRSYN               .
[1569] C712 06,00,12        CALL RETURN            Return to X-BASIC
[1570]               *
[1571]               * File error
[1572]               *
[1573] C715 BF,04,08 GKERR  DST  RECBUF-4,@PABPTR  Fake a BASIC PAB
       C718 BC
[1574] C719 BD,10,A8        DST  V@RECBUF,@VAR5    Save error
       C71C C0
[1575] C71D 06,C7,24        CALL GKCLSF            Close file
[1576] C720 06,6D,78        CALL G6D78             Return through ERR
[1577] C723 24              BYTE 36 *              I/O ERROR XX
[1578]               *
[1579]               *
[1580]               * Subroutines
[1581]               *
[1582]               *
[1583]               * Close file
[1584]               *
[1585] C724 BF,A8,C0 GKCLSF DST  >010D,V@RECBUF    A close operation
       C727 01,0D
[1586] C729 06,C7,40        CALL GKDSR              Link to device
[1587] C72C 35,00,97        MOVE 151,V*SREF,V@RECBUF Restore USER PAB area
       C72F A8,C0,B0
       C732 1C
[1588] C733 00              RTN                     Return to caller
[1589]               *
[1590]               * DSR LINK with error handling
[1591]               *
[1592] C734 06,C7,40 GKDSRL CALL GKDSR
[1593] C737 67,15           BS   GKERR             Branch on no-device
[1594] C739 D6,A8,C1        CEQ  >0D,V@>08C1       Check for device errors
       C73C 0D
[1595] C73D 47,15           BR   GKERR                .

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0028 
RXB 2022
[1596] C73F 00              RTN                    Return to caller
[1597]               *
[1598]               * DSR LINK routine
[1599]               *
[1600] C740 BF,56,08 GKDSR  DST  >08C9,@FAC12      Name length pointer
       C743 C9
[1601] C744 06,00,10        CALL >10               Call DSR
[1602] C747 08              BYTE 8 *               DSR call
[1603] C748 01              RTNC                   Return with COND bit
[1604] C749 00,0D,09 GKPABD BYTE 0,>D,9,0,0,0,0,0,0
       C74C 00,00,00
       C74F 00,00,00
[1605]               *
[1606]               * Screen - prints initial screen and disk info
[1607]               *
[1608] C752 08       GKSCRN FMT
[1609] C753 FC,60            SCRO >60
[1610] C755 FE,01            ROW  1
[1611] C757 FF,02            COL  2
[1612] C759 0A,44,49         HTEX 'DIRECTORY =' 
       C75C 52,45,43
       C75F 54,4F,52
       C762 59,20,3D
[1613] C765 A0               ROW+ 1
[1614] C766 FF,03            COL  3
[1615] C768 1B,46,69         HTEX 'Filename  Size    Type     P'
       C76B 6C,65,6E
       C76E 61,6D,65
       C771 20,20,53
       C774 69,7A,65
       C777 20,20,20
       C77A 20,54,79
       C77D 70,65,20
       C780 20,20,20
       C783 20,50
[1616] C785 A0               ROW+ 1
[1617] C786 FF,02            COL 2
[1618] C788 1C,2D,2D         HTEX '---------- ---- ----------- -'
       C78B 2D,2D,2D
       C78E 2D,2D,2D
       C791 2D,2D,20
       C794 2D,2D,2D
       C797 2D,20,2D
       C79A 2D,2D,2D
       C79D 2D,2D,2D
       C7A0 2D,2D,2D
       C7A3 2D,20,2D
[1619] C7A6 FB              FEND
[1620] C7A7 06,C8,DF        CALL GKDSTR       Get path $ into FAC
[1621] C7AA 8E,4B           CZ   @FAC+1       Skip if zero length
[1622] C7AC 67,B8           BS   GKCAT3
[1623] C7AE 08              FMT
[1624] C7AF FC,60            SCRO >60
[1625] C7B1 FE,01            ROW 1
[1626] C7B3 FF,0E            COL 14
[1627] C7B5 E9,4C            HSTR 10,@FAC+2
[1628] C7B7 FB              FEND
[1629] C7B8 00       GKCAT3 RTN               Return
[1630]               *
[1631]               * Test for space and FCTN 4
[1632]               *
[1633] C7B9 03       GKTKEY SCAN              Scan the keyboard
[1634] C7BA 47,C9           BR   GKTKE1       Continue if no new key
[1635] C7BC D6,75,20        CEQ  SPACE,@RKEY  SPACE key?

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0029 
RXB 2022
[1636] C7BF 47,CA           BR   GKTKE2       NO! Abort.
[1637] C7C1 03       GKTKE3 SCAN              Scan keyboard
[1638] C7C2 47,C1           BR   GKTKE3       Loop until new key press
[1639] C7C4 D6,75,20        CEQ  SPACE,@RKEY  SPACE key?
[1640] C7C7 47,CA           BR   GKTKE2       NO! Abort.
[1641] C7C9 00       GKTKE1 RTN               Return
[1642] C7CA 86,00    GKTKE2 CLR  @PAD         Clear a byte
[1643] C7CC 8E,00           CZ   @PAD         Set COND bit
[1644] C7CE 01              RTNC              Return w/COND
[1645]               *
[1646]               * Scroll the screen
[1647]               *
[1648] C7CF C6,01,13 GKSCRL CH   19,@PAD1           Check line counter
[1649] C7D2 67,E9           BS   GKSCL1             Short scroll
[1650] C7D4 90,01           INC  @PAD1              Line count +1
[1651] C7D6 35,02,80        MOVE >280,V@>A0,V@>80   Scroll screen
       C7D9 A0,80,A0
       C7DC A0
[1652] C7DD BE,A2,E0 GKSCL2 ST   SPACE+OFFSET,V@>2E0 Clear last line
       C7E0 80
[1653] C7E1 35,00,1F        MOVE >1F,V@>2E0,V@>2E1
       C7E4 A2,E1,A2
       C7E7 E0
[1654] C7E8 00              RTN                     Return
[1655] C7E9 35,02,60 GKSCL1 MOVE >260,V@>A0,V@>80
       C7EC A0,80,A0
       C7EF A0
[1656] C7F0 47,DD           BR   GKSCL2
[1657]               *
[1658]               * Display one file on screen
[1659]               *
[1660] C7F2 06,C8,DF GKFNAM CALL GKDSTR       Get string into FAC
[1661] C7F5 8E,4B           CZ   @FAC+1       Skip display if zero
[1662] C7F7 68,03           BS   GKCAT5        length
[1663] C7F9 08              FMT
[1664] C7FA FC,60            SCRO >60         Put disk name on screen
[1665] C7FC FE,17            ROW   23            .
[1666] C7FE FF,02            COL   02            .
[1667] C800 E9,4C            HSTR 10,@FAC+2      .
[1668] C802 FB              FEND                 .
[1669] C803 A1,10,4A GKCAT5 DADD @FAC,@VAR5   Go to next field
[1670] C806 A3,10,00        DADD 10,@VAR5     Continue another field
       C809 0A
[1671] C80A 8F,B0,10        DCZ  V*VAR5       Time to get out if
[1672] C80D 68,B4           BS   GKFNA1        zero file size
[1673] C80F BF,14,02        DST  >02EA,@VAR9  Set up screen address
       C812 EA
[1674] C813 06,C8,B9        CALL GKDNUM       Display file length
[1675] C816 A7,10,00        DSUB 9,@VAR5      Back a field
       C819 09
[1676] C81A 35,00,08        MOVE 8,V*VAR5,@FAC Move it into FAC
       C81D 4A,B0,10
[1677] C820 0F,12           XML  CFI          Convert it to an int.
[1678] C822 8E,4A           CZ   @FAC         Non-negative?
[1679] C824 68,2C           BS   GKCAT7       YES! File not protected
[1680] C826 BE,A2,FE        ST   185,V@>02FE   Put a 'Y' on screen
       C829 B9
[1681] C82A 83,4A           DNEG @FAC         Make number positive
[1682] C82C 92,4B    GKCAT7 DEC  @FAC+1       Adjust for CASE
[1683] C82E 8A,4B           CASE @FAC+1       Show file type
[1684] C830 48,3C           BR   GKDF
[1685] C832 48,4E           BR   GKDV
[1686] C834 48,60           BR   GKIF
[1687] C836 48,72           BR   GKIV

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0030 
RXB 2022
[1688] C838 48,84           BR   GKPR
[1689] C83A 48,95           BR   GKDIR
[1690] C83C 08       GKDF   FMT
[1691] C83D FC,60            SCRO >60
[1692] C83F FE,17            ROW   23
[1693] C841 FF,12            COL   18
[1694] C843 06,44,69         HTEX 'Dis/Fix'
       C846 73,2F,46
       C849 69,78
[1695] C84B FB              FEND
[1696] C84C 48,A8           BR   GKCAT6
[1697] C84E 08       GKDV   FMT
[1698] C84F FC,60            SCRO >60
[1699] C851 FE,17            ROW   23
[1700] C853 FF,12            COL   18
[1701] C855 06,44,69         HTEX 'Dis/Var'
       C858 73,2F,56
       C85B 61,72
[1702] C85D FB              FEND
[1703] C85E 48,A8           BR   GKCAT6
[1704] C860 08       GKIF   FMT
[1705] C861 FC,60            SCRO >60
[1706] C863 FE,17            ROW   23
[1707] C865 FF,12            COL   18
[1708] C867 06,49,6E         HTEX 'Int/Fix'
       C86A 74,2F,46
       C86D 69,78
[1709] C86F FB              FEND
[1710] C870 48,A8           BR   GKCAT6
[1711] C872 08       GKIV   FMT
[1712] C873 FC,60            SCRO >60
[1713] C875 FE,17            ROW   23
[1714] C877 FF,12            COL   18
[1715] C879 06,49,6E         HTEX 'Int/Var'
       C87C 74,2F,56
       C87F 61,72
[1716] C881 FB              FEND
[1717] C882 48,A8           BR   GKCAT6
[1718] C884 08       GKPR   FMT
[1719] C885 FC,60            SCRO >60
[1720] C887 FE,17            ROW   23
[1721] C889 FF,12            COL   18
[1722] C88B 06,50,72         HTEX 'Program'
       C88E 6F,67,72
       C891 61,6D
[1723] C893 FB              FEND
[1724] C894 00              RTN
[1725] C895 08       GKDIR  FMT
[1726] C896 FC,60           SCRO  >60
[1727] C898 FE,17           ROW   23
[1728] C89A FF,12           COL   18
[1729] C89C 08,44,69        HTEX  'Directory'
       C89F 72,65,63
       C8A2 74,6F,72
       C8A5 79
[1730] C8A6 FB              FEND
[1731] C8A7 00              RTN               Return
[1732] C8A8 A3,10,00 GKCAT6 DADD 18,@VAR5     Advavce two fields
       C8AB 12
[1733] C8AC BF,14,02        DST  >02F6,@VAR9  Set up screen address
       C8AF F6
[1734] C8B0 06,C8,B9        CALL GKDNUM       Display record length
[1735] C8B3 00              RTN               Return
[1736] C8B4 86,00    GKFNA1 CLR  @PAD         Clear a byte

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0031 
RXB 2022
[1737] C8B6 8E,00           CZ   @PAD         Set COND bit
[1738] C8B8 01              RTNC              Return w/COND
[1739]               * Display number subroutine
[1740]               *  ENTER: Floating number in FAC for GKDNU1
[1741]               *         Screen address in VAR9
[1742]               *
[1743] C8B9 35,00,08 GKDNUM MOVE 8,V*VAR5,@FAC Move FLP number to FAC
       C8BC 4A,B0,10
[1744]                
[1745] C8BF 86,55    GKDNU1 CLR  @FAC+11      Indicate a free format
[1746] C8C1 0F,73           XML  XBCNS        Convert FAC to a string
[1747] C8C3 BF,16,00        DST  7,@VARB      Right justify number
       C8C6 07
[1748] C8C7 A4,17,56        SUB  @FAC+12,@VARB+1
[1749] C8CA A1,14,16        DADD @VARB,@VAR9
[1750] C8CD A2,90,55 GKDNU2 ADD  >60,*FAC+11     Add offset to string
       C8D0 60
[1751] C8D1 BC,B0,14        ST   *FAC+11,V*VAR9  Put a char on the screen
       C8D4 90,55
[1752] C8D6 91,14           DINC @VAR9           Increment screen addr.
[1753] C8D8 90,55           INC  @FAC+11         Increment FAC addr.
[1754] C8DA 92,56           DEC  @FAC+12         Decrement string length count
[1755] C8DC 48,CD           BR   GKDNU2          Loop until done
[1756] C8DE 00              RTN                  Return to caller
[1757]               *
[1758]               * Prepare a VDP string for FORMAT statement
[1759]               *  LEAVE: FAC has string length (word)
[1760]               *         FAC+2 has string
[1761]               *         VAR5 pointing to next string in record
[1762]               *
[1763] C8DF BF,10,09 GKDSTR DST  >0900,@VAR5   Get buffer address
       C8E2 00
[1764] C8E3 86,4A           CLR  @FAC          Clear MSB of FAC word
[1765] C8E5 BC,4B,B0        ST   V*VAR5,@FAC+1 Store disk name length
       C8E8 10
[1766] C8E9 91,10           DINC @VAR5         Point to string
[1767] C8EB BE,4C,20        ST   >20,@FAC+2    Clear out string space
[1768] C8EE 35,00,09        MOVE 9,@FAC+2,@FAC+3  .
       C8F1 4D,4C
[1769] C8F3 34,4A,4C        MOVE @FAC,V*VAR5,@FAC+2 Move disk name into FAC
       C8F6 B0,10
[1770] C8F8 00              RTN
[1771]               ***********************************************************
[1772] C8F9 88,5A    DSKDSR FETCH @FAC16           * Get Length of name
[1773] C8FB 88,5B           FETCH @FAC17           * Get Subroutine #
[1774] C8FD BD,A3,C0        DST   @FAC16,V@VROAZ   * Load into PAB
       C900 5A
[1775] C901 BF,56,03        DST   VROAZ,@FAC12     * PAB address in VDP
       C904 C0
[1776] C905 06,00,10        CALL  LINK             * DSRLNK
[1777] C908 0A              BYTE  >0A              * Subroutine
[1778] C909 65,8E           BS    ERRFE            * File Error
[1779] C90B E6,50,05        SRL   5,@FAC6          *
[1780] C90E 8E,50           CZ    @FAC6            *
[1781] C910 45,8E           BR    ERRFE            * File Error
[1782] C912 00              RTN                    *
[1783]               *******************************
[1784] C913 44,53,4B DSKSUB TEXT 'DSK#.'
       C916 23,2E
[1785] C918 06,BF,E2 DSKNAM CALL STRFCH            Get path string
[1786] C91B D6,4C,65        CEQ  >65,@FAC2         Do we have a string?
[1787] C91E 69,4F           BS   DEV1              YES, normal execution
[1788] C920 0F,12           XML  CFI               Convert FAC to integer
[1789] C922 D6,54,03        CEQ  >03,@FAC10        OK?

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0032 
RXB 2022
[1790] C925 65,7B           BS   ERRBV             No.
[1791] C927 CA,4B,1E        CHE  30,@FAC1          ASCII?
[1792] C92A 69,34           BS   DEVASC            Yes.
[1793] C92C CA,4B,0A        CHE  10,@FAC1          Higher then 9?
[1794] C92F 65,7B           BS   ERRBV             No, error
[1795] C931 A2,4B,30        ADD  48,@FAC1          Make it ASCII.
[1796] C934 BC,54,4B DEVASC ST   @FAC1,@TEMP1      Save the number
[1797] C937 BF,0C,00 DEV0   DST  5,@BYTES          Set up for a string
       C93A 05
[1798] C93B 0F,71           XML  GETSTR            Get string space
[1799] C93D 31,00,05        MOVE 5,G@DSKSUB,V*SREF Save the string
       C940 B0,1C,C9
       C943 13
[1800] C944 BC,E0,03        ST   @TEMP1,V@3(@SREF) Store the number
       C947 1C,54
[1801] C949 BD,50,0C        DST  @BYTES,@FAC6      Copy string length.
[1802] C94C BD,4E,1C        DST  @SREF,@FAC4       Copy string address.
[1803] C94F 8F,50    DEV1   DCZ  @FAC6             Is it a null string?
[1804] C951 65,73           BS   ERRBA             YES! Bad Argument
[1805] C953 BC,54,B0        ST   V*FAC4,@TEMP1     Save device number
       C956 4E
[1806] C957 D6,51,01        CEQ  1,@FAC7           Length 1?
[1807] C95A 69,37           BS   DEV0              Yes
[1808] C95C 00              RTN
[1809]               ***********************************************************
[1810]               * CPU PROGRAM FOR >8300 SCATCH PAD SUBROUTINE AMSCRU      *
[1811]               ***********************************************************
[1812]               *                 *        AORG >8300
[1813] C95D 83,02    AMSCRU DATA >8302 * AMSCRU DATA >8302     * First address.
[1814] C95F C0,4C           DATA >C04C *        MOV  R12,R1    * Save R12 
[1815] C961 02,0C           DATA >020C *        LI   R12,>1E00 * Load CRU bits
[1816] C963 1E,00           DATA >1E00 *
[1817] C965 1D,00           DATA >1D00 *        SBO  0         * Set bits ones
[1818] C967 C3,01           DATA >C301 *        MOV  R1,R12    * Restore R12
[1819] C969 04,E0           DATA >04E0 *        CLR  @>837C    * Clear for GPL
[1820] C96B 83,7C           DATA >837C *
[1821] C96D 04,5B           DATA >045B *        RT             * Return to GPL.
[1822]                                 *        END
[1823]               *******************************************************
[1824]               * CALL SAMS(memory-boundery,memory-page[,...])        *
[1825]               *******************************************************
[1826]               * SAMS replaced AMSPASS, AMSMAP, AMSOFF, AMSON      *
[1827]               * CALL SAMS("PASS",...)                             *
[1828]               * CALL SAMS("MAP",...)                              *
[1829]               * CALL SAMS("OFF",...)                              *
[1830]               * CALL SAMS("ON",...)                               *
[1831]               ***************************************************** 
[1832]               * SAMS replaced AMSBANK full RAM memory management  *
[1833]               ***************************************************** 
[1834]               * CALL SAMS(2,page,3,page,A,page,B,page,C,page,     * 
[1835]               * D,page,E,page,F,page,...)                         *
[1836]               *                                                   *
[1837]               * Numbers 2 is >2000, 3 is >3000                    *
[1838]               * Letters A is >A000, B is >B000, C is >C000        *
[1839]               * Letter  D is >D000, E is >D000, F is >F000        *
[1840]               * page now is SAMS 4K pages from 0 to 255           *
[1841]               *****************************************************
[1842]               * BSAVE and BLOAD replaced with full memory address *
[1843]               * 4K RAM boundries same as SAMS addressing RAM      *
[1844]               *****************************************************
[1845] C96F D3,76    SAMS   DATA BEEP
[1846] C971 04,53,41        STRI 'SAMS'        
       C974 4D,53
[1847] C976 C9,78           DATA $+2

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0033 
RXB 2022
[1848] C978 06,BF,E0        CALL COMB            * ( ?
[1849]               **************************************************
[1850]               * Get stirng or token or numeric                 *
[1851]               * String is for PASS,MAP,OFF, ON                 *
[1852]               * 2 and 3 are numeric as no token exist for them *
[1853]               * thus need a numeric interpetation for 2 and 3  *
[1854]               * A, B, C, D, E, F are tokenized already for use *
[1855]               **************************************************
[1856] C97B 0F,79    SAMS2  XML  PGMCHR          * Skip ( OR COMMA 
[1857] C97D D6,42,C7        CEQ  >C7,@CHAT       * STRING?
[1858] C980 49,EA           BR   SAMSPS          *  Must be a TOKEN?
[1859] C982 06,BF,E4 SAMSTR CALL STRPAR          * GET STRING?      
[1860] C985 D6,4C,65        CEQ  >65,@FAC2       * STRING?
[1861] C988 45,7B           BR   ERRBV           * ERROR BAD VALUE
[1862] C98A 8F,50           DCZ  @FAC6           * 0 Length?
[1863] C98C 65,73           BS   ERRBA           * ERROR BAD ARGUMENT 
[1864] C98E D7,B0,4E        DCEQ >5041,V*FAC4    * PA? PASS MODE
       C991 50,41
[1865] C993 49,9A           BR   AMSMAP          * SAMS MAP
[1866]               * CALL AMSPASS ************** 
[1867] C995 06,C9,BE        CALL PASAMS          * SAMS PASS
[1868] C998 4A,17           BR   SAMS3           * CHECK FOR COMMA
[1869] C99A D7,B0,4E AMSMAP DCEQ >4D41,V*FAC4    * MA? MAP MODE
       C99D 4D,41
[1870] C99F 49,A6           BR   AMSOFF          *SAMS OFF
[1871]               * CALL AMSMAP ***************
[1872] C9A1 06,C9,D9        CALL MAPAMS          * SAMS MAP 
[1873] C9A4 4A,17           BR   SAMS3           * CHECK FOR COMMA
[1874] C9A6 D7,B0,4E AMSOFF DCEQ >4F46,V*FAC4    * OF? SAMS OFF
       C9A9 4F,46
[1875] C9AB 49,B2           BR   AMSON           * SAMS ON
[1876]               * CALL AMSOFF ***************
[1877] C9AD 06,C9,D0        CALL OFFAMS          * AMS OFF
[1878] C9B0 4A,17           BR   SAMS3           * CHECK FOR COMMA
[1879] C9B2 D7,B0,4E AMSON  DCEQ >4F4E,V*FAC4    * ON? SAMS ON
       C9B5 4F,4E
[1880] C9B7 45,73           BR   ERRBA           * ERROR BAD ARGUMENT 
[1881]               * CALL AMSON ****************
[1882] C9B9 06,C9,C7        CALL ONAMS           * AMS ON
[1883] C9BC 4A,17           BR   SAMS3           * CHECK FOR COMMA   
[1884]               ******************************************************
[1885]               * Moves 12 bytes ASSEMBLY into >8300 Scratch Pad RAM *
[1886]               * Executes address at >8300 BLWP FAC & ARG workspace *
[1887]               ******************************************************
[1888] C9BE 06,C9,E3 PASAMS CALL AMSSUB            * AMS PASS SUBROUTINE
[1889] C9C1 BF,08,1E        DST  >1E01,@SETCRU     * LOAD PASS VALUE 
       C9C4 01
[1890] C9C5 49,E0           BR   SAMSUB            * EXECUTE IT
[1891] C9C7 06,C9,E3 ONAMS  CALL AMSSUB            * AMS ON SUBROUTINE
[1892] C9CA BF,08,1D        DST  >1D00,@SETCRU     * LOAD ON VALUE
       C9CD 00
[1893] C9CE 49,E0           BR   SAMSUB            * EXECUTE IT
[1894] C9D0 06,C9,E3 OFFAMS CALL AMSSUB            * AMS OFF SUBROUTINE
[1895] C9D3 BF,08,1E        DST  >1E00,@SETCRU     * LOAD OFF VALUE
       C9D6 00
[1896] C9D7 49,E0           BR   SAMSUB            * EXECUTE IT
[1897] C9D9 06,C9,E3 MAPAMS CALL AMSSUB            * AMS MAP SUBROUTINE
[1898] C9DC BF,08,1D        DST  >1D01,@SETCRU     * LOAD MAP VALUE
       C9DF 01
[1899] C9E0 0F,F0    SAMSUB XML  >F0               * EXECUTE ASSEMBLY
[1900] C9E2 00              RTN                    * RETURN
[1901]               **********************************************************
[1902]               * MOVES CPU PROGRAM TO SCRATCH PAD                       *
[1903] C9E3 31,00,12 AMSSUB MOVE 18,G@AMSCRU,@>8300 * GET ASSEMBLY FROM GROM  *

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0034 
RXB 2022
       C9E6 00,C9,5D
[1904] C9E9 00              RTN                     * RETURN                  *
[1905]               **********************************************************
[1906]               * SAMS PAGE CHANGE    
[1907]               ******************************************************
[1908]               * SAMS PAGES 2,3,A,B,C,D,E,F TOKENS                  *
[1909]               * PAGES range from 0 to 255 now instead of 16 to 255 *
[1910]               * Also now all SAMS RAM range not just lower 8K      *
[1911]               ******************************************************
[1912] C9EA 06,CA,26 SAMSPS CALL SAMS4A         * ADDRESS IN TEMP & PUSHED 
[1913] C9ED D6,42,B3        CEQ  COMMAZ,@CHAT   * COMMA?
[1914] C9F0 45,0C           BR   ERRSYN         * ERROR SYNTAX
[1915] C9F2 0F,79           XML  PGMCHR         * Skip COMMA
[1916] C9F4 06,BF,E4        CALL STRPAR         * Get Number
[1917] C9F7 0F,12           XML  CFI            * PAGE Convert to integer
[1918] C9F9 06,C9,D9        CALL MAPAMS         * AMS MAP
[1919] C9FC 06,C9,C7        CALL ONAMS          * AMS ON
[1920]               * TEMP has RAM address >A000 up to >F000 
[1921]               * Shift address to be 2* value for SAMS register
[1922]               * i.e. >F0 would be >1E so >401E would be register 15
[1923] C9FF E6,16,03        SRL  3,@TEMP        * MOVE TO LOWER NIBBLE
[1924] CA02 C0,17,16        EX   @TEMP,@TEMP+1  * SWAP BYTES INDEX ADDRESS
[1925] CA05 C0,4A,4B        EX   @FAC1,@FAC     * SWAP BYTES PAGE:BANK
[1926] CA08 BC,CF,BD        ST   @FAC1,@>4001(@TEMP) * SET BANK
       CA0B 01,16,4B
[1927] CA0E BC,CF,BD        ST   @FAC,@>4000(@TEMP)  * SET PAGE
       CA11 00,16,4A
[1928] CA14 06,C9,D0        CALL OFFAMS        * AMS OFF
[1929] CA17 D6,42,B3 SAMS3  CEQ  COMMAZ,@CHAT  * COMMA?
[1930] CA1A 69,7B           BS   SAMS2
[1931] CA1C D6,42,B6 SAMS4  CEQ  RPARZ,@CHAT   * )?
[1932] CA1F 45,0C           BR   ERRSYN        * SYNTAX ERROR
[1933] CA21 0F,79           XML  PGMCHR        * Skip ")"
[1934] CA23 06,00,12        CALL RETURN        * RETURN TO CALLER
[1935]               ****************************************************
[1936]               * SAMS PAGES 2,3,A,B,C,D,E,F                       *
[1937]               * Get 2 and 3 numeric or A to F tokens             *
[1938]               * input in CHAT is >C8 is numeric or must be token *
[1939]               * output TEMP has RAM ADDRESS of 4K page to save   *
[1940]               ****************************************************
[1941] CA26 87,16    SAMS4A DCLR @TEMP      * Clear address storage
[1942] CA28 D6,42,C8        CEQ  >C8,@CHAT  * NUMBER?
[1943] CA2B 4A,48           BR   SAMSAL     * No must be 2 or 3 or A to F 
[1944] CA2D 06,BF,E4        CALL STRPAR     * Get number 
[1945] CA30 0F,12           XML  CFI        * Convert to integer
[1946] CA32 CA,4B,04        CHE  4,@FAC1    * 1 or higher
[1947] CA35 65,73           BS   ERRBA      * ERROR BAD ARGUEMENT
[1948] CA37 BE,16,20        ST   >20,@TEMP  * Defualt address >2000
[1949] CA3A D6,4B,02        CEQ  2,@FAC1    * 2?
[1950] CA3D 6A,47           BS   SAMSP3     * Ok so done
[1951] CA3F CA,4B,04        CHE  4,@FAC1    * 4 or higher?           
[1952] CA42 65,73           BS   ERRBA      * ERROR BAD ARGUEMENT
[1953] CA44 A2,16,10        ADD  >10,@TEMP  * Get address 
[1954] CA47 00       SAMSP3 RTN             * RETURN
[1955]               * 24K ADDRESS PAGES
[1956] CA48 CA,42,47 SAMSAL CHE  >47,@CHAT  * G OR HIGHER
[1957] CA4B 65,73           BS   ERRBA      * ERROR BAD ARGUEMENT
[1958] CA4D CA,42,41        CHE  >41,@CHAT  * A OR HIGHER?
[1959] CA50 45,73           BR   ERRBA      * ERROR BAD ARGUEMENT
[1960] CA52 BC,5C,42        ST   @CHAT,@ARG * Save TOKEN
[1961] CA55 A6,5C,41        SUB  >41,@ARG   * 0 TO 5
[1962] CA58 BE,16,A0        ST   >A0,@TEMP  * Default address >A000
[1963] CA5B 8E,5C    SAMSLP CZ   @ARG       * 0?
[1964] CA5D 6A,67           BS   SAMSD      * RETURN 

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0035 
RXB 2022
[1965] CA5F A2,16,10        ADD  >10,@TEMP  * >B000 TO >F000 
[1966] CA62 92,5C           DEC  @ARG       * 5 TO 1
[1967] CA64 05,CA,5B        B    SAMSLP     * LOOP FOREVER
[1968] CA67 0F,79    SAMSD  XML  PGMCHR     * SKIP TOKEN
[1969] CA69 00              RTN             * RETURN
[1970]               ***********************************************************
[1971]              
[1972]                      AORG >0B00
[1973]               ***********************************************************
[1974]               *                BASIC KEYWORD TABLE
[1975]               *      THE TOKEN IS ITS LEFT BINDING POWER
[1976]               ***********************************************************
[1977] CB00 CB,14,CB KEYTAB DATA CHAR1,CHAR2,CHAR3,CHAR4,CHAR5
       CB03 35,CB,4E
       CB06 CB,E7,CC
       CB09 51
[1978] CB0A CC,A0,CC        DATA CHAR6,CHAR7,CHAR8,CHAR9,CHARA
       CB0D EE,CD,27
       CB10 CD,55,CD
       CB13 60
[1979] CB14 21       CHAR1  TEXT '!'
[1980] CB15 83              BYTE TREMZ             *  !
[1981] CB16 23              TEXT '#'
[1982] CB17 FD              BYTE NUMBEZ            *  #
[1983] CB18 26              TEXT '&'
[1984] CB19 B8              BYTE CONCZ             *  &
[1985] CB1A 28              TEXT '('
[1986] CB1B B7              BYTE LPARZ             *  (
[1987] CB1C 29              TEXT ')'
[1988] CB1D B6              BYTE RPARZ             *  )
[1989] CB1E 2A              TEXT '*'
[1990] CB1F C3              BYTE MULTZ             *  *
[1991] CB20 2B              TEXT '+'
[1992] CB21 C1              BYTE PLUSZ             *  +
[1993] CB22 2C              TEXT ','
[1994] CB23 B3              BYTE COMMAZ            *  ,
[1995] CB24 2D              TEXT '-'
[1996] CB25 C2              BYTE MINUSZ            *  -
[1997] CB26 2F              TEXT '/'
[1998] CB27 C4              BYTE DIVIZ             *  /
[1999] CB28 3A              TEXT ':'
[2000] CB29 B5              BYTE COLONZ            *  :
[2001] CB2A 3B              TEXT ';'
[2002] CB2B B4              BYTE SEMICZ            *  ;
[2003] CB2C 3C              TEXT '<'
[2004] CB2D BF              BYTE LESSZ             *  <
[2005] CB2E 3D              TEXT '='
[2006] CB2F BE              BYTE EQUALZ            *  =
[2007] CB30 3E              TEXT '>'
[2008] CB31 C0              BYTE GREATZ            *  >
[2009] CB32 5E              TEXT '^'
[2010] CB33 C5              BYTE CIRCUZ            *  ^
[2011] CB34 FF              BYTE >FF
[2012] CB35 3A,3A    CHAR2  TEXT '::'
[2013] CB37 82              BYTE SSEPZ             *  ::
[2014] CB38 41,54           TEXT 'AT'
[2015] CB3A F0              BYTE ATZ               *  AT
[2016] CB3B 47,4F           TEXT 'GO'
[2017] CB3D 85              BYTE GOZ               *  GO * RXB MOTION
[2018] CB3E 49,46           TEXT 'IF'
[2019] CB40 84              BYTE IFZ               *  IF
[2020] CB41 4F,4E           TEXT 'ON'
[2021] CB43 9B              BYTE ONZ               *  ON * RXB ONKEY
[2022] CB44 4F,52           TEXT 'OR'

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0036 
RXB 2022
[2023] CB46 BA              BYTE ORZ               *  OR
[2024] CB47 50,49           TEXT 'PI'
[2025] CB49 DD              BYTE PIZ               *  PI
[2026] CB4A 54,4F           TEXT 'TO'
[2027] CB4C B1              BYTE TOZ               *  TO
[2028] CB4D FF              BYTE >FF
[2029] CB4E 41,42,53 CHAR3  TEXT 'ABS'
[2030] CB51 CB              BYTE ABSZ              *  ABS
[2031] CB52 41,4C,4C        TEXT 'ALL'
[2032] CB55 EC              BYTE ALLZ              *  ALL
[2033] CB56 41,4E,44        TEXT 'AND'
[2034] CB59 BB              BYTE ANDZ              *  AND
[2035] CB5A 41,53,43        TEXT 'ASC'
[2036] CB5D DC              BYTE ASCZ              *  ASC
[2037] CB5E 41,54,4E        TEXT 'ATN'
[2038] CB61 CC              BYTE ATNZ              *  ATN
[2039] CB62 42,59,45        TEXT 'BYE'
[2040] CB65 03              BYTE >03               *  BYE
[2041] CB66 43,4F,4E        TEXT 'CON'
[2042] CB69 01              BYTE >01               *  CONtinue
[2043] CB6A 43,4F,53        TEXT 'COS'
[2044] CB6D CD              BYTE COSZ              *  COS
[2045] CB6E 44,45,46        TEXT 'DEF'
[2046] CB71 89              BYTE DEFZ              *  DEF
[2047]               * GKXB added token
[2048] CB72 44,45,4C        TEXT 'DEL'
[2049] CB75 09              BYTE >09               *  DEL
[2050] CB76 44,49,4D        TEXT 'DIM'
[2051] CB79 8A              BYTE DIMZ              *  DIM
[2052] CB7A 45,4E,44        TEXT 'END'
[2053] CB7D 8B              BYTE ENDZ              *  END
[2054] CB7E 45,4F,46        TEXT 'EOF'
[2055] CB81 CA              BYTE EOFZ              *  EOF
[2056] CB82 45,58,50        TEXT 'EXP'
[2057] CB85 CE              BYTE EXPZZ             *  EXP
[2058] CB86 46,4F,52        TEXT 'FOR'
[2059] CB89 8C              BYTE FORZ              *  FOR
[2060] CB8A 49,4E,54        TEXT 'INT'
[2061] CB8D CF              BYTE INTZ              *  INT
[2062] CB8E 4C,45,4E        TEXT 'LEN'
[2063] CB91 D5              BYTE LENZ              *  LEN
[2064] CB92 4C,4F,47        TEXT 'LOG'
[2065] CB95 D0              BYTE LOGZ              *  LOG
[2066] CB96 4D,41,58        TEXT 'MAX'
[2067] CB99 DF              BYTE MAXZ              *  MAX
[2068] CB9A 4D,49,4E        TEXT 'MIN'
[2069] CB9D E0              BYTE MINZ              *  MIN
[2070] CB9E 4E,45,57        TEXT 'NEW'
[2071] CBA1 00              BYTE >00               *  NEW * RXB CALL NEW
[2072] CBA2 4E,4F,54        TEXT 'NOT'
[2073] CBA5 BD              BYTE NOTZ              *  NOT
[2074] CBA6 4E,55,4D        TEXT 'NUM'
[2075] CBA9 04              BYTE >04               *  NUMber
[2076] CBAA 4F,4C,44        TEXT 'OLD'
[2077] CBAD 05              BYTE >05               *  OLD * RXB SAMS
[2078] CBAE 50,4F,53        TEXT 'POS'
[2079] CBB1 D9              BYTE POSZ              *  POS
[2080] CBB2 52,45,43        TEXT 'REC'
[2081] CBB5 DE              BYTE RECZ              *  REC
[2082] CBB6 52,45,4D        TEXT 'REM'
[2083] CBB9 9A              BYTE REMZ              *  REMark
[2084] CBBA 52,45,53        TEXT 'RES'
[2085] CBBD 06              BYTE >06               *  RESequence
[2086] CBBE 52,4E,44        TEXT 'RND'

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0037 
RXB 2022
[2087] CBC1 D7              BYTE RNDZ              *  RND * RXB CHANGED
[2088] CBC2 52,55,4E        TEXT 'RUN'
[2089] CBC5 A9              BYTE RUNZ              *  RUN * RXB SAMS
[2090] CBC6 53,47,4E        TEXT 'SGN'
[2091] CBC9 D1              BYTE SGNZZ             *  SGN
[2092] CBCA 53,49,4E        TEXT 'SIN'
[2093] CBCD D2              BYTE SINZ              *  SIN
[2094] CBCE 53,51,52        TEXT 'SQR'
[2095] CBD1 D3              BYTE SQRZ              *  SQR
[2096] CBD2 53,55,42        TEXT 'SUB'
[2097] CBD5 A1              BYTE SUBZ              *  SUB
[2098] CBD6 54,41,42        TEXT 'TAB'
[2099] CBD9 FC              BYTE TABZ              *  TAB
[2100] CBDA 54,41,4E        TEXT 'TAN'
[2101] CBDD D4              BYTE TANZ              *  TAN
[2102] CBDE 56,41,4C        TEXT 'VAL'
[2103] CBE1 DA              BYTE VALZ              *  VAL
[2104] CBE2 58,4F,52        TEXT 'XOR'
[2105] CBE5 BC              BYTE XORZ              *  XOR
[2106] CBE6 FF              BYTE >FF
[2107] CBE7 42,41,53 CHAR4  TEXT 'BASE'
       CBEA 45
[2108] CBEB F1              BYTE BASEZ             *  BASE
[2109] CBEC 42,45,45        TEXT 'BEEP'
       CBEF 50
[2110] CBF0 EE              BYTE BEEPZ             *  BEEP
[2111] CBF1 43,41,4C        TEXT 'CALL'
       CBF4 4C
[2112] CBF5 9D              BYTE CALLZ             *  CALL
[2113] CBF6 43,48,52        TEXT 'CHR$'
       CBF9 24
[2114] CBFA D6              BYTE CHRZZ             *  CHR$
[2115]               * GKXB added token
[2116] CBFB 43,4F,50        TEXT 'COPY'
       CBFE 59
[2117] CBFF 0A              BYTE >0A               *  COPY
[2118] CC00 44,41,54        TEXT 'DATA'
       CC03 41
[2119] CC04 93              BYTE DATAZ             *  DATA
[2120] CC05 45,4C,53        TEXT 'ELSE'
       CC08 45
[2121] CC09 81              BYTE ELSEZ             *  ELSE
[2122] CC0A 47,4F,54        TEXT 'GOTO'
       CC0D 4F
[2123] CC0E 86              BYTE GOTOZ             *  GOTO * RXB ONKEY
[2124] CC0F 4C,49,53        TEXT 'LIST'
       CC12 54
[2125] CC13 02              BYTE >02               *  LIST
[2126]               * GKXB added token
[2127] CC14 4D,4F,56        TEXT 'MOVE'
       CC17 45
[2128] CC18 0B              BYTE >0B               *  MOVE
[2129] CC19 4E,45,58        TEXT 'NEXT'
       CC1C 54
[2130] CC1D 96              BYTE NEXTZ             *  NEXT
[2131] CC1E 4F,50,45        TEXT 'OPEN'
       CC21 4E
[2132] CC22 9F              BYTE OPENZ             *  OPEN
[2133] CC23 52,45,41        TEXT 'READ'
       CC26 44
[2134] CC27 97              BYTE READZ             *  READ
[2135] CC28 52,50,54        TEXT 'RPT$'
       CC2B 24
[2136] CC2C E1              BYTE RPTZZ             *  RPT$

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0038 
RXB 2022
[2137] CC2D 53,41,56        TEXT 'SAVE'
       CC30 45
[2138] CC31 07              BYTE >07               *  SAVE * RXB SAVE IV254
[2139] CC32 53,45,47        TEXT 'SEG$'
       CC35 24
[2140] CC36 D8              BYTE SEGZZ             *  SEG$
[2141] CC37 53,49,5A        TEXT 'SIZE'
       CC3A 45
[2142] CC3B EB              BYTE SIZEZ             *  SIZE * RXB CALL SIZE
[2143] CC3C 53,54,45        TEXT 'STEP'
       CC3F 50
[2144] CC40 B2              BYTE STEPZ             *  STEP
[2145] CC41 53,54,4F        TEXT 'STOP'
       CC44 50
[2146] CC45 98              BYTE STOPZ             *  STOP * RXB MOTION
[2147] CC46 53,54,52        TEXT 'STR$'
       CC49 24
[2148] CC4A DB              BYTE STRZZ             *  STR$
[2149] CC4B 54,48,45        TEXT 'THEN'
       CC4E 4E
[2150] CC4F B0              BYTE THENZ             *  THEN
[2151] CC50 FF              BYTE >FF
[2152] CC51 42,52,45 CHAR5  TEXT 'BREAK'
       CC54 41,4B
[2153] CC56 8E              BYTE BREAKZ            *  BREAK
[2154] CC57 43,4C,4F        TEXT 'CLOSE'
       CC5A 53,45
[2155] CC5C A0              BYTE CLOSEZ            *  CLOSE
[2156] CC5D 44,49,47        TEXT 'DIGIT'
       CC60 49,54
[2157] CC62 E9              BYTE DIGITZ            *  DIGIT
[2158] CC63 45,52,41        TEXT 'ERASE'
       CC66 53,45
[2159] CC68 EF              BYTE ERASEZ            *  ERASE
[2160] CC69 45,52,52        TEXT 'ERROR'
       CC6C 4F,52
[2161] CC6E A5              BYTE ERRORZ            *  ERROR
[2162] CC6F 46,49,58        TEXT 'FIXED'
       CC72 45,44
[2163] CC74 FA              BYTE FIXEDZ            *  FIXED
[2164] CC75 47,4F,53        TEXT 'GOSUB'
       CC78 55,42
[2165] CC7A 87              BYTE GOSUBZ            *  GOSUB
[2166] CC7B 49,4D,41        TEXT 'IMAGE'
       CC7E 47,45
[2167] CC80 A3              BYTE IMAGEZ            *  IMAGE
[2168] CC81 49,4E,50        TEXT 'INPUT'
       CC84 55,54
[2169] CC86 92              BYTE INPUTZ            *  INPUT
[2170] CC87 4D,45,52        TEXT 'MERGE'
       CC8A 47,45
[2171] CC8C 08              BYTE >08               *  MERGE
[2172] CC8D 50,52,49        TEXT 'PRINT'
       CC90 4E,54
[2173] CC92 9C              BYTE PRINTZ            *  PRINT
[2174] CC93 54,52,41        TEXT 'TRACE'
       CC96 43,45
[2175] CC98 90              BYTE TRACEZ            *  TRACE
[2176] CC99 55,53,49        TEXT 'USING'
       CC9C 4E,47
[2177] CC9E ED              BYTE USINGZ            *  USING
[2178] CC9F FF              BYTE >FF
[2179] CCA0 41,43,43 CHAR6  TEXT 'ACCEPT'
       CCA3 45,50,54

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0039 
RXB 2022
[2180] CCA6 A4              BYTE ACCEPZ            *  ACCEPT
[2181] CCA7 41,50,50        TEXT 'APPEND'
       CCAA 45,4E,44
[2182] CCAD F9              BYTE APPENZ            *  APPEND
[2183] CCAE 44,45,4C        TEXT 'DELETE'
       CCB1 45,54,45
[2184] CCB4 99              BYTE DELETZ            *  DELETE
[2185] CCB5 4C,49,4E        TEXT 'LINPUT'
       CCB8 50,55,54
[2186] CCBB AA              BYTE LINPUZ            *  LINPUT
[2187] CCBC 4E,55,4D        TEXT 'NUMBER'
       CCBF 42,45,52
[2188] CCC2 04              BYTE >04               *  NUMBER
[2189] CCC3 4F,50,54        TEXT 'OPTION'
       CCC6 49,4F,4E
[2190] CCC9 9E              BYTE OPTIOZ            *  OPTION
[2191] CCCA 4F,55,54        TEXT 'OUTPUT'
       CCCD 50,55,54
[2192] CCD0 F7              BYTE OUTPUZ            *  OUTPUT
[2193] CCD1 52,45,54        TEXT 'RETURN'
       CCD4 55,52,4E
[2194] CCD7 88              BYTE RETURZ            *  RETURN
[2195] CCD8 53,55,42        TEXT 'SUBEND'
       CCDB 45,4E,44
[2196] CCDE A8              BYTE SUBNDZ            *  SUBEND
[2197] CCDF 55,41,4C        TEXT 'UALPHA'
       CCE2 50,48,41
[2198] CCE5 EA              BYTE UALPHZ            *  UALPHA
[2199] CCE6 55,50,44        TEXT 'UPDATE'
       CCE9 41,54,45
[2200] CCEC F8              BYTE UPDATZ            *  UPDATE
[2201] CCED FF              BYTE >FF
[2202] CCEE 44,49,53 CHAR7  TEXT 'DISPLAY'
       CCF1 50,4C,41
       CCF4 59
[2203] CCF5 A2              BYTE DISPLZ            *  DISPLAY
[2204] CCF6 4E,55,4D        TEXT 'NUMERIC'
       CCF9 45,52,49
       CCFC 43
[2205] CCFD E8              BYTE NUMERZ            *  NUMERIC
[2206] CCFE 52,45,53        TEXT 'RESTORE'
       CD01 54,4F,52
       CD04 45
[2207] CD05 94              BYTE RESTOZ            *  RESTORE
[2208] CD06 53,55,42        TEXT 'SUBEXIT'
       CD09 45,58,49
       CD0C 54
[2209] CD0D A7              BYTE SUBXTZ            *  SUBEXIT
[2210] CD0E 55,4E,42        TEXT 'UNBREAK'
       CD11 52,45,41
       CD14 4B
[2211] CD15 8F              BYTE UNBREZ            *  UNBREAK
[2212] CD16 55,4E,54        TEXT 'UNTRACE'
       CD19 52,41,43
       CD1C 45
[2213] CD1D 91              BYTE UNTRAZ            *  UNTRACE
[2214] CD1E 57,41,52        TEXT 'WARNING'
       CD21 4E,49,4E
       CD24 47
[2215] CD25 A6              BYTE WARNZ             *  WARNING
[2216] CD26 FF              BYTE >FF
[2217] CD27 43,4F,4E CHAR8  TEXT 'CONTINUE'
       CD2A 54,49,4E
       CD2D 55,45

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0040 
RXB 2022
[2218] CD2F 01              BYTE >01               *  CONTINUE
[2219] CD30 49,4E,54        TEXT 'INTERNAL'
       CD33 45,52,4E
       CD36 41,4C
[2220] CD38 F5              BYTE INTERZ            *  INTERNAL
[2221] CD39 52,45,4C        TEXT 'RELATIVE'
       CD3C 41,54,49
       CD3F 56,45
[2222] CD41 F4              BYTE RELATZ            *  RELATIVE
[2223] CD42 56,41,4C        TEXT 'VALIDATE'
       CD45 49,44,41
       CD48 54,45
[2224] CD4A FE              BYTE VALIDZ            *  VALIDATE
[2225] CD4B 56,41,52        TEXT 'VARIABLE'
       CD4E 49,41,42
       CD51 4C,45
[2226] CD53 F3              BYTE VARIAZ            *  VARIABLE
[2227] CD54 FF              BYTE >FF
[2228] CD55 52,41,4E CHAR9  TEXT 'RANDOMIZE'
       CD58 44,4F,4D
       CD5B 49,5A,45
[2229] CD5E 95              BYTE RANDOZ            *  RANDOMIZE
[2230] CD5F FF              BYTE >FF
[2231] CD60 53,45,51 CHARA  TEXT 'SEQUENTIAL'
       CD63 55,45,4E
       CD66 54,49,41
       CD69 4C
[2232] CD6A F6              BYTE SEQUEZ            *  SEQUENTIAL
[2233] CD6B FF              BYTE >FF
[2234]               ***********************************************************
[2235]                      
[2236]                      AORG >0D77
[2237]               * GROM ADDRESS >CD77 FOR ERRTAB
[2238]               ***********************************************************
[2239]               * ERRTAB - Error table containing all of the error messages
[2240]               *          error numbers and the severity code for each
[2241]               *          error. The error call number is the data byte
[2242]               *          that must follow the CALL ERRZZ or CALL WARNZZ.
[2243]               *          Messages with severity of zero are system
[2244]               *          messages and not error messages.
[2245]               *
[2246]               *  Message, Error #, Severity                     CALL #
[2247]               ***********************************************************
[2248] CD77 60,40    ERRTAB DATA MSGFST            * "READY"
* Warning - Address not even in 2248
[2249] CD79 00,00           BYTE 0,0
[2250] CD7B 60,48           DATA MSGBRK            * "BREAKPOINT"
[2251] CD7D 00,00           BYTE 0,0
[2252] CD7F 60,65           DATA MSG10             * "NUMERIC OVERFLOW"
[2253] CD81 0A,01           BYTE 10,1
[2254] CD83 60,76           DATA MSG14             * "SYNTAX ERROR"
[2255] CD85 0E,09           BYTE 14,9
[2256] CD87 60,83           DATA MSG16             * "ILLEGAL AFTER SUBPROGRAM"
[2257] CD89 10,09           BYTE 16,9
[2258] CD8B 60,9C           DATA MSG17             * "UNMATCHED QUOTES"
[2259] CD8D 11,09           BYTE 17,9
[2260] CD8F 60,AD           DATA MSG19             * "NAME TOO LONG"
[2261] CD91 13,09           BYTE 19,9
[2262] CD93 60,BB           DATA MSG24             * "STRING-NUMBER MISMATCH"
[2263] CD95 18,09           BYTE 24,9
[2264] CD97 60,D2           DATA MSG25             * "OPTION BASE ERROR"
[2265] CD99 19,09           BYTE 25,9
[2266] CD9B 60,E4           DATA MSG28             * "IMPROPERLY USED NAME"
[2267] CD9D 1C,09           BYTE 28,9

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0041 
RXB 2022
[2268] CD9F 61,10           DATA MSG36             * "IMAGE ERROR"
[2269] CDA1 24,09           BYTE 36,9
[2270] CDA3 61,1C           DATA MSG39             * "MEMORY FULL"
[2271] CDA5 27,09           BYTE 39,9
[2272] CDA7 61,28           DATA MSG40             * "STACK OVERFLOW"
[2273] CDA9 28,09           BYTE 40,9
[2274] CDAB 61,37           DATA MSG43             * "NEXT WITHOUT FOR"
[2275] CDAD 2B,09           BYTE 43,9
[2276] CDAF 61,48           DATA MSG44             * "FOR-NEXT NESTING"
[2277] CDB1 2C,09           BYTE 44,9
[2278] CDB3 61,59           DATA MSG47             * "MUST BE IN SUBPROGRAM"
[2279] CDB5 2F,09           BYTE 47,9
[2280] CDB7 61,6F           DATA MSG48             * "RECURSIVE SUBPROGRAM CALL"
[2281] CDB9 30,09           BYTE 48,9
[2282] CDBB 61,89           DATA MSG49             * "MISSING SUBEND"
[2283] CDBD 31,09           BYTE 49,9
[2284] CDBF 61,98           DATA MSG51             * "RETURN WITHOUT GOSUB"
[2285] CDC1 33,09           BYTE 51,9
[2286] CDC3 61,AD           DATA MSG54             * "STRING TRUNCATED"
[2287] CDC5 36,01           BYTE 54,1
[2288] CDC7 61,BE           DATA MSG57             * "BAD SUBSCRIPT"
[2289] CDC9 39,09           BYTE 57,9
[2290] CDCB 63,24           DATA MSG56             * "SPEECH STRING TOO LONG"
[2291] CDCD 38,09           BYTE 56,9
[2292] CDCF 61,CC           DATA MSG60             * "LINE NOT FOUND"
[2293] CDD1 3C,09           BYTE 60,9
[2294] CDD3 61,DB           DATA MSG61             * "BAD LINE NUMBER"
[2295] CDD5 3D,09           BYTE 61,9
[2296] CDD7 62,C5           DATA MSG62             * "LINE TOO LONG"
[2297] CDD9 3E,09           BYTE 62,9
[2298] CDDB 61,EB           DATA MSG67             * "CAN'T CONTINUE"
[2299] CDDD 43,09           BYTE 67,9
[2300] CDDF 61,FA           DATA MSG69             * "COMMAND ILLEGAL IN PROGRAM
[2301] CDE1 45,09           BYTE 69,9
[2302] CDE3 62,15           DATA MSG70             * "ONLY LEGAL IN A PROGRAM"
[2303] CDE5 46,09           BYTE 70,9
[2304] CDE7 62,2D           DATA MSG74             * "BAD ARGUMENT"
[2305] CDE9 4A,09           BYTE 74,9
[2306] CDEB 62,3A           DATA MSG78             * "NO PROGRAM PRESENT"
[2307] CDED 4E,01           BYTE 78,1
[2308] CDEF 62,4D           DATA MSG79             * "BAD VALUE"
[2309] CDF1 4F,09           BYTE 79,9
[2310] CDF3 62,57           DATA MSG81             * "INCORRECT ARGUMENT LIST"
[2311] CDF5 51,09           BYTE 81,9
[2312] CDF7 62,6F           DATA MSG83             * "INPUT ERROR" (WARNING)
[2313] CDF9 53,01           BYTE 83,1
[2314] CDFB 62,7B           DATA MSG84             * "DATA ERROR"
[2315] CDFD 54,09           BYTE 84,9
[2316] CDFF 62,9B           DATA MSG109            * "FILE ERROR"
[2317] CE01 6D,09           BYTE 109,9
[2318] CE03 62,A6           DATA MSG130            * "I/O ERROR" (WARNING)
[2319] CE05 82,01           BYTE 130,1
[2320] CE07 62,A6           DATA MSG130            * "I/O ERROR"
[2321] CE09 82,09           BYTE 130,9
[2322] CE0B 62,B0           DATA MSG135            * "SUBPROGRAM NOT FOUND"
[2323] CE0D 87,09           BYTE 135,9
[2324] CE0F 61,CC           DATA MSG60             * "LINE NOT FOUND" (WARNING)
[2325] CE11 3C,01           BYTE 60,1
[2326] CE13 62,86           DATA MSG97             * "PROTECTION VIOLATION"
[2327] CE15 61,09           BYTE 97,9
[2328] CE17 60,F9           DATA MSG34             * "UNRECOGNIZED CHARACTER"
[2329] CE19 14,09           BYTE 20,9
[2330]               * Following message is added 6/24/81 for the INPUT bug.
[2331] CE1B 62,6F           DATA MSG83             * "INPUT ERROR"

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0042 
RXB 2022
[2332] CE1D 53,09           BYTE 83,9
[2333]               ***********************************************************
[2334]               * TRACBK - Is used to trace back the error levels through
[2335]               *          nested function references and subprogram calls.
[2336]               *          It takes care of issuing the trace back info
[2337]               *          messages in these two cases. It leaves the stack
[2338]               *          unchanged except in the case of a prescan error
[2339]               *          occurring in an external subprogram. If any
[2340]               *          messages are issued, it returns with the staus
[2341]               *          set, else reset.
[2342]               ***********************************************************
[2343] CE1F BD,52,6E TRACBK DST  @VSPTR,@FAC8      Get a temp stack pointer
[2344] CE22 C5,52,24 GCE22  DCH  @STVSPT,@FAC8     While not end of stack
[2345] CE25 4E,48           BR   GCE48
[2346] CE27 D6,E0,02        CEQ  >68,V@2(@FAC8)    If UDF entry
       CE2A 52,68
[2347] CE2C 6E,49           BS   TRAC05
[2348] CE2E D6,E0,02        CEQ  >70,V@2(@FAC8)    If temp UDF entry
       CE31 52,70
[2349] CE33 4E,3B           BR   GCE3B
[2350] CE35 A7,6E,00        DSUB 8,@VSPTR          Trash it so DELINK won't
       CE38 08
[2351] CE39 4E,49           BR   TRAC05             mess up the symbol table
[2352] CE3B D6,E0,02 GCE3B  CEQ  >6A,V@2(@FAC8)    If subprogram
       CE3E 52,6A
[2353] CE40 6E,F8           BS   TRAC50
[2354] CE42 A7,52,00        DSUB 8,@FAC8           Goto next entry on stack
       CE45 08
[2355] CE46 4E,22           BR   GCE22
[2356] CE48 00       GCE48  RTN                    If no UDF or subprograms acti
[2357]               * Trace back UDF reference
[2358] CE49 86,56    TRAC05 CLR  @FAC12            To cheat on ERPRNT
[2359] CE4B C0,56,44        EX   @PRGFLG,@FAC12    Force line # NOT to be printe
[2360] CE4E D6,57,01        CEQ  1,@FAC13          If warning message
[2361] CE51 4E,58           BR   GCE58
[2362]               * Place for the message already set in WRNZZ3
[2363] CE53 06,6E,1B        CALL ERPNT5            Don't restore char set
[2364] CE56 4E,5B           BR   GCE5B
[2365] CE58 06,6E,0E GCE58  CALL ERPRNT            Print the real error messgae
[2366] CE5B BC,44,56 GCE5B  ST   @FAC12,@PRGFLG    Restore program/imperative fl
[2367] CE5E BD,5C,2C        DST  @PGMPTR,@ARG      Get the place of error for FN
[2368] CE61 06,CF,73        CALL FNDLNE            Find the line that the error
[2369]               *                              is in
[2370] CE64 BF,A2,E4        DST  >A9AE,V@NLNADD+2  Say 'in' xx
       CE67 A9,AE
[2371] CE69 BF,20,02        DST  NLNADD+5,@VARW    Start place of line number
       CE6C E7
[2372] CE6D 06,6F,BA        CALL DISO              Put out the line number
[2373] CE70 0F,83           XML  SCROLL
[2374] CE72 BD,5C,B0 TRAC09 DST  V*FAC8,@ARG       Save PGMPTR from the entry
       CE75 52
[2375] CE76 A7,52,00 TRAC10 DSUB 8,@FAC8           Go on to next entry
       CE79 08
[2376] CE7A C5,52,24        DCH  @STVSPT,@FAC8     If not end of stack
[2377] CE7D 4E,E2           BR   GCEE2
[2378] CE7F D6,E0,02        CEQ  >68,V@2(@FAC8)    If function entry
       CE82 52,68
[2379] CE84 4E,C8           BR   GCEC8
[2380] CE86 D5,B0,52        DCEQ @ARG,V*FAC8       If recursive
       CE89 5C
[2381] CE8A 4E,B3           BR   GCEB3
[2382] CE8C 31,00,0F        MOVE 15,G@MSGCIS,V@NLNADD+2
       CE8F A2,E4,63
       CE92 0A

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0043 
RXB 2022
[2383] CE93 0F,83           XML  SCROLL            * CALLS ITSELF
[2384] CE95 A7,52,00 TRAC12 DSUB 8,@FAC8           Goto next entry on stack
       CE98 08
[2385] CE99 D6,E0,02 GCE99  CEQ  >68,V@2(@FAC8)    While functions
       CE9C 52,68
[2386] CE9E 4E,AC           BR   GCEAC
[2387] CEA0 D5,B0,52        DCEQ @ARG,V*FAC8
       CEA3 5C
[2388] CEA4 4E,72           BR   TRAC09
[2389] CEA6 A7,52,00        DSUB 8,@FAC8           Goto next entry on stack
       CEA9 08
[2390] CEAA 4E,99           BR   GCE99
[2391] CEAC CE,E0,02 GCEAC  CGT  >65,V@2(@FAC8)    If string is numeric
       CEAF 52,65
[2392] CEB1 4E,95           BR   TRAC12
[2393] CEB3 31,00,0B GCEB3  MOVE 11,G@MSGCF,V@NLNADD+2
       CEB6 A2,E4,63
       CEB9 19
[2394] CEBA 06,CF,73        CALL FNDLNE            Find the line
[2395] CEBD BF,20,02        DST  NLNADD+14,@VARW   Place to display it
       CEC0 F0
[2396] CEC1 06,6F,BA        CALL DISO              Display the line number
[2397] CEC4 0F,83           XML  SCROLL            * CALLED FROM
[2398] CEC6 4E,72           BR   TRAC09            Go on
[2399]               * Jump always
[2400] CEC8 CA,E0,02 GCEC8  CHE  >66,V@2(@FAC8)    If not permanent
       CECB 52,66
[2401] CECD 4E,76           BR   TRAC10
[2402] CECF C7,52,09 GCECF  DCH  VRAMVS,@FAC8      While still not at bottom
       CED2 58
[2403] CED3 4E,E2           BR   GCEE2
[2404] CED5 D6,E0,02        CEQ  >6A,V@2(@FAC8)    If subprogram
       CED8 52,6A
[2405] CEDA 6F,09           BS   TRAC51
[2406] CEDC A7,52,00        DSUB 8,@FAC8           Go down an entry
       CEDF 08
[2407] CEE0 4E,CF           BR   GCECF
[2408] CEE2 8E,44    GCEE2  CZ   @PRGFLG           If not imperative
[2409] CEE4 6E,F6           BS   GCEF6
[2410] CEE6 31,00,0B        MOVE 11,G@MSGCF,V@NLNADD+2
       CEE9 A2,E4,63
       CEEC 19
[2411] CEED BF,20,02        DST  NLNADD+14,@VARW   Place to display line #
       CEF0 F0
[2412] CEF1 06,A0,0A        CALL ASC               Display it
[2413] CEF4 0F,83           XML  SCROLL
[2414] CEF6 4F,65    GCEF6  BR   RTNSET            Return with condition set
[2415]               * Trace back subprogram calls
[2416] CEF8 D6,57,01 TRAC50 CEQ  1,@FAC13          If warning message only
[2417] CEFB 4F,02           BR   GCF02
[2418] CEFD 06,6E,1B        CALL ERPNT5            Don't restore char set
[2419] CF00 4F,05           BR   GCF05
[2420] CF02 06,6E,0E GCF02  CALL ERPRNT            Print the real message
[2421] CF05 8E,44    GCF05  CZ   @PRGFLG
[2422] CF07 6F,65           BS   RTNSET
[2423] CF09 8E,44    TRAC51 CZ   @PRGFLG
[2424] CF0B 6F,68           BS   RETNOS
[2425] CF0D BF,A2,E4        DST  >A9AE,V@NLNADD+2  Display 'IN'
       CF10 A9,AE
[2426] CF12 BF,56,02        DST  NLNADD+6,@FAC12   Display location of name
       CF15 E8
[2427] CF16 BD,5A,B0 TRAC55 DST  V*FAC8,@FAC16     Get S.T. pointer
       CF19 52
[2428] CF1A 86,54           CLR  @FAC10            Need a double length

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0044 
RXB 2022
[2429] CF1C BC,55,E0        ST   V@1(@FAC16),@FAC10+1 Get the name length
       CF1F 01,5A
[2430] CF21 BD,5A,E0        DST  V@4(@FAC16),@FAC16   Get the name pointer
       CF24 04,5A
[2431] CF26 34,54,B0        MOVE @FAC10,V*FAC16,V*FAC12   Display
       CF29 56,B0,5A
[2432] CF2C A2,B0,56 GCF2C  ADD  OFFSET,V*FAC12
       CF2F 60
[2433] CF30 91,56           DINC @FAC12
[2434] CF32 93,54           DDEC @FAC10
[2435] CF34 8F,54           DCZ  @FAC10
[2436] CF36 4F,2C           BR   GCF2C
[2437] CF38 0F,83           XML  SCROLL            Scroll the screen 'CALLED FRO
[2438] CF3A 31,00,0B        MOVE 11,G@MSGCF,V@NLNADD+2
       CF3D A2,E4,63
       CF40 19
[2439] CF41 BD,54,52        DST  @FAC8,@FAC10      In case at top level
[2440] CF44 BD,52,E0        DST  V@6(@FAC8),@FAC8  Get LSUBP off stack
       CF47 06,52
[2441] CF49 8F,52           DCZ  @FAC8             If not top level call
[2442] CF4B 6F,53           BS   GCF53
[2443] CF4D BF,56,02        DST  NLNADD+15,@FAC12  Display location of name
       CF50 F1
[2444] CF51 4F,16           BR   TRAC55
[2445]               * Now find original number
[2446] CF53 BD,5E,EF GCF53  DST  V@-6(@FAC10),@ARG2 Get pointer to line number
       CF56 FF,FA,54
[2447] CF59 06,CF,69        CALL GETLN2            Get the actual line number
[2448] CF5C BF,20,02        DST  NLNADD+15,@VARW   Place to put line number
       CF5F F1
[2449] CF60 06,6F,BA        CALL DISO              Display the line number
[2450] CF63 0F,83           XML  SCROLL            Scroll the mess up
[2451]               * RETURN WITH CONDITION BIT SET
[2452] CF65 D4,00,00 RTNSET CEQ  @>8300,@>8300     SET CONDITION BIT
[2453] CF68 01       RETNOS RTNC
[2454] CF69 97,5E    GETLN2 DDECT @ARG2
[2455] CF6B 06,80,2C        CALL GRSUB2            Read 2 bytes of data from ERA
[2456] CF6E 5E              BYTE >5E             * (use GREAD1) or VDP   (>5E=AR
[2457] CF6F BD,5E,58        DST  @EEE1,@ARG2       Put the result into @ARG2
[2458] CF72 00              RTN
[2459]               * Given a specific PGMPTR (in ARG) find the line number of
[2460]               * the line it points into and put the actual line number
[2461]               * in ARG2
[2462] CF73 BD,60,30 FNDLNE DST  @STLN,@ARG4       Get pointer into # buffer
[2463] CF76 95,60           DINCT @ARG4            Point at the line pointer
[2464] CF78 BD,5E,60        DST  @ARG4,@ARG2       Get line pointer
[2465] CF7B 87,62           DCLR @ARG6             Start with a zero value
[2466] CF7D C9,60,32 GCF7D  DCHE @ENLN,@ARG4       While in line buffer
[2467] CF80 6F,9C           BS   GCF9C
[2468] CF82 06,80,2C        CALL GRSUB2            Get the line # from ERAM/VDP
[2469] CF85 60              BYTE >60             * @ARG4: Source address on ERAM
[2470] CF86 CD,58,5C        DCGT @ARG,@EEE1
[2471] CF89 6F,96           BS   GCF96
[2472] CF8B C5,58,62        DCH  @ARG6,@EEE1       If closer
[2473] CF8E 4F,96           BR   GCF96
[2474] CF90 BD,5E,60        DST  @ARG4,@ARG2       Make it the one
[2475] CF93 BD,62,58        DST  @EEE1,@ARG6
[2476] CF96 A3,60,00 GCF96  DADD 4,@ARG4           Goto next line in buffer
       CF99 04
[2477] CF9A 4F,7D           BR   GCF7D
[2478] CF9C 06,CF,69 GCF9C  CALL GETLN2            Get the line number
[2479] CF9F B2,5E,7F        AND  >7F,@ARG2         Reset the breakpoint if any
[2480] CFA2 00              RTN
[2481]               ***********************************************************

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0045 
RXB 2022
[2482] CFA3 8E,A3,BB USERFG CZ   V@CONFLG         USER FLAG set?
[2483] CFA6 6F,B1           BS   NOUSR            Yes, skip ahead
[2484] CFA8 D7,A8,C2        DCEQ >0900,V@>08C2    USER PAB there?
       CFAB 09,00
[2485] CFAD 70,F3           BS   GD0F3            Yes, flag set
[2486] CFAF 50,CC           BR   SAVLN5
[2487] CFB1 34,4A,A8 NOUSR  MOVE @FAC,V*VARW,V@RECBUF Save line
       CFB4 C0,B0,20
[2488] CFB7 50,CC           BR   SAVLN5           Continue      
[2489]               ***********************************************************
[2490]               *
[2491]               * EDTZZ0 EQU >D000
[2492]              
[2493]                      AORG >1000
[2494]               ***********************************************************
[2495]               * EDIT routine - display requested line and edit any change
[2496]               *                in the program segment.
[2497]               *
[2498]               * FAC contains the line number just read in
[2499] D000 D5,30,32 EDTZZ0 DCEQ @ENLN,@STLN       If no program
[2500] D003 50,08           BR   GD008
[2501] D005 05,64,EF        B    ILLST
[2502] D008 0F,7E    GD008  XML  SPEED
[2503] D00A 03              BYTE SEETWO          * Try to find the line (# in FA
[2504] D00B 50,AC           BR   EDTZ08            * LINE NOT FOUND
[2505] D00D BE,06,1D EDTZ00 ST   29,@CCPPTR        Force new record on first lin
[2506]               * The entry in the line number table is in EXTRAM
[2507] D010 BE,17,60        ST   OFFSET,@DSRFLG    Set screen output mode
[2508] D013 BE,07,1C        ST   28,@RECLEN        Select standard record length
[2509] D016 87,04           DCLR @PABPTR           I/O to the screen
[2510] D018 8E,80,84        CZ   @RAMTOP           If ERAM
[2511] D01B 70,20           BS   GD020
[2512] D01D 06,80,2A        CALL GRMLST            Prepare to list from ERAM
[2513] D020 06,6A,74 GD020  CALL LLIST             List the line
[2514]               * VARW contains the position of the first character followi
[2515]               *      the line number.
[2516] D023 C4,06,07        CH   @RECLEN,@CCPPTR   Exactly at end of line
[2517] D026 50,32           BR   GD032
[2518] D028 0F,83           XML  SCROLL            Scroll up one line
[2519] D02A A7,20,00        DSUB 32,@VARW          And correct both VARW
       D02D 20
[2520] D02E A7,08,00        DSUB 28,@CCPADR         and CCPADR
       D031 1C
[2521] D032 BD,5E,20 GD032  DST  @VARW,@ARG2       Set cursor at start position
[2522] D035 B2,5F,E0        AND  >E0,@ARG3         Back to beginning of line
[2523] D038 A3,5E,00        DADD 157,@ARG2         Compute theoretically highest
       D03B 9D
[2524] D03C BD,2A,08        DST  @CCPADR,@VARA     Use current high position
[2525]               *                              as high
[2526] D03F C9,5E,2A        DCHE @VARA,@ARG2       If > 4 then lines-correct
[2527] D042 70,48           BS   GD048
[2528] D044 BF,5E,03        DST  >031D,@ARG2       Allow for one more line
       D047 1D
[2529]               *----------------------------------------------------------
[2530]               * Fix "You cannot add characters to a line whose number is
[2531]               *      multiple of 256, if that line was reached ty typing
[2532]               *      either an up arrow or a down arrow from a previous
[2533]               *      line" bug, the following line is changed
[2534]               *      CALL READL1            Allow user to make change
[2535] D048 06,6A,8A GD048  CALL READL3            Allow user to make change
[2536]               *----------------------------------------------------------
[2537] D04B 06,D0,AF        CALL SAVLIN            Save the line for recall
[2538] D04E 8E,80,84        CZ   @RAMTOP           If ERAM exists
[2539] D051 70,56           BS   GD056

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0046 
RXB 2022
[2540] D053 BD,2E,58        DST  @FAC14,@EXTRAM     saves EXTRAM in FAC
[2541] D056 DA,45,01 GD056  CLOG 1,@FLAG           Autonumber
[2542] D059 50,79           BR   EDTZ01
[2543] D05B D6,75,0B        CEQ  UPARR,@RKEY       Ended in UP arrow
[2544] D05E 50,6B           BR   GD06B
[2545] D060 A3,2E,00        DADD 4,@EXTRAM         Point at next line to list
       D063 04
[2546] D064 C5,2E,32        DCH  @ENLN,@EXTRAM     Doesn't exist
[2547] D067 70,79           BS   EDTZ01
[2548] D069 50,7E           BR   EDTZ02
[2549] D06B D6,75,0A GD06B  CEQ  DWNARR,@RKEY      Want next program line
[2550] D06E 50,85           BR   GD085
[2551] D070 A7,2E,00        DSUB 4,@EXTRAM         Point at next line to list
       D073 04
[2552] D074 C9,2E,30        DCHE @STLN,@EXTRAM     Passed high program
[2553] D077 70,7E           BS   EDTZ02
[2554] D079 BE,75,0D EDTZ01 ST   CHRTN,@RKEY       Set no more editing
[2555] D07C 50,85           BR   GD085
[2556] D07E 06,80,2E EDTZ02 CALL GRSUB3            Read from  ERAM, use GREAD
[2557]               *                              or VDP, Reset possible
[2558]               *                              breakpoint too
[2559] D081 2E              BYTE >2E             * @EXTRAM: Source address on ER
[2560] D082 BD,62,58        DST  @EEE1,@ARG6       Save for general use
[2561] D085 8E,60    GD085  CZ   @ARG4             If current, the line was chan
[2562] D087 50,A1           BR   GD0A1
[2563] D089 BF,0A,08        DST  CRNBUF,@RAMPTR    Initialize crunch pointer
       D08C 20
[2564] D08D 0F,7F           XML  CRUNCH            Crunch the input line
[2565] D08F 00              BYTE 0               * Normal crunch mode
[2566] D090 8F,22           DCZ  @ERRCOD           If error
[2567] D092 70,97           BS   GD097
[2568] D094 05,64,33        B    TOPL42
[2569]               *----------------------------------------------------------
[2570]               * Fix "Illegal line number 0 can be created by editting a
[2571]               *      line" bug, 5/23/81
[2572]               *  Add the following line, and the label TOPL55 at line
[2573]               *   (TOPL45+9)
[2574] D097 8F,4A    GD097  DCZ  @FAC              If line number has
[2575] D099 50,9E           BR   GD09E              been deleted - treated as
[2576] D09B 05,64,62        B    TOPL55              imperative state
[2577]               *----------------------------------------------------------
[2578] D09E 06,66,CF GD09E  CALL EDITLN            And edit into program buffer
[2579] D0A1 BD,4A,62 GD0A1  DST  @ARG6,@FAC        Line number for next line
[2580] D0A4 D6,75,0D        CEQ  CHRTN,@RKEY       Stop on carriage return
[2581] D0A7 50,08           BR   GD008
[2582] D0A9 05,63,DD        B    TOPL15            Don't kill the symbol table
[2583]               * JUMP ALWAYS
[2584] 698C          G698C  EQU  >698C
[2585] D0AC 05,69,8C EDTZ08 B    G698C             LINE NOT FOUND
[2586]               * Save input line for edit recall
[2587] D0AF B2,21,E0 SAVLIN AND  >E0,@VARW+1       Correct in case autonumber
[2588] D0B2 94,21           INCT @VARW+1           Skip edge characters
[2589] D0B4 BD,4A,2A        DST  @VARA,@FAC        Get pointer to end of line
[2590] D0B7 A5,4A,20        DSUB @VARW,@FAC        Compute length of line
[2591] D0BA 70,CC           BS   SAVLN5            If zero, length line
[2592] D0BC C7,4A,00        DCH  160,@FAC          If line longer then buffer
       D0BF A0
[2593] D0C0 50,C6           BR   GD0C6
[2594] D0C2 BF,4A,00        DST  160,@FAC          Default to max buffer size
       D0C5 A0
[2595]               * RXB PATCH CODE FIX USER / REDO KEY **********************
[2596]               * GD0C6  MOVE @FAC,V*VARW,V@RECBUF  Save line
[2597] D0C6 05,CF,A3 GD0C6  B    USERFG            Check for USER FLAG
[2598]              

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0047 
RXB 2022
[2599]                      AORG >10CC 
[2600] D0CC BD,A3,8C SAVLN5 DST  @VARW,V@BUFSRT    Save pointer to line start
       D0CF 20
[2601] D0D0 BD,A3,8E        DST  @VARA,V@BUFEND    Save pointer to line end
       D0D3 2A
[2602] D0D4 CB,A3,8C GD0D4  DCHE >0262,V@BUFSRT    If try more than 160
       D0D7 02,62
[2603] D0D9 70,E7           BS   GD0E7
[2604]               *----------------------------------------------------------
[2605]               * Fix bug "Delete characters while in REDO mode, next REDO
[2606]               *          still may show those deleted characters, 5/26/81
[2607]               *   Replace following line
[2608]               *      DST  >02FE,V@BUFEND    Update pointer to line end
[2609] D0DB A3,A3,8E        DADD 32,V@BUFEND       Shift the whole buffer 32
       D0DE 00,20
[2610]               *                              down at a time
[2611]               *----------------------------------------------------------
[2612] D0E0 A3,A3,8C        DADD 32,V@BUFSRT       Update pointer for 160 chars
       D0E3 00,20
[2613] D0E5 50,D4           BR   GD0D4
[2614]               *----------------------------------------------------------
[2615]               * Also add following 3 lines for the bug above
[2616] D0E7 C7,A3,8E GD0E7  DCH  >02FE,V@BUFEND    Update pointer to line end
       D0EA 02,FE
[2617] D0EC 50,F3           BR   GD0F3
[2618] D0EE BF,A3,8E        DST  >02FE,V@BUFEND
       D0F1 02,FE
[2619]               *----------------------------------------------------------
[2620] D0F3 00       GD0F3  RTN
[2621]               ***********************************************************
[2622]              
[2623]                      AORG >10F4 
[2624]               ***********************************************************
[2625]               * AMS BRANCH TABLE FOR AMS ROUTINES  *    FIXED           *
[2626] D0F4 49,D9           BR   MAPAMS                   *     AT             *
[2627] D0F6 49,BE           BR   PASAMS                   *    >D0F4           *
[2628] D0F8 49,D0           BR   OFFAMS                   *  PERMANENTLY       *
[2629] D0FA 49,C7           BR   ONAMS                    *   ADD TO THE       *
[2630] D0FC 57,BE           BR   SISRON                   *    TABLE IF        *
[2631] D0FE 57,E3           BR   SISROF                   *    NEEDED.         *
[2632]               ***********************************************************
[2633] D100 B6,80,C2 RUNRXB OR   >10,@>83C2        QUIT KEY
       D103 10
[2634] D104 B2,45,F7        AND  >F7,@FLAG         Set flag
[2635] D107 BD,02,7E        DST  @YPT,@STPT        Save Row/Col values
[2636] D10A 07,80           ALL  >80
[2637] D10C D7,AF,22        DCEQ >994A,V@>2254
       D10F 54,99,4A
[2638] D112 72,70           BS   RUNXB
[2639] D114 D6,A3,71        CEQ  '1',V@LODFLG
       D117 31
[2640] D118 71,32           BS   SCNKEY
[2641] D11A 8E,A3,71        CZ   V@LODFLG
[2642] D11D 71,32           BS   SCNKEY
[2643] D11F D6,A3,71        CEQ  >3A,V@LODFLG
       D122 3A
[2644] D123 79,D5           BS   RXBRUN
[2645] D125 03              SCAN
[2646] D126 D6,75,FF        CEQ  >FF,@RKEY
[2647] D129 52,61           BR   LDKEY
[2648] D12B BC,A8,24        ST   V@LODFLG,V@>0824
       D12E A3,71
[2649] D130 52,68           BR   SRCHLP
[2650] D132 08       SCNKEY FMT

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0048 
RXB 2022
[2651]               *
[2652]               * VERSION = 2022  
[2653]               *
[2654]               *     R  X  B     
[2655]               *     creator     
[2656]               * RICH GILBERTSON 
[2657]               *
[2658] D133 FC,60           SCRO >60
[2659] D135 FE,00           ROW  0
[2660] D137 FF,08           COL  8
[2661] D139 0D,56,45        HTEX 'VERSION = 2022'              
       D13C 52,53,49
       D13F 4F,4E,20
       D142 3D,20,32
       D145 30,32,32
[2662] D148 FE,02           ROW  2                  
[2663] D14A FF,0B           COL  11
[2664] D14C 06,52,20        HTEX 'R  X  B'                  
       D14F 20,58,20
       D152 20,42
[2665] D154 FE,04           ROW  4                
[2666] D156 FF,0B           COL  11                                      
[2667] D158 06,63,72        HTEX 'creator'
       D15B 65,61,74
       D15E 6F,72
[2668] D160 FE,06           ROW  6
[2669] D162 FF,08           COL  8
[2670] D164 0E,52,49        HTEX 'RICH GILBERTSON'
       D167 43,48,20
       D16A 47,49,4C
       D16D 42,45,52
       D170 54,53,4F
       D173 4E
[2671] D174 FE,0D           ROW  13
[2672] D176 FF,00           COL  0
[2673] D178 1F,3E,3E        HTEX '>> press ============= result <<'
       D17B 20,70,72
       D17E 65,73,73
       D181 20,3D,3D
       D184 3D,3D,3D
       D187 3D,3D,3D
       D18A 3D,3D,3D
       D18D 3D,3D,20
       D190 72,65,73
       D193 75,6C,74
       D196 20,3C,3C
[2674] D199 FE,0F           ROW  15
[2675] D19B FF,02           COL  2
[2676] D19D 15,41,4E        HTEX 'ANY KEY    = DSK#.LOAD'
       D1A0 59,20,4B
       D1A3 45,59,20
       D1A6 20,20,20
       D1A9 3D,20,44
       D1AC 53,4B,23
       D1AF 2E,4C,4F
       D1B2 41,44
[2677] D1B4 FE,11           ROW  17
[2678] D1B6 FF,02           COL  2
[2679] D1B8 16,45,4E        HTEX 'ENTER      = DSK#.UTIL1'
       D1BB 54,45,52
       D1BE 20,20,20
       D1C1 20,20,20
       D1C4 3D,20,44
       D1C7 53,4B,23

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0049 
RXB 2022
       D1CA 2E,55,54
       D1CD 49,4C,31
[2680] D1D0 FE,13           ROW  19
[2681] D1D2 FF,02           COL  2
[2682] D1D4 16,28,43        HTEX '(COMMA) ,  = DSK#.BATCH'
       D1D7 4F,4D,4D
       D1DA 41,29,20
       D1DD 2C,20,20
       D1E0 3D,20,44
       D1E3 53,4B,23
       D1E6 2E,42,41
       D1E9 54,43,48
[2683] D1EC FE,15           ROW  21
[2684] D1EE FF,02           COL  2
[2685] D1F0 1C,53,50        HTEX 'SPACE BAR  = RXB COMMAND MODE'
       D1F3 41,43,45
       D1F6 20,42,41
       D1F9 52,20,20
       D1FC 3D,20,52
       D1FF 58,42,20
       D202 43,4F,4D
       D205 4D,41,4E
       D208 44,20,4D
       D20B 4F,44,45
[2686] D20E FE,17           ROW  23
[2687] D210 FF,02           COL  2
[2688] D212 1C,28,50        HTEX '(PERIOD) . = EDITOR ASSEMBLER'
       D215 45,52,49
       D218 4F,44,29
       D21B 20,2E,20
       D21E 3D,20,45
       D221 44,49,54
       D224 4F,52,20
       D227 41,53,53
       D22A 45,4D,42
       D22D 4C,45,52
[2689] D230 FB              FEND
[2690] D231 BF,58,10        DST  >1000,@FAC+14     DELAY VALUE
       D234 00
[2691] D235 BF,7E,0F RSCAN  DST  >0F12,@YPT
       D238 12
[2692] D239 06,D3,31        CALL CBKEY
[2693] D23C 72,44           BS   RSCAN2
[2694] D23E 93,58           DDEC @FAC+14
[2695] D240 72,68           BS   SRCHLP
[2696] D242 52,35           BR   RSCAN
[2697] D244 D6,75,0D RSCAN2 CEQ  >0D,@RKEY         ENTER?
[2698] D247 72,81           BS   UTIL1
[2699] D249 D6,75,2C        CEQ  >2C,@RKEY         COMMA?
[2700] D24C 72,DE           BS   BATCH
[2701] D24E D6,75,2E        CEQ  >2E,@RKEY         PERIOD?
[2702] D251 72,CA           BS   UTIL4
[2703] D253 D6,75,30        CEQ  >30,@RKEY         0? (ZERO)
[2704] D256 52,61           BR   LDKEY
[2705] D258 31,00,0B        MOVE 11,G@WSD,V@CRNBUF WSD1.LOAD
       D25B A8,20,D3
       D25E 3F
[2706] D25F 90,75           INC  @RKEY             MAKE IT A 1
[2707] D261 86,A3,71 LDKEY  CLR  V@LODFLG
[2708] D264 BC,A8,24        ST   @RKEY,V@>0824
       D267 75
[2709] D268 07,80    SRCHLP ALL  >80               Clear Screen
[2710] D26A BD,7E,02        DST  @STPT,@YPT        Restore YPT/XPT
[2711] D26D 05,64,A0        B    SZRUNL

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0050 
RXB 2022
[2712]               * EA RUN XB PROGRAM OR SET SEARCH *************************
[2713] D270 35,00,32 RUNXB  MOVE 50,V@>2256,V@>0820
       D273 A8,20,AF
       D276 22,56
[2714] D278 86,A3,71        CLR  V@LODFLG
[2715] D27B 87,AF,22        DCLR V@>2254           Clear flag
       D27E 54
[2716] D27F 52,68           BR   SRCHLP
[2717]               ***********************************************************
[2718] D281 86,AF,22 UTIL1  CLR  V@>2256
       D284 56
[2719] D285 08              FMT
[2720] D286 FF,00           COL  0
[2721] D288 FE,0F           ROW  15
[2722] D28A 5F,20           HCHA 32,32
[2723] D28C FB              FEND
[2724] D28D 86,4A           CLR  @FAC
[2725] D28F BF,58,10        DST  >1000,@FAC+14    DELAY VALUE
       D292 00
[2726] D293 BE,42,35        ST   >35,@CHAT
[2727] D296 BF,7E,11 UTIL2  DST  >1112,@YPT
       D299 12
[2728] D29A 06,D3,31        CALL CBKEY
[2729] D29D 72,A5           BS   UTIL3
[2730] D29F 93,58           DDEC @FAC+14
[2731] D2A1 72,D7           BS   UTIL5
[2732] D2A3 52,96           BR   UTIL2
[2733] D2A5 D6,75,0D UTIL3  CEQ  >0D,@RKEY         ENTER?
[2734] D2A8 72,96           BS   UTIL2
[2735] D2AA D6,75,20        CEQ  >20,@RKEY         SPACE?
[2736] D2AD 72,61           BS   LDKEY
[2737] D2AF D6,75,2C        CEQ  >2C,@RKEY         COMMA?
[2738] D2B2 72,DE           BS   BATCH
[2739] D2B4 D6,75,2E        CEQ  >2E,@RKEY         PERIOD?
[2740] D2B7 72,DA           BS   UTIL6
[2741] D2B9 D6,75,30        CEQ  >30,@RKEY         0? (ZERO)
[2742] D2BC 52,CA           BR   UTIL4
[2743] D2BE 31,00,0C        MOVE 12,G@EAWSD,V@>2256
       D2C1 AF,22,56
       D2C4 D3,56
[2744] D2C6 90,75           INC  @RKEY
[2745] D2C8 52,D2           BR   EA0
[2746] D2CA 31,00,0C UTIL4  MOVE 12,G@EAU1,V@>2256
       D2CD AF,22,56
       D2D0 D3,4A
[2747] D2D2 BC,AF,22 EA0    ST   @RKEY,V@>225A
       D2D5 5A,75
[2748] D2D7 05,E0,25 UTIL5  B    GE025
[2749] D2DA 86,42    UTIL6  CLR  @CHAT
[2750] D2DC 52,D7           BR   UTIL5
[2751]               *********************************
[2752] D2DE 35,00,80 BATCH  MOVE 128,V@>01E0,V@>01E1
       D2E1 A1,E1,A1
       D2E4 E0
[2753] D2E5 BF,58,10        DST  >1000,@FAC+14     LOAD DELAY
       D2E8 00
[2754] D2E9 86,4A           CLR  @FAC
[2755] D2EB BF,7E,13 BATCH1 DST  >1312,@YPT        ROW/COL
       D2EE 12
[2756] D2EF 06,D3,31        CALL CBKEY
[2757] D2F2 72,FA           BS   BATCH2
[2758] D2F4 93,58           DDEC @FAC+14
[2759] D2F6 73,10           BS   BATCH3
[2760] D2F8 52,EB           BR   BATCH1

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0051 
RXB 2022
[2761] D2FA D6,75,0D BATCH2 CEQ  >0D,@RKEY         ENTER?
[2762] D2FD 71,32           BS   SCNKEY
[2763] D2FF D6,75,20        CEQ  >20,@RKEY         SPACE?
[2764] D302 71,32           BS   SCNKEY
[2765] D304 D6,75,2C        CEQ  >2C,@RKEY         COMMA?
[2766] D307 72,EB           BS   BATCH1
[2767] D309 D6,75,2E        CEQ  >2E,@RKEY         PERIOD?
[2768] D30C 71,32           BS   SCNKEY
[2769] D30E 53,13           BR   BATCH4
[2770] D310 BE,75,31 BATCH3 ST   >31,@RKEY         1 IN RKEY
[2771] D313 BE,A8,C0 BATCH4 ST   >20,V@>08C0
       D316 20
[2772] D317 35,00,50        MOVE 80,V@>08C0,V@>08C1
       D31A A8,C1,A8
       D31D C0
[2773] D31E 31,00,14        MOVE 20,G@UBATCH,V@>08C0
       D321 A8,C0,D3
       D324 62
[2774] D325 84,A3,BB        INV  V@CONFLG          SET USER FLAG >FF
[2775] D328 BC,A8,CD        ST   @RKEY,V@>08CD
       D32B 75
[2776] D32C 86,A3,71        CLR  V@LODFLG
[2777] D32F 5A,C7           BR   NEWSZ
[2778]               *********************************
[2779] D331 BC,80,C1 CBKEY  ST   @>8379,@>83C1
       D334 79
[2780] D335 DA,59,01        CLOG >01,@FAC+15
[2781] D338 53,3E           BR   CBKEY2
[2782] D33A C0,4A,7D        EX   @>837D,@FAC
[2783] D33D 03              SCAN
[2784] D33E 01       CBKEY2 RTNC
[2785]               **************************************
[2786]               * RXB HARD DRIVE PATH
[2787] D33F 09       WSD    BYTE 9
[2788] D340 57,53,44        TEXT 'WSD1.LOAD'
       D343 31,2E,4C
       D346 4F,41,44
[2789] D349 00              BYTE 0
[2790]               * EDITOR ASSEMBLER
[2791] D34A 0A,44,53 EAU1   STRI 'DSK1.UTIL1'
       D34D 4B,31,2E
       D350 55,54,49
       D353 4C,31
[2792] D355 0D              BYTE >0D
[2793] D356 0A,57,53 EAWSD  STRI 'WSD1.UTIL1'
       D359 44,31,2E
       D35C 55,54,49
       D35F 4C,31
[2794] D361 0D              BYTE >0D
[2795]               * USER PAB & BATCH FILE
[2796] D362 00,14,09 UBATCH BYTE 0,>14,9,0,80,0,0,0,0
       D365 00,50,00
       D368 00,00,00
[2797] D36B 0A,44,53        STRI 'DSK1.BATCH'
       D36E 4B,31,2E
       D371 42,41,54
       D374 43,48
[2798]               * 
[2799]               ***********************************************************
[2800]               * CALL BEEP                                               *
[2801]               ***********************************************************
[2802] D376 D3,84    BEEP   DATA HONK
[2803] D378 04,42,45        STRI 'BEEP'            
       D37B 45,50

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0052 
RXB 2022
[2804] D37D D3,7F           DATA $+2
[2805] D37F 06,00,34        CALL ACCTON
[2806] D382 41,E0           BR   LDRET2
[2807]               ***********************************************************
[2808]               * CALL HONK                                               *
[2809]               ***********************************************************
[2810] D384 D3,92    HONK   DATA MODZ
[2811] D386 04,48,4F        STRI 'HONK'            
       D389 4E,4B
[2812] D38B D3,8D           DATA $+2
[2813] D38D 06,00,36        CALL BADTON
[2814] D390 41,E0           BR   LDRET2
[2815]               ***********************************************************
[2816]               * CALL MOD(number,divisor,quotiant,remanider[,...])       *
[2817]               *   M=N-INT(N/D)*D                                        *
[2818]               ***********************************************************
[2819] D392 D3,DF    MODZ   DATA SBIAS
[2820] D394 03,4D,4F        STRI 'MOD'
       D397 44
[2821] D398 D3,9A           DATA $+2
[2822] D39A 06,BF,E0        CALL COMB
[2823] D39D 06,BF,F6 MODAGN CALL SUBLP3           Get NUMBER 
[2824] D3A0 8F,4A           DCZ  @FAC             0?
[2825] D3A2 65,7B           BS   ERRBV            ERROR BAD VALUE
[2826] D3A4 86,00           CLR  @PAD             Clear PAD
[2827] D3A6 35,00,08        MOVE 8,@PAD,@PAD1     Ripple 8 bytes
       D3A9 01,00
[2828] D3AB BD,02,4A        DST  @FAC,@PAD2        Save NUMBER
[2829] D3AE 06,BF,F6        CALL SUBLP3           Get DIVISOR
[2830] D3B1 8F,4A           DCZ  @FAC             0?
[2831] D3B3 65,7B           BS   ERRBV            ERROR BAD VALUE
[2832] D3B5 BD,06,4A        DST  @FAC,@PAD6       Save DIVISOR
[2833] D3B8 0F,79           XML  PGMCHR           Skip COMMA
[2834] D3BA AD,00,06        DDIV @PAD6,@PAD       NUMBER/DIVISOR
[2835] D3BD 06,BF,F0        CALL SNDER            Get variable info
[2836] D3C0 06,BF,FA        CALL CLRFAC           Clear for FP
[2837] D3C3 BD,4A,00        DST  @PAD,@FAC        Get QUOTIENT
[2838] D3C6 06,BF,F2        CALL CIFSND           Send QUOTIENT
[2839] D3C9 0F,79           XML  PGMCHR           Skip COMMA
[2840] D3CB 06,BF,F0        CALL SNDER            Get variable info 
[2841] D3CE 06,BF,FA        CALL CLRFAC           Clear for FP       
[2842] D3D1 BD,4A,02        DST  @PAD2,@FAC       REMAINDER
[2843] D3D4 06,BF,F2        CALL CIFSND           Send REMAINDER 
[2844] D3D7 D6,42,B3        CEQ  >B3,@CHAT        ,?
[2845] D3DA 73,9D           BS   MODAGN           Yes 
[2846] D3DC 05,A0,1C ENDMOD B    LNKRTN           Done return
[2847]               *********************************************************
[2848]               * CALL BIAS(numeric-variable,string-variable)           *
[2849]               *********************************************************
[2850] D3DF D4,1C    SBIAS  DATA SRIGHT
[2851] D3E1 04,42,49        STRI 'BIAS'            BIAS
       D3E4 41,53
[2852] D3E6 D3,E8           DATA $+2
[2853] D3E8 06,BF,E0        CALL COMB              (
[2854] D3EB 06,BF,FC BIASAG CALL GETNUM            Get number 
[2855] D3EE BD,00,4A        DST  @FAC,@PAD         Save number
[2856] D3F1 06,BF,E6        CALL STRGET            Get string
[2857] D3F4 BD,04,4E        DST  @FAC4,@PAD4       Save location
[2858] D3F7 BD,06,50        DST  @FAC6,@PAD6       Save length  
[2859] D3FA BC,4B,B0 BIASLP ST   V*PAD4,@FAC1      * Character.
       D3FD 04
[2860] D3FE 8F,00           DCZ  @PAD              0?
[2861] D400 74,07           BS   BIASM             Yes.
[2862] D402 A2,4B,60        ADD  96,@FAC1          ADD OFFSET

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0053 
RXB 2022
[2863] D405 54,0A           BR   BIASSV
[2864] D407 A6,4B,60 BIASM  SUB  96,@FAC1          MINUS OFFSET
[2865] D40A BC,B0,04 BIASSV ST   @FAC1,V*PAD4      Store it 
       D40D 4B
[2866] D40E 91,04           DINC @PAD4             Next one in string
[2867] D410 93,06           DDEC @PAD6             Counter-1
[2868] D412 53,FA           BR   BIASLP            Loop till zero
[2869] D414 D6,42,B3        CEQ  >B3,@CHAT         ,?
[2870] D417 73,EB           BS   BIASAG            Yes 
[2871] D419 05,A0,1C RTNLNK B    LNKRTN            Done return
[2872]               *********************************************************
[2873]               * CALL SCROLLRIGHT(repetion,string,...)                 *
[2874]               *********************************************************
[2875] D41C D4,81    SRIGHT DATA SLEFT
[2876] D41E 0B,53,43        STRI 'SCROLLRIGHT'     SCROLLRIGHT
       D421 52,4F,4C
       D424 4C,52,49
       D427 47,48,54
[2877] D42A D4,2C           DATA $+2
[2878] D42C D6,42,B7        CEQ  LPARZ,@CHAT       (?
[2879] D42F 74,37           BS   SRAGN             Normal 
[2880] D431 BF,4A,00        DST  1,@FAC            Defualt 1 line
       D434 01
[2881] D435 54,3E           BR   SR1L              Go with 1 line only
[2882] D437 06,BF,FC SRAGN  CALL GETNUM            Skip comma,REPETITION,comma
[2883] D43A 8F,4A           DCZ  @FAC              0?
[2884] D43C 65,7B           BS   ERRBV             ERROR BAD VALUE
[2885] D43E BD,00,4A SR1L   DST  @FAC,@PAD         ROLL REPETITION 
[2886] D441 86,8F,DD        CLR  @>6004            Set ROM3 page
       D444 04
[2887] D445 0F,70    SRLOOP XML  RROLL             RIGHT ROLL ASSEMBLY
[2888] D447 BD,04,00        DST  @PAD,@PAD4        Save ROLL REPETITION
[2889] D44A 87,02           DCLR @PAD2             Screen Address
[2890] D44C BE,00,20        ST   32,@PAD           Space
[2891] D44F BF,4A,00        DST  24,@FAC           Repetition
       D452 18
[2892] D453 0F,75           XML  VCHAR             Disply them
[2893] D455 BD,00,04        DST  @PAD4,@PAD        Restore ROLL REPETITION
[2894] D458 93,00           DDEC @PAD              REPETITION-1
[2895] D45A 54,45           BR   SRLOOP            0? No loop
[2896] D45C D6,42,B6        CEQ  RPARZ,@CHAT       )?
[2897] D45F 74,7F           BS   SROUT             Done
[2898] D461 06,D5,B0        CALL SSNCHK            Skip comma, $/#  
[2899] D464 8F,50           DCZ  @FAC6             ZERO LENGTH?
[2900] D466 74,7F           BS   SROUT             EXIT 
[2901] D468 CB,50,00        DCHE 25,@FAC6          MAX LENGTH?      
       D46B 19
[2902] D46C 54,72           BR   SR0               No
[2903] D46E BF,50,00        DST  24,@FAC6          Set new MAX LENGTH       
       D471 18
[2904] D472 87,02    SR0    DCLR @PAD2             Screen Address
[2905] D474 86,8F,DD        CLR  @>6004            Set ROM3 page
       D477 04
[2906] D478 0F,78           XML  VPUT              Put String on screen
[2907] D47A D6,42,B3        CEQ  >B3,@CHAT         ,?
[2908] D47D 74,37           BS   SRAGN             Yes, loop 
[2909] D47F 54,19    SROUT  BR   RTNLNK            Done return
[2910]               *********************************************************
[2911]               * CALL SCROLLLEFT(repetion,string,...)                  *
[2912]               *********************************************************
[2913] D481 D4,E9    SLEFT  DATA SUP
[2914] D483 0A,53,43        STRI 'SCROLLLEFT'      SCROLLLEFT
       D486 52,4F,4C
       D489 4C,4C,45

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0054 
RXB 2022
       D48C 46,54
[2915] D48E D4,90           DATA $+2
[2916] D490 D6,42,B7        CEQ  LPARZ,@CHAT       (?
[2917] D493 74,9B           BS   SLAGN             Normal 
[2918] D495 BF,4A,00        DST  1,@FAC            Defualt 1 line
       D498 01
[2919] D499 54,A2           BR   SL1L              Go with 1 line only
[2920] D49B 06,BF,FC SLAGN  CALL GETNUM            Skip comma,REPETITION,comma
[2921] D49E 8F,4A           DCZ  @FAC              0?
[2922] D4A0 65,7B           BS   ERRBV             ERROR BAD VALUE
[2923] D4A2 BD,00,4A SL1L   DST  @FAC,@PAD         REPETITION 
[2924] D4A5 86,8F,DD        CLR  @>6004            Set ROM3 page
       D4A8 04
[2925] D4A9 0F,71    SLLOOP XML  LROLL             RIGHT ROLL ASSEMBLY
[2926] D4AB BD,04,00        DST  @PAD,@PAD4        Save ROLL REPETITION
[2927] D4AE BF,02,00        DST  31,@PAD2          Screen Address 
       D4B1 1F
[2928] D4B2 BE,00,20        ST   32,@PAD           Space
[2929] D4B5 BF,4A,00        DST  24,@FAC           Repetition
       D4B8 18
[2930] D4B9 0F,75           XML  VCHAR             Disply them
[2931] D4BB BD,00,04        DST  @PAD4,@PAD        Restore ROLL REPETITION
[2932] D4BE 93,00           DDEC @PAD              REPETITION-1
[2933] D4C0 54,A9           BR   SLLOOP            0? No loop
[2934] D4C2 D6,42,B6        CEQ  RPARZ,@CHAT       )?
[2935] D4C5 74,19           BS   RTNLNK            Done
[2936] D4C7 06,D5,B0        CALL SSNCHK            Skip comma, $/#  
[2937] D4CA 8F,50           DCZ  @FAC6             ZERO LENGTH?
[2938] D4CC 74,7F           BS   SROUT             EXIT 
[2939] D4CE CB,50,00        DCHE 25,@FAC6          MAX LENGTH?      
       D4D1 19
[2940] D4D2 54,D8           BR   SL0               No
[2941] D4D4 BF,50,00        DST  24,@FAC6          Set new MAX LENGTH     
       D4D7 18
[2942] D4D8 BF,02,00 SL0    DST  31,@PAD2          Screen Address
       D4DB 1F
[2943] D4DC 86,8F,DD        CLR  @>6004            Set ROM3 page
       D4DF 04
[2944] D4E0 0F,78           XML  VPUT              Put String on screen
[2945] D4E2 D6,42,B3        CEQ  >B3,@CHAT         ,?
[2946] D4E5 74,9B           BS   SLAGN             Yes, loop 
[2947] D4E7 54,19    SLOUT  BR   RTNLNK            Done return
[2948]               *********************************************************
[2949]               * CALL SCROLLUP(repetion,string,...)                    *
[2950]               *********************************************************
[2951] D4E9 D5,50    SUP    DATA SDOWN
[2952] D4EB 08,53,43        STRI 'SCROLLUP'        SCROLLU
       D4EE 52,4F,4C
       D4F1 4C,55,50
[2953] D4F4 D4,F6           DATA $+2
[2954] D4F6 D6,42,B7        CEQ  LPARZ,@CHAT       (?
[2955] D4F9 75,01           BS   SUAGN             Normal 
[2956] D4FB BF,4A,00        DST  1,@FAC            Defualt 1 line
       D4FE 01
[2957] D4FF 55,08           BR   SU1L              Go with 1 line only
[2958] D501 06,BF,FC SUAGN  CALL GETNUM            Skip comma,REPETITION,comma
[2959] D504 8F,4A           DCZ  @FAC              0?
[2960] D506 65,7B           BS   ERRBV             ERROR BAD VALUE  
[2961] D508 BD,00,4A SU1L   DST  @FAC,@PAD         REPETITION  
[2962] D50B 86,8F,DD        CLR  @>6004            Set ROM3 page
       D50E 04
[2963] D50F 0F,72    SULOOP XML  UROLL             UP ROLL ASSEMBLY
[2964] D511 BD,04,00        DST  @PAD,@PAD4        Save ROLL REPETITION
[2965] D514 BF,02,02        DST  736,@PAD2         Screen Address 

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0055 
RXB 2022
       D517 E0
[2966] D518 BE,00,20        ST   32,@PAD           Space
[2967] D51B BF,4A,00        DST  32,@FAC           Repetition
       D51E 20
[2968] D51F 0F,74           XML  HCHAR             Disply them
[2969] D521 BD,00,04        DST  @PAD4,@PAD        Restore ROLL REPETITION
[2970] D524 93,00           DDEC @PAD              REPETITION-1
[2971] D526 55,0F           BR   SULOOP            0? No loop
[2972] D528 D6,42,B6        CEQ  RPARZ,@CHAT       )?
[2973] D52B 74,19           BS   RTNLNK            Done
[2974] D52D 06,D5,B0        CALL SSNCHK            Skip comma, $/#   
[2975] D530 8F,50           DCZ  @FAC6             ZERO LENGTH?
[2976] D532 75,4E           BS   SUOUT             EXIT 
[2977] D534 CB,50,00        DCHE 33,@FAC6          MAX LENGTH?      
       D537 21
[2978] D538 55,3E           BR   SU0               No
[2979] D53A BF,50,00        DST  32,@FAC6          Set new MAX LENGTH       
       D53D 20
[2980] D53E BF,02,02 SU0    DST  736,@PAD2         Screen Address
       D541 E0
[2981] D542 BE,8F,DD        ST   >64,@>6004        Set ROM3 page
       D545 04,64
[2982] D547 0F,77           XML  HPUT              Put String on screen
[2983] D549 D6,42,B3        CEQ  >B3,@CHAT         ,?
[2984] D54C 75,01           BS   SUAGN             Yes, loop 
[2985] D54E 54,19    SUOUT  BR   RTNLNK            Done return
[2986]               *********************************************************
[2987]               * CALL SCROLLDOWN(repetion,string,...)                  *
[2988]               *********************************************************
[2989] D550 D5,DA    SDOWN  DATA ROLLR
[2990] D552 0A,53,43        STRI 'SCROLLDOWN'      SCROLLD
       D555 52,4F,4C
       D558 4C,44,4F
       D55B 57,4E
[2991] D55D D5,5F           DATA $+2
[2992] D55F D6,42,B7        CEQ  LPARZ,@CHAT       (?
[2993] D562 75,6A           BS   SDAGN             Normal 
[2994] D564 BF,4A,00        DST  1,@FAC            Defualt 1 line
       D567 01
[2995] D568 55,71           BR   SD1L              Go with 1 line only 
[2996] D56A 06,BF,FC SDAGN  CALL GETNUM            Skip comma,REPETITION,comma
[2997] D56D 8F,4A           DCZ  @FAC              0?
[2998] D56F 65,7B           BS   ERRBV             ERROR BAD VALUE
[2999] D571 BD,00,4A SD1L   DST  @FAC,@PAD         REPETITION  
[3000] D574 86,8F,DD        CLR  @>6004            Set ROM3 page
       D577 04
[3001] D578 0F,73    SDLOOP XML  DROLL             RIGHT ROLL ASSEMBLY
[3002] D57A BD,04,00        DST  @PAD,@PAD4        Save ROLL REPETITION
[3003] D57D 87,02           DCLR @PAD2             Screen Address 
[3004] D57F BE,00,20        ST   32,@PAD           Space
[3005] D582 BF,4A,00        DST  32,@FAC           Repetition
       D585 20
[3006] D586 0F,74           XML  HCHAR             Disply them
[3007] D588 BD,00,04        DST  @PAD4,@PAD        Restore ROLL REPETITION
[3008] D58B 93,00           DDEC @PAD              REPETITION-1
[3009] D58D 55,78           BR   SDLOOP            0? No loop
[3010] D58F D6,42,B6        CEQ  RPARZ,@CHAT       )?
[3011] D592 74,19           BS   RTNLNK            Done
[3012] D594 06,D5,B0        CALL SSNCHK            Skip comma, $/#  
[3013] D597 8F,50           DCZ  @FAC6             ZERO LENGTH?
[3014] D599 75,4E           BS   SUOUT             EXIT 
[3015] D59B CB,50,00        DCHE 33,@FAC6          MAX LENGTH?      
       D59E 21
[3016] D59F 55,A5           BR   SD0               No

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0056 
RXB 2022
[3017] D5A1 BF,50,00        DST  32,@FAC6          Set new MAX LENGTH      
       D5A4 20
[3018] D5A5 87,02    SD0    DCLR @PAD2             Screen Address   
[3019] D5A7 0F,77           XML  HPUT              Put String on screen
[3020] D5A9 D6,42,B3        CEQ  >B3,@CHAT         ,?
[3021] D5AC 75,6A           BS   SDAGN             Yes, loop 
[3022] D5AE 54,19    SDOUT  BR   RTNLNK            Done return  
[3023]               *******************************
[3024] D5B0 06,BF,E2 SSNCHK CALL STRFCH
[3025] D5B3 D6,4C,65        CEQ  >65,@FAC2
[3026] D5B6 75,D9           BS   SSNOUT
[3027] D5B8 86,55           CLR  @FAC11            Select XB FLP
[3028] D5BA 0F,73           XML  XBCNS             Convert Number to String
[3029] D5BC D6,90,55        CEQ  SPACE,*FAC11      Leading space?
       D5BF 20
[3030] D5C0 55,C6           BR   SSNGET
[3031] D5C2 90,55           INC  @FAC11            Supress space out
[3032] D5C4 92,56           DEC  @FAC12            Shorten length
[3033] D5C6 86,0C    SSNGET CLR  @BYTES
[3034] D5C8 BC,0D,56        ST   @FAC12,@BYTES+1        Length
[3035] D5CB 0F,71           XML  GETSTR                 Get string
[3036] D5CD 34,0C,B0        MOVE @BYTES,*FAC11,V*SREF   Store in VDP rollout
       D5D0 1C,90,55
[3037] D5D3 BD,4E,1C        DST  @SREF,@FAC4            VDP rollout address
[3038] D5D6 BD,50,0C        DST  @BYTES,@FAC6           Store length
[3039] D5D9 00       SSNOUT RTN
[3040]               *********************************************************
[3041]               * CALL ROLLRIGHT(repetion,...)                          *
[3042]               *********************************************************
[3043] D5DA D6,13    ROLLR  DATA ROLLL
[3044] D5DC 09,52,4F        STRI 'ROLLRIGHT'       ROLLRIGHT
       D5DF 4C,4C,52
       D5E2 49,47,48
       D5E5 54
[3045] D5E6 D5,E8           DATA $+2
[3046] D5E8 D6,42,B7        CEQ  LPARZ,@CHAT       (?
[3047] D5EB 75,F3           BS   ROLLRA            Normal 
[3048] D5ED BF,4A,00        DST  1,@FAC            Defualt 1 line
       D5F0 01
[3049] D5F1 55,FA           BR   ROLLR1             Go with 1 line only 
[3050] D5F3 06,BF,F6 ROLLRA CALL SUBLP3            Get Repetition
[3051] D5F6 8F,4A           DCZ  @FAC              0?
[3052] D5F8 76,0C           BS   RREXIT            Yes, exit
[3053] D5FA BD,00,4A ROLLR1 DST  @FAC,@PAD         SAVE NUMBER OF REPETITIONS
[3054] D5FD 86,8F,DD        CLR  @>6004            Set ROM3 page
       D600 04
[3055] D601 0F,70    RLOOP  XML  RROLL             RIGHT ROLL ASSEMBLY
[3056] D603 93,00           DDEC @PAD              REPETITION-1
[3057] D605 56,01           BR   RLOOP             0? No loop
[3058] D607 D6,42,B3        CEQ  COMMAZ,@CHAT      ,?
[3059] D60A 54,19           BR   RTNLNK            Done
[3060] D60C D6,42,B3 RREXIT CEQ  >B3,@CHAT         ,?
[3061] D60F 75,F3           BS   ROLLRA            Yes, loop 
[3062] D611 54,19           BR   RTNLNK            Done return
[3063]               *********************************************************
[3064]               * CALL ROLLLEFT(repetion,...)                           *
[3065]               *********************************************************
[3066] D613 D6,4B    ROLLL  DATA ROLLU
[3067] D615 08,52,4F        STRI 'ROLLLEFT'        ROLLLEFT
       D618 4C,4C,4C
       D61B 45,46,54
[3068] D61E D6,20           DATA $+2
[3069] D620 D6,42,B7        CEQ  LPARZ,@CHAT       (?
[3070] D623 76,2B           BS   ROLLLA            Normal 

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0057 
RXB 2022
[3071] D625 BF,4A,00        DST  1,@FAC            Defualt 1 line
       D628 01
[3072] D629 56,32           BR   ROLLL1            Go with 1 line only 
[3073] D62B 06,BF,F6 ROLLLA CALL SUBLP3            Get Repetition
[3074] D62E 8F,4A           DCZ  @FAC              0?
[3075] D630 76,44           BS   LREXIT            Yes, exit
[3076] D632 BD,00,4A ROLLL1 DST  @FAC,@PAD         SAVE NUMBER OF REPETITIONS
[3077] D635 86,8F,DD        CLR  @>6004            Set ROM3 page
       D638 04
[3078] D639 0F,71    LLOOP  XML  LROLL             RIGHT ROLL ASSEMBLY
[3079] D63B 93,00           DDEC @PAD              REPETITION-1
[3080] D63D 56,39           BR   LLOOP             0? No loop
[3081] D63F D6,42,B3        CEQ  COMMAZ,@CHAT      ,?
[3082] D642 54,19           BR   RTNLNK            Done
[3083] D644 D6,42,B3 LREXIT CEQ  >B3,@CHAT         ,?
[3084] D647 76,2B           BS   ROLLLA            Yes, loop 
[3085] D649 54,19           BR   RTNLNK            Done return
[3086]               *********************************************************
[3087]               * CALL ROLLUP(repetion,...)                             *
[3088]               *********************************************************
[3089] D64B D6,81    ROLLU  DATA ROLLD
[3090] D64D 06,52,4F        STRI 'ROLLUP'          ROLLUP
       D650 4C,4C,55
       D653 50
[3091] D654 D6,56           DATA $+2
[3092] D656 D6,42,B7        CEQ  LPARZ,@CHAT       (?
[3093] D659 76,61           BS   ROLLUA            Normal 
[3094] D65B BF,4A,00        DST  1,@FAC            Defualt 1 line
       D65E 01
[3095] D65F 56,68           BR   ROLLU1             Go with 1 line only 
[3096] D661 06,BF,F6 ROLLUA CALL SUBLP3            Get Repetition
[3097] D664 8F,4A           DCZ  @FAC              0?
[3098] D666 76,7A           BS   UREXIT            Yes, exit
[3099] D668 BD,00,4A ROLLU1 DST  @FAC,@PAD         SAVE NUMBER OF REPETITIONS
[3100] D66B 86,8F,DD        CLR  @>6004            Set ROM3 page
       D66E 04
[3101] D66F 0F,72    ULOOP  XML  UROLL             RIGHT ROLL ASSEMBLY
[3102] D671 93,00           DDEC @PAD              REPETITION-1
[3103] D673 56,6F           BR   ULOOP             0? No loop
[3104] D675 D6,42,B3        CEQ  COMMAZ,@CHAT      ,?
[3105] D678 54,19           BR   RTNLNK            Done
[3106] D67A D6,42,B3 UREXIT CEQ  >B3,@CHAT         ,?
[3107] D67D 76,61           BS   ROLLUA            Yes, loop 
[3108] D67F 54,19           BR   RTNLNK            Done return
[3109]               *********************************************************
[3110]               * CALL ROLLDOWN(repetion,...)                           *
[3111]               *********************************************************
[3112] D681 D6,B9    ROLLD  DATA EXECLK
[3113] D683 08,52,4F        STRI 'ROLLDOWN'        ROLLDOWN
       D686 4C,4C,44
       D689 4F,57,4E
[3114] D68C D6,8E           DATA $+2
[3115] D68E D6,42,B7        CEQ  LPARZ,@CHAT       (?
[3116] D691 76,99           BS   ROLLDA            Normal 
[3117] D693 BF,4A,00        DST  1,@FAC            Defualt 1 line
       D696 01
[3118] D697 56,A0           BR   ROLLD1            Go with 1 line only 
[3119] D699 06,BF,F6 ROLLDA CALL SUBLP3            Get Repetition
[3120] D69C 8F,4A           DCZ  @FAC              0?
[3121] D69E 76,B2           BS   DREXIT            Yes, exit
[3122] D6A0 BD,00,4A ROLLD1 DST  @FAC,@PAD         SAVE NUMBER OF REPETITIONS
[3123] D6A3 86,8F,DD        CLR  @>6004            Set ROM3 page
       D6A6 04
[3124] D6A7 0F,73    DLOOP  XML  DROLL             RIGHT ROLL ASSEMBLY

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0058 
RXB 2022
[3125] D6A9 93,00           DDEC @PAD              REPETITION-1
[3126] D6AB 56,A7           BR   DLOOP             0? No loop
[3127] D6AD D6,42,B3        CEQ  COMMAZ,@CHAT      ,?
[3128] D6B0 54,19           BR   RTNLNK            Done
[3129] D6B2 D6,42,B3 DREXIT CEQ  >B3,@CHAT         ,?
[3130] D6B5 76,99           BS   ROLLDA            Yes, loop 
[3131] D6B7 54,19           BR   RTNLNK            Done return
[3132]               ***********************************************************
[3133]               * CALL EXECUTE(address[,...])     BLWP @address           *
[3134]               ***********************************************************
[3135] D6B9 D6,E9    EXECLK DATA EXEBL
[3136] D6BB 07,45,58        STRI 'EXECUTE'
       D6BE 45,43,55
       D6C1 54,45
[3137] D6C3 D6,C5           DATA  $+2
[3138] D6C5 06,BF,E0        CALL COMB               (?
[3139] D6C8 06,BF,F6 EXAGN  CALL SUBLP3             Get address
[3140] D6CB 31,00,0C        MOVE 12,G@CPUPGM,@PAD   Load PGM
       D6CE 00,D6,DD
[3141] D6D1 BD,04,4A        DST  @FAC,@PAD4         Load address    
[3142] D6D4 0F,F0           XML  >F0                Execute address 
[3143] D6D6 D6,42,B3        CEQ  >B3,@CHAT          Comma?
[3144] D6D9 76,C8           BS   EXAGN              Repeat
[3145] D6DB 44,1D           BR   GC429
[3146]               ***********************************************************
[3147]               * CPU PROGRAM FOR >8300 SCATCH PAD SUBROUTINE EXECUTE     *
[3148]               ***********************************************************
[3149]               *                          AORG >8300                     *
[3150] D6DD 83,02    CPUPGM DATA >8302 * CPUPGM DATA >8302  First address.     *
[3151] D6DF 04,20           DATA >0420 *        BLWP @>834A Switch contex      *
[3152] D6E1 83,4A           DATA >834A *                    FAC not used       *
[3153] D6E3 04,E0           DATA >04E0 *        CLR  @>837C Clear for GPL      *
[3154] D6E5 83,7C           DATA >837C *                                       *
[3155] D6E7 04,5B           DATA >045B *        RT          Return to GPL.     *
[3156]                                 *        END                            *
[3157]               ***********************************************************
[3158]               * CALL EXECUTE(address[,...])       BL @address           *
[3159]               ***********************************************************
[3160] D6E9 D7,03    EXEBL  DATA PSAVE
[3161] D6EB 03,45,58        STRI 'EXE'
       D6EE 45
[3162] D6EF D6,F1           DATA  $+2
[3163] D6F1 06,BF,E0        CALL COMB               (?
[3164] D6F4 06,BF,F6 EXEBLA CALL SUBLP3
[3165] D6F7 BD,00,4A        DST  @FAC,@PAD          Load address    
[3166] D6FA 0F,F0           XML  >F0                Execute address 
[3167] D6FC D6,42,B3        CEQ  >B3,@CHAT          Comma?
[3168] D6FF 76,F4           BS   EXEBLA              Repeat
[3169] D701 44,1D           BR   GC429
[3170]               *********************************************************
[3171]               * CALL PSAVE(boundry,pathstring)                        *
[3172]               *********************************************************
[3173] D703 D7,2B    PSAVE  DATA PLOAD
[3174] D705 05,50,53        STRI 'PSAVE'           
       D708 41,56,45
[3175] D70B D7,0D           DATA $+2
[3176] D70D 06,BF,E0        CALL COMB          * ( ?
[3177] D710 06,D7,67 BSAVEL CALL MYSAL         * Get pathname
[3178] D713 BE,B0,00        ST   >06,V*PAD     * LOAD opcode
       D716 06
[3179] D717 35,10,00        MOVE >1000,@0(@TEMP),V@>40(@PAD) * COPY IT TO VDP
       D71A E0,40,00
       D71D CF,7D,00
       D720 16

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0059 
RXB 2022
[3180] D721 06,D7,53        CALL MYDOIT        * DSRLNK opcode
[3181] D724 D6,42,B3        CEQ  COMMAZ,@CHAT  * COMMA?
[3182] D727 77,10           BS   BSAVEL        * Yes loop
[3183] D729 43,05           BR   PEEK5         * Done
[3184]               **********************************************************
[3185]               * CALL PLOAD(boundry,pathstring)                         *
[3186]               **********************************************************
[3187] D72B D7,A5    PLOAD  DATA ISRON
[3188] D72D 05,50,4C        STRI 'PLOAD'           
       D730 4F,41,44
[3189] D733 D7,35           DATA $+2
[3190] D735 06,BF,E0        CALL COMB          * ( ?
[3191] D738 06,D7,67 BLOADL CALL MYSAL         * Get pathname
[3192] D73B BE,B0,00        ST   >05,V*PAD     * LOAD opcode
       D73E 05
[3193] D73F 06,D7,53        CALL MYDOIT        * DSRLNK opcode
[3194] D742 35,10,00        MOVE >1000,V@>40(@PAD),@0(@TEMP) * COPY IT TO RAM
       D745 CF,7D,00
       D748 16,E0,40
       D74B 00
[3195] D74C D6,42,B3        CEQ  COMMAZ,@CHAT  * COMMA?
[3196] D74F 77,38           BS   BLOADL        * Yes loop
[3197] D751 43,05           BR   PEEK5         * Done
[3198] D753 BD,56,00 MYDOIT DST  @PAD,@FAC12   * Get buffer address in VDP
[3199] D756 A2,57,09        ADD  9,@FAC13      * Point to name length
[3200] D759 06,00,10        CALL LINK          * DSRLNK
[3201] D75C 08              BYTE >08
[3202] D75D 65,8E           BS   ERRFE         * File Error
[3203] D75F DA,E0,01        CLOG >E0,V@1(@PAD) * Set error bits
       D762 00,E0
[3204] D764 45,8E           BR   ERRFE
[3205] D766 00              RTN
[3206] D767 0F,79    MYSAL  XML  PGMCHR        * Skip ( OR COMMA 
[3207] D769 06,CA,26        CALL SAMS4A        * TEMP will have address 
[3208] D76C 0F,70           XML  COMPCT        * Garbage collection VDP
[3209] D76E CB,1A,1C        DCHE >1C81,@STREND * Enough VDP space?
       D771 81
[3210] D772 45,33           BR   ERRSO         * ERROR STACK OVERFLOW
[3211] D774 BF,00,0C        DST  >0C00,@PAD    * Buffer for BSAVE/BLOAD
       D777 00
[3212] D778 06,BF,E6        CALL STRGET        * Pathstring
[3213] D77B 86,B0,00        CLR  V*PAD         * 0 BYTE
[3214] D77E 35,10,80        MOVE >1080,V@0(@PAD),V@1(@PAD) * Ripple
       D781 E0,01,00
       D784 E0,00,00
[3215] D787 BD,5C,00        DST  @PAD,@ARG     * Get PAB address 
[3216] D78A A2,5D,40        ADD  >40,@ARG1     * Add in PAB buffer
[3217] D78D BD,E0,02        DST  @ARG,V@2(@PAD)  * Buffer address
       D790 00,5C
[3218] D792 BF,E0,06        DST  >1000,V@6(@PAD) * Number of bytes
       D795 00,10,00
[3219] D798 BC,E0,09        ST   @FAC7,V@9(@PAD) * Length byte
       D79B 00,51
[3220] D79D 34,50,E0        MOVE @FAC6,V*FAC4,V@10(@PAD) * Pathstring
       D7A0 0A,00,B0
       D7A3 4E
[3221] D7A4 00              RTN
[3222]               ***********************************************************
[3223]               * CALL ISRON(variable)                                    *
[3224]               ***********************************************************
[3225] D7A5 D7,C5    ISRON  DATA ISROFF
[3226] D7A7 05,49,53        STRI 'ISRON'           
       D7AA 52,4F,4E
[3227] D7AD D7,AF           DATA $+2

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0060 
RXB 2022
[3228] D7AF 06,BF,E0        CALL COMB           * (?
[3229] D7B2 06,BF,F6        CALL SUBLP3         * Get value
[3230] D7B5 8F,4A           DCZ  @FAC           * 0?
[3231] D7B7 65,7B           BS   ERRBV          * ERROR BAD VALUE
[3232] D7B9 06,D7,BE        CALL SISRON         * Do ISR
[3233] D7BC 43,05           BR   PEEK5          * Return
[3234] D7BE 86,8F,DD SISRON CLR  @>6004         * Set ROM PAGE 3 at >6004
       D7C1 04
[3235] D7C2 0F,7C           XML  >7C            * ISR ON Assembly
[3236] D7C4 00              RTN                 * Return
[3237]               ***********************************************************
[3238]               * CALL ISROFF(variable)                                   *
[3239]               ***********************************************************
[3240] D7C5 D7,EA    ISROFF DATA USER
[3241] D7C7 06,49,53        STRI 'ISROFF'          
       D7CA 52,4F,46
       D7CD 46
[3242] D7CE D7,D0           DATA $+2
[3243] D7D0 06,BF,E0        CALL COMB         * (?
[3244] D7D3 0F,79           XML  PGMCHR       * Skip  
[3245] D7D5 06,BF,F0        CALL SNDER        * Send to XB 
[3246] D7D8 06,BF,FA        CALL CLRFAC       * Clear FAC for FP
[3247] D7DB 06,D7,E3        CALL SISROF       * Do ISR
[3248] D7DE 06,BF,F2        CALL CIFSND       * Send value
[3249] D7E1 43,05           BR   PEEK5        * Return
[3250] D7E3 86,8F,DD SISROF CLR  @>6004       * Set ROM PAGE 3 at >6004
       D7E6 04
[3251] D7E7 0F,7D           XML  >7D          * ISR OFF Assembly
[3252] D7E9 00              RTN               * Return
[3253]               **********************************************************
[3254]               * CALL USER(path-string)                                 *
[3255]               **********************************************************
[3256] D7EA D8,1F    USER   DATA POKER
[3257] D7EC 04,55,53        STRI 'USER'           
       D7EF 45,52
[3258] D7F1 D7,F3           DATA $+2
[3259] D7F3 06,BF,E0        CALL COMB              PARSE UP TO "
[3260] D7F6 06,BF,E6        CALL STRGET            Get path 
[3261] D7F9 BE,A8,C0        ST   >20,V@RECBUF      Clear byte
       D7FC 20
[3262] D7FD 35,00,50        MOVE 80,V@RECBUF,V@RECBUF+1 Ripple 80 times
       D800 A8,C1,A8
       D803 C0
[3263] D804 31,00,04        MOVE 4,G@UPAB,V@RECBUF+1  Set up USER PAB
       D807 A8,C1,D8
       D80A 1B
[3264] D80B BC,A8,C9        ST   @FAC7,V@>08C9     Set length
       D80E 51
[3265] D80F 34,50,A8        MOVE @FAC6,V*FAC4,V@>08CA Load PAB path
       D812 CA,B0,4E
[3266] D815 BE,A3,BB        ST   >FF,V@CONFLG      Set USER flag
       D818 FF
[3267] D819 43,05           BR   PEEK5
[3268] D81B 14,09,00 UPAB   BYTE >14,>09,>00,80
       D81E 50
[3269]               ***********************************************************
[3270]               * CALL POKER(vdpr#,value)                                 *
[3271]               ***********************************************************
[3272] D81F D8,88    POKER  DATA INVS
[3273] D821 05,50,4F        STRI 'POKER'           
       D824 4B,45,52
[3274] D827 D8,29           DATA $+2
[3275] D829 06,BF,E0        CALL COMB
[3276] D82C 06,BF,FC POKAGN CALL GETNUM

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0061 
RXB 2022
[3277] D82F CB,4A,00        DCHE 64,@FAC
       D832 40
[3278] D833 65,7B           BS   ERRBV
[3279] D835 BC,00,4B        ST   @FAC1,@PAD
[3280] D838 06,BF,F6        CALL SUBLP3
[3281] D83B 8A,00           CASE @PAD
[3282] D83D 58,7C           BR   PREG0
[3283] D83F 58,75           BR   PREG1
[3284] D841 58,6E           BR   PREG2
[3285] D843 58,67           BR   PREG3
[3286] D845 58,60           BR   PREG4
[3287] D847 58,59           BR   PREG5
[3288] D849 58,52           BR   PREG6
[3289] D84B 3D,00,01        MOVE 1,@FAC1,#7
       D84E 07,4B
[3290] D850 58,81           BR   POKEND
[3291] D852 3D,00,01 PREG6  MOVE 1,@FAC1,#6
       D855 06,4B
[3292] D857 58,81           BR   POKEND
[3293] D859 3D,00,01 PREG5  MOVE 1,@FAC1,#5
       D85C 05,4B
[3294] D85E 58,81           BR   POKEND
[3295] D860 3D,00,01 PREG4  MOVE 1,@FAC1,#4
       D863 04,4B
[3296] D865 58,81           BR   POKEND
[3297] D867 3D,00,01 PREG3  MOVE 1,@FAC1,#3
       D86A 03,4B
[3298] D86C 58,81           BR   POKEND
[3299] D86E 3D,00,01 PREG2  MOVE 1,@FAC1,#2
       D871 02,4B
[3300] D873 58,81           BR   POKEND
[3301] D875 3D,00,01 PREG1  MOVE 1,@FAC1,#1
       D878 01,4B
[3302] D87A 58,81           BR   POKEND
[3303] D87C 3D,00,01 PREG0  MOVE 1,@FAC1,#0
       D87F 00,4B
[3304] D881 D6,42,B3 POKEND CEQ  COMMAZ,@CHAT
[3305] D884 78,2C           BS   POKAGN
[3306] D886 43,05           BR   PEEK5
[3307]               ***********************************************************
[3308]               * CALL INVERSE(char-number[,...])                          
[3309]               * CALL INVERSE(ALL)                                        
[3310]               ***********************************************************
[3311] D888 D8,C5    INVS   DATA RXBIO
[3312] D88A 07,49,4E        STRI 'INVERSE'
       D88D 56,45,52
       D890 53,45
[3313] D892 D8,94           DATA $+2
[3314] D894 06,BF,E0        CALL COMB             * INVERSE(CHAR#)
[3315] D897 0F,79    INVAGN XML  PGMCHR           * Skip (
[3316] D899 D6,42,EC        CEQ  ALLZ,@CHAT       * ALL?
[3317] D89C 58,A6           BR   INOALL           * No
[3318] D89E 0F,7E           XML  SPEED
[3319] D8A0 00,EC           DATA >00EC            * ALL token?  
[3320] D8A2 87,4A           DCLR @FAC             * ALL flag for Assembly
[3321] D8A4 58,B7           BR   INVLP            * Go ALL option 
[3322] D8A6 0F,74    INOALL XML  PARSE            * Get Character #
[3323] D8A8 B6              BYTE RPARZ
[3324] D8A9 0F,7E           XML  SPEED            * CHECK FROM
[3325] D8AB 02,1E           DATA >021E            * 30 TO 159
[3326] D8AD 00,9F           DATA >009F            
[3327] D8AF E3,4A,00        DSLL 3,@FAC           * Adjust 
       D8B2 03
[3328] D8B3 A3,4A,03        DADD >0300,@FAC       * Add in Char address

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0062 
RXB 2022
       D8B6 00
[3329] D8B7 86,8F,DD INVLP  CLR  @>6004           * Set ROM3 page
       D8BA 04
[3330] D8BB 0F,79           XML  INVERS           * ROM 3 INVERSE ASSEMBLY 
[3331] D8BD D6,42,B3 INVNOK CEQ  COMMAZ,@CHAT
[3332] D8C0 78,97           BS   INVAGN
[3333] D8C2 05,A0,1C        B    LNKRTN
[3334]               *********************************************************
[3335]               * CALL IO(type,address,...)                             *
[3336]               * CALL IO(type,bits,cru-base,variable,variable,...)     *
[3337]               * CALL IO(type,length,VDP-address,...)                  *
[3338]               *********************************************************
[3339] D8C5 D9,92    RXBIO  DATA SXBRUN
[3340] D8C7 02,49,4F        STRI 'IO'           
[3341] D8CA D8,CC           DATA $+2
[3342] D8CC 06,BF,E0        CALL COMB         * IO
[3343] D8CF 06,BF,FC IOAGN  CALL GETNUM       * TYPE 0-6
[3344] D8D2 CA,4B,07        CHE  >07,@FAC1    * 7 or more error
[3345] D8D5 65,7B           BS   ERRBV        * ERROR BAD VALUE
[3346] D8D7 BC,04,4B        ST   @FAC1,@PAD4  * Get TYPE
[3347] D8DA 06,BF,F6        CALL SUBLP3       * ADDRESS/
[3348] D8DD 8A,04           CASE @PAD4        * BITS/BYTES
[3349] D8DF 58,ED           BR   SOG          * IO Sound GROM
[3350] D8E1 58,F2           BR   SOV          * IO Sound VDP
[3351] D8E3 58,F7           BR   CRUI         * IO CRU IN 
[3352] D8E5 59,22           BR   CRUO         * IO CRU OUT
[3353] D8E7 59,4C           BR   CSW          * IO Cassette Write
[3354] D8E9 59,54           BR   CSR          * IO Cassette Read
[3355] D8EB 59,5C           BR   CSV          * IO Cassette Verify   
[3356] D8ED F6,4A,00 SOG    I/O  0,@FAC         IO Sound GROM
[3357] D8F0 59,62           BR   IODONE
[3358] D8F2 F6,4A,01 SOV    I/O  1,@FAC         IO Sound VDP 
[3359] D8F5 59,62           BR   IODONE
[3360] D8F7 06,D9,72 CRUI   CALL CRUSET
[3361] D8FA F6,0E,02        I/O  2,@BUFPNT      IO CRU IN 
[3362] D8FD 0F,79           XML  PGMCHR
[3363] D8FF 06,BF,F0        CALL SNDER
[3364] D902 06,BF,FA        CALL CLRFAC
[3365] D905 BC,4B,00        ST   @PAD,@FAC1
[3366] D908 06,BF,F2        CALL CIFSND       * VARIABLE1
[3367] D90B CA,04,09        CHE  >09,@PAD4
[3368] D90E 79,12           BS   CRUI16
[3369] D910 59,62           BR   IODONE
[3370] D912 0F,79    CRUI16 XML  PGMCHR
[3371] D914 06,BF,F0        CALL SNDER
[3372] D917 06,BF,FA        CALL CLRFAC
[3373] D91A BC,4B,01        ST   @PAD1,@FAC1
[3374] D91D 06,BF,F2        CALL CIFSND       * VARIABLE2
[3375] D920 59,62           BR   IODONE
[3376] D922 06,D9,72 CRUO   CALL CRUSET
[3377] D925 06,BF,F6        CALL SUBLP3       * VARIABLE1
[3378] D928 CB,4A,01        DCHE >0100,@FAC
       D92B 00
[3379] D92C 65,7B           BS   ERRBV
[3380] D92E CA,04,09        CHE  >09,@PAD4
[3381] D931 79,38           BS   CRUO16
[3382] D933 BC,00,4B        ST   @FAC1,@PAD
[3383] D936 59,47           BR   CRUO8
[3384] D938 BD,00,4A CRUO16 DST  @FAC,@PAD
[3385] D93B 06,BF,F6        CALL SUBLP3       * VARIABLE2
[3386] D93E CB,4A,01        DCHE >0100,@FAC
       D941 00
[3387] D942 65,7B           BS   ERRBV
[3388] D944 BC,01,4B        ST   @FAC1,@PAD1

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0063 
RXB 2022
[3389] D947 F6,0E,03 CRUO8  I/O  3,@BUFPNT      IO CRU OUT
[3390] D94A 59,62           BR   IODONE
[3391] D94C 06,D9,88 CSW    CALL CSLOAD
[3392] D94F F6,0E,04        I/O  4,@BUFPNT      IO Cassette Write
[3393] D952 59,62           BR   IODONE
[3394] D954 06,D9,88 CSR    CALL CSLOAD
[3395] D957 F6,0E,05        I/O  5,@BUFPNT      IO Cassette Read 
[3396] D95A 59,62           BR   IODONE
[3397] D95C 06,D9,88 CSV    CALL CSLOAD
[3398] D95F F6,0E,06        I/O  6,@BUFPNT      IO Cassette Verify 
[3399] D962 D6,42,B3 IODONE CEQ  >B3,@CHAT
[3400] D965 78,CF           BS   IOAGN
[3401] D967 05,A0,1C        B    LNKRTN
[3402] D96A BD,0E,4A CRUTMP DST  @FAC,@BUFPNT
[3403] D96D 87,10           DCLR @VAR5
[3404] D96F 87,00           DCLR @PAD
[3405] D971 00              RTN
[3406] D972 8E,4B    CRUSET CZ   @FAC1          
[3407] D974 65,7B           BS   ERRBV
[3408] D976 CA,4A,11        CHE  >11,@FAC
[3409] D979 65,7B           BS   ERRBV
[3410] D97B BC,04,4B        ST   @FAC1,@PAD4
[3411] D97E 06,BF,F6        CALL SUBLP3       * CRU-ADDRESS
[3412] D981 06,D9,6A        CALL CRUTMP
[3413] D984 BC,10,04        ST   @PAD4,@VAR5
[3414] D987 00              RTN
[3415] D988 06,D9,6A CSLOAD CALL CRUTMP
[3416] D98B 06,BF,F6        CALL SUBLP3       * ADDRESS
[3417] D98E BD,10,4A        DST  @FAC,@VAR5
[3418] D991 00              RTN
[3419]               **********************************************************
[3420]               * CALL XB                                                *
[3421]               * CALL XB("PATHNAME")                                    *
[3422]               * CALL XB("PATHNAME",file#)                              *
[3423]               **********************************************************
[3424] D992 D9,D8    SXBRUN DATA SFILES
[3425] D994 02,58,42        STRI 'XB'   * CALL XB(pathname) 
[3426] D997 D9,99           DATA XBPGM
[3427] D999 06,80,12 XBPGM  CALL CLSALL            Close all open files
[3428] D99C 8E,42           CZ   @CHAT             ?
[3429] D99E 59,A3           BR   XBRUN             NO, XBRUN PATH
[3430] D9A0 05,D9,D5        B    RXBRUN            Run it
[3431]               * CALL XB("PATHNAME")
[3432] D9A3 06,BF,E0 XBRUN  CALL COMB              (?
[3433] D9A6 06,BF,E6        CALL STRGET            Skip ( and get $      
[3434] D9A9 8F,50    XBFIL  DCZ  @FAC6             Zero string length?
[3435] D9AB 65,B1           BS   WRNNPP            NO PROGRAM PRESENT
[3436] D9AD 86,AF,22        CLR  V@>2254           Clear buffer 
       D9B0 54
[3437] D9B1 35,00,32        MOVE 50,V@>2254,V@>2255 Ripple clear
       D9B4 AF,22,55
       D9B7 AF,22,54
[3438] D9BA BF,AF,22        DST  >994A,V@>2254     Set flag 
       D9BD 54,99,4A
[3439] D9C0 BC,AF,22        ST   @FAC7,V@>2256     Save length byte
       D9C3 56,51
[3440] D9C5 34,50,AF        MOVE @FAC6,V@0(@FAC4),V@>2257 Save string
       D9C8 22,57,E0
       D9CB 00,4E
[3441] D9CD D6,42,B3 RXBXBP CEQ  >B3,@CHAT         Comma?
[3442] D9D0 59,D5           BR   RXBRUN            No
[3443] D9D2 06,D9,ED        CALL RXBFIL            Set files
[3444] D9D5 05,63,72 RXBRUN B    TOPLEV            RUN IT
[3445]               ***********************************************************

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0064 
RXB 2022
[3446]               * CALL FILES(number)  0 to 15                             *
[3447]               ***********************************************************
[3448] D9D8 DA,3A    SFILES DATA SSIZE
[3449] D9DA 05,46,49        STRI 'FILES'       *   FILES
       D9DD 4C,45,53
[3450] D9E0 D9,E2           DATA $+2
[3451] D9E2 06,BF,E0        CALL COMB          *   (
[3452] D9E5 06,80,12        CALL CLSALL        *   Close all open files
[3453] D9E8 06,D9,ED        CALL RXBFIL        *   Set files
[3454] D9EB 5A,C1           BR   RXBNEW        *   Go do a NEW
[3455] D9ED 06,BF,F6 RXBFIL CALL SUBLP3        *   Get Files value
[3456] D9F0 8F,4A           DCZ  @FAC          *   Zero?
[3457] D9F2 7A,2E           BS   RXBF0         *   Yes, RXB CALL FILES(0)
[3458] D9F4 CB,4A,00        DCHE 16,@FAC       *   16 or more to high
       D9F7 10
[3459] D9F8 65,7B           BS   ERRBV         *   Yes, BAD VALUE error
[3460] D9FA D6,42,B6        CEQ  RPARZ,@CHAT   *   )?
[3461] D9FD 45,0C           BR   ERRSYN        *   SYNTAX ERROR 
[3462] D9FF 0F,79           XML  PGMCHR        *   Skip )
[3463] DA01 87,4C           DCLR @FAC2         *   Clear         
[3464] DA03 BC,4C,4B        ST   @FAC1,@FAC2   *   Load file value
[3465] DA06 BF,A3,C0        DST  >0116,V@VROAZ *   Set files buffer space
       DA09 01,16
[3466] DA0B CB,00,01        DCHE 256,@PAD      *   
       DA0E 00
[3467] DA0F 5A,16           BR   DSRDSS        *
[3468] DA11 A2,8F,80        ADD  >10,@VROAZ+1  *
       DA14 C1,10
[3469] DA16 BF,56,03 DSRDSS DST  VROAZ,@FAC12  *
       DA19 C0
[3470] DA1A 06,00,10        CALL LINK          *
[3471] DA1D 0A              BYTE >0A           *
[3472] DA1E BC,02,7C        ST   @ERCODE,@PAD2 *
[3473] DA21 E6,50,04        SRL  4,@FAC6       *
[3474] DA24 8E,50           CZ   @FAC6         *
[3475] DA26 45,8E           BR   ERRFE         *
[3476] DA28 D6,02,20        CEQ  >20,@PAD2     *
[3477] DA2B 65,8E           BS   ERRFE         *
[3478] DA2D 00              RTN                *
[3479] DA2E D6,42,B6 RXBF0  CEQ  RPARZ,@CHAT   * )?
[3480] DA31 45,0C           BR   ERRSYN        * SYNTAX ERROR 
[3481] DA33 0F,79           XML  PGMCHR        * Skip )
[3482] DA35 BF,70,3C        DST  >3CEF,@>8370  * Set FILE(0) VDP Highest address
       DA38 EF
[3483] DA39 00              RTN                * Return
[3484]               ***********************************************************
[3485]               * CALL SIZE                                                
[3486]               ***********************************************************
[3487] DA3A DA,46    SSIZE  DATA VDPSTK
[3488] DA3C 04,53,49        STRI 'SIZE'           SIZE
       DA3F 5A,45
[3489] DA41 DA,43           DATA $+2
[3490] 65C8          SZSIZE EQU  >65C8
[3491] DA43 05,65,C8        B    SZSIZE           CALL SIZE
[3492]               ***********************************************************
[3493]               * CALL VDPSTACK(address)                                  *
[3494]               ***********************************************************
[3495] DA46 DA,6E    VDPSTK DATA UP24K
[3496] DA48 08,56,44        STRI 'VDPSTACK'
       DA4B 50,53,54
       DA4E 41,43,4B
[3497] DA51 DA,53           DATA $+2
[3498] DA53 06,BF,E0        CALL COMB         * (
[3499] DA56 06,BF,F6        CALL SUBLP3       * Get address

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0065 
RXB 2022
[3500] DA59 C9,4A,70        DCHE @>8370,@FAC  * Highest possible address
[3501] DA5C 65,33           BS   ERRSO        * ERROR STACK OVERFLOW
[3502] DA5E BD,6E,4A        DST  @FAC,@>836E  * Save VDP Stack address 
[3503] DA61 BD,24,4A        DST  @FAC,@>8324  * Save VDP Stack address
[3504] DA64 D6,42,B6 ENDRTN CEQ  RPARZ,@CHAT  * )?
[3505] DA67 45,0C           BR   ERRSYN       * Syntax Error
[3506] DA69 0F,79           XML  PGMCHR       * Skip ")"
[3507] DA6B 05,DA,C1 EXTRTN B    RXBNEW       * End program, files, reset
[3508]               ***********************************************************
[3509]               * CALL PRAM(start-address,end-address)                    *
[3510]               ***********************************************************
[3511] DA6E DA,A3    UP24K  DATA CLOSEA
[3512] DA70 04,50,52        STRI 'PRAM'
       DA73 41,4D
[3513] DA75 DA,77           DATA $+2  
[3514] DA77 8E,80,84        CZ   @RAMTOP      * CONSOLE ONLY?            
[3515] DA7A 74,19           BS   RTNLNK       * Yes, do not run
[3516] DA7C 06,BF,E0        CALL COMB         * (
[3517] DA7F 06,BF,FC        CALL GETNUM       * Get START address
[3518] DA82 BD,00,4A        DST  @FAC,@PAD    * SAVE START
[3519] DA85 CB,00,A0        DCHE >A000,@PAD   * LOW LIMIT >A000
       DA88 00
[3520] DA89 45,7B           BR   ERRBV        * ERROR BAD VALUE 
[3521] DA8B 06,BF,F6        CALL SUBLP3       * Get END address
[3522] DA8E CB,4A,A0        DCHE >A000,@FAC   * LOW LIMIT
       DA91 00
[3523] DA92 45,7B           BR   ERRBV        * ERROR BAD VALUE
[3524] DA94 BD,80,84        DST  @PAD,@RAMTOP * LOAD START ADDRESS
       DA97 00
[3525] DA98 BD,80,86        DST  @RAMTOP,@RAMFRE * PROGRAM FREE ADDRESS
       DA9B 80,84
[3526] DA9D BD,A3,9E        DST  @FAC,V@PMEM  * LOAD END ADDRESS
       DAA0 4A
[3527] DAA1 5A,64           BR   ENDRTN
[3528]               ***********************************************************
[3529]               * CALL CLSALL                                             *
[3530]               ***********************************************************
[3531] DAA3 DA,B9    CLOSEA DATA NEWNEW
[3532] DAA5 06,43,4C        STRI 'CLSALL'          CLSALL
       DAA8 53,41,4C
       DAAB 4C
[3533] DAAC DA,AE           DATA $+2
[3534] DAAE 06,80,12        CALL CLSALL            Close all open files
[3535] DAB1 06,6A,78        CALL CHKEND        
[3536] DAB4 45,0C           BR   ERRSYN
[3537] DAB6 06,00,12        CALL RETURN
[3538]               ***********************************************************
[3539]               * CALL NEW                                                *
[3540]               ***********************************************************
[3541] DAB9 DA,CA    NEWNEW DATA QTON
[3542] DABB 03,4E,45        STRI 'NEW'             NEW
       DABE 57
[3543] DABF DA,C1           DATA $+2
[3544] DAC1 86,A3,71 RXBNEW CLR  V@LODFLG          Clear AUTOLOAD flag
[3545] DAC4 06,80,12        CALL CLSALL
[3546] DAC7 05,60,20 NEWSZ  B    SZNEW
[3547]               ***********************************************************
[3548]               * CALL QUITON                                             *
[3549]               ***********************************************************
[3550] DACA DA,DC    QTON   DATA QTOFF
[3551] DACC 06,51,55        STRI 'QUITON'
       DACF 49,54,4F
       DAD2 4E
[3552] DAD3 DA,D5           DATA QTON1

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0066 
RXB 2022
[3553] DAD5 B2,80,C2 QTON1  AND  >EF,@GKFLAG  Reset QUIT bit
       DAD8 EF
[3554] DAD9 05,C1,E0        B    LDRET2       Return
[3555]               ***********************************************************
[3556]               * CALL QUITOFF                                            *
[3557]               ***********************************************************
[3558] DADC DA,EE    QTOFF  DATA BASIC
[3559] DADE 07,51,55        STRI 'QUITOFF'
       DAE1 49,54,4F
       DAE4 46,46
[3560] DAE6 DA,E8           DATA QTOFF1
[3561] DAE8 B6,80,C2 QTOFF1 OR   >10,@GKFLAG  Set QUIT bit
       DAEB 10
[3562] DAEC 41,E0           BR   LDRET2       Return
[3563]               ********************************************************
[3564]               * CALL BASIC                                           *
[3565]               ********************************************************
[3566] DAEE DB,08    BASIC  DATA SEARUN
[3567] DAF0 05,42,41        STRI 'BASIC'           
       DAF3 53,49,43
[3568] DAF6 DA,F8           DATA $+2
[3569] DAF8 06,80,12        CALL CLSALL            * Close all files
[3570] DAFB 86,A0,00        CLR  V@0
[3571] DAFE 35,3F,FF        MOVE >3FFF,V@0,V@1     * Clear 4K VDP
       DB01 A0,01,A0
       DB04 00
[3572] 216E          SBASIC EQU  >216E
[3573] DB05 05,21,6E        B    SBASIC            * GO TO BASIC
[3574]               *********************************************************
[3575]               * CALL EA                                               *
[3576]               *********************************************************
[3577] DB08 DB,1F    SEARUN DATA BYEBYE
[3578] DB0A 02,45,41        STRI 'EA'           *  EA menu
[3579] DB0D DB,0F           DATA $+2
[3580] DB0F 06,80,12        CALL CLSALL            Close all open files
[3581] DB12 86,A0,00        CLR  V@0
[3582] DB15 35,3F,FF        MOVE >3FFF,V@0,V@1     Clear 4K VDP
       DB18 A0,01,A0
       DB1B 00
[3583] DB1C 05,E0,25        B    GE025             Got to EA CART
[3584]               ***********************************************************
[3585]               * CALL BYE                                                *
[3586]               ***********************************************************
[3587] DB1F DB,2B    BYEBYE DATA CALPHA
[3588] DB21 03,42,59        STRI 'BYE'             BYE
       DB24 45
[3589] DB25 DB,27           DATA $+2
[3590] DB27 06,80,12        CALL CLSALL            Close all open files
[3591] DB2A 0B              EXIT
[3592]               ***********************************************************
[3593]               * CALL ALPHALOCK(numeric-variable)                        *
[3594]               ***********************************************************
[3595] DB2B DB,4D    CALPHA DATA VERSN
[3596] DB2D 09,41,4C        STRI 'ALPHALOCK'
       DB30 50,48,41
       DB33 4C,4F,43
       DB36 4B
[3597] DB37 DB,39           DATA  $+2
[3598] DB39 06,BF,E0        CALL COMB          Insure have left parenthesis
[3599] DB3C 0F,79           XML  PGMCHR        Skip (
[3600] DB3E 06,BF,F0        CALL SNDER         Get variable info
[3601] DB41 86,8F,DD        CLR   @>6004       Set ROM 3 page
       DB44 04
[3602] DB45 0F,7E           XML  ALPHA         Check ALPHA LOCK KEY

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0067 
RXB 2022
[3603] DB47 06,BF,F2        CALL CIFSND        Convert to floating point
[3604]               *                         Assign and return to caller
[3605] DB4A 05,A0,1C        B    LNKRTN
[3606]               ***********************************************************
[3607]               *               SUBPROGRAM FOR VERSION                    *
[3608]               ***********************************************************
[3609]               * CALL VERSION(numeric-variable)                          *
[3610]               ***********************************************************
[3611] DB4D 00,00    VERSN  DATA >0000
[3612] DB4F 07,56,45        STRI 'VERSION'
       DB52 52,53,49
       DB55 4F,4E
[3613] DB57 DB,59           DATA $+2
[3614] DB59 06,BF,E0        CALL COMB            Insure have left parenthesis
[3615] DB5C 0F,79           XML  PGMCHR          Skip (
[3616] DB5E 06,BF,F0        CALL SNDER           Get variable info    
[3617] DB61 BF,4A,07        DST  2022,@FAC       1/22/2022
       DB64 E6
[3618] DB65 06,BF,F2        CALL CIFSND          Convert to floating point
[3619]               *                           Assign and return to caller
[3620] DB68 05,A0,1C        B    LNKRTN
[3621]               ***********************************************************
[3622]                      END

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0068 
RXB 2022
Symbol Table #1 (New,alpha)  
00CB ABSZ       00A4 ACCEPZ     7000 ALCEND     00EC ALLZ       007E ALPHA      
0020 ALSUP      C95D AMSCRU     C99A AMSMAP     C9A6 AMSOFF     C9B2 AMSON      
C9E3 AMSSUB     00BB ANDZ       00F9 APPENZ     835D ARG1       835E ARG2       
835F ARG3       8360 ARG4       8361 ARG5       8362 ARG6       C36B ARRAY      
C37E ARRAY2     A00A ASC        0076 ASCHEX     00DC ASCZ       007C ASSGNV     
00CC ATNZ       00F0 ATZ        00F1 BASEZ      DAEE BASIC      D2DE BATCH      
D2EB BATCH1     D2FA BATCH2     D310 BATCH3     D313 BATCH4     D376 BEEP       
00EE BEEPZ      D3EB BIASAG     D3FA BIASLP     D407 BIASM      D40A BIASSV     
D738 BLOADL     008E BREAKZ     D710 BSAVEL     0002 BUF        038E BUFEND     
830E BUFPNT     038C BUFSRT     DB1F BYEBYE     830C BYTES      009D CALLZ      
DB2B CALPHA     C6A0 CATLOG     837D CB         D331 CBKEY      D33E CBKEY2     
8308 CCPADR     8306 CCPPTR     BFEA CFIFCH     CB14 CHAR1      CB35 CHAR2      
CB4E CHAR3      CBE7 CHAR4      CC51 CHAR5      CCA0 CHAR6      CCEE CHAR7      
CD27 CHAR8      CD55 CHAR9      CD60 CHARA      7B42 CHARS      8342 CHAT       
6A78 CHKEND     C1E8 CHKIN      8302 CHKSUM     0005 CHRCNT     C034 CHRPAT     
000D CHRTN      00D6 CHRZZ      0080 CIF        BFF2 CIFSND     008B CINIT      
00C5 CIRCUZ     DAA3 CLOSEA     00A0 CLOSEZ     BFFA CLRFAC     8012 CLSALL     
C268 CLSIT      C295 CLSNOE     00B5 COLONZ     BFE0 COMB       00B3 COMMAZ     
0070 COMPCT     00B8 CONCZ      03BB CONFLG     00CD COSZ       8312 COUNT      
D6DD CPUPGM     0820 CRNBUF     D8F7 CRUI       D912 CRUI16     007F CRUNCH     
D922 CRUO       D938 CRUO16     D947 CRUO8      D972 CRUSET     D96A CRUTMP     
D988 CSLOAD     D954 CSR        D95C CSV        D94C CSW        830E CURINC     
8314 CURLIN     C690 DARROW     0093 DATAZ      0089 DEFZ       0099 DELETZ     
C937 DEV0       C94F DEV1       C934 DEVASC     8317 DEVNUM     00E9 DIGITZ     
008A DIMZ       C6A8 DIRECT     6FBA DISO       00A2 DISPLZ     00C4 DIVIZ      
D6A7 DLOOP      D6B2 DREXIT     0073 DROLL      C8F9 DSKDSR     C281 DSKERR     
C918 DSKNAM     C913 DSKSUB     C26C DSRCAL     DA16 DSRDSS     8317 DSRFLG     
000A DWNARR     D2D2 EA0        D34A EAU1       D356 EAWSD      C5DA ECRTN      
C5D3 ECSET      C5D6 ECSET2     66CF EDITLN     D00D EDTZ00     D079 EDTZ01     
D07E EDTZ02     D0AC EDTZ08     D000 EDTZZ0     8358 EEE1       0081 ELSEZ      
C5C9 ENDCHK     D3DC ENDMOD     DA64 ENDRTN     008B ENDZ       8332 ENLN       
00CA EOFZ       00BE EQUALZ     00EF ERASEZ     837C ERCODE     6E1B ERPNT5     
6E0E ERPRNT     C573 ERRBA      C55F ERRBLN     C553 ERRBS      C57B ERRBV      
C567 ERRCC      C56B ERRCIP     8322 ERRCOD     C58A ERRDAT     C587 ERRDE1     
C58E ERRFE      C53B ERRFNN     C57F ERRIAL     C510 ERRIBS     C528 ERRIM      
C583 ERRINP     C592 ERRIO      C5A1 ERRIVN     C55B ERRLNF     C563 ERRLTL     
C52F ERRMEM     C52C ERRMF1     C547 ERRMS      C524 ERRMUV     C502 ERRN01     
C505 ERRNO      C577 ERRNPP     C514 ERRNQS     C518 ERRNTL     C537 ERRNWF     
C520 ERROBE     C56F ERROLP     C4A2 ERROR      00A5 ERRORZ     C59A ERRPV      
C543 ERRRSC     C54B ERRRWG     C596 ERRSNF     C51C ERRSNM     C53F ERRSNS     
C533 ERRSO      C557 ERRSSL     C54F ERRST      C509 ERRSY1     C50C ERRSYN     
CD77 ERRTAB     C59E ERRUC1     6A84 ERRZZ      D6C8 EXAGN      C3F4 EXE01      
D6E9 EXEBL      D6F4 EXEBLA     D6B9 EXECLK     00CE EXPZZ      832E EXTRAM     
DA6B EXTRTN     834B FAC1       8354 FAC10      8355 FAC11      8356 FAC12      
8357 FAC13      8358 FAC14      8359 FAC15      835A FAC16      835B FAC17      
834C FAC2       834D FAC3       834E FAC4       834F FAC5       8350 FAC6       
8351 FAC7       8352 FAC8       8353 FAC9       8311 FIELD      00FA FIXEDZ     
8345 FLAG       0001 FLG        CF73 FNDLNE     008C FORZ       830A FREEND     
8340 FREPTR     8308 FRESTA     2002 FSLOC      698C G698C      6D78 G6D78      
C0C4 GC0C7      C0D2 GC0D5      C0E0 GC0E3      C0F1 GC0F4      C119 GC11C      
C1BE GC1C1      C204 GC213      C215 GC224      C2AA GC2B9      C2F7 GC308      
C38C GC39D      C390 GC3A1      C3AB GC3BC      C3AD GC3BE      C3B4 GC3C5      
C3CF GC3E0      C3D2 GC3E3      C3E5 GC3F6      C41D GC429      C449 GC46D      
CE22 GCE22      CE3B GCE3B      CE48 GCE48      CE58 GCE58      CE5B GCE5B      
CE99 GCE99      CEAC GCEAC      CEB3 GCEB3      CEC8 GCEC8      CECF GCECF      
CEE2 GCEE2      CEF6 GCEF6      CF02 GCF02      CF05 GCF05      CF2C GCF2C      
CF53 GCF53      CF7D GCF7D      CF96 GCF96      CF9C GCF9C      C423 GCHR2      
C460 GCHR3      C479 GCHR4      D008 GD008      D020 GD020      D032 GD032      
D048 GD048      D056 GD056      D06B GD06B      D085 GD085      D097 GD097      
D09E GD09E      D0A1 GD0A1      D0C6 GD0C6      D0D4 GD0D4      D0E7 GD0E7      
D0F3 GD0F3      E025 GE025      C420 GETCHR     CF69 GETLN2     BFFC GETNUM     
0071 GETSTR     C6B0 GKCAT      C6E1 GKCAT2     C7B8 GKCAT3     C803 GKCAT5     
C8A8 GKCAT6     C82C GKCAT7     C6B3 GKCATA     C6EC GKCATL     C724 GKCLSF     

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0069 
RXB 2022
C83C GKDF       C895 GKDIR      C8BF GKDNU1     C8CD GKDNU2     C8B9 GKDNUM     
C6FE GKDONE     C740 GKDSR      C734 GKDSRL     C8DF GKDSTR     C84E GKDV       
C715 GKERR      83C2 GKFLAG     C8B4 GKFNA1     C7F2 GKFNAM     C860 GKIF       
C5F9 GKINIT     C872 GKIV       C5E0 GKLOAD     C749 GKPABD     C609 GKPEEK     
C884 GKPR       C7E9 GKSCL1     C7DD GKSCL2     C7CF GKSCRL     C752 GKSCRN     
C629 GKSETG     C620 GKSETV     C7C9 GKTKE1     C7CA GKTKE2     C7C1 GKTKE3     
C7B9 GKTKEY     BFEC GNRTN      0087 GOSUBZ     0086 GOTOZ      0085 GOZ        
00C0 GREATZ     802A GRMLST     802C GRSUB2     802E GRSUB3     0074 HCHAR      
8370 HIVDP      D384 HONK       0077 HPUT       0084 IFZ        64EF ILLST      
00A3 IMAGEZ     835E INDEX      8315 INDEXC     C2AB INIT       2006 INITF      
D8A6 INOALL     0092 INPUTZ     00F5 INTERZ     00CF INTZ       D897 INVAGN     
0079 INVERS     D8B7 INVLP      D8BD INVNOK     D888 INVS       D8CF IOAGN      
D962 IODONE     D7C5 ISROFF     D7A5 ISRON      CB00 KEYTAB     C1B7 LDDNE      
C656 LDGRAM     C1F1 LDIPCS     D261 LDKEY      C1CF LDNE2      C04E LDP1       
C08D LDP2       C060 LDP4       C085 LDP5       C0A8 LDRD       C1DE LDRET      
C1E0 LDRET2     C0AF LDTG       C153 LDTG2      C132 LDTG3      0004 LEN        
00D5 LENZ       00BF LESSZ      008D LETZ       C314 LINKIT     00AA LINPUZ     
6A74 LLIST      D639 LLOOP      A01A LNKRT2     A01C LNKRTN     00C9 LNZ        
C040 LOAD       C668 LOADDT     0371 LODFLG     00D0 LOGZ       00B7 LPARZ      
C047 LPD0       D644 LREXIT     0071 LROLL      C9D9 MAPAMS     00DF MAXZ       
00C2 MINUSZ     00E0 MINZ       8302 MNUM       D39D MODAGN     D392 MODZ       
6065 MSG10      629B MSG109     62A6 MSG130     62B0 MSG135     6076 MSG14      
6083 MSG16      609C MSG17      60AD MSG19      60BB MSG24      60D2 MSG25      
60E4 MSG28      60F9 MSG34      6110 MSG36      611C MSG39      6128 MSG40      
6137 MSG43      6148 MSG44      6159 MSG47      616F MSG48      6189 MSG49      
6198 MSG51      61AD MSG54      6324 MSG56      61BE MSG57      61CC MSG60      
61DB MSG61      62C5 MSG62      61EB MSG67      61FA MSG69      6215 MSG70      
622D MSG74      623A MSG78      624D MSG79      6257 MSG81      626F MSG83      
627B MSG84      6286 MSG97      6048 MSGBRK     6319 MSGCF      630A MSGCIS     
6040 MSGFST     00C3 MULTZ      0089 MVUP       D753 MYDOIT     D767 MYSAL      
DAB9 NEWNEW     DAC7 NEWSZ      0096 NEXTZ      BFEE NGOOD      0009 NLEN       
02E2 NLNADD     C413 NOERR      00BD NOTZ       CFB1 NOUSR      00FD NUMBEZ     
00C8 NUMCOZ     00E8 NUMERZ     BFE8 NUMFCH     00C8 NUMZ       8306 OFFADD     
C9D0 OFFAMS     0060 OFFSET     8310 OLDS       0005 OLDZ       C9C7 ONAMS      
009B ONZ        C216 OPENIT     009F OPENZ      009E OPTIOZ     00BA ORZ        
00F7 OUTPUZ     000A PABLEN     8304 PABPTR     8301 PAD1       8302 PAD2       
8304 PAD4       8306 PAD6       C1E8 PAGE       C336 PAR01      0074 PARSE      
C9BE PASAMS     8304 PC         C2B9 PEEK       C2D7 PEEK2      C305 PEEK5      
C685 PEEKDT     C632 PEEKG      C610 PEEKV      00FB PERMAZ     0079 PGMCHR     
832C PGMPTR     00DD PIZ        C63C PKG        C675 PKGRAM     C61A PKV        
D72B PLOAD      00C1 PLUSZ      039E PMEM       C64C POG        D82C POKAGN     
C642 POKEG      D881 POKEND     D81F POKER      C5E5 POKEV      00D9 POSZ       
C5EF POV        D87C PREG0      D875 PREG1      D86E PREG2      D867 PREG3      
D860 PREG4      D859 PREG5      D852 PREG6      8344 PRGFLG     009C PRINTZ     
D703 PSAVE      C3E9 PUSH       DADC QTOFF      DAE8 QTOFF1     DACA QTON       
DAD5 QTON1      8386 RAMFRE     830A RAMPTR     8384 RAMTOP     0095 RANDOZ     
C254 READIT     6A8A READL3     0097 READZ      08C0 RECBUF     8307 RECLEN     
00DE RECZ       C3D4 REF01      00F4 RELATZ     009A REMZ       0094 RESTOZ     
CF68 RETNOS     0088 RETURZ     8375 RKEY       D601 RLOOP      00D7 RNDZ       
D681 ROLLD      D6A0 ROLLD1     D699 ROLLDA     D613 ROLLL      D632 ROLLL1     
D62B ROLLLA     D5DA ROLLR      D5FA ROLLR1     D5F3 ROLLRA     D64B ROLLU      
D668 ROLLU1     D661 ROLLUA     00B6 RPARZ      00E1 RPTZZ      D60C RREXIT     
0070 RROLL      D235 RSCAN      D244 RSCAN2     D419 RTNLNK     CF65 RTNSET     
D100 RUNRXB     D270 RUNXB      00A9 RUNZ       DA2E RXBF0      D9ED RXBFIL     
D8C5 RXBIO      DAC1 RXBNEW     D9D5 RXBRUN     D9CD RXBXBP     C96F SAMS       
C97B SAMS2      0032 SAMS2Z     CA17 SAMS3      0033 SAMS3Z     CA1C SAMS4      
CA26 SAMS4A     CA48 SAMSAL     0041 SAMSAZ     0042 SAMSBZ     0043 SAMSCZ     
CA67 SAMSD      0044 SAMSDZ     0045 SAMSEZ     0046 SAMSFZ     CA5B SAMSLP     
CA47 SAMSP3     C9EA SAMSPS     C982 SAMSTR     C9E0 SAMSUB     0007 SAVEZ      
D0AF SAVLIN     D0CC SAVLN5     216E SBASIC     D3DF SBIAS      D132 SCNKEY     
0008 SCR        0083 SCROLL     D5A5 SD0        D571 SD1L       D56A SDAGN      
D578 SDLOOP     D5AE SDOUT      D550 SDOWN      DB08 SEARUN     0003 SEETWO     
00D8 SEGZZ      00B4 SEMICZ     00F6 SEQUEZ     8308 SETCRU     D9D8 SFILES     
00D1 SGNZZ      C022 SINITR     00D2 SINZ       D7E3 SISROF     D7BE SISRON     

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0070 
RXB 2022
00EB SIZEZ      D4D8 SL0        D4A2 SL1L       D49B SLAGN      D481 SLEFT      
D4A9 SLLOOP     C019 SLOADF     D4E7 SLOUT      007B SMB        BFF4 SNDASS     
BFF0 SNDER      D8ED SOG        D8F2 SOV        0020 SPACE      007E SPEED      
C02B SPEEK      00D3 SQRZ       D472 SR0        D43E SR1L       D437 SRAGN      
D268 SRCHLP     831C SREF       D41C SRIGHT     D445 SRLOOP     D47F SROUT      
0082 SSEPZ      DA3A SSIZE      D5B0 SSNCHK     D5C6 SSNGET     D5D9 SSNOUT     
00B2 STEPZ      8330 STLN       0098 STOPZ      8314 STORE      8302 STPT       
831A STREND     BFE2 STRFCH     BFE6 STRGET     0065 STRING     00C7 STRINZ     
BFE4 STRPAR     8312 STRPTR     00DB STRZZ      8324 STVSPT     D53E SU0        
D508 SU1L       D501 SUAGN      BFF6 SUBLP3     BFF8 SUBLP4     00A8 SUBNDZ     
00A7 SUBXTZ     00A1 SUBZ       D50F SULOOP     D54E SUOUT      D4E9 SUP        
D992 SXBRUN     007A SYM        0376 SYMBOL     0000 SYNCHK     6020 SZNEW      
64A0 SZRUNL     65C8 SZSIZE     00FC TABZ       8310 TAG        C145 TAG0       
C15A TAG5       C15D TAG6       C18F TAG7       C19C TAG9       C199 TAGA       
C1A5 TAGB       C1A2 TAGC       00D4 TANZ       8310 TBLPTR     8316 TEMP       
8354 TEMP1      8356 TEMP2      00B0 THENZ      63DD TOPL15     6433 TOPL42     
6462 TOPL55     6372 TOPLEV     00B1 TOZ        CE49 TRAC05     CE72 TRAC09     
CE76 TRAC10     CE95 TRAC12     CEF8 TRAC50     CF09 TRAC51     CF16 TRAC55     
CE1F TRACBK     0090 TRACEZ     0083 TREMZ      00EA UALPHZ     D362 UBATCH     
D66F ULOOP      008F UNBREZ     00C8 UNQSTZ     0091 UNTRAZ     DA6E UP24K      
D81B UPAB       000B UPARR      00F8 UPDATZ     D67A UREXIT     0072 UROLL      
D7EA USER       CFA3 USERFG     00ED USINGZ     D281 UTIL1      D296 UTIL2      
D2A5 UTIL3      D2CA UTIL4      D2D7 UTIL5      D2DA UTIL6      C3B6 VAL01      
00FE VALIDZ     00DA VALZ       8310 VAR5       8311 VAR6       8314 VAR9       
832A VARA       8316 VARB       00F3 VARIAZ     8320 VARW       0075 VCHAR      
DA46 VDPSTK     DB4D VERSN      0078 VPOP       0077 VPUSH      0078 VPUT       
0958 VRAMVS     03C0 VROAZ      00A6 WARNZ      6A82 WARNZZ     C5B7 WRNINP     
C5BD WRNIO      C5C3 WRNLNF     C5A5 WRNNO      C5B1 WRNNPP     C5AB WRNST      
D33F WSD        0073 XBCNS      D9A9 XBFIL      D999 XBPGM      D9A3 XBRUN      
00BC XORZ       

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0071 
RXB 2022
Symbol Table #2 (New,value)  
0000 SYNCHK     0001 FLG        0002 BUF        0003 SEETWO     0004 LEN        
0005 CHRCNT     0005 OLDZ       0007 SAVEZ      0008 SCR        0009 NLEN       
000A DWNARR     000A PABLEN     000B UPARR      000D CHRTN      0020 ALSUP      
0020 SPACE      0032 SAMS2Z     0033 SAMS3Z     0041 SAMSAZ     0042 SAMSBZ     
0043 SAMSCZ     0044 SAMSDZ     0045 SAMSEZ     0046 SAMSFZ     0060 OFFSET     
0065 STRING     0070 COMPCT     0070 RROLL      0071 GETSTR     0071 LROLL      
0072 UROLL      0073 DROLL      0073 XBCNS      0074 HCHAR      0074 PARSE      
0075 VCHAR      0076 ASCHEX     0077 HPUT       0077 VPUSH      0078 VPOP       
0078 VPUT       0079 INVERS     0079 PGMCHR     007A SYM        007B SMB        
007C ASSGNV     007E ALPHA      007E SPEED      007F CRUNCH     0080 CIF        
0081 ELSEZ      0082 SSEPZ      0083 SCROLL     0083 TREMZ      0084 IFZ        
0085 GOZ        0086 GOTOZ      0087 GOSUBZ     0088 RETURZ     0089 DEFZ       
0089 MVUP       008A DIMZ       008B CINIT      008B ENDZ       008C FORZ       
008D LETZ       008E BREAKZ     008F UNBREZ     0090 TRACEZ     0091 UNTRAZ     
0092 INPUTZ     0093 DATAZ      0094 RESTOZ     0095 RANDOZ     0096 NEXTZ      
0097 READZ      0098 STOPZ      0099 DELETZ     009A REMZ       009B ONZ        
009C PRINTZ     009D CALLZ      009E OPTIOZ     009F OPENZ      00A0 CLOSEZ     
00A1 SUBZ       00A2 DISPLZ     00A3 IMAGEZ     00A4 ACCEPZ     00A5 ERRORZ     
00A6 WARNZ      00A7 SUBXTZ     00A8 SUBNDZ     00A9 RUNZ       00AA LINPUZ     
00B0 THENZ      00B1 TOZ        00B2 STEPZ      00B3 COMMAZ     00B4 SEMICZ     
00B5 COLONZ     00B6 RPARZ      00B7 LPARZ      00B8 CONCZ      00BA ORZ        
00BB ANDZ       00BC XORZ       00BD NOTZ       00BE EQUALZ     00BF LESSZ      
00C0 GREATZ     00C1 PLUSZ      00C2 MINUSZ     00C3 MULTZ      00C4 DIVIZ      
00C5 CIRCUZ     00C7 STRINZ     00C8 NUMCOZ     00C8 NUMZ       00C8 UNQSTZ     
00C9 LNZ        00CA EOFZ       00CB ABSZ       00CC ATNZ       00CD COSZ       
00CE EXPZZ      00CF INTZ       00D0 LOGZ       00D1 SGNZZ      00D2 SINZ       
00D3 SQRZ       00D4 TANZ       00D5 LENZ       00D6 CHRZZ      00D7 RNDZ       
00D8 SEGZZ      00D9 POSZ       00DA VALZ       00DB STRZZ      00DC ASCZ       
00DD PIZ        00DE RECZ       00DF MAXZ       00E0 MINZ       00E1 RPTZZ      
00E8 NUMERZ     00E9 DIGITZ     00EA UALPHZ     00EB SIZEZ      00EC ALLZ       
00ED USINGZ     00EE BEEPZ      00EF ERASEZ     00F0 ATZ        00F1 BASEZ      
00F3 VARIAZ     00F4 RELATZ     00F5 INTERZ     00F6 SEQUEZ     00F7 OUTPUZ     
00F8 UPDATZ     00F9 APPENZ     00FA FIXEDZ     00FB PERMAZ     00FC TABZ       
00FD NUMBEZ     00FE VALIDZ     02E2 NLNADD     0371 LODFLG     0376 SYMBOL     
038C BUFSRT     038E BUFEND     039E PMEM       03BB CONFLG     03C0 VROAZ      
0820 CRNBUF     08C0 RECBUF     0958 VRAMVS     2002 FSLOC      2006 INITF      
216E SBASIC     6020 SZNEW      6040 MSGFST     6048 MSGBRK     6065 MSG10      
6076 MSG14      6083 MSG16      609C MSG17      60AD MSG19      60BB MSG24      
60D2 MSG25      60E4 MSG28      60F9 MSG34      6110 MSG36      611C MSG39      
6128 MSG40      6137 MSG43      6148 MSG44      6159 MSG47      616F MSG48      
6189 MSG49      6198 MSG51      61AD MSG54      61BE MSG57      61CC MSG60      
61DB MSG61      61EB MSG67      61FA MSG69      6215 MSG70      622D MSG74      
623A MSG78      624D MSG79      6257 MSG81      626F MSG83      627B MSG84      
6286 MSG97      629B MSG109     62A6 MSG130     62B0 MSG135     62C5 MSG62      
630A MSGCIS     6319 MSGCF      6324 MSG56      6372 TOPLEV     63DD TOPL15     
6433 TOPL42     6462 TOPL55     64A0 SZRUNL     64EF ILLST      65C8 SZSIZE     
66CF EDITLN     698C G698C      6A74 LLIST      6A78 CHKEND     6A82 WARNZZ     
6A84 ERRZZ      6A8A READL3     6D78 G6D78      6E0E ERPRNT     6E1B ERPNT5     
6FBA DISO       7000 ALCEND     7B42 CHARS      8012 CLSALL     802A GRMLST     
802C GRSUB2     802E GRSUB3     8301 PAD1       8302 CHKSUM     8302 MNUM       
8302 PAD2       8302 STPT       8304 PABPTR     8304 PAD4       8304 PC         
8306 CCPPTR     8306 OFFADD     8306 PAD6       8307 RECLEN     8308 CCPADR     
8308 FRESTA     8308 SETCRU     830A FREEND     830A RAMPTR     830C BYTES      
830E BUFPNT     830E CURINC     8310 OLDS       8310 TAG        8310 TBLPTR     
8310 VAR5       8311 FIELD      8311 VAR6       8312 COUNT      8312 STRPTR     
8314 CURLIN     8314 STORE      8314 VAR9       8315 INDEXC     8316 TEMP       
8316 VARB       8317 DEVNUM     8317 DSRFLG     831A STREND     831C SREF       
8320 VARW       8322 ERRCOD     8324 STVSPT     832A VARA       832C PGMPTR     
832E EXTRAM     8330 STLN       8332 ENLN       8340 FREPTR     8342 CHAT       
8344 PRGFLG     8345 FLAG       834B FAC1       834C FAC2       834D FAC3       
834E FAC4       834F FAC5       8350 FAC6       8351 FAC7       8352 FAC8       
8353 FAC9       8354 FAC10      8354 TEMP1      8355 FAC11      8356 FAC12      
8356 TEMP2      8357 FAC13      8358 EEE1       8358 FAC14      8359 FAC15      

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0072 
RXB 2022
835A FAC16      835B FAC17      835D ARG1       835E ARG2       835E INDEX      
835F ARG3       8360 ARG4       8361 ARG5       8362 ARG6       8370 HIVDP      
8375 RKEY       837C ERCODE     837D CB         8384 RAMTOP     8386 RAMFRE     
83C2 GKFLAG     A00A ASC        A01A LNKRT2     A01C LNKRTN     BFE0 COMB       
BFE2 STRFCH     BFE4 STRPAR     BFE6 STRGET     BFE8 NUMFCH     BFEA CFIFCH     
BFEC GNRTN      BFEE NGOOD      BFF0 SNDER      BFF2 CIFSND     BFF4 SNDASS     
BFF6 SUBLP3     BFF8 SUBLP4     BFFA CLRFAC     BFFC GETNUM     C019 SLOADF     
C022 SINITR     C02B SPEEK      C034 CHRPAT     C040 LOAD       C047 LPD0       
C04E LDP1       C060 LDP4       C085 LDP5       C08D LDP2       C0A8 LDRD       
C0AF LDTG       C0C4 GC0C7      C0D2 GC0D5      C0E0 GC0E3      C0F1 GC0F4      
C119 GC11C      C132 LDTG3      C145 TAG0       C153 LDTG2      C15A TAG5       
C15D TAG6       C18F TAG7       C199 TAGA       C19C TAG9       C1A2 TAGC       
C1A5 TAGB       C1B7 LDDNE      C1BE GC1C1      C1CF LDNE2      C1DE LDRET      
C1E0 LDRET2     C1E8 CHKIN      C1E8 PAGE       C1F1 LDIPCS     C204 GC213      
C215 GC224      C216 OPENIT     C254 READIT     C268 CLSIT      C26C DSRCAL     
C281 DSKERR     C295 CLSNOE     C2AA GC2B9      C2AB INIT       C2B9 PEEK       
C2D7 PEEK2      C2F7 GC308      C305 PEEK5      C314 LINKIT     C336 PAR01      
C36B ARRAY      C37E ARRAY2     C38C GC39D      C390 GC3A1      C3AB GC3BC      
C3AD GC3BE      C3B4 GC3C5      C3B6 VAL01      C3CF GC3E0      C3D2 GC3E3      
C3D4 REF01      C3E5 GC3F6      C3E9 PUSH       C3F4 EXE01      C413 NOERR      
C41D GC429      C420 GETCHR     C423 GCHR2      C449 GC46D      C460 GCHR3      
C479 GCHR4      C4A2 ERROR      C502 ERRN01     C505 ERRNO      C509 ERRSY1     
C50C ERRSYN     C510 ERRIBS     C514 ERRNQS     C518 ERRNTL     C51C ERRSNM     
C520 ERROBE     C524 ERRMUV     C528 ERRIM      C52C ERRMF1     C52F ERRMEM     
C533 ERRSO      C537 ERRNWF     C53B ERRFNN     C53F ERRSNS     C543 ERRRSC     
C547 ERRMS      C54B ERRRWG     C54F ERRST      C553 ERRBS      C557 ERRSSL     
C55B ERRLNF     C55F ERRBLN     C563 ERRLTL     C567 ERRCC      C56B ERRCIP     
C56F ERROLP     C573 ERRBA      C577 ERRNPP     C57B ERRBV      C57F ERRIAL     
C583 ERRINP     C587 ERRDE1     C58A ERRDAT     C58E ERRFE      C592 ERRIO      
C596 ERRSNF     C59A ERRPV      C59E ERRUC1     C5A1 ERRIVN     C5A5 WRNNO      
C5AB WRNST      C5B1 WRNNPP     C5B7 WRNINP     C5BD WRNIO      C5C3 WRNLNF     
C5C9 ENDCHK     C5D3 ECSET      C5D6 ECSET2     C5DA ECRTN      C5E0 GKLOAD     
C5E5 POKEV      C5EF POV        C5F9 GKINIT     C609 GKPEEK     C610 PEEKV      
C61A PKV        C620 GKSETV     C629 GKSETG     C632 PEEKG      C63C PKG        
C642 POKEG      C64C POG        C656 LDGRAM     C668 LOADDT     C675 PKGRAM     
C685 PEEKDT     C690 DARROW     C6A0 CATLOG     C6A8 DIRECT     C6B0 GKCAT      
C6B3 GKCATA     C6E1 GKCAT2     C6EC GKCATL     C6FE GKDONE     C715 GKERR      
C724 GKCLSF     C734 GKDSRL     C740 GKDSR      C749 GKPABD     C752 GKSCRN     
C7B8 GKCAT3     C7B9 GKTKEY     C7C1 GKTKE3     C7C9 GKTKE1     C7CA GKTKE2     
C7CF GKSCRL     C7DD GKSCL2     C7E9 GKSCL1     C7F2 GKFNAM     C803 GKCAT5     
C82C GKCAT7     C83C GKDF       C84E GKDV       C860 GKIF       C872 GKIV       
C884 GKPR       C895 GKDIR      C8A8 GKCAT6     C8B4 GKFNA1     C8B9 GKDNUM     
C8BF GKDNU1     C8CD GKDNU2     C8DF GKDSTR     C8F9 DSKDSR     C913 DSKSUB     
C918 DSKNAM     C934 DEVASC     C937 DEV0       C94F DEV1       C95D AMSCRU     
C96F SAMS       C97B SAMS2      C982 SAMSTR     C99A AMSMAP     C9A6 AMSOFF     
C9B2 AMSON      C9BE PASAMS     C9C7 ONAMS      C9D0 OFFAMS     C9D9 MAPAMS     
C9E0 SAMSUB     C9E3 AMSSUB     C9EA SAMSPS     CA17 SAMS3      CA1C SAMS4      
CA26 SAMS4A     CA47 SAMSP3     CA48 SAMSAL     CA5B SAMSLP     CA67 SAMSD      
CB00 KEYTAB     CB14 CHAR1      CB35 CHAR2      CB4E CHAR3      CBE7 CHAR4      
CC51 CHAR5      CCA0 CHAR6      CCEE CHAR7      CD27 CHAR8      CD55 CHAR9      
CD60 CHARA      CD77 ERRTAB     CE1F TRACBK     CE22 GCE22      CE3B GCE3B      
CE48 GCE48      CE49 TRAC05     CE58 GCE58      CE5B GCE5B      CE72 TRAC09     
CE76 TRAC10     CE95 TRAC12     CE99 GCE99      CEAC GCEAC      CEB3 GCEB3      
CEC8 GCEC8      CECF GCECF      CEE2 GCEE2      CEF6 GCEF6      CEF8 TRAC50     
CF02 GCF02      CF05 GCF05      CF09 TRAC51     CF16 TRAC55     CF2C GCF2C      
CF53 GCF53      CF65 RTNSET     CF68 RETNOS     CF69 GETLN2     CF73 FNDLNE     
CF7D GCF7D      CF96 GCF96      CF9C GCF9C      CFA3 USERFG     CFB1 NOUSR      
D000 EDTZZ0     D008 GD008      D00D EDTZ00     D020 GD020      D032 GD032      
D048 GD048      D056 GD056      D06B GD06B      D079 EDTZ01     D07E EDTZ02     
D085 GD085      D097 GD097      D09E GD09E      D0A1 GD0A1      D0AC EDTZ08     
D0AF SAVLIN     D0C6 GD0C6      D0CC SAVLN5     D0D4 GD0D4      D0E7 GD0E7      
D0F3 GD0F3      D100 RUNRXB     D132 SCNKEY     D235 RSCAN      D244 RSCAN2     
D261 LDKEY      D268 SRCHLP     D270 RUNXB      D281 UTIL1      D296 UTIL2      
D2A5 UTIL3      D2CA UTIL4      D2D2 EA0        D2D7 UTIL5      D2DA UTIL6      

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0073 
RXB 2022
D2DE BATCH      D2EB BATCH1     D2FA BATCH2     D310 BATCH3     D313 BATCH4     
D331 CBKEY      D33E CBKEY2     D33F WSD        D34A EAU1       D356 EAWSD      
D362 UBATCH     D376 BEEP       D384 HONK       D392 MODZ       D39D MODAGN     
D3DC ENDMOD     D3DF SBIAS      D3EB BIASAG     D3FA BIASLP     D407 BIASM      
D40A BIASSV     D419 RTNLNK     D41C SRIGHT     D437 SRAGN      D43E SR1L       
D445 SRLOOP     D472 SR0        D47F SROUT      D481 SLEFT      D49B SLAGN      
D4A2 SL1L       D4A9 SLLOOP     D4D8 SL0        D4E7 SLOUT      D4E9 SUP        
D501 SUAGN      D508 SU1L       D50F SULOOP     D53E SU0        D54E SUOUT      
D550 SDOWN      D56A SDAGN      D571 SD1L       D578 SDLOOP     D5A5 SD0        
D5AE SDOUT      D5B0 SSNCHK     D5C6 SSNGET     D5D9 SSNOUT     D5DA ROLLR      
D5F3 ROLLRA     D5FA ROLLR1     D601 RLOOP      D60C RREXIT     D613 ROLLL      
D62B ROLLLA     D632 ROLLL1     D639 LLOOP      D644 LREXIT     D64B ROLLU      
D661 ROLLUA     D668 ROLLU1     D66F ULOOP      D67A UREXIT     D681 ROLLD      
D699 ROLLDA     D6A0 ROLLD1     D6A7 DLOOP      D6B2 DREXIT     D6B9 EXECLK     
D6C8 EXAGN      D6DD CPUPGM     D6E9 EXEBL      D6F4 EXEBLA     D703 PSAVE      
D710 BSAVEL     D72B PLOAD      D738 BLOADL     D753 MYDOIT     D767 MYSAL      
D7A5 ISRON      D7BE SISRON     D7C5 ISROFF     D7E3 SISROF     D7EA USER       
D81B UPAB       D81F POKER      D82C POKAGN     D852 PREG6      D859 PREG5      
D860 PREG4      D867 PREG3      D86E PREG2      D875 PREG1      D87C PREG0      
D881 POKEND     D888 INVS       D897 INVAGN     D8A6 INOALL     D8B7 INVLP      
D8BD INVNOK     D8C5 RXBIO      D8CF IOAGN      D8ED SOG        D8F2 SOV        
D8F7 CRUI       D912 CRUI16     D922 CRUO       D938 CRUO16     D947 CRUO8      
D94C CSW        D954 CSR        D95C CSV        D962 IODONE     D96A CRUTMP     
D972 CRUSET     D988 CSLOAD     D992 SXBRUN     D999 XBPGM      D9A3 XBRUN      
D9A9 XBFIL      D9CD RXBXBP     D9D5 RXBRUN     D9D8 SFILES     D9ED RXBFIL     
DA16 DSRDSS     DA2E RXBF0      DA3A SSIZE      DA46 VDPSTK     DA64 ENDRTN     
DA6B EXTRTN     DA6E UP24K      DAA3 CLOSEA     DAB9 NEWNEW     DAC1 RXBNEW     
DAC7 NEWSZ      DACA QTON       DAD5 QTON1      DADC QTOFF      DAE8 QTOFF1     
DAEE BASIC      DB08 SEARUN     DB1F BYEBYE     DB2B CALPHA     DB4D VERSN      
E025 GE025      

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0074 
RXB 2022
Symbol Table #4 (Def,alpha)  
0034 ACCTON     835C ARG        0032 ATN        0036 BADTON     003B BITREV     
0012 CFI        0014 CNS        002C COS        0010 CSN        8372 DATSTK     
0001 DIVZER     0003 ERRIOV     0006 ERRLOG     0005 ERRNIP     0002 ERRSNN     
0004 ERRSQR     0028 EXP        834A FAC        0006 FADD       000A FCOMP      
0009 FDIV       0008 FMUL       836C FPERAD     0007 FSUB       0038 GETSPACE   
0022 INT        0010 LINK       0018 LOCASE     002A LOG        8370 MEMSIZ     
003D NAMLNK     8300 PAD        0024 PWR        0012 RETURN     000B SADD       
000F SCOMP      000E SDIV       8375 SGN        002E SIN        000D SMUL       
8400 SOUND      0026 SQR        000C SSUB       837C STATUS     0016 STCASE     
8373 SUBSTK     0030 TAN        0007 TRIGER     004A UPCASE     836E VSPTR      
0001 WRNOV      837F XPT        837E YPT        

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0075 
RXB 2022
Symbol Table #8 (Def,value)  
0001 DIVZER     0001 WRNOV      0002 ERRSNN     0003 ERRIOV     0004 ERRSQR     
0005 ERRNIP     0006 ERRLOG     0006 FADD       0007 FSUB       0007 TRIGER     
0008 FMUL       0009 FDIV       000A FCOMP      000B SADD       000C SSUB       
000D SMUL       000E SDIV       000F SCOMP      0010 CSN        0010 LINK       
0012 CFI        0012 RETURN     0014 CNS        0016 STCASE     0018 LOCASE     
0022 INT        0024 PWR        0026 SQR        0028 EXP        002A LOG        
002C COS        002E SIN        0030 TAN        0032 ATN        0034 ACCTON     
0036 BADTON     0038 GETSPACE   003B BITREV     003D NAMLNK     004A UPCASE     
8300 PAD        834A FAC        835C ARG        836C FPERAD     836E VSPTR      
8370 MEMSIZ     8372 DATSTK     8373 SUBSTK     8375 SGN        837C STATUS     
837E YPT        837F XPT        8400 SOUND      
