VIC-BBS SOURCE CODE

The Machine Language Source Code for VIC-BBS

Here is the current source code for the VIC-BBS. This is essentially 6502 machine language, but I use a macro assembler that I wrote in Microsoft Excel that lets me use labels and variables. If you have any questions about this project, please contact me at rick@deepskies.com.

NOTE: There is a variables table at the bottom of the page.

HEX LABEL INST OPER INDEX COMMENT
100D BOOT JSR $FFE7   call CLALL - close all open files
1010   JSR $FFCC   call CLRCHN - reset all channels
1013   LDX $38   load top of memory pointer into X
1015   DEX     move pointer down 256 bytes
1016   DEX     move pointer down 256 bytes
1017   STX $38   store revised pointer for RS232 buffer
1019 OPENCOM LDA #$05   logical file 5
101B   LDX #$02   device number 2 (RS232)
101D   LDY #$00   Command 0
101F   JSR $FFBA   call SETLFS
1022   LDA @PARAMS(LEN)   length of PARAMS variable
1024   LDX @PARAMS(LO)   low order byte
1026   LDY @PARAMS(HI)   high order byte
1028   JSR $FFBD   call SETNAM
102B   JSR $FFC0   call OPEN
102E   LDX #$05   set RS232 as input channel
1030   JSR $FFC6   call CHKIN
1033   JSR $FFE4   call GETIN - TOSS A NULL
1036   JSR $FFCC   call CLRCHN to reset I/O to defaults
1039 OPENCMD LDA #$0F   load 15 into AC (logical device)
103B   LDX #$08   load 8 into XR (disk drive)
103D   LDY #$0F   load 15 into YR (command channel)
103F   JSR $FFBA   call SETLFS
1042   LDA #$00   load zero into AC
1044   LDX @NULL(LO)   load low order byte into XR
1046   LDY @NULL(HI)   load high order byte into YR
1048   JSR $FFBD   call SETNAM
104B   JSR $FFC0   call OPEN
104E INIT LDA #$93   load CLR HOME into AC
1050   JSR $FFD2   call CHROUT
1053   LDA #$0E   load LOWER CASE char into AC
1055   JSR $FFD2   call CHROUT
1058   LDA #$05   load WHITE char into AC
105A   JSR $FFD2   call CHROUT
105D   LDA #$08   load 08 into AC (BLACK on BLACK)
105F   STA $900F   store 08 into 36879 to set screen colors
1062 OPENRES LDA @RES(LEN)   load len of RES into AC
1064   LDX @RES(LO)   load low order byte into XR
1066   LDY @RES(HI)   load high order byte into YR
1068   JSR %OPENREL   call OPENREL
106B   AND #$02   isolate bit 2 = FILE ERROR
106D   CMP #$02   check if FILE ERROR flag is raised
106F   BNE %WAIT   if no error, proceed to WAIT
1071   JMP %END   otherwise exit -> unable to proceed without RES file!
1074 WAIT JSR $FFCC   call CLRCHN
1077   LDA #$06   load 06 into AC (Waiting...)
1079   JSR %GETREC   call GETREC
107C   JSR %PRINTLINE   call PRINTLINE
107F   JSR %RESETVARS   call RESETVARS
1082 WAITLOOP JSR %CARRIERDETECT   call CARRIERDETECT
1085   AND #$01   check bit 1
1087   CMP #$01   compare with 1 = carrier detected
1089   BEQ %LOGON   branch to LOGON loop if carrier detected
108B   JSR $FFE4   call GETIN
108E   CMP #$87   compare with F5 key
1090   BEQ %LOCALMODE   if F5, branch to LOCALMODE
1092   CMP #$85   compare with F1 key
1094   BNE %WAITLOOP   if not F1, branch back to WAITLOOP
1096   JMP %END   otherwise, if F1, jump to END
1099 LOCALMODE LDA @FLAGS   load FLAGS into AC
109C   ORA #$11   turn on bits 1 and 5 = LOCAL MODE
109E   STA @FLAGS   update FLAGS
10A1 LOGON LDA #$93   load CLR HOME into AC
10A3   JSR $FFD2   clear the local screen
10A6   LDA #$07   load 07 into AC (Press RETURN:)
10A8   JSR %GETREC   call GETREC
10AB   LDX #$08   load 08 into XR (supress CR)
10AD   JSR %RAISEFLAG   call RAISEFLAG
10B0   JSR %PRINTLINE   call PRINTLINE
10B3   JSR %RINGBELL   ring the bell!
10B6 LOGONRETURN JSR %GETCHAR   call GETCHAR
10B9   CMP #$00   check for NULL = CARRIER DROPPED
10BB   BNE %LOGONRETURN2    
10BD   JSR %END   call END as a subroutine
10C0   JMP %BOOT   jump back and start over
10C3 LOGONRETURN2 CMP #$0D   compare char with RETURN
10C5   BNE %LOGONRETURN   if not equal, branch back to LOGONRETURN
10C7   JSR %PRINT   call PRINT
10CA   LDA #$08   load 08 into AC (✓welcome1,s,r)
10CC   JSR %GETREC   call GETREC
10CF   JSR %SHOWFILE   call SHOWFILE
10D2   LDA #$09   load 09 into AC (Enter User ID)
10D4   JSR %GETREC   call GETREC
10D7   JSR %PRINTLINE   call PRINTLINE
10DA   LDA #$3E   load 62 into AC (> char)
10DC   JSR %PRINT   call PRINT
10DF   LDA #$03   load 3 into AC
10E1   STA @MAXCHARS   store 3 into MAXCHARS
10E4   JSR %GETLINE   call GETLINE
10E7 MAIN JSR $FFCC   call CLRCHN
10EA   JSR %FLUSHBUFFER   call FLUSHBUFFER
10ED   JSR %CHATMODE   call CHATMODE
10F0   JSR %END   call END as a subroutine
10F3   JMP %BOOT   jump back and start over
10F6 END JSR %HANGUP   call HANGUP
10F9   LDA #$03   load logical file 3 into AC (SEQ)
10FB   JSR $FFC3   call CLOSE
10FE   LDA #$02   load logical file 2 into AC (REL)
1100   JSR $FFC3   call CLOSE
1103   LDA #$0F   load logical file 15 into AC (CMD)
1105   JSR $FFC3   call CLOSE
1108   LDA #$05   load logical file 5 into AC (COM)
110A   JSR $FFC3   call CLOSE
110D   JSR $FFE7   close all remaining open channels
1110   JSR $FFCC   call CLRCHN to reset I/O to defaults
1113   LDX $38   load top of memory pointer into X
1115   INX     move pointer up 256 bytes
1116   INX     move pointer up 256 bytes
1117   STX $38   store revised pointer to restore memory
1119   LDA #$93   load CLR HOME into AC
111B   JSR $FFD2   call CHROUT
111E   LDA #$8E   load UPPER CASE char into AC
1120   JSR $FFD2   call CHROUT
1123   LDA #$1F   load BLUE char into AC
1125   JSR $FFD2   call CHROUT
1128   LDA #$1B   load 27 into AC (WHITE on CYAN)
112A   STA $900F   store 08 into 36879 to set screen colors
112D   RTS     return from subroutine
112E HANGUP LDX #$97   Load 151 into X register
1130   STX $9110   update the RS232 port
1133   JSR %PAUSE   pause for 1 sec to let RS232 update
1136   LDA $9110   load value of RS232 port at 37136
1139   AND #$20   turn on the 6th bit (32)
113B   STA $9110   update the RS232 port
113E   JSR %PAUSE   pause for 1 sec to let RS232 update
1141   JSR %FLUSHBUFFER   flush the RS-232 buffer
1144   RTS     return from subroutine
1145 FLUSHBUFFER JSR $FFCC   call CLRCHN
1148   LDX #$05   set RS232 as input channel
114A   JSR $FFC6   call CHKIN
114D   LDY #$00   load zero into YR register
114F FBLOOP JSR $FFE4   call GETIN
1152   INY     increment YR by one
1153   CPY #$FF   compare YR with 255
1155   BCC %FBLOOP   branch to FBLOOP if chars stil in buffer
1157   RTS     return from subroutine
1158 PAUSE LDX #$00   load zero into X register
115A   STX $A2   zero out LSB of real time clock
115C PAUSEWAIT LDX $A2   load LSB of real time clock
115E   CPX #$3C   compare with 60 jiffies (1 secs)
1160   BCC %PAUSEWAIT   if not, then branch back to PAUSEWAIT
1162   RTS     return from subroutine
1163 PRINT PHA     push char onto stack
1164   JSR %CARRIERDETECT   call CARRIERDETECT
1167   LDA @FLAGS   load FLAGS into AC
116A   AND #$01   check bit 1 - carrier detected
116C   CMP #$01   compare with 1 - is carrier detected?
116E   BNE %PRINTLOCAL   branch to PRINTLOCAL if no carrier
1170   LDX #$05   set RS232 as output channel
1172   JSR $FFC9   call CHKOUT
1175   PLA     pull char off of stack
1176   JSR $FFD2   print char out RS232
1179   PHA     push char onto stack again
117A PRINTLOCAL JSR $FFCC   call CLRCHN to reset I/O to defaults
117D   PLA     pull char off of stack
117E   JSR $FFD2   echo char to local terminal
1181   RTS     return from subroutine
1182 PRINTLINE LDY #$00   load zero into Y register
1184 PRINTLOOP LDA @BUFFER Y grab next char of string to be printed
1187   CMP #$0D   compare with chr$(13)
1189   BEQ %PRINTCRLF   if equal, branch to PRINTCRLF
118B   JSR %PRINT   print char
118E   INY     increment YR by 1
118F   CPY #$28   compare YR with 40
1191   BCC %PRINTLOOP   if less, branch back to PRINTLOOP (SANITY!!!)
1193 PRINTDONE RTS     otherwise, return from subroutine
1194 PRINTCRLF LDA @FLAGS   load FLAGS into AC
1197   AND #$08   turn off all bits except bit #4 (CRLF supress)
1199   CMP #$08   check if bit #4 is on
119B   BEQ %PRINTCRLFSKIP   if on, then supress printing chr$(13) CRLF
119D   LDA #$0D   load 13 into AC
119F   JSR %PRINT   call PRINT
11A2 PRINTCRLFSKIP LDA @FLAGS   load FLAGS into AC
11A5   AND #$F7   turn off bit #4
11A7   STA @FLAGS   update FLAGS
11AA   JMP %PRINTDONE   jump to PRINTDONE as we are finished
11AD GETCHAR JSR $FFCC   call CLRCHN
11B0   JSR %CARRIERDETECT   call CARRIERDETECT
11B3   AND #$01   check bit 1
11B5   CMP #$01   compare with 1 = carrier detected
11B7   BEQ %XREMOTE   branch to XREMOTE loop if carrier detected
11B9   LDA #$00   otherwise, load 00 into AC
11BB   JMP %GOTCHAR   jump to GOTCHAR
11BE XREMOTE LDA @FLAGS   load FLAGS into AC
11C1   AND #$10   check bit 5 = LOCAL MODE
11C3   CMP #$10   compare with 5 = local mode
11C5   BEQ %XLOCAL   if LOCAL MODE, jump to XLOCAL
11C7   LDX #$05   set RS232 as input channel
11C9   JSR $FFC6   call CHKIN
11CC   JSR $FFE4   call GETIN
11CF   CMP #$00   compare with null char
11D1   BEQ %XLOCAL   if null, branch to XLOCAL
11D3   JMP %GOTCHAR   otherwise, jump to GOTCHAR
11D6 XLOCAL JSR $FFCC   call CLRCHN to reset I/O to defaults
11D9   JSR $FFE4   call GETIN
11DC   CMP #$00   compare with null char
11DE   BEQ %GETCHAR   if null, branch to GETCHAR
11E0 GOTCHAR RTS     return from subroutine
11E1 GETLINE LDY #$00   load zero to XR (reset COUNTER)
11E3 GRLOOP JSR %GETCHAR   call GETCHAR
11E6   NOP     add it to some variable here!!!
11E7   CMP #$00   compare char with NULL = carrier dropped
11E9   BEQ %GRDONE   if NULL, then break to GRDONE
11EB   CMP #$0D   compare char with RETURN
11ED   BEQ %GRDONE   if RETURN, then break to GRDONE
11EF   CPY @MAXCHARS   compare YR with MAXCHARS variable
11F2   BEQ %GRDONE   if equal, break to GRDONE
11F4   JSR %PRINT   otherwise print the char
11F7   INY     and increment Y
11F8   JMP %GRLOOP   jump back to GRLOOP
11FB GRDONE LDA #$0D   load chr$(13) into AC (RETURN)
11FD   JSR %PRINT   call PRINT
1200   RTS     return from subroutine
1201 GETREC PHA     push AC onto stack (this is rec # we want)
1202   JSR $FFCC   call CLRCHN
1205   LDX #$0F   load 15 into XR
1207   JSR $FFC9   call CHKOUT
120A   LDA #$50   load char "p" into AC
120C   JSR $FFD2   call CHROUT
120F   LDA #$62   load 98 into AC (96 + command channel #)
1211   JSR $FFD2   call CHROUT
1214   PLA     pull AC from stack
1215   JSR $FFD2   call CHROUT
1218   LDA #$00   load zero into AC (high rec # - always 0)
121A   JSR $FFD2   call CHROUT
121D   LDA #$01   load 01 into AC (start at char #1)
121F   JSR $FFD2   call CHROUT
1222   LDA #$0D   load 13 into AC (end of line)
1224   JSR $FFD2   call CHROUT
1227   JSR %ERRORCHECK   call ERRORCHECK
122A   LDA @FLAGS   load FLAGS into AC
122D   AND #$02   check bit 2 (file error flag)
122F   CMP #$00   compare file error flag to zero (no error)
1231   BNE %GETRECDONE   if error, abort this subroutine
1233   LDY #$00   load zero into YR (counter)
1235 GETRECLOOP JSR $FFCC   call CLRCHN
1238   LDX #$02   load 02 into XR (REL file)
123A   JSR $FFC6   call CHKIN
123D   JSR $FFCF   get char from channel
1240   STA @TEMP   store char in TEMP
1243   JSR %ERRORCHECK   call ERRORCHECK
1246   LDA @FLAGS   read error flag
1249   AND #$02   check bit 2 (file error flag)
124B   CMP #$00   compare file error flag to zero (no error)
124D   BNE %GETRECDONE   if error, abort this subroutine
124F   LDA @TEMP   load char from TEMP
1252   BEQ %GETRECDONE   branch to GETRECDONE if zero or error
1254   STA @BUFFER Y store char in BUFFER
1257   CMP #$0D   compare AC to 13 (return)
1259   BEQ %GETRECDONE   branch to GETRECDONE if equal
125B   INY     increment YR by 1
125C   CPY #$28   compare YR with 40
125E   BCS %GETRECDONE   if greater or equal, exit subroutine
1260   JMP %GETRECLOOP   otherwise branch back for next char
1263 GETRECDONE STY @RECLEN   store YR into RECLEN (used for opening files)
1266   RTS     return from subroutine
1267 SHOWFILE LDA #$0D   load chr(13) into AC (RETURN)
1269   JSR %PRINT   call PRINT
126C   LDA @RECLEN   load length of BUFFER into AC
126F   LDX @BUFFER(LO)   load low order byte into XR
1271   LDY @BUFFER(HI)   load high order byte into YR
1273   JSR %OPENSEQ   call OPENSEQ
1276 SFLOOP JSR $FFCC   call CLRCHN
1279   LDX #$03   load 03 into XR (SEQ file)
127B   JSR $FFC6   call CHKIN
127E   JSR $FFE4   call GETIN
1281   STA @TEMP   store char in TEMP
1284   LDA $90   read status word ST
1286   BNE %SFDONE   if ST <> 0 then branch to SFDONE
1288   LDA @TEMP   load char from TEMP
128B   JSR %PRINT   call PRINT
128E   JMP %SFLOOP   jump back for next char
1291 SFDONE LDA #$03   load logical file 3 into AC (SEQ)
1293   JSR $FFC3   call CLOSE
1296   LDA #$0D   load chr(13) into AC (RETURN)
1298   JSR %PRINT   call PRINT
129B   RTS     return from subroutine
129C RESETVARS LDA #$00   load zero into AC
129E   LDY #$00   load zero into YR
12A0 RVLOOP STA @BUFFER Y clear byte of BUFFER
12A3   INY     increment YR by 1
12A4   CPY #$31   compare YR with 49
12A6   BNE %RVLOOP   if not equal, branch back to RVLOOP
12A8   RTS     return from subroutine
12A9 CLEARBUFFER LDA #$00   load zero into AC
12AB   LDY #$00   load zero into YR
12AD CBLOOP STA @BUFFER Y clear byte of BUFFER
12B0   INY     increment YR by 1
12B1   CPY #$28   compare YR with 40
12B3   BNE %CBLOOP   if not equal, branch back to CBLOOP
12B5   RTS     return from subroutine
12B6 CARRIERDETECT LDA @FLAGS   load FLAGS into AC
12B9   AND #$10   filter for bit 5 = LOCAL MODE
12BB   CMP #$10   check bit 5 = LOCAL MODE
12BD   BNE %CARRIERCHECK   if not LOCAL MODE, branch to CARRIERCHECK
12BF   JMP %CARRIEROK   if LOCAL MODE, jump to CARRIEROK
12C2 CARRIERCHECK LDA $9110   load RS232 status from 37136
12C5   AND #$08   check bit 4 = CARRIER DETECTED (08=REAL, 10=VICE)
12C7   CMP #$08   compare with 08 = carrier detected (08=REAL, 10=VICE)
12C9   BEQ %CARRIEROK   if carrier detected, branch to CARRIEROK
12CB CARRIEROFF LDA @FLAGS   load FLAGS into AC
12CE   AND #$FE   turn off bit 1 = carrier detected
12D0   STA @FLAGS   update FLAGS
12D3   JMP %CARRIERDONE   jump to CARRIERDONE
12D6 CARRIEROK LDA @FLAGS   load FLAGS into AC
12D9   ORA #$01   turn on bit 1 = carrier detected
12DB   STA @FLAGS   update FLAGS
12DE CARRIERDONE RTS     return from subroutine
12DF OPENREL JSR $FFBD   call SETNAM
12E2   LDA #$02   load 02 into AC (logical device)
12E4   LDX #$08   load 08 into XR (disk drive)
12E6   LDY #$02   load 02 into YR (command channel)
12E8   JSR $FFBA   call SETLFS
12EB   JSR $FFC0   call OPEN
12EE   JSR %ERRORFILE   call ERRORFILE
12F1   RTS     return from subroutine
12F2 OPENSEQ JSR $FFBD   call SETNAM
12F5   LDA #$03   load 03 into AC (logical device)
12F7   LDX #$08   load 08 into XR (disk drive)
12F9   LDY #$03   load 03 into YR (command channel)
12FB   JSR $FFBA   call SETLFS
12FE   JSR $FFC0   call OPEN
1301   JSR %ERRORFILE   call ERRORFILE
1304   RTS     return from subroutine
1305 ERRORCHECK LDX #$FD   load 253 into XR
1307   JSR %LOWERFLAG   lower file error flag
130A   LDA $90   read status word ST
130C   CMP #$00   compare with 00 = no error
130E   BEQ %ERROREXIT   if equal, branch to ERROREXIT
1310   CMP #$40   compare with 64 = end of file
1312   BEQ %ERROREXIT   if equal, branch to ERROREXIT
1314   JSR %READERROR   read drive status into BUFFER
1317   JSR %RVSON   turn reverse ON
131A   LDA #$1C   load RED into AC
131C   JSR %PRINT   call PRINT
131F   JSR %PRINTLINE   display contents of BUFFER to local and remote users
1322   JSR %RVSOFF   turn reverse OFF
1325   LDX #$02   load 02 into XR
1327   JSR %RAISEFLAG   raise file error flag
132A ERROREXIT LDA @FLAGS   load FLAGS into AC
132D   RTS     return from subroutine
132E ERRORFILE LDX #$FD   load 253 into XR
1330   JSR %LOWERFLAG   lower file error flag
1333   JSR %READERROR   read drive status into BUFFER
1336   LDA @BUFFER   load first char of BUFFER into AC
1339   CMP #$30   compare with 0 (zero)
133B   BNE %EFACTION   if not zero, branch to EFACTION
133D   LDX #$01   load 01 into XR
133F   LDA @BUFFER X load second char of BUFFER into AC
1342   CMP #$30   compare with 0 (zero)
1344   BEQ %EFEXIT   if zero, branch to EFEXIT
1346 EFACTION JSR %RVSON   call RVSON
1349   JSR %PRINTLINE   output error to local and remove users
134C   JSR %RVSOFF   call RVSOFF
134F   LDX #$02   load 02 into XR
1351   JSR %RAISEFLAG   raise file error flag
1354 EFEXIT LDA @FLAGS   load FLAGS into AC
1357   RTS     return from subroutine
1358 RAISEFLAG STX @MASK   store bits to manipulate in MASK
135B   LDA @FLAGS   load FLAGS into AC
135E   ORA @MASK   turn on bits specified in MASK
1361   STA @FLAGS   update FLAGS
1364   RTS     return from subroutine
1365 LOWERFLAG STX @MASK   store bits to manipulate in MASK
1368   LDA @FLAGS   load FLAGS into AC
136B   AND @MASK   turn off bits specified in MASK
136E   STA @FLAGS   update FLAGS
1371   RTS     return from subroutine
1372 RVSON LDA #$12   load 18 into AC
1374   JSR %PRINT   call PRINT
1377   RTS     return from subroutine
1378 RVSOFF LDA #$92   load 146 into AC
137A   JSR %PRINT   call PRINT
137D   RTS     return from subroutine
137E RINGBELL LDX #$C8   load 200 into XR
1380   STX $900C   store it in V3 register
1383   STX $900A   store it also in V1 register
1386   LDX #$64   load 100 into XR
1388   STX $900B   store it in V2 register
138B   LDX #$0F   load 15 into XR
138D   STX $900E   store it in volume register (turn sound on)
1390   JSR %PAUSE   pause for 1 second
1393   LDX #$0F   load 15 into XR
1395 RINGCONT DEX     decrement XR by 1
1396   STX $900E   store it in volume register (turn sound down)
1399   CPX #$00   compare XR with zero
139B   BEQ %RINGDONE   if zero, then sound is off, we can leave
139D   JMP %RINGCONT   otherwise jump back and turn volume down more...
13A0 RINGDONE RTS     return from subroutine
13A1 READERROR JSR %CLEARBUFFER   call CLEARBUFFER
13A4   JSR $FFCC   call CLRCHN
13A7   LDY #$00   load zero into YR (counter)
13A9   LDX #$0F   load 15 into XR
13AB   JSR $FFC6   call CHKIN
13AE RELOOP JSR $FFCF   get char from channel
13B1   BEQ %READEXIT   branch to READEXIT if zero or error
13B3   STA @BUFFER Y store char in BUFFER
13B6   CMP #$0D   compare AC to 13 (return)
13B8   BEQ %READEXIT   branch to READEXIT if equal
13BA   INY     increment YR by one
13BB   CPY #$28   compare counter with 40
13BD   BEQ %READEXIT   branch to READEXIT if end of buffer
13BF   JMP %RELOOP   otherwise branch back for next char
13C2 READEXIT RTS     return from subroutine
13C3 CHATMODE LDA #$0C   load 12 into AC (Entering CHAT mode...)
13C5   JSR %GETREC   call GETREC
13C8   JSR %PRINTLINE   call PRINTLINE
13CB CHATTERBOX LDX #$00   load zero into XR
13CD   STX $CC   store XR into 204 (cursor ON)
13CF   JSR %GETCHAR   call GETCHAR
13D2   CMP #$00   compare to NULL (carrier dropped)
13D4   BEQ %CHATDONE   if carrier dropped, branch to CHATDONE
13D6   CMP #$86   compare with F3 key
13D8   BEQ %CHATDONE   if equal, branch to CHATDONE
13DA   CMP #$0D   compare with RETURN key
13DC   BNE %CHATPRINT   if not RETURN, go ahead and just print
13DE CURSORPHASE LDX $CF   load 207 into XR
13E0   CPX #$00   compare with 00 = cursor phase off
13E2   BNE %CURSORPHASE   if not zero, branch back to CURSORPHASE
13E4   LDX #$01   load 01 into XR
13E6   STX $CC   store XR into 204 (cursor OFF)
13E8 CHATPRINT JSR %PRINT   call PRINT
13EB   JMP %CHATTERBOX   otherwise jump back to CHATTERBOX
13EE CHATDONE LDX $CF   load 207 into XR
13F0   CPX #$00   compare with 00 = cursor phase off
13F2   BNE %CHATDONE   if not zero, branch back to CURSORPHASE
13F4   LDX #$01   load 01 into XR
13F6   STX $CC   store XR into 204 (cursor OFF)
13F8   RTS     return from subroutine

VARIABLES

START END NAME LEN VALUE COMMENT
1BC2 1BC2 NULL 1 \00 pseudo null for opening error channel
1BC3 1BC5 RES 3 RES name of resources file on diskette  
1BC6 1BED BUFFER 40   buffer for I/O operations    
1BEE 1BEE REC 1 \00 record in resources to display  
1BEF 1BEF RECLEN 1 \00 record length imported into BUFFER  
1BF0 1BF0 MAXCHARS 1 \00 max chars to get during GETLINE  
1BF1 1BF1 TEMP 1 \00 temporary byte      
1BF2 1BF2 AC 1 \00 temp storage for AC    
1BF3 1BF3 FLAGS 1 \00 system flags (see NOTES)    
1BF4 1BF4 MASK 1 \00 mask variable for setting flags  
1BF5 1BF5 USERID 1 \00 current online user's ID #    
1BF6 1BF6 SECLEV 1 \00 current online user's security level (1-6)
1BF7 1BF7 LASTCALLER 1 \00 last caller's user ID #    
1BF8 1BF9 LOWMSG 2 \00\00 0-65535        
1BFA 1BFB HIGHMSG 2 \00\00 0-65535        
1BFC 1BFD CALLS 2 \00\00 0-65535        
1BFE 1BFF PARAMS 2 \06\00 RS-232 parameters (06 = 300 baud)  

FLAGS

Bit 1 - 01 - 001 > carrier detect
Bit 2 - 02 - 002 > file error
Bit 3 - 04 - 004 > filter input
Bit 4 - 08 - 008 > supress CR on PRINT
Bit 5 - 10 - 016 > local mode
Bit 6 - 20 - 032 > ?
Bit 7 - 40 - 064 > ?
Bit 8 - 80 - 128 > ?