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 | 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 | 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 | 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 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | call PRINT | |||
1377 | RTS | return from subroutine | |||
1378 | RVSOFF | LDA | #$92 | load 146 into AC | |
137A | JSR | 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 | 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 |
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) |
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 > ?