BC93 ( cb_equates.asm):00001 ABS EQU $BC93 00B5 ( cb_equates.asm):00002 ALLCOL EQU $00B5 00E8 ( cb_equates.asm):00003 ANGLE EQU $00E8 0008 ( cb_equates.asm):00004 ARYDIS EQU $0008 001F ( cb_equates.asm):00005 ARYEND EQU $001F 001D ( cb_equates.asm):00006 ARYTAB EQU $001D B6A0 ( cb_equates.asm):00007 ASC EQU $B6A0 0988 ( cb_equates.asm):00008 ATTCTR EQU $0988 A990 ( cb_equates.asm):00009 AUDIO EQU $A990 A074 ( cb_equates.asm):00010 BACDST EQU $A074 00B3 ( cb_equates.asm):00011 BAKCOL EQU $00B3 A000 ( cb_equates.asm):00012 BASIC EQU $A000 A0E8 ( cb_equates.asm):00013 BAWMST EQU $A0E8 00BA ( cb_equates.asm):00014 BEGGRP EQU $00BA A0F6 ( cb_equates.asm):00015 BFRQSV EQU $A0F6 002B ( cb_equates.asm):00016 BINVAL EQU $002B A9B3 ( cb_equates.asm):00017 BIRQSV EQU $A9B3 0094 ( cb_equates.asm):00018 BLKCNT EQU $0094 A006 ( cb_equates.asm):00019 BLKIN EQU $A006 007D ( cb_equates.asm):00020 BLKLEN EQU $007D A008 ( cb_equates.asm):00021 BLKOUT EQU $A008 007C ( cb_equates.asm):00022 BLKTYP EQU $007C 0017 ( cb_equates.asm):00023 BOTSTK EQU $0017 AA1A ( cb_equates.asm):00024 BROMHK EQU $AA1A 0008 ( cb_equates.asm):00025 BS EQU $0008 01DA ( cb_equates.asm):00026 CASBUF EQU $01DA 011A ( cb_equates.asm):00027 CASFLG EQU $011A A77C ( cb_equates.asm):00028 CASON EQU $A77C 0084 ( cb_equates.asm):00029 CBTPHA EQU $0084 007E ( cb_equates.asm):00030 CBUFAD EQU $007E 0080 ( cb_equates.asm):00031 CCKSUM EQU $0080 01D1 ( cb_equates.asm):00032 CFNBUF EQU $01D1 0001 ( cb_equates.asm):00033 CHARAC EQU $0001 00A6 ( cb_equates.asm):00034 CHARAD EQU $00A6 00DB ( cb_equates.asm):00035 CHGFLG EQU $00DB B68C ( cb_equates.asm):00036 CHR EQU $B68C A002 ( cb_equates.asm):00037 CHROUT EQU $A002 0070 ( cb_equates.asm):00038 CINBFL EQU $0070 0079 ( cb_equates.asm):00039 CINCTR EQU $0079 007A ( cb_equates.asm):00040 CINPTR EQU $007A AE41 ( cb_equates.asm):00041 CLEAR EQU $AE41 A498 ( cb_equates.asm):00042 CLOAD EQU $A498 A416 ( cb_equates.asm):00043 CLOSE EQU $A416 A910 ( cb_equates.asm):00044 CLS EQU $A910 0085 ( cb_equates.asm):00045 CLSTSN EQU $0085 0090 ( cb_equates.asm):00046 CMP0 EQU $0090 0091 ( cb_equates.asm):00047 CMP1 EQU $0091 008F ( cb_equates.asm):00048 CMPMID EQU $008F 0055 ( cb_equates.asm):00049 COEFCT EQU $0055 0064 ( cb_equates.asm):00050 COEFPT EQU $0064 0120 ( cb_equates.asm):00051 COMVEC EQU $0120 AE30 ( cb_equates.asm):00052 CONT EQU $AE30 A26E ( cb_equates.asm):00053 CONTAB EQU $A26E 0083 ( cb_equates.asm):00054 CPERTM EQU $0083 0082 ( cb_equates.asm):00055 CPULWD EQU $0082 000D ( cb_equates.asm):00056 CR EQU $000D A44C ( cb_equates.asm):00057 CSAVE EQU $A44C A004 ( cb_equates.asm):00058 CSRDON EQU $A004 0081 ( cb_equates.asm):00059 CSRERR EQU $0081 00C1 ( cb_equates.asm):00060 CSSVAL EQU $00C1 0068 ( cb_equates.asm):00061 CURLIN EQU $0068 0088 ( cb_equates.asm):00062 CURPOS EQU $0088 FF20 ( cb_equates.asm):00063 DA EQU $FF20 0958 ( cb_equates.asm):00064 DASCFL EQU $0958 AEE0 ( cb_equates.asm):00065 DATA EQU $AEE0 0033 ( cb_equates.asm):00066 DATPTR EQU $0033 0035 ( cb_equates.asm):00067 DATTMP EQU $0035 0031 ( cb_equates.asm):00068 DATTXT EQU $0031 0600 ( cb_equates.asm):00069 DBUF0 EQU $0600 0700 ( cb_equates.asm):00070 DBUF1 EQU $0700 00EE ( cb_equates.asm):00071 DCBPT EQU $00EE 00EB ( cb_equates.asm):00072 DCDRV EQU $00EB 00EA ( cb_equates.asm):00073 DCOPC EQU $00EA 00F0 ( cb_equates.asm):00074 DCSTA EQU $00F0 00EC ( cb_equates.asm):00075 DCTRK EQU $00EC 045E ( cb_equates.asm):00076 DEBDEL EQU $045E 011B ( cb_equates.asm):00077 DEBVAL EQU $011B 095A ( cb_equates.asm):00078 DEFDRV EQU $095A 006A ( cb_equates.asm):00079 DEVCFW EQU $006A 006B ( cb_equates.asm):00080 DEVLCF EQU $006B 006F ( cb_equates.asm):00081 DEVNUM EQU $006F 006C ( cb_equates.asm):00082 DEVPOS EQU $006C 006D ( cb_equates.asm):00083 DEVWID EQU $006D 0954 ( cb_equates.asm):00084 DEXTBF EQU $0954 097C ( cb_equates.asm):00085 DFFLEN EQU $097C 0989 ( cb_equates.asm):00086 DFLBUF EQU $0989 0957 ( cb_equates.asm):00087 DFLTYP EQU $0957 B34E ( cb_equates.asm):00088 DIM EQU $B34E 0005 ( cb_equates.asm):00089 DIMFLG EQU $0005 0020 ( cb_equates.asm):00090 DIRLEN EQU $0020 00E6 ( cb_equates.asm):00091 DLBAUD EQU $00E6 095D ( cb_equates.asm):00092 DLODFL EQU $095D 095E ( cb_equates.asm):00093 DMRGFL EQU $095E 094C ( cb_equates.asm):00094 DNAMBF EQU $094C 0983 ( cb_equates.asm):00095 DNMIVC EQU $0983 C000 ( cb_equates.asm):00096 DOSBAS EQU $C000 2600 ( cb_equates.asm):00097 DOSBUF EQU $2600 00E5 ( cb_equates.asm):00098 DOTVAL EQU $00E5 097E ( cb_equates.asm):00099 DR0TRK EQU $097E 095C ( cb_equates.asm):00100 DRESFL EQU $095C 0986 ( cb_equates.asm):00101 DRGRAM EQU $0986 0959 ( cb_equates.asm):00102 DRUNFL EQU $0959 00ED ( cb_equates.asm):00103 DSEC EQU $00ED FF40 ( cb_equates.asm):00104 DSKREG EQU $FF40 095F ( cb_equates.asm):00105 DUSRVC EQU $095F 0987 ( cb_equates.asm):00106 DVERFL EQU $0987 AEE3 ( cb_equates.asm):00107 ELSE EQU $AEE3 0002 ( cb_equates.asm):00108 ENDCHR EQU $0002 0000 ( cb_equates.asm):00109 ENDFLG EQU $0000 00B7 ( cb_equates.asm):00110 ENDGRP EQU $00B7 AE02 ( cb_equates.asm):00111 ENDTOK EQU $AE02 A5CE ( cb_equates.asm):00112 EOF EQU $A5CE 001B ( cb_equates.asm):00113 ESC EQU $001B B70B ( cb_equates.asm):00114 EVALEXPB EQU $B70B 8000 ( cb_equates.asm):00115 EXBAS EQU $8000 A53E ( cb_equates.asm):00116 EXEC EQU $A53E 009D ( cb_equates.asm):00117 EXECJP EQU $009D 011D ( cb_equates.asm):00118 EXPJMP EQU $011D FFC6 ( cb_equates.asm):00119 F0CLR EQU $FFC6 FFC7 ( cb_equates.asm):00120 F0SET EQU $FFC7 FFC8 ( cb_equates.asm):00121 F1CLR EQU $FFC8 FFC9 ( cb_equates.asm):00122 F1SET EQU $FFC9 FFCA ( cb_equates.asm):00123 F2CLR EQU $FFCA FFCB ( cb_equates.asm):00124 F2SET EQU $FFCB FFCC ( cb_equates.asm):00125 F3CLR EQU $FFCC FFCD ( cb_equates.asm):00126 F3SET EQU $FFCD FFCE ( cb_equates.asm):00127 F4CLR EQU $FFCE FFCF ( cb_equates.asm):00128 F4SET EQU $FFCF FFD0 ( cb_equates.asm):00129 F5CLR EQU $FFD0 FFD1 ( cb_equates.asm):00130 F5SET EQU $FFD1 FFD2 ( cb_equates.asm):00131 F6CLR EQU $FFD2 FFD3 ( cb_equates.asm):00132 F6SET EQU $FFD3 0800 ( cb_equates.asm):00133 FATBL0 EQU $0800 084A ( cb_equates.asm):00134 FATBL1 EQU $084A 0894 ( cb_equates.asm):00135 FATBL2 EQU $0894 08DE ( cb_equates.asm):00136 FATBL3 EQU $08DE 004A ( cb_equates.asm):00137 FATLEN EQU $004A 095B ( cb_equates.asm):00138 FCBACT EQU $095B 094A ( cb_equates.asm):00139 FCBADR EQU $094A 0119 ( cb_equates.asm):00140 FCBLEN EQU $0119 00F1 ( cb_equates.asm):00141 FCBTMP EQU $00F1 0928 ( cb_equates.asm):00142 FCBV1 EQU $0928 FF48 ( cb_equates.asm):00143 FDCREG EQU $FF48 0078 ( cb_equates.asm):00144 FILSTA EQU $0078 FFF6 ( cb_equates.asm):00145 FIRQ EQU $FFF6 FF93 ( cb_equates.asm):00146 FIRQENR EQU $FF93 AD47 ( cb_equates.asm):00147 FOR EQU $AD47 00B2 ( cb_equates.asm):00148 FORCOL EQU $00B2 000C ( cb_equates.asm):00149 FORMF EQU $000C 004F ( cb_equates.asm):00150 FP0EXP EQU $004F 0054 ( cb_equates.asm):00151 FP0SGN EQU $0054 005C ( cb_equates.asm):00152 FP1EXP EQU $005C 0061 ( cb_equates.asm):00153 FP1SGN EQU $0061 0050 ( cb_equates.asm):00154 FPA0 EQU $0050 005D ( cb_equates.asm):00155 FPA1 EQU $005D 0013 ( cb_equates.asm):00156 FPA2 EQU $0013 005B ( cb_equates.asm):00157 FPCARY EQU $005B 0063 ( cb_equates.asm):00158 FPSBYT EQU $0063 0025 ( cb_equates.asm):00159 FRESPC EQU $0025 0021 ( cb_equates.asm):00160 FRETOP EQU $0021 010F ( cb_equates.asm):00161 FRQVEC EQU $010F 0007 ( cb_equates.asm):00162 GARBFL EQU $0007 A70B ( cb_equates.asm):00163 GETBLK EQU $A70B 00A5 ( cb_equates.asm):00164 GETCCH EQU $00A5 A9DE ( cb_equates.asm):00165 GETJOY EQU $A9DE 009F ( cb_equates.asm):00166 GETNCH EQU $009F B4F4 ( cb_equates.asm):00167 GIVABF EQU $B4F4 AE86 ( cb_equates.asm):00168 GO EQU $AE86 0044 ( cb_equates.asm):00169 GRANMX EQU $0044 0086 ( cb_equates.asm):00170 GRBLOK EQU $0086 00BC ( cb_equates.asm):00171 GRPRAM EQU $00BC FF9F ( cb_equates.asm):00172 H.OFSET0 EQU $FF9F 00BD ( cb_equates.asm):00173 HORBEG EQU $00BD 00B9 ( cb_equates.asm):00174 HORBYT EQU $00B9 00C7 ( cb_equates.asm):00175 HORDEF EQU $00C7 00C3 ( cb_equates.asm):00176 HOREND EQU $00C3 00E6 ( cb_equates.asm):00177 HRMODE EQU $00E6 00E7 ( cb_equates.asm):00178 HRWIDTH EQU $00E7 0004 ( cb_equates.asm):00179 IFCTR EQU $0004 AF14 ( cb_equates.asm):00180 IFTOK EQU $AF14 0087 ( cb_equates.asm):00181 IKEYIM EQU $0087 FF90 ( cb_equates.asm):00182 INIT0 EQU $FF90 FF91 ( cb_equates.asm):00183 INIT1 EQU $FF91 A564 ( cb_equates.asm):00184 INKEY EQU $A564 0010 ( cb_equates.asm):00185 INPFIL EQU $0010 0009 ( cb_equates.asm):00186 INPFLG EQU $0009 AFF5 ( cb_equates.asm):00187 INPUT EQU $AFF5 BCEE ( cb_equates.asm):00188 INT EQU $BCEE B3ED ( cb_equates.asm):00189 INTCNV EQU $B3ED FFF8 ( cb_equates.asm):00190 IRQ EQU $FFF8 FF92 ( cb_equates.asm):00191 IRQENR EQU $FF92 010C ( cb_equates.asm):00192 IRQVEC EQU $010C A00A ( cb_equates.asm):00193 JOYIN EQU $A00A A9C6 ( cb_equates.asm):00194 JOYSTK EQU $A9C6 0152 ( cb_equates.asm):00195 KEYBUF EQU $0152 A1CB ( cb_equates.asm):00196 KEYIN EQU $A1CB A00E ( cb_equates.asm):00197 LA00E EQU $A00E A02A ( cb_equates.asm):00198 LA02A EQU $A02A A056 ( cb_equates.asm):00199 LA056 EQU $A056 A05E ( cb_equates.asm):00200 LA05E EQU $A05E A06E ( cb_equates.asm):00201 LA06E EQU $A06E A070 ( cb_equates.asm):00202 LA070 EQU $A070 A072 ( cb_equates.asm):00203 LA072 EQU $A072 A077 ( cb_equates.asm):00204 LA077 EQU $A077 A084 ( cb_equates.asm):00205 LA084 EQU $A084 A093 ( cb_equates.asm):00206 LA093 EQU $A093 A0B6 ( cb_equates.asm):00207 LA0B6 EQU $A0B6 A0C0 ( cb_equates.asm):00208 LA0C0 EQU $A0C0 A0CE ( cb_equates.asm):00209 LA0CE EQU $A0CE A0E2 ( cb_equates.asm):00210 LA0E2 EQU $A0E2 A0F3 ( cb_equates.asm):00211 LA0F3 EQU $A0F3 A0FC ( cb_equates.asm):00212 LA0FC EQU $A0FC A102 ( cb_equates.asm):00213 LA102 EQU $A102 A108 ( cb_equates.asm):00214 LA108 EQU $A108 A10D ( cb_equates.asm):00215 LA10D EQU $A10D A123 ( cb_equates.asm):00216 LA123 EQU $A123 A13D ( cb_equates.asm):00217 LA13D EQU $A13D A13E ( cb_equates.asm):00218 LA13E EQU $A13E A140 ( cb_equates.asm):00219 LA140 EQU $A140 A142 ( cb_equates.asm):00220 LA142 EQU $A142 A143 ( cb_equates.asm):00221 LA143 EQU $A143 A145 ( cb_equates.asm):00222 LA145 EQU $A145 A147 ( cb_equates.asm):00223 LA147 EQU $A147 A156 ( cb_equates.asm):00224 LA156 EQU $A156 A157 ( cb_equates.asm):00225 LA157 EQU $A157 A165 ( cb_equates.asm):00226 LA165 EQU $A165 A166 ( cb_equates.asm):00227 LA166 EQU $A166 A16F ( cb_equates.asm):00228 LA16F EQU $A16F A171 ( cb_equates.asm):00229 LA171 EQU $A171 A176 ( cb_equates.asm):00230 LA176 EQU $A176 A17B ( cb_equates.asm):00231 LA17B EQU $A17B A185 ( cb_equates.asm):00232 LA185 EQU $A185 A186 ( cb_equates.asm):00233 LA186 EQU $A186 A190 ( cb_equates.asm):00234 LA190 EQU $A190 A197 ( cb_equates.asm):00235 LA197 EQU $A197 A199 ( cb_equates.asm):00236 LA199 EQU $A199 A1AB ( cb_equates.asm):00237 LA1AB EQU $A1AB A1AE ( cb_equates.asm):00238 LA1AE EQU $A1AE A1B1 ( cb_equates.asm):00239 LA1B1 EQU $A1B1 A1B3 ( cb_equates.asm):00240 LA1B3 EQU $A1B3 A1BF ( cb_equates.asm):00241 LA1BF EQU $A1BF A1C1 ( cb_equates.asm):00242 LA1C1 EQU $A1C1 A1D9 ( cb_equates.asm):00243 LA1D9 EQU $A1D9 A1F4 ( cb_equates.asm):00244 LA1F4 EQU $A1F4 A20C ( cb_equates.asm):00245 LA20C EQU $A20C A21A ( cb_equates.asm):00246 LA21A EQU $A21A A220 ( cb_equates.asm):00247 LA220 EQU $A220 A22B ( cb_equates.asm):00248 LA22B EQU $A22B A22C ( cb_equates.asm):00249 LA22C EQU $A22C A22E ( cb_equates.asm):00250 LA22E EQU $A22E A238 ( cb_equates.asm):00251 LA238 EQU $A238 A23A ( cb_equates.asm):00252 LA23A EQU $A23A A244 ( cb_equates.asm):00253 LA244 EQU $A244 A245 ( cb_equates.asm):00254 LA245 EQU $A245 A247 ( cb_equates.asm):00255 LA247 EQU $A247 A25D ( cb_equates.asm):00256 LA25D EQU $A25D A264 ( cb_equates.asm):00257 LA264 EQU $A264 A26A ( cb_equates.asm):00258 LA26A EQU $A26A A29E ( cb_equates.asm):00259 LA29E EQU $A29E A2A6 ( cb_equates.asm):00260 LA2A6 EQU $A2A6 A2A8 ( cb_equates.asm):00261 LA2A8 EQU $A2A8 A2AA ( cb_equates.asm):00262 LA2AA EQU $A2AA A2BF ( cb_equates.asm):00263 LA2BF EQU $A2BF A2C3 ( cb_equates.asm):00264 LA2C3 EQU $A2C3 A2D0 ( cb_equates.asm):00265 LA2D0 EQU $A2D0 A2ED ( cb_equates.asm):00266 LA2ED EQU $A2ED A2F3 ( cb_equates.asm):00267 LA2F3 EQU $A2F3 A2FB ( cb_equates.asm):00268 LA2FB EQU $A2FB A2FD ( cb_equates.asm):00269 LA2FD EQU $A2FD A302 ( cb_equates.asm):00270 LA302 EQU $A302 A305 ( cb_equates.asm):00271 LA305 EQU $A305 A30A ( cb_equates.asm):00272 LA30A EQU $A30A A31D ( cb_equates.asm):00273 LA31D EQU $A31D A323 ( cb_equates.asm):00274 LA323 EQU $A323 A32F ( cb_equates.asm):00275 LA32F EQU $A32F A340 ( cb_equates.asm):00276 LA340 EQU $A340 A342 ( cb_equates.asm):00277 LA342 EQU $A342 A344 ( cb_equates.asm):00278 LA344 EQU $A344 A34E ( cb_equates.asm):00279 LA34E EQU $A34E A35D ( cb_equates.asm):00280 LA35D EQU $A35D A35F ( cb_equates.asm):00281 LA35F EQU $A35F A373 ( cb_equates.asm):00282 LA373 EQU $A373 A37C ( cb_equates.asm):00283 LA37C EQU $A37C A384 ( cb_equates.asm):00284 LA384 EQU $A384 A38D ( cb_equates.asm):00285 LA38D EQU $A38D A390 ( cb_equates.asm):00286 LA390 EQU $A390 A39A ( cb_equates.asm):00287 LA39A EQU $A39A A3B4 ( cb_equates.asm):00288 LA3B4 EQU $A3B4 A3B8 ( cb_equates.asm):00289 LA3B8 EQU $A3B8 A3C2 ( cb_equates.asm):00290 LA3C2 EQU $A3C2 A3C6 ( cb_equates.asm):00291 LA3C6 EQU $A3C6 A3C8 ( cb_equates.asm):00292 LA3C8 EQU $A3C8 A3CC ( cb_equates.asm):00293 LA3CC EQU $A3CC A3CD ( cb_equates.asm):00294 LA3CD EQU $A3CD A3D9 ( cb_equates.asm):00295 LA3D9 EQU $A3D9 A3E8 ( cb_equates.asm):00296 LA3E8 EQU $A3E8 A3ED ( cb_equates.asm):00297 LA3ED EQU $A3ED A3FB ( cb_equates.asm):00298 LA3FB EQU $A3FB A400 ( cb_equates.asm):00299 LA400 EQU $A400 A403 ( cb_equates.asm):00300 LA403 EQU $A403 A406 ( cb_equates.asm):00301 LA406 EQU $A406 A415 ( cb_equates.asm):00302 LA415 EQU $A415 A41B ( cb_equates.asm):00303 LA41B EQU $A41B A426 ( cb_equates.asm):00304 LA426 EQU $A426 A429 ( cb_equates.asm):00305 LA429 EQU $A429 A42D ( cb_equates.asm):00306 LA42D EQU $A42D A444 ( cb_equates.asm):00307 LA444 EQU $A444 A449 ( cb_equates.asm):00308 LA449 EQU $A449 A44B ( cb_equates.asm):00309 LA44B EQU $A44B A469 ( cb_equates.asm):00310 LA469 EQU $A469 A478 ( cb_equates.asm):00311 LA478 EQU $A478 A48C ( cb_equates.asm):00312 LA48C EQU $A48C A491 ( cb_equates.asm):00313 LA491 EQU $A491 A4BF ( cb_equates.asm):00314 LA4BF EQU $A4BF A4C8 ( cb_equates.asm):00315 LA4C8 EQU $A4C8 A4CD ( cb_equates.asm):00316 LA4CD EQU $A4CD A4D0 ( cb_equates.asm):00317 LA4D0 EQU $A4D0 A4D8 ( cb_equates.asm):00318 LA4D8 EQU $A4D8 A4F8 ( cb_equates.asm):00319 LA4F8 EQU $A4F8 A4FB ( cb_equates.asm):00320 LA4FB EQU $A4FB A4FE ( cb_equates.asm):00321 LA4FE EQU $A4FE A505 ( cb_equates.asm):00322 LA505 EQU $A505 A511 ( cb_equates.asm):00323 LA511 EQU $A511 A52E ( cb_equates.asm):00324 LA52E EQU $A52E A53B ( cb_equates.asm):00325 LA53B EQU $A53B A545 ( cb_equates.asm):00326 LA545 EQU $A545 A549 ( cb_equates.asm):00327 LA549 EQU $A549 A554 ( cb_equates.asm):00328 LA554 EQU $A554 A56B ( cb_equates.asm):00329 LA56B EQU $A56B A578 ( cb_equates.asm):00330 LA578 EQU $A578 A57F ( cb_equates.asm):00331 LA57F EQU $A57F A598 ( cb_equates.asm):00332 LA598 EQU $A598 A59A ( cb_equates.asm):00333 LA59A EQU $A59A A5A1 ( cb_equates.asm):00334 LA5A1 EQU $A5A1 A5A2 ( cb_equates.asm):00335 LA5A2 EQU $A5A2 A5A5 ( cb_equates.asm):00336 LA5A5 EQU $A5A5 A5AB ( cb_equates.asm):00337 LA5AB EQU $A5AB A5AE ( cb_equates.asm):00338 LA5AE EQU $A5AE A5C4 ( cb_equates.asm):00339 LA5C4 EQU $A5C4 A5C5 ( cb_equates.asm):00340 LA5C5 EQU $A5C5 A5C7 ( cb_equates.asm):00341 LA5C7 EQU $A5C7 A5C9 ( cb_equates.asm):00342 LA5C9 EQU $A5C9 A5DA ( cb_equates.asm):00343 LA5DA EQU $A5DA A5E4 ( cb_equates.asm):00344 LA5E4 EQU $A5E4 A5E8 ( cb_equates.asm):00345 LA5E8 EQU $A5E8 A603 ( cb_equates.asm):00346 LA603 EQU $A603 A616 ( cb_equates.asm):00347 LA616 EQU $A616 A619 ( cb_equates.asm):00348 LA619 EQU $A619 A61C ( cb_equates.asm):00349 LA61C EQU $A61C A61F ( cb_equates.asm):00350 LA61F EQU $A61F A624 ( cb_equates.asm):00351 LA624 EQU $A624 A635 ( cb_equates.asm):00352 LA635 EQU $A635 A644 ( cb_equates.asm):00353 LA644 EQU $A644 A648 ( cb_equates.asm):00354 LA648 EQU $A648 A650 ( cb_equates.asm):00355 LA650 EQU $A650 A652 ( cb_equates.asm):00356 LA652 EQU $A652 A657 ( cb_equates.asm):00357 LA657 EQU $A657 A658 ( cb_equates.asm):00358 LA658 EQU $A658 A65C ( cb_equates.asm):00359 LA65C EQU $A65C A65F ( cb_equates.asm):00360 LA65F EQU $A65F A681 ( cb_equates.asm):00361 LA681 EQU $A681 A686 ( cb_equates.asm):00362 LA686 EQU $A686 A696 ( cb_equates.asm):00363 LA696 EQU $A696 A6A6 ( cb_equates.asm):00364 LA6A6 EQU $A6A6 A6B4 ( cb_equates.asm):00365 LA6B4 EQU $A6B4 A6CB ( cb_equates.asm):00366 LA6CB EQU $A6CB A6D0 ( cb_equates.asm):00367 LA6D0 EQU $A6D0 A6D1 ( cb_equates.asm):00368 LA6D1 EQU $A6D1 A6D9 ( cb_equates.asm):00369 LA6D9 EQU $A6D9 A6DF ( cb_equates.asm):00370 LA6DF EQU $A6DF A6E5 ( cb_equates.asm):00371 LA6E5 EQU $A6E5 A6ED ( cb_equates.asm):00372 LA6ED EQU $A6ED A6F3 ( cb_equates.asm):00373 LA6F3 EQU $A6F3 A6F8 ( cb_equates.asm):00374 LA6F8 EQU $A6F8 A700 ( cb_equates.asm):00375 LA700 EQU $A700 A701 ( cb_equates.asm):00376 LA701 EQU $A701 A705 ( cb_equates.asm):00377 LA705 EQU $A705 A712 ( cb_equates.asm):00378 LA712 EQU $A712 A72B ( cb_equates.asm):00379 LA72B EQU $A72B A73B ( cb_equates.asm):00380 LA73B EQU $A73B A744 ( cb_equates.asm):00381 LA744 EQU $A744 A746 ( cb_equates.asm):00382 LA746 EQU $A746 A749 ( cb_equates.asm):00383 LA749 EQU $A749 A74D ( cb_equates.asm):00384 LA74D EQU $A74D A755 ( cb_equates.asm):00385 LA755 EQU $A755 A75D ( cb_equates.asm):00386 LA75D EQU $A75D A763 ( cb_equates.asm):00387 LA763 EQU $A763 A767 ( cb_equates.asm):00388 LA767 EQU $A767 A76C ( cb_equates.asm):00389 LA76C EQU $A76C A773 ( cb_equates.asm):00390 LA773 EQU $A773 A777 ( cb_equates.asm):00391 LA777 EQU $A777 A782 ( cb_equates.asm):00392 LA782 EQU $A782 A784 ( cb_equates.asm):00393 LA784 EQU $A784 A788 ( cb_equates.asm):00394 LA788 EQU $A788 A792 ( cb_equates.asm):00395 LA792 EQU $A792 A797 ( cb_equates.asm):00396 LA797 EQU $A797 A79B ( cb_equates.asm):00397 LA79B EQU $A79B A7A7 ( cb_equates.asm):00398 LA7A7 EQU $A7A7 A7AD ( cb_equates.asm):00399 LA7AD EQU $A7AD A7B1 ( cb_equates.asm):00400 LA7B1 EQU $A7B1 A7BA ( cb_equates.asm):00401 LA7BA EQU $A7BA A7CA ( cb_equates.asm):00402 LA7CA EQU $A7CA A7D1 ( cb_equates.asm):00403 LA7D1 EQU $A7D1 A7D3 ( cb_equates.asm):00404 LA7D3 EQU $A7D3 A7DE ( cb_equates.asm):00405 LA7DE EQU $A7DE A7E5 ( cb_equates.asm):00406 LA7E5 EQU $A7E5 A7E7 ( cb_equates.asm):00407 LA7E7 EQU $A7E7 A7E9 ( cb_equates.asm):00408 LA7E9 EQU $A7E9 A7F0 ( cb_equates.asm):00409 LA7F0 EQU $A7F0 A800 ( cb_equates.asm):00410 LA800 EQU $A800 A805 ( cb_equates.asm):00411 LA805 EQU $A805 A81C ( cb_equates.asm):00412 LA81C EQU $A81C A824 ( cb_equates.asm):00413 LA824 EQU $A824 A828 ( cb_equates.asm):00414 LA828 EQU $A828 A82A ( cb_equates.asm):00415 LA82A EQU $A82A A82E ( cb_equates.asm):00416 LA82E EQU $A82E A83B ( cb_equates.asm):00417 LA83B EQU $A83B A848 ( cb_equates.asm):00418 LA848 EQU $A848 A855 ( cb_equates.asm):00419 LA855 EQU $A855 A85C ( cb_equates.asm):00420 LA85C EQU $A85C A895 ( cb_equates.asm):00421 LA895 EQU $A895 A89C ( cb_equates.asm):00422 LA89C EQU $A89C A89D ( cb_equates.asm):00423 LA89D EQU $A89D A8A6 ( cb_equates.asm):00424 LA8A6 EQU $A8A6 A8AC ( cb_equates.asm):00425 LA8AC EQU $A8AC A8C1 ( cb_equates.asm):00426 LA8C1 EQU $A8C1 A8C4 ( cb_equates.asm):00427 LA8C4 EQU $A8C4 A8D5 ( cb_equates.asm):00428 LA8D5 EQU $A8D5 A8EE ( cb_equates.asm):00429 LA8EE EQU $A8EE A909 ( cb_equates.asm):00430 LA909 EQU $A909 A90A ( cb_equates.asm):00431 LA90A EQU $A90A A90D ( cb_equates.asm):00432 LA90D EQU $A90D A925 ( cb_equates.asm):00433 LA925 EQU $A925 A928 ( cb_equates.asm):00434 LA928 EQU $A928 A92D ( cb_equates.asm):00435 LA92D EQU $A92D A92F ( cb_equates.asm):00436 LA92F EQU $A92F A937 ( cb_equates.asm):00437 LA937 EQU $A937 A93F ( cb_equates.asm):00438 LA93F EQU $A93F A942 ( cb_equates.asm):00439 LA942 EQU $A942 A948 ( cb_equates.asm):00440 LA948 EQU $A948 A951 ( cb_equates.asm):00441 LA951 EQU $A951 A964 ( cb_equates.asm):00442 LA964 EQU $A964 A974 ( cb_equates.asm):00443 LA974 EQU $A974 A976 ( cb_equates.asm):00444 LA976 EQU $A976 A984 ( cb_equates.asm):00445 LA984 EQU $A984 A985 ( cb_equates.asm):00446 LA985 EQU $A985 A987 ( cb_equates.asm):00447 LA987 EQU $A987 A98C ( cb_equates.asm):00448 LA98C EQU $A98C A9A2 ( cb_equates.asm):00449 LA9A2 EQU $A9A2 A9A7 ( cb_equates.asm):00450 LA9A7 EQU $A9A7 A9B0 ( cb_equates.asm):00451 LA9B0 EQU $A9B0 A9BB ( cb_equates.asm):00452 LA9BB EQU $A9BB A9C5 ( cb_equates.asm):00453 LA9C5 EQU $A9C5 A9D4 ( cb_equates.asm):00454 LA9D4 EQU $A9D4 A9E5 ( cb_equates.asm):00455 LA9E5 EQU $A9E5 A9EB ( cb_equates.asm):00456 LA9EB EQU $A9EB A9EE ( cb_equates.asm):00457 LA9EE EQU $A9EE A9FF ( cb_equates.asm):00458 LA9FF EQU $A9FF AA12 ( cb_equates.asm):00459 LAA12 EQU $AA12 AA24 ( cb_equates.asm):00460 LAA24 EQU $AA24 AA28 ( cb_equates.asm):00461 LAA28 EQU $AA28 AA29 ( cb_equates.asm):00462 LAA29 EQU $AA29 AA51 ( cb_equates.asm):00463 LAA51 EQU $AA51 AA66 ( cb_equates.asm):00464 LAA66 EQU $AA66 AB1A ( cb_equates.asm):00465 LAB1A EQU $AB1A AB67 ( cb_equates.asm):00466 LAB67 EQU $AB67 ABAF ( cb_equates.asm):00467 LABAF EQU $ABAF ABE1 ( cb_equates.asm):00468 LABE1 EQU $ABE1 ABE8 ( cb_equates.asm):00469 LABE8 EQU $ABE8 ABED ( cb_equates.asm):00470 LABED EQU $ABED ABEE ( cb_equates.asm):00471 LABEE EQU $ABEE ABF2 ( cb_equates.asm):00472 LABF2 EQU $ABF2 ABF9 ( cb_equates.asm):00473 LABF9 EQU $ABF9 ABFB ( cb_equates.asm):00474 LABFB EQU $ABFB AC16 ( cb_equates.asm):00475 LAC16 EQU $AC16 AC1A ( cb_equates.asm):00476 LAC1A EQU $AC1A AC1E ( cb_equates.asm):00477 LAC1E EQU $AC1E AC20 ( cb_equates.asm):00478 LAC20 EQU $AC20 AC28 ( cb_equates.asm):00479 LAC28 EQU $AC28 AC32 ( cb_equates.asm):00480 LAC32 EQU $AC32 AC33 ( cb_equates.asm):00481 LAC33 EQU $AC33 AC37 ( cb_equates.asm):00482 LAC37 EQU $AC37 AC44 ( cb_equates.asm):00483 LAC44 EQU $AC44 AC46 ( cb_equates.asm):00484 LAC46 EQU $AC46 AC49 ( cb_equates.asm):00485 LAC49 EQU $AC49 AC60 ( cb_equates.asm):00486 LAC60 EQU $AC60 AC65 ( cb_equates.asm):00487 LAC65 EQU $AC65 AC68 ( cb_equates.asm):00488 LAC68 EQU $AC68 AC73 ( cb_equates.asm):00489 LAC73 EQU $AC73 AC76 ( cb_equates.asm):00490 LAC76 EQU $AC76 AC7C ( cb_equates.asm):00491 LAC7C EQU $AC7C AC9D ( cb_equates.asm):00492 LAC9D EQU $AC9D ACA0 ( cb_equates.asm):00493 LACA0 EQU $ACA0 ACA5 ( cb_equates.asm):00494 LACA5 EQU $ACA5 ACA8 ( cb_equates.asm):00495 LACA8 EQU $ACA8 ACC0 ( cb_equates.asm):00496 LACC0 EQU $ACC0 ACC8 ( cb_equates.asm):00497 LACC8 EQU $ACC8 ACDD ( cb_equates.asm):00498 LACDD EQU $ACDD ACE9 ( cb_equates.asm):00499 LACE9 EQU $ACE9 ACEF ( cb_equates.asm):00500 LACEF EQU $ACEF ACF1 ( cb_equates.asm):00501 LACF1 EQU $ACF1 ACF7 ( cb_equates.asm):00502 LACF7 EQU $ACF7 AD01 ( cb_equates.asm):00503 LAD01 EQU $AD01 AD05 ( cb_equates.asm):00504 LAD05 EQU $AD05 AD12 ( cb_equates.asm):00505 LAD12 EQU $AD12 AD14 ( cb_equates.asm):00506 LAD14 EQU $AD14 AD16 ( cb_equates.asm):00507 LAD16 EQU $AD16 AD19 ( cb_equates.asm):00508 LAD19 EQU $AD19 AD21 ( cb_equates.asm):00509 LAD21 EQU $AD21 AD26 ( cb_equates.asm):00510 LAD26 EQU $AD26 AD33 ( cb_equates.asm):00511 LAD33 EQU $AD33 AD3F ( cb_equates.asm):00512 LAD3F EQU $AD3F AD43 ( cb_equates.asm):00513 LAD43 EQU $AD43 AD59 ( cb_equates.asm):00514 LAD59 EQU $AD59 AD7F ( cb_equates.asm):00515 LAD7F EQU $AD7F AD90 ( cb_equates.asm):00516 LAD90 EQU $AD90 AD9E ( cb_equates.asm):00517 LAD9E EQU $AD9E ADB1 ( cb_equates.asm):00518 LADB1 EQU $ADB1 ADB4 ( cb_equates.asm):00519 LADB4 EQU $ADB4 ADC0 ( cb_equates.asm):00520 LADC0 EQU $ADC0 ADC4 ( cb_equates.asm):00521 LADC4 EQU $ADC4 ADC6 ( cb_equates.asm):00522 LADC6 EQU $ADC6 ADD4 ( cb_equates.asm):00523 LADD4 EQU $ADD4 ADDC ( cb_equates.asm):00524 LADDC EQU $ADDC ADE8 ( cb_equates.asm):00525 LADE8 EQU $ADE8 ADEB ( cb_equates.asm):00526 LADEB EQU $ADEB ADF0 ( cb_equates.asm):00527 LADF0 EQU $ADF0 ADF4 ( cb_equates.asm):00528 LADF4 EQU $ADF4 ADFA ( cb_equates.asm):00529 LADFA EQU $ADFA ADFB ( cb_equates.asm):00530 LADFB EQU $ADFB AE0B ( cb_equates.asm):00531 LAE0B EQU $AE0B AE11 ( cb_equates.asm):00532 LAE11 EQU $AE11 AE15 ( cb_equates.asm):00533 LAE15 EQU $AE15 AE22 ( cb_equates.asm):00534 LAE22 EQU $AE22 AE40 ( cb_equates.asm):00535 LAE40 EQU $AE40 AE5A ( cb_equates.asm):00536 LAE5A EQU $AE5A AE6F ( cb_equates.asm):00537 LAE6F EQU $AE6F AE72 ( cb_equates.asm):00538 LAE72 EQU $AE72 AE88 ( cb_equates.asm):00539 LAE88 EQU $AE88 AE9F ( cb_equates.asm):00540 LAE9F EQU $AE9F AEA4 ( cb_equates.asm):00541 LAEA4 EQU $AEA4 AEB6 ( cb_equates.asm):00542 LAEB6 EQU $AEB6 AEBB ( cb_equates.asm):00543 LAEBB EQU $AEBB AEBF ( cb_equates.asm):00544 LAEBF EQU $AEBF AED2 ( cb_equates.asm):00545 LAED2 EQU $AED2 AED7 ( cb_equates.asm):00546 LAED7 EQU $AED7 AEDA ( cb_equates.asm):00547 LAEDA EQU $AEDA AEE7 ( cb_equates.asm):00548 LAEE7 EQU $AEE7 AEE8 ( cb_equates.asm):00549 LAEE8 EQU $AEE8 AEEA ( cb_equates.asm):00550 LAEEA EQU $AEEA AEEB ( cb_equates.asm):00551 LAEEB EQU $AEEB AEF1 ( cb_equates.asm):00552 LAEF1 EQU $AEF1 AEF7 ( cb_equates.asm):00553 LAEF7 EQU $AEF7 AF0C ( cb_equates.asm):00554 LAF0C EQU $AF0C AF22 ( cb_equates.asm):00555 LAF22 EQU $AF22 AF28 ( cb_equates.asm):00556 LAF28 EQU $AF28 AF39 ( cb_equates.asm):00557 LAF39 EQU $AF39 AF45 ( cb_equates.asm):00558 LAF45 EQU $AF45 AF52 ( cb_equates.asm):00559 LAF52 EQU $AF52 AF54 ( cb_equates.asm):00560 LAF54 EQU $AF54 AF5D ( cb_equates.asm):00561 LAF5D EQU $AF5D AF67 ( cb_equates.asm):00562 LAF67 EQU $AF67 AF6B ( cb_equates.asm):00563 LAF6B EQU $AF6B AF9A ( cb_equates.asm):00564 LAF9A EQU $AF9A AFA4 ( cb_equates.asm):00565 LAFA4 EQU $AFA4 AFB1 ( cb_equates.asm):00566 LAFB1 EQU $AFB1 AFBE ( cb_equates.asm):00567 LAFBE EQU $AFBE AFCE ( cb_equates.asm):00568 LAFCE EQU $AFCE AFCF ( cb_equates.asm):00569 LAFCF EQU $AFCF AFD6 ( cb_equates.asm):00570 LAFD6 EQU $AFD6 AFDC ( cb_equates.asm):00571 LAFDC EQU $AFDC AFDF ( cb_equates.asm):00572 LAFDF EQU $AFDF AFEA ( cb_equates.asm):00573 LAFEA EQU $AFEA 000D ( cb_equates.asm):00574 LASTPT EQU $000D B002 ( cb_equates.asm):00575 LB002 EQU $B002 B00C ( cb_equates.asm):00576 LB00C EQU $B00C B00F ( cb_equates.asm):00577 LB00F EQU $B00F B01E ( cb_equates.asm):00578 LB01E EQU $B01E B02F ( cb_equates.asm):00579 LB02F EQU $B02F B035 ( cb_equates.asm):00580 LB035 EQU $B035 B03C ( cb_equates.asm):00581 LB03C EQU $B03C B03F ( cb_equates.asm):00582 LB03F EQU $B03F B049 ( cb_equates.asm):00583 LB049 EQU $B049 B04E ( cb_equates.asm):00584 LB04E EQU $B04E B069 ( cb_equates.asm):00585 LB069 EQU $B069 B08B ( cb_equates.asm):00586 LB08B EQU $B08B B098 ( cb_equates.asm):00587 LB098 EQU $B098 B09E ( cb_equates.asm):00588 LB09E EQU $B09E B0A8 ( cb_equates.asm):00589 LB0A8 EQU $B0A8 B0B9 ( cb_equates.asm):00590 LB0B9 EQU $B0B9 B0CD ( cb_equates.asm):00591 LB0CD EQU $B0CD B0D5 ( cb_equates.asm):00592 LB0D5 EQU $B0D5 B0E7 ( cb_equates.asm):00593 LB0E7 EQU $B0E7 B0E8 ( cb_equates.asm):00594 LB0E8 EQU $B0E8 B0FE ( cb_equates.asm):00595 LB0FE EQU $B0FE B101 ( cb_equates.asm):00596 LB101 EQU $B101 B10A ( cb_equates.asm):00597 LB10A EQU $B10A B10C ( cb_equates.asm):00598 LB10C EQU $B10C B131 ( cb_equates.asm):00599 LB131 EQU $B131 B134 ( cb_equates.asm):00600 LB134 EQU $B134 B141 ( cb_equates.asm):00601 LB141 EQU $B141 B143 ( cb_equates.asm):00602 LB143 EQU $B143 B145 ( cb_equates.asm):00603 LB145 EQU $B145 B146 ( cb_equates.asm):00604 LB146 EQU $B146 B148 ( cb_equates.asm):00605 LB148 EQU $B148 B14F ( cb_equates.asm):00606 LB14F EQU $B14F B151 ( cb_equates.asm):00607 LB151 EQU $B151 B153 ( cb_equates.asm):00608 LB153 EQU $B153 B156 ( cb_equates.asm):00609 LB156 EQU $B156 B158 ( cb_equates.asm):00610 LB158 EQU $B158 B15A ( cb_equates.asm):00611 LB15A EQU $B15A B166 ( cb_equates.asm):00612 LB166 EQU $B166 B168 ( cb_equates.asm):00613 LB168 EQU $B168 B16A ( cb_equates.asm):00614 LB16A EQU $B16A B181 ( cb_equates.asm):00615 LB181 EQU $B181 B19F ( cb_equates.asm):00616 LB19F EQU $B19F B1A7 ( cb_equates.asm):00617 LB1A7 EQU $B1A7 B1B8 ( cb_equates.asm):00618 LB1B8 EQU $B1B8 B1C6 ( cb_equates.asm):00619 LB1C6 EQU $B1C6 B1CB ( cb_equates.asm):00620 LB1CB EQU $B1CB B1CC ( cb_equates.asm):00621 LB1CC EQU $B1CC B1CE ( cb_equates.asm):00622 LB1CE EQU $B1CE B1D4 ( cb_equates.asm):00623 LB1D4 EQU $B1D4 B1DF ( cb_equates.asm):00624 LB1DF EQU $B1DF B1E2 ( cb_equates.asm):00625 LB1E2 EQU $B1E2 B1E6 ( cb_equates.asm):00626 LB1E6 EQU $B1E6 B1EA ( cb_equates.asm):00627 LB1EA EQU $B1EA B1F4 ( cb_equates.asm):00628 LB1F4 EQU $B1F4 B1FA ( cb_equates.asm):00629 LB1FA EQU $B1FA B201 ( cb_equates.asm):00630 LB201 EQU $B201 B203 ( cb_equates.asm):00631 LB203 EQU $B203 B220 ( cb_equates.asm):00632 LB220 EQU $B220 B222 ( cb_equates.asm):00633 LB222 EQU $B222 B223 ( cb_equates.asm):00634 LB223 EQU $B223 B22C ( cb_equates.asm):00635 LB22C EQU $B22C B22F ( cb_equates.asm):00636 LB22F EQU $B22F B244 ( cb_equates.asm):00637 LB244 EQU $B244 B249 ( cb_equates.asm):00638 LB249 EQU $B249 B24E ( cb_equates.asm):00639 LB24E EQU $B24E B25F ( cb_equates.asm):00640 LB25F EQU $B25F B262 ( cb_equates.asm):00641 LB262 EQU $B262 B267 ( cb_equates.asm):00642 LB267 EQU $B267 B26A ( cb_equates.asm):00643 LB26A EQU $B26A B26D ( cb_equates.asm):00644 LB26D EQU $B26D B26F ( cb_equates.asm):00645 LB26F EQU $B26F B277 ( cb_equates.asm):00646 LB277 EQU $B277 B27C ( cb_equates.asm):00647 LB27C EQU $B27C B284 ( cb_equates.asm):00648 LB284 EQU $B284 B287 ( cb_equates.asm):00649 LB287 EQU $B287 B290 ( cb_equates.asm):00650 LB290 EQU $B290 B29F ( cb_equates.asm):00651 LB29F EQU $B29F B2C7 ( cb_equates.asm):00652 LB2C7 EQU $B2C7 B2C9 ( cb_equates.asm):00653 LB2C9 EQU $B2C9 B2CE ( cb_equates.asm):00654 LB2CE EQU $B2CE B2D4 ( cb_equates.asm):00655 LB2D4 EQU $B2D4 B2D5 ( cb_equates.asm):00656 LB2D5 EQU $B2D5 B2ED ( cb_equates.asm):00657 LB2ED EQU $B2ED B2F1 ( cb_equates.asm):00658 LB2F1 EQU $B2F1 B2F4 ( cb_equates.asm):00659 LB2F4 EQU $B2F4 B309 ( cb_equates.asm):00660 LB309 EQU $B309 B328 ( cb_equates.asm):00661 LB328 EQU $B328 B32D ( cb_equates.asm):00662 LB32D EQU $B32D B334 ( cb_equates.asm):00663 LB334 EQU $B334 B33F ( cb_equates.asm):00664 LB33F EQU $B33F B348 ( cb_equates.asm):00665 LB348 EQU $B348 B34B ( cb_equates.asm):00666 LB34B EQU $B34B B357 ( cb_equates.asm):00667 LB357 EQU $B357 B35A ( cb_equates.asm):00668 LB35A EQU $B35A B35C ( cb_equates.asm):00669 LB35C EQU $B35C B371 ( cb_equates.asm):00670 LB371 EQU $B371 B373 ( cb_equates.asm):00671 LB373 EQU $B373 B37B ( cb_equates.asm):00672 LB37B EQU $B37B B385 ( cb_equates.asm):00673 LB385 EQU $B385 B395 ( cb_equates.asm):00674 LB395 EQU $B395 B3A2 ( cb_equates.asm):00675 LB3A2 EQU $B3A2 B3AA ( cb_equates.asm):00676 LB3AA EQU $B3AA B3AB ( cb_equates.asm):00677 LB3AB EQU $B3AB B3DC ( cb_equates.asm):00678 LB3DC EQU $B3DC B3DE ( cb_equates.asm):00679 LB3DE EQU $B3DE B3DF ( cb_equates.asm):00680 LB3DF EQU $B3DF B3E4 ( cb_equates.asm):00681 LB3E4 EQU $B3E4 B3E6 ( cb_equates.asm):00682 LB3E6 EQU $B3E6 B3E9 ( cb_equates.asm):00683 LB3E9 EQU $B3E9 B3FE ( cb_equates.asm):00684 LB3FE EQU $B3FE B404 ( cb_equates.asm):00685 LB404 EQU $B404 B40A ( cb_equates.asm):00686 LB40A EQU $B40A B42A ( cb_equates.asm):00687 LB42A EQU $B42A B43B ( cb_equates.asm):00688 LB43B EQU $B43B B447 ( cb_equates.asm):00689 LB447 EQU $B447 B44A ( cb_equates.asm):00690 LB44A EQU $B44A B44C ( cb_equates.asm):00691 LB44C EQU $B44C B44F ( cb_equates.asm):00692 LB44F EQU $B44F B461 ( cb_equates.asm):00693 LB461 EQU $B461 B46D ( cb_equates.asm):00694 LB46D EQU $B46D B48C ( cb_equates.asm):00695 LB48C EQU $B48C B4A0 ( cb_equates.asm):00696 LB4A0 EQU $B4A0 B4A6 ( cb_equates.asm):00697 LB4A6 EQU $B4A6 B4B9 ( cb_equates.asm):00698 LB4B9 EQU $B4B9 B4CD ( cb_equates.asm):00699 LB4CD EQU $B4CD B4CE ( cb_equates.asm):00700 LB4CE EQU $B4CE B4D8 ( cb_equates.asm):00701 LB4D8 EQU $B4D8 B4E6 ( cb_equates.asm):00702 LB4E6 EQU $B4E6 B4EB ( cb_equates.asm):00703 LB4EB EQU $B4EB B4F3 ( cb_equates.asm):00704 LB4F3 EQU $B4F3 B50D ( cb_equates.asm):00705 LB50D EQU $B50D B50F ( cb_equates.asm):00706 LB50F EQU $B50F B511 ( cb_equates.asm):00707 LB511 EQU $B511 B516 ( cb_equates.asm):00708 LB516 EQU $B516 B518 ( cb_equates.asm):00709 LB518 EQU $B518 B51A ( cb_equates.asm):00710 LB51A EQU $B51A B51E ( cb_equates.asm):00711 LB51E EQU $B51E B526 ( cb_equates.asm):00712 LB526 EQU $B526 B533 ( cb_equates.asm):00713 LB533 EQU $B533 B537 ( cb_equates.asm):00714 LB537 EQU $B537 B539 ( cb_equates.asm):00715 LB539 EQU $B539 B543 ( cb_equates.asm):00716 LB543 EQU $B543 B54C ( cb_equates.asm):00717 LB54C EQU $B54C B555 ( cb_equates.asm):00718 LB555 EQU $B555 B558 ( cb_equates.asm):00719 LB558 EQU $B558 B56D ( cb_equates.asm):00720 LB56D EQU $B56D B56F ( cb_equates.asm):00721 LB56F EQU $B56F B585 ( cb_equates.asm):00722 LB585 EQU $B585 B591 ( cb_equates.asm):00723 LB591 EQU $B591 B593 ( cb_equates.asm):00724 LB593 EQU $B593 B5A0 ( cb_equates.asm):00725 LB5A0 EQU $B5A0 B5A8 ( cb_equates.asm):00726 LB5A8 EQU $B5A8 B5AA ( cb_equates.asm):00727 LB5AA EQU $B5AA B5B2 ( cb_equates.asm):00728 LB5B2 EQU $B5B2 B5B4 ( cb_equates.asm):00729 LB5B4 EQU $B5B4 B5B6 ( cb_equates.asm):00730 LB5B6 EQU $B5B6 B5CA ( cb_equates.asm):00731 LB5CA EQU $B5CA B5D2 ( cb_equates.asm):00732 LB5D2 EQU $B5D2 B5D8 ( cb_equates.asm):00733 LB5D8 EQU $B5D8 B5EC ( cb_equates.asm):00734 LB5EC EQU $B5EC B5EE ( cb_equates.asm):00735 LB5EE EQU $B5EE B5EF ( cb_equates.asm):00736 LB5EF EQU $B5EF B60F ( cb_equates.asm):00737 LB60F EQU $B60F B62A ( cb_equates.asm):00738 LB62A EQU $B62A B643 ( cb_equates.asm):00739 LB643 EQU $B643 B645 ( cb_equates.asm):00740 LB645 EQU $B645 B64A ( cb_equates.asm):00741 LB64A EQU $B64A B64E ( cb_equates.asm):00742 LB64E EQU $B64E B654 ( cb_equates.asm):00743 LB654 EQU $B654 B657 ( cb_equates.asm):00744 LB657 EQU $B657 B659 ( cb_equates.asm):00745 LB659 EQU $B659 B66F ( cb_equates.asm):00746 LB66F EQU $B66F B672 ( cb_equates.asm):00747 LB672 EQU $B672 B675 ( cb_equates.asm):00748 LB675 EQU $B675 B680 ( cb_equates.asm):00749 LB680 EQU $B680 B683 ( cb_equates.asm):00750 LB683 EQU $B683 B686 ( cb_equates.asm):00751 LB686 EQU $B686 B68F ( cb_equates.asm):00752 LB68F EQU $B68F B69B ( cb_equates.asm):00753 LB69B EQU $B69B B69D ( cb_equates.asm):00754 LB69D EQU $B69D B6A4 ( cb_equates.asm):00755 LB6A4 EQU $B6A4 B6AD ( cb_equates.asm):00756 LB6AD EQU $B6AD B6AE ( cb_equates.asm):00757 LB6AE EQU $B6AE B6B5 ( cb_equates.asm):00758 LB6B5 EQU $B6B5 B6DE ( cb_equates.asm):00759 LB6DE EQU $B6DE B6F5 ( cb_equates.asm):00760 LB6F5 EQU $B6F5 B706 ( cb_equates.asm):00761 LB706 EQU $B706 B709 ( cb_equates.asm):00762 LB709 EQU $B709 B70B ( cb_equates.asm):00763 LB70B EQU $B70B B70E ( cb_equates.asm):00764 LB70E EQU $B70E B734 ( cb_equates.asm):00765 LB734 EQU $B734 B738 ( cb_equates.asm):00766 LB738 EQU $B738 B73D ( cb_equates.asm):00767 LB73D EQU $B73D B740 ( cb_equates.asm):00768 LB740 EQU $B740 B783 ( cb_equates.asm):00769 LB783 EQU $B783 B784 ( cb_equates.asm):00770 LB784 EQU $B784 B789 ( cb_equates.asm):00771 LB789 EQU $B789 B78D ( cb_equates.asm):00772 LB78D EQU $B78D B797 ( cb_equates.asm):00773 LB797 EQU $B797 B79F ( cb_equates.asm):00774 LB79F EQU $B79F B7B9 ( cb_equates.asm):00775 LB7B9 EQU $B7B9 B7C2 ( cb_equates.asm):00776 LB7C2 EQU $B7C2 B7CB ( cb_equates.asm):00777 LB7CB EQU $B7CB B7E0 ( cb_equates.asm):00778 LB7E0 EQU $B7E0 B7E2 ( cb_equates.asm):00779 LB7E2 EQU $B7E2 B7E6 ( cb_equates.asm):00780 LB7E6 EQU $B7E6 B7F1 ( cb_equates.asm):00781 LB7F1 EQU $B7F1 B7F3 ( cb_equates.asm):00782 LB7F3 EQU $B7F3 B7F9 ( cb_equates.asm):00783 LB7F9 EQU $B7F9 B801 ( cb_equates.asm):00784 LB801 EQU $B801 B804 ( cb_equates.asm):00785 LB804 EQU $B804 B80A ( cb_equates.asm):00786 LB80A EQU $B80A B814 ( cb_equates.asm):00787 LB814 EQU $B814 B820 ( cb_equates.asm):00788 LB820 EQU $B820 B821 ( cb_equates.asm):00789 LB821 EQU $B821 B829 ( cb_equates.asm):00790 LB829 EQU $B829 B82D ( cb_equates.asm):00791 LB82D EQU $B82D B842 ( cb_equates.asm):00792 LB842 EQU $B842 B844 ( cb_equates.asm):00793 LB844 EQU $B844 B852 ( cb_equates.asm):00794 LB852 EQU $B852 B85A ( cb_equates.asm):00795 LB85A EQU $B85A B85C ( cb_equates.asm):00796 LB85C EQU $B85C B86B ( cb_equates.asm):00797 LB86B EQU $B86B B873 ( cb_equates.asm):00798 LB873 EQU $B873 B87C ( cb_equates.asm):00799 LB87C EQU $B87C B87E ( cb_equates.asm):00800 LB87E EQU $B87E B886 ( cb_equates.asm):00801 LB886 EQU $B886 B88A ( cb_equates.asm):00802 LB88A EQU $B88A B892 ( cb_equates.asm):00803 LB892 EQU $B892 B89B ( cb_equates.asm):00804 LB89B EQU $B89B B89D ( cb_equates.asm):00805 LB89D EQU $B89D B8A6 ( cb_equates.asm):00806 LB8A6 EQU $B8A6 B8A8 ( cb_equates.asm):00807 LB8A8 EQU $B8A8 B8C2 ( cb_equates.asm):00808 LB8C2 EQU $B8C2 B8C6 ( cb_equates.asm):00809 LB8C6 EQU $B8C6 B8CE ( cb_equates.asm):00810 LB8CE EQU $B8CE B8D2 ( cb_equates.asm):00811 LB8D2 EQU $B8D2 B8D4 ( cb_equates.asm):00812 LB8D4 EQU $B8D4 B8D7 ( cb_equates.asm):00813 LB8D7 EQU $B8D7 B8EA ( cb_equates.asm):00814 LB8EA EQU $B8EA B8F1 ( cb_equates.asm):00815 LB8F1 EQU $B8F1 B8FE ( cb_equates.asm):00816 LB8FE EQU $B8FE B902 ( cb_equates.asm):00817 LB902 EQU $B902 B905 ( cb_equates.asm):00818 LB905 EQU $B905 B907 ( cb_equates.asm):00819 LB907 EQU $B907 B911 ( cb_equates.asm):00820 LB911 EQU $B911 B918 ( cb_equates.asm):00821 LB918 EQU $B918 B91B ( cb_equates.asm):00822 LB91B EQU $B91B B91D ( cb_equates.asm):00823 LB91D EQU $B91D B938 ( cb_equates.asm):00824 LB938 EQU $B938 B949 ( cb_equates.asm):00825 LB949 EQU $B949 B954 ( cb_equates.asm):00826 LB954 EQU $B954 B958 ( cb_equates.asm):00827 LB958 EQU $B958 B95C ( cb_equates.asm):00828 LB95C EQU $B95C B95F ( cb_equates.asm):00829 LB95F EQU $B95F B965 ( cb_equates.asm):00830 LB965 EQU $B965 B966 ( cb_equates.asm):00831 LB966 EQU $B966 B975 ( cb_equates.asm):00832 LB975 EQU $B975 B977 ( cb_equates.asm):00833 LB977 EQU $B977 B97E ( cb_equates.asm):00834 LB97E EQU $B97E B98E ( cb_equates.asm):00835 LB98E EQU $B98E B992 ( cb_equates.asm):00836 LB992 EQU $B992 B997 ( cb_equates.asm):00837 LB997 EQU $B997 B99C ( cb_equates.asm):00838 LB99C EQU $B99C B99F ( cb_equates.asm):00839 LB99F EQU $B99F B9A2 ( cb_equates.asm):00840 LB9A2 EQU $B9A2 B9A3 ( cb_equates.asm):00841 LB9A3 EQU $B9A3 B9AC ( cb_equates.asm):00842 LB9AC EQU $B9AC B9AF ( cb_equates.asm):00843 LB9AF EQU $B9AF B9B1 ( cb_equates.asm):00844 LB9B1 EQU $B9B1 B9B4 ( cb_equates.asm):00845 LB9B4 EQU $B9B4 B9B9 ( cb_equates.asm):00846 LB9B9 EQU $B9B9 B9BC ( cb_equates.asm):00847 LB9BC EQU $B9BC B9C2 ( cb_equates.asm):00848 LB9C2 EQU $B9C2 B9C5 ( cb_equates.asm):00849 LB9C5 EQU $B9C5 B9CD ( cb_equates.asm):00850 LB9CD EQU $B9CD B9E2 ( cb_equates.asm):00851 LB9E2 EQU $B9E2 B9EC ( cb_equates.asm):00852 LB9EC EQU $B9EC B9FB ( cb_equates.asm):00853 LB9FB EQU $B9FB BA18 ( cb_equates.asm):00854 LBA18 EQU $BA18 BA1C ( cb_equates.asm):00855 LBA1C EQU $BA1C BA1D ( cb_equates.asm):00856 LBA1D EQU $BA1D BA39 ( cb_equates.asm):00857 LBA39 EQU $BA39 BA3A ( cb_equates.asm):00858 LBA3A EQU $BA3A BA3E ( cb_equates.asm):00859 LBA3E EQU $BA3E BA3F ( cb_equates.asm):00860 LBA3F EQU $BA3F BA44 ( cb_equates.asm):00861 LBA44 EQU $BA44 BA4F ( cb_equates.asm):00862 LBA4F EQU $BA4F BA5C ( cb_equates.asm):00863 LBA5C EQU $BA5C BA66 ( cb_equates.asm):00864 LBA66 EQU $BA66 BA72 ( cb_equates.asm):00865 LBA72 EQU $BA72 BA78 ( cb_equates.asm):00866 LBA78 EQU $BA78 BA79 ( cb_equates.asm):00867 LBA79 EQU $BA79 BA7B ( cb_equates.asm):00868 LBA7B EQU $BA7B BA83 ( cb_equates.asm):00869 LBA83 EQU $BA83 BA91 ( cb_equates.asm):00870 LBA91 EQU $BA91 BA92 ( cb_equates.asm):00871 LBA92 EQU $BA92 BA97 ( cb_equates.asm):00872 LBA97 EQU $BA97 BA9A ( cb_equates.asm):00873 LBA9A EQU $BA9A BAAE ( cb_equates.asm):00874 LBAAE EQU $BAAE BAB8 ( cb_equates.asm):00875 LBAB8 EQU $BAB8 BABA ( cb_equates.asm):00876 LBABA EQU $BABA BAC4 ( cb_equates.asm):00877 LBAC4 EQU $BAC4 BAC5 ( cb_equates.asm):00878 LBAC5 EQU $BAC5 BACA ( cb_equates.asm):00879 LBACA EQU $BACA BAD0 ( cb_equates.asm):00880 LBAD0 EQU $BAD0 BB00 ( cb_equates.asm):00881 LBB00 EQU $BB00 BB02 ( cb_equates.asm):00882 LBB02 EQU $BB02 BB03 ( cb_equates.asm):00883 LBB03 EQU $BB03 BB20 ( cb_equates.asm):00884 LBB20 EQU $BB20 BB2E ( cb_equates.asm):00885 LBB2E EQU $BB2E BB2F ( cb_equates.asm):00886 LBB2F EQU $BB2F BB48 ( cb_equates.asm):00887 LBB48 EQU $BB48 BB5C ( cb_equates.asm):00888 LBB5C EQU $BB5C BB61 ( cb_equates.asm):00889 LBB61 EQU $BB61 BB63 ( cb_equates.asm):00890 LBB63 EQU $BB63 BB67 ( cb_equates.asm):00891 LBB67 EQU $BB67 BB6A ( cb_equates.asm):00892 LBB6A EQU $BB6A BB7C ( cb_equates.asm):00893 LBB7C EQU $BB7C BB7D ( cb_equates.asm):00894 LBB7D EQU $BB7D BB82 ( cb_equates.asm):00895 LBB82 EQU $BB82 BB89 ( cb_equates.asm):00896 LBB89 EQU $BB89 BB8F ( cb_equates.asm):00897 LBB8F EQU $BB8F BB91 ( cb_equates.asm):00898 LBB91 EQU $BB91 BBA4 ( cb_equates.asm):00899 LBBA4 EQU $BBA4 BBBD ( cb_equates.asm):00900 LBBBD EQU $BBBD BBCC ( cb_equates.asm):00901 LBBCC EQU $BBCC BBD0 ( cb_equates.asm):00902 LBBD0 EQU $BBD0 BBDE ( cb_equates.asm):00903 LBBDE EQU $BBDE BBF8 ( cb_equates.asm):00904 LBBF8 EQU $BBF8 BBFC ( cb_equates.asm):00905 LBBFC EQU $BBFC BC06 ( cb_equates.asm):00906 LBC06 EQU $BC06 BC0B ( cb_equates.asm):00907 LBC0B EQU $BC0B BC14 ( cb_equates.asm):00908 LBC14 EQU $BC14 BC2A ( cb_equates.asm):00909 LBC2A EQU $BC2A BC2F ( cb_equates.asm):00910 LBC2F EQU $BC2F BC33 ( cb_equates.asm):00911 LBC33 EQU $BC33 BC35 ( cb_equates.asm):00912 LBC35 EQU $BC35 BC4A ( cb_equates.asm):00913 LBC4A EQU $BC4A BC4C ( cb_equates.asm):00914 LBC4C EQU $BC4C BC5F ( cb_equates.asm):00915 LBC5F EQU $BC5F BC6D ( cb_equates.asm):00916 LBC6D EQU $BC6D BC71 ( cb_equates.asm):00917 LBC71 EQU $BC71 BC73 ( cb_equates.asm):00918 LBC73 EQU $BC73 BC79 ( cb_equates.asm):00919 LBC79 EQU $BC79 BC7C ( cb_equates.asm):00920 LBC7C EQU $BC7C BC82 ( cb_equates.asm):00921 LBC82 EQU $BC82 BC86 ( cb_equates.asm):00922 LBC86 EQU $BC86 BC96 ( cb_equates.asm):00923 LBC96 EQU $BC96 BCA0 ( cb_equates.asm):00924 LBCA0 EQU $BCA0 BCC3 ( cb_equates.asm):00925 LBCC3 EQU $BCC3 BCC8 ( cb_equates.asm):00926 LBCC8 EQU $BCC8 BCD7 ( cb_equates.asm):00927 LBCD7 EQU $BCD7 BCE4 ( cb_equates.asm):00928 LBCE4 EQU $BCE4 BD09 ( cb_equates.asm):00929 LBD09 EQU $BD09 BD11 ( cb_equates.asm):00930 LBD11 EQU $BD11 BD12 ( cb_equates.asm):00931 LBD12 EQU $BD12 BD2D ( cb_equates.asm):00932 LBD2D EQU $BD2D BD31 ( cb_equates.asm):00933 LBD31 EQU $BD31 BD35 ( cb_equates.asm):00934 LBD35 EQU $BD35 BD53 ( cb_equates.asm):00935 LBD53 EQU $BD53 BD55 ( cb_equates.asm):00936 LBD55 EQU $BD55 BD59 ( cb_equates.asm):00937 LBD59 EQU $BD59 BD61 ( cb_equates.asm):00938 LBD61 EQU $BD61 BD65 ( cb_equates.asm):00939 LBD65 EQU $BD65 BD6F ( cb_equates.asm):00940 LBD6F EQU $BD6F BD78 ( cb_equates.asm):00941 LBD78 EQU $BD78 BD7F ( cb_equates.asm):00942 LBD7F EQU $BD7F BD86 ( cb_equates.asm):00943 LBD86 EQU $BD86 BD99 ( cb_equates.asm):00944 LBD99 EQU $BD99 BDA5 ( cb_equates.asm):00945 LBDA5 EQU $BDA5 BDB6 ( cb_equates.asm):00946 LBDB6 EQU $BDB6 BDBB ( cb_equates.asm):00947 LBDBB EQU $BDBB BDC0 ( cb_equates.asm):00948 LBDC0 EQU $BDC0 BDC5 ( cb_equates.asm):00949 LBDC5 EQU $BDC5 BDCC ( cb_equates.asm):00950 LBDCC EQU $BDCC BDD6 ( cb_equates.asm):00951 LBDD6 EQU $BDD6 BDD9 ( cb_equates.asm):00952 LBDD9 EQU $BDD9 BDDC ( cb_equates.asm):00953 LBDDC EQU $BDDC BDE4 ( cb_equates.asm):00954 LBDE4 EQU $BDE4 BDFF ( cb_equates.asm):00955 LBDFF EQU $BDFF BE01 ( cb_equates.asm):00956 LBE01 EQU $BE01 BE09 ( cb_equates.asm):00957 LBE09 EQU $BE09 BE18 ( cb_equates.asm):00958 LBE18 EQU $BE18 BE1F ( cb_equates.asm):00959 LBE1F EQU $BE1F BE36 ( cb_equates.asm):00960 LBE36 EQU $BE36 BE4B ( cb_equates.asm):00961 LBE4B EQU $BE4B BE50 ( cb_equates.asm):00962 LBE50 EQU $BE50 BE72 ( cb_equates.asm):00963 LBE72 EQU $BE72 BE84 ( cb_equates.asm):00964 LBE84 EQU $BE84 BE8C ( cb_equates.asm):00965 LBE8C EQU $BE8C BE98 ( cb_equates.asm):00966 LBE98 EQU $BE98 BEA3 ( cb_equates.asm):00967 LBEA3 EQU $BEA3 BEAB ( cb_equates.asm):00968 LBEAB EQU $BEAB BEB8 ( cb_equates.asm):00969 LBEB8 EQU $BEB8 BEBA ( cb_equates.asm):00970 LBEBA EQU $BEBA BEBC ( cb_equates.asm):00971 LBEBC EQU $BEBC BEC0 ( cb_equates.asm):00972 LBEC0 EQU $BEC0 BEC5 ( cb_equates.asm):00973 LBEC5 EQU $BEC5 BEC9 ( cb_equates.asm):00974 LBEC9 EQU $BEC9 BECD ( cb_equates.asm):00975 LBECD EQU $BECD BED1 ( cb_equates.asm):00976 LBED1 EQU $BED1 BED5 ( cb_equates.asm):00977 LBED5 EQU $BED5 BED9 ( cb_equates.asm):00978 LBED9 EQU $BED9 BEDD ( cb_equates.asm):00979 LBEDD EQU $BEDD BEE1 ( cb_equates.asm):00980 LBEE1 EQU $BEE1 BEE5 ( cb_equates.asm):00981 LBEE5 EQU $BEE5 BEE9 ( cb_equates.asm):00982 LBEE9 EQU $BEE9 BEEF ( cb_equates.asm):00983 LBEEF EQU $BEEF BEF0 ( cb_equates.asm):00984 LBEF0 EQU $BEF0 BEFC ( cb_equates.asm):00985 LBEFC EQU $BEFC BEFF ( cb_equates.asm):00986 LBEFF EQU $BEFF BF01 ( cb_equates.asm):00987 LBF01 EQU $BF01 BF0C ( cb_equates.asm):00988 LBF0C EQU $BF0C BF38 ( cb_equates.asm):00989 LBF38 EQU $BF38 BF3B ( cb_equates.asm):00990 LBF3B EQU $BF3B BF45 ( cb_equates.asm):00991 LBF45 EQU $BF45 BFA6 ( cb_equates.asm):00992 LBFA6 EQU $BFA6 BFA9 ( cb_equates.asm):00993 LBFA9 EQU $BFA9 BFB7 ( cb_equates.asm):00994 LBFB7 EQU $BFB7 BFBD ( cb_equates.asm):00995 LBFBD EQU $BFBD BFC2 ( cb_equates.asm):00996 LBFC2 EQU $BFC2 BFC7 ( cb_equates.asm):00997 LBFC7 EQU $BFC7 BFC8 ( cb_equates.asm):00998 LBFC8 EQU $BFC8 BFCD ( cb_equates.asm):00999 LBFCD EQU $BFCD BFD2 ( cb_equates.asm):01000 LBFD2 EQU $BFD2 BFD7 ( cb_equates.asm):01001 LBFD7 EQU $BFD7 BFDC ( cb_equates.asm):01002 LBFDC EQU $BFDC BFE1 ( cb_equates.asm):01003 LBFE1 EQU $BFE1 BFE6 ( cb_equates.asm):01004 LBFE6 EQU $BFE6 BFF0 ( cb_equates.asm):01005 LBFF0 EQU $BFF0 BFF2 ( cb_equates.asm):01006 LBFF2 EQU $BFF2 BFF4 ( cb_equates.asm):01007 LBFF4 EQU $BFF4 BFF6 ( cb_equates.asm):01008 LBFF6 EQU $BFF6 BFF8 ( cb_equates.asm):01009 LBFF8 EQU $BFF8 BFFA ( cb_equates.asm):01010 LBFFA EQU $BFFA BFFC ( cb_equates.asm):01011 LBFFC EQU $BFFC BFFE ( cb_equates.asm):01012 LBFFE EQU $BFFE 00FA ( cb_equates.asm):01013 LBUFMX EQU $00FA B6AB ( cb_equates.asm):01014 LEFT EQU $B6AB B681 ( cb_equates.asm):01015 LEN EQU $B681 AF89 ( cb_equates.asm):01016 LET EQU $AF89 000A ( cb_equates.asm):01017 LF EQU $000A 02DC ( cb_equates.asm):01018 LINBUF EQU $02DC 02DA ( cb_equates.asm):01019 LINHDR EQU $02DA B764 ( cb_equates.asm):01020 LIST EQU $B764 B75E ( cb_equates.asm):01021 LLIST EQU $B75E 0095 ( cb_equates.asm):01022 LPTBTD EQU $0095 0099 ( cb_equates.asm):01023 LPTCFW EQU $0099 009A ( cb_equates.asm):01024 LPTLCF EQU $009A 0097 ( cb_equates.asm):01025 LPTLND EQU $0097 009C ( cb_equates.asm):01026 LPTPOS EQU $009C 009B ( cb_equates.asm):01027 LPTWID EQU $009B 0066 ( cb_equates.asm):01028 LSTTXT EQU $0066 00FA ( cb_equates.asm):01029 MAXLIN EQU $00FA B4EE ( cb_equates.asm):01030 MEM EQU $B4EE 0027 ( cb_equates.asm):01031 MEMSIZ EQU $0027 B6CF ( cb_equates.asm):01032 MID EQU $B6CF FFA0 ( cb_equates.asm):01033 MMUREG EQU $FFA0 A7BD ( cb_equates.asm):01034 MOTOR EQU $A7BD AD17 ( cb_equates.asm):01035 NEW EQU $AD17 B0F8 ( cb_equates.asm):01036 NEXT EQU $B0F8 FFFC ( cb_equates.asm):01037 NMI EQU $FFFC 0982 ( cb_equates.asm):01038 NMIFLG EQU $0982 0109 ( cb_equates.asm):01039 NMIVEC EQU $0109 00E1 ( cb_equates.asm):01040 NOTELN EQU $00E1 00DE ( cb_equates.asm):01041 OCTAVE EQU $00DE 002D ( cb_equates.asm):01042 OLDPTR EQU $002D 0029 ( cb_equates.asm):01043 OLDTXT EQU $0029 AF42 ( cb_equates.asm):01044 ON EQU $AF42 A5F6 ( cb_equates.asm):01045 OPEN EQU $A5F6 0020 ( cb_equates.asm):01046 OUTFIL EQU $0020 FFB0 ( cb_equates.asm):01047 PALETREG EQU $FFB0 B750 ( cb_equates.asm):01048 PEEK EQU $B750 FF00 ( cb_equates.asm):01049 PIA0 EQU $FF00 FF20 ( cb_equates.asm):01050 PIA1 EQU $FF20 FF40 ( cb_equates.asm):01051 PIA2 EQU $FF40 00E3 ( cb_equates.asm):01052 PLYTMR EQU $00E3 00B6 ( cb_equates.asm):01053 PMODE EQU $00B6 A8F5 ( cb_equates.asm):01054 POINT EQU $A8F5 B757 ( cb_equates.asm):01055 POKE EQU $B757 A000 ( cb_equates.asm):01056 POLCAT EQU $A000 015A ( cb_equates.asm):01057 POTVAL EQU $015A B8F7 ( cb_equates.asm):01058 PRINT EQU $B8F7 006E ( cb_equates.asm):01059 PRTDEV EQU $006E A282 ( cb_equates.asm):01060 PUTCHR EQU $A282 FFD8 ( cb_equates.asm):01061 R1CLR EQU $FFD8 FFD9 ( cb_equates.asm):01062 R1SET EQU $FFD9 0040 ( cb_equates.asm):01063 RANFIL EQU $0040 0985 ( cb_equates.asm):01064 RDYTMR EQU $0985 B046 ( cb_equates.asm):01065 READ EQU $B046 000A ( cb_equates.asm):01066 RELFLG EQU $000A 003D ( cb_equates.asm):01067 RELPTR EQU $003D AEE3 ( cb_equates.asm):01068 REM EQU $AEE3 A8B1 ( cb_equates.asm):01069 RESET EQU $A8B1 FFFE ( cb_equates.asm):01070 RESETV EQU $FFFE 0062 ( cb_equates.asm):01071 RESSGN EQU $0062 ADE4 ( cb_equates.asm):01072 RESTOR EQU $ADE4 A027 ( cb_equates.asm):01073 RESVEC EQU $A027 AEC0 ( cb_equates.asm):01074 RETURN EQU $AEC0 B6C8 ( cb_equates.asm):01075 RIGHT EQU $B6C8 0948 ( cb_equates.asm):01076 RNBFAD EQU $0948 BF1F ( cb_equates.asm):01077 RND EQU $BF1F FFDE ( cb_equates.asm):01078 ROMCLR EQU $FFDE C000 ( cb_equates.asm):01079 ROMPAK EQU $C000 FFDF ( cb_equates.asm):01080 ROMSET EQU $FFDF BF74 ( cb_equates.asm):01081 RSEED EQU $BF74 0071 ( cb_equates.asm):01082 RSTFLG EQU $0071 0072 ( cb_equates.asm):01083 RSTVEC EQU $0072 AE75 ( cb_equates.asm):01084 RUN EQU $AE75 015E ( cb_equates.asm):01085 RVEC0 EQU $015E 0161 ( cb_equates.asm):01086 RVEC1 EQU $0161 017C ( cb_equates.asm):01087 RVEC10 EQU $017C 017F ( cb_equates.asm):01088 RVEC11 EQU $017F 0182 ( cb_equates.asm):01089 RVEC12 EQU $0182 0185 ( cb_equates.asm):01090 RVEC13 EQU $0185 0188 ( cb_equates.asm):01091 RVEC14 EQU $0188 018B ( cb_equates.asm):01092 RVEC15 EQU $018B 018E ( cb_equates.asm):01093 RVEC16 EQU $018E 0191 ( cb_equates.asm):01094 RVEC17 EQU $0191 0194 ( cb_equates.asm):01095 RVEC18 EQU $0194 0197 ( cb_equates.asm):01096 RVEC19 EQU $0197 0164 ( cb_equates.asm):01097 RVEC2 EQU $0164 019A ( cb_equates.asm):01098 RVEC20 EQU $019A 019D ( cb_equates.asm):01099 RVEC21 EQU $019D 01A0 ( cb_equates.asm):01100 RVEC22 EQU $01A0 01A3 ( cb_equates.asm):01101 RVEC23 EQU $01A3 01A6 ( cb_equates.asm):01102 RVEC24 EQU $01A6 0167 ( cb_equates.asm):01103 RVEC3 EQU $0167 016A ( cb_equates.asm):01104 RVEC4 EQU $016A 016D ( cb_equates.asm):01105 RVEC5 EQU $016D 0170 ( cb_equates.asm):01106 RVEC6 EQU $0170 0173 ( cb_equates.asm):01107 RVEC7 EQU $0173 0176 ( cb_equates.asm):01108 RVEC8 EQU $0176 0179 ( cb_equates.asm):01109 RVEC9 EQU $0179 0115 ( cb_equates.asm):01110 RVSEED EQU $0115 FFC0 ( cb_equates.asm):01111 SAMREG EQU $FFC0 00E9 ( cb_equates.asm):01112 SCALE EQU $00E9 0100 ( cb_equates.asm):01113 SECLEN EQU $0100 0012 ( cb_equates.asm):01114 SECMAX EQU $0012 A880 ( cb_equates.asm):01115 SET EQU $A880 00C2 ( cb_equates.asm):01116 SETFLG EQU $00C2 BC7A ( cb_equates.asm):01117 SGN EQU $BC7A BF78 ( cb_equates.asm):01118 SIN EQU $BF78 A5EC ( cb_equates.asm):01119 SKIPF EQU $A5EC 0021 ( cb_equates.asm):01120 SKP1 EQU $0021 0086 ( cb_equates.asm):01121 SKP1LD EQU $0086 008C ( cb_equates.asm):01122 SKP2 EQU $008C A7F4 ( cb_equates.asm):01123 SNDBLK EQU $A7F4 008D ( cb_equates.asm):01124 SNDDUR EQU $008D 008C ( cb_equates.asm):01125 SNDTON EQU $008C A94B ( cb_equates.asm):01126 SOUND EQU $A94B 0020 ( cb_equates.asm):01127 SPACE EQU $0020 003A ( cb_equates.asm):01128 STKBUF EQU $003A AE09 ( cb_equates.asm):01129 STOP EQU $AE09 B4FD ( cb_equates.asm):01130 STR EQU $B4FD 03D7 ( cb_equates.asm):01131 STRBUF EQU $03D7 0056 ( cb_equates.asm):01132 STRDES EQU $0056 B99C ( cb_equates.asm):01133 STRINOUT EQU $B99C 01A9 ( cb_equates.asm):01134 STRSTK EQU $01A9 0023 ( cb_equates.asm):01135 STRTAB EQU $0023 0103 ( cb_equates.asm):01136 SW2VEC EQU $0103 0100 ( cb_equates.asm):01137 SW3VEC EQU $0100 FFFA ( cb_equates.asm):01138 SWI EQU $FFFA FFF4 ( cb_equates.asm):01139 SWI2 EQU $FFF4 FFF2 ( cb_equates.asm):01140 SWI3 EQU $FFF2 0106 ( cb_equates.asm):01141 SWIVEC EQU $0106 0092 ( cb_equates.asm):01142 SYNCLN EQU $0092 B26D ( cb_equates.asm):01143 SYNCOMMA EQU $B26D 00E2 ( cb_equates.asm):01144 TEMPO EQU $00E2 000B ( cb_equates.asm):01145 TEMPPT EQU $000B 000F ( cb_equates.asm):01146 TEMPTR EQU $000F 00E7 ( cb_equates.asm):01147 TIMOUT EQU $00E7 0112 ( cb_equates.asm):01148 TIMVAL EQU $0112 002F ( cb_equates.asm):01149 TINPTR EQU $002F 0003 ( cb_equates.asm):01150 TMPLOC EQU $0003 00DC ( cb_equates.asm):01151 TMPSTK EQU $00DC 0011 ( cb_equates.asm):01152 TMPTR1 EQU $0011 0074 ( cb_equates.asm):01153 TOPRAM EQU $0074 00AF ( cb_equates.asm):01154 TRCFLG EQU $00AF 003F ( cb_equates.asm):01155 TRELFL EQU $003F 1200 ( cb_equates.asm):01156 TRKLEN EQU $1200 0023 ( cb_equates.asm):01157 TRKMAX EQU $0023 0019 ( cb_equates.asm):01158 TXTTAB EQU $0019 013E ( cb_equates.asm):01159 USR0 EQU $013E 00B0 ( cb_equates.asm):01160 USRADR EQU $00B0 0112 ( cb_equates.asm):01161 USRJMP EQU $0112 FF9A ( cb_equates.asm):01162 V.BORDER EQU $FF9A FF9E ( cb_equates.asm):01163 V.OFSET0 EQU $FF9E FF9D ( cb_equates.asm):01164 V.OFSET1 EQU $FF9D FF9C ( cb_equates.asm):01165 V.SCROLL EQU $FF9C FF94 ( cb_equates.asm):01166 V.TIMER EQU $FF94 FFC0 ( cb_equates.asm):01167 V0CLR EQU $FFC0 FFC1 ( cb_equates.asm):01168 V0SET EQU $FFC1 FFC2 ( cb_equates.asm):01169 V1CLR EQU $FFC2 FFC3 ( cb_equates.asm):01170 V1SET EQU $FFC3 FFC4 ( cb_equates.asm):01171 V2CLR EQU $FFC4 FFC5 ( cb_equates.asm):01172 V2SET EQU $FFC5 0040 ( cb_equates.asm):01173 V40 EQU $0040 0041 ( cb_equates.asm):01174 V41 EQU $0041 0042 ( cb_equates.asm):01175 V42 EQU $0042 0043 ( cb_equates.asm):01176 V43 EQU $0043 0044 ( cb_equates.asm):01177 V44 EQU $0044 0045 ( cb_equates.asm):01178 V45 EQU $0045 0046 ( cb_equates.asm):01179 V46 EQU $0046 0047 ( cb_equates.asm):01180 V47 EQU $0047 0048 ( cb_equates.asm):01181 V48 EQU $0048 004A ( cb_equates.asm):01182 V4A EQU $004A 004B ( cb_equates.asm):01183 V4B EQU $004B 004D ( cb_equates.asm):01184 V4D EQU $004D 0973 ( cb_equates.asm):01185 V973 EQU $0973 0974 ( cb_equates.asm):01186 V974 EQU $0974 0976 ( cb_equates.asm):01187 V976 EQU $0976 0977 ( cb_equates.asm):01188 V977 EQU $0977 0978 ( cb_equates.asm):01189 V978 EQU $0978 00AB ( cb_equates.asm):01190 VAB EQU $00AB 00AC ( cb_equates.asm):01191 VAC EQU $00AC 00AD ( cb_equates.asm):01192 VAD EQU $00AD 00AE ( cb_equates.asm):01193 VAE EQU $00AE B716 ( cb_equates.asm):01194 VAL EQU $B716 0006 ( cb_equates.asm):01195 VALTYP EQU $0006 003B ( cb_equates.asm):01196 VARDES EQU $003B 0037 ( cb_equates.asm):01197 VARNAM EQU $0037 0039 ( cb_equates.asm):01198 VARPTR EQU $0039 001B ( cb_equates.asm):01199 VARTAB EQU $001B 00CB ( cb_equates.asm):01200 VCB EQU $00CB 00CD ( cb_equates.asm):01201 VCD EQU $00CD 00CF ( cb_equates.asm):01202 VCF EQU $00CF 00D1 ( cb_equates.asm):01203 VD1 EQU $00D1 00D3 ( cb_equates.asm):01204 VD3 EQU $00D3 00D4 ( cb_equates.asm):01205 VD4 EQU $00D4 00D5 ( cb_equates.asm):01206 VD5 EQU $00D5 00D6 ( cb_equates.asm):01207 VD6 EQU $00D6 00D7 ( cb_equates.asm):01208 VD7 EQU $00D7 00D8 ( cb_equates.asm):01209 VD8 EQU $00D8 00D9 ( cb_equates.asm):01210 VD9 EQU $00D9 00DA ( cb_equates.asm):01211 VDA EQU $00DA 00BF ( cb_equates.asm):01212 VERBEG EQU $00BF 00C9 ( cb_equates.asm):01213 VERDEF EQU $00C9 00C5 ( cb_equates.asm):01214 VEREND EQU $00C5 FF98 ( cb_equates.asm):01215 VIDEOMOD EQU $FF98 FF99 ( cb_equates.asm):01216 VIDEORES EQU $FF99 0400 ( cb_equates.asm):01217 VIDRAM EQU $0400 00DF ( cb_equates.asm):01218 VOLHI EQU $00DF 00E0 ( cb_equates.asm):01219 VOLLOW EQU $00E0 00B4 ( cb_equates.asm):01220 WCOLOR EQU $00B4 097A ( cb_equates.asm):01221 WFATVL EQU $097A A7D8 ( cb_equates.asm):01222 WRLDR EQU $A7D8 A00C ( cb_equates.asm):01223 WRTLDR EQU $A00C 008A ( cb_equates.asm):01224 ZERO EQU $008A ( extbas.asm):00001 * Extended Color BASIC 1.1 ( extbas.asm):00002 * Copied from the PDF version of Extended Color BASIC Unravelled. ( extbas.asm):00003 * Fixed up to assemble in Mamou ( extbas.asm):00004 * ( extbas.asm):00005 * Revision History ( extbas.asm):00006 * 04/05/2009 r23 Extended Color BASIC 1.1 (Match ROM) ( extbas.asm):00007 * ( extbas.asm):00008 *# $Id: $ ( extbas.asm):00009 * ( extbas.asm):00010 ORG $8000 8000 4558 ( extbas.asm):00011 MAGIC FCC 'EX' ( extbas.asm):00012 * ( extbas.asm):00013 * MOVE EXTENDED BASIC'S COMMAND INTERPRETATION TABLE FROM ROM TO RAM 8002 8E80DE ( extbas.asm):00014 L8002 LDX #L80DE ROM ADDRESS 8005 CE012A ( extbas.asm):00015 LDU #COMVEC+10 RAM ADDRESS 8008 C60A ( extbas.asm):00016 LDB #10 10 BYTES TO MOVE 800A BDA59A ( extbas.asm):00017 JSR >LA59A MOVE B BYTES FROM (X) TO (U) 800D 8EB277 ( extbas.asm):00018 LDX #LB277 ADDRESS OF SYNTAX ERROR 8010 AF43 ( extbas.asm):00019 STX $03,U PUT SYNTAX ERROR IN ADDRESS OF DISK 8012 AF48 ( extbas.asm):00020 STX $08,U BASIC’S COMMAND INTERPRETATION LOOPS 8014 8E894C ( extbas.asm):00021 LDX #XIRQSV *PUT EXBASIC’S IRQ SERVICING ROUTINE 8017 BF010D ( extbas.asm):00022 STX IRQVEC+1 *ADDRESS IN THE IRQ VECTOR 801A 9E8A ( extbas.asm):00023 LDX ZERO GET X=0 801C BF0112 ( extbas.asm):00024 STX TIMVAL INITIALIZE TIMER = 0 801F BD829C ( extbas.asm):00025 JSR >XVEC18 INITIALIZE A BUNCH OF VARIABLES 8022 CC2C05 ( extbas.asm):00026 LDD #$2C05 *INITIALIZE DLOAD TO 1200 BAUD AND 8025 DDE6 ( extbas.asm):00027 STD DLBAUD *TIMEOUT CONSTANT TO 5 8027 8E013E ( extbas.asm):00028 LDX #USR0 =INITIALIZE ADDRESS OF START OF 802A 9FB0 ( extbas.asm):00029 STX USRADR =USR JUMP TABLE ( extbas.asm):00030 * INITIALIZE THE USR CALLS TO ‘FC ERROR’ 802C CEB44A ( extbas.asm):00031 LDU #LB44A ADDRESS OF ‘FC ERROR’ ROUTINE 802F C60A ( extbas.asm):00032 LDB #10 10 USR CALLS IN EX BASIC 8031 EF81 ( extbas.asm):00033 L8031 STU ,X++ STORE ‘FC’ ERROR AT USR ADDRESSES 8033 5A ( extbas.asm):00034 DECB FINISHED ALL 10? 8034 26FB ( extbas.asm):00035 BNE L8031 NO ( extbas.asm):00036 * MODIFY THE RAM HOOKS FOR THE NEW ROUTINES CONTAINED IN EXT BASIC 8036 867E ( extbas.asm):00037 LDA #$7E OP CODE OF ‘JMP’ 8038 B7019A ( extbas.asm):00038 STA RVEC20 = 803B 8E82B9 ( extbas.asm):00039 LDX #XVEC20 = 803E BF019B ( extbas.asm):00040 STX RVEC20+1 = COMMAND INTERPRETATION LOOP 8041 B7018B ( extbas.asm):00041 STA RVEC15 * 8044 8E8846 ( extbas.asm):00042 LDX #XVEC15 * 8047 BF018C ( extbas.asm):00043 STX RVEC15+1 * EXPRESSION EVALUATION 804A B70197 ( extbas.asm):00044 STA RVEC19 = 804D 8E87E5 ( extbas.asm):00045 LDX #XVEC19 = 8050 BF0198 ( extbas.asm):00046 STX RVEC19+1 = ASCII TO FLOATING POINT CONVERSION 8053 B70179 ( extbas.asm):00047 STA RVEC9 * 8056 8E8E90 ( extbas.asm):00048 LDX #XVEC9 * 8059 BF017A ( extbas.asm):00049 STX RVEC9+1 * PRINT 805C B70191 ( extbas.asm):00050 STA RVEC17 = 805F 8E88F0 ( extbas.asm):00051 LDX #XVEC17 = 8062 BF0192 ( extbas.asm):00052 STX RVEC17+1 = ERROR DRIVER 8065 B7016A ( extbas.asm):00053 STA RVEC4 * 8068 8E8CF1 ( extbas.asm):00054 LDX #XVEC4 * 806B BF016B ( extbas.asm):00055 STX RVEC4+1 * CONSOLE IN 806E B70167 ( extbas.asm):00056 STA RVEC3 = 8071 8E8273 ( extbas.asm):00057 LDX #XVEC3 = 8074 BF0168 ( extbas.asm):00058 STX RVEC3+1 = CONSOLE OUT 8077 B70176 ( extbas.asm):00059 STA RVEC8 * 807A 8E8286 ( extbas.asm):00060 LDX #XVEC8 * 807D BF0177 ( extbas.asm):00061 STX RVEC8+1 * CLOSE A FILE 8080 B701A3 ( extbas.asm):00062 STA RVEC23 = 8083 8E8304 ( extbas.asm):00063 LDX #XVEC23 = 8086 BF01A4 ( extbas.asm):00064 STX RVEC23+1 = CRUNCH A BASIC LINE 8089 B70194 ( extbas.asm):00065 STA RVEC18 * 808C 8E829C ( extbas.asm):00066 LDX #XVEC18 * 808F BF0195 ( extbas.asm):00067 STX RVEC18+1 * RUN 8092 B7011D ( extbas.asm):00068 STA EXPJMP STORE OP CODE OF JMP 8095 8E8489 ( extbas.asm):00069 LDX #L8489 GET EXPONENTIATION ADDRESS 8098 BF011E ( extbas.asm):00070 STX EXPJMP+1 SAVE IT 809B BD96E6 ( extbas.asm):00071 JSR >L96E6 GO INITIALIZE EXBAS GRAPHICS VARIABLES 809E B6FF03 ( extbas.asm):00072 LDA PIA0+3 * ENABLE PIA0 TO 80A1 8A01 ( extbas.asm):00073 ORA #$01 * PASS 60HZ 80A3 B7FF03 ( extbas.asm):00074 STA PIA0+3 * INTERRUPT TO MPU 80A6 8E444B ( extbas.asm):00075 LDX #$444B 'DK' FIRST TWO BYTES OF DISK ROM 80A9 BCC000 ( extbas.asm):00076 CMPX DOSBAS COMPARE TO DISK ROM ADDRESS 80AC 10273F52 ( extbas.asm):00077 LBEQ DOSBAS+2 BRANCH IF DISK BASIC EXISTS 80B0 1CAF ( extbas.asm):00078 ANDCC #$AF ENABLE INTERRUPTS 80B2 8E80E7 ( extbas.asm):00079 L80B2 LDX #L80E6+1 POINT TO SIGN ON MESSAGE 80B5 BDB99C ( extbas.asm):00080 JSR STRINOUT DISPLAY IT 80B8 8E80C0 ( extbas.asm):00081 L80B8 LDX #XBWMST GET EXBAS WARM START (RESET) VECTOR 80BB 9F72 ( extbas.asm):00082 STX RSTVEC SAVE IT 80BD 7EA0E2 ( extbas.asm):00083 JMP >LA0E2 SET WARM START FLAG, ENTER BASIC ( extbas.asm):00084 * EXBAS WARM START ENTRY POINT 80C0 12 ( extbas.asm):00085 XBWMST NOP WARM START ENABLE 80C1 0FE3 ( extbas.asm):00086 CLR PLYTMR = 80C3 0FE4 ( extbas.asm):00087 CLR PLYTMR+1 = CLEAR PLAY TIMER 80C5 B6FF03 ( extbas.asm):00088 LDA PIA0+3 * ENABLE PIA0 TO 80C8 8A01 ( extbas.asm):00089 ORA #$01 * PASS 60HZ 80CA B7FF03 ( extbas.asm):00090 STA PIA0+3 * INTERRUPT TO MPU 80CD 7EA0E8 ( extbas.asm):00091 JMP BAWMST JUMP TO BASIC’S WARM START ( extbas.asm):00092 * ( extbas.asm):00093 * THIS CODE IS A PATCH TO FIX THE PCLEAR BUG 80D0 9668 ( extbas.asm):00094 L80D0 LDA CURLIN GET THE CURRENT LINE NUMBER 80D2 4C ( extbas.asm):00095 INCA TEST FOR DIRECT MODE 80D3 2708 ( extbas.asm):00096 BEQ L80DD RETURN IF DIRECT MODE 80D5 1F20 ( extbas.asm):00097 TFR Y,D SAVE OFFSET IN ACCD 80D7 9319 ( extbas.asm):00098 SUBD TXTTAB SUBTRACT OUT START OF BASIC 80D9 D3A6 ( extbas.asm):00099 ADDD CHARAD ADD THE CURRENT BASIC INPUT POINTER 80DB DDA6 ( extbas.asm):00100 STD CHARAD SAVE NEW BASIC INPUT POINTER 80DD 39 ( extbas.asm):00101 L80DD RTS 80DE 19 ( extbas.asm):00102 L80DE FCB 25 25 EXBAS COMMANDS 80DF 8183 ( extbas.asm):00103 L80DF FDB L8183 EXBAS RESERVED WORD DICTIONARY TABLE 80E1 813C ( extbas.asm):00104 L80E1 FDB L813C EXBAS RESERVED WORD HANDLER 80E3 0E ( extbas.asm):00105 L80E3 FCB 14 14 EXBAS SECONDARY COMMANDS 80E4 821E ( extbas.asm):00106 L80E4 FDB L821E EXBAS SECONDARY RESERVED WORD TABLE 80E6 8168 ( extbas.asm):00107 L80E6 FDB L8168 EXBAS SECONDARY RESERVED WORD HANDLER 80E8 455854454E444544 ( extbas.asm):00108 L80E8 FCC 'EXTENDED COLOR BASIC 1.1' 20434F4C4F522042 4153494320312E31 8100 0D ( extbas.asm):00109 L8100 FCB CR 8101 434F505952494748 ( extbas.asm):00110 L8101 FCC 'COPYRIGHT (C) 1982' 5420284329203139 3832 8113 2042592054414E44 ( extbas.asm):00111 FCC ' BY TANDY' 59 811C 0D ( extbas.asm):00112 L811C FCB CR 811D 554E444552204C49 ( extbas.asm):00113 L811D FCC 'UNDER LICENSE FROM MICROSOFT' 43454E5345204652 4F4D204D4943524F 534F4654 8139 0D0D00 ( extbas.asm):00114 L8139 FCB CR,CR,0 ( extbas.asm):00115 * EXBAS COMMAND INTERPRETATION LOOP 813C 81CB ( extbas.asm):00116 L813C CMPA #$CB $CB IS LARGEST EX BASIC COMMAND TOKEN 813E 2208 ( extbas.asm):00117 BHI L8148 BRANCH IF > LARGEST TOKEN 8140 8E81F0 ( extbas.asm):00118 LDX #L81F0 POINT X TO EXBAS DISPATCH TABLE FOR COMMANDS 8143 80B5 ( extbas.asm):00119 SUBA #$B5 $B5 IS SMALLEST EXBAS TOKEN 8145 7EADD4 ( extbas.asm):00120 JMP >LADD4 INTERPRET BASIC TOKEN HANDLER 8148 81FF ( extbas.asm):00121 L8148 CMPA #$FF CHECK FOR SECONDARY TOKEN 814A 2708 ( extbas.asm):00122 BEQ L8154 BRANCH IF IT IS SECONDARY 814C 81CD ( extbas.asm):00123 CMPA #$CD LARGEST EXBAS TOKEN 814E 2315 ( extbas.asm):00124 BLS L8165 ‘SYNTAX’ ERROR FOR USING & FN 8150 6E9F0137 ( extbas.asm):00125 L8150 JMP [COMVEC+23] GO TO DISK BASIC RESERVED WORD HANDLER 8154 9D9F ( extbas.asm):00126 L8154 JSR GETNCH GET AN INPUT CHARACTER FROM BASIC 8156 8190 ( extbas.asm):00127 CMPA #$90 TOKEN FOR MID$ 8158 1027057A ( extbas.asm):00128 LBEQ L86D6 BRANCH IF MID$ 815C 819F ( extbas.asm):00129 CMPA #$9F TOKEN FOR TIMER 815E 102707FE ( extbas.asm):00130 LBEQ L8960 BRANCH IF TIMER 8162 BD01A0 ( extbas.asm):00131 JSR RVEC22 HOOK INTO RAM 8165 7EB277 ( extbas.asm):00132 L8165 JMP >LB277 ‘SYNTAX’ ERROR ( extbas.asm):00133 * EXBAS SECONDARY COMMAND HANDLER 8168 C142 ( extbas.asm):00134 L8168 CMPB #2*33 *80+33 IS LARGEST EXBAS SECONDARY COMMAND 816A 2304 ( extbas.asm):00135 BLS L8170 BRANCH IF LEGITIMATE EXBAS SECONDARY TOKEN 816C 6E9F013C ( extbas.asm):00136 L816C JMP [COMVEC+28] GO TO DISK BASIC SECONDARY COMMAND HANDLER 8170 C028 ( extbas.asm):00137 L8170 SUBB #2*20 SUBTRACT OUT 20 BASIC SECONDARY COMMANDS 8172 C110 ( extbas.asm):00138 CMPB #2*8 HEX$ TOKEN 8174 2207 ( extbas.asm):00139 BHI L817D BRANCH IF > HEX$ 8176 3404 ( extbas.asm):00140 PSHS B SAVE TOKEN OFFSET 8178 BDB262 ( extbas.asm):00141 JSR >LB262 EVALUATE EXPRESSION IN PARENTHESES 817B 3504 ( extbas.asm):00142 PULS B GET TOKEN OFFSET BACK 817D 8E8257 ( extbas.asm):00143 L817D LDX #L8257 EXBAS SECONDARY COMMAND JUMP TABLE 8180 7EB2CE ( extbas.asm):00144 JMP >LB2CE JUMP TO SECONDARY FUNCT1ON HANDLER ( extbas.asm):00145 * RESERVED WORD TABLE FOR EXTENDED BASIC ( extbas.asm):00146 * TOKEN # 8183 4445CC ( extbas.asm):00147 L8183 FCS 'DEL' B5 8186 454449D4 ( extbas.asm):00148 L8186 FCS 'EDIT' B6 818A 54524FCE ( extbas.asm):00149 L818A FCS 'TRON' B7 818E 54524F46C6 ( extbas.asm):00150 L818E FCS 'TROFF' B8 8193 4445C6 ( extbas.asm):00151 L8193 FCS 'DEF' B9 8196 4C45D4 ( extbas.asm):00152 L8196 FCS 'LET' BA 8199 4C494EC5 ( extbas.asm):00153 L8199 FCS 'LINE' BB 819D 50434CD3 ( extbas.asm):00154 L819D FCS 'PCLS' BC 81A1 505345D4 ( extbas.asm):00155 L81A1 FCS 'PSET' BD 81A5 5052455345D4 ( extbas.asm):00156 L81A5 FCS 'PRESET' BE 81AB 5343524545CE ( extbas.asm):00157 L81AB FCS 'SCREEN' BF 81B1 50434C4541D2 ( extbas.asm):00158 L81B1 FCS 'PCLEAR' C0 81B7 434F4C4FD2 ( extbas.asm):00159 L81B7 FCS 'COLOR' C1 81BC 434952434CC5 ( extbas.asm):00160 L81BC FCS 'CIRCLE' C2 81C2 5041494ED4 ( extbas.asm):00161 L81C2 FCS 'PAINT' C3 81C7 4745D4 ( extbas.asm):00162 L81C7 FCS 'GET' C4 81CA 5055D4 ( extbas.asm):00163 L81CA FCS 'PUT' C5 81CD 445241D7 ( extbas.asm):00164 L81CD FCS 'DRAW' C6 81D1 50434F50D9 ( extbas.asm):00165 L81D1 FCS 'PCOPY' C7 81D6 504D4F44C5 ( extbas.asm):00166 L81D6 FCS 'PMODE' C8 81DB 504C41D9 ( extbas.asm):00167 L81DB FCS 'PLAY' C9 81DF 444C4F41C4 ( extbas.asm):00168 L81DF FCS 'DLOAD' CA 81E4 52454E55CD ( extbas.asm):00169 L81E4 FCS 'RENUM' CB 81E9 46CE ( extbas.asm):00170 L81E9 FCS 'FN' CC 81EB 5553494EC7 ( extbas.asm):00171 L81EB FCS 'USING' CD ( extbas.asm):00172 * DISPATCH TABLE FOR EXTENDED BASIC COMMANDS ( extbas.asm):00173 * TOKEN # 81F0 8970 ( extbas.asm):00174 L81F0 FDB DEL DEL B5 81F2 8533 ( extbas.asm):00175 L81F2 FDB EDIT EDIT B6 81F4 86A7 ( extbas.asm):00176 L81F4 FDB TRON TRON B7 81F6 86A8 ( extbas.asm):00177 L81F6 FDB TROFF TROFF B8 81F8 8871 ( extbas.asm):00178 L81F8 FDB DEF DEF B9 81FA AF89 ( extbas.asm):00179 L81FA FDB LET LET BA 81FC 93BB ( extbas.asm):00180 L81FC FDB LINE LINE BB 81FE 9532 ( extbas.asm):00181 L81FE FDB PCLS PCLS BC 8200 9361 ( extbas.asm):00182 L8200 FDB PSET PSET BD 8202 9365 ( extbas.asm):00183 L8202 FDB PRESET PRESET BE 8204 9670 ( extbas.asm):00184 L8204 FDB SCREEN SCREEN BF 8206 968B ( extbas.asm):00185 L8206 FDB PCLEAR PCLEAR C0 8208 9546 ( extbas.asm):00186 L8208 FDB COLOR COLOR C1 820A 9E9D ( extbas.asm):00187 L820A FDB CIRCLE CIRCLE C2 820C 98EC ( extbas.asm):00188 L820C FDB PAINT PAINT C3 820E 9755 ( extbas.asm):00189 L820E FDB GET GET C4 8210 9758 ( extbas.asm):00190 L8210 FDB PUT PUT C5 8212 9CB6 ( extbas.asm):00191 L8212 FDB DRAW DRAW C6 8214 9723 ( extbas.asm):00192 L8214 FDB PCOPY PCOPY C7 8216 9621 ( extbas.asm):00193 L8216 FDB PMODETOK PMODE C7 8218 9A22 ( extbas.asm):00194 L8218 FDB PLAY PLAY C9 821A 8C18 ( extbas.asm):00195 L821A FDB DLOAD DLOAD CA 821C 8A09 ( extbas.asm):00196 L821C FDB RENUM RENUM CB ( extbas.asm):00197 * SECONDARY FUNCTION FOR EXTENDED BASIC ( extbas.asm):00198 * TOKENS ARE PRECEEDED WITH AN $FF BYTE ( extbas.asm):00199 * TOKEN # 821E 4154CE ( extbas.asm):00200 L821E FCS 'ATN' 94 8221 434FD3 ( extbas.asm):00201 L8221 FCS 'COS' 95 8224 5441CE ( extbas.asm):00202 L8224 FCS 'TAN' 96 8227 4558D0 ( extbas.asm):00203 L8227 FCS 'EXP' 97 822A 4649D8 ( extbas.asm):00204 L822A FCS 'FIX' 98 822D 4C4FC7 ( extbas.asm):00205 L822D FCS 'LOG' 99 8230 504FD3 ( extbas.asm):00206 L8230 FCS 'POS' 9A 8233 5351D2 ( extbas.asm):00207 L8233 FCS 'SQR' 9B 8236 484558A4 ( extbas.asm):00208 L8236 FCS 'HEX$' 9C 823A 5641525054D2 ( extbas.asm):00209 L823A FCS 'VARPTR' 9D 8240 494E5354D2 ( extbas.asm):00210 L8240 FCS 'INSTR' 9E 8245 54494D45D2 ( extbas.asm):00211 L8245 FCS 'TIMER' 9F 824A 50504F494ED4 ( extbas.asm):00212 L824A FCS 'PPOINT' A0 8250 535452494E47A4 ( extbas.asm):00213 L8250 FCS 'STRING$' A1 ( extbas.asm):00214 * JUMP TABLE FOR EXTENDED BASIC SECONDARY FUNCTIONS ( extbas.asm):00215 * TOKEN # 8257 83B0 ( extbas.asm):00216 L8257 FDB ATN ATN 94 8259 8378 ( extbas.asm):00217 L8259 FDB COS COS 95 825B 8381 ( extbas.asm):00218 L825B FDB TAN TAN 96 825D 84F2 ( extbas.asm):00219 L825D FDB EXP EXP 97 825F 8524 ( extbas.asm):00220 L825F FDB FIX FIX 98 8261 8446 ( extbas.asm):00221 L8261 FDB LOG LOG 99 8263 86AC ( extbas.asm):00222 L8263 FDB POS POS 9A 8265 8480 ( extbas.asm):00223 L8265 FDB SQR SQR 9B 8267 8BDD ( extbas.asm):00224 L8267 FDB HEXDOL HEXDOL 9C 8269 86BE ( extbas.asm):00225 L8269 FDB VARPTRTOK VARPT 9D 826B 877E ( extbas.asm):00226 L826B FDB INSTR INSTR 9E 826D 8968 ( extbas.asm):00227 L826D FDB TIMER TIMER 9F 826F 9339 ( extbas.asm):00228 L826F FDB PPOINT PPOINT A0 8271 874E ( extbas.asm):00229 L8271 FDB STRING STRING A1 ( extbas.asm):00230 * CONSOLE OUT RAM HOOK 8273 0D6F ( extbas.asm):00231 XVEC3 TST DEVNUM CHECK DEVICE NUMBER 8275 10271333 ( extbas.asm):00232 LBEQ L95AC BRANCH IF SCREEN 8279 3404 ( extbas.asm):00233 PSHS B SAVE CHARACTER 827B D66F ( extbas.asm):00234 LDB DEVNUM *GET DEVICE NUMBER AND 827D C1FD ( extbas.asm):00235 CMPB #-3 *CHECK FOR DLOAD 827F 3504 ( extbas.asm):00236 PULS B GET CHARACTER BACK 8281 2602 ( extbas.asm):00237 BNE L8285 RETURN IF NOT DLOAD 8283 3262 ( extbas.asm):00238 LEAS $02,S *TAKE RETURN OFF STACK & GO BACK TO ROUTINE ( extbas.asm):00239 * *THAT CALLED CONSOLE OUT 8285 39 ( extbas.asm):00240 L8285 RTS ( extbas.asm):00241 * CLOSE FILES RAM HOOK - THIS CODE CORRECTS A ( extbas.asm):00242 * BUG IN 1.0 BASIC WHICH WAS FIXED BY 1.1 BASIC 8286 966F ( extbas.asm):00243 XVEC8 LDA DEVNUM GET DEVICE NUMBER 8288 4C ( extbas.asm):00244 INCA CHECK FOR CASSETTE 8289 26FA ( extbas.asm):00245 BNE L8285 RETURN IF NOT CASSETTE 828B 9678 ( extbas.asm):00246 LDA FILSTA GET FILE STATUS 828D 8102 ( extbas.asm):00247 CMPA #$02 OPEN FOR OUTPUT? 828F 26F4 ( extbas.asm):00248 BNE L8285 RETURN IF NOT OPEN FOR OUTPUT 8291 9679 ( extbas.asm):00249 LDA CINCTR GET CHARACTER BUFFER COUNTER 8293 26F0 ( extbas.asm):00250 BNE L8285 RETURN IF NOT EMPTY 8295 0F6F ( extbas.asm):00251 CLR DEVNUM SET DEVICE NUMBER TO SCREEN 8297 3262 ( extbas.asm):00252 LEAS $02,S GET RETURN ADDRESS OFF OF STACK 8299 7EA444 ( extbas.asm):00253 JMP >LA444 WRITE END OF FILE TAPE BLOCK ( extbas.asm):00254 * RUN RAM HOOK 829C CCBA42 ( extbas.asm):00255 XVEC18 LDD #$BA42 MID HIGH VALUE + MID LOW VALUE 829F DDDF ( extbas.asm):00256 STD VOLHI INITIALIZE PLAY VOLUME 82A1 8602 ( extbas.asm):00257 LDA #$02 82A3 97E2 ( extbas.asm):00258 STA TEMPO INITIALIZE TEMPO TO 2 82A5 97DE ( extbas.asm):00259 STA OCTAVE INITIALIZE OCTAVE TO 3 82A7 48 ( extbas.asm):00260 ASLA X2 82A8 97E1 ( extbas.asm):00261 STA NOTELN INITIALIZE NOTE LENGTH TO 5 82AA 0FE5 ( extbas.asm):00262 CLR DOTVAL LEAR NOTE TIMER SCALE FACTOR 82AC DC8A ( extbas.asm):00263 LDD ZERO ZERO ACCD 82AE DDE8 ( extbas.asm):00264 STD ANGLE INITIALIZE DRAW ANGLE AND SCALE TO 1 82B0 C680 ( extbas.asm):00265 LDB #128 * INITIALIZE HORIZONTAL DEFAULT 82B2 DDC7 ( extbas.asm):00266 STD HORDEF * COORDINATE TO MID POSITION 82B4 C660 ( extbas.asm):00267 LDB #96 = INITIALIZE VERTICAL DEFAULT 82B6 DDC9 ( extbas.asm):00268 STD VERDEF = COORDINATE TO MID POSITION 82B8 39 ( extbas.asm):00269 RTS ( extbas.asm):00270 * COMMAND INTERPRETATION LOOP RAM HOOK 82B9 3262 ( extbas.asm):00271 XVEC20 LEAS $02,S PURGE RETURN ADDRESS FROM STACK 82BB 1CAF ( extbas.asm):00272 L82BB ANDCC #$AF ENABLE INTERRUPTS 82BD BDADEB ( extbas.asm):00273 JSR >LADEB CHECK FOR KEYBOARD BREAK 82C0 9EA6 ( extbas.asm):00274 LDX CHARAD * GET CURRENT BASIC LINE 82C2 9F2F ( extbas.asm):00275 STX TINPTR * POINTER AND SAVE IT 82C4 A680 ( extbas.asm):00276 LDA ,X+ GET CURRENT INPUT CHARACTER AND ADVANCE POINTER 82C6 2707 ( extbas.asm):00277 BEQ L82CF BRANCH IF END OF LINE 82C8 813A ( extbas.asm):00278 CMPA #': CHECK FOR COLON 82CA 2725 ( extbas.asm):00279 BEQ L82F1 CONTINUE INTERPRETING IF COLON 82CC 7EB277 ( extbas.asm):00280 JMP >LB277 SNYTAX ERROR - COLON ONLY LEGAL LINE SEPARATOR 82CF A681 ( extbas.asm):00281 L82CF LDA ,X++ * GET 1ST BYTE OF ADDRESS OF NEXT 82D1 9700 ( extbas.asm):00282 STA ENDFLG * BASIC LINE AND SAVE IT 82D3 2603 ( extbas.asm):00283 BNE L82D8 BRANCH IF NOT END OF PROGRAM 82D5 7EAE15 ( extbas.asm):00284 JMP >LAE15 RETURN TO DIRECT MODE - PRINT OK 82D8 EC80 ( extbas.asm):00285 L82D8 LDD ,X+ GET LINE NUMBER OF NEXT LINE 82DA DD68 ( extbas.asm):00286 STD CURLIN SAVE LINE NUMBER 82DC 9FA6 ( extbas.asm):00287 STX CHARAD SAVE ADDRESS NEXT BYTE TO INTERPRET 82DE 96AF ( extbas.asm):00288 LDA TRCFLG TEST THE TRACE FLAG 82E0 270F ( extbas.asm):00289 BEQ L82F1 BRANCH IF TRACE OFF 82E2 865B ( extbas.asm):00290 LDA #$5B LBDCC CONVERT ACCD TO DECIMAL AND PRINT ON SCREEN 82EC 865D ( extbas.asm):00294 LDA #$5D > RIGHT HAND MARKER FOR TRON LINE NUMBER 82EE BDA282 ( extbas.asm):00295 JSR PUTCHR OUTPUT A CHARACTER 82F1 9D9F ( extbas.asm):00296 L82F1 JSR GETNCH GET A CHARACTER FROM BASIC 82F3 1FA9 ( extbas.asm):00297 TFR CC,B SAVE STATUS IN ACCB 82F5 8198 ( extbas.asm):00298 CMPA #$98 CSAVE TOKEN 82F7 271D ( extbas.asm):00299 BEQ L8316 GO DO A CSAVE 82F9 8197 ( extbas.asm):00300 CMPA #$97 CLOAD TOKEN 82FB 2714 ( extbas.asm):00301 BEQ L8311 PROCESS CLOAD 82FD 1F9A ( extbas.asm):00302 TFR B,CC GET STATUS REG BACK 82FF BDADC6 ( extbas.asm):00303 JSR >LADC6 LINK BACK TO BASIC’S INTERPRETATION LOOP 8302 20B7 ( extbas.asm):00304 BRA L82BB GO TO MAIN INTERPRETATION LOOP ( extbas.asm):00305 * CRUNCH RAM HOOK 8304 AE62 ( extbas.asm):00306 XVEC23 LDX $02,S *CHECK TO SEE IF THE ROUTINE CALLING ‘CRUNCH’ 8306 8CAC9D ( extbas.asm):00307 CMPX #LAC9D *IS COMING FROM THE MAIN LOOP IN BASIC 8309 2605 ( extbas.asm):00308 BNE L8310 *AND BRANCH IF NOT 830B 8E82F1 ( extbas.asm):00309 LDX #L82F1 =IF IT IS, DO NOT RETURN TO COLOR BASIC 830E AF62 ( extbas.asm):00310 STX $02,S =BUT TO THE EXBAS PATCH INSTEAD 8310 39 ( extbas.asm):00311 L8310 RTS 8311 BD8C62 ( extbas.asm):00312 L8311 JSR >L8C62 CHECK EXBAS CLOAD HANDLER 8314 20A5 ( extbas.asm):00313 BRA L82BB GO TO MAIN INTERPRETATION LOOP 8316 8D02 ( extbas.asm):00314 L8316 BSR L831A DO A CSAVE 8318 20A1 ( extbas.asm):00315 BRA L82BB GO TO MAIN INTERPRETATION LOOP 831A 9D9F ( extbas.asm):00316 L831A JSR GETNCH GET A CHAR FROM BASIC 831C 814D ( extbas.asm):00317 CMPA #'M CHECK FOR CSAVEM 831E 1026212A ( extbas.asm):00318 LBNE CSAVE BRANCH IF IT’S NOT CSAVEM ( extbas.asm):00319 * CSAVEM 8322 9D9F ( extbas.asm):00320 JSR GETNCH GET A CHAR FROM BASIC 8324 BDA578 ( extbas.asm):00321 JSR >LA578 GET NAME OF FILE FROM BASIC 8327 8D43 ( extbas.asm):00322 BSR L836C GO GET THE START ADDRESS 8329 BF01E7 ( extbas.asm):00323 STX CASBUF+13 PUT IT IN HEADER BUFFER 832C 8D3E ( extbas.asm):00324 BSR L836C GO GET END ADDRESS 832E AC62 ( extbas.asm):00325 CMPX $02,S COMPARE TO START ADDRESS 8330 10253116 ( extbas.asm):00326 LBCS LB44A ‘FC’ ERROR IF START > END 8334 8D36 ( extbas.asm):00327 BSR L836C GO GET XFER ADDRESS 8336 BF01E5 ( extbas.asm):00328 STX CASBUF+11 PUT IT IN HEADER BUFFER 8339 9DA5 ( extbas.asm):00329 JSR GETCCH GET NEW CHARACTER 833B 26D3 ( extbas.asm):00330 BNE L8310 RETURN IF NOT END OF LINE 833D 8602 ( extbas.asm):00331 LDA #$02 FILE TYPE (MACHINE LANGUAGE) 833F 9E8A ( extbas.asm):00332 LDX ZERO X = 0000 FILE MODE AND ASCII FLAG 8341 BDA65F ( extbas.asm):00333 JSR >LA65F WRITE HEADER BLOCK 8344 0F78 ( extbas.asm):00334 CLR FILSTA CLOSE CASSETTE FILES 8346 0C7C ( extbas.asm):00335 INC BLKTYP BLOCK TYPE = 1 8348 BDA7D8 ( extbas.asm):00336 JSR WRLDR GO WRITE LEADER 834B AE64 ( extbas.asm):00337 LDX $04,S GET STARTING ADDRESS 834D 9F7E ( extbas.asm):00338 L834D STX CBUFAD STORE BUFFER START ADOR 834F 86FF ( extbas.asm):00339 LDA #255 BLOCK SIZE = 2SS 8351 977D ( extbas.asm):00340 STA BLKLEN STORE IN BLOCK SIZE 8353 EC62 ( extbas.asm):00341 LDD $02,S GET ENDING ADDRESS 8355 937E ( extbas.asm):00342 SUBD CBUFAD SUBTRACT START ADDRESS 8357 2405 ( extbas.asm):00343 BCC L835E BRANCH IF MORE TO BE WRITTEN 8359 3266 ( extbas.asm):00344 LEAS $06,S CLEAN UP STACK 835B 7EA491 ( extbas.asm):00345 JMP >LA491 WRITE FINAL BLOCK 835E 108300FF ( extbas.asm):00346 L835E CMPD #$00FF AT LEAST 1 FULL BLK LEFT? 8362 2403 ( extbas.asm):00347 BCC L8367 YES 8364 5C ( extbas.asm):00348 INCB NO - PUT WHAT’S LEFT IN BLKLEN 8365 D77D ( extbas.asm):00349 STB BLKLEN BUFFER SIZE 8367 BDA7F4 ( extbas.asm):00350 L8367 JSR SNDBLK WRITE A BLOCK 836A 20E1 ( extbas.asm):00351 BRA L834D GO DO SOME MORE 836C BDB26D ( extbas.asm):00352 L836C JSR SYNCOMMA SYNTAX CHECK FOR COMMA 836F BDB73D ( extbas.asm):00353 JSR >LB73D EVAL EXPR - RETURN VALUE IN X 8372 EEE4 ( extbas.asm):00354 LDU ,S SAVE RETURN ADDRESS IN U 8374 AFE4 ( extbas.asm):00355 STX ,S PUT THE EXPRESSION ON THE STACK 8376 1F35 ( extbas.asm):00356 TFR U,PC ‘RETURN’ TO CALLING ADDRESS ( extbas.asm):00357 * COS ( extbas.asm):00358 * THE VALUE OF COS(X) IS DETERMINED BY THE TRIG IDENTITY COS(X)=SIN((PI/2)+X) 8378 8E83AB ( extbas.asm):00359 COS LDX #L83AB POINT X TO FP CONSTANT (P1/2) 837B BDB9C2 ( extbas.asm):00360 JSR >LB9C2 ADD FPA0 TO (X) 837E 7EBF78 ( extbas.asm):00361 L837E JMP SIN JUMP TO SIN ROUTINE ( extbas.asm):00362 * TAN ( extbas.asm):00363 * THE VALUE OF TAN(X) IS DETERMINED BY THE TRIG IDENTITY TAN(X)=SIN(X)/COS(X) 8381 BDBC2F ( extbas.asm):00364 TAN JSR >LBC2F PACK FPA0 AND MOVE IT TO FPA3 8384 0F0A ( extbas.asm):00365 CLR RELFLG RESET QUADRANT FLAG 8386 8DF6 ( extbas.asm):00366 BSR L837E CALCULATE SIN OF ARGUMENT 8388 8E004A ( extbas.asm):00367 LDX #V4A POINT X TO FPA5 838B BDBC35 ( extbas.asm):00368 JSR >LBC35 PACK FPA0 AND MOVE IT TO FPA5 838E 8E0040 ( extbas.asm):00369 LDX #V40 POINT X TO FPA3 8391 BDBC14 ( extbas.asm):00370 JSR >LBC14 MOVE FPA3 TO FPA0 8394 0F54 ( extbas.asm):00371 CLR FP0SGN FORCE FPA0 MANTISSA TO BE POSITIVE 8396 960A ( extbas.asm):00372 LDA RELFLG GET THE QUADRANT FLAG - COS NEGATIVE IN QUADS 2,3 8398 8D0C ( extbas.asm):00373 BSR L83A6 CALCULATE VALUE OF COS(FPA0) 839A 0D4F ( extbas.asm):00374 TST FP0EXP CHECK EXPONENT OF FPA0 839C 102736F2 ( extbas.asm):00375 LBEQ LBA92 ‘OV’ ERROR IF COS(X)=0 83A0 8E004A ( extbas.asm):00376 LDX #V4A POINT X TO FPA5 83A3 7EBB8F ( extbas.asm):00377 L83A3 JMP >LBB8F DIVIDE (X) BY FPA0 - SIN(X)/COS(X) 83A6 3402 ( extbas.asm):00378 L83A6 PSHS A SAVE SIGN FLAG ON STACK 83A8 7EBFA6 ( extbas.asm):00379 JMP >LBFA6 EXPAND POLYNOMIAL 83AB 81490FDAA2 ( extbas.asm):00380 L83AB FCB $81,$49,$0F,$DA,$A2 1.57079633 (PI/2) ( extbas.asm):00381 * ATN ( extbas.asm):00382 * A 12 TERM TAYLOR SERIES IS USED TO EVALUATE THE ( extbas.asm):00383 * ARCTAN EXPRESSION. TWO DIFFERENT FORMULI ARE USED ( extbas.asm):00384 * TO EVALUATE THE EXPRESSION DEPENDING UPON ( extbas.asm):00385 * WHETHER OR NOT THE ARGUMENT SQUARED IS > OR < 1.0 ( extbas.asm):00386 * IF X**2<1 THEN ATN=X-(X**3)/3+(X**5)/5-(X**7)/7……….. ( extbas.asm):00387 * IF X**2>=1 THEN ATN=PI/2-(1/X-1/((X**3)*3)+(1/((X**5)*5)-………) 83B0 9654 ( extbas.asm):00388 ATN LDA FP0SGN * GET THE SIGN OF THE MANTISSA AND 83B2 3402 ( extbas.asm):00389 PSHS A * SAVE IT ON THE STACK 83B4 2A02 ( extbas.asm):00390 BPL L83B8 BRANCH IF POSITIVE MANTISSA 83B6 8D24 ( extbas.asm):00391 BSR L83DC CHANGE SIGN OF FPA0 83B8 964F ( extbas.asm):00392 L83B8 LDA FP0EXP * GET EXPONENT OF FPA0 AND 83BA 3402 ( extbas.asm):00393 PSHS A * SAVE IT ON THE STACK 83BC 8181 ( extbas.asm):00394 CMPA #$81 IS FPAO < 1.0? 83BE 2505 ( extbas.asm):00395 BLO L83C5 YES 83C0 8EBAC5 ( extbas.asm):00396 LDX #LBAC5 POINT X TO FP CONSTANT 1.0 83C3 8DDE ( extbas.asm):00397 BSR L83A3 GET RECIPROCAL OF FPA0 83C5 8E83E0 ( extbas.asm):00398 L83C5 LDX #L83E0 POINT (X) TO TAYLOR SERIES COEFFICIENTS 83C8 BDBEF0 ( extbas.asm):00399 JSR >LBEF0 EXPAND POLYNOMIAL 83CB 3502 ( extbas.asm):00400 PULS A GET EXPONENT OF ARGUMENT 83CD 8181 ( extbas.asm):00401 CMPA #$81 WAS ARGUMENT < 1.0? 83CF 2506 ( extbas.asm):00402 BLO L83D7 YES 83D1 8E83AB ( extbas.asm):00403 LDX #L83AB POINT (X) TO FP NUMBER (PI/2) 83D4 BDB9B9 ( extbas.asm):00404 JSR >LB9B9 SUBTRACT FPA0 FROM (PI/2) 83D7 3502 ( extbas.asm):00405 L83D7 PULS A * GET SIGN OF INITIAL ARGUMENT MANTISSA 83D9 4D ( extbas.asm):00406 TSTA * AND SET FLAGS ACCORDING TO IT 83DA 2A03 ( extbas.asm):00407 BPL L83DF RETURN IF ARGUMENT WAS POSITIVE 83DC 7EBEE9 ( extbas.asm):00408 L83DC JMP >LBEE9 CHANGE MANTISSA SIGN OF FPA0 83DF 39 ( extbas.asm):00409 L83DF RTS ( extbas.asm):00410 * ( extbas.asm):00411 * TCHEBYSHEV MODIFIED TAYLOR SERIES COEFFICIENTS FOR ARCTANGENT 83E0 0B ( extbas.asm):00412 L83E0 FCB $0B TWELVE COEFFICIENTS 83E1 76B383BDD3 ( extbas.asm):00413 L83E1 FCB $76,$B3,$83,$BD,$D3 -6.84793912E-04 1/23 83E6 791EF4A6F5 ( extbas.asm):00414 L83E6 FCB $79,$1E,$F4,$A6,$F5 +4.85094216E-03 1/21 83EB 7B83FCB010 ( extbas.asm):00415 L83EB FCB $7B,$83,$FC,$B0,$10 -0.0161117018 1/19 83F0 7C0C1F67CA ( extbas.asm):00416 L83F0 FCB $7C,$0C,$1F,$67,$CA +0.0342096381 1/17 83F5 7CDE53CBC1 ( extbas.asm):00417 L83F5 FCB $7C,$DE,$53,$CB,$C1 -0.0542791328 1/15 83FA 7D1464704C ( extbas.asm):00418 L83FA FCB $7D,$14,$64,$70,$4C +0.0724571965 1/13 83FF 7DB7EA517A ( extbas.asm):00419 L83FF FCB $7D,$B7,$EA,$51,$7A -0.0898023954 1/11 8404 7D6330887E ( extbas.asm):00420 L8404 FCB $7D,$63,$30,$88,$7E +0.110932413 1/9 8409 7E9244993A ( extbas.asm):00421 L8409 FCB $7E,$92,$44,$99,$3A -0.142839808 1/7 840E 7E4CCC91C7 ( extbas.asm):00422 L840E FCB $7E,$4C,$CC,$91,$C7 +0.199999121 1/5 8413 7FAAAAAA13 ( extbas.asm):00423 L8413 FCB $7F,$AA,$AA,$AA,$13 -0.333333316 1/3 8418 8100000000 ( extbas.asm):00424 L8418 FCB $81,$00,$00,$00,$00 +1.000000000 1/1 ( extbas.asm):00425 * ( extbas.asm):00426 *** TCHEBYSHEV MODIFIED TAYLOR SERIES COEFFICIENTS FOR LN(X) ( extbas.asm):00427 * 841D 03 ( extbas.asm):00428 L841D FCB $03 FOUR COEFFICIENTS 841E 7F5E56CB79 ( extbas.asm):00429 L841E FCB $7F,$5E,$56,$CB,$79 0.434255942 (2/7)*(1/LN(2)) 8423 80139B0B64 ( extbas.asm):00430 L8423 FCB $80,$13,$9B,$0B,$64 0.576584541 (2/5)*(1/LN(2)) 8428 8076389316 ( extbas.asm):00431 L8428 FCB $80,$76,$38,$93,$16 0.961800759 (2/3)*(1/LN(2)) 842D 8238AA3B20 ( extbas.asm):00432 L842D FCB $82,$38,$AA,$3B,$20 2.88539007 (2/1)*(1/LN(2)) 8432 803504F334 ( extbas.asm):00433 L8432 FCB $80,$35,$04,$F3,$34 1/SQR(2) 8437 813504F334 ( extbas.asm):00434 L8437 FCB $81,$35,$04,$F3,$34 SQR(2) 843C 8080000000 ( extbas.asm):00435 L843C FCB $80,$80,$00,$00,$00 -.5 8441 80317217F8 ( extbas.asm):00436 L8441 FCB $80,$31,$72,$17,$F8 LN(2) ( extbas.asm):00437 * ( extbas.asm):00438 * LOG - NATURAL LOGARITHM (LN) ( extbas.asm):00439 * THE NATURAL OR NAPERIAN LOGARITHM IS CALCULATED USING ( extbas.asm):00440 * MATHEMATICAL IDENTITIES. FPA0 IS OF THE FORM FPA0=A*(2**B) (SCIENTIFIC ( extbas.asm):00441 * NOTATION). THEREFORE, THE LOG ROUTINE DETERMINES THE VALUE OF ( extbas.asm):00442 * LN(A*(2**B)). A SERIES OF MATHEMATICAL IDENTITIES WILL EXPAND THIS ( extbas.asm):00443 * TERM: LN(A*(2**B))=(-1/2+(1/LN(2))*(LN(A*SQR(2)))+B)*LN(2). ALL OF ( extbas.asm):00444 * THE TERMS OF THE LATTER EXPRESSION ARE CONSTANTS EXCEPT FOR THE ( extbas.asm):00445 * LN(A*SQR(2)) TERM WHICH IS EVALUATED USING THE TAYLOR SERIES EXPANSION 8446 BDBC6D ( extbas.asm):00446 LOG JSR >LBC6D CHECK STATUS OF FPA0 8449 102F2FFD ( extbas.asm):00447 LBLE LB44A ‘FC’ ERROR IF NEGATIVE OR ZERO 844D 8E8432 ( extbas.asm):00448 LDX #L8432 POINT (X) TO FP NUMBER (1/SQR(2)) 8450 964F ( extbas.asm):00449 LDA FP0EXP *GET EXPONENT OF ARGUMENT 8452 8080 ( extbas.asm):00450 SUBA #$80 *SUBTRACT OFF THE BIAS AND 8454 3402 ( extbas.asm):00451 PSHS A *SAVE IT ON THE STACK 8456 8680 ( extbas.asm):00452 LDA #$80 =FORCE EXPONENT OF FPA0 8458 974F ( extbas.asm):00453 STA FP0EXP =TO BE ZERO 845A BDB9C2 ( extbas.asm):00454 JSR >LB9C2 ADD FPA0 TO (X) 845D 8E8437 ( extbas.asm):00455 LDX #L8437 POINT X TO SQR(2) 8460 BDBB8F ( extbas.asm):00456 JSR >LBB8F DIVIDE SQR(2) BY FPA0 8463 8EBAC5 ( extbas.asm):00457 LDX #LBAC5 POINT X TO FP VALUE OF 1.00 8466 BDB9B9 ( extbas.asm):00458 JSR >LB9B9 SUBTRACT FPA0 FROM (X) ( extbas.asm):00459 * NOW FPA0 = (1-SQR(2)*X)/(1+SQR(2)*X) WHERE X IS ARGUMENT 8469 8E841D ( extbas.asm):00460 LDX #L841D POINT X TO TABLE OF COEFFICIENTS 846C BDBEF0 ( extbas.asm):00461 JSR >LBEF0 EXPAND POLYNOMIAL 846F 8E843C ( extbas.asm):00462 LDX #L843C POINT X TO FP VALUE OF (-.5) 8472 BDB9C2 ( extbas.asm):00463 JSR >LB9C2 ADD FPA0 TO X 8475 3504 ( extbas.asm):00464 PULS B GET EXPONENT OF ARGUMENT BACK (WITHOUT BIAS) 8477 BDBD99 ( extbas.asm):00465 JSR >LBD99 ADD ACCB TO FPA0 847A 8E8441 ( extbas.asm):00466 LDX #L8441 POINT X TO LN(2) 847D 7EBACA ( extbas.asm):00467 JMP >LBACA MULTIPLY FPA0 * LN(2) ( extbas.asm):00468 * SQR 8480 BDBC5F ( extbas.asm):00469 SQR JSR >LBC5F MOVE FPA0 TO FPA1 8483 8EBEC0 ( extbas.asm):00470 LDX #LBEC0 POINT (X) TO FP NUMBER (.5) 8486 BDBC14 ( extbas.asm):00471 JSR >LBC14 COPY A PACKED NUMBER FROM (X) TO FPA0 ( extbas.asm):00472 * ARITHMETIC OPERATOR FOR EXPONENTIATION JUMPS ( extbas.asm):00473 * HERE. THE FORMULA USED TO EVALUATE EXPONENTIATION ( extbas.asm):00474 * IS A**X=E**(X LN A) = E**(FPA0*LN(FPA1)), E=2.7182818 8489 2767 ( extbas.asm):00475 L8489 BEQ EXP DO A NATURAL EXPONENTIATION IF EXPONENT = 0 848B 4D ( extbas.asm):00476 TSTA *CHECK VALUE BEING EXPONENTIATED 848C 2603 ( extbas.asm):00477 BNE L8491 *AND BRANCH IF IT IS <> 0 848E 7EBA3A ( extbas.asm):00478 JMP >LBA3A FPA0=0 IF RAISING ZERO TO A POWER 8491 8E004A ( extbas.asm):00479 L8491 LDX #V4A * PACK FPA0 AND SAVE 8494 BDBC35 ( extbas.asm):00480 JSR >LBC35 * IT IN FPA5 (ARGUMENT’S EXPONENT) 8497 5F ( extbas.asm):00481 CLRB ACCB=DEFAULT RESULT SIGN FLAG; 0=POSITIVE 8498 9661 ( extbas.asm):00482 LDA FP1SGN *CHECK THE SIGN OF ARGUMENT 849A 2A10 ( extbas.asm):00483 BPL L84AC *BRANCH IF POSITIVE 849C BDBCEE ( extbas.asm):00484 JSR INT CONVERT EXPONENT INTO AN INTEGER 849F 8E004A ( extbas.asm):00485 LDX #V4A POINT X TO FPA5 (ORIGINAL EXPONENT) 84A2 9661 ( extbas.asm):00486 LDA FP1SGN GET MANTISSA SIGN OF FPA1 (ARGUMENT) 84A4 BDBCA0 ( extbas.asm):00487 JSR >LBCA0 *COMPARE FPA0 TO (X) AND 84A7 2603 ( extbas.asm):00488 BNE L84AC *BRANCH IF NOT EQUAL 84A9 43 ( extbas.asm):00489 COMA TOGGLE FPA1 MANTISSA SIGN - FORCE POSITIVE 84AA D601 ( extbas.asm):00490 LDB CHARAC GET LS BYTE OF INTEGER VALUE OF EXPONENT (RESULT SIGN FLAG) 84AC BDBC4C ( extbas.asm):00491 L84AC JSR >LBC4C COPY FPA1 TO FPA0; ACCA = MANTISSA SIGN 84AF 3404 ( extbas.asm):00492 PSHS B PUT RESULT SIGN FLAG ON THE STACK 84B1 BD8446 ( extbas.asm):00493 JSR LOG GET NATURAL LOGARITHM OF FPA0 84B4 8E004A ( extbas.asm):00494 LDX #V4A POINT (X) TO FPA5 84B7 BDBACA ( extbas.asm):00495 JSR >LBACA MULTIPLY FPA0 BY FPA5 84BA 8D36 ( extbas.asm):00496 BSR EXP CALCULATE E**(FPA0) 84BC 3502 ( extbas.asm):00497 PULS A * GET RESULT SIGN FLAG FROM THE STACK 84BE 46 ( extbas.asm):00498 RORA * AND BRANCH IF NEGATIVE 84BF 10253A26 ( extbas.asm):00499 LBCS LBEE9 CHANGE SIGN OF FPA0 MANTISSA 84C3 39 ( extbas.asm):00500 RTS ( extbas.asm):00501 * CORRECTION FACTOR FOR EXPONENTIAL FUNCTION 84C4 8138AA3B29 ( extbas.asm):00502 L84C4 FCB $81,$38,$AA,$3B,$29 1.44269504 ( CF ) ( extbas.asm):00503 * ( extbas.asm):00504 * TCHEBYSHEV MODIFIED TAYLOR SERIES COEFFICIENTS FOR E**X ( extbas.asm):00505 * 84C9 07 ( extbas.asm):00506 L84C9 FCB $07 EIGHT COEFFICIENTS 84CA 7134583E56 ( extbas.asm):00507 L84CA FCB $71,$34,$58,$3E,$56 2.14987637E-05: 1/(7!*(CF**7)) 84CF 74167EB31B ( extbas.asm):00508 L84CF FCB $74,$16,$7E,$B3,$1B 1.4352314E-04 : 1/(6!*(CF**6)) 84D4 772FEEE385 ( extbas.asm):00509 L84D4 FCB $77,$2F,$EE,$E3,$85 1.34226348E-03: 1/(5!*(CF**5)) 84D9 7A1D841C2A ( extbas.asm):00510 L84D9 FCB $7A,$1D,$84,$1C,$2A 9.61401701E-03: 1/(4!*(CF**4)) 84DE 7C6359580A ( extbas.asm):00511 L84DE FCB $7C,$63,$59,$58,$0A 0.0555051269 : 1/(3!*(CF**3)) 84E3 7E75FDE7C6 ( extbas.asm):00512 L84E3 FCB $7E,$75,$FD,$E7,$C6 0.240226385 : 1/(2!*(CF**2)) 84E8 8031721810 ( extbas.asm):00513 L84E8 FCB $80,$31,$72,$18,$10 0.693147186 : 1/(1!*(CF**1)) 84ED 8100000000 ( extbas.asm):00514 L84ED FCB $81,$00,$00,$00,$00 1. ( extbas.asm):00515 * ( extbas.asm):00516 * EXP ( E**X) ( extbas.asm):00517 * THE EXPONENTIAL FUNCTION IS EVALUATED BY FIRST MULTIPLYING THE ( extbas.asm):00518 * ARGUMENT BY A CORRECTION FACTOR (CF). AFTER THIS IS DONE, AN ( extbas.asm):00519 * ARGUMENT >= 127 WILL YIELD A ZERO RESULT (NO UNDERFLOW) FOR A ( extbas.asm):00520 * NEGATIVE ARGUMENT OR AN 'OV' (OVERFLOW) ERROR FOR A POSITIVE ( extbas.asm):00521 * ARGUMENT. THE POLYNOMIAL COEFFICIENTS ARE MODIFIED TO REFLECT ( extbas.asm):00522 * THE CF MULTIPLICATION AT THE START OF THE EVALUATION PROCESS. 84F2 8E84C4 ( extbas.asm):00523 EXP LDX #L84C4 POINT X TO THE CORRECTION FACTOR 84F5 BDBACA ( extbas.asm):00524 JSR >LBACA MULTIPLY FPA0 BY (X) 84F8 BDBC2F ( extbas.asm):00525 JSR >LBC2F PACK FPA0 AND STORE IT IN FPA3 84FB 964F ( extbas.asm):00526 LDA FP0EXP *GET EXPONENT OF FPA0 AND 84FD 8188 ( extbas.asm):00527 CMPA #$88 *COMPARE TO THE MAXIMUM VALUE 84FF 2503 ( extbas.asm):00528 BLO L8504 BRANCH IF FPA0 < 128 8501 7EBB5C ( extbas.asm):00529 L8501 JMP >LBB5C SET FPA0 = 0 OR ‘OV’ ERROR 8504 BDBCEE ( extbas.asm):00530 L8504 JSR INT CONVERT FPA0 TO INTEGER 8507 9601 ( extbas.asm):00531 LDA CHARAC GET LS BYTE OF INTEGER 8509 8B81 ( extbas.asm):00532 ADDA #$81 * WAS THE ARGUMENT =127, IF SO 850B 27F4 ( extbas.asm):00533 BEQ L8501 * THEN ‘OV’ ERROR; THIS WILL ALSO ADD THE $80 BIAS ( extbas.asm):00534 * * REQUIRED WHEN THE NEW EXPONENT IS CALCULATED BELOW 850D 4A ( extbas.asm):00535 DECA DECREMENT ONE FROM THE EXPONENT, BECAUSE $81, NOT $80 WAS USED ABOVE 850E 3402 ( extbas.asm):00536 PSHS A SAVE EXPONENT OF INTEGER PORTION ON STACK 8510 8E0040 ( extbas.asm):00537 LDX #V40 POINT (X) TO FPA3 8513 BDB9B9 ( extbas.asm):00538 JSR >LB9B9 SUBTRACT FPA0 FROM (X) - GET FRACTIONAL PART OF ARGUMENT 8516 8E84C9 ( extbas.asm):00539 LDX #L84C9 POINT X TO COEFFICIENTS 8519 BDBEFF ( extbas.asm):00540 JSR >LBEFF EVALUATE POLYNOMIAL FOR FRACTIONAL PART 851C 0F62 ( extbas.asm):00541 CLR RESSGN FORCE THE MANTISSA TO BE POSITIVE 851E 3502 ( extbas.asm):00542 PULS A GET INTEGER EXPONENT FROM STACK 8520 BDBB48 ( extbas.asm):00543 JSR >LBB48 * CALCULATE EXPONENT OF NEW FPA0 BY ADDING THE EXPONENTS OF THE ( extbas.asm):00544 * * INTEGER AND FRACTIONAL PARTS 8523 39 ( extbas.asm):00545 RTS ( extbas.asm):00546 * FIX 8524 BDBC6D ( extbas.asm):00547 FIX JSR >LBC6D CHECK STATUS OF FPA0 8527 2B03 ( extbas.asm):00548 BMI L852C BRANCH IF FPA0 = NEGATIVE 8529 7EBCEE ( extbas.asm):00549 L8529 JMP INT CONVERT FPA0 TO INTEGER 852C 0354 ( extbas.asm):00550 L852C COM FP0SGN TOGGLE SIGN OF FPA0 MANTISSA 852E 8DF9 ( extbas.asm):00551 BSR L8529 CONVERT FPA0 TO INTEGER 8530 7EBEE9 ( extbas.asm):00552 JMP >LBEE9 TOGGLE SIGN OF FPA0 ( extbas.asm):00553 * EDIT 8533 BD89AE ( extbas.asm):00554 EDIT JSR >L89AE GET LINE NUMBER FROM BASIC 8536 3262 ( extbas.asm):00555 LEAS $02,S PURGE RETURN ADDRESS OFF OF THE STACK 8538 8601 ( extbas.asm):00556 L8538 LDA #$01 ‘LIST’ FLAG 853A 97D8 ( extbas.asm):00557 STA VD8 SET FLAG TO LIST LINE 853C BDAD01 ( extbas.asm):00558 JSR >LAD01 GO FIND THE LINE NUMBER IN PROGRAM 853F 1025298F ( extbas.asm):00559 LBCS LAED2 ERROR #7 ‘UNDEFINED LINE #' 8543 BDB7C2 ( extbas.asm):00560 JSR >LB7C2 GO UNCRUNCH LINE INTO BUFFER AT LINBUF+1 8546 1F20 ( extbas.asm):00561 TFR Y,D PUT ABSOLUTE ADDRESS OF END OF LINE TO ACCD 8548 8302DE ( extbas.asm):00562 SUBD #LINBUF+2 SUBTRACT OUT THE START OF LINE 854B D7D7 ( extbas.asm):00563 STB VD7 SAVE LENGTH OF LINE 854D DC2B ( extbas.asm):00564 L854D LDD BINVAL GET THE HEX VALUE OF LINE NUMBER 854F BDBDCC ( extbas.asm):00565 JSR >LBDCC LIST THE LINE NUMBER ON THE SCREEN 8552 BDB9AC ( extbas.asm):00566 JSR >LB9AC PRINT A SPACE 8555 8E02DD ( extbas.asm):00567 LDX #LINBUF+1 POINT X TO BUFFER 8558 D6D8 ( extbas.asm):00568 LDB VD8 * CHECK TO SEE IF LINE IS TO BE 855A 2625 ( extbas.asm):00569 BNE L8581 * LISTED TO SCREEN - BRANCH IF IT IS 855C 5F ( extbas.asm):00570 L855C CLRB RESET DIGIT ACCUMULATOR - DEFAULT VALUE 855D BD8687 ( extbas.asm):00571 L855D JSR >L8687 GET KEY STROKE 8560 BD90AA ( extbas.asm):00572 JSR >L90AA SET CARRY IF NOT NUMERIC 8563 250B ( extbas.asm):00573 BLO L8570 BRANCH IF NOT NUMERIC 8565 8030 ( extbas.asm):00574 SUBA #'0 MASK OFF ASCII 8567 3402 ( extbas.asm):00575 PSHS A SAVE IT ON STACK 8569 860A ( extbas.asm):00576 LDA #10 NUMBER BEING CONVERTED IS BASE 10 856B 3D ( extbas.asm):00577 MUL MULTIPLY ACCUMULATED VALUE BY BASE (10) 856C EBE0 ( extbas.asm):00578 ADDB ,S+ ADD DIGIT TO ACCUMULATED VALUE 856E 20ED ( extbas.asm):00579 BRA L855D CHECK FOR ANOTHER DIGIT 8570 C001 ( extbas.asm):00580 L8570 SUBB #$01 * REPEAT PARAMETER IN ACCB; IF IT 8572 C901 ( extbas.asm):00581 ADCB #$01 *IS 0, THEN MAKE IT ‘1’ 8574 8141 ( extbas.asm):00582 CMPA #'A ABORT? 8576 2605 ( extbas.asm):00583 BNE L857D NO 8578 BDB958 ( extbas.asm):00584 JSR >LB958 PRINT CARRIAGE RETURN TO SCREEN 857B 20BB ( extbas.asm):00585 BRA L8538 RESTART EDIT PROCESS - CANCEL ALL CHANGES 857D 814C ( extbas.asm):00586 L857D CMPA #'L LIST? 857F 260B ( extbas.asm):00587 BNE L858C NO 8581 8D31 ( extbas.asm):00588 L8581 BSR L85B4 LIST THE LINE 8583 0FD8 ( extbas.asm):00589 CLR VD8 RESET THE LIST FLAG TO ‘NO LIST’ 8585 BDB958 ( extbas.asm):00590 JSR >LB958 PRINT CARRIAGE RETURN 8588 20C3 ( extbas.asm):00591 BRA L854D GO INTERPRET ANOTHER EDIT COMMAND 858A 3262 ( extbas.asm):00592 L858A LEAS $02,S PURGE RETURN ADDRESS OFF OF THE STACK 858C 810D ( extbas.asm):00593 L858C CMPA #CR ENTER KEY? 858E 260D ( extbas.asm):00594 BNE L859D NO 8590 8D22 ( extbas.asm):00595 BSR L85B4 ECHO THE LINE TO THE SCREEN 8592 BDB958 ( extbas.asm):00596 L8592 JSR >LB958 PRINT CARRIAGE RETURN 8595 8E02DD ( extbas.asm):00597 LDX #LINBUF+1 * RESET BASIC’S INPUT POINTER 8598 9FA6 ( extbas.asm):00598 STX CHARAD * TO THE LINE INPUT BUFFER 859A 7EACA8 ( extbas.asm):00599 JMP >LACA8 GO PUT LINE BACK IN PROGRAM 859D 8145 ( extbas.asm):00600 L859D CMPA #'E EXIT? 859F 27F1 ( extbas.asm):00601 BEQ L8592 YES - SAME AS ENTER EXCEPT NO ECHO 85A1 8151 ( extbas.asm):00602 CMPA #'Q QUIT? 85A3 2606 ( extbas.asm):00603 BNE L85AB NO 85A5 BDB958 ( extbas.asm):00604 JSR >LB958 PRINT CARRIAGE RETURN TO SCREEN 85A8 7EAC73 ( extbas.asm):00605 JMP >LAC73 GO TO COMMAND LEVEL - MAKE NO CHANGES 85AB 8D02 ( extbas.asm):00606 L85AB BSR L85AF INTERPRET THE REMAINING COMMANDS AS SUBROUTINES 85AD 20AD ( extbas.asm):00607 BRA L855C GO INTERPRET ANOTHER EDIT COMMAND 85AF 8120 ( extbas.asm):00608 L85AF CMPA #SPACE SPACE BAR? 85B1 2610 ( extbas.asm):00609 BNE L85C3 NO 85B3 8C ( extbas.asm):00610 L85B3 FCB SKP2 SKIP TWO BYTES ( extbas.asm):00611 * DISPLAY THE NEXT ACCB BYTES OF THE LINE IN THE BUFFER TO THE SCREEN ( extbas.asm):00612 * 85B4 C6F9 ( extbas.asm):00613 L85B4 LDB #LBUFMX-1 250 BYTES MAX IN BUFFER 85B6 A684 ( extbas.asm):00614 L85B6 LDA ,X GET A CHARACTER FROM BUFFER 85B8 2708 ( extbas.asm):00615 BEQ L85C2 EXIT IF IT’S A 0 85BA BDA282 ( extbas.asm):00616 JSR PUTCHR SEND CHAR TO CONSOLE OUT 85BD 3001 ( extbas.asm):00617 LEAX $01,X MOVE POINTER UP ONE 85BF 5A ( extbas.asm):00618 DECB DECREMENT CHARACTER COUNTER 85C0 26F4 ( extbas.asm):00619 BNE L85B6 LOOP IF NOT DONE 85C2 39 ( extbas.asm):00620 L85C2 RTS 85C3 8144 ( extbas.asm):00621 L85C3 CMPA #'D DELETE? 85C5 2648 ( extbas.asm):00622 BNE L860F NO 85C7 6D84 ( extbas.asm):00623 L85C7 TST ,X * CHECK FOR END OF LINE 85C9 27F7 ( extbas.asm):00624 BEQ L85C2 * AND BRANCH IF SO 85CB 8D04 ( extbas.asm):00625 BSR L85D1 REMOVE A CHARACTER 85CD 5A ( extbas.asm):00626 DECB DECREMENT REPEAT PARAMETER 85CE 26F7 ( extbas.asm):00627 BNE L85C7 BRANCH IF NOT DONE 85D0 39 ( extbas.asm):00628 RTS ( extbas.asm):00629 * REMOVE ONE CHARACTER FROM BUFFER 85D1 0AD7 ( extbas.asm):00630 L85D1 DEC VD7 DECREMENT LENGTH OF BUFFER 85D3 311F ( extbas.asm):00631 LEAY $-01,X POINT Y TO ONE BEFORE CURRENT BUFFER POINTER 85D5 3121 ( extbas.asm):00632 L85D5 LEAY $01,Y INCREMENT TEMPORARY BUFFER POINTER 85D7 A621 ( extbas.asm):00633 LDA $01,Y GET NEXT CHARACTER 85D9 A7A4 ( extbas.asm):00634 STA ,Y PUT IT IN CURRENT POSITION 85DB 26F8 ( extbas.asm):00635 BNE L85D5 BRANCH IF NOT END OF LINE 85DD 39 ( extbas.asm):00636 RTS 85DE 8149 ( extbas.asm):00637 L85DE CMPA #'I INSERT? 85E0 2713 ( extbas.asm):00638 BEQ L85F5 YES 85E2 8158 ( extbas.asm):00639 CMPA #'X EXTEND? 85E4 270D ( extbas.asm):00640 BEQ L85F3 YES 85E6 8148 ( extbas.asm):00641 CMPA #'H HACK? 85E8 265C ( extbas.asm):00642 BNE L8646 NO 85EA 6F84 ( extbas.asm):00643 CLR ,X TURN CURRENT BUFFER POINTER INTO END OF LINE FLAG 85EC 1F10 ( extbas.asm):00644 TFR X,D PUT CURRENT BUFFER POINTER IN ACCD 85EE 8302DE ( extbas.asm):00645 SUBD #LINBUF+2 SUBTRACT INITIAL POINTER POSITION 85F1 D7D7 ( extbas.asm):00646 STB VD7 SAVE NEW BUFFER LENGTH 85F3 8DBF ( extbas.asm):00647 L85F3 BSR L85B4 DISPLAY THE LINE ON THE SCREEN 85F5 BD8687 ( extbas.asm):00648 L85F5 JSR >L8687 GET A KEYSTROKE 85F8 810D ( extbas.asm):00649 CMPA #CR ENTER KEY? 85FA 278E ( extbas.asm):00650 BEQ L858A YES - INTERPRET ANOTHER COMMAND - PRINT LINE 85FC 811B ( extbas.asm):00651 CMPA #ESC ESCAPE? 85FE 2725 ( extbas.asm):00652 BEQ L8625 YES - RETURN TO COMMAND LEVEL - DON’T PRINT LINE 8600 8108 ( extbas.asm):00653 CMPA #BS BACK SPACE? 8602 2622 ( extbas.asm):00654 BNE L8626 NO 8604 8C02DD ( extbas.asm):00655 CMPX #LINBUF+1 COMPARE POINTER TO START OF BUFFER 8607 27EC ( extbas.asm):00656 BEQ L85F5 DO NOT ALLOW BS IF AT START 8609 8D45 ( extbas.asm):00657 BSR L8650 MOVE POINTER BACK ONE, BS TO SCREEN 860B 8DC4 ( extbas.asm):00658 BSR L85D1 REMOVE ONE CHARACTER FROM BUFFER 860D 20E6 ( extbas.asm):00659 BRA L85F5 GET INSERT SUB COMMAND 860F 8143 ( extbas.asm):00660 L860F CMPA #'C CHANGE? 8611 26CB ( extbas.asm):00661 BNE L85DE NO 8613 6D84 ( extbas.asm):00662 L8613 TST ,X CHECK CURRENT BUFFER CHARACTER 8615 270E ( extbas.asm):00663 BEQ L8625 BRANCH IF END OF LINE 8617 BD8687 ( extbas.asm):00664 JSR >L8687 GET A KEYSTROKE 861A 2502 ( extbas.asm):00665 BLO L861E BRANCH IF LEGITIMATE KEY 861C 20F5 ( extbas.asm):00666 BRA L8613 TRY AGAIN IF ILLEGAL KEY 861E A780 ( extbas.asm):00667 L861E STA ,X+ INSERT NEW CHARACTER INTO BUFFER 8620 8D37 ( extbas.asm):00668 BSR L8659 SEND NEW CHARACTER TO SCREEN 8622 5A ( extbas.asm):00669 DECB DECREMENT REPEAT PARAMETER 8623 26EE ( extbas.asm):00670 BNE L8613 BRANCH IF NOT DONE 8625 39 ( extbas.asm):00671 L8625 RTS 8626 D6D7 ( extbas.asm):00672 L8626 LDB VD7 GET LENGTH OF LINE 8628 C1F9 ( extbas.asm):00673 CMPB #LBUFMX-1 COMPARE TO MAXIMUM LENGTH 862A 2602 ( extbas.asm):00674 BNE L862E BRANCH IF NOT AT MAXIMUM 862C 20C7 ( extbas.asm):00675 BRA L85F5 IGNORE INPUT IF LINE AT MAXIMUM LENGTH 862E 3410 ( extbas.asm):00676 L862E PSHS X SAVE CURRENT BUFFER POINTER 8630 6D80 ( extbas.asm):00677 L8630 TST ,X+ * SCAN THE LINE UNTIL END OF 8632 26FC ( extbas.asm):00678 BNE L8630 * LINE (0) IS FOUND 8634 E682 ( extbas.asm):00679 L8634 LDB ,-X DECR TEMP LINE POINTER AND GET A CHARACTER 8636 E701 ( extbas.asm):00680 STB $01,X PUT CHARACTER BACK DOWN ONE SPOT 8638 ACE4 ( extbas.asm):00681 CMPX ,S HAVE WE REACHED STARTING POINT? 863A 26F8 ( extbas.asm):00682 BNE L8634 NO - KEEP GOING 863C 3262 ( extbas.asm):00683 LEAS $02,S PURGE BUFFER POINTER FROM STACK 863E A780 ( extbas.asm):00684 STA ,X+ INSERT NEW CHARACTER INTO THE LINE 8640 8D17 ( extbas.asm):00685 BSR L8659 SEND A CHARACTER TO CONSOLE OUT 8642 0CD7 ( extbas.asm):00686 INC VD7 ADD ONE TO BUFFER LENGTH 8644 20AF ( extbas.asm):00687 BRA L85F5 GET INSERT SUB COMMAND 8646 8108 ( extbas.asm):00688 L8646 CMPA #BS BACKSPACE? 8648 2612 ( extbas.asm):00689 BNE L865C NO 864A 8D04 ( extbas.asm):00690 L864A BSR L8650 MOVE POINTER BACK 1, SEND BS TO SCREEN 864C 5A ( extbas.asm):00691 DECB DECREMENT REPEAT PARAMETER 864D 26FB ( extbas.asm):00692 BNE L864A LOOP UNTIL DONE 864F 39 ( extbas.asm):00693 RTS 8650 8C02DD ( extbas.asm):00694 L8650 CMPX #LINBUF+1 COMPARE POINTER TO START OF BUFFER 8653 27D0 ( extbas.asm):00695 BEQ L8625 DO NOT ALLOW BS IF AT START 8655 301F ( extbas.asm):00696 LEAX $-01,X MOVE POINTER BACK ONE 8657 8608 ( extbas.asm):00697 LDA #BS BACK SPACE 8659 7EA282 ( extbas.asm):00698 L8659 JMP PUTCHR SEND TO CONSOLE OUT 865C 814B ( extbas.asm):00699 L865C CMPA #'K KILL? 865E 2705 ( extbas.asm):00700 BEQ L8665 YES 8660 8053 ( extbas.asm):00701 SUBA #'S SEARCH? 8662 2701 ( extbas.asm):00702 BEQ L8665 YES 8664 39 ( extbas.asm):00703 RTS 8665 3402 ( extbas.asm):00704 L8665 PSHS A SAVE KILL/SEARCH FLAG ON STACK 8667 8D1E ( extbas.asm):00705 BSR L8687 * GET A KEYSTROKE (TARGET CHARACTER) 8669 3402 ( extbas.asm):00706 PSHS A * AND SAVE IT ON STACK 866B A684 ( extbas.asm):00707 L866B LDA ,X = GET CURRENT BUFFER CHARACTER 866D 2716 ( extbas.asm):00708 BEQ L8685 = AND RETURN IF END OF LINE 866F 6D61 ( extbas.asm):00709 TST $01,S CHECK KILL/SEARCH FLAG 8671 2606 ( extbas.asm):00710 BNE L8679 BRANCH IF KILL 8673 8DE4 ( extbas.asm):00711 BSR L8659 SEND A CHARACTER TO CONSOLE OUT 8675 3001 ( extbas.asm):00712 LEAX $01,X INCREMENT BUFFER POINTER 8677 2003 ( extbas.asm):00713 BRA L867C CHECK NEXT INPUT CHARACTER 8679 BD85D1 ( extbas.asm):00714 L8679 JSR >L85D1 REMOVE ONE CHARACTER FROM BUFFER 867C A684 ( extbas.asm):00715 L867C LDA ,X GET CURRENT INPUT CHARACTER 867E A1E4 ( extbas.asm):00716 CMPA ,S COMPARE TO TARGET CHARACTER 8680 26E9 ( extbas.asm):00717 BNE L866B BRANCH IF NO MATCH 8682 5A ( extbas.asm):00718 DECB DECREMENT REPEAT PARAMETER 8683 26E6 ( extbas.asm):00719 BNE L866B BRANCH IF NOT DONE 8685 35A0 ( extbas.asm):00720 L8685 PULS Y,PC THE Y PULL WILL CLEAN UP THE STACK FOR THE 2 PSHS A ( extbas.asm):00721 * ( extbas.asm):00722 * GET A KEYSTRKE 8687 BDA171 ( extbas.asm):00723 L8687 JSR >LA171 CALL CONSOLE IN : DEV NBR=SCREEN 868A 817F ( extbas.asm):00724 CMPA #$7F GRAPHIC CHARACTER? 868C 24F9 ( extbas.asm):00725 BCC L8687 YES - GET ANOTHER CHAR 868E 815F ( extbas.asm):00726 CMPA #$5F SHIFT UP ARROW (QUIT INSERT) 8690 2602 ( extbas.asm):00727 BNE L8694 NO 8692 861B ( extbas.asm):00728 LDA #ESC REPLACE W/ESCAPE CODE 8694 810D ( extbas.asm):00729 L8694 CMPA #CR ENTER KEY 8696 270E ( extbas.asm):00730 BEQ L86A6 YES 8698 811B ( extbas.asm):00731 CMPA #ESC ESCAPE? 869A 270A ( extbas.asm):00732 BEQ L86A6 YES 869C 8108 ( extbas.asm):00733 CMPA #BS BACKSPACE? 869E 2706 ( extbas.asm):00734 BEQ L86A6 YES 86A0 8120 ( extbas.asm):00735 CMPA #SPACE SPACE 86A2 25E3 ( extbas.asm):00736 BLO L8687 GET ANOTHER CHAR IF CONTROL CHAR 86A4 1A01 ( extbas.asm):00737 ORCC #$01 SET CARRY 86A6 39 ( extbas.asm):00738 L86A6 RTS ( extbas.asm):00739 * TRON 86A7 86 ( extbas.asm):00740 TRON FCB SKP1LD SKIP ONE BYTE AND LDA #$4F ( extbas.asm):00741 * TROFF 86A8 4F ( extbas.asm):00742 TROFF CLRA TROFF FLAG 86A9 97AF ( extbas.asm):00743 STA TRCFLG TRON/TROFF FLAG:0=TROFF, <> 0=TRON 86AB 39 ( extbas.asm):00744 RTS ( extbas.asm):00745 * POS 86AC 966F ( extbas.asm):00746 POS LDA DEVNUM GET DEVICE NUMBER 86AE 3402 ( extbas.asm):00747 PSHS A SAVE IT ON STACK 86B0 BDA5AE ( extbas.asm):00748 JSR >LA5AE GET DEVICE NUMBER 86B3 BDA406 ( extbas.asm):00749 JSR >LA406 FILE STATUS CHECK 86B6 BDA35F ( extbas.asm):00750 JSR >LA35F SET UP TAB FIELD WIDTH 86B9 D66C ( extbas.asm):00751 LDB DEVPOS GET PRINT POSITION 86BB 7EA5E4 ( extbas.asm):00752 JMP >LA5E4 CONVERT PRINT POSITION TO FLOATING POINT ( extbas.asm):00753 * VARPTR 86BE BDB26A ( extbas.asm):00754 VARPTRTOK JSR >LB26A SYNTAX CHECK FOR ‘(‘ 86C1 DC1F ( extbas.asm):00755 LDD ARYEND GET ADDR OF END OF ARRAYS 86C3 3406 ( extbas.asm):00756 PSHS B,A SAVE IT ON STACK 86C5 BDB357 ( extbas.asm):00757 JSR >LB357 GET VARIABLE DESCRIPTOR 86C8 BDB267 ( extbas.asm):00758 JSR >LB267 SYNTAX CHECK FOR ‘)‘ 86CB 3506 ( extbas.asm):00759 PULS A,B GET END OF ARRAYS ADDR BACK 86CD 1E10 ( extbas.asm):00760 EXG X,D SWAP END OF ARRAYS AND VARIABLE DESCRIPTOR 86CF 9C1F ( extbas.asm):00761 CMPX ARYEND COMPARE TO NEW END OF ARRAYS 86D1 2651 ( extbas.asm):00762 BNE L8724 ‘FC’ ERROR IF VARIABLE WAS NOT DEFINED PRIOR TO CALLING VARPTR 86D3 7EB4F4 ( extbas.asm):00763 JMP GIVABF CONVERT VARIABLE DESCRIPTOR INTO A FP NUMBER ( extbas.asm):00764 * MID$(OLDSTRING,POSITION,LENGTH)=REPLACEMENT 86D6 9D9F ( extbas.asm):00765 L86D6 JSR GETNCH GET INPUT CHAR FROM BASIC 86D8 BDB26A ( extbas.asm):00766 JSR >LB26A SYNTAX CHECK FOR ‘(‘ 86DB BDB357 ( extbas.asm):00767 JSR >LB357 * GET VARIABLE DESCRIPTOR ADDRESS AND 86DE 3410 ( extbas.asm):00768 PSHS X * SAVE IT ON THE STACK 86E0 EC02 ( extbas.asm):00769 LDD $02,X POINT ACCD TO START OF OLDSTRING 86E2 109321 ( extbas.asm):00770 CMPD FRETOP COMPARE TO START OF CLEARED SPACE 86E5 2304 ( extbas.asm):00771 BLS L86EB BRANCH IF <= 86E7 9327 ( extbas.asm):00772 SUBD MEMSIZ SUBTRACT OUT TOP OF CLEARED SPACE 86E9 2312 ( extbas.asm):00773 BLS L86FD BRANCH IF STRING IN STRING SPACE 86EB E684 ( extbas.asm):00774 L86EB LDB ,X GET LENGTH OF OLDSTRING 86ED BDB56D ( extbas.asm):00775 JSR >LB56D RESERVE ACCB BYTES IN STRING SPACE 86F0 3410 ( extbas.asm):00776 PSHS X SAVE RESERVED SPACE STRING ADDRESS ON STACK 86F2 AE62 ( extbas.asm):00777 LDX $02,S POINT X TO OLDSTRING DESCRIPTOR 86F4 BDB643 ( extbas.asm):00778 JSR >LB643 MOVE OLDSTRING INTO STRING SPACE 86F7 3550 ( extbas.asm):00779 PULS X,U * GET OLDSTRING DESCRIPTOR ADDRESS AND RESERVED STRING 86F9 AF42 ( extbas.asm):00780 STX $02,U * ADDRESS AND SAVE RESERVED ADDRESS AS OLDSTRING ADDRESS 86FB 3440 ( extbas.asm):00781 PSHS U SAVE OLDSTRING DESCRIPTOR ADDRESS 86FD BDB738 ( extbas.asm):00782 L86FD JSR >LB738 SYNTAX CHECK FOR COMMA AND EVALUATE LENGTH EXPRESSION 8700 3404 ( extbas.asm):00783 PSHS B SAVE POSITION PARAMETER ON STACK 8702 5D ( extbas.asm):00784 TSTB * CHECK POSITION PARAMETER AND BRANCH 8703 271F ( extbas.asm):00785 BEQ L8724 * IF START OF STRING 8705 C6FF ( extbas.asm):00786 LDB #$FF DEFAULT REPLACEMENT LENGTH = $FF 8707 8129 ( extbas.asm):00787 CMPA #') * CHECK FOR END OF MID$ STATEMENT AND 8709 2703 ( extbas.asm):00788 BEQ L870E * BRANCH IF AT END OF STATEMENT 870B BDB738 ( extbas.asm):00789 JSR >LB738 SYNTAX CHECK FOR COMMA AND EVALUATE LENGTH EXPRESSION 870E 3404 ( extbas.asm):00790 L870E PSHS B SAVE LENGTH PARAMETER ON STACK 8710 BDB267 ( extbas.asm):00791 JSR >LB267 SYNTAX CHECK FOR ‘)‘ 8713 C6B3 ( extbas.asm):00792 LDB #$B3 TOKEN FOR = 8715 BDB26F ( extbas.asm):00793 JSR >LB26F SYNTAX CHECK FOR “=‘ 8718 8D2E ( extbas.asm):00794 BSR L8748 EVALUATE REPLACEMENT STRING 871A 1F13 ( extbas.asm):00795 TFR X,U SAVE REPLACEMENT STRING ADDRESS IN U 871C AE62 ( extbas.asm):00796 LDX $02,S POINT X TO OLOSTRING DESCRIPTOR ADDRESS 871E A684 ( extbas.asm):00797 LDA ,X GET LENGTH OF OLDSTRING 8720 A061 ( extbas.asm):00798 SUBA $01,S SUBTRACT POSITION PARAMETER 8722 2403 ( extbas.asm):00799 BCC L8727 INSERT REPLACEMENT STRING INTO OLDSTRING 8724 7EB44A ( extbas.asm):00800 L8724 JMP >LB44A ‘FC’ ERROR IF POSITION > LENGTH OF OLDSTRING 8727 4C ( extbas.asm):00801 L8727 INCA * NOW ACCA = NUMBER OF CHARACTERS TO THE RIGHT ( extbas.asm):00802 * * (INCLUSIVE) OF THE POSITION PARAMETER 8728 A1E4 ( extbas.asm):00803 CMPA ,S COMPARE TO LENGTH PARAMETER 872A 2402 ( extbas.asm):00804 BCC L872E BRANCH IF NEW STRING WILL FIT IN OLDSTRING 872C A7E4 ( extbas.asm):00805 STA ,S IF NOT, USE AS MUCH OF LENGTH PARAMETER AS WILL FIT 872E A661 ( extbas.asm):00806 L872E LDA $01,S GET POSITION PARAMETER 8730 1E89 ( extbas.asm):00807 EXG A,B ACCA=LENGTH OF REPL STRING, ACCB=POSITION PARAMETER 8732 AE02 ( extbas.asm):00808 LDX $02,X POINT X TO OLDSTRING ADDRESS 8734 5A ( extbas.asm):00809 DECB * BASIC’S POSITION PARAMETER STARTS AT 1; THIS ROUTINE ( extbas.asm):00810 * * WANTS IT TO START AT ZERO 8735 3A ( extbas.asm):00811 ABX POINT X TO POSITION IN OLDSTRING WHERE THE REPLACEMENT WILL GO 8736 4D ( extbas.asm):00812 TSTA * IF THE LENGTH OF THE REPLACEMENT STRING IS ZERO 8737 270D ( extbas.asm):00813 BEQ L8746 * THEN RETURN 8739 A1E4 ( extbas.asm):00814 CMPA ,S = IF THE LENGTH OF REPLACEMENT STRING IS <= THE 873B 2302 ( extbas.asm):00815 BLS L873F ADJUSTED LENGTH PARAMETER, THEN BRANCH 873D A6E4 ( extbas.asm):00816 LDA ,S OTHERWISE USE AS MUCH ROOM AS IS AVAILABLE 873F 1F89 ( extbas.asm):00817 L873F TFR A,B SAVE NUMBER OF BYTES TO MOVE IN ACCB 8741 1E31 ( extbas.asm):00818 EXG U,X SWAP SOURCE AND DESTINATION POINTERS 8743 BDA59A ( extbas.asm):00819 JSR >LA59A MOVE (B) BYTES FROM (X) TO (U) 8746 3596 ( extbas.asm):00820 L8746 PULS A,B,X,PC CLEAN UP THE STACK AND RETURN 8748 BDB156 ( extbas.asm):00821 L8748 JSR >LB156 EVALUATE EXPRESSION 874B 7EB654 ( extbas.asm):00822 JMP >LB654 *‘TM’ ERROR IF NUMERIC; RETURN WITH X POINTING ( extbas.asm):00823 * *TO STRING, ACCB = LENGTH ( extbas.asm):00824 * STRING 874E BDB26A ( extbas.asm):00825 STRING JSR >LB26A SYNTAX CHECK FOR ‘(’ 8751 BDB70B ( extbas.asm):00826 JSR EVALEXPB EVALUATE EXPRESSION; ERROR IF > 255 8754 3404 ( extbas.asm):00827 PSHS B SAVE LENGTH OF STRING 8756 BDB26D ( extbas.asm):00828 JSR SYNCOMMA SYNTAX CHECK FOR COMMA 8759 BDB156 ( extbas.asm):00829 JSR >LB156 EVALUATE EXPRESSION 875C BDB267 ( extbas.asm):00830 JSR >LB267 SYNTAX CHECK FOR ‘)‘ 875F 9606 ( extbas.asm):00831 LDA VALTYP GET VARIABLE TYPE 8761 2605 ( extbas.asm):00832 BNE L8768 BRANCH IF STRING 8763 BDB70E ( extbas.asm):00833 JSR >LB70E CONVERT FPA0 INTO AN INTEGER IN ACCB 8766 2003 ( extbas.asm):00834 BRA L876B SAVE THE STRING IN STRING SPACE 8768 BDB6A4 ( extbas.asm):00835 L8768 JSR >LB6A4 GET FIRST BYTE OF STRING 876B 3404 ( extbas.asm):00836 L876B PSHS B SAVE FIRST BYTE OF EXPRESSION 876D E661 ( extbas.asm):00837 LDB $01,S GET LENGTH OF STRING 876F BDB50F ( extbas.asm):00838 JSR >LB50F RESERVE ACCB BYTES IN STRING SPACE 8772 3506 ( extbas.asm):00839 PULS A,B GET LENGTH OF STRING AND CHARACTER 8774 2705 ( extbas.asm):00840 BEQ L877B BRANCH IF NULL STRING 8776 A780 ( extbas.asm):00841 L8776 STA ,X+ SAVE A CHARACTER IN STRING SPACE 8778 5A ( extbas.asm):00842 DECB DECREMENT LENGTH 8779 26FB ( extbas.asm):00843 BNE L8776 BRANCH IF NOT DONE 877B 7EB69B ( extbas.asm):00844 L877B JMP >LB69B PUT STRING DESCRIPTOR ONTO STRING STACK ( extbas.asm):00845 * INSTR 877E BDB26A ( extbas.asm):00846 INSTR JSR >LB26A SYNTAX CHECK FOR ‘(‘ 8781 BDB156 ( extbas.asm):00847 JSR >LB156 EVALUATE EXPRESSION 8784 C601 ( extbas.asm):00848 LDB #$01 DEFAULT POSITION = 1 (SEARCH START) 8786 3404 ( extbas.asm):00849 PSHS B SAVE START 8788 9606 ( extbas.asm):00850 LDA VALTYP GET VARIABLE TYPE 878A 2610 ( extbas.asm):00851 BNE L879C BRANCH IF STRING 878C BDB70E ( extbas.asm):00852 JSR >LB70E CONVERT FPA0 TO INTEGER IN ACCB 878F E7E4 ( extbas.asm):00853 STB ,S SAVE START SEARCH VALUE 8791 2791 ( extbas.asm):00854 BEQ L8724 BRANCH IF START SEARCH AT ZERO 8793 BDB26D ( extbas.asm):00855 JSR SYNCOMMA SYNTAX CHECK FOR COMMA 8796 BDB156 ( extbas.asm):00856 JSR >LB156 EVALUATE EXPRESSION - SEARCH STRING 8799 BDB146 ( extbas.asm):00857 JSR >LB146 ‘TM’ ERROR IF NUMERIC 879C 9E52 ( extbas.asm):00858 L879C LDX FPA0+2 SEARCH STRING DESCRIPTOR ADDRESS 879E 3410 ( extbas.asm):00859 PSHS X SAVE ON THE STACK 87A0 BDB26D ( extbas.asm):00860 JSR SYNCOMMA SYNTAX CHECK FOR COMMA 87A3 BD8748 ( extbas.asm):00861 JSR >L8748 EVALUATE TARGET STRING EXPRESSION 87A6 3414 ( extbas.asm):00862 PSHS X,B SAVE ADDRESS AND LENGTH ON STACK 87A8 BDB267 ( extbas.asm):00863 JSR >LB267 SYNTAX CHECK FOR ')' 87AB AE63 ( extbas.asm):00864 LDX $03,S * LOAD X WITH SEARCH STRING DESCRIPTOR ADDRESS 87AD BDB659 ( extbas.asm):00865 JSR >LB659 * AND GET THE LENGTH ANDADDRESS OF SEARCH STRING 87B0 3404 ( extbas.asm):00866 PSHS B SAVE LENGTH ON STACK ( extbas.asm):00867 * ( extbas.asm):00868 * AT THIS POINT THE STACK HAS THE FOLLOWING INFORMATION ( extbas.asm):00869 * ON IT: 0,S-SEARCH LENGTH; 1,S-TARGET LENGTH; 2 3,S-TARGET ( extbas.asm):00870 * ADDRESS; 4 5,S-SEARCH DESCRIPTOR ADDRESS; 6,S-SEARCH POSITION 87B2 E166 ( extbas.asm):00871 CMPB $06,S COMPARE LENGTH OF SEARCH STRING TO START 87B4 2523 ( extbas.asm):00872 BLO L87D9 POSITION; RETURN 0 IF LENGTH < START 87B6 A661 ( extbas.asm):00873 LDA $01,S GET LENGTH OF TARGET STRING 87B8 271C ( extbas.asm):00874 BEQ L87D6 BRANCH IF TARGET STRING = NULL 87BA E666 ( extbas.asm):00875 LDB $06,S GET START POSITION 87BC 5A ( extbas.asm):00876 DECB MOVE BACK ONE 87BD 3A ( extbas.asm):00877 ABX POINT X TO POSITION IN SEARCH STRING WHERE SEARCHING WILL START 87BE 3184 ( extbas.asm):00878 L87BE LEAY ,X POINT Y TO SEARCH POSITION 87C0 EE62 ( extbas.asm):00879 LDU $02,S POINT U TO START OF TARGET 87C2 E661 ( extbas.asm):00880 LDB $01,S LOAD ACCB WITH LENGTH OF TARGET 87C4 A6E4 ( extbas.asm):00881 LDA ,S LOAD ACCA WITH LENGTH OF SEARCH 87C6 A066 ( extbas.asm):00882 SUBA $06,S SUBTRACT SEARCH POSITION FROM SEARCH LENGTH 87C8 4C ( extbas.asm):00883 INCA ADD ONE 87C9 A161 ( extbas.asm):00884 CMPA $01,S COMPARE TO TARGET LENGTH 87CB 250C ( extbas.asm):00885 BLO L87D9 RETURN 0 IF TARGET LENGTH > WHAT’S LEFT OF SEARCH STRING 87CD A680 ( extbas.asm):00886 L87CD LDA ,X+ GET A CHARACTER FROM SEARCH STRING 87CF A1C0 ( extbas.asm):00887 CMPA ,U+ COMPARE IT TO TARGET STRING 87D1 260C ( extbas.asm):00888 BNE L87DF BRANCH IF NO MATCH 87D3 5A ( extbas.asm):00889 DECB DECREMENT TARGET LENGTH 87D4 26F7 ( extbas.asm):00890 BNE L87CD CHECK ANOTHER CHARACTER 87D6 E666 ( extbas.asm):00891 L87D6 LDB $06,S GET MATCH POSITION 87D8 21 ( extbas.asm):00892 L87D8 FCB SKP1 SKIP NEXT BYTE 87D9 5F ( extbas.asm):00893 L87D9 CLRB MATCH ADDRESS = 0 87DA 3267 ( extbas.asm):00894 LEAS $07,S CLEAN UP THE STACK 87DC 7EB4F3 ( extbas.asm):00895 JMP >LB4F3 CONVERT ACCB TO FP NUMBER 87DF 6C66 ( extbas.asm):00896 L87DF INC $06,S INCREMENT SEARCH POSITION 87E1 3021 ( extbas.asm):00897 LEAX $01,Y MOVE X TO NEXT SEARCH POSITION 87E3 20D9 ( extbas.asm):00898 BRA L87BE KEEP LOOKING FOR A MATCH ( extbas.asm):00899 * ASCII TO FLOATING POINT CONVERSION RAM HOOK 87E5 8126 ( extbas.asm):00900 XVEC19 CMPA #'& * 87E7 265C ( extbas.asm):00901 L87E7 BNE L8845 * RETURN IF NOT HEX OR OCTAL VARIABLE 87E9 3262 ( extbas.asm):00902 LEAS $02,S PURGE RETURN ADDRESS FROM STACK ( extbas.asm):00903 * PROCESS A VARIABLE PRECEEDED BY A ‘&‘ (&H,&O) 87EB 0F52 ( extbas.asm):00904 L87EB CLR FPA0+2 * CLEAR BOTTOM TWO 87ED 0F53 ( extbas.asm):00905 CLR FPA0+3 * BYTES OF FPA0 87EF 8E0052 ( extbas.asm):00906 LDX #FPA0+2 BYTES 2,3 OF FPA0 = (TEMPORARY ACCUMULATOR) 87F2 9D9F ( extbas.asm):00907 JSR GETNCH GET A CHARACTER FROM BASIC 87F4 814F ( extbas.asm):00908 CMPA #'O OCTAL VALUE? 87F6 2712 ( extbas.asm):00909 BEQ L880A YES 87F8 8148 ( extbas.asm):00910 CMPA #'H HEX VALUE? 87FA 2723 ( extbas.asm):00911 BEQ L881F YES 87FC 9DA5 ( extbas.asm):00912 JSR GETCCH GET CURRENT INPUT CHARACTER 87FE 200C ( extbas.asm):00913 BRA L880C DEFAULT TO OCTAL (&O) 8800 8138 ( extbas.asm):00914 L8800 CMPA #'8 * 8802 10222A71 ( extbas.asm):00915 LBHI LB277 * ‘SYNTAX’ ERROR IF 8806 C603 ( extbas.asm):00916 LDB #$03 BASE 8 MULTIPLIER 8808 8D2A ( extbas.asm):00917 BSR L8834 ADD DIGIT TO TEMPORARY ACCUMULATOR ( extbas.asm):00918 * EVALUATE AN &O VARIABLE 880A 9D9F ( extbas.asm):00919 L880A JSR GETNCH GET A CHARACTER FROM BASIC 880C 25F2 ( extbas.asm):00920 L880C BLO L8800 BRANCH IF NUMERIC 880E 0F50 ( extbas.asm):00921 L880E CLR FPA0 * CLEAR 2 HIGH ORDER 8810 0F51 ( extbas.asm):00922 CLR FPA0+1 * BYTES OF FPA0 8812 0F06 ( extbas.asm):00923 CLR VALTYP SET VARXABLE TYPE TO NUMERIC 8814 0F63 ( extbas.asm):00924 CLR FPSBYT ZERO OUT SUB BYTE OF FPA0 8816 0F54 ( extbas.asm):00925 CLR FP0SGN ZERO OUT MANTISSA SIGN OF FPA0 8818 C6A0 ( extbas.asm):00926 LDB #$A0 * SET EXPONENT OF FPA0 881A D74F ( extbas.asm):00927 STB FP0EXP * 881C 7EBA1C ( extbas.asm):00928 JMP >LBA1C GO NORMALIZE FPA0 ( extbas.asm):00929 * EVALUATE AN &H VARIABLE 881F 9D9F ( extbas.asm):00930 L881F JSR GETNCH GET A CHARACTER FROM BASIC 8821 250B ( extbas.asm):00931 BLO L882E BRANCH IF NUMERIC 8823 BDB3A2 ( extbas.asm):00932 JSR >LB3A2 SET CARRY IF NOT ALPHA 8826 25E6 ( extbas.asm):00933 L8826 BLO L880E BRANCH IF NOT ALPHA OR NUMERIC 8828 8147 ( extbas.asm):00934 CMPA #'G CHECK FOR LETTERS A-F 882A 24E2 ( extbas.asm):00935 BCC L880E BRANCH IF >= G (ILLEGAL HEX LETTER) 882C 8007 ( extbas.asm):00936 SUBA #'A-('9+1) SUBTRACT ASCII DIFFERENCE BETWEEN A AND 9 882E C604 ( extbas.asm):00937 L882E LDB #$04 BASE 16 DIGIT MULTIPLIER = 2**4 8830 8D02 ( extbas.asm):00938 BSR L8834 ADD DIGIT TO TEMPORARY ACCUMULATOR 8832 20EB ( extbas.asm):00939 BRA L881F KEEP EVALUATING VARIABLE 8834 6801 ( extbas.asm):00940 L8834 ASL $01,X * MULTIPLY TEMPORARY 8836 6984 ( extbas.asm):00941 ROL ,X * ACCUMULATOR BY TWO 8838 10253256 ( extbas.asm):00942 LBCS LBA92 ‘OV' OVERFLOW ERROR 883C 5A ( extbas.asm):00943 DECB DECREMENT SHIFT COUNTER 883D 26F5 ( extbas.asm):00944 BNE L8834 MULTIPLY TEMPORARY ACCUMULATOR AGAIN 883F 8030 ( extbas.asm):00945 L883F SUBA #'0 MASK OFF ASCII 8841 AB01 ( extbas.asm):00946 ADDA $01,X * ADD DIGIT TO TEMPORARY 8843 A701 ( extbas.asm):00947 STA $01,X * ACCUMULATOR AND SAVE IT 8845 39 ( extbas.asm):00948 L8845 RTS ( extbas.asm):00949 * EXPRESSION EVALUATION RAM HOOK 8846 3540 ( extbas.asm):00950 XVEC15 PULS U PULL RETURN ADDRESS AND SAVE IN U REGISTER 8848 0F06 ( extbas.asm):00951 CLR VALTYP SET VARIABLE TYPE TO NUMERIC 884A 9EA6 ( extbas.asm):00952 LDX CHARAD CURRENT INPUT POINTER TO X 884C 9D9F ( extbas.asm):00953 JSR GETNCH GET CHARACTER FROM BASIC 884E 8126 ( extbas.asm):00954 CMPA #'& HEX AND OCTAL VARIABLES ARE PRECEEDED BY & 8850 2799 ( extbas.asm):00955 BEQ L87EB PROCESS A ‘&‘ VARIABLE 8852 81CC ( extbas.asm):00956 CMPA #$CC TOKEN FOR FN 8854 275E ( extbas.asm):00957 BEQ L88B4 PROCESS FN CALL 8856 81FF ( extbas.asm):00958 CMPA #$FF CHECK FOR SECONDARY TOKEN 8858 2608 ( extbas.asm):00959 BNE L8862 NOT SECONDARY 885A 9D9F ( extbas.asm):00960 JSR GETNCH GET CHARACTER FROM BASIC 885C 8183 ( extbas.asm):00961 CMPA #$83 TOKEN FOR USR 885E 102700CA ( extbas.asm):00962 LBEQ L892C PROCESS USR CALL 8862 9FA6 ( extbas.asm):00963 L8862 STX CHARAD RESTORE BASIC’S INPUT POINTER 8864 6EC4 ( extbas.asm):00964 JMP ,U RETURN TO CALLING ROUTINE 8866 9E68 ( extbas.asm):00965 L8866 LDX CURLIN GET CURRENT LINE NUMBER 8868 3001 ( extbas.asm):00966 LEAX $01,X IN DIRECT MODE? 886A 26D9 ( extbas.asm):00967 L886A BNE L8845 RETURN IF NOT IN DIRECT MODE 886C C616 ( extbas.asm):00968 LDB #2*11 ‘ILLEGAL DIRECT STATEMENT’ ERROR 886E 7EAC46 ( extbas.asm):00969 L886E JMP >LAC46 PROCESS ERROR ( extbas.asm):00970 * DEF 8871 AE9F00A6 ( extbas.asm):00971 DEF LDX [CHARAD] GET TWO INPUT CHARS 8875 8CFF83 ( extbas.asm):00972 CMPX #$FF83 TOKEN FOR USR 8878 10270093 ( extbas.asm):00973 LBEQ L890F BRANCH IF DEF USR 887C 8D23 ( extbas.asm):00974 BSR L88A1 GET DESCRIPTOR ADDRESS FOR FN VARIABLE NAME 887E 8DE6 ( extbas.asm):00975 BSR L8866 DON’T ALLOW DEF FN IF IN DIRECT MODE 8880 BDB26A ( extbas.asm):00976 JSR >LB26A SYNTAX CHECK FOR ‘(‘ 8883 C680 ( extbas.asm):00977 LDB #$80 * GET THE FLAG TO INDICATE ARRAY VARIABLE SEARCH DISABLE 8885 D708 ( extbas.asm):00978 STB ARYDIS * AND SAVE IT IN THE ARRAY DISABLE FLAG 8887 BDB357 ( extbas.asm):00979 JSR >LB357 GET VARIABLE DESCRIPTOR 888A 8D25 ( extbas.asm):00980 BSR L88B1 ‘TM’ ERROR IF STRING 888C BDB267 ( extbas.asm):00981 JSR >LB267 SYNTAX CHECK FOR ‘)‘ 888F C6B3 ( extbas.asm):00982 LDB #$B3 TOKEN FOR ‘=‘ 8891 BDB26F ( extbas.asm):00983 JSR >LB26F DO A SYNTAX CHECK FOR = 8894 9E4B ( extbas.asm):00984 LDX V4B GET THE ADDRESS OF THE FN NAME DESCRIPTOR 8896 DCA6 ( extbas.asm):00985 LDD CHARAD * GET THE CURRENT INPUT POINTER ADDRESS AND 8898 ED84 ( extbas.asm):00986 STD ,X * SAVE IT IN FIRST 2 BYTES OF THE DESCRIPTOR 889A DC39 ( extbas.asm):00987 LDD VARPTR = GET THE DESCRIPTOR ADDRESS OF THE ARGUMENT 889C ED02 ( extbas.asm):00988 STD $02,X = VARIABLE AND SAVE IT IN THE DESCRIPTOR OF THE FN NAME 889E 7EAEE0 ( extbas.asm):00989 JMP DATA MOVE INPUT POINTER TO END OF LINE OR SUBLINE 88A1 C6CC ( extbas.asm):00990 L88A1 LDB #$CC TOKEN FOR FN 88A3 BDB26F ( extbas.asm):00991 JSR >LB26F DO A SYNTAX CHECK FOR FN 88A6 C680 ( extbas.asm):00992 LDB #$80 * GET THE FLAG TO INDICATE ARRAY VARIABLE SEARCH DISABLE FLAG 88A8 D708 ( extbas.asm):00993 STB ARYDIS * AND SAVE IT IN ARRAY VARIABLE FLAG 88AA 8A80 ( extbas.asm):00994 ORA #$80 SET BIT 7 OF CURRENT INPUT CHARACTER TO INDICATE AN FN VARIABLE 88AC BDB35C ( extbas.asm):00995 JSR >LB35C * GET THE DESCRIPTOR ADDRESS OF THIS 88AF 9F4B ( extbas.asm):00996 STX V4B * VARIABLE AND SAVE IT IN V4B 88B1 7EB143 ( extbas.asm):00997 L88B1 JMP >LB143 ‘TM’ ERROR IF STRING VARIABLE ( extbas.asm):00998 * EVALUATE AN FN CALL 88B4 8DEB ( extbas.asm):00999 L88B4 BSR L88A1 * GET THE DESCRIPTOR OF THE FN NAME 88B6 3410 ( extbas.asm):01000 PSHS X * VARIABLE AND SAVE IT ON THE STACK 88B8 BDB262 ( extbas.asm):01001 JSR >LB262 SYNTAX CHECK FOR ‘(‘ & EVALUATE EXPR 88BB 8DF4 ( extbas.asm):01002 BSR L88B1 ‘TM’ ERROR IF STRING VARIABLE 88BD 3540 ( extbas.asm):01003 PULS U POINT U TO FN NAME DESCRIPTOR 88BF C632 ( extbas.asm):01004 LDB #2*25 ‘UNDEFINED FUNCTION CALL’ ERROR 88C1 AE42 ( extbas.asm):01005 LDX $02,U POINT X TO ARGUMENT VARIABLE DESCRIPTOR 88C3 27A9 ( extbas.asm):01006 BEQ L886E BRANCH TO ERROR HANDLER 88C5 109EA6 ( extbas.asm):01007 LDY CHARAD SAVE CURRENT INPUT POINTER IN Y 88C8 EEC4 ( extbas.asm):01008 LDU ,U * POINT U TO START OF FN FORMULA AND 88CA DFA6 ( extbas.asm):01009 STU CHARAD * SAVE IT IN INPUT POINTER 88CC A604 ( extbas.asm):01010 LDA $04,X = GET FP VALUE OF 88CE 3402 ( extbas.asm):01011 PSHS A = ARGUMENT VARIABLE, CURRENT INPUT 88D0 EC84 ( extbas.asm):01012 LDD ,X = POINTER, AND ADDRESS OF START 88D2 EE02 ( extbas.asm):01013 LDU $02,X = OF FN FORMULA AND SAVE 88D4 3476 ( extbas.asm):01014 PSHS U,Y,X,B,A = THEM ON THE STACK 88D6 BDBC35 ( extbas.asm):01015 JSR >LBC35 PACK FPA0 AND SAVE IT IN (X) 88D9 BDB141 ( extbas.asm):01016 L88D9 JSR >LB141 EVALUATE FN EXPRESSION 88DC 3576 ( extbas.asm):01017 PULS A,B,X,Y,U RESTORE REGISTERS 88DE ED84 ( extbas.asm):01018 STD ,X * GET THE FP 88E0 EF02 ( extbas.asm):01019 STU $02,X * VALUE OF THE ARGUMENT 88E2 3502 ( extbas.asm):01020 PULS A * VARIABLE OFF OF THE 88E4 A704 ( extbas.asm):01021 STA $04,X * STACK AND RE-SAVE IT 88E6 9DA5 ( extbas.asm):01022 JSR GETCCH GET FINAL CHARACTER OF THE FN FORMULA 88E8 1026298B ( extbas.asm):01023 LBNE LB277 ‘SYNTAX’ ERROR IF NOT END OF LINE 88EC 109FA6 ( extbas.asm):01024 STY CHARAD RESTORE INPUT POINTER 88EF 39 ( extbas.asm):01025 L88EF RTS ( extbas.asm):01026 * ERROR DRIVER RAM HOOK 88F0 C132 ( extbas.asm):01027 XVEC17 CMPB #2*25 CHECK FOR EXBAS ERROR NUMBER 88F2 25FB ( extbas.asm):01028 BLO L88EF BRANCH IF < EXBAS ERROR 88F4 BDA7E9 ( extbas.asm):01029 JSR >LA7E9 TURN CASSETTE MOTOR OFF 88F7 BDA974 ( extbas.asm):01030 JSR >LA974 DISABLE ANALOG MULTIPLEXER 88FA BDAD33 ( extbas.asm):01031 JSR >LAD33 DO PART OF A NEW 88FD 0F6F ( extbas.asm):01032 CLR DEVNUM SET DEVICE NUMBER TO SCREEN 88FF BDB95C ( extbas.asm):01033 JSR >LB95C MOVE CURSOR TO START OF NEXT LINE 8902 BDB9AF ( extbas.asm):01034 JSR >LB9AF SEND A ‘?‘ TO CONSOLE OUT 8905 8E88D9 ( extbas.asm):01035 LDX #L890B-25*2 POINT X TO EXBAS ERRORS 8908 7EAC60 ( extbas.asm):01036 JMP >LAC60 PROCESS ERROR ( extbas.asm):01037 * ADDITIONAL ERROR MESSAGES ADDED BY EXTENDED BASIC 890B 5546 ( extbas.asm):01038 L890B FCC 'UF' 25 UNDEFINED FUNCTION (FN) CALL 890D 4E45 ( extbas.asm):01039 L890D FCC 'NE' 26 FILE NOT FOUND ( extbas.asm):01040 * DEF USR 890F 9D9F ( extbas.asm):01041 L890F JSR GETNCH SKIP PAST SECOND BYTE OF DEF USR TOKEN 8911 8D09 ( extbas.asm):01042 BSR L891C GET FN NUMBER 8913 3410 ( extbas.asm):01043 PSHS X SAVE FN EXEC ADDRESS STORAGE LOC 8915 8D2D ( extbas.asm):01044 BSR L8944 CALCULATE EXEC ADDRESS 8917 3540 ( extbas.asm):01045 PULS U GET FN EXEC ADDRESS STORAGE LOC 8919 AFC4 ( extbas.asm):01046 STX ,U SAVE EXEC ADDRESS 891B 39 ( extbas.asm):01047 RTS 891C 5F ( extbas.asm):01048 L891C CLRB DEFAULT TO USR0 IF NO ARGUMENT 891D 9D9F ( extbas.asm):01049 JSR GETNCH GET A CHARACTER FROM BASIC 891F 2406 ( extbas.asm):01050 BCC L8927 BRANCH IF NOT NUMERIC 8921 8030 ( extbas.asm):01051 SUBA #'0 MASK OFF ASCII 8923 1F89 ( extbas.asm):01052 TFR A,B SAVE USR NUMBER IN ACCB 8925 9D9F ( extbas.asm):01053 JSR GETNCH GET A CHARACTER FROM BASIC 8927 9EB0 ( extbas.asm):01054 L8927 LDX USRADR GET ADDRESS OF STORAGE LOCs FOR USR ADDRESS 8929 58 ( extbas.asm):01055 ASLB X2 - 2 BYTES/USR ADDRESS 892A 3A ( extbas.asm):01056 ABX ADD OFFSET TO START ADDRESS OF STORAGE LOCs 892B 39 ( extbas.asm):01057 RTS ( extbas.asm):01058 * PROCESS A USR CALL 892C 8DEE ( extbas.asm):01059 L892C BSR L891C GET STORAGE LOC OF EXEC ADDRESS FOR USR N 892E AE84 ( extbas.asm):01060 LDX ,X * GET EXEC ADDRESS AND 8930 3410 ( extbas.asm):01061 PSHS X * PUSH IT ONTO STACK 8932 BDB262 ( extbas.asm):01062 JSR >LB262 SYNTAX CHECK FOR ‘(‘ & EVALUATE EXPR 8935 8E004F ( extbas.asm):01063 LDX #FP0EXP POINT X TO FPA0 8938 9606 ( extbas.asm):01064 LDA VALTYP GET VARIABLE TYPE 893A 2707 ( extbas.asm):01065 BEQ L8943 BRANCH IF NUMERIC, STRING IF <> 0 893C BDB657 ( extbas.asm):01066 JSR >LB657 GET LENGTH & ADDRESS OF STRING VARIABLE 893F 9E52 ( extbas.asm):01067 LDX FPA0+2 GET POINTER TO STRING DESCRIPTOR 8941 9606 ( extbas.asm):01068 LDA VALTYP GET VARIABLE TYPE 8943 39 ( extbas.asm):01069 L8943 RTS JUMP TO USR ROUTINE (PSHS X ABOVE) 8944 C6B3 ( extbas.asm):01070 L8944 LDB #$B3 TOKEN FOR ‘=‘ 8946 BDB26F ( extbas.asm):01071 JSR >LB26F DO A SYNTAX CHECK FOR = 8949 7EB73D ( extbas.asm):01072 JMP >LB73D EVALUATE EXPRESSION, RETURN VALUE IN X ( extbas.asm):01073 * EXTENDED BASIC’S IRQ ROUTINE 894C B6FF03 ( extbas.asm):01074 XIRQSV LDA PIA0+3 GET PIA0, PORT B CONTROL REGISTER 894F 2B01 ( extbas.asm):01075 BMI L8952 BRANCH IF 60 HZ INTERRUPT 8951 3B ( extbas.asm):01076 RTI RETURN IF 63.5 MICROSECOND INTERRUPT 8952 B6FF02 ( extbas.asm):01077 L8952 LDA PIA0+2 RESET PIA INTERRUPT FLAG 8955 BE0112 ( extbas.asm):01078 L8955 LDX TIMVAL GET REAL TIME CLOCK 8958 3001 ( extbas.asm):01079 LEAX $01,X INCREMENT IT 895A BF0112 ( extbas.asm):01080 STX TIMVAL SAVE IT 895D 7E9C3E ( extbas.asm):01081 JMP >L9C3E GO CHECK SOME MORE STUFF 8960 9D9F ( extbas.asm):01082 L8960 JSR GETNCH GET A CHARACTER FROM BASIC 8962 8DE0 ( extbas.asm):01083 BSR L8944 GET NEW TIMER VALUE 8964 BF0112 ( extbas.asm):01084 STX TIMVAL SET TIMER COUNTER 8967 39 ( extbas.asm):01085 RTS ( extbas.asm):01086 * TIMER 8968 BE0112 ( extbas.asm):01087 TIMER LDX TIMVAL GET TIMER VALUE 896B 9F52 ( extbas.asm):01088 STX FPA0+2 SAVE TIMER VALUE IN BOTTOM OF FPA0 896D 7E880E ( extbas.asm):01089 JMP >L880E CONVERT BALANCE OF FPA0 TO POSITIVE INTEGER ( extbas.asm):01090 * DEL 8970 10272AD6 ( extbas.asm):01091 DEL LBEQ LB44A FC’ ERROR IF NO ARGUMENT 8974 BDAF67 ( extbas.asm):01092 JSR >LAF67 CONVERT A DECIMAL BASiC NUMBER TO BINARY 8977 BDAD01 ( extbas.asm):01093 JSR >LAD01 FIND RAM ADDRESS OF START OF A BASIC LINE 897A 9FD3 ( extbas.asm):01094 STX VD3 SAVE RAM ADDRESS OF STARTING LINE NUMBER 897C 9DA5 ( extbas.asm):01095 JSR GETCCH GET CURRENT INPUT CHARACTER 897E 2710 ( extbas.asm):01096 BEQ L8990 BRANCH IF END OF LINE 8980 81AC ( extbas.asm):01097 CMPA #$AC TOKEN FOR ‘-' 8982 263B ( extbas.asm):01098 BNE L89BF TERMINATE COMMAND IF LINE NUMBER NOT FOLLOWED BY ‘-‘ 8984 9D9F ( extbas.asm):01099 JSR GETNCH GET A CHARACTER FROM BASIC 8986 2704 ( extbas.asm):01100 BEQ L898C IF END OF LINE, USE DEFAULT ENDING LINE NUMBER 8988 8D24 ( extbas.asm):01101 BSR L89AE * CONVERT ENDING LINE NUMBER TO BINARY 898A 2004 ( extbas.asm):01102 BRA L8990 * AND SAVE IT IN BINVAL 898C 86FF ( extbas.asm):01103 L898C LDA #$FF = USE $FFXX AS DEFAULT ENDING 898E 972B ( extbas.asm):01104 STA BINVAL = LINE NUMBER - SAVE IT IN BINVAL 8990 DED3 ( extbas.asm):01105 L8990 LDU VD3 POINT U TO STARTING LINE NUMBER ADDRESS 8992 8C ( extbas.asm):01106 L8992 FCB SKP2 SKIP TWO BYTES 8993 EEC4 ( extbas.asm):01107 L8993 LDU ,U POINT U TO START OF NEXT LINE 8995 ECC4 ( extbas.asm):01108 LDD ,U CHECK FOR END OF PROGRAM 8997 2706 ( extbas.asm):01109 BEQ L899F BRANCH IF END OF PROGRAM 8999 EC42 ( extbas.asm):01110 LDD $02,U LOAD ACCD WITH THIS LINE’S NUMBER 899B 932B ( extbas.asm):01111 SUBD BINVAL SUBTRACT ENDING LINE NUMBER ADDRESS 899D 23F4 ( extbas.asm):01112 BLS L8993 BRANCH IF = < ENDING LINE NUMBER 899F 9ED3 ( extbas.asm):01113 L899F LDX VD3 GET STARTING LINE NUMBER 89A1 8D15 ( extbas.asm):01114 BSR L89B8 MOVE (U) TO (X) UNTIL END OF PROGRAM 89A3 BDAD21 ( extbas.asm):01115 JSR >LAD21 RESET BASIC’S INPUT POINTER AND ERASE VARIABLES 89A6 9ED3 ( extbas.asm):01116 LDX VD3 GET STARTING LINE NUMBER ADDRESS 89A8 BDACF1 ( extbas.asm):01117 JSR >LACF1 RECOMPUTE START OF NEXT LINE ADDRESSES 89AB 7EAC73 ( extbas.asm):01118 JMP >LAC73 JUMP TO BASIC’S MAIN COMMAND LOOP 89AE BDAF67 ( extbas.asm):01119 L89AE JSR >LAF67 GO GET LINE NUMBER CONVERTED TO BINARY 89B1 7EA5C7 ( extbas.asm):01120 JMP >LA5C7 MAKE SURE THERE’S NO MORE ON THIS LINE 89B4 A6C0 ( extbas.asm):01121 L89B4 LDA ,U+ GET A BYTE FROM (U) 89B6 A780 ( extbas.asm):01122 STA ,X+ MOVE THE BYTE TO (X) 89B8 11931B ( extbas.asm):01123 L89B8 CMPU VARTAB COMPARE TO END OF BASIC 89BB 26F7 ( extbas.asm):01124 BNE L89B4 BRANCH IF NOT AT END 89BD 9F1B ( extbas.asm):01125 STX VARTAB SAVE (X) AS NEW END OF BASIC 89BF 39 ( extbas.asm):01126 L89BF RTS ( extbas.asm):01127 * LINE INPUT 89C0 BD8866 ( extbas.asm):01128 L89C0 JSR >L8866 ‘BS’ ERROR IF IN DIRECT MODE 89C3 9D9F ( extbas.asm):01129 JSR GETNCH GET A CHAR FROM BASIC 89C5 8123 ( extbas.asm):01130 CMPA #'# * CHECK FOR DEVICE NUMBER FLAG AND 89C7 2609 ( extbas.asm):01131 BNE L89D2 * BRANCH IF NOT THERE 89C9 BDA5A5 ( extbas.asm):01132 JSR >LA5A5 CHECK FOR VALID DEVICE NUMBER 89CC BDA3ED ( extbas.asm):01133 JSR >LA3ED CHECK FOR OPEN FILE 89CF BDB26D ( extbas.asm):01134 JSR SYNCOMMA SYNTAX CHECK FOR COMMA 89D2 8122 ( extbas.asm):01135 L89D2 CMPA #'" CHECK FOR PROMPT STRING 89D4 260B ( extbas.asm):01136 BNE L89E1 BRANCH IF NO PROMPT STRING 89D6 BDB244 ( extbas.asm):01137 JSR >LB244 STRIP OFF PROMPT STRING & PUT IT ON STRING STACK 89D9 C63B ( extbas.asm):01138 LDB #'; * 89DB BDB26F ( extbas.asm):01139 JSR >LB26F * DO A SYNTAX CHECK FOR; 89DE BDB99F ( extbas.asm):01140 JSR >LB99F REMOVE PROMPT STRING FROM STRING STACK & SEND TO CONSOLE OUT 89E1 327E ( extbas.asm):01141 L89E1 LEAS $-02,S RESERVE TWO STORAGE SLOTS ON STACK 89E3 BDB035 ( extbas.asm):01142 JSR >LB035 INPUT A LINE FROM CURRENT INPUT DEVICE 89E6 3262 ( extbas.asm):01143 LEAS $02,S CLEAN UP THE STACK 89E8 0F6F ( extbas.asm):01144 CLR DEVNUM SET DEVICE NUMBER TO SCREEN 89EA BDB357 ( extbas.asm):01145 JSR >LB357 SEARCH FOR A VARIABLE 89ED 9F3B ( extbas.asm):01146 STX VARDES SAVE POINTER TO VARIABLE DESCRIPTOR 89EF BDB146 ( extbas.asm):01147 JSR >LB146 ‘TM’ ERROR IF VARIABLE TYPE = NUMERIC 89F2 8E02DC ( extbas.asm):01148 LDX #LINBUF POINT X TO THE STRING BUFFER WHERE THE INPUT STRING WAS STORED 89F5 4F ( extbas.asm):01149 CLRA TERMINATOR CHARACTER 0 (END OF LINE) 89F6 BDB51A ( extbas.asm):01150 JSR >LB51A PARSE THE INPUT STRING AND STORE IT IN THE STRING SPACE 89F9 7EAFA4 ( extbas.asm):01151 JMP >LAFA4 REMOVE DESCRIPTOR FROM STRING STACK 89FC BDAF67 ( extbas.asm):01152 L89FC JSR >LAF67 STRIP A DECIMAL NUMBER FROM BASIC INPUT LINE 89FF 9E2B ( extbas.asm):01153 LDX BINVAL GET BINARY VALUE 8A01 39 ( extbas.asm):01154 RTS 8A02 9ED1 ( extbas.asm):01155 L8A02 LDX VD1 GET CURRENT OLD NUMBER BEING RENUMBERED 8A04 9F2B ( extbas.asm):01156 L8A04 STX BINVAL SAVE THE LINE NUMBER BEING SEARCHED FOR 8A06 7EAD01 ( extbas.asm):01157 JMP >LAD01 GO FIND THE LINE NUMBER IN BASIC PROGRAM ( extbas.asm):01158 * RENUM 8A09 BDAD26 ( extbas.asm):01159 RENUM JSR >LAD26 ERASE VARIABLES 8A0C CC000A ( extbas.asm):01160 LDD #10 DEFAULT LINE NUMBER INTERVAL 8A0F DDD5 ( extbas.asm):01161 STD VD5 SAVE DEFAULT RENUMBER START LINE NUMBER 8A11 DDCF ( extbas.asm):01162 STD VCF SAVE DEFAULT INTERVAL 8A13 5F ( extbas.asm):01163 CLRB NOW ACCD = 0 8A14 DDD1 ( extbas.asm):01164 STD VD1 DEFAULT LINE NUMBER OF WHERE TO START RENUMBERING 8A16 9DA5 ( extbas.asm):01165 JSR GETCCH GET CURRENT INPUT CHARACTER 8A18 2406 ( extbas.asm):01166 BCC L8A20 BRANCH IF NOT NUMERIC 8A1A 8DE0 ( extbas.asm):01167 BSR L89FC CONVERT DECIMAL NUMBER IN BASIC PROGRAM TO BINARY 8A1C 9FD5 ( extbas.asm):01168 STX VD5 SAVE LINE NUMBER WHERE RENUMBERING STARTS 8A1E 9DA5 ( extbas.asm):01169 JSR GETCCH GET CURRENT INPUT CHARACTER 8A20 271B ( extbas.asm):01170 L8A20 BEQ L8A3D BRANCH IF END OF LINE 8A22 BDB26D ( extbas.asm):01171 JSR SYNCOMMA SYNTAX CHECK FOR COMMA 8A25 2406 ( extbas.asm):01172 BCC L8A2D BRANCH IF NEXT CHARACTER NOT NUMERIC 8A27 8DD3 ( extbas.asm):01173 BSR L89FC CONVERT DECIMAL NUMBER IN BASIC PROGRAM TO BINARY 8A29 9FD1 ( extbas.asm):01174 STX VD1 SAVE NEW RENUMBER LINE 8A2B 9DA5 ( extbas.asm):01175 JSR GETCCH GET CURRENT INPUT CHARACTER 8A2D 270E ( extbas.asm):01176 L8A2D BEQ L8A3D BRANCH IF END OF LINE 8A2F BDB26D ( extbas.asm):01177 JSR SYNCOMMA SYNTAX CHECK FOR COMMA 8A32 2406 ( extbas.asm):01178 BCC L8A3A BRANCH IF NEXT CHARACTER NOT NUMERIC 8A34 8DC6 ( extbas.asm):01179 BSR L89FC CONVERT DECIMAL NUMBER IN BASIC PROGRAM TO BINARY 8A36 9FCF ( extbas.asm):01180 STX VCF SAVE NEW INTERVAL 8A38 2749 ( extbas.asm):01181 BEQ L8A83 ‘FC' ERROR 8A3A BDA5C7 ( extbas.asm):01182 L8A3A JSR >LA5C7 CHECK FOR MORE CHARACTERS ON LINE - ‘SYNTAX’ ERROR IF ANY 8A3D 8DC3 ( extbas.asm):01183 L8A3D BSR L8A02 GO GET ADDRESS OF OLD NUMBER BEING RENUMBERED 8A3F 9FD3 ( extbas.asm):01184 STX VD3 SAVE ADDRESS 8A41 9ED5 ( extbas.asm):01185 LDX VD5 GET NEXT RENUMBERED LINE NUMBER TO USE 8A43 8DBF ( extbas.asm):01186 BSR L8A04 FIND THE LINE NUMBER IN THE BASIC PROGRAM 8A45 9CD3 ( extbas.asm):01187 CMPX VD3 COMPARE TO ADDRESS OF OLD LINE NUMBER 8A47 253A ( extbas.asm):01188 BLO L8A83 ‘FC’ ERROR IF NEW ADDRESS < OLD ADDRESS 8A49 8D1C ( extbas.asm):01189 BSR L8A67 MAKE SURE RENUMBERED LINE NUMBERS WILL BE IN RANGE 8A4B BD8ADD ( extbas.asm):01190 JSR >L8ADD CONVERT ASCII LINE NUMBERS TO ‘EXPANDED’ BINARY 8A4E BDACEF ( extbas.asm):01191 JSR >LACEF RECALCULATE NEXT LINE RAM ADDRESSES 8A51 8DAF ( extbas.asm):01192 BSR L8A02 GET RAM ADDRESS OF FIRST LINE TO BE RENUMBERED 8A53 9FD3 ( extbas.asm):01193 STX VD3 SAVE IT 8A55 8D3A ( extbas.asm):01194 BSR L8A91 MAKE SURE LINE NUMBERS EXIST 8A57 8D0F ( extbas.asm):01195 BSR L8A68 INSERT NEW LINE NUMBERS IN LINE HEADERS 8A59 8D36 ( extbas.asm):01196 BSR L8A91 INSERT NEW LINE NUMBERS IN PROGRAM STATEMENTS 8A5B BD8B7B ( extbas.asm):01197 JSR >L8B7B CONVERT PACKED BINARY LINE NUMBERS TO ASCII 8A5E BDAD26 ( extbas.asm):01198 JSR >LAD26 ERASE VARIABLES 8A61 BDACEF ( extbas.asm):01199 JSR >LACEF RECALCULATE NEXT LINE RAM ADDRESS 8A64 7EAC73 ( extbas.asm):01200 JMP >LAC73 GO BACK TO BASIC’S MAIN LOOP 8A67 86 ( extbas.asm):01201 L8A67 FCB SKP1LD SKIP ONE BYTE - LDA #$4F 8A68 4F ( extbas.asm):01202 L8A68 CLRA NEW LINE NUMBER FLAG - 0; INSERT NEW LINE NUMBERS 8A69 97D8 ( extbas.asm):01203 STA VD8 SAVE NEW LINE NUMBER FLAG; 0 = INSERT NEW NUMBERS 8A6B 9ED3 ( extbas.asm):01204 LDX VD3 GET ADDRESS OF OLD LINE NUMBER BEING RENUMBERED 8A6D DCD5 ( extbas.asm):01205 LDD VD5 GET THE CURRENT RENUMBERED LINE NUMBER 8A6F 8D15 ( extbas.asm):01206 BSR L8A86 RETURN IF END OF PROGRAM 8A71 0DD8 ( extbas.asm):01207 L8A71 TST VD8 CHECK NEW LINE NUMBER FLAG 8A73 2602 ( extbas.asm):01208 BNE L8A77 BRANCH IF NOT INSERTING NEW LINE NUMBERS 8A75 ED02 ( extbas.asm):01209 STD $02,X STORE THE NEW LINE NUMBER IN THE BASIC PROGRAM 8A77 AE84 ( extbas.asm):01210 L8A77 LDX ,X POINT X TO THE NEXT LINE IN BASIC 8A79 8D0B ( extbas.asm):01211 BSR L8A86 RETURN IF END OF PROGRAM 8A7B D3CF ( extbas.asm):01212 ADDD VCF ADD INTERVAL TO CURRENT RENUMBERED LINE NUMBER 8A7D 2504 ( extbas.asm):01213 BLO L8A83 ‘FC’ ERROR IF LINE NUMBER > $FFFF 8A7F 81FA ( extbas.asm):01214 CMPA #MAXLIN LARGEST LINE NUMBER = $F9FF 8A81 25EE ( extbas.asm):01215 BLO L8A71 BRANCH IF LEGAL LINE NUMBER 8A83 7EB44A ( extbas.asm):01216 L8A83 JMP >LB44A ‘FC’ ERROR IF LINE NUMBER MS BYTE > $F9 ( extbas.asm):01217 * TEST THE TWO BYTES POINTED TO BY (X). ( extbas.asm):01218 * NORMAL RETURN IF <> 0. IF = 0 (END OF ( extbas.asm):01219 * PROGRAM) RETURN IS PULLED OFF STACK AND ( extbas.asm):01220 * YOU RETURN TO PREVIOUS SUBROUTINE CALL. 8A86 3406 ( extbas.asm):01221 L8A86 PSHS B,A SAVE ACCD 8A88 EC84 ( extbas.asm):01222 LDD ,X TEST THE 2 BYTES POINTED TO BY X 8A8A 3506 ( extbas.asm):01223 PULS A,B RESTORE ACCD 8A8C 2602 ( extbas.asm):01224 BNE L8A90 BRANCH IF NOT END OF PROGRAM 8A8E 3262 ( extbas.asm):01225 LEAS $02,S PURGE RETURN ADDRESS FROM STACK 8A90 39 ( extbas.asm):01226 L8A90 RTS 8A91 9E19 ( extbas.asm):01227 L8A91 LDX TXTTAB GET START OF BASIC PROGRAM 8A93 301F ( extbas.asm):01228 LEAX $-01,X MOVE POINTER BACK ONE 8A95 3001 ( extbas.asm):01229 L8A95 LEAX $01,X MOVE POINTER UP ONE 8A97 8DED ( extbas.asm):01230 BSR L8A86 RETURN IF END OF PROGRAM 8A99 3003 ( extbas.asm):01231 L8A99 LEAX $03,X SKIP OVER NEXT LINE ADDRESS AND LINE NUMBER 8A9B 3001 ( extbas.asm):01232 L8A9B LEAX $01,X MOVE POINTER TO NEXT CHARACTER 8A9D A684 ( extbas.asm):01233 LDA ,X CHECK CURRENT CHARACTER 8A9F 27F4 ( extbas.asm):01234 BEQ L8A95 BRANCH IF END OF LINE 8AA1 9F0F ( extbas.asm):01235 STX TEMPTR SAVE CURRENT POINTER 8AA3 4A ( extbas.asm):01236 DECA = 8AA4 270C ( extbas.asm):01237 BEQ L8AB2 =BRANCH IF START OF PACKED NUMERIC LINE 8AA6 4A ( extbas.asm):01238 DECA * 8AA7 272A ( extbas.asm):01239 BEQ L8AD3 *BRANCH IF LINE NUMBER EXISTS 8AA9 4A ( extbas.asm):01240 DECA = 8AAA 26EF ( extbas.asm):01241 BNE L8A9B =MOVE TO NEXT CHARACTER IF > 3 8AAC 8603 ( extbas.asm):01242 L8AAC LDA #$03 * SET 1ST BYTE = 3 TO INDICATE LINE 8AAE A780 ( extbas.asm):01243 STA ,X+ * NUMBER DOESN’T CURRENTLY EXIST 8AB0 20E7 ( extbas.asm):01244 BRA L8A99 GO GET ANOTHER CHARACTER 8AB2 EC01 ( extbas.asm):01245 L8AB2 LDD $01,X GET MS BYTE OF LINE NUMBER 8AB4 6A02 ( extbas.asm):01246 DEC $02,X DECREMENT ZERO CHECK BYTE 8AB6 2701 ( extbas.asm):01247 BEQ L8AB9 BRANCH IF MS BYTE <> 0 8AB8 4F ( extbas.asm):01248 CLRA CLEAR MS BYTE 8AB9 E603 ( extbas.asm):01249 L8AB9 LDB $03,X GET LS BYTE OF LINE NUMBER 8ABB 6A04 ( extbas.asm):01250 DEC $04,X DECREMENT ZERO CHECK FLAG 8ABD 2701 ( extbas.asm):01251 BEQ L8AC0 BRANCH IF IS BYTE <> 0 8ABF 5F ( extbas.asm):01252 CLRB CLEAR LS BYTE 8AC0 ED01 ( extbas.asm):01253 L8AC0 STD $01,X SAVE BINARY LINE NUMBER 8AC2 DD2B ( extbas.asm):01254 STD BINVAL SAVE TRIAL LINE NUMBER 8AC4 BDAD01 ( extbas.asm):01255 JSR >LAD01 FIND RAM ADDRESS OF A BASIC LINE NUMBER 8AC7 9E0F ( extbas.asm):01256 L8AC7 LDX TEMPTR GET BACK POINTER TO START OF PACKED LINE NUMBER 8AC9 25E1 ( extbas.asm):01257 BLO L8AAC BRANCH IF NO LINE NUMBER MATCH FOUND 8ACB DC47 ( extbas.asm):01258 LDD V47 GET START ADDRESS OF LINE NUMBER 8ACD 6C80 ( extbas.asm):01259 INC ,X+ * SET 1ST BYTE = 2, TO INDICATE LINE NUMBER EXISTS IF CHECKING FOR ( extbas.asm):01260 * * EXISTENCE OF LINE NUMBER, SET IT = 1 IF INSERTING LINE NUMBERS 8ACF ED84 ( extbas.asm):01261 STD ,X SAVE RAM ADDRESS OF CORRECT LINE NUMBER 8AD1 20C6 ( extbas.asm):01262 BRA L8A99 GO GET ANOTHER CHARACTER 8AD3 6F84 ( extbas.asm):01263 L8AD3 CLR ,X CLEAR CARRY FLAG AND 1ST BYTE 8AD5 AE01 ( extbas.asm):01264 LDX $01,X POINT X TO RAM ADDRESS OF CORRECT LINE NUMBER 8AD7 AE02 ( extbas.asm):01265 LDX $02,X PUT CORRECT LINE NUMBER INTO (X) 8AD9 9F47 ( extbas.asm):01266 STX V47 SAVE IT TEMPORARILY 8ADB 20EA ( extbas.asm):01267 BRA L8AC7 GO INSERT IT INTO BASIC LINE 8ADD 9E19 ( extbas.asm):01268 L8ADD LDX TXTTAB GET BEGINNING OF BASIC PROGRAM 8ADF 2004 ( extbas.asm):01269 BRA L8AE5 8AE1 9EA6 ( extbas.asm):01270 L8AE1 LDX CHARAD *GET CURRENT INPUT POINTER 8AE3 3001 ( extbas.asm):01271 LEAX $01,X *AND BUMP IT ONE 8AE5 8D9F ( extbas.asm):01272 L8AE5 BSR L8A86 RETURN IF END OF PROGRAM 8AE7 3002 ( extbas.asm):01273 LEAX $02,X SKIP PAST NEXT LINE ADDRESS 8AE9 3001 ( extbas.asm):01274 L8AE9 LEAX $01,X ADVANCE POINTER BY ONE 8AEB 9FA6 ( extbas.asm):01275 L8AEB STX CHARAD SAVE NEW BASIC INPUT POINTER 8AED 9D9F ( extbas.asm):01276 L8AED JSR GETNCH GET NEXT CHARACTER FROM BASIC 8AEF 4D ( extbas.asm):01277 L8AEF TSTA CHECK THE CHARACTER 8AF0 27EF ( extbas.asm):01278 BEQ L8AE1 BRANCH IF END OF LINE 8AF2 2AF9 ( extbas.asm):01279 BPL L8AED BRANCH IF NOT A TOKEN 8AF4 9EA6 ( extbas.asm):01280 LDX CHARAD GET CURRENT INPUT POINTER 8AF6 81FF ( extbas.asm):01281 CMPA #$FF IS THIS A SECONDARY TOKEN? 8AF8 27EF ( extbas.asm):01282 BEQ L8AE9 YES - IGNORE IT 8AFA BD01A0 ( extbas.asm):01283 JSR RVEC22 HOOK INTO RAM AND CHECK FOR USER ADDED TOKENS 8AFD 81A7 ( extbas.asm):01284 CMPA #$A7 TOKEN FOR THEN? 8AFF 2712 ( extbas.asm):01285 BEQ L8B13 YES 8B01 8184 ( extbas.asm):01286 CMPA #$84 TOKEN FOR ELSE? 8B03 270E ( extbas.asm):01287 BEQ L8B13 YES 8B05 8181 ( extbas.asm):01288 CMPA #$81 TOKEN FOR GO? 8B07 26E4 ( extbas.asm):01289 BNE L8AED NO 8B09 9D9F ( extbas.asm):01290 JSR GETNCH GET A CHARACTER FROM BASIC 8B0B 81A5 ( extbas.asm):01291 CMPA #$A5 TOKEN FOR TO? 8B0D 2704 ( extbas.asm):01292 BEQ L8B13 YES 8B0F 81A6 ( extbas.asm):01293 CMPA #$A6 TOKEN FOR SUB? 8B11 26D8 ( extbas.asm):01294 BNE L8AEB NO 8B13 9D9F ( extbas.asm):01295 L8B13 JSR GETNCH GET A CHARACTER FROM BASIC 8B15 2504 ( extbas.asm):01296 BLO L8B1B BRANCH IF NUMERIC 8B17 9DA5 ( extbas.asm):01297 L8B17 JSR GETCCH GET CURRENT BASIC INPUT CHARRACTER 8B19 20D4 ( extbas.asm):01298 BRA L8AEF KEEP CHECKING THE LINE 8B1B 9EA6 ( extbas.asm):01299 L8B1B LDX CHARAD GET CURRENT INPUT ADDRESS 8B1D 3410 ( extbas.asm):01300 PSHS X SAVE IT ON THE STACK 8B1F BDAF67 ( extbas.asm):01301 JSR >LAF67 CONVERT DECIMAL BASIC NUMBER TO BINARY 8B22 9EA6 ( extbas.asm):01302 LDX CHARAD GET CURRENT INPUT POINTER 8B24 A682 ( extbas.asm):01303 L8B24 LDA ,-X GET PREVIOUS INPUT CHARACTER 8B26 BD90AA ( extbas.asm):01304 JSR >L90AA CLEAR CARRY IF NUMERIC INPUT VALUE 8B29 25F9 ( extbas.asm):01305 BLO L8B24 BRANCH IF NON-NUMERIC 8B2B 3001 ( extbas.asm):01306 LEAX $01,X MOVE POINTER UP ONE 8B2D 1F10 ( extbas.asm):01307 TFR X,D NOW ACCD POINTS TO ONE PAST END OF LINE NUMBER 8B2F E061 ( extbas.asm):01308 SUBB $01,S SUBTRACT PRE-NUMERIC POINTER LS BYTE 8B31 C005 ( extbas.asm):01309 SUBB #$05 MAKE SURE THERE ARE AT LEAST 5 CHARACTERS IN THE NUMERIC LINE ( extbas.asm):01310 * 8B33 2720 ( extbas.asm):01311 BEQ L8B55 BRANCH IF EXACTLY 5 8B35 250A ( extbas.asm):01312 BLO L8B41 BRANCH IF < 5 8B37 3384 ( extbas.asm):01313 LEAU ,X TRANSFER X TO U 8B39 50 ( extbas.asm):01314 NEGB NEGATE B 8B3A 3085 ( extbas.asm):01315 LEAX B,X MOVE X BACK B BYTES 8B3C BD89B8 ( extbas.asm):01316 JSR >L89B8 *MOVE BYTES FROM (U) TO (X) UNTIL ( extbas.asm):01317 * *U = END OF BASIC; (I) = NEW END OF BASIC 8B3F 2014 ( extbas.asm):01318 BRA L8B55 ( extbas.asm):01319 * FORCE FIVE BYTES OF SPACE FOR THE LINE NUMBER 8B41 9F47 ( extbas.asm):01320 L8B41 STX V47 SAVE END OF NUMERIC VALUE 8B43 9E1B ( extbas.asm):01321 LDX VARTAB GET END OF BASIC PROGRAM 8B45 9F43 ( extbas.asm):01322 STX V43 SAVE IT 8B47 50 ( extbas.asm):01323 NEGB NEGATE B 8B48 3085 ( extbas.asm):01324 LEAX B,X ADD IT TO END OF NUMERIC POiNTER 8B4A 9F41 ( extbas.asm):01325 STX V41 SAVE POINTER 8B4C 9F1B ( extbas.asm):01326 STX VARTAB STORE END OF BASIC PROGRAM 8B4E BDAC1E ( extbas.asm):01327 JSR >LAC1E ACCD = TOP OF ARRAYS - CHECK FOR ENOUGH ROOM 8B51 9E45 ( extbas.asm):01328 LDX V45 * GET AND SAVE THE 8B53 9FA6 ( extbas.asm):01329 STX CHARAD * NEW CURRENT INPUT POINTER 8B55 3510 ( extbas.asm):01330 L8B55 PULS X RESTORE POINTER TO START OF NUMERIC VALUE 8B57 8601 ( extbas.asm):01331 LDA #$01 NEW LINE NUMBER FLAG 8B59 A784 ( extbas.asm):01332 STA ,X * SAVE NEW LINE FLAG 8B5B A702 ( extbas.asm):01333 STA $02,X * 8B5D A704 ( extbas.asm):01334 STA $04,X * 8B5F D62B ( extbas.asm):01335 LDB BINVAL GET MS BYTE OF BINARY LINE NUMBER 8B61 2604 ( extbas.asm):01336 BNE L8B67 BRANCH IF IT IS NOT ZERO 8B63 C601 ( extbas.asm):01337 LDB #$01 SAVE A 1 IF BYTE IS 0; OTHERWISE, BASIC WILL THINK IT IS THE END OF A LINE 8B65 6C02 ( extbas.asm):01338 INC $02,X IF 2,X = 2, THEN PREVIOUS BYTE WAS A ZERO 8B67 E701 ( extbas.asm):01339 L8B67 STB $01,X SAVE MS BYTE OF BINARY LINE NUMBER 8B69 D62C ( extbas.asm):01340 LDB BINVAL+1 GET IS BYTE OF BINARY LINE NUMBER 8B6B 2604 ( extbas.asm):01341 BNE L8B71 BRANCH IF NOT A ZERO BYTE 8B6D C601 ( extbas.asm):01342 LDB #$01 SAVE A 1 IF BYTE IS A 0 8B6F 6C04 ( extbas.asm):01343 INC $04,X IF 4,X = 2, THEN PREVIOUS BYTE WAS A 0 8B71 E703 ( extbas.asm):01344 L8B71 STB $03,X SAVE LS BYTE OF BINARY LINE NUMBER 8B73 9DA5 ( extbas.asm):01345 JSR GETCCH GET CURRENT INPUT CHARACTER 8B75 812C ( extbas.asm):01346 CMPA #', IS IT A COMMA? 8B77 279A ( extbas.asm):01347 BEQ L8B13 YES - PROCESS ANOTHER NUMERIC VALUE 8B79 209C ( extbas.asm):01348 BRA L8B17 NO - GO GET AND PROCESS AN INPUT CHARACTER 8B7B 9E19 ( extbas.asm):01349 L8B7B LDX TXTTAB POINT X TO START OF BASIC PROGRAM 8B7D 301F ( extbas.asm):01350 LEAX $-01,X MOVE POINTER BACK ONE 8B7F 3001 ( extbas.asm):01351 L8B7F LEAX $01,X MOVE POINTER UP ONE 8B81 EC02 ( extbas.asm):01352 LDD $02,X GET ADDRESS OF NEXT LINE 8B83 DD68 ( extbas.asm):01353 STD CURLIN SAVE IT IN CURLIN 8B85 BD8A86 ( extbas.asm):01354 JSR >L8A86 RETURN IF END OF PROGRAM 8B88 3003 ( extbas.asm):01355 LEAX $03,X SKIP OVER ADDRESS OF NEXT LINE AND 1ST BYTE OF LINE NUMBER 8B8A 3001 ( extbas.asm):01356 L8B8A LEAX $01,X MOVE POINTER UP ONE 8B8C A684 ( extbas.asm):01357 L8B8C LDA ,X GET CURRENT CHARACTER 8B8E 27EF ( extbas.asm):01358 BEQ L8B7F BRANCH IF END OF LINE 8B90 4A ( extbas.asm):01359 DECA INPUT CHARACTER = 1? - VALID LINE NUMBER 8B91 271B ( extbas.asm):01360 BEQ L8BAE YES 8B93 8002 ( extbas.asm):01361 SUBA #$02 INPUT CHARACTER 3? - UL LINE NUMBER 8B95 26F3 ( extbas.asm):01362 BNE L8B8A NO 8B97 3410 ( extbas.asm):01363 PSHS X SAVE CURRENT POSITION OF INPUT POINTER 8B99 8E8BD8 ( extbas.asm):01364 LDX #L8BD9-1 POINT X TO ‘UL’ MESSAGE 8B9C BDB99C ( extbas.asm):01365 JSR STRINOUT PRINT STRING TO THE SCREEN 8B9F AEE4 ( extbas.asm):01366 LDX ,S GET INPUT POINTER 8BA1 EC01 ( extbas.asm):01367 LDD $01,X GET THE UNDEFINED LINE NUMBER 8BA3 BDBDCC ( extbas.asm):01368 JSR >LBDCC CONVERT NUMBER IN ACCD TO DECIMAL AND DISPLAY IT 8BA6 BDBDC5 ( extbas.asm):01369 JSR >LBDC5 PRINT ‘IN XXXX’ XXXX = CURRENT LINE NUMBER 8BA9 BDB958 ( extbas.asm):01370 JSR >LB958 SEND A CR TO CONSOLE OUT 8BAC 3510 ( extbas.asm):01371 PULS X GET INPUT POINTER BACK 8BAE 3410 ( extbas.asm):01372 L8BAE PSHS X SAVE CURRENT POSITION OF INPUT POINTER 8BB0 EC01 ( extbas.asm):01373 LDD $01,X LOAD ACCD WITH BINARY VALUE OF LINE NUMBER 8BB2 DD52 ( extbas.asm):01374 STD FPA0+2 SAVE IN BOTTOM 2 BYTES OF FPA0 8BB4 BD880E ( extbas.asm):01375 JSR >L880E ADJUST REST OF FPA0 AS AN INTEGER 8BB7 BDBDD9 ( extbas.asm):01376 JSR >LBDD9 CONVERT FPA0 TO ASCII, STORE IN LINE NUMBER 8BBA 3540 ( extbas.asm):01377 PULS U LOAD U WITH PREVIOUS ADDRESS OF INPUT POINTER 8BBC C605 ( extbas.asm):01378 LDB #$05 EACH EXPANDED LINE NUMBER USES 5 BYTES 8BBE 3001 ( extbas.asm):01379 L8BBE LEAX $01,X MOVE POINTER FORWARD ONE 8BC0 A684 ( extbas.asm):01380 LDA ,X GET AN ASCII BYTE 8BC2 2705 ( extbas.asm):01381 BEQ L8BC9 BRANCH IF END OF NUMBER 8BC4 5A ( extbas.asm):01382 DECB DECREMENT BYTE COUNTER 8BC5 A7C0 ( extbas.asm):01383 STA ,U+ STORE ASCII NUMBER IN BASIC LINE 8BC7 20F5 ( extbas.asm):01384 BRA L8BBE CHECK FOR ANOTHER DIGIT 8BC9 30C4 ( extbas.asm):01385 L8BC9 LEAX ,U TRANSFER NEW LINE POINTER TO (X) 8BCB 5D ( extbas.asm):01386 TSTB DOES THE NEW LINE NUMBER REQUIRE 5 BYTES? 8BCC 27BE ( extbas.asm):01387 BEQ L8B8C YES - GO GET ANOTHER INPUT CHARACTER 8BCE 31C4 ( extbas.asm):01388 LEAY ,U SAVE NEW LINE POINTER IN Y 8BD0 33C5 ( extbas.asm):01389 LEAU B,U POINT U TO END OF 5 BYTE PACKED LINE NUMBER BLOCK 8BD2 BD89B8 ( extbas.asm):01390 JSR >L89B8 MOVE BYTES FROM (U) TO (X) UNTIL END OF PROGRAM 8BD5 30A4 ( extbas.asm):01391 LEAX ,Y LOAD (X) WITH NEW LINE POINTER 8BD7 20B3 ( extbas.asm):01392 BRA L8B8C GO GET ANOTHER INPUT CHARACTER 8BD9 554C20 ( extbas.asm):01393 L8BD9 FCC 'UL ' UNKNOWN LINE NUMBER MESSAGE 8BDC 00 ( extbas.asm):01394 FCB 0 ( extbas.asm):01395 * CONVERT AN INTEGER INTO AN ASCII STRING AND PRINT IT ON THE SCREEN 8BDD BDB740 ( extbas.asm):01396 HEXDOL JSR >LB740 CONVERT FPA0 INTO A POSITIVE 2 BYTE INTEGER 8BE0 8E03D9 ( extbas.asm):01397 LDX #STRBUF+2 POINT TO TEMPORARY BUFFER 8BE3 C604 ( extbas.asm):01398 LDB #$04 CONVERT 4 NIBBLES 8BE5 3404 ( extbas.asm):01399 L8BE5 PSHS B SAVE NIBBLE COUNTER 8BE7 5F ( extbas.asm):01400 CLRB CLEAR CARRY FLAG 8BE8 8604 ( extbas.asm):01401 LDA #$04 4 SHIFTS 8BEA 0853 ( extbas.asm):01402 L8BEA ASL FPA0+3 * SHIFT BOTTOM TWO BYTES OF 8BEC 0952 ( extbas.asm):01403 ROL FPA0+2 * FPA0 LEFT ONE BIT (X2) 8BEE 59 ( extbas.asm):01404 ROLB IF OVERFLOW, ACCB <> 0 8BEF 4A ( extbas.asm):01405 DECA * DECREMENT SHIFT COUNTER AND 8BF0 26F8 ( extbas.asm):01406 BNE L8BEA * BRANCH IF NOT DONE 8BF2 5D ( extbas.asm):01407 TSTB CHECK FOR OVERFLOW 8BF3 260A ( extbas.asm):01408 BNE L8BFF BRANCH IF OVERFLOW 8BF5 A6E4 ( extbas.asm):01409 LDA ,S * GET NIBBLE COUNTER, 8BF7 4A ( extbas.asm):01410 DECA * DECREMENT IT AND 8BF8 2705 ( extbas.asm):01411 BEQ L8BFF * BRANCH IF DONE 8BFA 8C03D9 ( extbas.asm):01412 CMPX #STRBUF+2 = DO NOT DO A CONVERSION UNTIL A NON-ZERO 8BFD 270C ( extbas.asm):01413 BEQ L8C0B = BYTE IS FOUND - LEADING ZERO SUPPRESSION 8BFF CB30 ( extbas.asm):01414 L8BFF ADDB #'0 ADD IN ASCII ZERO 8C01 C139 ( extbas.asm):01415 CMPB #'9 COMPARE TO ASCII 9 8C03 2302 ( extbas.asm):01416 BLS L8C07 BRANCH IF < 9 8C05 CB07 ( extbas.asm):01417 ADDB #'A-('9+1) ADD ASCII OFFSET IF HEX LETTER 8C07 E780 ( extbas.asm):01418 L8C07 STB ,X+ STORE HEX VALUE AND ADVANCE POINTER 8C09 6F84 ( extbas.asm):01419 CLR ,X CLEAR NEXT BYTE - END OF STRING FLAG 8C0B 3504 ( extbas.asm):01420 L8C0B PULS B * GET NIBBLE COUNTER, 8C0D 5A ( extbas.asm):01421 DECB * DECREMENT IT AND 8C0E 26D5 ( extbas.asm):01422 BNE L8BE5 * BRANCH IF NOT DONE 8C10 3262 ( extbas.asm):01423 LEAS $02,S PURGE RETURN ADDRESS OFF OF STACK 8C12 8E03D8 ( extbas.asm):01424 LDX #STRBUF+1 RESET POINTER 8C15 7EB518 ( extbas.asm):01425 JMP >LB518 SAVE STRING ON STRING STACK ( extbas.asm):01426 * DLOAD 8C18 BDA429 ( extbas.asm):01427 DLOAD JSR >LA429 CLOSE FILES 8C1B 9DA5 ( extbas.asm):01428 L8C1B JSR GETCCH GET THE CURRENT INPUT CHARACTER 8C1D 804D ( extbas.asm):01429 SUBA #'M CHECK FOR DLOADM 8C1F 3402 ( extbas.asm):01430 PSHS A SAVE DLOADM (=0), OLOAD (<>0) FLAG 8C21 2602 ( extbas.asm):01431 BNE L8C25 BRANCH IF OLOAD 8C23 9D9F ( extbas.asm):01432 JSR GETNCH GET AN INPUT CHAR FROM BASIC 8C25 BDA578 ( extbas.asm):01433 L8C25 JSR >LA578 GET THE NAME OF FILE FROM BASIC 8C28 9DA5 ( extbas.asm):01434 JSR GETCCH GET CURRENT INPUT CHAR FROM BASIC 8C2A 2718 ( extbas.asm):01435 BEQ L8C44 BRANCH IF END OF LINE 8C2C BDB26D ( extbas.asm):01436 JSR SYNCOMMA SYNTAX CHECK FOR COMMA 8C2F 812C ( extbas.asm):01437 CMPA #', CHECK FOR TWO CONSECUTIVE COMMAS 8C31 2711 ( extbas.asm):01438 BEQ L8C44 *BRANCH IF,, - IF THIS CASE IS SELECTED ( extbas.asm):01439 * *THE BAUD DELAY MUST HAVE BEEN PREVIOUSLY STORED IN DIBAUD 8C33 BDB70B ( extbas.asm):01440 JSR EVALEXPB EVAL EXPR, RETURN VALUE IN ACCB 8C36 86B0 ( extbas.asm):01441 L8C36 LDA #44*4 DELAY VALUE FOR 300 BAUD 8C38 5D ( extbas.asm):01442 TSTB WAS ARGUMENT = 0? 8C39 2707 ( extbas.asm):01443 BEQ L8C42 YES - 300 BAUD 8C3B 862C ( extbas.asm):01444 LDA #44 DELAY VALUE FOR 1200 BAUD 8C3D 5A ( extbas.asm):01445 DECB CHECK FOR ARGUMENT OF 1 8C3E 10262808 ( extbas.asm):01446 LBNE LB44A ‘FC’ ERROR IF NOT ZERO OR ONE OR COMMA 8C42 97E6 ( extbas.asm):01447 L8C42 STA DLBAUD SAVE DELAY VALUE 8C44 BD8CD0 ( extbas.asm):01448 L8C44 JSR >L8CD0 TRANSMIT FILE NAME AND READ IN FILE STATUS 8C47 3402 ( extbas.asm):01449 PSHS A SAVE ACCA 8C49 86FD ( extbas.asm):01450 LDA #-3 DLOAD DEVICE NUMBER TO -3 8C4B 976F ( extbas.asm):01451 STA DEVNUM SET DEVICE NUMBER TO DLOAD 8C4D 3502 ( extbas.asm):01452 PULS A RESTORE ACCA 8C4F 6DE0 ( extbas.asm):01453 TST ,S+ DLOAD OR DLOADM? 8C51 2732 ( extbas.asm):01454 BEQ L8C85 DLOADM ( extbas.asm):01455 * READ IN A DLOAD FILE 8C53 BDA5C7 ( extbas.asm):01456 JSR >LA5C7 CHECK FOR END OF LINE - SYNTAX ERROR IF NOT 8C56 5D ( extbas.asm):01457 TSTB CHECK ASCII FLAG 8C57 2706 ( extbas.asm):01458 BEQ L8C5F ‘FM’ ERROR IF NOT ASCII 8C59 BDAD19 ( extbas.asm):01459 JSR >LAD19 GO DO A ‘NEW’ 8C5C 7EAC7C ( extbas.asm):01460 JMP >LAC7C *JUMP BACK TO BASIC’S MAIN INPUT LOOP; ( extbas.asm):01461 * *DLOAD FILES MUST BE ASCII FILES 8C5F 7EA616 ( extbas.asm):01462 L8C5F JMP >LA616 ‘BAD FILE MODE’ ERROR ( extbas.asm):01463 * EXBAS CLOAD PROCESSOR 8C62 9D9F ( extbas.asm):01464 L8C62 JSR GETNCH GET A CHAR FROM BASIC 8C64 814D ( extbas.asm):01465 CMPA #'M CHECK FOR CLOADM 8C66 1026182E ( extbas.asm):01466 LBNE CLOAD GO DO A CLOAD 8C6A 0F78 ( extbas.asm):01467 CLR FILSTA CLOSE FILES 8C6C 9D9F ( extbas.asm):01468 JSR GETNCH GET A CHAR FROM BASIC 8C6E BDA578 ( extbas.asm):01469 JSR >LA578 STRIP A FILENAME OFF OF THE BASIC LINE 8C71 BDA648 ( extbas.asm):01470 JSR >LA648 SEARCH FOR FILE 8C74 7D01E4 ( extbas.asm):01471 TST CASBUF+10 CHECK FILE MODE 8C77 1027188A ( extbas.asm):01472 LBEQ LA505 BRANCH TO CLOADM IF NOT BLOCK LOAD 8C7B FE01E2 ( extbas.asm):01473 LDU CASBUF+8 SAVE FILE TYPE AND ASCII FLAG IN U 8C7E 0A6F ( extbas.asm):01474 DEC DEVNUM SET DEVICE NUMBER TO -1 (CASSETTE) 8C80 BDA635 ( extbas.asm):01475 JSR >LA635 GO READ IN A DATA BLOCK 8C83 1F30 ( extbas.asm):01476 TFR U,D PUT FILE TYPE & ASCII FLAG BACK IN ACCD ( extbas.asm):01477 * STRIP A LOAD OFFSET FROM THE BASIC LINE, THEN LOAD IN BLOCKS OF ( extbas.asm):01478 * DATA (CLOADM,DLOADM) WHICH ARE PRECEEDED BY A 5 BYTE PRE OR POSTB16 ( extbas.asm):01479 * AMBLE. THE PREAMBLE CONTAINS A BLOCK LENGTH AND A LOAD ADDRESS SO ( extbas.asm):01480 * THAT ANY NUMBER OF NON-CONTIGUOUS BLOCKS MAY BE LOADED. THE POST- ( extbas.asm):01481 * AMBLE WILL TERMINATE THE LOADING PROCESS AND PROVIDE A TRANSFER ADDRESS 8C85 830200 ( extbas.asm):01482 L8C85 SUBD #$200 * CHECK FILE STATUS; 8C88 26D5 ( extbas.asm):01483 BNE L8C5F * ‘FM’ ERROR IF MODE <> 2 OR TYPE <> 0 8C8A 9E8A ( extbas.asm):01484 LDX ZERO ZERO THE X REG - DEFAULT OFFSET 8C8C 9DA5 ( extbas.asm):01485 JSR GETCCH GET CURRENT INPUT CHARACTER 8C8E 2706 ( extbas.asm):01486 BEQ L8C96 BRANCH IF END OF LINE 8C90 BDB26D ( extbas.asm):01487 JSR SYNCOMMA SYNTAX CHECK FOR COMMA 8C93 BDB73D ( extbas.asm):01488 JSR >LB73D EVAL INTEGER EXPR - RETURN VALUE IN X 8C96 9FD3 ( extbas.asm):01489 L8C96 STX VD3 SAVE OFFSET 8C98 BDA5C7 ( extbas.asm):01490 JSR >LA5C7 SYNTAX ERROR IF MORE CHARS ON LINE 8C9B 8D29 ( extbas.asm):01491 L8C9B BSR L8CC6 GO GET EOF FLAG FROM CONSOLE IN 8C9D 3402 ( extbas.asm):01492 PSHS A SAVE IT ON THE STACK 8C9F 8D1E ( extbas.asm):01493 BSR L8CBF * READ IN BLOCK LENGTH FROM CONSOLE IN 8CA1 1F02 ( extbas.asm):01494 TFR D,Y * AND SAVE IT IN Y 8CA3 8D1A ( extbas.asm):01495 BSR L8CBF GET LOAD ADDRESS FROM CONSOLE IN 8CA5 D3D3 ( extbas.asm):01496 ADDD VD3 ADD OFFSET TO LOAD ADDRESS 8CA7 DD9D ( extbas.asm):01497 STD EXECJP SAVE IN EXEC ADDRESS 8CA9 1F01 ( extbas.asm):01498 TFR D,X SAVE LOAD ADDRESS IN X 8CAB A6E0 ( extbas.asm):01499 LDA ,S+ GET EOF FLAG FROM STACK 8CAD 1026177C ( extbas.asm):01500 LBNE LA42D CLOSE FILES IF POSTAMBLE BLOCK 8CB1 8D13 ( extbas.asm):01501 L8CB1 BSR L8CC6 GET A CHARACTER FROM CONSOLE IN 8CB3 A784 ( extbas.asm):01502 STA ,X SAVE IT IN RAM 8CB5 A180 ( extbas.asm):01503 CMPA ,X+ COMPARE SAVED BYTE TO ACTUAL BYTE 8CB7 2614 ( extbas.asm):01504 BNE L8CCD 'IO’ ERROR IF NOT = (SAVED IN ROM OR BAD RAM) 8CB9 313F ( extbas.asm):01505 LEAY $-01,Y DECREMENT BYTE COUNT 8CBB 26F4 ( extbas.asm):01506 BNE L8CB1 READ MORE CHARACTERS 8CBD 20DC ( extbas.asm):01507 BRA L8C9B LOOK FOR ANOTHER BLOCK OF DATA ( extbas.asm):01508 * GET 2 CHARACTERS - RETURN THEM IN ACCD 8CBF 8D00 ( extbas.asm):01509 L8CBF BSR L8CC1 GET A CHARACTER IN ACCB 8CC1 8D03 ( extbas.asm):01510 L8CC1 BSR L8CC6 GET A CHARACTER IN ACCA 8CC3 1E89 ( extbas.asm):01511 EXG A,B SAVE IT IN ACCB 8CC5 39 ( extbas.asm):01512 L8CC5 RTS 8CC6 BDA176 ( extbas.asm):01513 L8CC6 JSR >LA176 GET A CHARACTER FROM CONSOLE IN 8CC9 0D70 ( extbas.asm):01514 TST CINBFL IS FILE EMPTY? 8CCB 27F8 ( extbas.asm):01515 BEQ L8CC5 RETURN IF NOT EMPTY 8CCD 7EA619 ( extbas.asm):01516 L8CCD JMP >LA619 ‘IO’ ERROR IF EMPTY 8CD0 8D42 ( extbas.asm):01517 L8CD0 BSR L8D14 TRANSMIT FILE NAME, RETURN FILE STATUS 8CD2 3406 ( extbas.asm):01518 PSHS B,A SAVE FILE STATUS ON STACK 8CD4 4C ( extbas.asm):01519 INCA CHECK FILE TYPE 8CD5 2706 ( extbas.asm):01520 BEQ L8CDD ‘NE’ ERROR IF FILE NOT FOUND 8CD7 DE8A ( extbas.asm):01521 LDU ZERO ZERO U REG :FIRST BLOCK NUMBER 8CD9 8D09 ( extbas.asm):01522 BSR L8CE4 READ IN 128 CHARACTERS 8CDB 3586 ( extbas.asm):01523 PULS A,B,PC GET FILE STATUS BACK AND RETURN 8CDD C634 ( extbas.asm):01524 L8CDD LDB #2*26 ‘NE’ ERROR 8CDF 7EAC46 ( extbas.asm):01525 JMP >LAC46 GO TO ERROR SERVICING ROUTINE ( extbas.asm):01526 * REFILL CONSOLE IN CHARACTER BUFFER FROM DLOAD 8CE2 DE7E ( extbas.asm):01527 L8CE2 LDU CBUFAD GET BLOCK NUMBER 8CE4 3041 ( extbas.asm):01528 L8CE4 LEAX $01,U * INCREMENT BLOCK NUMBER 8CE6 9F7E ( extbas.asm):01529 STX CBUFAD * AND SAVE IT 8CE8 8E01DA ( extbas.asm):01530 LDX #CASBUF USE CASBUF AS DLOAD INPUT BUFFER 8CEB BD8D7C ( extbas.asm):01531 JSR >L8D7C READ 128 CHARACTERS (ONE BLOCK) INTO BUFFER 8CEE 7EA644 ( extbas.asm):01532 JMP >LA644 RESET CONSOLE IN BUFFER ( extbas.asm):01533 * CONSOLE IN RAM HOOK 8CF1 966F ( extbas.asm):01534 XVEC4 LDA DEVNUM GET DEVICE NUMBER 8CF3 81FD ( extbas.asm):01535 CMPA #-3 DLOAD DEVICE NUMBER 8CF5 260A ( extbas.asm):01536 BNE L8D01 BRANCH IF NOT OLOAD 8CF7 3262 ( extbas.asm):01537 LEAS $02,S PURGE 1ST RETURN ADDR FROM STACK 8CF9 0F70 ( extbas.asm):01538 CLR CINBFL RESET EMPTY/FULL FLAG 8CFB 0D79 ( extbas.asm):01539 TST CINCTR ANY CHARACTERS LEFT IN BUFFER? 8CFD 2603 ( extbas.asm):01540 BNE L8D02 YES, GO GET ONE 8CFF 0370 ( extbas.asm):01541 COM CINBFL SET EMPTY/FULL FLAG TO EOF 8D01 39 ( extbas.asm):01542 L8D01 RTS 8D02 3474 ( extbas.asm):01543 L8D02 PSHS U,Y,X,B SAVE REGISTERS 8D04 9E7A ( extbas.asm):01544 LDX CINPTR GET CONSOLE IN CHARACTER BUFFER 8D06 A680 ( extbas.asm):01545 LDA ,X+ GET A CHARACTER 8D08 3402 ( extbas.asm):01546 PSHS A SAVE IT ON THE STACK 8D0A 9F7A ( extbas.asm):01547 STX CINPTR SAVE NEW CHARACTER BUFFER 8D0C 0A79 ( extbas.asm):01548 DEC CINCTR DECREMENT CHARACTER COUNTER 8D0E 2602 ( extbas.asm):01549 BNE L8D12 RETURN IF BUFFER NOT EMPTY 8D10 8DD0 ( extbas.asm):01550 BSR L8CE2 GO REFILL THE CHARACTER BUFFER 8D12 35F6 ( extbas.asm):01551 L8D12 PULS A,B,X,Y,U,PC RESTORE REGISTERS AND RETURN ( extbas.asm):01552 * TRANSMIT FILE NAME - READ FILE STATUS FROM SENDER 8D14 4F ( extbas.asm):01553 L8D14 CLRA RESET ATTEMPT COUNTER 8D15 3416 ( extbas.asm):01554 PSHS X,B,A SAVE SPACE ON STACK FOR TEMP VARIABLES 8D17 31E4 ( extbas.asm):01555 LEAY ,S STACK TO Y (TFR S,Y) - SAVE VARIABLE POINTER 8D19 2002 ( extbas.asm):01556 BRA L8D1D 8D1B 8D2B ( extbas.asm):01557 L8D1B BSR L8D48 INCREMENT ATTEMPT COUNTER 8D1D 868A ( extbas.asm):01558 L8D1D LDA #$8A * GET FILE REQUEST CONTROL CODE 8D1F 8D37 ( extbas.asm):01559 BSR L8D58 * AND TRANSMIT IT 8D21 26F8 ( extbas.asm):01560 BNE L8D1B BRANCH IF NO ECHO OR ERROR 8D23 8E01D2 ( extbas.asm):01561 LDX #CFNBUF+1 POINT TO CASS FILE NAME BUFFER 8D26 A680 ( extbas.asm):01562 L8D26 LDA ,X+ GET CHARACTER FROM NAME BUFFER 8D28 BD8E04 ( extbas.asm):01563 JSR >L8E04 OUTPUT IT TO RS 232 PORT 8D2B 8C01DA ( extbas.asm):01564 CMPX #CFNBUF+9 COMPARE TO END OF BUFFER 8D2E 26F6 ( extbas.asm):01565 BNE L8D26 LOOP UNTIL DONE 8D30 8D30 ( extbas.asm):01566 BSR L8D62 OUTPUT CHECK BYTE AND LOOK FOR ACKNOWLEDGE 8D32 26E7 ( extbas.asm):01567 BNE L8D1B TRANSMIT NAME AGAIN IF NO ACKNOWLEDGE 8D34 8D3C ( extbas.asm):01568 BSR L8D72 GET FILE TYPE $FF = NOT FOUND 8D36 26E3 ( extbas.asm):01569 BNE L8D1B BRANCH IF ERROR 8D38 A722 ( extbas.asm):01570 STA $02,Y SAVE FILE TYPE 8D3A 8D36 ( extbas.asm):01571 BSR L8D72 READ ASCII FLAG 8D3C 26DD ( extbas.asm):01572 BNE L8D1B BRANCH IF ERROR 8D3E A723 ( extbas.asm):01573 STA $03,Y SAVE ASCII FLAG 8D40 8D29 ( extbas.asm):01574 BSR L8D6B READ CHECK BYTE FROM SENDER 8D42 26D7 ( extbas.asm):01575 BNE L8D1B BRANCH IF NO CHECKBYTE MATCH 8D44 3262 ( extbas.asm):01576 LEAS $02,S PURGE ATTEMPT COUNTER & CHECK BYTE FROM STACK 8D46 3586 ( extbas.asm):01577 PULS A,B,PC RETURN FILE STATUS IN ACCD ( extbas.asm):01578 * INCREMENT ATTEMPT COUNTER - AFTER 5 TRIES, GIVE UP (IO ERROR) 8D48 6CA4 ( extbas.asm):01579 L8D48 INC ,Y INCREMENT ATTEMPT COUNTER 8D4A A6A4 ( extbas.asm):01580 LDA ,Y GET ATTEMPT COUNTER 8D4C 8105 ( extbas.asm):01581 CMPA #$05 IS THIS THE FIFTH TRY? 8D4E 251A ( extbas.asm):01582 BLO L8D6A NO 8D50 86BC ( extbas.asm):01583 LDA #$BC YES ; TIME TO QUIT-GET ABORT CODE 8D52 BD8E0C ( extbas.asm):01584 JSR >L8E0C OUTPUT ABORT CODE OVER THE RS 232 PORT 8D55 7EA619 ( extbas.asm):01585 JMP >LA619 ‘IO’ ERROR ( extbas.asm):01586 * ECHO CHECK - OUTPUT A CHARACTER, READ A CHARACTER AND ( extbas.asm):01587 * COMPARE IT TO THE OUTPUT CHARACTER. Z=0 IF NO MATCH OR ERROR 8D58 3402 ( extbas.asm):01588 L8D58 PSHS A SAVE COMPARE CHARACTER ON STACK 8D5A 8D5C ( extbas.asm):01589 BSR L8DB8 SEND A CHARACTER OUT 8D5C 2602 ( extbas.asm):01590 BNE L8D60 BRANCH IF READ ERROR 8D5E A1E4 ( extbas.asm):01591 CMPA ,S COMPARE RECEIVED CHARACTER TO TRANSMITTED CHARACTER 8D60 3582 ( extbas.asm):01592 L8D60 PULS A,PC RESTORE COMPARE CHARACTER AND RETURN ( extbas.asm):01593 * TRANSMIT XOR CHECKBYTE AND READ ACKNOWLEGE ($C8) ( extbas.asm):01594 * RETURN ZERO FLAG SET IF NO ERROR AND ACKNOWLEGE 8D62 A621 ( extbas.asm):01595 L8D62 LDA $01,Y GET XOR CHECKBYTE 8D64 8D52 ( extbas.asm):01596 BSR L8DB8 OUTPUT XOR CHECKBYTE AND READ ONE BYTE 8D66 2602 ( extbas.asm):01597 BNE L8D6A BRANCH IF READ ERROR 8D68 81C8 ( extbas.asm):01598 CMPA #$C8 COMPARE INPUT BYTE TO ACKNOWLEDGE CODE 8D6A 39 ( extbas.asm):01599 L8D6A RTS ( extbas.asm):01600 * READ XOR CHECKBYTE THEN LOAD ACCUMULATED XOR CHECKBYTE. ( extbas.asm):01601 * SET ZERO FLAG IF ACCUMULATED CHECK BYTE = 0 8D6B 8D05 ( extbas.asm):01602 L8D6B BSR L8D72 INPUT A CHARACTER FROM RS 232 8D6D 26FB ( extbas.asm):01603 BNE L8D6A BRANCH IF TIMEOUT 8D6F A621 ( extbas.asm):01604 LDA $01,Y GET CHECK BYTE 8D71 39 ( extbas.asm):01605 RTS 8D72 8D48 ( extbas.asm):01606 L8D72 BSR L8DBC INPUT A CHARACTER FROM RS 232 8D74 3403 ( extbas.asm):01607 PSHS A,CC SAVE CHARACTER AND ZERO FLAG ON STACK 8D76 A821 ( extbas.asm):01608 EORA $01,Y * EXCLUSIVE OR INPUT 8D78 A721 ( extbas.asm):01609 STA $01,Y * CHARACTER WITH CHECK BYTE 8D7A 3583 ( extbas.asm):01610 PULS CC,A,PC RESTORE CHARACTER AND ZERO FLAG ( extbas.asm):01611 * REQUEST A BLOCK FROM RS 232 INPUT - ( extbas.asm):01612 * LOAD THE RECEIVED DATA INTO THE BUFFER POINTED TO BY X ( extbas.asm):01613 * U REGFISTER CONTAINS THE BLOCK NUMBER; RETURN Z=1 IF NO ( extbas.asm):01614 * ERRORS, CHARACTER COUNT IN ACCA; ACCA = 0 IF FILE EMPTY 8D7C 4F ( extbas.asm):01615 L8D7C CLRA RESET ATTEMPT COUNTER 8D7D 3476 ( extbas.asm):01616 PSHS U,Y,X,B,A SAVE SPACE FOR STACK BUFFER 8D7F 6867 ( extbas.asm):01617 ASL $07,S * 6,7 S (U REG) CONTAIN THE 14 BIT BLOCK NUMBER - 8D81 6966 ( extbas.asm):01618 ROL $06,S * PUT THE BOTTOM 7 BITS IN 7,S AND THE 8D83 6467 ( extbas.asm):01619 LSR $07,S * TOP SEVEN BITS IN 6,S 8D85 31E4 ( extbas.asm):01620 LEAY ,S STACK POINTER TO Y (TFR S,Y) 8D87 2002 ( extbas.asm):01621 BRA L8D8B 8D89 8DBD ( extbas.asm):01622 L8D89 BSR L8D48 INCREMENT ATTEMPT COUNTER 8D8B 8697 ( extbas.asm):01623 L8D8B LDA #$97 * TRANSMIT A BLOCK REQUEST CODE, ECHO 8D8D 8DC9 ( extbas.asm):01624 BSR L8D58 * CHECK AND RESET CHECK BYTE 8D8F 26F8 ( extbas.asm):01625 BNE L8D89 BRANCH IF NO MATCH OR ERROR 8D91 A626 ( extbas.asm):01626 LDA $06,Y * SEND OUT HIGH ORDER SEVEN BITS 8D93 8D6F ( extbas.asm):01627 BSR L8E04 * OF BLOCK NUMBER 8D95 A627 ( extbas.asm):01628 LDA $07,Y = SEND OUT LOW ORDER SEVEN BITS 8D97 8D6B ( extbas.asm):01629 BSR L8E04 = OF BLOCK NUMBER 8D99 8DC7 ( extbas.asm):01630 BSR L8D62 TRANSMIT CHECK BYTE AND GET ACKNOWLEDGE 8D9B 26EC ( extbas.asm):01631 BNE L8D89 BRANCH IF ERROR OR NO ACKNOWLEDGE 8D9D 8DD3 ( extbas.asm):01632 BSR L8D72 READ CHARACTER COUNT 8D9F 26E8 ( extbas.asm):01633 BNE L8D89 BRANCH IF READ ERROR 8DA1 A724 ( extbas.asm):01634 STA $04,Y SAVE CHARACTER COUNT IN STACK VARIABLES 8DA3 AE22 ( extbas.asm):01635 LDX $02,Y GET VARIABLES POINTER FROM STACK BUFFER ( extbas.asm):01636 * READ IN A BLOCK OF 128 CHARACTERS - THE HOST WILL TRANSMIT 128 ( extbas.asm):01637 * CHARACTERS REGARDLESS OF HOW MANY ARE VALID. OF HOW MANY ARE VALID. 8DA5 C680 ( extbas.asm):01638 LDB #128 128 CHARACTERS/BUFFER 8DA7 8DC9 ( extbas.asm):01639 L8DA7 BSR L8D72 READ A CHARACTER 8DA9 26DE ( extbas.asm):01640 BNE L8D89 RESTART PROCESS IF READ ERROR 8DAB A780 ( extbas.asm):01641 STA ,X+ SAVE THE CHARACTER IN BUFFER 8DAD 5A ( extbas.asm):01642 DECB DECREMENT CHARACTER COUNTER 8DAE 26F7 ( extbas.asm):01643 BNE L8DA7 BRANCH IF NOT DONE 8DB0 8DB9 ( extbas.asm):01644 BSR L8D6B INPUT XOR CHECKBYTE 8DB2 26D5 ( extbas.asm):01645 BNE L8D89 RESTART PROCESS IF READ ERROR OR BAD CHECKBYTE 8DB4 3264 ( extbas.asm):01646 LEAS $04,S PURGE ATTEMPT COUNTER, CHECK BYTE AND LOAD ADDRESS FROM STACK 8DB6 3596 ( extbas.asm):01647 PULS A,B,X,PC RETURN CHARACTER COUNT IN ACCA 8DB8 6F21 ( extbas.asm):01648 L8DB8 CLR $01,Y CLEAR CHECK BYTE 8DBA 8D50 ( extbas.asm):01649 BSR L8E0C OUTPUT A CHARACTER OVER RS 232 PORT ( extbas.asm):01650 * READ A CHARACTER FROM THE RS 232 INPUT PORT. ( extbas.asm):01651 * RETURN CHARACTER IN ACCA. EXIT WITH Z=0 ( extbas.asm):01652 * FOR TIMEOUT ERROR, Z = 1 FOR VALID BYTE INPUT. 8DBC 4F ( extbas.asm):01653 L8DBC CLRA CLEAR ATTEMPT COUNTER 8DBD 3415 ( extbas.asm):01654 PSHS X,B,CC SAVE REGISTERS AND INTERRUPT STATUS 8DBF 1A50 ( extbas.asm):01655 ORCC #$50 DISABLE INTERRUPTS 8DC1 96E7 ( extbas.asm):01656 LDA TIMOUT GET TIMEOUT VARIABLE DELAY 8DC3 9E8A ( extbas.asm):01657 LDX ZERO X=0: TIMEOUT CONSTANT DELAY 8DC5 8D1F ( extbas.asm):01658 L8DC5 BSR L8DE6 GO GET RS 232 STATUS 8DC7 24FC ( extbas.asm):01659 BCC L8DC5 LOOP IF SPACING 8DC9 8D1B ( extbas.asm):01660 L8DC9 BSR L8DE6 GET RS 232 STATUS 8DCB 25FC ( extbas.asm):01661 BLO L8DC9 LOOP IF MARKING 8DCD 8D2A ( extbas.asm):01662 BSR L8DF9 DELAY 1/2 BIT TIME 8DCF C601 ( extbas.asm):01663 LDB #$01 * GET BIT SHIFT COUNTER AND BIT 8DD1 3404 ( extbas.asm):01664 PSHS B * MASK AND SAVE IT ON STACK 8DD3 4F ( extbas.asm):01665 CLRA RESET DATA BYTE 8DD4 8D21 ( extbas.asm):01666 L8DD4 BSR L8DF7 GO DELAY ONE BIT TIME 8DD6 F6FF22 ( extbas.asm):01667 LDB PIA1+2 * RS 232 INPUT TO 8DD9 56 ( extbas.asm):01668 RORB * CARRY FLAG 8DDA 2402 ( extbas.asm):01669 BCC L8DDE BRANCH IF RS 232 INPUT = 0 (SPACING) 8DDC AAE4 ( extbas.asm):01670 ORA ,S IF MARKING, ‘OR’ A 1 BIT INTO DATA BYTE 8DDE 68E4 ( extbas.asm):01671 L8DDE ASL ,S SHIFT BIT COUNTER ONE BIT TO LEFT 8DE0 24F2 ( extbas.asm):01672 BCC L8DD4 CARRY WILL BE SET AFTER 8 SHIFTS 8DE2 3261 ( extbas.asm):01673 LEAS $01,S PULL BIT COUNTER OFF THE STACK 8DE4 3595 ( extbas.asm):01674 PULS CC,B,X,PC RESTORE INTERRUPT STATUS & RETURN ( extbas.asm):01675 * PUT RS 232 STATUS INTO THE CARRY FLAG AND CHECK FOR TIMEOUT 8DE6 F6FF22 ( extbas.asm):01676 L8DE6 LDB PIA1+2 * RS 232 INPUT TO 8DE9 56 ( extbas.asm):01677 RORB * CARRY FLAG 8DEA 3001 ( extbas.asm):01678 LEAX $01,X = INCREMENT CONSTANT TIMEOUT 8DEC 2608 ( extbas.asm):01679 BNE L8DF6 = DELAY, RETURN IF <> 0 8DEE 4A ( extbas.asm):01680 DECA * DECREMENT VARIABLE TIMEOUT 8DEF 2605 ( extbas.asm):01681 BNE L8DF6 * DELAY: RETURN IF <> 0 ( extbas.asm):01682 * DLOAD HAS TIMED OUT HERE 8DF1 3262 ( extbas.asm):01683 LEAS $02,S PURGE RETURN ADDRESS OFF STACK 8DF3 3515 ( extbas.asm):01684 PULS CC,B,X CLEAN UP STACK/RESTORE INTERRUPTS 8DF5 4C ( extbas.asm):01685 INCA SET ACCA = 1; ZERO FLAG = 0 8DF6 39 ( extbas.asm):01686 L8DF6 RTS ( extbas.asm):01687 * DELAY LOOP -- COUNT DOWN DLBAUD 8DF7 8D00 ( extbas.asm):01688 L8DF7 BSR L8DF9 CALL DELAY ROUTINE 8DF9 3402 ( extbas.asm):01689 L8DF9 PSHS A SAVE ACCA 8DFB 96E6 ( extbas.asm):01690 LDA DLBAUD GET DLOAD DELAY - 1/2 BIT TIME DELAY 8DFD 21FE ( extbas.asm):01691 L8DFD BRN L8DFD DUMMY INST - JUST ADD TO DELAY 8DFF 4A ( extbas.asm):01692 DECA DEC DELAY TIMER 8E00 26FB ( extbas.asm):01693 BNE L8DFD NOT DONE 8E02 3582 ( extbas.asm):01694 PULS A,PC RESTORE ACCA AND RETURN ( extbas.asm):01695 * 8E04 3402 ( extbas.asm):01696 L8E04 PSHS A SAVE CHARACTER ON STACK 8E06 A821 ( extbas.asm):01697 EORA $01,Y * EOR CHARACTER WITH 1,Y AND 8E08 A721 ( extbas.asm):01698 STA $01,Y * SAVE RESULT IN 1,Y 8E0A 3502 ( extbas.asm):01699 PULS A GET CHARACTER BACK ( extbas.asm):01700 * SEND CHAR IN ACCA OUT OVER RS232 OUTPUT 8E0C 3407 ( extbas.asm):01701 L8E0C PSHS B,A,CC SAVE ACCD AND INTERRUPT STATUS 8E0E 1A50 ( extbas.asm):01702 ORCC #$50 DISABLE INTERRUPTS 8E10 8DE5 ( extbas.asm):01703 BSR L8DF7 DELAY AWHILE 8E12 8DE3 ( extbas.asm):01704 BSR L8DF7 DELAY SOME MORE 8E14 7FFF20 ( extbas.asm):01705 CLR PIA1 SET R5232 OUTPUT TO SPACING 8E17 8DDE ( extbas.asm):01706 BSR L8DF7 DELAY SOME MORE - START BIT 8E19 C601 ( extbas.asm):01707 LDB #$01 BIT CTR - SEND 8 BITS 8E1B 3404 ( extbas.asm):01708 PSHS B SAVE BIT CTR ON STACK 8E1D A662 ( extbas.asm):01709 L8E1D LDA $02,S GET OUTPUT BYTE 8E1F A4E4 ( extbas.asm):01710 ANDA ,S AND IT W/THE BIT CTR 8E21 2702 ( extbas.asm):01711 BEQ L8E25 THIS BIT IN OUTPUT BYTE = 0 8E23 8602 ( extbas.asm):01712 LDA #$02 OUTPUT BIT = 1; SET R5232 TO MARKING 8E25 B7FF20 ( extbas.asm):01713 L8E25 STA PIA1 BET R5232 TO VALUE IN ACCA 8E28 8DCD ( extbas.asm):01714 BSR L8DF7 DELAY FOR AWHILE 8E2A 68E4 ( extbas.asm):01715 ASL ,S SHIFT BIT CTR 8E2C 24EF ( extbas.asm):01716 BCC L8E1D WHEN CARRY SET, 8 BITS DONE 8E2E 8602 ( extbas.asm):01717 LDA #$02 WHEN DONE, SET R5232 TO MARKING 8E30 B7FF20 ( extbas.asm):01718 STA PIA1 SET R5232 OUTPUT 8E33 3261 ( extbas.asm):01719 LEAS $01,S PULL BIT CTR OFF THE STACK 8E35 3587 ( extbas.asm):01720 PULS CC,A,B,PC RESTORE ACCD, INTERRUPTS & RETURN ( extbas.asm):01721 * PROCESS EXCLAMATION POINT 8E37 8601 ( extbas.asm):01722 L8E37 LDA #$01 * SET SPACES 8E39 97D9 ( extbas.asm):01723 STA VD9 * COUNTER = 1 ( extbas.asm):01724 * PROCESS STRING ITEM - LIST 8E3B 5A ( extbas.asm):01725 L8E3B DECB DECREMENT FORMAT STRING LENGTH COUNTER 8E3C BD8FD8 ( extbas.asm):01726 JSR >L8FD8 SEND A '+' TO CONSOLE OUT IF VDA <>0 8E3F 9DA5 ( extbas.asm):01727 JSR GETCCH GET CURRENT INPUT CHARACTER 8E41 10270093 ( extbas.asm):01728 LBEQ L8ED8 EXIT PRINT USING IF END OF LINE 8E45 D7D3 ( extbas.asm):01729 STB VD3 SAVE REMAINDER FORMAT STRING LENGTH 8E47 BDB156 ( extbas.asm):01730 JSR >LB156 EVALUATE EXPRESSION 8E4A BDB146 ( extbas.asm):01731 JSR >LB146 ‘TM’ ERROR IF NUMERIC VARIABLE 8E4D 9E52 ( extbas.asm):01732 LDX FPA0+2 * GET ITEM - LIST DESCRIPTOR ADDRESS 8E4F 9F4D ( extbas.asm):01733 STX V4D * AND SAVE IT IN V4D 8E51 D6D9 ( extbas.asm):01734 LDB VD9 GET SPACES COUNTER 8E53 BDB6AD ( extbas.asm):01735 JSR >LB6AD PUT ACCB BYTES INTO STRING SPACE & PUT DESCRIPTOR ON STRING STACK 8E56 BDB99F ( extbas.asm):01736 JSR >LB99F PRINT THE FORMATTED STRING TO CONSOLE OUT ( extbas.asm):01737 * PAD FORMAT STRING WITH SPACES IF ITEM - LIST STRING < FORMAT STRING LENGTH 8E59 9E52 ( extbas.asm):01738 LDX FPA0+2 POINT X TO FORMATTED STRING DESCRIPTOR ADDRESS 8E5B D6D9 ( extbas.asm):01739 LDB VD9 GET SPACES COUNTER 8E5D E084 ( extbas.asm):01740 SUBB ,X SUBTRACT LENGTH OF FORMATTED STRING 8E5F 5A ( extbas.asm):01741 L8E5F DECB DECREMENT DIFFERENCE 8E60 102B014F ( extbas.asm):01742 LBMI L8FB3 GO INTERPRET ANOTHER ITEM - LIST 8E64 BDB9AC ( extbas.asm):01743 JSR >LB9AC PAD FORMAT STRING WITH A SPACE 8E67 20F6 ( extbas.asm):01744 BRA L8E5F KEEP PADDING ( extbas.asm):01745 * PERCENT SIGN - PROCESS A %SPACES% COMMAND 8E69 D7D3 ( extbas.asm):01746 L8E69 STB VD3 * SAVE THE CURRENT FORMAT STRING 8E6B 9F0F ( extbas.asm):01747 STX TEMPTR * COUNTER AND POINTER 8E6D 8602 ( extbas.asm):01748 LDA #$02 INITIAL SPACES COUNTER = 2 8E6F 97D9 ( extbas.asm):01749 STA VD9 SAVE IN SPACES COUNTER 8E71 A684 ( extbas.asm):01750 L8E71 LDA ,X GET A CHARACTER FROM FORMAT STRING 8E73 8125 ( extbas.asm):01751 CMPA #'% COMPARE TO TERMINATOR CHARACTER 8E75 27C4 ( extbas.asm):01752 BEQ L8E3B BRANCH IF END OF SPACES COMMAND 8E77 8120 ( extbas.asm):01753 CMPA #$20 BLANK SPACE 8E79 2607 ( extbas.asm):01754 BNE L8E82 BRANCH IF ILLEGAL CHARACTER 8E7B 0CD9 ( extbas.asm):01755 INC VD9 ADD ONE TO SPACES COUNTER 8E7D 3001 ( extbas.asm):01756 LEAX $01,X MOVE FORMAT POINTER UP ONE 8E7F 5A ( extbas.asm):01757 DECB DECREMENT LENGTH COUNTER 8E80 26EF ( extbas.asm):01758 BNE L8E71 BRANCH IF NOT END OF FORMAT STRING 8E82 9E0F ( extbas.asm):01759 L8E82 LDX TEMPTR * RESTORE CURRENT FORMAT STRING COUNTER 8E84 D6D3 ( extbas.asm):01760 LDB VD3 * AND POINTER TO POSITION BEFORE SPACES COMMAND 8E86 8625 ( extbas.asm):01761 LDA #'% SEND A ‘%’ TO CONSOLE OUT AS A DEBUGGING AID ( extbas.asm):01762 * ERROR PROCESSOR - ILLEGAL CHARACTER OR BAD SYNTAX IN FORMAT STRING 8E88 BD8FD8 ( extbas.asm):01763 L8E88 JSR >L8FD8 SEND A ‘+' TO CONSOLE OUT IF VDA <> 0 8E8B BDA282 ( extbas.asm):01764 JSR PUTCHR SEND CHARACTER TO CONSOLE OUT 8E8E 2029 ( extbas.asm):01765 BRA L8EB9 GET NEXT CHARACTER IN FORMAT STRING ( extbas.asm):01766 * PRINT RAM HOOK 8E90 81CD ( extbas.asm):01767 XVEC9 CMPA #$CD USING TOKEN 8E92 2701 ( extbas.asm):01768 BEQ L8E95 BRANCH IF PRINT USING 8E94 39 ( extbas.asm):01769 RTS ( extbas.asm):01770 * PRINT USING ( extbas.asm):01771 * VDA IS USED AS A STATUS BYTE: BIT 6 = COMMA FORCE ( extbas.asm):01772 * BIT 5=LEADING ASTERISK FORCE; BIT 4 = FLOATING $ FORCE ( extbas.asm):01773 * BIT 3 = PRE SIGN FORCE; BIT 2 = POST SIGN FORCE; BIT 0 = EXPONENTIAL FORCE 8E95 3262 ( extbas.asm):01774 L8E95 LEAS $02,S PURGE RETURN ADDRESS OFF THE STACK 8E97 BDB158 ( extbas.asm):01775 JSR >LB158 EVALUATE FORMAT STRING 8E9A BDB146 ( extbas.asm):01776 JSR >LB146 ‘TM’ ERROR IF VARIABLE TYPE = NUMERIC 8E9D C63B ( extbas.asm):01777 LDB #'; CHECK FOR ITEM LIST SEPARATOR 8E9F BDB26F ( extbas.asm):01778 JSR >LB26F SYNTAX CHECK FOR ; 8EA2 9E52 ( extbas.asm):01779 LDX FPA0+2 * GET FORMAT STRING DESCRIPTOR ADDRESS 8EA4 9FD5 ( extbas.asm):01780 STX VD5 * AND SAVE IT IN VD5 8EA6 2006 ( extbas.asm):01781 BRA L8EAE GO PROCESS FORMAT STRING 8EA8 96D7 ( extbas.asm):01782 L8EA8 LDA VD7 *CHECK NEXT PRINT ITEM FLAG AND 8EAA 2708 ( extbas.asm):01783 BEQ L8EB4 *‘FC’ ERROR IF NO FURTHER PRINT ITEMS 8EAC 9ED5 ( extbas.asm):01784 LDX VD5 RESET FORMAT STRING POINTER TO START OF STRING 8EAE 0FD7 ( extbas.asm):01785 L8EAE CLR VD7 RESET NEXT PRINT ITEM FLAG 8EB0 E684 ( extbas.asm):01786 LDB ,X GET LENGTH OF FORMAT STRING 8EB2 2603 ( extbas.asm):01787 BNE L8EB7 INTERPRET FORMAT STRING IF LENGTH > 0 8EB4 7EB44A ( extbas.asm):01788 L8EB4 JMP >LB44A ‘FC’ ERROR IF FORMAT STRING = NULL 8EB7 AE02 ( extbas.asm):01789 L8EB7 LDX $02,X POINT X TO START OF FORMAT STRING ( extbas.asm):01790 * INTERPRET THE FORMAT STRING 8EB9 0FDA ( extbas.asm):01791 L8EB9 CLR VDA CLEAR THE STATUS BYTE 8EBB 0FD9 ( extbas.asm):01792 L8EBB CLR VD9 CLEAR LEFT DIGIT COUNTER 8EBD A680 ( extbas.asm):01793 LDA ,X+ GET A CHARACTER FROM FORMAT STRING 8EBF 8121 ( extbas.asm):01794 CMPA #'! EXCLAMATION POINT? 8EC1 1027FF72 ( extbas.asm):01795 LBEQ L8E37 YES - STRING TYPE FORMAT 8EC5 8123 ( extbas.asm):01796 CMPA #'# NUMBER SIGN? (DIGIT LOCATOR) 8EC7 275B ( extbas.asm):01797 BEQ L8F24 YES - NUMERIC TYPE FORMAT 8EC9 5A ( extbas.asm):01798 DECB DECREMENT FORMAT STRING LENGTH 8ECA 2616 ( extbas.asm):01799 BNE L8EE2 BRANCH IF NOT DONE 8ECC BD8FD8 ( extbas.asm):01800 JSR >L8FD8 SEND A ‘+‘ TO CONSOLE OUT IF VDA <> 0 8ECF BDA282 ( extbas.asm):01801 JSR PUTCHR SEND CHARACTER TO CONSOLE OUT 8ED2 9DA5 ( extbas.asm):01802 L8ED2 JSR GETCCH GET CURRENT CHARACTER FROM BASIC 8ED4 26D2 ( extbas.asm):01803 BNE L8EA8 BRANCH IF NOT END OF LINE 8ED6 96D7 ( extbas.asm):01804 LDA VD7 GET NEXT PRINT ITEM FLAG 8ED8 2603 ( extbas.asm):01805 L8ED8 BNE L8EDD BRANCH IF MORE PRINT ITEMS 8EDA BDB958 ( extbas.asm):01806 JSR >LB958 SEND A CARRIAGE RETURN TO CONSOLE OUT 8EDD 9ED5 ( extbas.asm):01807 L8EDD LDX VD5 POINT X TO FORMAT STRING DESCRIPTOR 8EDF 7EB659 ( extbas.asm):01808 JMP >LB659 RETURN ADDRESS AND LENGTH OF FORMAT STRING - EXIT PRINT USING 8EE2 812B ( extbas.asm):01809 L8EE2 CMPA #'+ CHECK FOR ‘+‘ (PRE-SIGN FORCE) 8EE4 2609 ( extbas.asm):01810 BNE L8EEF NO PLUS 8EE6 BD8FD8 ( extbas.asm):01811 JSR >L8FD8 SEND A ‘+' TO CONSOLE OUT IF VDA <> 0 8EE9 8608 ( extbas.asm):01812 LDA #$08 * LOAD THE STATUS BYTE WITH 8; 8EEB 97DA ( extbas.asm):01813 STA VDA * PRE-SIGN FORCE FLAG 8EED 20CC ( extbas.asm):01814 BRA L8EBB INTERPRET THE REST OF THE FORMAT STRING 8EEF 812E ( extbas.asm):01815 L8EEF CMPA #'. DECIMAL POINT? 8EF1 274E ( extbas.asm):01816 BEQ L8F41 YES 8EF3 8125 ( extbas.asm):01817 CMPA #'% PERCENT SIGN? 8EF5 1027FF70 ( extbas.asm):01818 LBEQ L8E69 YES 8EF9 A184 ( extbas.asm):01819 CMPA ,X COMPARE THE PRESENT FORMAT STRING INPUT ( extbas.asm):01820 * CHARACTER TO THE NEXT ONE IN THE STRING 8EFB 268B ( extbas.asm):01821 L8EFB BNE L8E88 NO MATCH - ILLEGAL CHARACTER ( extbas.asm):01822 * TWO CONSECUTIVE EQUAL CHARACTERS IN FORMAT STRING 8EFD 8124 ( extbas.asm):01823 CMPA #'$ DOLLAR SIGN? 8EFF 2719 ( extbas.asm):01824 BEQ L8F1A YES - MAKE THE DOLLAR SIGN FLOAT 8F01 812A ( extbas.asm):01825 CMPA #'* ASTERISK? 8F03 26F6 ( extbas.asm):01826 BNE L8EFB NO - ILLEGAL CHARACTER 8F05 96DA ( extbas.asm):01827 LDA VDA * GRAB THE STATUS BYTE AND BET BIT 5 8F07 8A20 ( extbas.asm):01828 ORA #$20 * TO INDICATE THAT THE OUTPUT WILL 8F09 97DA ( extbas.asm):01829 STA VDA * BE LEFT PADDED WITH ASTERISKS 8F0B C102 ( extbas.asm):01830 CMPB #2 = CHECK TO SEE IF THE $$ ARE THE LAST TWO 8F0D 2511 ( extbas.asm):01831 BLO L8F20 = CHARACTERS IN THE FORMAT STRING AND BRANCH IF SO 8F0F A601 ( extbas.asm):01832 LDA $01,X GET THE NEXT CHARACTER AFTER ** 8F11 8124 ( extbas.asm):01833 CMPA #'$ CHECK FOR **$ 8F13 260B ( extbas.asm):01834 BNE L8F20 CHECK FOR MORE CHARACTERS 8F15 5A ( extbas.asm):01835 DECB DECREMENT STRING LENGTH COUNTER 8F16 3001 ( extbas.asm):01836 LEAX $01,X MOVE FORMAT STRING POINTER UP ONE 8F18 0CD9 ( extbas.asm):01837 INC VD9 ADD ONE TO LEFT DIGIT COUNTER - FOR ASTERISK PAD AND ( extbas.asm):01838 * FLOATING DOLLAR SIGN COMBINATION 8F1A 96DA ( extbas.asm):01839 L8F1A LDA VDA * GET THE STATUS BYTE AND SET 8F1C 8A10 ( extbas.asm):01840 ORA #$10 * BIT 4 TO INDICATE A 8F1E 97DA ( extbas.asm):01841 STA VDA * FLOATING DOLLAR SIGN 8F20 3001 ( extbas.asm):01842 L8F20 LEAX $01,X MOVE FORMAT STRING POINTER UP ONE 8F22 0CD9 ( extbas.asm):01843 INC VD9 ADD ONE TO LEFT DIGIT (FLOATING $ OR ASTERISK PAD) ( extbas.asm):01844 * PROCESS CHARACTERS TO THE LEFT OF THE DECIMAL POINT IN THE FORMAT STRING 8F24 0FD8 ( extbas.asm):01845 L8F24 CLR VD8 CLEAR THE RIGHT DIGIT COUNTER 8F26 0CD9 ( extbas.asm):01846 L8F26 INC VD9 ADD ONE TO LEFT DIGIT COUNTER 8F28 5A ( extbas.asm):01847 DECB DECREMENT FORMAT STRING LENGTH COUNTER 8F29 2749 ( extbas.asm):01848 BEQ L8F74 BRANCH IF END OF FORMAT STRING 8F2B A680 ( extbas.asm):01849 LDA ,X+ GET THE NEXT FORMAT CHARACTER 8F2D 812E ( extbas.asm):01850 CMPA #'. DECIMAL POINT? 8F2F 271E ( extbas.asm):01851 BEQ L8F4F YES 8F31 8123 ( extbas.asm):01852 CMPA #'# NUMBER SIGN? 8F33 27F1 ( extbas.asm):01853 BEQ L8F26 YES 8F35 812C ( extbas.asm):01854 CMPA #', COMMA? 8F37 2621 ( extbas.asm):01855 BNE L8F5A NO 8F39 96DA ( extbas.asm):01856 LDA VDA * GET THE STATUS BYTE 8F3B 8A40 ( extbas.asm):01857 ORA #$40 * AND SET BIT 6 WHICH IS THE 8F3D 97DA ( extbas.asm):01858 STA VDA * COMMA SEPARATOR FLAG 8F3F 20E5 ( extbas.asm):01859 BRA L8F26 PROCESS MORE CHARACTERS TO LEFT OF DECIMAL POINT ( extbas.asm):01860 * PROCESS DECIMAL POINT IF NO DIGITS TO LEFT OF IT 8F41 A684 ( extbas.asm):01861 L8F41 LDA ,X GET NEXT FORMAT CHARACTER 8F43 8123 ( extbas.asm):01862 CMPA #'# IS IT A NUMBER SIGN? 8F45 1026FF3F ( extbas.asm):01863 LBNE L8E88 NO 8F49 8601 ( extbas.asm):01864 LDA #1 * SET THE RIGHT DIGIT COUNTER TO 1 - 8F4B 97D8 ( extbas.asm):01865 STA VD8 * ALLOW ONE SPOT FOR DECIMAL POINT 8F4D 3001 ( extbas.asm):01866 LEAX $01,X MOVE FORMAT POINTER UP ONE ( extbas.asm):01867 * PROCESS DIGITS TO RIGHT OF DECIMAL POINT 8F4F 0CD8 ( extbas.asm):01868 L8F4F INC VD8 ADD ONE TO RIGHT DIGIT COUNTER 8F51 5A ( extbas.asm):01869 DECB DECREMENT FORMAT LENGTH COUNTER 8F52 2720 ( extbas.asm):01870 BEQ L8F74 BRANCH IF END OF FORMAT STRING 8F54 A680 ( extbas.asm):01871 LDA ,X+ GET A CHARACTER FROM FORMAT STRING 8F56 8123 ( extbas.asm):01872 CMPA #'# IS IT NUMBER SIGN? 8F58 27F5 ( extbas.asm):01873 BEQ L8F4F YES - KEEP CHECKING ( extbas.asm):01874 * CHECK FOR EXPONENTIAL FORCE 8F5A 815E ( extbas.asm):01875 L8F5A CMPA #$5E CHECK FOR UP ARROW 8F5C 2616 ( extbas.asm):01876 BNE L8F74 NO UP ARROW 8F5E A184 ( extbas.asm):01877 CMPA ,X IS THE NEXT CHARACTER AN UP ARROW? 8F60 2612 ( extbas.asm):01878 BNE L8F74 NO 8F62 A101 ( extbas.asm):01879 CMPA $01,X AND THE NEXT CHARACTER? 8F64 260E ( extbas.asm):01880 BNE L8F74 NO 8F66 A102 ( extbas.asm):01881 CMPA $02,X HOW ABOUT THE 4TH CHARACTER? 8F68 260A ( extbas.asm):01882 BNE L8F74 NO, ALSO 8F6A C104 ( extbas.asm):01883 CMPB #4 * CHECK TO SEE IF THE 4 UP ARROWS ARE IN THE 8F6C 2506 ( extbas.asm):01884 BLO L8F74 * FORMAT STRING AND BRANCH IF NOT 8F6E C004 ( extbas.asm):01885 SUBB #4 = MOVE POINTER UP 4 AND SUBTRACT 8F70 3004 ( extbas.asm):01886 LEAX $04,X = FOUR FROM LENGTH 8F72 0CDA ( extbas.asm):01887 INC VDA INCREMENT STATUS BYTE - EXPONENTIAL FORM ( extbas.asm):01888 * CHECK FOR A PRE OR POST - SIGN FORCE AT END OF FORMAT STRING 8F74 301F ( extbas.asm):01889 L8F74 LEAX $-01,X MOVE POINTER BACK ONE 8F76 0CD9 ( extbas.asm):01890 INC VD9 ADD ONE TO LEFT DIGIT COUNTER FOR PRE-SIGN FORCE 8F78 96DA ( extbas.asm):01891 LDA VDA * PRE-SIGN 8F7A 8508 ( extbas.asm):01892 BITA #$08 * FORCE AND 8F7C 2618 ( extbas.asm):01893 BNE L8F96 * BRANCH IF SET 8F7E 0AD9 ( extbas.asm):01894 DEC VD9 DECREMENT LEFT DIGIT — NO PRE-SIGN FORCE 8F80 5D ( extbas.asm):01895 TSTB * CHECK LENGTH COUNTER AND BRANCH 8F81 2713 ( extbas.asm):01896 BEQ L8F96 * IF END OF FORMAT STRING 8F83 A684 ( extbas.asm):01897 LDA ,X GET NEXT FORMAT STRING CHARACTER 8F85 802D ( extbas.asm):01898 SUBA #'- CHECK FOR MINUS SIGN 8F87 2706 ( extbas.asm):01899 BEQ L8F8F BRANCH IF MINUS SIGN 8F89 81FE ( extbas.asm):01900 CMPA #('+)-('-) CHECK FOR PLUS SIGN 8F8B 2609 ( extbas.asm):01901 BNE L8F96 BRANCH IF NO PLUS SIGN 8F8D 8608 ( extbas.asm):01902 LDA #$08 GET THE PRE-SIGN FORCE FLAG 8F8F 8A04 ( extbas.asm):01903 L8F8F ORA #$04 ‘OR’ IN POST-SIGN FORCE FLAG 8F91 9ADA ( extbas.asm):01904 ORA VDA ‘OR’ IN THE STATUS BYTE 8F93 97DA ( extbas.asm):01905 STA VDA SAVE THE STATUS BYTE 8F95 5A ( extbas.asm):01906 DECB DECREMENT FORMAT STRING LENGTH ( extbas.asm):01907 * EVALUATE NUMERIC ITEM-LIST 8F96 9DA5 ( extbas.asm):01908 L8F96 JSR GETCCH GET CURRENT CHARACTER 8F98 1027FF3C ( extbas.asm):01909 LBEQ L8ED8 BRANCH IF END OF LINE 8F9C D7D3 ( extbas.asm):01910 STB VD3 SAVE FORMAT STRING LENGTH WHEN FORMAT EVALUATION ENDED 8F9E BDB141 ( extbas.asm):01911 JSR >LB141 EVALUATE EXPRESSION 8FA1 96D9 ( extbas.asm):01912 LDA VD9 GET THE LEFT DIGIT COUNTER 8FA3 9BD8 ( extbas.asm):01913 ADDA VD8 ADD IT TO THE RIGHT DIGIT COUNTER 8FA5 8111 ( extbas.asm):01914 CMPA #17 * 8FA7 1022249F ( extbas.asm):01915 LBHI LB44A *‘FC’ ERROR IF MORE THAN 16 DIGITS AND DECIMAL POiNT 8FAB BD8FE5 ( extbas.asm):01916 JSR >L8FE5 CONVERT ITEM-LIST TO FORMATTED ASCII STRING 8FAE 301F ( extbas.asm):01917 LEAX $-01,X MOVE BUFFER POINTER BACK ONE 8FB0 BDB99C ( extbas.asm):01918 JSR STRINOUT DISPLAY THE FORMATTED STRING TO CONSOLE OUT 8FB3 0FD7 ( extbas.asm):01919 L8FB3 CLR VD7 RESET NEXT PRINT ITEM FLAG 8FB5 9DA5 ( extbas.asm):01920 JSR GETCCH GET CURRENT INPUT CHARACTER 8FB7 270D ( extbas.asm):01921 BEQ L8FC6 BRANCH IF END OF LINE 8FB9 97D7 ( extbas.asm):01922 STA VD7 SAVE CURRENT CHARACTER (<>0) IN NEXT PRINT ITEM FLAG 8FBB 813B ( extbas.asm):01923 CMPA #'; * CHECK FOR ; - ITEM-LIST SEPARATOR AND 8FBD 2705 ( extbas.asm):01924 BEQ L8FC4 * BRANCH IF SEMICOLON 8FBF BDB26D ( extbas.asm):01925 JSR SYNCOMMA SYNTAX CHECK FOR COMMA 8FC2 2002 ( extbas.asm):01926 BRA L8FC6 PROCESS NEXT PRINT ITEM 8FC4 9D9F ( extbas.asm):01927 L8FC4 JSR GETNCH GET NEXT INPUT CHARACTER 8FC6 9ED5 ( extbas.asm):01928 L8FC6 LDX VD5 GET FORMAT STRING DESCRIPTOR ADDRESS 8FC8 E684 ( extbas.asm):01929 LDB ,X GET LENGTH OF FORMAT STRING 8FCA D0D3 ( extbas.asm):01930 SUBB VD3 SUBTRACT AMOUNT OF FORMAT STRING LEFT AFTER LAST PRINT ITEM 8FCC AE02 ( extbas.asm):01931 LDX $02,X *GET FORMAT STRING START ADDRESS AND ADVANCE 8FCE 3A ( extbas.asm):01932 ABX *POINTER TO START OF UNUSED FORMAT STRING 8FCF D6D3 ( extbas.asm):01933 LDB VD3 =GET AMOUNT OF UNUSED FORMAT STRING 8FD1 1026FEE4 ( extbas.asm):01934 LBNE L8EB9 =REINTERPRET FORMAT STRING FROM THAT POINT 8FD5 7E8ED2 ( extbas.asm):01935 JMP >L8ED2 REINTERPRET FORMAT STRING FROM THE START IF ENTIRELY ( extbas.asm):01936 * USED ON LAST PRINT ITEM ( extbas.asm):01937 * PRINT A ‘+‘ TO CONSOLE OUT IF THE STATUS BYTE <> 0 8FD8 3402 ( extbas.asm):01938 L8FD8 PSHS A RESTORE ACCA AND RETURN 8FDA 862B ( extbas.asm):01939 LDA #'+ GET ASCII PLUS SIGN 8FDC 0DDA ( extbas.asm):01940 TST VDA * CHECK THE STATUS BYTE AND 8FDE 2703 ( extbas.asm):01941 BEQ L8FE3 * RETURN IF = 0 8FE0 BDA282 ( extbas.asm):01942 JSR PUTCHR SEND A CHARACTER TO CONSOLE OUT 8FE3 3582 ( extbas.asm):01943 L8FE3 PULS A,PC RETURN ACCA AND RETURN ( extbas.asm):01944 * CONVERT ITEM-LIST TO DECIMAL ASCII STRING 8FE5 CE03DB ( extbas.asm):01945 L8FE5 LDU #STRBUF+4 POINT U TO STRING BUFFER 8FE8 C620 ( extbas.asm):01946 LDB #SPACE BLANK 8FEA 96DA ( extbas.asm):01947 LDA VDA * GET THE STATUS FLAG AND 8FEC 8508 ( extbas.asm):01948 BITA #$08 * CHECK FOR A PRE-SIGN FORCE 8FEE 2702 ( extbas.asm):01949 BEQ L8FF2 * BRANCH IF NO PRE-SIGN FORCE 8FF0 C62B ( extbas.asm):01950 LDB #'+ PLUS SIGN 8FF2 0D54 ( extbas.asm):01951 L8FF2 TST FP0SGN CHECK THE SIGN OF FPA0 8FF4 2A04 ( extbas.asm):01952 BPL L8FFA BRANCH IF POSITIVE 8FF6 0F54 ( extbas.asm):01953 CLR FP0SGN FORCE FPA0 SIGN TO BE POSITIVE 8FF8 C62D ( extbas.asm):01954 LDB #'- MINUS SIGN 8FFA E7C0 ( extbas.asm):01955 L8FFA STB ,U+ SAVE THE SIGN IN BUFFER 8FFC C630 ( extbas.asm):01956 LDB #'0 * PUT A ZERO INTO THE BUFFER 8FFE E7C0 ( extbas.asm):01957 STB ,U+ * 9000 8401 ( extbas.asm):01958 ANDA #$01 = CHECK THE EXPONENTIAL FORCE FLAG IN 9002 10260107 ( extbas.asm):01959 LBNE L910D = THE STATUS BYTE - BRANCH IF ACTIVE 9006 8EBDC0 ( extbas.asm):01960 LDX #LBDC0 POINT X TO FLOATING POINT 1E + 09 9009 BDBCA0 ( extbas.asm):01961 JSR >LBCA0 COMPARE FPA0 TO (X) 900C 2B15 ( extbas.asm):01962 BMI L9023 BRANCH IF FPA0 < 1E+09 900E BDBDD9 ( extbas.asm):01963 JSR >LBDD9 CONVERT FP NUMBER TO ASCII STRING 9011 A680 ( extbas.asm):01964 L9011 LDA ,X+ * ADVANCE POINTER TO END OF 9013 26FC ( extbas.asm):01965 BNE L9011 * ASCII STRING (ZERO BYTE) 9015 A682 ( extbas.asm):01966 L9015 LDA ,-X = MOVE THE 9017 A701 ( extbas.asm):01967 STA $01,X = ENTIRE STRING 9019 8C03DA ( extbas.asm):01968 CMPX #STRBUF+3 = UP ONE 901C 26F7 ( extbas.asm):01969 BNE L9015 = BYTE 901E 8625 ( extbas.asm):01970 LDA #'% * INSERT A % SIGN AT START OF 9020 A784 ( extbas.asm):01971 STA ,X * STRING - OVERFLOW ERROR 9022 39 ( extbas.asm):01972 RTS 9023 964F ( extbas.asm):01973 L9023 LDA FP0EXP = GET EXPONENT OF FPA0 9025 9747 ( extbas.asm):01974 STA V47 = AND SAVE IT IN V47 9027 2703 ( extbas.asm):01975 BEQ L902C BRANCH IF FPA0 = 0 9029 BD91CD ( extbas.asm):01976 JSR >L91CD CONVERT FPA0 TO NUMBER WITH 9 SIGNIFICANT ( extbas.asm):01977 * PLACES TO LEFT OF DECIMAL POINT 902C 9647 ( extbas.asm):01978 L902C LDA V47 GET BASE 10 EXPONENT OFFSET 902E 102B0081 ( extbas.asm):01979 LBMI L90B3 BRANCH IF FPA0 < 100,000,000 9032 40 ( extbas.asm):01980 NEGA * CALCULATE THE NUMBER OF LEADING ZEROES TO INSERT - 9033 9BD9 ( extbas.asm):01981 ADDA VD9 * SUBTRACT BASE 10 EXPONENT OFFSET AND 9 (FPA0 HAS 9035 8009 ( extbas.asm):01982 SUBA #$09 * 9 PLACES TO LEFT OF EXPONENT) FROM LEFT DIGIT COUNTER 9037 BD90EA ( extbas.asm):01983 JSR >L90EA PUT ACCA ZEROES IN STRING BUFFER 903A BD9263 ( extbas.asm):01984 JSR >L9263 INITIALIZE DECIMAL POINT AND COMMA COUNTERS 903D BD9202 ( extbas.asm):01985 JSR >L9202 CONVERT FPA0 TO DECIMAL ASCII IN THE STRING BUFFER 9040 9647 ( extbas.asm):01986 LDA V47 * GET BASE 10 EXPONENT AND PUT THAT MANY 9042 BD9281 ( extbas.asm):01987 JSR >L9281 * ZEROES IN STRING BUFFER - STOP AT DECIMAL POINT 9045 9647 ( extbas.asm):01988 LDA V47 WASTED INSTRUCTION - SERVES NO PURPOSE 9047 BD9249 ( extbas.asm):01989 JSR >L9249 CHECK FOR DECIMAL POINT 904A 96D8 ( extbas.asm):01990 LDA VD8 GET THE RIGHT DIGIT COUNTER 904C 2602 ( extbas.asm):01991 BNE L9050 BRANCH IF RIGHT DIGlT COUNTER <> 0 904E 335F ( extbas.asm):01992 LEAU $-01,U * MOVE BUFFER POINTER BACK ONE - DELETE ( extbas.asm):01993 * * DECIMAL POINT IF NO RIGHT DIGITS SPECiFIED 9050 4A ( extbas.asm):01994 L9050 DECA SUBTRACT ONE (DECIMAL POINT) 9051 BD90EA ( extbas.asm):01995 JSR >L90EA PUT ACCA ZEROES INTO BUFFER (TRAILING ZEROES) 9054 BD9185 ( extbas.asm):01996 L9054 JSR >L9185 INSERT ASTERISK PADDING, FLOATING $, AND POST-SIGN 9057 4D ( extbas.asm):01997 TSTA WAS THERE A POST-SIGN? 9058 2706 ( extbas.asm):01998 BEQ L9060 NO 905A C12A ( extbas.asm):01999 CMPB #'* IS THE FIRST CHARACTER AN $? 905C 2702 ( extbas.asm):02000 BEQ L9060 YES 905E E7C0 ( extbas.asm):02001 STB ,U+ STORE THE POST-SIGN 9060 6FC4 ( extbas.asm):02002 L9060 CLR ,U CLEAR THE LAST CHARACTER IN THE BUFFER ( extbas.asm):02003 * ( extbas.asm):02004 * REMOVE ANY EXTRA BLANKS OR ASTERISKS FROM THE ( extbas.asm):02005 * STRING BUFFER TO THE LEFT OF THE DECIMAL POINT 9062 8E03DA ( extbas.asm):02006 LDX #STRBUF+3 POINT X TO THE START OF THE BUFFER 9065 3001 ( extbas.asm):02007 L9065 LEAX $01,X MOVE BUFFER POINTER UP ONE 9067 9F0F ( extbas.asm):02008 STX TEMPTR SAVE BUFFER POINTER IN TEMPTR 9069 963A ( extbas.asm):02009 LDA VARPTR+1 * GET ADDRESS OF DECIMAL POINT IN BUFFER, SUBTRACT 906B 9010 ( extbas.asm):02010 SUBA TEMPTR+1 * CURRENT POSITION AND SUBTRACT LEFT DIGIT COUNTER - 906D 90D9 ( extbas.asm):02011 SUBA VD9 * THE RESULT WILL BE ZERO WHEN TEMPTR+1 IS POINTING ( extbas.asm):02012 * TO THE FIRST DIGIT OF THE FORMAT STRING 906F 2738 ( extbas.asm):02013 BEQ L90A9 RETURN IF NO DIGITS TO LEFT OF THE DECiMAL POINT 9071 A684 ( extbas.asm):02014 LDA ,X GET THE CURRENT BUFFER CHARACTER 9073 8120 ( extbas.asm):02015 CMPA #SPACE SPACE? 9075 27EE ( extbas.asm):02016 BEQ L9065 YES - ADVANCE POINTER 9077 812A ( extbas.asm):02017 CMPA #'* ASTERISK? 9079 27EA ( extbas.asm):02018 BEQ L9065 YES - ADVANCE POINTER 907B 4F ( extbas.asm):02019 CLRA A ZERO ON THE STACK IS END OF DATA POINTER 907C 3402 ( extbas.asm):02020 L907C PSHS A PUSH A CHARACTER ONTO THE STACK 907E A680 ( extbas.asm):02021 LDA ,X+ GET NEXT CHARACTER FROM BUFFER 9080 812D ( extbas.asm):02022 CMPA #'- MINUS SIGN? 9082 27F8 ( extbas.asm):02023 BEQ L907C YES 9084 812B ( extbas.asm):02024 CMPA #'+ PLUS SIGN? 9086 27F4 ( extbas.asm):02025 BEQ L907C YES 9088 8124 ( extbas.asm):02026 CMPA #'$ DOLLAR SIGN? 908A 27F0 ( extbas.asm):02027 BEQ L907C YES 908C 8130 ( extbas.asm):02028 CMPA #'0 ZERO? 908E 260E ( extbas.asm):02029 BNE L909E NO - ERROR 9090 A601 ( extbas.asm):02030 LDA $01,X GET CHARACTER FOLLOWING ZERO 9092 8D16 ( extbas.asm):02031 BSR L90AA CLEAR CARRY IF NUMERIC 9094 2508 ( extbas.asm):02032 BLO L909E BRANCH IF NOT A NUMERIC CHARACTER - ERROR 9096 3502 ( extbas.asm):02033 L9096 PULS A * PULL A CHARACTER OFF OF THE STACK 9098 A782 ( extbas.asm):02034 STA ,-X * AND PUT IT BACK IN THE STRING BUFFER 909A 26FA ( extbas.asm):02035 BNE L9096 * KEEP GOING UNTIL ZERO FLAG 909C 20C7 ( extbas.asm):02036 BRA L9065 KEEP CLEANING UP THE INPUT BUFFER 909E 3502 ( extbas.asm):02037 L909E PULS A = REMOVE THE CHARACTERS ON 90A0 4D ( extbas.asm):02038 TSTA = THE STACK AND EXIT WHEN 90A1 26FB ( extbas.asm):02039 BNE L909E = ZERO FLAG FOUND 90A3 9E0F ( extbas.asm):02040 LDX TEMPTR GET THE STRING BUFFER START POINTER 90A5 8625 ( extbas.asm):02041 LDA #'% * PUT A % SIGN BEFORE THE ERROR POSITION TO 90A7 A782 ( extbas.asm):02042 STA ,-X * INDICATE AN ERROR 90A9 39 ( extbas.asm):02043 L90A9 RTS ( extbas.asm):02044 * ( extbas.asm):02045 * CLEAR CARRY IF NUMERIC 90AA 8130 ( extbas.asm):02046 L90AA CMPA #'0 ASCII ZERO 90AC 2504 ( extbas.asm):02047 BLO L90B2 RETURN IF ACCA < ASCII 0 90AE 803A ( extbas.asm):02048 SUBA #'9+1 * 90B0 80C6 ( extbas.asm):02049 SUBA #-('9+1) *CARRY CLEAR IF NUMERIC 90B2 39 ( extbas.asm):02050 L90B2 RTS ( extbas.asm):02051 * ( extbas.asm):02052 * PROCESS AN ITEM-LIST WHICH IS < 100,000,000 90B3 96D8 ( extbas.asm):02053 L90B3 LDA VD8 GET RIGHT DIGIT COUNTER 90B5 2701 ( extbas.asm):02054 BEQ L90B8 BRANCH IF NO FORMATTED DIGITS TO THE RIGHT OF DECIMAL PT 90B7 4A ( extbas.asm):02055 DECA SUBTRACT ONE FOR DECIMAL POINT 90B8 9B47 ( extbas.asm):02056 L90B8 ADDA V47 *ADD THE BASE 10 EXPONENT OFFSET - ACCA CONTAINS THE ( extbas.asm):02057 * *NUMBER OF SHIFTS REQUIRED TO ADJUST FPA0 TO THE SPECIFIED ( extbas.asm):02058 * *NUMBER OF DlGITS TO THE RIGHT OF THE DECIMAL POINT 90BA 2B01 ( extbas.asm):02059 BMI L90BD IF ACCA >= 0 THEN NO SHIFTS ARE REQUIRED 90BC 4F ( extbas.asm):02060 CLRA FORCE SHIFT COUNTER = 0 90BD 3402 ( extbas.asm):02061 L90BD PSHS A SAVE INITIAL SHIFT COUNTER ON THE STACK 90BF 2A0A ( extbas.asm):02062 L90BF BPL L90CB EXIT ROUTINE IF POSITIVE 90C1 3402 ( extbas.asm):02063 PSHS A SAVE SHIFT COUNTER ON STACK 90C3 BDBB82 ( extbas.asm):02064 JSR >LBB82 DIVIDE FPA0 BY 10 - SHIFT ONE DIGIT TO RIGHT 90C6 3502 ( extbas.asm):02065 PULS A GET SHIFT COUNTER FROM THE STACK 90C8 4C ( extbas.asm):02066 INCA BUMP SHIFT COUNTER UP BY ONE 90C9 20F4 ( extbas.asm):02067 BRA L90BF CHECK FOR FURTHER DIVISION 90CB 9647 ( extbas.asm):02068 L90CB LDA V47 * GET BASE 10 EXPONENT OFFSET, ADD INITIAL SHIFT COUNTER 90CD A0E0 ( extbas.asm):02069 SUBA ,S+ * AND SAVE NEW BASE 10 EXPONENT OFFSET - BECAUSE 90CF 9747 ( extbas.asm):02070 STA V47 * FPA0 WAS SHIFTED ABOVE 90D1 8B09 ( extbas.asm):02071 ADDA #$09 =ADD NINE (SIGNIFICANT PLACES) AND BRANCH IF THERE ARE NO 90D3 2B19 ( extbas.asm):02072 BMI L90EE =ZEROES TO THE LEFT OF THE DECIMAL POINT IN THIS PRINT ITEM 90D5 96D9 ( extbas.asm):02073 LDA VD9 *DETERMINE HOW MANY FILLER ZEROES TO THE LEFT OF THE DECIMAL 90D7 8009 ( extbas.asm):02074 SUBA #$09 *POINT. GET THE NUMBER OF FORMAT PLACES TO LEFT OF DECIMAL 90D9 9047 ( extbas.asm):02075 SUBA V47 *POINT, SUBTRACT THE BASE 10 EXPONENT OFFSET AND THE CONSTANT 9 90DB 8D0D ( extbas.asm):02076 BSR L90EA *(UNNORMALIZATION)-THEN OUTPUT THAT MANY ZEROES TO THE BUFFER 90DD BD9263 ( extbas.asm):02077 JSR >L9263 INITIALIZE DECIMAL POINT AND COMMA COUNTERS 90E0 201D ( extbas.asm):02078 BRA L90FF PROCESS THE REMAINDER OF THE PRINT ITEM ( extbas.asm):02079 * ( extbas.asm):02080 * PUT (ACCA+1) ASCII ZEROES IN BUFFER 90E2 3402 ( extbas.asm):02081 L90E2 PSHS A SAVE ZERO COUNTER 90E4 8630 ( extbas.asm):02082 LDA #'0 * INSERT A ZERO INTO 90E6 A7C0 ( extbas.asm):02083 STA ,U+ * THE BUFFER 90E8 3502 ( extbas.asm):02084 PULS A RESTORE ZERO COUNTER ( extbas.asm):02085 * PUT ACCA ASCII ZEROES INTO THE BUFFER 90EA 4A ( extbas.asm):02086 L90EA DECA DECREMENT ZERO COUNTER 90EB 2AF5 ( extbas.asm):02087 BPL L90E2 BRANCH IF NOT DONE 90ED 39 ( extbas.asm):02088 RTS 90EE 96D9 ( extbas.asm):02089 L90EE LDA VD9 * GET THE LEFT DIGIT COUNTER AND PUT 90F0 8DF8 ( extbas.asm):02090 BSR L90EA * THAT MANY ZEROES IN THE STRiNG BUFFER 90F2 BD924D ( extbas.asm):02091 JSR >L924D PUT THE DECIMAL POINT IN THE STRING BUFFER 90F5 86F7 ( extbas.asm):02092 LDA #-9 *DETERMINE HOW MANY FILLER ZEROES BETWEEN THE DECIMAL POINT 90F7 9047 ( extbas.asm):02093 SUBA V47 *AND SIGNIFICANT DATA. SUBTRACT BASE 10 EXPONENT FROM -9 90F9 8DEF ( extbas.asm):02094 BSR L90EA *(UNNORMALIZATION) AND OUTPUT THAT MANY ZEROES TO BUFFER 90FB 0F45 ( extbas.asm):02095 CLR V45 CLEAR THE DECIMAL POINT COUNTER - SUPPRESS THE DECIMAL POINT 90FD 0FD7 ( extbas.asm):02096 CLR VD7 CLEAR THE COMMA COUNTER - SUPPRESS COMMAS 90FF BD9202 ( extbas.asm):02097 L90FF JSR >L9202 DECODE FPA0 INTO A DECIMAL ASCII STRING 9102 96D8 ( extbas.asm):02098 LDA VD8 GET THE RIGHT DIGIT COUNTER 9104 2602 ( extbas.asm):02099 BNE L9108 BRANCH IF RIGHT DIGIT COUNTER <> 0 9106 DE39 ( extbas.asm):02100 LDU VARPTR RESET BUFFER PTR TO THE DECIMAL POINT IF NO DIGITS TO RIGHT 9108 9B47 ( extbas.asm):02101 L9108 ADDA V47 *ADD BASE 10 EXPONENT - A POSITIVE ACCA WILL CAUSE THAT MANY ( extbas.asm):02102 * *FILLER ZEROES TO BE OUTPUT TO THE RIGHT OF LAST SIGNIFICANT DATA ( extbas.asm):02103 * *SIGNIFICANT DATA 910A 16FF43 ( extbas.asm):02104 LBRA L9050 INSERT LEADING ASTERISKS, FLOATING DOLLAR SIGN, ETC ( extbas.asm):02105 * ( extbas.asm):02106 * FORCE THE NUMERIC OUTPUT FORMAT TO BE EXPONENTIAL FORMAT 910D 964F ( extbas.asm):02107 L910D LDA FP0EXP * GET EXPONENT OF FPA0 AND 910F 3402 ( extbas.asm):02108 PSHS A * SAVE IT ON THE STACK 9111 2703 ( extbas.asm):02109 BEQ L9116 BRANCH IF FPA0 = 0 9113 BD91CD ( extbas.asm):02110 JSR >L91CD *CONVERT FPA0 INTO A NUMBER WITH 9 SIGNIFICANT ( extbas.asm):02111 * *DIGITS TO THE LEFT OF THE DECIMAL POINT 9116 96D8 ( extbas.asm):02112 L9116 LDA VD8 GET THE RIGHT DIGIT COUNTER 9118 2701 ( extbas.asm):02113 BEQ L911B BRANCH IF NO FORMATTED DIGITS TO THE RIGHT 911A 4A ( extbas.asm):02114 DECA SUBTRACT ONE FOR THE DECIMAL POINT 911B 9BD9 ( extbas.asm):02115 L911B ADDA VD9 ADD TO THE LEFT DIGIT COUNTER 911D 7F03DA ( extbas.asm):02116 CLR STRBUF+3 CLEAR BUFFER BYTE AS TEMPORARY STORAGE LOCATION 9120 D6DA ( extbas.asm):02117 LDB VDA * GET THE STATUS BYTE FOR A 9122 C404 ( extbas.asm):02118 ANDB #$04 * POST-BYTE FORCE; BRANCH IF 9124 2603 ( extbas.asm):02119 BNE L9129 * A POST-BYTE FORCE 9126 7303DA ( extbas.asm):02120 COM STRBUF+3 TOGGLE BUFFER BYTE TO -1 IF NO POST-BYTE FORCE 9129 BB03DA ( extbas.asm):02121 L9129 ADDA STRBUF+3 SUBTRACT 1 IF NO POST BYTE FORCE 912C 8009 ( extbas.asm):02122 SUBA #$09 *SUBTRACT 9 (DUE TO THE CONVERSION TO 9 ( extbas.asm):02123 * *SIGNIFICANT DIGITS TO LEFT OF DECIMAL POINT) 912E 3402 ( extbas.asm):02124 PSHS A =SAVE SHIFT COUNTER ON THE STACK - ACCA CONTAINS THE NUMBER ( extbas.asm):02125 * =OF SHIFTS REQUIRED TO ADJUST FPA0 FOR THE NUMBER OF ( extbas.asm):02126 * =FORMATTED PLACES TO THE RIGHT OF THE DECIMAL POINT. 9130 2A0A ( extbas.asm):02127 L9130 BPL L913C NO MORE SHIFTS WHEN ACCA >= 0 9132 3402 ( extbas.asm):02128 PSHS A SAVE SHIFT COUNTER 9134 BDBB82 ( extbas.asm):02129 JSR >LBB82 DIVIDE FPA0 BY 10 - SHIFT TO RIGHT ONE 9137 3502 ( extbas.asm):02130 PULS A RESTORE THE SHIFT COUNTER 9139 4C ( extbas.asm):02131 INCA ADD 1 TO SHIFT COUNTER 913A 20F4 ( extbas.asm):02132 BRA L9130 CHECK FOR FURTHER SHIFTING (DIVISION) 913C A6E4 ( extbas.asm):02133 L913C LDA ,S *GET THE INITIAL VALUE OF THE SHIFT COUNTER 913E 2B01 ( extbas.asm):02134 BMI L9141 *AND BRANCH IF SHIFTING HAS TAKEN PLACE 9140 4F ( extbas.asm):02135 CLRA RESET ACCA IF NO SHIFTING HAS TAKEN PLACE 9141 40 ( extbas.asm):02136 L9141 NEGA *CALCULATE THE POSITION OF THE DECIMAL POINT BY 9142 9BD9 ( extbas.asm):02137 ADDA VD9 *NEGATING SHIFT COUNTER, ADDING THE LEFT DIGIT COUNTER 9144 4C ( extbas.asm):02138 INCA *PLUS ONE AND THE POST-BYTE POSlTION, IF USED 9145 BB03DA ( extbas.asm):02139 ADDA STRBUF+3 * 9148 9745 ( extbas.asm):02140 STA V45 SAVE DECIMAL POINT COUNTER 914A 0FD7 ( extbas.asm):02141 CLR VD7 CLEAR COMMA COUNTER - NO COMMAS INSERTED 914C BD9202 ( extbas.asm):02142 JSR >L9202 CONVERT FPA0 INTO ASCII DECIMAL STRING 914F 3502 ( extbas.asm):02143 PULS A =GET THE INITIAL VALUE OF SHIFT COUNTER AND 9151 BD9281 ( extbas.asm):02144 JSR >L9281 =INSERT THAT MANY ZEROES INTO THE BUFFER 9154 96D8 ( extbas.asm):02145 LDA VD8 *GET THE RIGHT DIGIT COUNTER AND BRANCH 9156 2602 ( extbas.asm):02146 BNE L915A *IF NOT ZERO 9158 335F ( extbas.asm):02147 LEAU $-01,U MOVE BUFFER POINTER BACK ONE ( extbas.asm):02148 * CALCULATE VALUE OF EXPONENT AND PUT IN STRING BUFFER 915A E6E0 ( extbas.asm):02149 L915A LDB ,S+ GET ORIGINAL EXPONENT OF FPA0 915C 2709 ( extbas.asm):02150 BEQ L9167 BRANCH IF EXPONENT = 0 915E D647 ( extbas.asm):02151 LDB V47 GET BASE 10 EXPONENT 9160 CB09 ( extbas.asm):02152 ADDB #$09 ADD 9 FOR 9 SIGNIFICANT DIGIT CONVERSION 9162 D0D9 ( extbas.asm):02153 SUBB VD9 SUBTRACT LEFT DIGIT COUNTER 9164 F003DA ( extbas.asm):02154 SUBB STRBUF+3 ADD ONE TO EXPONENT IF POST-SIGN FORCE 9167 862B ( extbas.asm):02155 L9167 LDA #'+ PLUS SIGN 9169 5D ( extbas.asm):02156 TSTB TEST EXPONENT 916A 2A03 ( extbas.asm):02157 BPL L916F BRANCH IF POSITIVE EXPONENT 916C 862D ( extbas.asm):02158 LDA #'- MINUS SIGN 916E 50 ( extbas.asm):02159 NEGB CONVERT EXPONENT TO POSITIVE NUMBER 916F A741 ( extbas.asm):02160 L916F STA $01,U PUT SIGN OF EXPONENT IN STRING BUFFER 9171 8645 ( extbas.asm):02161 LDA #'E * PUT AN ‘E’ (EXPONENTIATION FLAG) IN 9173 A7C1 ( extbas.asm):02162 STA ,U++ * BUFFER AND SKIP OVER THE SIGN 9175 862F ( extbas.asm):02163 LDA #'0-1 INITIALIZE TENS DIGIT TO ASCII ZERO MINUS ONE ( extbas.asm):02164 *CONVERT BINARY EXPONENT IN ACCB TO ASCII VALUE IN ACCA 9177 4C ( extbas.asm):02165 L9177 INCA ADD ONE TO TENS DIGIT COUNTER 9178 C00A ( extbas.asm):02166 SUBB #10 *SUBTRACT 10 FROM EXPONENT AND ADD ONE TO TENS 917A 24FB ( extbas.asm):02167 BCC L9177 * DIGIT IF NO CARRY. TENS DIGIT DONE IF THERE IS A CARRY 917C CB3A ( extbas.asm):02168 ADDB #'9+1 ADD ASCII BIAS TO UNITS DIGIT 917E EDC1 ( extbas.asm):02169 STD ,U++ SAVE EXPONENT IN BUFFER 9180 6FC4 ( extbas.asm):02170 CLR ,U CLEAR FINAL BYTE IN BUFFER - PRINT TERMINATOR 9182 7E9054 ( extbas.asm):02171 JMP >L9054 INSERT ASTERISK PADDING, FLOATING DOLLAR SIGN, ETC. ( extbas.asm):02172 * INSERT ASTERISK PADDING, FLOATING $ AND PRE-SIGN 9185 8E03DB ( extbas.asm):02173 L9185 LDX #STRBUF+4 POINT X TO START OF PRINT ITEM BUFFER 9188 E684 ( extbas.asm):02174 LDB ,X * GET SIGN BYTE OF ITEM-LIST BUFFER 918A 3404 ( extbas.asm):02175 PSHS B * AND SAVE IT ON THE STACK 918C 8620 ( extbas.asm):02176 LDA #SPACE DEFAULT PAD WITH BLANKS 918E D6DA ( extbas.asm):02177 LDB VDA * GET STATUS BYTE AND CHECK FOR 9190 C520 ( extbas.asm):02178 BITB #$20 * ASTERISK LEFT PADDING 9192 3504 ( extbas.asm):02179 PULS B GET SIGN BYTE AGAIN 9194 2708 ( extbas.asm):02180 BEQ L919E BRANCH IF NO PADDING 9196 862A ( extbas.asm):02181 LDA #'* PAD WITH ASTERISK 9198 C120 ( extbas.asm):02182 CMPB #SPACE WAS THE FIRST BYTE A BLANK (POSITIVE)? 919A 2602 ( extbas.asm):02183 BNE L919E NO 919C 1F89 ( extbas.asm):02184 TFR A,B TRANSFER PAD CHARACTER TO ACCB 919E 3404 ( extbas.asm):02185 L919E PSHS B SAVE FIRST CHARACTER ON STACK 91A0 A780 ( extbas.asm):02186 L91A0 STA ,X+ STORE PAD CHARACTER IN BUFFER 91A2 E684 ( extbas.asm):02187 LDB ,X GET NEXT CHARACTER IN BUFFER 91A4 2710 ( extbas.asm):02188 BEQ L91B6 INSERT A ZERO IF END OF BUFFER 91A6 C145 ( extbas.asm):02189 CMPB #'E * CHECK FOR AN ‘E’ AND 91A8 270C ( extbas.asm):02190 BEQ L91B6 * PUT A ZERO BEFORE IT 91AA C130 ( extbas.asm):02191 CMPB #'0 = REPLACE LEADING ZEROES WITH 91AC 27F2 ( extbas.asm):02192 BEQ L91A0 = PAD CHARACTERS 91AE C12C ( extbas.asm):02193 CMPB #', * REPLACE LEADING COMMAS 91B0 27EE ( extbas.asm):02194 BEQ L91A0 * WITH PAD CHARACTERS 91B2 C12E ( extbas.asm):02195 CMPB #'. = CHECK FOR DECIMAL POINT 91B4 2604 ( extbas.asm):02196 BNE L91BA = AND DON’T PUT A ZERO BEFORE IT 91B6 8630 ( extbas.asm):02197 L91B6 LDA #'0 * REPLACE PREVIOUS CHARACTER 91B8 A782 ( extbas.asm):02198 STA ,-X * WITH A ZERO 91BA 96DA ( extbas.asm):02199 L91BA LDA VDA = GET STATUS BYTE, CHECK 91BC 8510 ( extbas.asm):02200 BITA #$10 = FOR FLOATING $ 91BE 2704 ( extbas.asm):02201 BEQ L91C4 = BRANCH IF NO FLOATING $ 91C0 C624 ( extbas.asm):02202 LDB #'$ * STORE A $ IN 91C2 E782 ( extbas.asm):02203 STB ,-X * BUFFER 91C4 8404 ( extbas.asm):02204 L91C4 ANDA #$04 CHECK PRE-SIGN FLAG 91C6 3504 ( extbas.asm):02205 PULS B GET SIGN CHARACTER 91C8 2602 ( extbas.asm):02206 BNE L91CC RETURN IF POST-SIGN REQUIRED 91CA E782 ( extbas.asm):02207 STB ,-X STORE FIRST CHARACTER 91CC 39 ( extbas.asm):02208 L91CC RTS ( extbas.asm):02209 * ( extbas.asm):02210 * CONVERT FPA0 INTO A NUMBER OF THE FORM - NNN,NNN,NNN X 10**M. ( extbas.asm):02211 * THE EXPONENT M WILL BE RETURNED IN V47 (BASE 10 EXPONENT). 91CD 3440 ( extbas.asm):02212 L91CD PSHS U SAVE BUFFER POINTER 91CF 4F ( extbas.asm):02213 CLRA INITIAL EXPONENT OFFSET = 0 91D0 9747 ( extbas.asm):02214 L91D0 STA V47 SAVE EXPONENT OFFSET 91D2 D64F ( extbas.asm):02215 LDB FP0EXP GET EXPONENT OF FPA0 91D4 C180 ( extbas.asm):02216 CMPB #$80 * COMPARE TO EXPONENT OF .5 91D6 2211 ( extbas.asm):02217 BHI L91E9 * AND BRANCH IF FPA0 > = 1.0 ( extbas.asm):02218 * IF FPA0 < 1.0, MULTIPLY IT BY 1E+09 UNTIL IT IS >= 1 91D8 8EBDC0 ( extbas.asm):02219 LDX #LBDC0 POINT X TO FP NUMBER (1E+09) 91DB BDBACA ( extbas.asm):02220 JSR >LBACA MULTIPLY FPA0 BY 1E+09 91DE 9647 ( extbas.asm):02221 LDA V47 GET EXPONENT OFFSET 91E0 8009 ( extbas.asm):02222 SUBA #$09 SUBTRACT 9 (BECAUSE WE MULTIPLIED BY 1E+09 ABOVE) 91E2 20EC ( extbas.asm):02223 BRA L91D0 CHECK TO SEE IF > 1.0 91E4 BDBB82 ( extbas.asm):02224 L91E4 JSR >LBB82 DIVIDE FPA0 BY 10 91E7 0C47 ( extbas.asm):02225 INC V47 INCREMENT EXPONENT OFFSET 91E9 8EBDBB ( extbas.asm):02226 L91E9 LDX #LBDBB POINT X TO FP NUMBER (999,999,999) 91EC BDBCA0 ( extbas.asm):02227 JSR >LBCA0 COMPARE FPA0 TO X 91EF 2EF3 ( extbas.asm):02228 BGT L91E4 BRANCH IF FPA0 > 999,999,999 91F1 8EBDB6 ( extbas.asm):02229 L91F1 LDX #LBDB6 POINT X TO FP NUMBER (99,999,999.9) 91F4 BDBCA0 ( extbas.asm):02230 JSR >LBCA0 COMPARE FPA0 TO X 91F7 2E07 ( extbas.asm):02231 BGT L9200 RETURN IF 999,999,999 > FPA0 > 99,999,999.9 91F9 BDBB6A ( extbas.asm):02232 JSR >LBB6A MULTIPLY FPA0 BY 10 91FC 0A47 ( extbas.asm):02233 DEC V47 DECREMENT EXPONENT OFFSET 91FE 20F1 ( extbas.asm):02234 BRA L91F1 KEEP UNNORMALIZING 9200 35C0 ( extbas.asm):02235 L9200 PULS U,PC RESTORE BUFFER POINTER AND RETURN ( extbas.asm):02236 * ( extbas.asm):02237 * CONVERT FPA0 INTO AN INTEGER, THEN DECODE IT ( extbas.asm):02238 * INTO A DECIMAL ASCII STRING IN THE BUFFER 9202 3440 ( extbas.asm):02239 L9202 PSHS U SAVE BUFFER POINTER 9204 BDB9B4 ( extbas.asm):02240 JSR >LB9B4 ADD .5 TO FPA0 (ROUND OFF) 9207 BDBCC8 ( extbas.asm):02241 JSR >LBCC8 CONVERT FPA0 TO INTEGER FORMAT 920A 3540 ( extbas.asm):02242 PULS U RESTORE BUFFER POINTER ( extbas.asm):02243 * ( extbas.asm):02244 * CONVERT FPA0 INTO A DECIMAL ASCII STRING 920C 8EBEC5 ( extbas.asm):02245 LDX #LBEC5 POINT X TO UNNORMALIZED POWERS OF 10 920F C680 ( extbas.asm):02246 LDB #$80 INITIALIZE DIGIT COUNTER TO 0 + $80. ( extbas.asm):02247 * BIT 7 SET IS USED TO INDICATE THAT THE POWER OF 10 MANTISSA ( extbas.asm):02248 * IS NEGATIVE. WHEN YOU ‘ADD’ A NEGATIVE MANTISSA, IT IS ( extbas.asm):02249 * THE SAME AS SUBTRACTING A POSITIVE ONE AND BIT 7 OF ACCB ( extbas.asm):02250 * IS HOW THIS ROUTINE KNOWS THAT A ‘SUBTRACTION’ IS OCCURRING. 9211 8D36 ( extbas.asm):02251 L9211 BSR L9249 CHECK FOR COMMA INSERTION 9213 9653 ( extbas.asm):02252 L9213 LDA FPA0+3 * ‘ADD’ A POWER OF 10 MANTISSA TO FPA0. 9215 AB03 ( extbas.asm):02253 ADDA $03,X * IF THE MANTISSA IS NEGATIVE, A SUBTRACTION 9217 9753 ( extbas.asm):02254 STA FPA0+3 * WILL BE WHAT REALLY TAKES PLACE. 9219 9652 ( extbas.asm):02255 LDA FPA0+2 * 921B A902 ( extbas.asm):02256 ADCA $02,X * 921D 9752 ( extbas.asm):02257 STA FPA0+2 * 921F 9651 ( extbas.asm):02258 LDA FPA0+1 * 9221 A901 ( extbas.asm):02259 ADCA $01,X * 9223 9751 ( extbas.asm):02260 STA FPA0+1 * 9225 9650 ( extbas.asm):02261 LDA FPA0 * 9227 A984 ( extbas.asm):02262 ADCA ,X * 9229 9750 ( extbas.asm):02263 STA FPA0 * 922B 5C ( extbas.asm):02264 INCB ADD ONE TO DIGIT COUNTER 922C 56 ( extbas.asm):02265 RORB ROTATE CARRY INTO BIT 7 922D 59 ( extbas.asm):02266 ROLB * SET OVERFLOW FLAG - BRANCH IF CARRY SET AND 922E 28E3 ( extbas.asm):02267 BVC L9213 * ADDING MANTISSA OR CARRY CLEAR AND SUBTRACTING MANTISSA 9230 2403 ( extbas.asm):02268 BCC L9235 BRANCH IF SUBTRACTING MANTISSA 9232 C00B ( extbas.asm):02269 SUBB #10+1 * TAKE THE 9’S COMPLEMENT 9234 50 ( extbas.asm):02270 NEGB * IF ADDING MANTISSA 9235 CB2F ( extbas.asm):02271 L9235 ADDB #'0-1 ADD IN ASCII OFFSET 9237 3004 ( extbas.asm):02272 LEAX $04,X MOVE TO NEXT POWER OF 10 MANTISSA 9239 1F98 ( extbas.asm):02273 TFR B,A SAVE DIGIT IN ACCA 923B 847F ( extbas.asm):02274 ANDA #$7F MASK OFF ADD/SUBTRACT FLAG (BIT 7) 923D A7C0 ( extbas.asm):02275 STA ,U+ STORE DIGIT IN BUFFER 923F 53 ( extbas.asm):02276 COMB TOGGLE ADD/SUBTRACT FLAG 9240 C480 ( extbas.asm):02277 ANDB #$80 MASK OFF EVERYTHING BUT ADD/SUB FLAG 9242 8CBEE9 ( extbas.asm):02278 CMPX #LBEE9 COMPARE TO END OF UNNORMALIZED POWERS OF 10 9245 26CA ( extbas.asm):02279 BNE L9211 BRANCH IF NOT DONE 9247 6FC4 ( extbas.asm):02280 CLR ,U PUT A ZERO AT END OF INTEGER ( extbas.asm):02281 * DECREMENT DECIMAL POINT COUNTER AND CHECK FOR COMMA INSERTION 9249 0A45 ( extbas.asm):02282 L9249 DEC V45 DECREMENT DECIMAL POINT COUNTER 924B 2609 ( extbas.asm):02283 BNE L9256 NOT TIME FOR DECIMAL POINT 924D DF39 ( extbas.asm):02284 L924D STU VARPTR SAVE BUFFER POINTER-POSITION OF THE DECIMAL POINT 924F 862E ( extbas.asm):02285 LDA #'. * STORE A DECIMAL 9251 A7C0 ( extbas.asm):02286 STA ,U+ * POINT IN THE OUTPUT BUFFER 9253 0FD7 ( extbas.asm):02287 CLR VD7 =CLEAR COMMA COUNTER - NOW IT WILL TAKE 255 ( extbas.asm):02288 * =DECREMENTS BEFORE ANOTHER COMMA WILL BE INSERTED 9255 39 ( extbas.asm):02289 RTS 9256 0AD7 ( extbas.asm):02290 L9256 DEC VD7 DECREMENT COMMA COUNTER 9258 2608 ( extbas.asm):02291 BNE L9262 RETURN IF NOT TIME FOR COMMA 925A 8603 ( extbas.asm):02292 LDA #$03 * RESET COMMA COUNTER TO 3; THREE 925C 97D7 ( extbas.asm):02293 STA VD7 * DIGITS BETWEEN COMMAS 925E 862C ( extbas.asm):02294 LDA #', = PUT A COMMA INTO 9260 A7C0 ( extbas.asm):02295 STA ,U+ = THE BUFFER 9262 39 ( extbas.asm):02296 L9262 RTS ( extbas.asm):02297 * INITIALIZE DECIMAL POINT AND COMMA COUNTERS 9263 9647 ( extbas.asm):02298 L9263 LDA V47 GET THE BASE 10 EXPONENT OFFSET 9265 8B0A ( extbas.asm):02299 ADDA #10 * ADD 10 (FPA0 WAS ‘NORMALIZED’ TO 9 PLACES LEFT 9267 9745 ( extbas.asm):02300 STA V45 * OF DECIMAL POINT) - SAVE IN DECIMAL POINT COUNTER 9269 4C ( extbas.asm):02301 INCA ADD ONE FOR THE DECIMAL POINT 926A 8003 ( extbas.asm):02302 L926A SUBA #$03 = DIVIDE DECIMAL POINT COUNTER BY 3; LEAVE 926C 24FC ( extbas.asm):02303 BCC L926A = THE REMAINDER IN ACCA 926E 8B05 ( extbas.asm):02304 ADDA #$05 CONVERT REMAINDER INTO A NUMBER FROM 1-3 9270 97D7 ( extbas.asm):02305 STA VD7 SAVE COMMA COUNTER 9272 96DA ( extbas.asm):02306 LDA VDA GET STATUS BYTE 9274 8440 ( extbas.asm):02307 ANDA #$40 CHECK FOR COMMA FLAG 9276 2602 ( extbas.asm):02308 BNE L927A BRANCH IF COMMA FLAG ACTIVE 9278 97D7 ( extbas.asm):02309 STA VD7 CLEAR COMMA COUNTER - 255 DIGITS OUTPUT BEFORE A COMMA 927A 39 ( extbas.asm):02310 L927A RTS ( extbas.asm):02311 * ( extbas.asm):02312 * INSERT ACCA ZEROES INTO THE BUFFER 927B 3402 ( extbas.asm):02313 L927B PSHS A SAVE ZEROES COUNTER 927D 8DCA ( extbas.asm):02314 BSR L9249 CHECK FOR DECIMAL POINT 927F 3502 ( extbas.asm):02315 PULS A RESTORE ZEROES COUNTER 9281 4A ( extbas.asm):02316 L9281 DECA * DECREMENT ZEROES COUNTER AND 9282 2B0A ( extbas.asm):02317 BMI L928E * RETURN IF < 0 9284 3402 ( extbas.asm):02318 PSHS A SAVE ZEROES COUNTER 9286 8630 ( extbas.asm):02319 LDA #'0 * PUT A ZERO INTO 9288 A7C0 ( extbas.asm):02320 STA ,U+ * THE BUFFER 928A A6E0 ( extbas.asm):02321 LDA ,S+ RESTORE THE ZEROES COUNTER 928C 26ED ( extbas.asm):02322 BNE L927B BRANCH IF NOT DONE 928E 39 ( extbas.asm):02323 L928E RTS ( extbas.asm):02324 ******* GRAPHICS PACKAGE ******** ( extbas.asm):02325 * GET THE ADDRESS OF THE ROUTINE WHICH ( extbas.asm):02326 * WILL CONVERT HOR & VER COORDINATES INTO ( extbas.asm):02327 * AN ABSOLUTE RAM ADDRESS AND PIXEL MASK ( extbas.asm):02328 * DEPENDING UPON THE CURRENT PMODE AND ( extbas.asm):02329 * RETURN THE ADDRESS IN U. ( extbas.asm):02330 * 928F CE929C ( extbas.asm):02331 L928F LDU #L929C JUMP TABLE ADDRESS TO U 9292 96B6 ( extbas.asm):02332 LDA PMODE GET PMODE VALUE 9294 48 ( extbas.asm):02333 ASLA MUL ACCA X2 - 2 BYTES PER ADDRESS 9295 EEC6 ( extbas.asm):02334 LDU A,U GET JUMP ADDRESS 9297 39 ( extbas.asm):02335 RTS ( extbas.asm):02336 * ( extbas.asm):02337 * CONVERT VER COORD (VERBEG) & NOR COORD (HORBEG) INTO ( extbas.asm):02338 * ABSOLUTE SCREEN ADDR IN X AND PIXEL MASK IN ACCA. 9298 8DF5 ( extbas.asm):02339 L9298 BSR L928F GO GET JUMP ADDRESS 929A 6EC4 ( extbas.asm):02340 JMP ,U GO TO IT ( extbas.asm):02341 * ( extbas.asm):02342 * JUMP TABLE -- HOR, VER COORD CONVERSION 929C 92A6 ( extbas.asm):02343 L929C FDB L92A6 PMODE 0 929E 92C2 ( extbas.asm):02344 L929E FDB L92C2 PMODE 1 92A0 92A6 ( extbas.asm):02345 L92A0 FDB L92A6 PMODE 2 92A2 92C2 ( extbas.asm):02346 L92A2 FDB L92C2 PMODE 3 92A4 92A6 ( extbas.asm):02347 L92A4 FDB L92A6 PMODE 4 ( extbas.asm):02348 * ( extbas.asm):02349 * HOR, VER COORD CONVERSION ROUTINE FOR 2 ( extbas.asm):02350 * COLOR HIRES GRAPHICS MODES 92A6 3444 ( extbas.asm):02351 L92A6 PSHS U,B SAVE REGISTERS 92A8 D6B9 ( extbas.asm):02352 LDB HORBYT GET NUMBER BYTES/HOR GRAPHIC ROW 92AA 96C0 ( extbas.asm):02353 LDA VERBEG+1 GET VERTICAL COORDINATE 92AC 3D ( extbas.asm):02354 MUL CALCULATE VERTICAL BYTE OFFSET 92AD D3BA ( extbas.asm):02355 ADDD BEGGRP ADD IN START OF GRAPHIC PAGE 92AF 1F01 ( extbas.asm):02356 TFR D,X SAVE TEMP VALUE IN X REG 92B1 D6BE ( extbas.asm):02357 LDB HORBEG+1 GET HORIZONTAL COORDINATE 92B3 54 ( extbas.asm):02358 LSRB * THREE LSRBS EQUALS DIVIDE BY 8 - 92B4 54 ( extbas.asm):02359 LSRB * IN THE TWO COLOR MODE THERE ARE 92B5 54 ( extbas.asm):02360 LSRB * 8 PIXELS/BYTE 92B6 3A ( extbas.asm):02361 ABX ADD HOR BYTE OFFSET 92B7 96BE ( extbas.asm):02362 LDA HORBEG+1 GET HORIZONTAL COORDINATE 92B9 8407 ( extbas.asm):02363 ANDA #$07 *KEEP ONLY BITS 0-2, WHICH CONTAIN THE NUMBER ( extbas.asm):02364 * *OF THE PIXEL IN THE BYTE 92BB CE92DD ( extbas.asm):02365 LDU #L92DD POINT U TO MASK LOOKUP TABLE 92BE A6C6 ( extbas.asm):02366 LDA A,U *GET PIXEL MASK - THE MASK WILL HAVE ONE BIT SET WHICH ( extbas.asm):02367 * *CORRESPONDS TO THE PIXEL SELECTED. 92C0 35C4 ( extbas.asm):02368 PULS B,U,PC RESTORE REGISTERS ( extbas.asm):02369 * ( extbas.asm):02370 * HOR, VER COORDINATE CONVERSION ROUTINE ( extbas.asm):02371 * FOR 4 COLOR HI RES GRAPHICS MODES 92C2 3444 ( extbas.asm):02372 L92C2 PSHS U,B SAVE REGISTERS 92C4 D6B9 ( extbas.asm):02373 LDB HORBYT GET NUMBER BYTES/HOR GRAPHIC ROW 92C6 96C0 ( extbas.asm):02374 LDA VERBEG+1 GET VERTICAL COORDINATE 92C8 3D ( extbas.asm):02375 MUL CALCULATE VERTICAL OFFSET 92C9 D3BA ( extbas.asm):02376 ADDD BEGGRP ADD THE START OF GRAPHIC PAGE 92CB 1F01 ( extbas.asm):02377 TFR D,X SAVE IN X REGISTER 92CD D6BE ( extbas.asm):02378 LDB HORBEG+1 GET HORIZONTAL COORDINATE 92CF 54 ( extbas.asm):02379 LSRB TWO LSRBS = DIVIDE BY 4; IN THE 4 92D0 54 ( extbas.asm):02380 LSRB COLOR MODE THERE ARE 4 PIXELS/BYTE 92D1 3A ( extbas.asm):02381 ABX ADD HORIZONTAL BYTE OFFSET 92D2 96BE ( extbas.asm):02382 LDA HORBEG+1 GET HORIZONTAL COORDINATE 92D4 8403 ( extbas.asm):02383 ANDA #$03 *KEEP ONLY BITS 0,1 WHICH CONTAIN THE NUMBER OF THE PIXEL TO CHANGE (4 COLOR) 92D6 CE92E5 ( extbas.asm):02384 LDU #L92E5 POINT U TO MASK LOOKUP TABLE 92D9 A6C6 ( extbas.asm):02385 LDA A,U GET THE MASK FOR THE PROPER PIXEL 92DB 35C4 ( extbas.asm):02386 PULS B,U,PC RESTORE REGISTERS AND RETURN ( extbas.asm):02387 * 2 COLOR MODE PIXEL MASKS 92DD 804020100804 ( extbas.asm):02388 L92DD FCB $80,$40,$20,$10,$08,$04 92E3 0201 ( extbas.asm):02389 FCB $02,$01 ( extbas.asm):02390 * 4 COLOR MODE PIXEL MASKS 92E5 C0300C03 ( extbas.asm):02391 L92E5 FCB $C0,$30,$0C,$03 ( extbas.asm):02392 * MOVE X REG DOWN ONE GRAPHIC ROW 92E9 D6B9 ( extbas.asm):02393 L92E9 LDB HORBYT GET NUMBER BYTES/HOR ROW 92EB 3A ( extbas.asm):02394 ABX ADD TO ABSOLUTE SCREEN POSITION 92EC 39 ( extbas.asm):02395 RTS ( extbas.asm):02396 * ( extbas.asm):02397 * ENTER W/ABSOLUTE SCREEN POSITION IN X, THE PIXEL ( extbas.asm):02398 * MASK IN ACCA - ADJUST X AND ACCA TO THE NEXT ( extbas.asm):02399 * PIXEL TO THE RIGHT IN THE TWO COLOR MODE. 92ED 44 ( extbas.asm):02400 L92ED LSRA SHIFT ONE BIT TO RIGHT 92EE 2403 ( extbas.asm):02401 BCC L92F3 BRANCH IF IN SAME BYTE 92F0 46 ( extbas.asm):02402 RORA IF YOU HAVE MOVED TO NEXT BYTE, SET BIT 7 IN ACCA 92F1 3001 ( extbas.asm):02403 LEAX $01,X AND ADD ONE TO X. 92F3 39 ( extbas.asm):02404 L92F3 RTS ( extbas.asm):02405 * ( extbas.asm):02406 * ( extbas.asm):02407 * MOVE ABSOLUTE SCREEN ADDRESS OF CURRENT ( extbas.asm):02408 * HOR, VER COORD ONE TO RIGHT AND ADJUST ( extbas.asm):02409 * THE PIXEL MASK FOR THE 4 COLOR MODE 92F4 44 ( extbas.asm):02410 L92F4 LSRA SHIFT MASK ONE BIT TO RIGHT 92F5 24F6 ( extbas.asm):02411 BCC L92ED SHIFT RIGHT AGAIN IF SAME BYTE 92F7 86C0 ( extbas.asm):02412 LDA #$C0 SET PIXEL #3 IF NEW BYTE 92F9 3001 ( extbas.asm):02413 LEAX $01,X ADD ONE TO ABS SCREEN POSITION 92FB 39 ( extbas.asm):02414 RTS ( extbas.asm):02415 * ( extbas.asm):02416 * EVALUATE TWO EXPRESSIONS - PUT THE FIRST ( extbas.asm):02417 * VALUE (HOR COORD) IN HORBEG AND THE ( extbas.asm):02418 * SECOND (VER COORD) IN VERBEG. 92FC BDB734 ( extbas.asm):02419 L92FC JSR >LB734 *EVALUATE TWO EXPRESSIONS FROM THE BASIC LINE - ( extbas.asm):02420 * *RETURN WITH THE 1ST VALUE IN BINVAL AND THE 2ND IN ACCB 92FF 108E00BD ( extbas.asm):02421 LDY #HORBEG POINT Y TO TEMP STORAGE LOC 9303 C1C0 ( extbas.asm):02422 L9303 CMPB #192 IS VERT COORD > 191? 9305 2502 ( extbas.asm):02423 BLO L9309 NO 9307 C6BF ( extbas.asm):02424 LDB #191 FORCE VER COORD TO 191 9309 4F ( extbas.asm):02425 L9309 CLRA HIGH ORDER BYTE OF VER COORD 930A ED22 ( extbas.asm):02426 STD $02,Y SAVE VERTICAL COORDINATE 930C DC2B ( extbas.asm):02427 LDD BINVAL GET RAW HORIZONTAL COORDINATE 930E 10830100 ( extbas.asm):02428 CMPD #256 IS IT WITHIN RANGE? 9312 2503 ( extbas.asm):02429 BLO L9317 YES 9314 CC00FF ( extbas.asm):02430 LDD #255 FORCE IT TO 255 IF NOT IN RANGE 9317 EDA4 ( extbas.asm):02431 L9317 STD ,Y SAVE HORIZONTAL COORDINATE 9319 39 ( extbas.asm):02432 RTS ( extbas.asm):02433 * NORMALIZE HORIZONTAL AND VERTICAL COORDINATES FOR THE PROPER PHODE ( extbas.asm):02434 * RETURN NORMALIZED VALUES IN (HORBEG,VERBEG) 931A BD92FC ( extbas.asm):02435 L931A JSR >L92FC GO GET HOR & VER COORDINATES 931D CE00BD ( extbas.asm):02436 L931D LDU #HORBEG POINT U TO HOR & VER COORDS 9320 96B6 ( extbas.asm):02437 L9320 LDA PMODE GET PHODE 9322 8102 ( extbas.asm):02438 CMPA #$02 CHECK MODE 9324 2406 ( extbas.asm):02439 BCC L932C BRANCH IF > 1 9326 EC42 ( extbas.asm):02440 LDD $02,U GET THE VERT COORD 9328 44 ( extbas.asm):02441 LSRA *DIVIDE ACCD BY TWO SINCE 9329 56 ( extbas.asm):02442 RORB *PMODES 0&1 HAVE ONLY 96 VERT BLOCKS 932A ED42 ( extbas.asm):02443 STD $02,U SAVE NEW VERT COORD 932C 96B6 ( extbas.asm):02444 L932C LDA PMODE GET PMODE 932E 8104 ( extbas.asm):02445 CMPA #$04 CHECK PMODE 9330 2406 ( extbas.asm):02446 BCC L9338 BRANCH IF PMODE = 4 9332 ECC4 ( extbas.asm):02447 LDD ,U GET HOR COORD 9334 44 ( extbas.asm):02448 LSRA * DIVIDE HORIZONTAL COORDINATE 9335 56 ( extbas.asm):02449 RORB * BY 2-PMODES 0,1,2,3 HAVE ONLY 128 HOR BLOCKS 9336 EDC4 ( extbas.asm):02450 STD ,U SAVE NEW HOR COORD 9338 39 ( extbas.asm):02451 L9338 RTS ( extbas.asm):02452 * PPOINT 9339 BD93B2 ( extbas.asm):02453 PPOINT JSR >L93B2 EVAL TWO EXPRESSIONS, RETURN VALUES IN (HORBEG,VERBEG) 933C BD931D ( extbas.asm):02454 JSR >L931D NORMALIZE EXPRESSIONS FOR PROPER PMODE 933F BD9298 ( extbas.asm):02455 JSR >L9298 CONVERT COORDS INTO ABS SCREEN POSITION & PIXEL MASK 9342 A484 ( extbas.asm):02456 ANDA ,X AND PIXEL MASK WITH CONTENTS OF SCREEN 9344 D6B6 ( extbas.asm):02457 LDB PMODE GET CURRENT PMODE 9346 56 ( extbas.asm):02458 RORB SHIFT RIGHT 9347 2412 ( extbas.asm):02459 BCC L935B BRANCH IF PMODE 0,2,4 (2 COLOR) 9349 8104 ( extbas.asm):02460 L9349 CMPA #$04 * IS THE ‘ON’ PIXEL IN THE 2 RIGHTMOST BITS? 934B 2504 ( extbas.asm):02461 BLO L9351 BRANCH IF IT IS 934D 46 ( extbas.asm):02462 RORA =SHIFT RIGHT 934E 46 ( extbas.asm):02463 RORA =ONE PIXEL 934F 20F8 ( extbas.asm):02464 BRA L9349 KEEP CHECKING 9351 4C ( extbas.asm):02465 L9351 INCA ADD 1 TO COLOR - BASIC USES 1 TO 4, NOT 0 TO 3 9352 48 ( extbas.asm):02466 ASLA TIMES 2 9353 9BC1 ( extbas.asm):02467 ADDA CSSVAL ADD COLOR SET (0 OR 8) 9355 44 ( extbas.asm):02468 LSRA DIVIDE ACCB BY TWO - COLORS RANGE FROM 0 - 8 9356 1F89 ( extbas.asm):02469 L9356 TFR A,B *TRANSFER COLOR INFO INTO ACCB 9358 7EB4F3 ( extbas.asm):02470 JMP >LB4F3 *CONVERT ACCB TO FP NUMBER 935B 4D ( extbas.asm):02471 L935B TSTA IS 2 COLOR PIXEL ON? 935C 27F8 ( extbas.asm):02472 BEQ L9356 NO 935E 4F ( extbas.asm):02473 CLRA * FORCE THE TWO-COLOR ‘ON’ VALUE TO BE 935F 20F0 ( extbas.asm):02474 BRA L9351 * ONE OR FIVE (DEPENDING ON CSS). ( extbas.asm):02475 * PSET 9361 8601 ( extbas.asm):02476 PSET LDA #$01 PSET FLAG 9363 2001 ( extbas.asm):02477 BRA L9366 ( extbas.asm):02478 * PRESET 9365 4F ( extbas.asm):02479 PRESET CLRA PRESET FLAG 9366 97C2 ( extbas.asm):02480 L9366 STA SETFLG STORE FLAG 0 = PRESET, 1 = PSET 9368 BDB26A ( extbas.asm):02481 JSR >LB26A SYNTAX CHECK FOR ‘(‘ 936B BD931A ( extbas.asm):02482 JSR >L931A EVAL HOR & VER COORDS AND NORMALIZE 936E BD9581 ( extbas.asm):02483 JSR >L9581 *EVALUATE COLOR - RETURN IN WCOLOR; ALLCOL ( extbas.asm):02484 * *WILL BE ONE BYTE WITH ALL PIXELS SET TO THAT COLOR 9371 BDB267 ( extbas.asm):02485 JSR >LB267 SYNTAX CHECK FOR ‘)‘ 9374 BD9298 ( extbas.asm):02486 JSR >L9298 *CALCULATE THE ABSOLUTE ADDRESS OF THE ( extbas.asm):02487 * *BYTE TO PSET/PRESET - RETURN ADDRESS IN X - THE MASK ( extbas.asm):02488 * *OF PIXEL TO CHANGE RETURNED IN ACCA SET A PIXEL ON ( extbas.asm):02489 * *SCREEN - ABS POSIT IN X, MASK IN ACCA, COLOR IN ALLCOL ( extbas.asm):02490 * TURN ON THE PIXEL (POINTED TO BY X, PIXEL MASK IN ACCA) TO THE COLOR ( extbas.asm):02491 * IN ALLCOL. SET CHGFLG <> 0 IF THE PIXEL COLOR IS CHANGED. 9377 E684 ( extbas.asm):02492 L9377 LDB ,X GET BYTE FROM THE SCREEN 9379 3404 ( extbas.asm):02493 PSHS B SAVE IT ON STACK 937B 1F89 ( extbas.asm):02494 TFR A,B PUT PIXEL MASK IN ACCB 937D 43 ( extbas.asm):02495 COMA INVERT PIXEL MASK 937E A484 ( extbas.asm):02496 ANDA ,X * ‘AND’ WITH SCREEN DATA - KEEP ALL PIXELS ( extbas.asm):02497 * EXCEPT THE ONE TO MODIFY 9380 D4B5 ( extbas.asm):02498 ANDB ALLCOL CONVERT PIXEL IN THE PIXEL MASK TO THE PROPER COLOR 9382 3404 ( extbas.asm):02499 PSHS B SAVE IT ON STACK 9384 AAE0 ( extbas.asm):02500 ORA ,S+ ‘OR’ IT INTO THE REST OF THE PIXELS 9386 A784 ( extbas.asm):02501 STA ,X PUT IT ON SCREEN 9388 A0E0 ( extbas.asm):02502 SUBA ,S+ SUBTRACT OLD BYTE FROM NEW BYTE; ACCA=0 IF NEW BYTE = OLD BYTE 938A 9ADB ( extbas.asm):02503 ORA CHGFLG ‘OR’ DIFFERENCE WITH CHANGE FLAG 938C 97DB ( extbas.asm):02504 STA CHGFLG SAVE IT - CHGFLG WILL BE = 0 IF THE GRAPHIC BYTE IS UNCHANGED 938E 39 ( extbas.asm):02505 RTS ( extbas.asm):02506 * EVALUATE TWO SETS OF COORDINATES SEPARATED BY A MINUS ( extbas.asm):02507 * SIGN. PUT 1ST SET OF COORDS AT (HORBEG,VERBEG), SECOND ( extbas.asm):02508 * SET AT (HOREND,VEREND). IF NOTHING BEFORE MINUS SIGN, PUT ( extbas.asm):02509 * (HORDEF,VERDEF) AT (HORBEG, VERBEG) 938F 9EC7 ( extbas.asm):02510 L938F LDX HORDEF GET LAST HORIZ END POINT 9391 9FBD ( extbas.asm):02511 STX HORBEG PUT IN START POINT STORAGE LOC 9393 9EC9 ( extbas.asm):02512 LDX VERDEF GET LAST VERT END POINT 9395 9FBF ( extbas.asm):02513 STX VERBEG PUT IN START POINT VERT STORAGE LOC 9397 81AC ( extbas.asm):02514 CMPA #$AC TOKEN FOR MINUS SIGN 9399 2703 ( extbas.asm):02515 BEQ L939E BRANCH IF NO STARTING COORDINATES GIVEN 939B BD93B2 ( extbas.asm):02516 JSR >L93B2 GO GET STARTING COORDINATES 939E C6AC ( extbas.asm):02517 L939E LDB #$AC TOKEN FOR MINUS SIGN 93A0 BDB26F ( extbas.asm):02518 JSR >LB26F GO DO A SYNTAX CHECK 93A3 BDB26A ( extbas.asm):02519 JSR >LB26A SYNTAX CHECK FOR A ‘(’ 93A6 BDB734 ( extbas.asm):02520 JSR >LB734 EVALUATE 2 EXPRESSIONS 93A9 108E00C3 ( extbas.asm):02521 LDY #HOREND TEMP STORAGE LOCATION FOR END COORDINATES OF LINE COMMAND 93AD BD9303 ( extbas.asm):02522 JSR >L9303 GET END POINT COORDS 93B0 2006 ( extbas.asm):02523 BRA L93B8 CHECK SYNTAX FOR ‘)‘ 93B2 BDB26A ( extbas.asm):02524 L93B2 JSR >LB26A SYNTAX CHECK FOR ‘(‘ 93B5 BD92FC ( extbas.asm):02525 JSR >L92FC EVALUATE 2 EXPRESSIONS 93B8 7EB267 ( extbas.asm):02526 L93B8 JMP >LB267 SYNTAX CHECK FOR ‘ )‘ AND RETURN LINE 93BB 8189 ( extbas.asm):02527 LINE CMPA #$89 ‘INPUT’ TOKEN 93BD 1027F5FF ( extbas.asm):02528 LBEQ L89C0 GO DO ‘LINE INPUT’ COMMAND 93C1 8128 ( extbas.asm):02529 CMPA #'( CHECK FOR ‘(’ 93C3 2709 ( extbas.asm):02530 BEQ L93CE GO LOOK FOR START AND END POINTS 93C5 81AC ( extbas.asm):02531 CMPA #$AC CHECK TOKEN FOR MINUS SIGN 93C7 2705 ( extbas.asm):02532 BEQ L93CE GO GET START AND END POINTS 93C9 C640 ( extbas.asm):02533 LDB #'@ CHECK FOR @ SIGN 93CB BDB26F ( extbas.asm):02534 JSR >LB26F DO A SYNTAX CHECK 93CE BD938F ( extbas.asm):02535 L93CE JSR >L938F GET STARTING AND ENDING COORDINATES 93D1 9EC3 ( extbas.asm):02536 LDX HOREND GET ENDING HORIZ COORDINATE 93D3 9FC7 ( extbas.asm):02537 STX HORDEF PUT IN LAST USED HOR END POINT 93D5 9EC5 ( extbas.asm):02538 LDX VEREND GET ENDING VER COORD 93D7 9FC9 ( extbas.asm):02539 STX VERDEF PUT IN LAST USED VER END POINT 93D9 BDB26D ( extbas.asm):02540 JSR SYNCOMMA SYNTAX CHECK FOR COMMA 93DC 81BE ( extbas.asm):02541 CMPA #$BE PRESET TOKEN? 93DE 2709 ( extbas.asm):02542 BEQ L93E9 YES 93E0 81BD ( extbas.asm):02543 CMPA #$BD PSET TOKEN? 93E2 10261E91 ( extbas.asm):02544 LBNE LB277 ‘SYNTAX ERROR’ IF NOT PSET OR PRESET 93E6 C601 ( extbas.asm):02545 LDB #$01 PSET FLAG 93E8 86 ( extbas.asm):02546 L93E8 FCB SKP1LD SKIP ONE BYTE, LOAD ACCA WITH $5F 93E9 5F ( extbas.asm):02547 L93E9 CLRB PRESET FLAG 93EA 3404 ( extbas.asm):02548 PSHS B SAVE PSET/PRESET FLAG 93EC 9D9F ( extbas.asm):02549 JSR GETNCH GET ANOTHER CHAR 93EE BD9420 ( extbas.asm):02550 JSR >L9420 NORMALIZE START/END COORDS 93F1 3504 ( extbas.asm):02551 PULS B GET PSET/PRESET FLAG 93F3 D7C2 ( extbas.asm):02552 STB SETFLG SAVE IT 93F5 BD959A ( extbas.asm):02553 JSR >L959A SET ACTIVE COLOR BYTE 93F8 9DA5 ( extbas.asm):02554 JSR GETCCH GET ANOTHER CHARACTER 93FA 102700A3 ( extbas.asm):02555 LBEQ L94A1 BRANCH IF NO BOX TO BE DRAWN 93FE BDB26D ( extbas.asm):02556 JSR SYNCOMMA SYNTAX CHECK FOR COMMA 9401 C642 ( extbas.asm):02557 LDB #'B ‘BOX’? 9403 BDB26F ( extbas.asm):02558 JSR >LB26F GO DO A SYNTAX CHECK FOR A ‘B’ 9406 2621 ( extbas.asm):02559 BNE L9429 FOUND A ‘B’ AND SOMETHING FOLLOWS 9408 8D3A ( extbas.asm):02560 BSR L9444 DRAW A HORIZ LINE 940A 8D62 ( extbas.asm):02561 BSR L946E DRAW A VERTICAL LINE 940C 9EBD ( extbas.asm):02562 LDX HORBEG GET HOR START COORD 940E 3410 ( extbas.asm):02563 PSHS X SAVE IT ON STACK 9410 9EC3 ( extbas.asm):02564 LDX HOREND * GET HORIZONTAL END COORDINATE AND 9412 9FBD ( extbas.asm):02565 STX HORBEG * PUT THEM IN HORIZONTAL START COORDINATE 9414 8D58 ( extbas.asm):02566 BSR L946E DRAW VERTICAL LINE 9416 3510 ( extbas.asm):02567 PULS X GET THE PREVIOUS HORIZONTAL START COORDINATE 9418 9FBD ( extbas.asm):02568 STX HORBEG RESTORE IT 941A 9EC5 ( extbas.asm):02569 LDX VEREND GET VER END COORD 941C 9FBF ( extbas.asm):02570 STX VERBEG PUT INTO START 941E 2024 ( extbas.asm):02571 BRA L9444 DRAW HORIZ LINE ( extbas.asm):02572 * NORMALIZE START COORDS IN (HORBEG,VERBEG) & END COORDS IN (HOREND,VEREND) 9420 BD931D ( extbas.asm):02573 L9420 JSR >L931D NORMALIZE COORDS IN (HORBEG,VERBEG) 9423 CE00C3 ( extbas.asm):02574 LDU #HOREND = 9426 7E9320 ( extbas.asm):02575 JMP >L9320 = NORMALIZE COORDS IN (HOREND,VEREND) 9429 C646 ( extbas.asm):02576 L9429 LDB #'F * 942B BDB26F ( extbas.asm):02577 JSR >LB26F *GO DO A SYNTAX CHECK FOR AN ‘F’ 942E 2004 ( extbas.asm):02578 BRA L9434 ‘FILL’ THE BOX 9430 301F ( extbas.asm):02579 L9430 LEAX $-01,X MOVE VER COORD UP ONE 9432 9FBF ( extbas.asm):02580 L9432 STX VERBEG SAVE NEW VERTICAL START COORDINATE ( extbas.asm):02581 * DRAW A SERIES OF HORIZONTAL LINES FROM VER START TO VER END 9434 BD9444 ( extbas.asm):02582 L9434 JSR >L9444 DRAW A HORIZ LINE 9437 9EBF ( extbas.asm):02583 LDX VERBEG GET START VER COORD 9439 9CC5 ( extbas.asm):02584 CMPX VEREND COMPARE TO END VER COORD 943B 2706 ( extbas.asm):02585 BEQ L9443 RETURN IF EQUAL 943D 24F1 ( extbas.asm):02586 BCC L9430 BRANCH IF START HOR > END HOR 943F 3001 ( extbas.asm):02587 LEAX $01,X MOVE HOR COORD DOWN ONE 9441 20EF ( extbas.asm):02588 BRA L9432 KEEP DRAWING LINES 9443 39 ( extbas.asm):02589 L9443 RTS WASTED BYTE - SHOULD USE L946B INSTEAD ( extbas.asm):02590 * DRAW A HORIZONTAL LINE FROM HOREND TO HORBEG ( extbas.asm):02591 * AT VER COORD VERBEG; COLOR IN ALLCOL 9444 9EBD ( extbas.asm):02592 L9444 LDX HORBEG GET STARTING COORDS 9446 3410 ( extbas.asm):02593 PSHS X SAVE ‘EM 9448 BD971D ( extbas.asm):02594 JSR >L971D GET ABSOLUTE VALUE OF HOREND - HORBEG (HORIZONTAL COORDINATE) 944B 2404 ( extbas.asm):02595 BCC L9451 BRANCH IF END > START 944D 9EC3 ( extbas.asm):02596 LDX HOREND * TRANSFER END COORD TO START 944F 9FBD ( extbas.asm):02597 STX HORBEG * 9451 1F02 ( extbas.asm):02598 L9451 TFR D,Y SAVE DIFFERENCE IN Y 9453 3121 ( extbas.asm):02599 LEAY $01,Y ADD ONE TO DIFFERENCE - TURN ON STARTING & ENDING COORDS 9455 BD9298 ( extbas.asm):02600 JSR >L9298 GET ABS SCREEN POS TO X AND PIXEL MASK TO ACCA 9458 3540 ( extbas.asm):02601 PULS U GET START COORDS 945A DFBD ( extbas.asm):02602 STU HORBEG RESTORE THEM 945C 8D36 ( extbas.asm):02603 BSR L9494 POINT U TO ROUTINE TO MOVE PIXEL POINTERS TO RIGHT 945E 97D7 ( extbas.asm):02604 L945E STA VD7 SAVE PIXEL MASK 9460 BD9377 ( extbas.asm):02605 JSR >L9377 TURN ON PIXEL 9463 96D7 ( extbas.asm):02606 LDA VD7 GET OLD PIXEL MASK 9465 ADC4 ( extbas.asm):02607 JSR ,U MOVE TO NEXT ONE TO RIGHT 9467 313F ( extbas.asm):02608 LEAY $-01,Y DEC COUNTER 9469 26F3 ( extbas.asm):02609 BNE L945E LOOP IF NOT DONE 946B 39 ( extbas.asm):02610 L946B RTS 946C 3506 ( extbas.asm):02611 L946C PULS A,B CLEAN UP STACK ( extbas.asm):02612 * DRAW A VERTICAL LINE FROM VEREND TO VERBEG AT HOR COORD HORBEG 946E DCBF ( extbas.asm):02613 L946E LDD VERBEG GET END COORDS 9470 3406 ( extbas.asm):02614 PSHS B,A SAVE THEM 9472 BD9710 ( extbas.asm):02615 JSR >L9710 CALCULATE ABSOLUTE VALUE OF VEREND-VERBEG 9475 2404 ( extbas.asm):02616 BCC L947B BRANCH IF END COORD > START COORD 9477 9EC5 ( extbas.asm):02617 LDX VEREND * 9479 9FBF ( extbas.asm):02618 STX VERBEG *SWITCH VER COORDS IF END COORD IS TO RIGHT OF START 947B 1F02 ( extbas.asm):02619 L947B TFR D,Y LENGTH OF LINE TO Y 947D 3121 ( extbas.asm):02620 LEAY $01,Y SET BOTH START AND END COORDS 947F BD9298 ( extbas.asm):02621 JSR >L9298 GET ABSOLUTE SCREEN POS TO X, MASK TO ACCA 9482 3540 ( extbas.asm):02622 PULS U GET END COORD 9484 DFBF ( extbas.asm):02623 STU VERBEG RESTORE THEM 9486 8D15 ( extbas.asm):02624 BSR L949D POINT U TO ROUTINE TO MOVE DOWN ONE ROW 9488 20D4 ( extbas.asm):02625 BRA L945E DRAW VERT LINE ( extbas.asm):02626 * ( extbas.asm):02627 * JUMP TABLE OF ADDRESSES OF ROUTINES WHICH WILL MOVE THE ( extbas.asm):02628 * ABSOLUTE SCREEN ADDRESS POINTER ONE PIXEL TO THE RIGHT. 948A 92ED ( extbas.asm):02629 L948A FDB L92ED PMODE 0 948C 92F4 ( extbas.asm):02630 L948C FDB L92F4 PMODE 1 948E 92ED ( extbas.asm):02631 L948E FDB L92ED PMODE 2 9490 92F4 ( extbas.asm):02632 L9490 FDB L92F4 PMODE 3 9492 92ED ( extbas.asm):02633 L9492 FDB L92ED PMODE 4 ( extbas.asm):02634 * POINT U TO ROUTINE WHICH WILL MOVE PIXEL ONE TO RIGHT 9494 CE948A ( extbas.asm):02635 L9494 LDU #L948A POINT TO JUMP TABLE 9497 D6B6 ( extbas.asm):02636 LDB PMODE GET PMODE VALUE 9499 58 ( extbas.asm):02637 ASLB X2 949A EEC5 ( extbas.asm):02638 LDU B,U GET JUMP ADDRESS 949C 39 ( extbas.asm):02639 RTS 949D CE92E9 ( extbas.asm):02640 L949D LDU #L92E9 POINT U TO ROUTINE TO MOVE ABS POS DOWN ONE ROW 94A0 39 ( extbas.asm):02641 RTS ( extbas.asm):02642 * DRAW LINE FROM (HORBEG.VERBEG) TO (HOREND,VEREND) 94A1 108E950D ( extbas.asm):02643 L94A1 LDY #L950D POINT Y TO INCR VERBEG 94A5 BD9710 ( extbas.asm):02644 JSR >L9710 CALCULATE VEREND - VERBEG (VERTICAL DIFFERENCE) 94A8 1027FF98 ( extbas.asm):02645 LBEQ L9444 DRAW A HORIZONTAL LINE IF DELTA V = 0 94AC 2404 ( extbas.asm):02646 BCC L94B2 BRANCH IF VER END COORD > VER START COORD 94AE 108E951B ( extbas.asm):02647 LDY #L951B POINT Y TO DECR VER COORD (VERBEG) 94B2 3406 ( extbas.asm):02648 L94B2 PSHS B,A SAVE DELTA V 94B4 CE9506 ( extbas.asm):02649 LDU #L9506 POINT U TO INCR HOR COORD 94B7 BD971D ( extbas.asm):02650 JSR >L971D CALCULATE HOREND-HORBEG (HOR DIFFERENCE) 94BA 27B0 ( extbas.asm):02651 BEQ L946C DRAW A VERTICAL LINE IF DELTA H = 0 94BC 2403 ( extbas.asm):02652 BCC L94C1 BRANCH IF HOR END COORD > HOR START COORD 94BE CE9514 ( extbas.asm):02653 LDU #L9514 POINT U TO DECR HOR COORD 94C1 10A3E4 ( extbas.asm):02654 L94C1 CMPD ,S COMPARE DELTA H TO DELTA V 94C4 3510 ( extbas.asm):02655 PULS X PUT DELTA V IN X 94C6 2404 ( extbas.asm):02656 BCC L94CC BRANCH IF DELTA H > DELTA V 94C8 1E32 ( extbas.asm):02657 EXG U,Y SWAP CHANGE HOR & CHANGE VER ADDRESS 94CA 1E01 ( extbas.asm):02658 EXG D,X EXCHANGE DELTA HOR & DELTA VER 94CC 3446 ( extbas.asm):02659 L94CC PSHS U,B,A *SAVE THE LARGER OF DELTA V, DELTA H ( extbas.asm):02660 * *AND THE INCREMENT/DECREMENT ADDRESS 94CE 3406 ( extbas.asm):02661 PSHS B,A SAVE WHICHEVER IS LARGER OF DELTA V, DELTA H 94D0 44 ( extbas.asm):02662 LSRA * 94D1 56 ( extbas.asm):02663 RORB * DIVIDE BY 2, SHIFT ACCD RIGHT ONE BIT 94D2 2509 ( extbas.asm):02664 BLO L94DD BRANCH IF ODD NUMBER 94D4 1183950E ( extbas.asm):02665 CMPU #L950D+1 SEE IF INCR OR DECR 94D8 2503 ( extbas.asm):02666 BLO L94DD BRANCH IF INCR 94DA 830001 ( extbas.asm):02667 SUBD #1 SUBTRACT 1 IF DECREMENT 94DD 3416 ( extbas.asm):02668 L94DD PSHS X,B,A *SAVE SMALLEST DELTA (X) AND INITIAL MINOR COORDINATE ( extbas.asm):02669 *INCREMENT COUNTER WHICH IS 1/2 OF LARGEST DELTA 94DF BD928F ( extbas.asm):02670 JSR >L928F POINT U TO PROPER COORDINATE TO SCREEN CONVERSION ROUTINE ( extbas.asm):02671 * DRAW THE LINE HERE - AT THIS POINT THE STACK HAS THE DRAW DATA ON IT ( extbas.asm):02672 * 0 1,S=MINOR COORDINATE INCREMENT COUNTER ( extbas.asm):02673 * 2 3,S=ASSOLUTE VALUE OF THE SMALLEST DELTA COORDINATE ( extbas.asm):02674 * 4 5,S=ABSOLUTE VALUE OF THE LARGEST DELTA COORDINATE ( extbas.asm):02675 * 6 7,S=LARGEST COORDINATE COUNTER (HOW MANY TIMES THROUGH THE DRAW ( extbas.asm):02676 * LOOP. INITIALLY SET TO ABSOLUTE VALUE OF LARGEST DELTA COORD ( extbas.asm):02677 * 8 9,S=ADDRESS OF THE ROUTINE WHICH WILL INCREMENT OR DECREMENT ( extbas.asm):02678 * THE LARGEST DELTA COORDINATE 94E2 ADC4 ( extbas.asm):02679 L94E2 JSR ,U CONVERT (X,Y) COORDINATES TO ABSOLUTE SCREEN ADDRESS 94E4 BD9377 ( extbas.asm):02680 JSR >L9377 TURN ON A PIXEL 94E7 AE66 ( extbas.asm):02681 LDX $06,S GET DISTANCE COUNTER 94E9 2717 ( extbas.asm):02682 BEQ L9502 BRANCH IF LINE IS COMPLETELY DRAWN 94EB 301F ( extbas.asm):02683 LEAX $-01,X DECR ONE 94ED AF66 ( extbas.asm):02684 STX $06,S SAVE IT 94EF ADF808 ( extbas.asm):02685 JSR [$08,S] INCR/DECR COORDINATE-WHICH HAS THE LARGEST DELTA 94F2 ECE4 ( extbas.asm):02686 LDD ,S GET THE MIHOR COORDINATE INCREMENT COUNTER 94F4 E362 ( extbas.asm):02687 ADDD $02,S ADD THE SMALLEST DIFFERENCE 94F6 EDE4 ( extbas.asm):02688 STD ,S SAVE NEW MINOR COORDINATE INCREMENT COUNTER 94F8 A364 ( extbas.asm):02689 SUBD $04,S *SUBTR OUT THE LARGEST DIFFERENCE AND 94FA 25E6 ( extbas.asm):02690 BLO L94E2 *BRANCH IF RESULT NOT > LARGEST DIFFERENCE 94FC EDE4 ( extbas.asm):02691 STD ,S IF >=, THEN STORE NEW MIHOR COORDINATE INCREMENT 94FE ADA4 ( extbas.asm):02692 JSR ,Y INCREMENT/DECREMENT COORDINATE WHICH HAS THE SMALLEST DELTA 9500 20E0 ( extbas.asm):02693 BRA L94E2 KEEP GOING 9502 3510 ( extbas.asm):02694 L9502 PULS X * 9504 35F6 ( extbas.asm):02695 PULS A,B,X,Y,U,PC *CLEAN UP THE STACK AND RETURN ( extbas.asm):02696 * ( extbas.asm):02697 * THESE ROUTINES ARE USED TO INCREMENT OR DECREMENT THE ( extbas.asm):02698 * HORIZONTAL & VERTICAL COORDINATES. THEY NEED TO BE KEPT ( extbas.asm):02699 * IN THIS ORDER (INCR,INCR,DECR,DECR). ( extbas.asm):02700 * INCR HORBEG (HOR COORD) 9506 9EBD ( extbas.asm):02701 L9506 LDX HORBEG GET COORDINATE 9508 3001 ( extbas.asm):02702 LEAX $01,X ADD ONE 950A 9FBD ( extbas.asm):02703 STX HORBEG SAVE COORDINATE 950C 39 ( extbas.asm):02704 RTS ( extbas.asm):02705 * INCR VERBEG (VER COORD) 950D 9EBF ( extbas.asm):02706 L950D LDX VERBEG GET COORDINATE 950F 3001 ( extbas.asm):02707 LEAX $01,X ADD ONE 9511 9FBF ( extbas.asm):02708 STX VERBEG SAVE COORDINATE 9513 39 ( extbas.asm):02709 RTS ( extbas.asm):02710 * DECR HORSES (HOR COORD) 9514 9EBD ( extbas.asm):02711 L9514 LDX HORBEG GET COORDINATE 9516 301F ( extbas.asm):02712 LEAX $-01,X SUBTRACT ONE 9518 9FBD ( extbas.asm):02713 STX HORBEG SAVE COORDINATE 951A 39 ( extbas.asm):02714 RTS ( extbas.asm):02715 * DECR VERBEG (VER COORD) 951B 9EBF ( extbas.asm):02716 L951B LDX VERBEG GET COORDINATE 951D 301F ( extbas.asm):02717 LEAX $-01,X SUBTRACT ONE 951F 9FBF ( extbas.asm):02718 STX VERBEG SAVE COORDINATE 9521 39 ( extbas.asm):02719 RTS ( extbas.asm):02720 * ( extbas.asm):02721 * GET MAXIMUM VALUE OF HOR/VER COORDINATES ( extbas.asm):02722 * NORMALIZED FOR PROPER PMODE. RETURN VALUES ( extbas.asm):02723 * HOR = VD3 VER = VD5 9522 CE00D3 ( extbas.asm):02724 L9522 LDU #VD3 POINT U TO TEMP STORAGE AREA (VD3) 9525 8E00FF ( extbas.asm):02725 LDX #255 MAXIMUM VALUE HORIZONTAL COORD (255) 9528 AFC4 ( extbas.asm):02726 STX ,U SAVE IT 952A 8E00BF ( extbas.asm):02727 LDX #191 MAXIMUM VALUE VERTICAL COORD (191) 952D AF42 ( extbas.asm):02728 STX $02,U SAVE IT 952F 7E9320 ( extbas.asm):02729 JMP >L9320 GO CONVERT THEM TO PROPER PMODE ( extbas.asm):02730 * PCLS 9532 270E ( extbas.asm):02731 PCLS BEQ L9542 CLEAR TO BACKGROUND COLOR IF NO ARGUMENT 9534 8D24 ( extbas.asm):02732 BSR L955A EVALUATE EXPRESSION, CONVERT TO PROPER COLOR CODE 9536 8655 ( extbas.asm):02733 L9536 LDA #$55 CONSIDER EACH BYTE AS 4 GROUPS OF 2 BIT SUB-NIBBLES 9538 3D ( extbas.asm):02734 MUL MULT BY COLOR 9539 9EBA ( extbas.asm):02735 LDX BEGGRP GET STARTING ADOR 953B E780 ( extbas.asm):02736 L953B STB ,X+ SET BYTE TO PROPER COLOR 953D 9CB7 ( extbas.asm):02737 CMPX ENDGRP AT END OF GRAPHIC PAGE? 953F 26FA ( extbas.asm):02738 BNE L953B NO 9541 39 ( extbas.asm):02739 RTS 9542 D6B3 ( extbas.asm):02740 L9542 LDB BAKCOL GET BACKGROUND COLOR 9544 20F0 ( extbas.asm):02741 BRA L9536 ( extbas.asm):02742 * COLOR 9546 812C ( extbas.asm):02743 COLOR CMPA #', *CHECK FOR COMMA AND 9548 2708 ( extbas.asm):02744 BEQ L9552 *BRANCH IF FOREGROUND COLOR ARGUMENT MISSING 954A 8D0E ( extbas.asm):02745 BSR L955A EVALUATE FIRST ARGUMENT 954C D7B2 ( extbas.asm):02746 STB FORCOL STORE IN FOREGROUND LOCATION 954E 9DA5 ( extbas.asm):02747 JSR GETCCH GET NEXT INPUT CHARACTER 9550 2707 ( extbas.asm):02748 BEQ L9559 RETURN IF NONE 9552 BDB26D ( extbas.asm):02749 L9552 JSR SYNCOMMA SYNTAX CHECK FOR COMMMA 9555 8D03 ( extbas.asm):02750 BSR L955A EVALUATE LAST ARGUMENT 9557 D7B3 ( extbas.asm):02751 STB BAKCOL STORE IN BACKGROUND COLOR 9559 39 ( extbas.asm):02752 L9559 RTS ( extbas.asm):02753 * EVALUATE AN EXPRESSION AND CONVERT IT TO A PROPER COLOR CODE ( extbas.asm):02754 * DEPENDING ON THE PMODE AND CSS; ILLEGAL FUNCTION CALL IF > 8 - ( extbas.asm):02755 * RETURN COLOR VALUE IN ACCB; CSS VALUE IN ACCA 955A BDB70B ( extbas.asm):02756 L955A JSR EVALEXPB EVALUATE EXPRESSION 955D C109 ( extbas.asm):02757 L955D CMPB #$09 ONLY ALLOW 0-8 955F 10241EE7 ( extbas.asm):02758 LBCC LB44A ‘ILLEGAL FUNCTION CALL’ IF BAD COLOR 9563 4F ( extbas.asm):02759 CLRA VDG CSS VALUE FOR FIRST COLOR SET 9564 C105 ( extbas.asm):02760 CMPB #$05 FIRST OR SECOND COLOR SET? 9566 2504 ( extbas.asm):02761 BLO L956C BRANCH IF FIRST SET 9568 8608 ( extbas.asm):02762 LDA #$08 VDG CSS VALUE FOR SECOND COLOR SET 956A C004 ( extbas.asm):02763 SUBB #$04 MAKE 5-8 BECOME 1-4 956C 3402 ( extbas.asm):02764 L956C PSHS A SAVE VDG CSS VALUE ON THE STACK 956E 96B6 ( extbas.asm):02765 LDA PMODE GET PMODE 9570 46 ( extbas.asm):02766 RORA 4 COLOR OR 2 COLOR 9571 2408 ( extbas.asm):02767 BCC L957B 2 COLOR 9573 5D ( extbas.asm):02768 TSTB WAS COLOR = 0 9574 2602 ( extbas.asm):02769 BNE L9578 NO 9576 C604 ( extbas.asm):02770 L9576 LDB #$04 IF SO, MAKE IT 4 9578 5A ( extbas.asm):02771 L9578 DECB CONVERT 1-4 TO 0-3 9579 3582 ( extbas.asm):02772 L9579 PULS A,PC PUT VDG CSS VALUE IN ACCA AND RETURN 957B 56 ( extbas.asm):02773 L957B RORB CHECK ONLY THE LSB OF COLOR IF IN 2 COLOR MODE 957C 25F8 ( extbas.asm):02774 BLO L9576 BRANCH IF ODD - FORCE ACCB TO 3 957E 5F ( extbas.asm):02775 CLRB FORCE ACCB = 0 IF EVEN 957F 20F8 ( extbas.asm):02776 BRA L9579 RETURN ( extbas.asm):02777 * SET THE CURRENT ACTIVE COLOR AND ALL PIXEL BYTE ( extbas.asm):02778 * TO FOREGROUND/BACKGROUND COLOR DEPENDING ON ( extbas.asm):02779 * PSET, PRESET IF NO EXPRESSION , ‘)’ OR ( extbas.asm):02780 * ‘,‘. OTHERWISE EVALUATE THE EXPRESSION 9581 BD959A ( extbas.asm):02781 L9581 JSR >L959A GET THE COLOR OF A BYTE 9584 9DA5 ( extbas.asm):02782 JSR GETCCH CHECK CURRENT INPUT CHARACTER 9586 2710 ( extbas.asm):02783 BEQ L9598 BRANCH IF NONE 9588 8129 ( extbas.asm):02784 CMPA #') * CHECK FOR ‘)‘ AND BRANCH IF 958A 270C ( extbas.asm):02785 BEQ L9598 * NO MORE ARGUMENTS 958C BDB26D ( extbas.asm):02786 JSR SYNCOMMA SYNTAX CHECK FOR COMMA 958F 812C ( extbas.asm):02787 CMPA #', WAS NEXT CHARACTER A COMMA? 9591 2705 ( extbas.asm):02788 BEQ L9598 YES 9593 BD955A ( extbas.asm):02789 JSR >L955A EVALUATE EXPRESSION, RETURN COLOR IN ACCB 9596 8D0A ( extbas.asm):02790 BSR L95A2 TEMP STORE COLOR AND ALL PIXEL BYTE 9598 0EA5 ( extbas.asm):02791 L9598 JMP GETCCH CHECK INPUT CHARACTER AND RETURN ( extbas.asm):02792 * SET THE ACTIVE COLOR BYTE AND THE ALL ACTIVE COLOR BYTE 959A D6B2 ( extbas.asm):02793 L959A LDB FORCOL GET FOREGROUND COLOR 959C 0DC2 ( extbas.asm):02794 TST SETFLG CHECK PSET/PRESET FLAG 959E 2602 ( extbas.asm):02795 BNE L95A2 BRANCH IF PSET 95A0 D6B3 ( extbas.asm):02796 LDB BAKCOL GET BACKGROUND COLOR 95A2 D7B4 ( extbas.asm):02797 L95A2 STB WCOLOR TEMP STORE COLOR 95A4 8655 ( extbas.asm):02798 LDA #$55 CONSIDER A BYTE AS 4 PIXELS 95A6 3D ( extbas.asm):02799 MUL SET COLOR ON ALL 4 PIXElS 95A7 D7B5 ( extbas.asm):02800 STB ALLCOL SAVE BYTE WITH ALL PIXELS TURNED ON 95A9 39 ( extbas.asm):02801 RTS 95AA 2623 ( extbas.asm):02802 L95AA BNE L95CF BRANCH IF GRAPHIC MODE, OTHERWISE SET UP ALPHA GRAPHIC MODE ( extbas.asm):02803 * THIS CODE WILL RESET THE DISPLAY PAGE REGISTER IN THE ( extbas.asm):02804 * SAM CHIP TO 2 ($400) AND RESET THE SAM’S VDG CONTROL ( extbas.asm):02805 * REGISTER TO 0 (ALPHA-NUMERICS). IN ADDITION, IT WILL ( extbas.asm):02806 * RESET THE VDG CONTROL PINS TO ALPHA-GRAPHICS MODE. ( extbas.asm):02807 * SET UP THE SAM AND VDG TO GRAPHICS MODE 95AC 3416 ( extbas.asm):02808 L95AC PSHS X,B,A SAVE REGISTERS 95AE 8EFFC8 ( extbas.asm):02809 LDX #SAMREG+8 POINT X TO THE MIDDLE OF THE SAM CNTL REG 95B1 A70A ( extbas.asm):02810 STA 10,X ** 95B3 A708 ( extbas.asm):02811 STA $08,X *** 95B5 A706 ( extbas.asm):02812 STA $06,X **** 95B7 A704 ( extbas.asm):02813 STA $04,X ***** RESET SAM DISPLAY PAGE TO $400 95B9 A702 ( extbas.asm):02814 STA $02,X **** 95BB A701 ( extbas.asm):02815 STA $01,X *** 95BD A71E ( extbas.asm):02816 STA $-02,X ** 95BF A71C ( extbas.asm):02817 STA $-04,X *** 95C1 A71A ( extbas.asm):02818 STA $-06,X **** RESET SAM’S VDG TO ALPHA-NUMERIC MODE 95C3 A718 ( extbas.asm):02819 STA $-08,X *** 95C5 B6FF22 ( extbas.asm):02820 LDA PIA1+2 GET DATA FROM PIA1, PORT B 95C8 8407 ( extbas.asm):02821 ANDA #$07 FORCE ALL BITS TO ZERO, KEEP ONLY CSS DATA 95CA B7FF22 ( extbas.asm):02822 STA PIA1+2 PUT THE VDG INTO ALPHA-GRAPHICS MODE 95CD 3596 ( extbas.asm):02823 PULS A,B,X,PC RETURN 95CF 3416 ( extbas.asm):02824 L95CF PSHS X,B,A 95D1 96B6 ( extbas.asm):02825 LDA PMODE GET CURRENT PMODE VALUE 95D3 8B03 ( extbas.asm):02826 ADDA #$03 ADD 3 - NOW 3-7 ONLY 5 OF 8 POSSIBLE MODES USED 95D5 C610 ( extbas.asm):02827 LDB #$10 $10 OFFSET BETWEEN PMODES 95D7 3D ( extbas.asm):02828 MUL GET PMODE VALUES FOR VDG GM0, GM1, GM2 95D8 CA80 ( extbas.asm):02829 ORB #$80 FORCE BIT 7 HIGH (VDG A/G CONTROL) 95DA DAC1 ( extbas.asm):02830 ORB CSSVAL ‘OR’ IN THE VDG CSS DATA 95DC B6FF22 ( extbas.asm):02831 LDA PIA1+2 GET PIA1, PORT B 95DF 8407 ( extbas.asm):02832 ANDA #$07 MASK OFF THE VDG CONTROL DATA 95E1 3402 ( extbas.asm):02833 PSHS A SAVE IT 95E3 EAE0 ( extbas.asm):02834 ORB ,S+ ‘OR’ IT WITH THE VDG VALUES CALCULATED ABOVE 95E5 F7FF22 ( extbas.asm):02835 STB PIA1+2 STORE IT INTO THE PIA 95E8 96BA ( extbas.asm):02836 LDA BEGGRP GET MSB OF START OF GRAPHIC PAGE 95EA 44 ( extbas.asm):02837 LSRA *DIVIDE BY 2 - ACCA CONTAINS HOW MANY 512 BYTE ( extbas.asm):02838 * *BLOCKS IN STARTING ADDR 95EB BD960F ( extbas.asm):02839 JSR >L960F GO SET SAM CONTROL REGISTER 95EE 96B6 ( extbas.asm):02840 LDA PMODE GET PMODE VALUE 95F0 8B03 ( extbas.asm):02841 ADDA #$03 ADD IN BIAS TO ADJUST TO PMODE THE SAM REGISTER WANTS 95F2 8107 ( extbas.asm):02842 CMPA #$07 WAS PMODE 4? 95F4 2601 ( extbas.asm):02843 BNE L95F7 NO 95F6 4A ( extbas.asm):02844 DECA DECREMENT ACCA IF PMODE 4 (SAME VDG AS PMODE3) 95F7 8D02 ( extbas.asm):02845 L95F7 BSR L95FB SET THE SAM’S VDG REGISTER 95F9 3596 ( extbas.asm):02846 PULS A,B,X,PC RESTORE REGISTERS AND RETURN 95FB C603 ( extbas.asm):02847 L95FB LDB #$03 3 BITS IN SAM VDG CONTROL REGISTER ( extbas.asm):02848 * ENTER WITH DATA TO GO IN VDG REGISTER IN BOTTOM 3 BITS OF ACCA 95FD 8EFFC0 ( extbas.asm):02849 LDX #SAMREG POINT X TO SAM CONTROL REGISTER 9600 46 ( extbas.asm):02850 L9600 RORA PUT A BIT INTO CARRY FLAG 9601 2404 ( extbas.asm):02851 BCC L9607 BRANCH IF BIT WAS A ZERO 9603 A701 ( extbas.asm):02852 STA $01,X SET SAM REGISTER BIT 9605 2002 ( extbas.asm):02853 BRA L9609 DO NEXT BIT 9607 A784 ( extbas.asm):02854 L9607 STA ,X CLEAR SAM REGISTER 9609 3002 ( extbas.asm):02855 L9609 LEAX $02,X NEXT BIT IN REGISTER 960B 5A ( extbas.asm):02856 DECB DONE ALL BITS? 960C 26F2 ( extbas.asm):02857 BNE L9600 NO 960E 39 ( extbas.asm):02858 RTS 960F C607 ( extbas.asm):02859 L960F LDB #$07 7 BITS IN SAM DISPLAY PAGE REGISTER 9611 8EFFC6 ( extbas.asm):02860 LDX #SAMREG+6 POINT X TO SAM DISPLAY PAGE REGISTER 9614 20EA ( extbas.asm):02861 BRA L9600 GO SET THE REGISTER 9616 B6FF22 ( extbas.asm):02862 L9616 LDA PIA1+2 GET PIA1, PORT B 9619 84F7 ( extbas.asm):02863 ANDA #$F7 MASK OFF VDG CSS CONTROL BIT 961B 9AC1 ( extbas.asm):02864 ORA CSSVAL OR IN CSS COLOR DATA 961D B7FF22 ( extbas.asm):02865 STA PIA1+2 RESTORE IT IN PIA1 9620 39 ( extbas.asm):02866 RTS ( extbas.asm):02867 * PMODE 9621 812C ( extbas.asm):02868 PMODETOK CMPA #', CHECK FOR COMMA - FIRST ARGUMENT MAY BE MISSING 9623 272B ( extbas.asm):02869 BEQ L9650 IT IS A COMMA 9625 BDB70B ( extbas.asm):02870 JSR EVALEXPB EVALUATE EXPRESSION 9628 C105 ( extbas.asm):02871 CMPB #$05 > 4? 962A 2441 ( extbas.asm):02872 BCC L966D YES, ILLEGAL FUNCTION CALL 962C 96BC ( extbas.asm):02873 LDA GRPRAM GET THE START OF GRAPHIC RAM 962E 97BA ( extbas.asm):02874 L962E STA BEGGRP SET START GRAPHIC PAGE 9630 58 ( extbas.asm):02875 ASLB MULT MODE BY 2 - TABLE HAS 2 BYTES PER ENTRY 9631 CE9707 ( extbas.asm):02876 LDU #L9706+1 LOOKUP TABLE 9634 ABC5 ( extbas.asm):02877 ADDA B,U ADD THE AMOUNT OF MEMORY REQUIRED FOR ONE GRAPHIC PAGE 9636 9119 ( extbas.asm):02878 CMPA TXTTAB COMPARE TO MSB OF START OF BASIC PROGRAM 9638 2233 ( extbas.asm):02879 BHI L966D ‘FC’ ERROR IF END OF GRAPHIC PAGE > START OF BASIC PROGRAM 963A 97B7 ( extbas.asm):02880 STA ENDGRP STORE THE END OF GRAPHIC PAGE 963C 335F ( extbas.asm):02881 LEAU $-01,U POINT U TO PREVIOUS BYTE IN TABLE 963E A6C5 ( extbas.asm):02882 LDA B,U *GET THE NUMBER OF BYTES/HORIZONTAL LINE 9640 97B9 ( extbas.asm):02883 STA HORBYT *AND SAVE IT IN HORBYT 9642 54 ( extbas.asm):02884 LSRB RESTORE PMODE VALUE 9643 D7B6 ( extbas.asm):02885 STB PMODE SAVE IT 9645 4F ( extbas.asm):02886 CLRA BACKGROUND COLOR 9646 97B3 ( extbas.asm):02887 STA BAKCOL SET BACKGROUND COLOR TO ZERO 9648 8603 ( extbas.asm):02888 LDA #$03 FOREGROUND COLOR 964A 97B2 ( extbas.asm):02889 STA FORCOL SET FOREGROUND COLOR 964C 9DA5 ( extbas.asm):02890 JSR GETCCH IS THERE A STARTING PAGE NUMBER? 964E 271C ( extbas.asm):02891 BEQ L966C NO 9650 BDB738 ( extbas.asm):02892 L9650 JSR >LB738 EVALUATE EXPRESSION 9653 5D ( extbas.asm):02893 TSTB SET FLAGS 9654 2717 ( extbas.asm):02894 BEQ L966D ‘ILLEGAL FUNCTION CALL’ - CAN’T START ON PAGE ZERO 9656 5A ( extbas.asm):02895 DECB BUMP ONE; BASIC STARTS ON PAGE 1, THIS ROUTINE AT 0 9657 8606 ( extbas.asm):02896 LDA #$06 EACH GRAPHIC PAGE = 6 X 256 (1.5K) 9659 3D ( extbas.asm):02897 MUL MULT BY PAGE NUMBER 965A DBBC ( extbas.asm):02898 ADDB GRPRAM ADD IN START OF GRAPHIC RAM 965C 3404 ( extbas.asm):02899 PSHS B SAVE TEMP START ADDR 965E DBB7 ( extbas.asm):02900 ADDB ENDGRP ADD CURRENT END ADDR 9660 D0BA ( extbas.asm):02901 SUBB BEGGRP SUB OUT CURRENT START ADDR - (ADDS THE SIZE OF ONE GRAPHIC PAGE) 9662 D119 ( extbas.asm):02902 CMPB TXTTAB IS IT > CURRENT START OF BASIC PROGRAM 9664 2207 ( extbas.asm):02903 BHI L966D YES! ILLEGAL FUNCTION CALL 9666 D7B7 ( extbas.asm):02904 STB ENDGRP SAVE AS END OF GRAPHIC PAGE 9668 3504 ( extbas.asm):02905 PULS B GET TEMP START ADOR 966A D7BA ( extbas.asm):02906 STB BEGGRP SAVE AS START OF GRAPHIC PAGE 966C 39 ( extbas.asm):02907 L966C RTS 966D 7EB44A ( extbas.asm):02908 L966D JMP >LB44A ‘ILLEGAL FUNCTION CALL' ( extbas.asm):02909 * SCREEN 9670 812C ( extbas.asm):02910 SCREEN CMPA #', CHECK FOR A COMMA 9672 270B ( extbas.asm):02911 BEQ L967F BRANCH IF COMMA - FIRST ARGUMENT MISSING 9674 BDB70B ( extbas.asm):02912 JSR EVALEXPB EVALUATE EXPRESSION 9677 5D ( extbas.asm):02913 TSTB ZERO FLAG SET IF ALPHA, NOT SET IF GRAPHIC SCREEN 9678 BD95AA ( extbas.asm):02914 JSR >L95AA SET UP THE SAM & VDG FOR PROPER GRAPHIC MODE 967B 9DA5 ( extbas.asm):02915 JSR GETCCH GET NEXT CHARACTER 967D 27ED ( extbas.asm):02916 BEQ L966C RETURN IF NOTHING ELSE ON LINE 967F BDB738 ( extbas.asm):02917 L967F JSR >LB738 CHECK FOR COMMA AND EVALUATE EXPRESSION 9682 5D ( extbas.asm):02918 TSTB SET FLAGS 9683 2702 ( extbas.asm):02919 BEQ L9687 BRANCH IF COLOR SET ZERO 9685 C608 ( extbas.asm):02920 LDB #$08 VALUE FOR COLOR SET ONE 9687 D7C1 ( extbas.asm):02921 L9687 STB CSSVAL SAVE IN VDG CSS RAM IMAGE 9689 208B ( extbas.asm):02922 BRA L9616 GO SET IT INTO PIA ( extbas.asm):02923 * PCLEAR 968B BDB70B ( extbas.asm):02924 PCLEAR JSR EVALEXPB EVALUATE EXPRESSION, RETURN VALUE IN ACCB 968E 5D ( extbas.asm):02925 TSTB SET FLAGS 968F 27DC ( extbas.asm):02926 BEQ L966D BRANCH IF PCLEAR0 - ‘FC’ ERROR 9691 C109 ( extbas.asm):02927 CMPB #$09 TRYING TO CLEAR MORE THAN 8 PAGES? 9693 24D8 ( extbas.asm):02928 BCC L966D YES ‘ILLEGAL FUNCTION CALL’ 9695 8606 ( extbas.asm):02929 LDA #$06 6 X 256 (1.5K) PER GRAPHIC PAGE 9697 3D ( extbas.asm):02930 MUL MULT BY NUMBER OF PAGES 9698 DBBC ( extbas.asm):02931 ADDB GRPRAM ADD IN START OF GRAPHIC RAM 969A 1F98 ( extbas.asm):02932 TFR B,A MOVE B TO MSB OF REG ACCD 969C C601 ( extbas.asm):02933 LDB #$01 REG D NOW CONTAINS TOP OF PCLEARED SPACE +1 969E 1F02 ( extbas.asm):02934 TFR D,Y SAVE IN Y 96A0 1093B7 ( extbas.asm):02935 CMPD ENDGRP COMPARE TOP OF PCLEARED SPACE TO END OF CURRENT GRAPHIC PAGE ( extbas.asm):02936 * THIS CODE REFLECTS THE INFAMOUS PCLEAR BUG 96A3 25C8 ( extbas.asm):02937 BLO L966D ‘FC’ ERROR IF TRYING TO CLEAR < END OF GRAPHIC RAM 96A5 9319 ( extbas.asm):02938 SUBD TXTTAB SUBTRACT START OF BASIC PROGRAM 96A7 D31B ( extbas.asm):02939 ADDD VARTAB ADD END OF BASIC PROGRAM 96A9 1F01 ( extbas.asm):02940 TFR D,X X=TOP OF PCLEARED SPACE + LENGTH OF BASIC PROGRAM 96AB 4C ( extbas.asm):02941 INCA ADD 256 - LEAVE SOME ROOM FOR THE STACK 96AC 9321 ( extbas.asm):02942 SUBD FRETOP SUBTRACT OUT TOP OF CLEARED SPACE 96AE 24BD ( extbas.asm):02943 BCC L966D ‘FC’ ERROR - NO ROOM LEFT 96B0 BD80D0 ( extbas.asm):02944 JSR >L80D0 ADJUST BASIC’S INPUT POINTER 96B3 12 ( extbas.asm):02945 NOP SPACE FILLER FOR EXBAS 1.1 96B4 DE1B ( extbas.asm):02946 LDU VARTAB GET END OF BASIC PROGRAM 96B6 9F1B ( extbas.asm):02947 STX VARTAB STORE NEW END OF BASIC PROGRAM 96B8 11931B ( extbas.asm):02948 CMPU VARTAB COMPARE OLD END TO NEW END 96BB 2417 ( extbas.asm):02949 BCC L96D4 BRANCH IF OLD END > NEW END 96BD A6C2 ( extbas.asm):02950 L96BD LDA ,-U GET BYTE FROM OLD PROGRAM 96BF A782 ( extbas.asm):02951 STA ,-X MOVE TO NEW PROGRAM LOCATION 96C1 119319 ( extbas.asm):02952 CMPU TXTTAB AT THE BEGINNING OF OLD PROGRAM? 96C4 26F7 ( extbas.asm):02953 BNE L96BD NO 96C6 109F19 ( extbas.asm):02954 STY TXTTAB SAVE NEW STARTING ADDRESS 96C9 6F3F ( extbas.asm):02955 CLR $-01,Y CLEAR BYTE JUST BEFORE PROGRAM 96CB BDACEF ( extbas.asm):02956 L96CB JSR >LACEF PUT CORRECT ADDRESSES IN FIRST 2 BYTES OF EACH LINE 96CE BDAD26 ( extbas.asm):02957 JSR >LAD26 DO PART OF A NEW 96D1 7EAD9E ( extbas.asm):02958 JMP >LAD9E GO BACK TO BASIC’S MAIN LOOP 96D4 DE19 ( extbas.asm):02959 L96D4 LDU TXTTAB GET START OF BASIC PROGRAM 96D6 109F19 ( extbas.asm):02960 STY TXTTAB STORE NEW STARTING ADDR 96D9 6F3F ( extbas.asm):02961 CLR $-01,Y CLEAR THE BYTE JUST BEFORE PROGRAM 96DB A6C0 ( extbas.asm):02962 L96DB LDA ,U+ GET BYTE FROM OLD PROGRAM 96DD A7A0 ( extbas.asm):02963 STA ,Y+ MOVE TO NEW PROG LOCATION 96DF 109C1B ( extbas.asm):02964 CMPY VARTAB AT END OF OLD PROGRAM? 96E2 26F7 ( extbas.asm):02965 BNE L96DB NO 96E4 20E5 ( extbas.asm):02966 BRA L96CB GO RESET SOME POINTERS ( extbas.asm):02967 * INITIALIZATION ROUTINE FOR EXBAS GRAPHICS VARIABLES 96E6 C61E ( extbas.asm):02968 L96E6 LDB #$1E * 96E8 D719 ( extbas.asm):02969 STB TXTTAB * SET START OF BASIC PROG TO 1E00 96EA 8606 ( extbas.asm):02970 LDA #$06 = 96EC 97BC ( extbas.asm):02971 L96EC STA GRPRAM =CONSTANT OFFSET OF $600 96EE 97BA ( extbas.asm):02972 STA BEGGRP START OF GRAPHICS PAGE TO $600 96F0 4F ( extbas.asm):02973 CLRA PMODE = 0 96F1 97B6 ( extbas.asm):02974 STA PMODE SET PMODE TO 0 96F3 8610 ( extbas.asm):02975 LDA #$10 16 BYTES/HOR GRAPHIC ROW 96F5 97B9 ( extbas.asm):02976 STA HORBYT SAVE IT 96F7 8603 ( extbas.asm):02977 LDA #$03 SET FOREGROUND COLOR TO 3 96F9 97B2 ( extbas.asm):02978 STA FORCOL SET FOREGROUND COLOR TO 3 96FB 860C ( extbas.asm):02979 LDA #$0C * 96FD 97B7 ( extbas.asm):02980 STA ENDGRP * SET END OF GRAPHICS PAGE TO $C00 96FF 9E19 ( extbas.asm):02981 LDX TXTTAB GET START OF PROGRAM 9701 6F1F ( extbas.asm):02982 CLR $-01,X CLEAR ONE BYTE JUST BEFORE PROGRAM 9703 7EAD19 ( extbas.asm):02983 L9703 JMP >LAD19 GO DO A ‘NEW’ ( extbas.asm):02984 * TABLE OF HOW MANY BYTES/GRAPHIC ROW AND HOW MUCH RAM ( extbas.asm):02985 * FOR ONE HI RES SCREEN FOR THE PMODES. ROWS FIRST, ( extbas.asm):02986 * BYTES (IN 256 BYTE BLOCKS) SECOND. 9706 1006 ( extbas.asm):02987 L9706 FCB $10,$06 PMODE 0 9708 200C ( extbas.asm):02988 L9708 FCB $20,$0C PMODE 1 970A 100C ( extbas.asm):02989 L970A FCB $10,$0C PMODE 2 970C 2018 ( extbas.asm):02990 L970C FCB $20,$18 PMODE 3 970E 2018 ( extbas.asm):02991 L970E FCB $20,$18 PMODE 4 ( extbas.asm):02992 * CALC ABS(VEREND - VERBEG) 9710 DCC5 ( extbas.asm):02993 L9710 LDD VEREND GET VERTICAL ENDING ADDRESS 9712 93BF ( extbas.asm):02994 SUBD VERBEG SUBTRACT OUT VERTICAL BEGINNING ADDRESS 9714 243B ( extbas.asm):02995 L9714 BCC L9751 RETURN IF END >= START 9716 3401 ( extbas.asm):02996 PSHS CC SAVE STATUS (WHICH COORDINATE IS GREATER) 9718 BD9DC3 ( extbas.asm):02997 JSR >L9DC3 NEGATE ACCD IF START COORD > END COORD 971B 3581 ( extbas.asm):02998 PULS CC,PC RESTORE STATUS AND RETURN ( extbas.asm):02999 * CALC ABS(HOREND - HORBEG) 971D DCC3 ( extbas.asm):03000 L971D LDD HOREND GET HORIZONTAL END COORD 971F 93BD ( extbas.asm):03001 SUBD HORBEG SUB OUT HORIZONTAL START COORD 9721 20F1 ( extbas.asm):03002 BRA L9714 GET ABSOLUTE VALUE ( extbas.asm):03003 * PCOPY 9723 8D1A ( extbas.asm):03004 PCOPY BSR L973F *EVALUATE SOURCE PAGE NUMBER AND RETURN MSB OF ( extbas.asm):03005 * *ADDRESS OF START OF PAGE IN ACCD 9725 3406 ( extbas.asm):03006 PSHS B,A SAVE PAGE 1 OFFSET 9727 C6A5 ( extbas.asm):03007 LDB #$A5 TOKEN FOR ‘TO’ 9729 BDB26F ( extbas.asm):03008 JSR >LB26F SYNTAX CHECK FOR ‘TO’ 972C 8D11 ( extbas.asm):03009 BSR L973F EVALUATE PAGE NUMBER 972E 3510 ( extbas.asm):03010 PULS X SET ADDRESS OF SOURCE PAGE TO X 9730 1F03 ( extbas.asm):03011 TFR D,U ADDRESS OF DESTINATION PAGE TO U 9732 108E0300 ( extbas.asm):03012 LDY #$300 MOVE $300 PAIRS OF BYTES (ONE GRAPHIC PAGE) 9736 EC81 ( extbas.asm):03013 L9736 LDD ,X++ GET TWO BYTES FROM SOURCE 9738 EDC1 ( extbas.asm):03014 STD ,U++ PUT INTO DESTINATION PAGE 973A 313F ( extbas.asm):03015 LEAY $-01,Y DECREMENT COUNTER 973C 26F8 ( extbas.asm):03016 BNE L9736 NOT DONE YET 973E 39 ( extbas.asm):03017 RTS 973F BDB70B ( extbas.asm):03018 L973F JSR EVALEXPB EVALUATE EXPRESSION 9742 5D ( extbas.asm):03019 TSTB PAGE ZERO? 9743 270D ( extbas.asm):03020 BEQ L9752 YES - ‘ILLEGAL FUNCTION CALL’ ( extbas.asm):03021 * THIS IS A FLAKEY ERROR CHECK - IT WILL LET YOU PCOPY OVER ( extbas.asm):03022 * THE TOP OF THE BASIC PROGRAM IN SOME INSTANCES. 9745 D119 ( extbas.asm):03023 CMPB TXTTAB IS PAGE NUMBER > MSB OF START ADDR OF BASIC PROG? 9747 2209 ( extbas.asm):03024 BHI L9752 ‘FC’ ERROR IF SO - BAD ERROR CHECK 9749 5A ( extbas.asm):03025 DECB *BUMP PAGE NUMBER DOWN 1, BASIC STARTS AT 1, THIS ( extbas.asm):03026 * *ROUTINE STARTS AT ZERO 974A 8606 ( extbas.asm):03027 LDA #$06 6*256 (1.5K) PER GRAPHIC PAGE 974C 3D ( extbas.asm):03028 MUL GET OFFSET OF THIS PAGE NUMBER 974D DBBC ( extbas.asm):03029 ADDB GRPRAM *GET START OF GRAPHIC RAM- ACCB NOW CONTAINS ( extbas.asm):03030 * *MSB OF ADDRESS OF THIS PAGE 974F 1E89 ( extbas.asm):03031 EXG A,B NON ACCD HAS ADDRESS OF PAGE START 9751 39 ( extbas.asm):03032 L9751 RTS 9752 7EB44A ( extbas.asm):03033 L9752 JMP >LB44A ‘ILLEGAL FUNCTION CALL’ ( extbas.asm):03034 * GET 9755 5F ( extbas.asm):03035 GET CLRB ‘GET’ FLAG 9756 2002 ( extbas.asm):03036 BRA L975A THIS SHOULD BE FCB SKP2 - IT WOULD SAVE A BYTE ( extbas.asm):03037 * PUT 9758 C601 ( extbas.asm):03038 PUT LDB #$01 ‘PUT’ FLAG 975A D7D8 ( extbas.asm):03039 L975A STB VD8 SAVE GET/PUT FLAG 975C BD01A0 ( extbas.asm):03040 JSR RVEC22 HOOK INTO RAM 975F 8140 ( extbas.asm):03041 L975F CMPA #'@ CHECK FOR @ SIGN 9761 2602 ( extbas.asm):03042 BNE L9765 NO @ SIGN 9763 9D9F ( extbas.asm):03043 JSR GETNCH GO GET NEXT INPUT CHARACTER 9765 BD938F ( extbas.asm):03044 L9765 JSR >L938F GO EVALUATE START AND END POINTS - STORE START AT (HORBEG,VERSEG), END AT (HOREND,VEREND) 9768 BDB26D ( extbas.asm):03045 JSR SYNCOMMA SYNTAX CHECK FOR COMMA 976B BD98CC ( extbas.asm):03046 JSR >L98CC GET POINTER TO ARRAY DESCRIPTOR 976E 1F10 ( extbas.asm):03047 TFR X,D SAVE DESCRIPTOR + 2 IN ACCD 9770 EE84 ( extbas.asm):03048 LDU ,X SAVE OFFSET TO NEXT ARRAY IN U 9772 335E ( extbas.asm):03049 LEAU $-02,U POINT U TO START OF DESCRIPTOR 9774 33CB ( extbas.asm):03050 LEAU D,U POINT U TO END OF ARRAY 9776 DFD1 ( extbas.asm):03051 STU VD1 SAVE END OF DATA (END OF ARRAY) 9778 3002 ( extbas.asm):03052 LEAX $02,X POINT X TO NUMBER OF DIMENSIONS AND 977A E684 ( extbas.asm):03053 LDB ,X GET NUMBER DIMENSIONS IN ACCB 977C 58 ( extbas.asm):03054 ASLB TIMES 2 - 2 BYTES/DIMENSION 977D 3A ( extbas.asm):03055 ABX POINT X TO START OF ARRAY DATA 977E 9FCF ( extbas.asm):03056 STX VCF SAVE START OF DATA (START OF ARRAY DATA) 9780 9606 ( extbas.asm):03057 LDA VALTYP CHECK VARIABLE TYPE 9782 26CE ( extbas.asm):03058 BNE L9752 ‘FC’ ERROR IF STRING VARIABLE 9784 0FD4 ( extbas.asm):03059 CLR VD4 GET/PUT GRAPHIC/ACTION FLAG 9786 9DA5 ( extbas.asm):03060 JSR GETCCH GET CURRENT INPUT CHAR 9788 272D ( extbas.asm):03061 BEQ L97B7 BRANCH IF END OF LINE 978A 03D4 ( extbas.asm):03062 COM VD4 TOGGLE GET/PUT GRAPHIC/ACTION FLAG 978C BDB26D ( extbas.asm):03063 JSR SYNCOMMA SYNTAX CHECK FOR COMMA 978F 0DD8 ( extbas.asm):03064 TST VD8 CHECK GET/PUT FLAG 9791 2607 ( extbas.asm):03065 BNE L979A BRANCH IF PUT 9793 C647 ( extbas.asm):03066 LDB #'G CHECK FOR FULL GRAPHIC OPTION 9795 BDB26F ( extbas.asm):03067 JSR >LB26F DO A SYNTAX CHECK FOR A ‘G’ 9798 2030 ( extbas.asm):03068 BRA L97CA SKIP AROUND THE ‘NO G’ OPTION CODE 979A C605 ( extbas.asm):03069 L979A LDB #$05 FIVE LEGAL TOKENS AT END OF PUT 979C 8E9839 ( extbas.asm):03070 LDX #L9839 POINT X TO LOOK UP TABLE 979F EE81 ( extbas.asm):03071 L979F LDU ,X++ GET ‘CLEAR BIT’ ACTION ROUTINE ADDRESS 97A1 10AE81 ( extbas.asm):03072 LDY ,X++ GET “SET BIT’ ACTION ROUTINE ADDRESS 97A4 A180 ( extbas.asm):03073 CMPA ,X+ CHECK FOR ONE OF THE FIVE LEGAL TOKENS 97A6 2706 ( extbas.asm):03074 BEQ L97AE FOUND ONE 97A8 5A ( extbas.asm):03075 DECB CHECKED ALL FIVE? 97A9 26F4 ( extbas.asm):03076 BNE L979F NO - KEEP GOING 97AB 7EB277 ( extbas.asm):03077 JMP >LB277 ‘SYNTAX’ ERROR IF TOKEN NOT FOUND 97AE 109FD5 ( extbas.asm):03078 L97AE STY VD5 ARRAY ‘SET BIT’ ACTION ROUTINE ADDRESS 97B1 DFD9 ( extbas.asm):03079 STU VD9 ARRAY ‘CLEAR BIT’ ACTION ROUTINE ADDRESS 97B3 9D9F ( extbas.asm):03080 JSR GETNCH GET INPUT CHAR FROM BASIC 97B5 2013 ( extbas.asm):03081 BRA L97CA SKIP AROUND THE ‘NO G’ OPTION CODE ( extbas.asm):03082 * NO ‘G’ OPTION OR ACTION SPECIFIED BY BASIC INPUT LINE 97B7 C6F8 ( extbas.asm):03083 L97B7 LDB #$F8 BOTTOM 3 BITS MASK (8 PIXELS/BYTE) 97B9 96B6 ( extbas.asm):03084 LDA PMODE GET CURRENT PMODE 97BB 46 ( extbas.asm):03085 RORA BIT 0 TO CARRY 97BC 2402 ( extbas.asm):03086 BCC L97C0 BRANCH IF PMODE 0,2,4 (2 COLOR) 97BE C6FC ( extbas.asm):03087 LDB #$FC BOTTOM 2 BITS MASK (4 COLOR MODE - 4 PIXELS/BYTE) 97C0 1F98 ( extbas.asm):03088 L97C0 TFR B,A SAVE ACCB IN ACCA 97C2 D4BE ( extbas.asm):03089 ANDB HORBEG+1 * 97C4 D7BE ( extbas.asm):03090 STB HORBEG+1 * MASK THE PIXEL COUNTER (BITS 0,1= 97C6 94C4 ( extbas.asm):03091 ANDA HOREND+1 * 4 COLOR, BITS 0-2=2 COLOR) BITS OFF 97C8 97C4 ( extbas.asm):03092 STA HOREND+1 * THE HORIZONTAL DIFFERENCE 97CA BD971D ( extbas.asm):03093 L97CA JSR >L971D CALC HORIZ DIFFERENCE ABS(HOREND-HORBEG) 97CD 2404 ( extbas.asm):03094 BCC L97D3 BRANCH IF END > START 97CF 9EC3 ( extbas.asm):03095 LDX HOREND * MAKE START = END IF 97D1 9FBD ( extbas.asm):03096 STX HORBEG * START > END 97D3 DDC3 ( extbas.asm):03097 L97D3 STD HOREND SAVE HORIZ DIFFERENCE 97D5 BD9710 ( extbas.asm):03098 JSR >L9710 CALC VERT DIFFERENCE ABS (VEREND-VERBEG) 97D8 2404 ( extbas.asm):03099 BCC L97DE BRANCH IF END > START 97DA 9EC5 ( extbas.asm):03100 LDX VEREND * MAKE START = END IF 97DC 9FBF ( extbas.asm):03101 STX VERBEG * START > END 97DE DDC5 ( extbas.asm):03102 L97DE STD VEREND SAVE VERT DIFFERENCE 97E0 96B6 ( extbas.asm):03103 LDA PMODE * GET PMODE BIT 0 97E2 46 ( extbas.asm):03104 RORA * TO THE CARRY FLAG 97E3 DCC3 ( extbas.asm):03105 LDD HOREND GET HORIZ DIFFERENCE 97E5 2404 ( extbas.asm):03106 BCC L97EB BRANCH IF PMODE = 0,2,4(2 COLOR) 97E7 D3C3 ( extbas.asm):03107 ADDD HOREND * DOUBLE HORIZ DIFF - 2X AS MANY BYTES FOR 97E9 DDC3 ( extbas.asm):03108 STD HOREND * NUMBER OF PIXELS IN PMODES 1,3 97EB BD9420 ( extbas.asm):03109 L97EB JSR >L9420 NORMALIZE DIFFERENCES 97EE DCC3 ( extbas.asm):03110 LDD HOREND GET HORIZ DIFFERENCE 97F0 9EC5 ( extbas.asm):03111 LDX VEREND * 97F2 3001 ( extbas.asm):03112 LEAX $01,X * 97F4 9FC5 ( extbas.asm):03113 STX VEREND * ADD 1 TO VERT DIFFERENCE 97F6 0DD4 ( extbas.asm):03114 TST VD4 = CHECK FOR ‘G’ OPTION OR GET ACTION 97F8 2658 ( extbas.asm):03115 BNE L9852 = AND BRANCH IF GIVEN 97FA 44 ( extbas.asm):03116 LSRA * 97FB 56 ( extbas.asm):03117 RORB * 97FC 44 ( extbas.asm):03118 LSRA * 97FD 56 ( extbas.asm):03119 RORB * 97FE 44 ( extbas.asm):03120 LSRA * 97FF 56 ( extbas.asm):03121 RORB * DIVIDE HORIZONTAL DIFFERENCE BY 8 9800 C30001 ( extbas.asm):03122 ADDD #1 ADD ONE TO QUOTIENT 9803 DDC3 ( extbas.asm):03123 STD HOREND SAVE NEW HOR DIFFERENCE 9805 BD9298 ( extbas.asm):03124 JSR >L9298 *CONVERT (HORBEG,VERSEG) INTO ABSOLUTE SCREEN ( extbas.asm):03125 *POS (X) AND PIXEL MASK (ACCA) 9808 D6C4 ( extbas.asm):03126 L9808 LDB HOREND+1 GET HORIZ DIFFERENCE 980A 3410 ( extbas.asm):03127 PSHS X SAVE SCREEN POSITION 980C 0DD8 ( extbas.asm):03128 L980C TST VD8 CHECK THE GET/PUT FLAG 980E 2721 ( extbas.asm):03129 BEQ L9831 BRANCH IF ‘GET’ 9810 8D11 ( extbas.asm):03130 BSR L9823 INCREMENT ARRAY DATA POINTER 9812 A6C4 ( extbas.asm):03131 LDA ,U GET DATA FROM ARRAY 9814 A780 ( extbas.asm):03132 STA ,X+ PUT IT ON THE SCREEN 9816 5A ( extbas.asm):03133 L9816 DECB DECREMENT HORIZ DIFFERENCE 9817 26F3 ( extbas.asm):03134 BNE L980C BRANCH IF NOT AT END OF HORIZ LINE 9819 3510 ( extbas.asm):03135 PULS X GET SCREEN POSITION BACK 981B BD92E9 ( extbas.asm):03136 JSR >L92E9 MOVE ABS POSITION DOWN ONE ROW 981E 0AC6 ( extbas.asm):03137 DEC VEREND+1 DECREMENT VERTICAL DIFFERENCE 9820 26E6 ( extbas.asm):03138 BNE L9808 BRANCH IF NOT DONE 9822 39 ( extbas.asm):03139 L9822 RTS 9823 DECF ( extbas.asm):03140 L9823 LDU VCF * 9825 3341 ( extbas.asm):03141 LEAU $01,U * 9827 DFCF ( extbas.asm):03142 STU VCF * ADD ONE TO CURRENT ARRAY DATA POINTER 9829 1193D1 ( extbas.asm):03143 CMPU VD1 COMPARE TO END OF DATA 982C 26F4 ( extbas.asm):03144 BNE L9822 RETURN IF NOT AT END 982E 7EB44A ( extbas.asm):03145 L982E JMP >LB44A ‘ILLEGAL FUNCTION CALL’ 9831 A680 ( extbas.asm):03146 L9831 LDA ,X+ GET DATA FROM SCREEN 9833 8DEE ( extbas.asm):03147 BSR L9823 INCREMENT ARRAY DATA POINTER 9835 A7C4 ( extbas.asm):03148 STA ,U STORE IN ARRAY 9837 20DD ( extbas.asm):03149 BRA L9816 KEEP LOOPING TILL DONE ( extbas.asm):03150 * 9839 9894989B ( extbas.asm):03151 L9839 FDB L9894,L989B 983D BD ( extbas.asm):03152 L983D FCB $BD TOKEN FOR PSET 983E 989B9894 ( extbas.asm):03153 L983E FDB L989B,L9894 9842 BE ( extbas.asm):03154 L9842 FCB $BE TOKEN FOR PRESET 9843 98B1989B ( extbas.asm):03155 L9843 FDB L98B1,L989B 9847 B1 ( extbas.asm):03156 L9847 FCB $B1 TOKEN FOR OR 9848 989498B1 ( extbas.asm):03157 L9848 FDB L9894,L98B1 984C B0 ( extbas.asm):03158 L984C FCB $B0 TOKEN FOR AND 984D 98A198A1 ( extbas.asm):03159 L984D FDB L98A1,L98A1 9851 A8 ( extbas.asm):03160 L9851 FCB $A8 TOKEN FOR NOT ( extbas.asm):03161 * GET/PUT WITH 'G' OPTION SPECIFIED 9852 C30001 ( extbas.asm):03162 L9852 ADDD #1 ADD ONE TO HORIZ DIFFERENCE 9855 DDC3 ( extbas.asm):03163 STD HOREND AND SAVE IT 9857 96D8 ( extbas.asm):03164 LDA VD8 *CHECK GET/PUT FLAG AND 9859 2609 ( extbas.asm):03165 BNE L9864 *BRANCH IF PUT 985B DED1 ( extbas.asm):03166 LDU VD1 GET END OF ARRAYS 985D A7C2 ( extbas.asm):03167 L985D STA ,-U *THIS CODE WILL 985F 1193CF ( extbas.asm):03168 CMPU VCF *ZERO OUT THE ENTIRE 9862 22F9 ( extbas.asm):03169 BHI L985D *'GET' ARRAY 9864 BD9298 ( extbas.asm):03170 L9864 JSR >L9298 =CONVERT (HORBEG,VERBEG) INTO ABSOLUTE SCREEN POSITION ( extbas.asm):03171 * =(X) AND PIXEL MASK (ACCA) 9867 D6B6 ( extbas.asm):03172 LDB PMODE GET CURRENT PMODE 9869 56 ( extbas.asm):03173 RORB BIT 0 TO CARRY 986A 2402 ( extbas.asm):03174 BCC L986E BRANCH IF PMODE 0,2,4 (2 COLOR) 986C 84AA ( extbas.asm):03175 ANDA #$AA USE $AA AS THE PIXEL MASK IN 4 COLOR MODE 986E C601 ( extbas.asm):03176 L986E LDB #$01 INITIALIZE SHIFT CTR 9870 109ECF ( extbas.asm):03177 LDY VCF POINT Y TO ARRAY DATA 9873 3412 ( extbas.asm):03178 L9873 PSHS X,A SAVE PIXEL MASK (ACCA) AND ABS SCRN POS (X) ON STACK 9875 DEC3 ( extbas.asm):03179 LDU HOREND GET THE HORIZONTAL DIFFERENCE 9877 3442 ( extbas.asm):03180 L9877 PSHS U,A SAVE PIXEL MASK AND HORIZ DIFF 9879 54 ( extbas.asm):03181 LSRB SHIFT BIT CTR RIGHT 987A 2408 ( extbas.asm):03182 BCC L9884 BRANCH IF ALL 8 SHIFTS NOT DONE 987C 56 ( extbas.asm):03183 RORB SHIFT CARRY BACK INTO ACCB 987D 3121 ( extbas.asm):03184 LEAY $01,Y INCREMENT ARRAY DATA POINTER 987F 109CD1 ( extbas.asm):03185 CMPY VD1 COMPARE TO END OF ARRAY 9882 27AA ( extbas.asm):03186 BEQ L982E ‘FC’ ERROR IF AT END 9884 0DD8 ( extbas.asm):03187 L9884 TST VD8 CHECK THE GET/PUT FLAG AND 9886 271F ( extbas.asm):03188 BEQ L98A7 BRANCH IF GET 9888 E5A4 ( extbas.asm):03189 BITB ,Y TEST A BIT IN ARRAY DATA 988A 2704 ( extbas.asm):03190 BEQ L9890 BRANCH IF ZERO 988C 6E9F00D5 ( extbas.asm):03191 JMP [VD5] JUMP TO ACTION ROUTINE FOR ARRAY BIT SET 9890 6E9F00D9 ( extbas.asm):03192 L9890 JMP [VD9] JUMP TO ACTION ROUTINE FOR ARRAY BIT CLEAR 9894 43 ( extbas.asm):03193 L9894 COMA *MASK SOURCE DATA 9895 A484 ( extbas.asm):03194 ANDA ,X *OFF OF SCREEN DATA 9897 A784 ( extbas.asm):03195 STA ,X SAVE TO SCREEN 9899 2016 ( extbas.asm):03196 BRA L98B1 989B AA84 ( extbas.asm):03197 L989B ORA ,X ‘OR’ SOURCE DATA WITH SCREEN 989D A784 ( extbas.asm):03198 STA ,X SAVE TO SCREEN 989F 2010 ( extbas.asm):03199 BRA L98B1 98A1 A884 ( extbas.asm):03200 L98A1 EORA ,X INVERT THE PIXEL 98A3 A784 ( extbas.asm):03201 STA ,X SAVE TO SCREEN 98A5 200A ( extbas.asm):03202 BRA L98B1 98A7 A584 ( extbas.asm):03203 L98A7 BITA ,X TEST THE PIXEL 98A9 2706 ( extbas.asm):03204 BEQ L98B1 BRANCH IF IT IS OFF 98AB 1F98 ( extbas.asm):03205 TFR B,A PUT SHIFT CTR IN ACCA 98AD AAA4 ( extbas.asm):03206 ORA ,Y TURN ON PROPER BIT IN 98AF A7A4 ( extbas.asm):03207 STA ,Y THE ARRAY DATA 98B1 3542 ( extbas.asm):03208 L98B1 PULS A,U RESTORE PIXEL MASK AND HOR DIFF 98B3 BD92ED ( extbas.asm):03209 JSR >L92ED MOVE SCRN POS & PIXEL MASK ONE TO RIGHT (TWO COLOR MODE) 98B6 335F ( extbas.asm):03210 LEAU $-01,U * 98B8 11938A ( extbas.asm):03211 CMPU ZERO * DECR HORIZ DIFFERENCE AND 98BB 26BA ( extbas.asm):03212 BNE L9877 * BRANCH IF NOT ZERO 98BD AE61 ( extbas.asm):03213 LDX $01,S GET ABS SCRN POS FROM STACK 98BF 96B9 ( extbas.asm):03214 LDA HORBYT GET NUMBER BYTES/GRAPHIC ROW 98C1 3086 ( extbas.asm):03215 LEAX A,X MOVE SCRN POS DOWN ONE ROW 98C3 3502 ( extbas.asm):03216 PULS A PULL PIXEL MASK OFF THE STACK 98C5 3262 ( extbas.asm):03217 LEAS $02,S GET X OFF THE STACK 98C7 0AC6 ( extbas.asm):03218 DEC VEREND+1 DECR VERT ROW CTR 98C9 26A8 ( extbas.asm):03219 BNE L9873 BRANCH IF NOT DONE 98CB 39 ( extbas.asm):03220 RTS RETURN FROM GET/PUT COMMAND 98CC BDB357 ( extbas.asm):03221 L98CC JSR >LB357 EVAL ALPHA EXPR, RETURN DESCRIPTOR PTR IN X 98CF E682 ( extbas.asm):03222 LDB ,-X *STRIP OFF THE VARIABLE 98D1 A682 ( extbas.asm):03223 LDA ,-X *NAME (2 ALPHA-NUMERIC CHARACTERS) AND 98D3 1F03 ( extbas.asm):03224 TFR D,U *STORE THEM IN U 98D5 9E1D ( extbas.asm):03225 LDX ARYTAB GET START OF ARRAYS 98D7 9C1F ( extbas.asm):03226 L98D7 CMPX ARYEND COMPARE TO END OF ARRAYS 98D9 10271B6D ( extbas.asm):03227 LBEQ LB44A ‘FC’ ERROR IF UNDEFINED ARRAY 98DD 11A384 ( extbas.asm):03228 CMPU ,X COMPARE TARGET NAME TO ARRAY NAME 98E0 2706 ( extbas.asm):03229 BEQ L98E8 RETURN IF CORRECT ARRAY FOUND 98E2 EC02 ( extbas.asm):03230 LDD $02,X * GET OFFSET TO NEXT ARRAY AND 98E4 308B ( extbas.asm):03231 LEAX D,X * ADD TO POINTER 98E6 20EF ( extbas.asm):03232 BRA L98D7 KEEP SEARCHING FOR MATCH 98E8 3002 ( extbas.asm):03233 L98E8 LEAX $02,X MOVE POINTER TO OFFSET TO NEXT ARRAY 98EA 39 ( extbas.asm):03234 RTS WASTED BYTE 98EB 39 ( extbas.asm):03235 L98EB RTS ( extbas.asm):03236 * PAINT 98EC 8140 ( extbas.asm):03237 PAINT CMPA #'@ CHECK FOR @ SIGN 98EE 2602 ( extbas.asm):03238 BNE L98F2 SKIP IF NOT 98F0 9D9F ( extbas.asm):03239 JSR GETNCH READ A CHARACTER FROM BASIC INPUT LINE 98F2 BD93B2 ( extbas.asm):03240 L98F2 JSR >L93B2 *SYNTAX CHECK FOR ‘(‘, TWO EXPRESSION, AND ‘)’. ( extbas.asm):03241 * *SAVE HOR COORD IN HORSES, VER COORD IN VERSES 98F5 BD931D ( extbas.asm):03242 JSR >L931D NORMALIZE THE HOR, VER COORDINATES 98F8 8601 ( extbas.asm):03243 LDA #$01 PSET VALUE 98FA 97C2 ( extbas.asm):03244 STA SETFLG SET PSET/PRESET FLAG TO PSET 98FC BD9581 ( extbas.asm):03245 JSR >L9581 GET PAINT COLOR CODE & SET THE ACTIVE COLOR AND ALL PIXEL BYTES 98FF DCB4 ( extbas.asm):03246 LDD WCOLOR GET THEM 9901 3406 ( extbas.asm):03247 PSHS B,A SAVE THEM ON STACK 9903 9DA5 ( extbas.asm):03248 JSR GETCCH GET CURRENT CHARACTER FROM INPUT LINE 9905 2703 ( extbas.asm):03249 BEQ L990A BRANCH IF NONE LEFT - DEFAULT BORDER COLOR TO FOREGROUND, PAINT COLOR TO BACKGROUND 9907 BD9581 ( extbas.asm):03250 JSR >L9581 EVALUATE THE BORDER COLOR 990A 96B5 ( extbas.asm):03251 L990A LDA ALLCOL GET BORDER COLOR ALL PIXEL BYTE 990C 97D8 ( extbas.asm):03252 STA VD8 TEMP SAVE IT 990E 3506 ( extbas.asm):03253 PULS A,B GET PAINT ACTIVE COLORS BACK 9910 DDB4 ( extbas.asm):03254 STD WCOLOR RESAVE IT 9912 4F ( extbas.asm):03255 CLRA * STORE A BLOCK OF ‘PAINT’ DATA ON THE STACK WHICH 9913 3456 ( extbas.asm):03256 PSHS U,X,B,A * WILL ACT AS AN END OF ‘PAINT’ DATA FLAG. ( extbas.asm):03257 * *THE CLRA WILL CAUSE THE UP/DN FLAG TO BE ZERO WHICH IS ( extbas.asm):03258 * *USED AS A FLAG TO EXIT THE ‘PAINT’ ROUTINE 9915 BD9522 ( extbas.asm):03259 JSR >L9522 GET NORMALIZED MAX HOR/VER VALUES - RETURN RESULT IN VD3, VD5 9918 BD928F ( extbas.asm):03260 JSR >L928F POINT U TO THE ROUTINE WHICH WILL SELECT A PIXEL ( extbas.asm):03261 * ( extbas.asm):03262 * 'PAINT' THE FIRST HORIZONTAL LINE FROM THE START COORDINATES 991B DFD9 ( extbas.asm):03263 STU VD9 SAVE IT 991D BD99DF ( extbas.asm):03264 JSR >L99DF ‘PAINT’ FROM CURRENT HOR COORD TO ZERO 9920 270F ( extbas.asm):03265 BEQ L9931 BRANCH IF NO PAINTING DONE - HIT BORDER INSTANTLY 9922 BD99CB ( extbas.asm):03266 JSR >L99CB ‘PAINT’ TOWARD MAX HOR COORD 9925 8601 ( extbas.asm):03267 LDA #$01 * 9927 97D7 ( extbas.asm):03268 STA VD7 * UP/DN FLAG UP=1; DOWN=$FF 9929 BD99BA ( extbas.asm):03269 JSR >L99BA SAVE POSITIVE GOING LINE INFO ON STACK 992C 00D7 ( extbas.asm):03270 NEG VD7 SET UP/ON FLAG = FF 992E BD99BA ( extbas.asm):03271 JSR >L99BA SAVE NEGATIVE GOING LINE INFO ON STACK 9931 10DFDC ( extbas.asm):03272 L9931 STS TMPSTK TEMP STORE STACK POINTER 9934 0DDB ( extbas.asm):03273 L9934 TST CHGFLG SEE IF ‘PAINTED’ COLOR IS DIFFERENT THAN ORIGINAL COLOR 9936 2603 ( extbas.asm):03274 BNE L993B BRANCH IF DATA HAS BEEN MODIFIED 9938 10DEDC ( extbas.asm):03275 LDS TMPSTK GET STACK POINTER BACK 993B 3556 ( extbas.asm):03276 L993B PULS A,B,X,U GET DATA FOR THE NEXT LINE SEGMENT TO CHECK FROM THE STACK 993D 0FDB ( extbas.asm):03277 CLR CHGFLG CLEAR CHANGE FLAG 993F 10DFDC ( extbas.asm):03278 STS TMPSTK TEMP SAVE STACK 9942 3001 ( extbas.asm):03279 LEAX $01,X ADD ONE TO ‘START HOR COORD - 1’ 9944 9FBD ( extbas.asm):03280 STX HORBEG PUT IT AT ‘CURRENT HOR COORD ADDR’ 9946 DFD1 ( extbas.asm):03281 STU VD1 ‘LENGTH OF PARENT LINE’ 9948 97D7 ( extbas.asm):03282 STA VD7 SAVE ‘UP/DN FLAG’ 994A 279F ( extbas.asm):03283 BEQ L98EB EXIT ROUTINE IF UP/DN FLAG = 0 994C 2B06 ( extbas.asm):03284 BMI L9954 BRANCH IF UP/DN FLAG = DOWN ( extbas.asm):03285 * CHECK LINE BELOW CURRENT DATA 994E 5C ( extbas.asm):03286 INCB INCREMENT VER COORD 994F D1D6 ( extbas.asm):03287 CMPB VD6 COMPARE TO MAXIMUM VER COORD 9951 2305 ( extbas.asm):03288 BLS L9958 BRANCH IF NOT GREATER - PROCESS LINE 9953 5F ( extbas.asm):03289 CLRB SET VER COORD TO ZERO TO FORCE WRAP AROUND 9954 5D ( extbas.asm):03290 L9954 TSTB TEST VER COORD 9955 27DD ( extbas.asm):03291 BEQ L9934 *PROCESS ANOTHER BLOCK OF ‘PAINT’ DATA IF ( extbas.asm):03292 * *WRAP AROUND - DISCARD ANY LINE BELOW ( extbas.asm):03293 * *VER COORD = 0 OR ABOVE MAX VERTICAL COORD 9957 5A ( extbas.asm):03294 DECB DEC VER COORD - WE ARE TESTING UP/DN FLAG = UP IF THERE ( extbas.asm):03295 * PROCESS A HOR LINE THAT WAS STORED ON STACK - LIMIT CHECKS HAVE BEEN DONE 9958 D7C0 ( extbas.asm):03296 L9958 STB VERBEG+1 SAVE CURRENT VER COORD 995A BD99DF ( extbas.asm):03297 JSR >L99DF PAINT FROM HOR COORD TO ZERO OR BORDER 995D 270F ( extbas.asm):03298 BEQ L996E IF NUMBER OF PAINTED PIXELS = 0, COMPLEMENT LENGTH 995F 10830003 ( extbas.asm):03299 CMPD #3 *SEE IF < 3 PIXELS WERE PAINTED - IF FEWER THAN ( extbas.asm):03300 * *THREE PIXELS WERE PAINTED THEN THERE IS NO NEED TO ( extbas.asm):03301 * *CHECK FOR MORE DATA TO ‘PAINT’ ON THE LINE TO THE ( extbas.asm):03302 * *LEFT OF THE CURRENT POSITION IN THE OPPOSITE ( extbas.asm):03303 * *DIRECTION THAT THE UP/DN FLAG IS CURRENTLY SET TO 9963 2504 ( extbas.asm):03304 BLO L9969 BRANCH IF NO NEED TO CHECK FOR ‘PAINTABLE’ DATA 9965 301E ( extbas.asm):03305 LEAX $-02,X MOVE THE HORIZONTAL COORDINATE TWO PIXELS TO THE LEFT 9967 8D38 ( extbas.asm):03306 BSR L99A1 *SAVE A BLOCK OF ‘PAINT’ DATA IN THE DIRECTION ( extbas.asm):03307 * *OPPOSITE TO THE ‘UP/DN’ FLAG 9969 BD99CB ( extbas.asm):03308 L9969 JSR >L99CB CONTINUE PAINTING LINE TO THE RIGHT 996C 8D4C ( extbas.asm):03309 L996C BSR L99BA *SAVE A BLOCK OF PAINT DATA IN THE SAME ( extbas.asm):03310 * *DIRECTION AS THE ‘UP/DN’ FLAG ( extbas.asm):03311 * ( extbas.asm):03312 * THIS CODE WILL INSURE THAT THE CURRENT LINE IS ( extbas.asm):03313 * EXAMINED TO THE RIGHT FOR 'PAINTABLE' PIXELS FOR ( extbas.asm):03314 * A LENGTH EQUAL TO THE LENGTH OF THE 'PARENT' LINE 996E 43 ( extbas.asm):03315 L996E COMA * 996F 53 ( extbas.asm):03316 COMB * COMPLEMENT LENGTH OF LINE JUST PAINTED 9970 D3D1 ( extbas.asm):03317 L9970 ADDD VD1 ADD TO LENGTH OF ‘PARENT LINE’ 9972 DDD1 ( extbas.asm):03318 STD VD1 SAVE DIFFERENCE OF LINE JUST PAINTED AND PARENT LINE 9974 2F16 ( extbas.asm):03319 BLE L998C BRANCH IF PARENT LINE IS SHORTER 9976 BD9506 ( extbas.asm):03320 JSR >L9506 GO INC HOR COORD 9979 BD9A12 ( extbas.asm):03321 JSR >L9A12 CHECK FOR BORDER COLOR 997C 2605 ( extbas.asm):03322 BNE L9983 NOT BORDER COLOR - 997E CCFFFF ( extbas.asm):03323 LDD #-1 * GO DECREMENT ONE FROM LENGTH OF DIFFERENCE 9981 20ED ( extbas.asm):03324 BRA L9970 * LINE AND KEEP LOOKING FOR NON BORDER COLOR 9983 BD9514 ( extbas.asm):03325 L9983 JSR >L9514 GO DEC HOR COORD 9986 8D3E ( extbas.asm):03326 BSR L99C6 GET AND SAVE HOR COORD 9988 8D5E ( extbas.asm):03327 BSR L99E8 PAINT FORWARD TO MAX HOR COORD OR BORDER 998A 20E0 ( extbas.asm):03328 BRA L996C SAVE A BLOCK OF ‘PAINT’ DATA AND KEEP CHECKING ( extbas.asm):03329 * ( extbas.asm):03330 * CHECK TO SEE IF THE CURRENT LINE EXTENDS FURTHER TO ( extbas.asm):03331 * THE RIGHT THAN THE PARENT LINE AND PUT A BLOCK OF ( extbas.asm):03332 * PAINT DATA ON THE STACK IF IT IS MORE THAN 2 PIXELS ( extbas.asm):03333 * PAST THE END OF THE PARENT LINE 998C BD9506 ( extbas.asm):03334 L998C JSR >L9506 INC CURRENT HOR COORD 998F 308B ( extbas.asm):03335 LEAX D,X * POINT X TO THE RIGHT END OF THE ‘PARENT’ LINE 9991 9FBD ( extbas.asm):03336 STX HORBEG * AND SAVE IT AS THE CURRENT HORIZ COORDINATE 9993 43 ( extbas.asm):03337 COMA = ACCD CONTAINS A NEGATIVE NUMBER CORRESPONDING TO 9994 53 ( extbas.asm):03338 COMB = THE NUMBER OF PIXELS THE CURRENT LINE EXTENDS 9995 830001 ( extbas.asm):03339 SUBD #1 = PAST THE RIGHT END OF THE ‘PARENT’ LINE. CONVERT 9998 2F04 ( extbas.asm):03340 BLE L999E = TO A POSITIVE NUMBER AND BRANCH IF THE LINE DOESN’T EXTEND 999A 1F01 ( extbas.asm):03341 TFR D,X *SAVE THE PORTION OF THE LINE TO THE RIGHT OF THE PARENT LINE ( extbas.asm):03342 * *AS THE LENGTH 999C 8D03 ( extbas.asm):03343 BSR L99A1 =SAVE A BLOCK OF ‘PAINT’ DATA IN THE DIRECTION OPPOSITE THE ( extbas.asm):03344 * =CURRENT UP/DN FLAG 999E 7E9934 ( extbas.asm):03345 L999E JMP >L9934 PROCESS MORE ‘PAINT’ DATA BLOCKS ( extbas.asm):03346 * ( extbas.asm):03347 * BLOCKS OF PAINT DATA ARE STORED ON THE STACK SO THAT PAINT ( extbas.asm):03348 * CAN ‘REMEMBER’ WHERE IT SHOULD GO BACK TO PAINT UP OR DOWN ( extbas.asm):03349 * FROM THE CURRENT LINE IT IS PAINTING. THESE BLOCKS OF DATA ( extbas.asm):03350 * REPRESENT HORIZONTAL LINES ABOVE OR BELOW THE CURRENT LINE ( extbas.asm):03351 * BEING PAINTED AND REQUIRE SIX BYTES OF STORAGE ON THE STACK. ( extbas.asm):03352 * THE DATA ARE STORED AS FOLLOWS: ,S=UP/DOWN FLAG; 1,S=VER COORD ( extbas.asm):03353 * OF LINE; 2 3,S=LEFTMOST HOR COORD OF LINE; 4 5,S=LENGTH OF LINE ( extbas.asm):03354 * SAVE A BLOCK OF ‘PAINT’ DATA FOR A LINE IN THE ( extbas.asm):03355 * OPPOSITE DIRECTION OF THE CURRENT UP/DN FLAG 99A1 DDCB ( extbas.asm):03356 L99A1 STD VCB SAVE NUMBER PIXELS PAINTED 99A3 3520 ( extbas.asm):03357 PULS Y PUT RETURN ADDR IN Y 99A5 DCBD ( extbas.asm):03358 LDD HORBEG GET HORIZONTAL START COORDINATE 99A7 3416 ( extbas.asm):03359 PSHS X,B,A PUT ON STACK 99A9 96D7 ( extbas.asm):03360 LDA VD7 GET U/D FLAG 99AB 40 ( extbas.asm):03361 NEGA REVERSE THE UP/DN FLAG 99AC D6C0 ( extbas.asm):03362 L99AC LDB VERBEG+1 GET VERTICAL START COORDINATE 99AE 3406 ( extbas.asm):03363 PSHS B,A SAVE VERTICAL START COORDINATE AND U/D FLAG 99B0 3420 ( extbas.asm):03364 PSHS Y PUT RETURN ADDR BACK ON STACK ( extbas.asm):03365 * CODE BELOW CHECKS FOR ABILITY TO STORE FOUR BYTES IN ( extbas.asm):03366 * FREE RAM, HOWEVER THE PAINT ROUTINE WILL STORE SIX ( extbas.asm):03367 * BYTES IN FREE RAM - FIRST INSTRUCTION SHOULD BE LDB #3 99B2 C602 ( extbas.asm):03368 LDB #$02 * CHECK TO SEE IF THERE’S ENOUGH FREE 99B4 BDAC33 ( extbas.asm):03369 JSR >LAC33 * RAM FOR 4 BYTES TEMP STORAGE 99B7 DCCB ( extbas.asm):03370 LDD VCB GET LENGTH OF RIGHT PAINTED LINE 99B9 39 ( extbas.asm):03371 RTS ( extbas.asm):03372 * ( extbas.asm):03373 * SAVE A BLOCK OF ‘PAINT’ DATA FOR A LINE IN ( extbas.asm):03374 * THE SAME DIRECTION AS THE CURRENT UP/DN FLAG 99BA DDCB ( extbas.asm):03375 L99BA STD VCB SAVE LENGTH OF RIGHT HOR PAINTED LINE 99BC 3520 ( extbas.asm):03376 PULS Y SAVE RETURN ADDRESS IN Y 99BE DCC3 ( extbas.asm):03377 LDD HOREND HORIZONTAL START COORDINATE 99C0 3416 ( extbas.asm):03378 PSHS X,B,A SAVE HORIZONTAL START COORDINATE AND LENGTH 99C2 96D7 ( extbas.asm):03379 LDA VD7 GET UP/DOWN FLAG (1 OR -1) 99C4 20E6 ( extbas.asm):03380 BRA L99AC SAVE THE ‘PAINT’ DATA ON THE STACK 99C6 9EBD ( extbas.asm):03381 L99C6 LDX HORBEG GET CURRENT HOR COORD 99C8 9FC3 ( extbas.asm):03382 STX HOREND SAVE IT 99CA 39 ( extbas.asm):03383 RTS ( extbas.asm):03384 * GO HERE TO FINISH PAINTING TO RIGHT AFTER YOU HAVE PAINTED TO THE LEFT 99CB DDCD ( extbas.asm):03385 L99CB STD VCD SAVE COUNT OF THE NUMBER OF PIXELS ‘PAINTED’ 99CD 109EC3 ( extbas.asm):03386 LDY HOREND GET LAST HOR START COORD 99D0 8DF4 ( extbas.asm):03387 BSR L99C6 *SAVE CURRENT HOR COORD - NOW HOREND CONTAINS COORDINATE ( extbas.asm):03388 * *THE LEFT BORDER OF THIS HORIZONTAL LINE 99D2 109FBD ( extbas.asm):03389 STY HORBEG START PAINTING TO RIGHT FROM THE LEFT PAINT START COORD 99D5 8D11 ( extbas.asm):03390 BSR L99E8 PAINT TOWARDS THE RIGHT 99D7 9ECD ( extbas.asm):03391 LDX VCD GET THE NUMBER OF PIXELS PAINTED WHEN GOING TOWARDS LEFT PIXELS 99D9 308B ( extbas.asm):03392 LEAX D,X ADD TO NUMBER PAINTED GOING TOWARD RIGHT 99DB C30001 ( extbas.asm):03393 ADDD #1 ADD 1 TO PAINT COUNT TOWARD RIGHT - ACCD = LENGTH OF PAINTED LINE ( extbas.asm):03394 * 99DE 39 ( extbas.asm):03395 RTS ( extbas.asm):03396 * PAINT FROM HOR COORD TO ZERO OR HIT BORDER ( extbas.asm):03397 * RETURN WITH Z = 1 IF NO PAINTING DONE 99DF BD99C6 ( extbas.asm):03398 L99DF JSR >L99C6 PUT STARTING HOR COORD IN HOREND 99E2 108E9514 ( extbas.asm):03399 LDY #L9514 (DECR HOR COORD ADDRESS) TO Y 99E6 2006 ( extbas.asm):03400 BRA L99EE GO PAINT THE LINE ( extbas.asm):03401 * PAINT FROM HOR COORD TO MAX HOR COORD OR HIT ( extbas.asm):03402 * BORDER-RETURN Z=1 IF NO PAINTING DONE 99E8 108E9506 ( extbas.asm):03403 L99E8 LDY #L9506 PUT INCR HOR COORD ADDR IN Y 99EC ADA4 ( extbas.asm):03404 JSR ,Y INCR HOR COORD - THE LEFT PAINT ROUTINE PAINTED THE FIRST COORD 99EE DE8A ( extbas.asm):03405 L99EE LDU ZERO ZERO U REG - INITIAL PIXEL PAINT COUNTER 99F0 9EBD ( extbas.asm):03406 LDX HORBEG GET HOR COORD 99F2 2B17 ( extbas.asm):03407 L99F2 BMI L9A0B BRANCH IF HORIZONTAL COORDINATE IS > $7F OR < 0 99F4 9CD3 ( extbas.asm):03408 CMPX VD3 COMPARE CURRENT HOR COORD TO MAX VALUE 99F6 2213 ( extbas.asm):03409 BHI L9A0B BRANCH IF > MAX 99F8 3460 ( extbas.asm):03410 PSHS U,Y SAVE PAINT COUNTER, INC/DEC POINTER 99FA 8D16 ( extbas.asm):03411 BSR L9A12 CHECK FOR BORDER PIXEL 99FC 270B ( extbas.asm):03412 BEQ L9A09 HIT BOROER 99FE BD9377 ( extbas.asm):03413 JSR >L9377 SET PIXEL TO ‘PAINT’ COLOR - PAINTING IS DONE HERE 9A01 3560 ( extbas.asm):03414 PULS Y,U RESTORE PAINT COUNTER AND INC/DEC POINTER 9A03 3341 ( extbas.asm):03415 LEAU $01,U ADD ONE TO PAINT COUNTER 9A05 ADA4 ( extbas.asm):03416 JSR ,Y INCR OR DECR HOR COORD DEPENDING ON CONTENTS OF Y 9A07 20E9 ( extbas.asm):03417 BRA L99F2 KEEP PAINTING THE LINE 9A09 3560 ( extbas.asm):03418 L9A09 PULS Y,U RESTORE PAINT COUNTER AND INC/DEC POINTER 9A0B 1F30 ( extbas.asm):03419 L9A0B TFR U,D SAVE PAINT COUNTER IN ACCD 9A0D 1F01 ( extbas.asm):03420 TFR D,X SAVE PAINT COUNTER IN X 9A0F 938A ( extbas.asm):03421 SUBD ZERO SET FLAGS ACCDRDING TO CONDITION OF PAINT COUNTER 9A11 39 ( extbas.asm):03422 RTS ( extbas.asm):03423 * CHECK FOR BORDER COLOR - ENTER W/VD9 CONTAINING ( extbas.asm):03424 * ADDRESS OF ROUTINE TO GET ABS SCREEN ADDRESS ( extbas.asm):03425 * AND PIXEL MASK - EXIT WITH Z = 1 IF HIT BORDER COLOR PIXEL 9A12 AD9F00D9 ( extbas.asm):03426 L9A12 JSR [VD9] GET THE ADDR AND PIXEL MASK 9A16 1F89 ( extbas.asm):03427 TFR A,B COPY PIXEL MASK TO ACCB 9A18 D4D8 ( extbas.asm):03428 ANDB VD8 AND PIXEL MASK W/BORDER COLOR; ACCB = ONE PIXEL OF BORDER COLOR 9A1A 3406 ( extbas.asm):03429 PSHS B,A PUSH MASK AND BORDER PIXEL 9A1C A484 ( extbas.asm):03430 ANDA ,X * PUT CURRENT PIXEL DATA INTO ACCB AND 9A1E A161 ( extbas.asm):03431 CMPA $01,S * COMPARE IT TO BORDER COLOR; Z FLAG = 1 IF MATCH 9A20 3586 ( extbas.asm):03432 PULS A,B,PC RESTORE MASK AND BORDER PIXEL - THEN RETURN ( extbas.asm):03433 * PLAY 9A22 9E8A ( extbas.asm):03434 PLAY LDX ZERO *DEFAULT VALUES FOR LENGTH OF ‘PLAY’ COMMAND AND ADDRESS 9A24 C601 ( extbas.asm):03435 LDB #$01 *OF START OF ‘PLAY’ STRING IF USED FOR PLAY” (NULL STRING) 9A26 3414 ( extbas.asm):03436 PSHS X,B SAVE DEFAULT VALUES 9A28 BDB156 ( extbas.asm):03437 JSR >LB156 EVALUATE EXPRESSION 9A2B 5F ( extbas.asm):03438 CLRB * 9A2C BDA9A2 ( extbas.asm):03439 JSR >LA9A2 * SET UP DA TO PASS THROUGH ANA MUX 9A2F BDA976 ( extbas.asm):03440 JSR >LA976 ENABLE ANA MUX 9A32 BDB654 ( extbas.asm):03441 L9A32 JSR >LB654 *POINT X TO START OF ‘PLAY’ STRING AND PUT LENGTH ( extbas.asm):03442 * *OF STRING INTO ACCB 9A35 2002 ( extbas.asm):03443 BRA L9A39 INEFFICIENT - SHOULD BE FCB SKP2 9A37 3514 ( extbas.asm):03444 L9A37 PULS B,X GET PLAY STRING START AND LENGTH 9A39 D7D8 ( extbas.asm):03445 L9A39 STB VD8 LENGTH OF ‘PLAY’ COMMAND 9A3B 27FA ( extbas.asm):03446 BEQ L9A37 GET NEW STRING DATA IF LENGTH = 0 9A3D 9FD9 ( extbas.asm):03447 STX VD9 START OF ‘PLAY’ STRING 9A3F 10270F31 ( extbas.asm):03448 LBEQ LA974 DISABLE ANA MUX AND RETURN IF X = 0 9A43 0DD8 ( extbas.asm):03449 L9A43 TST VD8 SEE IF LENGTH OF STRING = 0 9A45 27F0 ( extbas.asm):03450 BEQ L9A37 GET NEW DATA IF SO 9A47 BD9B98 ( extbas.asm):03451 JSR >L9B98 GET A COMMAND CHARACTER IF NOT 9A4A 813B ( extbas.asm):03452 CMPA #'; SUB COMMAND TERMINATED 9A4C 27F5 ( extbas.asm):03453 BEQ L9A43 IGNORE SEMICOLONS 9A4E 8127 ( extbas.asm):03454 CMPA #'' CHECK FOR APOSTROPHE 9A50 27F1 ( extbas.asm):03455 BEQ L9A43 IGNORE THEM TOO 9A52 8158 ( extbas.asm):03456 CMPA #'X CHECK FOR AN EXECUTABLE SUBSTRING 9A54 102701B2 ( extbas.asm):03457 LBEQ L9C0A GO PROCESS SUB COMMAND 9A58 8D02 ( extbas.asm):03458 BSR L9A5C CHECK FOR OTHER COMMANDS 9A5A 20E7 ( extbas.asm):03459 BRA L9A43 KEEP GOING THROUGH INTERPRETATION LOOP ( extbas.asm):03460 * OCTAVE 9A5C 814F ( extbas.asm):03461 L9A5C CMPA #'O ADJUST OCTAVE? 9A5E 260D ( extbas.asm):03462 BNE L9A6D NO 9A60 D6DE ( extbas.asm):03463 LDB OCTAVE GET CURRENT OCTAVE 9A62 5C ( extbas.asm):03464 INCB LEGAL VALUES ARE 1-5 BUT INTERNALLY THE COMPUTER USES 0-4 9A63 8D5B ( extbas.asm):03465 BSR L9AC0 MODIFIER CHECK 9A65 5A ( extbas.asm):03466 DECB COMPENSATE FOR INCB ABOVE 9A66 C104 ( extbas.asm):03467 CMPB #$04 MAXIMUM VALUE OF 4 9A68 2263 ( extbas.asm):03468 BHI L9ACD ‘FC’ ERROR 9A6A D7DE ( extbas.asm):03469 STB OCTAVE SAVE NEW VALUE OF OCTAVE 9A6C 39 ( extbas.asm):03470 RTS ( extbas.asm):03471 * VOLUME 9A6D 8156 ( extbas.asm):03472 L9A6D CMPA #'V ADJUST VOLUME? 9A6F 261A ( extbas.asm):03473 BNE L9A8B NO 9A71 D6DF ( extbas.asm):03474 LDB VOLHI GET CURRENT HIGH VOLUME LIMIT 9A73 54 ( extbas.asm):03475 LSRB *SHIFT 2 BITS TO RIGHT; DA IS ONLY 6 BITS (BIT 2 - BIT 7) - 9A74 54 ( extbas.asm):03476 LSRB *TO MANIPULATE THE DATA IT MUST BE IN BITS 0-5 9A75 C01F ( extbas.asm):03477 SUBB #31 SUBTRACT OUT MID VALUE OFFSET 9A77 8D47 ( extbas.asm):03478 BSR L9AC0 MODIFIER CHECK 9A79 C11F ( extbas.asm):03479 CMPB #31 MAXIMUM ALLOWED RANGE IS 31 9A7B 2250 ( extbas.asm):03480 BHI L9ACD ‘FC’ ERROR 9A7D 58 ( extbas.asm):03481 ASLB * 9A7E 58 ( extbas.asm):03482 ASLB *MOVE NEW VALUE BACK TO BITS 2-7 9A7F 3404 ( extbas.asm):03483 PSHS B SAVE NEW VOLUME ON THE STACK 9A81 CC7E7E ( extbas.asm):03484 LDD #$7E7E PUT MID VALUE IN HIGH AND LOW LIMIT 9A84 ABE4 ( extbas.asm):03485 ADDA ,S ADD NEW VOLUME TO HIGH LIMIT 9A86 E0E0 ( extbas.asm):03486 SUBB ,S+ SUBTR NEW VOLUME FROM LOW LIMIT 9A88 DDDF ( extbas.asm):03487 STD VOLHI SAVE NEW VOLUME LIMITS 9A8A 39 ( extbas.asm):03488 RTS ( extbas.asm):03489 * NOTE LENGTH 9A8B 814C ( extbas.asm):03490 L9A8B CMPA #'L SET NOTE LENGTH? 9A8D 2623 ( extbas.asm):03491 BNE L9AB2 NO 9A8F D6E1 ( extbas.asm):03492 LDB NOTELN GET CURRENT LENGTH 9A91 8D2D ( extbas.asm):03493 BSR L9AC0 MODIFIER CHECK 9A93 5D ( extbas.asm):03494 TSTB * 9A94 2737 ( extbas.asm):03495 BEQ L9ACD * ‘FC’ ERROR IF LENGTH = 0 9A96 D7E1 ( extbas.asm):03496 STB NOTELN SAVE NEW NOTE LENGTH 9A98 0FE5 ( extbas.asm):03497 CLR DOTVAL RESET NOTE TIMER SCALE FACTOR 9A9A 8D03 ( extbas.asm):03498 L9A9A BSR L9A9F CHECK FOR A DOTTED NOTE 9A9C 24FC ( extbas.asm):03499 BCC L9A9A BRANCH IF DOTTED NOTE 9A9E 39 ( extbas.asm):03500 RTS ( extbas.asm):03501 * SCALE FACTOR - ‘DOTTED NOTE’ 9A9F 0DD8 ( extbas.asm):03502 L9A9F TST VD8 CHECK COMMAND LENGTH 9AA1 270A ( extbas.asm):03503 BEQ L9AAD IT’S EMPTY 9AA3 BD9B98 ( extbas.asm):03504 JSR >L9B98 GET COMMAND CHARACTER 9AA6 812E ( extbas.asm):03505 CMPA #'. CHECK FOR DOTTED NOTE 9AA8 2705 ( extbas.asm):03506 BEQ L9AAF BRANCH ON DOTTED NOTE AND CLEAR CARRY FLAG 9AAA BD9BE2 ( extbas.asm):03507 JSR >L9BE2 *MOVE COMMAND STRING POINTER BACK ONE AND ADD ONE TO ( extbas.asm):03508 *COMMAND LENGTH 9AAD 43 ( extbas.asm):03509 L9AAD COMA SET CARRY FLAG 9AAE 39 ( extbas.asm):03510 RTS 9AAF 0CE5 ( extbas.asm):03511 L9AAF INC DOTVAL ADD ONE TO NOTE TIMER SCALE FACTOR 9AB1 39 ( extbas.asm):03512 RTS ( extbas.asm):03513 * TEMPO 9AB2 8154 ( extbas.asm):03514 L9AB2 CMPA #'T MODIFY TEMPO? 9AB4 260D ( extbas.asm):03515 BNE L9AC3 NO 9AB6 D6E2 ( extbas.asm):03516 LDB TEMPO GET CURRENT TEMPO 9AB8 8D06 ( extbas.asm):03517 BSR L9AC0 EVALUATE MODIFIER 9ABA 5D ( extbas.asm):03518 TSTB SET FLAGS 9ABB 2710 ( extbas.asm):03519 BEQ L9ACD ‘FC’ ERROR IF IT’S 0 9ABD D7E2 ( extbas.asm):03520 STB TEMPO SAVE NEW TEMPO 9ABF 39 ( extbas.asm):03521 RTS 9AC0 7E9BAC ( extbas.asm):03522 L9AC0 JMP >L9BAC EVALUATE THE >,<,+,-,= OPERATORS ( extbas.asm):03523 * PAUSE 9AC3 8150 ( extbas.asm):03524 L9AC3 CMPA #'P PAUSE COMMAND? 9AC5 2624 ( extbas.asm):03525 BNE L9AEB NO 9AC7 BD9CCB ( extbas.asm):03526 JSR >L9CCB EVALUATE A DECIMAL COMMAND STRING VALUE 9ACA 5D ( extbas.asm):03527 TSTB * CHECK FOR LEGAL EXPRESSION AND 9ACB 2603 ( extbas.asm):03528 BNE L9AD0 * BRANCH IF PAUSE VALUE <> 0 9ACD 7EB44A ( extbas.asm):03529 L9ACD JMP >LB44A ‘FC’ ERROR IF PAUSE <> 0 9AD0 96E5 ( extbas.asm):03530 L9AD0 LDA DOTVAL *SAVE CURRENT VALUE OF VOLUME AND NOTE 9AD2 9EDF ( extbas.asm):03531 LDX VOLHI *TIMER SCALE 9AD4 3412 ( extbas.asm):03532 PSHS X,A * 9AD6 867E ( extbas.asm):03533 LDA #$7E MID VALUE OF DA CONVERTER 9AD8 97DF ( extbas.asm):03534 STA VOLHI *SET VOLUME = 0 9ADA 97E0 ( extbas.asm):03535 STA VOLLOW * 9ADC 0FE5 ( extbas.asm):03536 CLR DOTVAL RESET NOTE TIMER SCALE FACTOR 9ADE 8D07 ( extbas.asm):03537 BSR L9AE7 GO ‘PLAY’ A NOTE OF 0 VOLUME 9AE0 3512 ( extbas.asm):03538 PULS A,X * 9AE2 97E5 ( extbas.asm):03539 STA DOTVAL *RESTORE VALUE OF VOLUME 9AE4 9FDF ( extbas.asm):03540 STX VOLHI *AND NOTE TIMER SCALE 9AE6 39 ( extbas.asm):03541 RTS 9AE7 6FE2 ( extbas.asm):03542 L9AE7 CLR ,-S PUSH NOTE NUMBER 0 ONTO STACK 9AE9 2040 ( extbas.asm):03543 BRA L9B2B GO PLAY IT ( extbas.asm):03544 * NOTE 9AEB 814E ( extbas.asm):03545 L9AEB CMPA #'N LETTER N BEFORE THE NUMBER OF A NOTE? 9AED 2603 ( extbas.asm):03546 BNE L9AF2 NO - IT’S OPTIONAL 9AEF BD9B98 ( extbas.asm):03547 JSR >L9B98 GET NEXT COMMAND CHARACTER 9AF2 8141 ( extbas.asm):03548 L9AF2 CMPA #'A CHECK FOR NOTE A 9AF4 2504 ( extbas.asm):03549 BLO L9AFA BELOW 9AF6 8147 ( extbas.asm):03550 CMPA #'G CHECK FOR NOTE B 9AF8 2305 ( extbas.asm):03551 BLS L9AFF FOUND NOTE A-G 9AFA BD9BBE ( extbas.asm):03552 L9AFA JSR >L9BBE EVALUATE DECIMAL NUMERIC EXPRESSION IN COMMAND STRING 9AFD 2023 ( extbas.asm):03553 BRA L9B22 PROCESS NOTE VALUE ( extbas.asm):03554 * PROCESS A NOTE HERE 9AFF 8041 ( extbas.asm):03555 L9AFF SUBA #'A MASK OFF ASCII 9B01 8E9C5B ( extbas.asm):03556 LDX #L9C5B LOAD X WITH NOTE JUMP TABLE 9B04 E686 ( extbas.asm):03557 LDB A,X GET NOTE 9B06 0DD8 ( extbas.asm):03558 TST VD8 ANY COMMAND CHARACTERS LEFT? 9B08 2718 ( extbas.asm):03559 BEQ L9B22 NO 9B0A BD9B98 ( extbas.asm):03560 JSR >L9B98 GET COMMAND CHARACTER 9B0D 8123 ( extbas.asm):03561 CMPA #'# ‘SHARP’ NOTE? 9B0F 2704 ( extbas.asm):03562 BEQ L9B15 YES 9B11 812B ( extbas.asm):03563 CMPA #'+ ‘SHARP’ NOTE? 9B13 2603 ( extbas.asm):03564 BNE L9B18 NO 9B15 5C ( extbas.asm):03565 L9B15 INCB ADD 1 TO NOTE NUMBER (SHARP) 9B16 200A ( extbas.asm):03566 BRA L9B22 PROCESS NOTE 9B18 812D ( extbas.asm):03567 L9B18 CMPA #'- ‘FLAT’ NOTE? 9B1A 2603 ( extbas.asm):03568 BNE L9B1F NO 9B1C 5A ( extbas.asm):03569 DECB SUBTR 1 FROM NOTE NUMBER (FLAT) 9B1D 2003 ( extbas.asm):03570 BRA L9B22 PROCESS NOTE 9B1F BD9BE2 ( extbas.asm):03571 L9B1F JSR >L9BE2 *MOVE COMMAND STRING PTR BACK ONE AND ADD ONE ( extbas.asm):03572 * *TO COMMAND LENGTH CTR 9B22 5A ( extbas.asm):03573 L9B22 DECB =ADJUST NOTE NUMBER, BASIC USES NOTE NUMBERS 1-12, INTERNALLY ( extbas.asm):03574 * =COMPUTER USES 0-11 9B23 C10B ( extbas.asm):03575 CMPB #12-1 MAXIMUM NOTE VALUE 9B25 22A6 ( extbas.asm):03576 BHI L9ACD ‘FC’ ERROR IF > 11 9B27 3404 ( extbas.asm):03577 PSHS B SAVE NOTE VALUE 9B29 D6E1 ( extbas.asm):03578 LDB NOTELN GET NOTE LENGTH 9B2B 96E2 ( extbas.asm):03579 L9B2B LDA TEMPO GET TEMPO 9B2D 3D ( extbas.asm):03580 MUL CALCULATE NOTE DURATION 9B2E DDD5 ( extbas.asm):03581 STD VD5 SAVE NOTE DURATION ( extbas.asm):03582 * THE IRQ INTERRUPT IS USED TO PROVIDE A MASTER TIMING REFERENCE FOR ( extbas.asm):03583 * THE ‘PLAY’ COMMAND. WHEN A NOTE IS DONE, THE IRQ SERVICING ( extbas.asm):03584 * ROUTINE WILL RETURN CONTROL TO THE MAIN ‘PLAY’ COMMAND INTERPRETATION LOOP 9B30 3361 ( extbas.asm):03585 LEAU $01,S *LOAD U W/CURRENT VALUE OF (STACK POINTER+1) SO THAT THE STACK ( extbas.asm):03586 * *POINTER WILL BE PROPERLY RESET WHEN IRQ VECTORS ( extbas.asm):03587 * *YOU OUT OF THE ‘PLAY’ TIMING ROUTINES BELOW 9B32 96DE ( extbas.asm):03588 LDA OCTAVE GET CURRENT OCTAVE 9B34 8101 ( extbas.asm):03589 CMPA #$01 * 9B36 222C ( extbas.asm):03590 BHI L9B64 * BRANCH IF OCTAVE > 1 ( extbas.asm):03591 * OCTAVES 1 AND 2 USE A TWO BYTE DELAY TO SET THE PROPER FREQUENCY 9B38 8E9C62 ( extbas.asm):03592 LDX #L9C62 POINT TO DELAY TABLE 9B3B C618 ( extbas.asm):03593 LDB #2*12 24 BYTES DATA/OCTAVE 9B3D 3D ( extbas.asm):03594 MUL CALC OCTAVE TABLE OFFSET 9B3E 3A ( extbas.asm):03595 ABX POINT TO CORRECT OCTAVE TABLE 9B3F 3504 ( extbas.asm):03596 PULS B GET NOTE VALUE BACK 9B41 58 ( extbas.asm):03597 ASLB X 2 - 2 BYTES/NOTE 9B42 3A ( extbas.asm):03598 ABX POINT TO CORRECT NOTE 9B43 3184 ( extbas.asm):03599 LEAY ,X GET POINTER TO Y REG (TFR X,Y) 9B45 8D45 ( extbas.asm):03600 BSR L9B8C CALCULATE NOTE TIMER VALUE 9B47 DDE3 ( extbas.asm):03601 STD PLYTMR SAVE IT ( extbas.asm):03602 * MAIN SOUND GENERATION LOOP - ONLY THE IRQ SERVICE WILL GET YOU OUT ( extbas.asm):03603 * OF THIS LOOP (OCTAVES 1 AND 2) 9B49 8D0C ( extbas.asm):03604 L9B49 BSR L9B57 MID VALUE TO DA AND WAIT 9B4B 96DF ( extbas.asm):03605 LDA VOLHI GET HIGH VALUE 9B4D 8D0B ( extbas.asm):03606 BSR L9B5A STORE TO DA AND WAIT 9B4F 8D06 ( extbas.asm):03607 BSR L9B57 MID VALUE TO DA AND WAIT 9B51 96E0 ( extbas.asm):03608 LDA VOLLOW GET LOW VALUE 9B53 8D05 ( extbas.asm):03609 BSR L9B5A STORE 9B55 20F2 ( extbas.asm):03610 BRA L9B49 KEEP LOOPING 9B57 867E ( extbas.asm):03611 L9B57 LDA #$7E DA MID VALUE AND RS 232 MARKING 9B59 12 ( extbas.asm):03612 NOP DELAY SOME - FINE TUNE PLAY FREQUENCY 9B5A B7FF20 ( extbas.asm):03613 L9B5A STA PIA1 STORE TO DA CONVERTER 9B5D AEA4 ( extbas.asm):03614 LDX ,Y GET DELAY FROM OCTAVE TABLE 9B5F 301F ( extbas.asm):03615 L9B5F LEAX $-01,X * 9B61 26FC ( extbas.asm):03616 BNE L9B5F *COUNT X TO ZERO - PROGRAMMABLE DELAY 9B63 39 ( extbas.asm):03617 RTS ( extbas.asm):03618 * OCTAVES 3,4 AND 5 USE A ONE BYTE DELAY TO SET THE PROPER FREQUENCY 9B64 8E9C7A ( extbas.asm):03619 L9B64 LDX #L9C92-2*12 POINT TO DELAY TABLE 9B67 C60C ( extbas.asm):03620 LDB #12 12 BYTES DATA PER OCTAVE 9B69 3D ( extbas.asm):03621 MUL CALC OCTAVE TABLE OFFSET 9B6A 3A ( extbas.asm):03622 ABX POINT TO CORRECT OCTAVE TABLE 9B6B 3504 ( extbas.asm):03623 PULS B GET NOTE VALUE BACK 9B6D 3A ( extbas.asm):03624 ABX POINT TO CORRECT NOTE 9B6E 8D1C ( extbas.asm):03625 BSR L9B8C CALCULATE NOTE TIMER VALUE 9B70 DDE3 ( extbas.asm):03626 STD PLYTMR SAVE IT 9B72 8D0C ( extbas.asm):03627 L9B72 BSR L9B80 MID VALUE TO DA AND WAIT 9B74 96DF ( extbas.asm):03628 LDA VOLHI GET HIGH VALUE 9B76 8D0B ( extbas.asm):03629 BSR L9B83 STORE TO DA AND WAIT 9B78 8D06 ( extbas.asm):03630 BSR L9B80 MID VALUE TO DA AND WAIT 9B7A 96E0 ( extbas.asm):03631 LDA VOLLOW GET LOW VALUE 9B7C 8D05 ( extbas.asm):03632 BSR L9B83 STORE TO DA AND WAIT 9B7E 20F2 ( extbas.asm):03633 BRA L9B72 KEEP GOING ( extbas.asm):03634 * PUT MID VALUE TO DA CONVERTER AND WAIT A WHILE 9B80 867E ( extbas.asm):03635 L9B80 LDA #$7E DA CONVERTER MID VALUE AND KEEP RS 232 OUTPUT MARKING 9B82 12 ( extbas.asm):03636 NOP DELAY SOME - FINE TUNE PLAY FREQUENCY 9B83 B7FF20 ( extbas.asm):03637 L9B83 STA PIA1 STORE IN DA CONVERTER 9B86 A684 ( extbas.asm):03638 LDA ,X GET DELAY VALUE FROM OCTAVE TABLE 9B88 4A ( extbas.asm):03639 L9B88 DECA COUNT ACCA TO ZERO - TIME DELAY 9B89 26FD ( extbas.asm):03640 BNE L9B88 COUNT ACCA TO ZERO - TIME DELAY 9B8B 39 ( extbas.asm):03641 RTS ( extbas.asm):03642 * CALCULATE NOTE TIMER VALUE - RETURN WITH VALUE IN ACCD - ( extbas.asm):03643 * THE LARGER ACCD IS, THE LONGER THE NOTE WILL PLAY 9B8C C6FF ( extbas.asm):03644 L9B8C LDB #$FF NOTE TIMER BASE VALUE 9B8E 96E5 ( extbas.asm):03645 LDA DOTVAL GET NOTE TIMER SCALE FACTOR 9B90 2705 ( extbas.asm):03646 BEQ L9B97 USE DEFAULT VALUE IF 0 9B92 8B02 ( extbas.asm):03647 ADDA #$02 ADD IN CONSTANT TIMER SCALE FACTOR 9B94 3D ( extbas.asm):03648 MUL MULTIPLY SCALE FACTOR BY BASE VALUE 9B95 44 ( extbas.asm):03649 LSRA *DIVIDE ACCD BY TWO - EACH INCREMENT OF DOTVAL 9B96 56 ( extbas.asm):03650 RORB *WILL INCREASE NOTE TIMER BY 128 9B97 39 ( extbas.asm):03651 L9B97 RTS ( extbas.asm):03652 * GET NEXT COMMAND - RETURN VALUE IN ACCA 9B98 3410 ( extbas.asm):03653 L9B98 PSHS X SAVE X REGISTER 9B9A 0DD8 ( extbas.asm):03654 L9B9A TST VD8 CHECK COMMAND COUNTER 9B9C 274D ( extbas.asm):03655 BEQ L9BEB ‘FC’ ERROR IF NO COMMAND DATA LEFT 9B9E 9ED9 ( extbas.asm):03656 LDX VD9 GET COMMAND ADDR 9BA0 A680 ( extbas.asm):03657 LDA ,X+ GET COMMAND 9BA2 9FD9 ( extbas.asm):03658 STX VD9 SAVE NEW ADDRESS 9BA4 0AD8 ( extbas.asm):03659 DEC VD8 DECREMENT COMMAND CTR 9BA6 8120 ( extbas.asm):03660 CMPA #SPACE CHECK FOR BLANK 9BA8 27F0 ( extbas.asm):03661 BEQ L9B9A IGNORE BLANKS 9BAA 3590 ( extbas.asm):03662 PULS X,PC RESTORE X RESISTER AND RETURN ( extbas.asm):03663 * EVALUATE THE >,<,+,-,= OPERATORS - ENTER WITH THE VALUE TO ( extbas.asm):03664 * BE OPERATED ON IN ACCB, RETURN NEW VALUE IN SAME 9BAC 8DEA ( extbas.asm):03665 L9BAC BSR L9B98 GET A COMMAND CHARACTER 9BAE 812B ( extbas.asm):03666 CMPA #'+ ADD ONE? 9BB0 273C ( extbas.asm):03667 BEQ L9BEE YES 9BB2 812D ( extbas.asm):03668 CMPA #'- SUBTRACT ONE? 9BB4 273C ( extbas.asm):03669 BEQ L9BF2 YES 9BB6 813E ( extbas.asm):03670 CMPA #'> MULTIPLY BY TWO? 9BB8 2742 ( extbas.asm):03671 BEQ L9BFC YES 9BBA 813C ( extbas.asm):03672 CMPA #'< DIVIDE BY TWO? 9BBC 2739 ( extbas.asm):03673 BEQ L9BF7 YES 9BBE 813D ( extbas.asm):03674 L9BBE CMPA #'= *CHECK FOR VARIABLE EQUATE - BRANCH IF SO; ACCB WILL BE 9BC0 273F ( extbas.asm):03675 BEQ L9C01 *SET TO THE VALUE OF THE BASIC VARIABLE IN THE COMMAND ( extbas.asm):03676 * *STRING WHICH MUST BE NUMERIC, LESS THAN 256 ( extbas.asm):03677 * *AND THE VARIABLE MUST BE FOLLOWED BY A SEMICOLON. 9BC2 BD90AA ( extbas.asm):03678 JSR >L90AA CLEAR CARRY IF NUMERIC 9BC5 2524 ( extbas.asm):03679 BLO L9BEB ‘FC’ ERROR IF NON NUMERIC 9BC7 5F ( extbas.asm):03680 CLRB UNITS DIGIT = 0 ( extbas.asm):03681 * STRIP A DECIMAL ASCII VALUE OFF OF THE COMMAND STRING ( extbas.asm):03682 * AND RETURN BINARY VALUE IN ACCB 9BC8 8030 ( extbas.asm):03683 L9BC8 SUBA #'0 MASK OFF ASCII 9BCA 97D7 ( extbas.asm):03684 STA VD7 SAVE VALUE TEMPORARILY 9BCC 860A ( extbas.asm):03685 LDA #10 BASE 10 9BCE 3D ( extbas.asm):03686 MUL MULT BY DIGIT 9BCF 4D ( extbas.asm):03687 TSTA * 9BD0 2619 ( extbas.asm):03688 BNE L9BEB *‘FC’ ERROR IF RESULT > 255 9BD2 DBD7 ( extbas.asm):03689 ADDB VD7 GET TEMPORARY VALUE 9BD4 2515 ( extbas.asm):03690 BLO L9BEB ‘FC’ ERROR IF RESULT > 255 9BD6 0DD8 ( extbas.asm):03691 TST VD8 * 9BD8 2717 ( extbas.asm):03692 BEQ L9BF1 * RETURN IF NO COMMANDS LEFT 9BDA BD9B98 ( extbas.asm):03693 JSR >L9B98 GET ANOTHER COMMAND 9BDD BD90AA ( extbas.asm):03694 JSR >L90AA CLEAR CARRY IF NUMERIC 9BE0 24E6 ( extbas.asm):03695 BCC L9BC8 BRANCH IF MORE NUMERIC DATA 9BE2 0CD8 ( extbas.asm):03696 L9BE2 INC VD8 *ADD ONE TO COMMAND COUNTER AND 9BE4 9ED9 ( extbas.asm):03697 LDX VD9 *MOVE COMMAND STRING BACK ONE 9BE6 301F ( extbas.asm):03698 LEAX $-01,X * 9BE8 9FD9 ( extbas.asm):03699 STX VD9 * 9BEA 39 ( extbas.asm):03700 RTS 9BEB 7EB44A ( extbas.asm):03701 L9BEB JMP >LB44A ‘FC’ ERROR 9BEE 5C ( extbas.asm):03702 L9BEE INCB ADD ONE TO PARAMETER 9BEF 27FA ( extbas.asm):03703 BEQ L9BEB ‘FC’ ERROR IF ADDING 1 TO 255 9BF1 39 ( extbas.asm):03704 L9BF1 RTS 9BF2 5D ( extbas.asm):03705 L9BF2 TSTB * 9BF3 27F6 ( extbas.asm):03706 BEQ L9BEB *‘FC’ ERROR IF TRYING TO DECREMENT 0 9BF5 5A ( extbas.asm):03707 DECB SUBTRACT ONE FROM PARAMETER 9BF6 39 ( extbas.asm):03708 RTS 9BF7 5D ( extbas.asm):03709 L9BF7 TSTB * 9BF8 27F1 ( extbas.asm):03710 BEQ L9BEB *‘FC’ ERROR IF DIVIDING BY ZERO 9BFA 54 ( extbas.asm):03711 LSRB DIVIDE BY TWO 9BFB 39 ( extbas.asm):03712 RTS 9BFC 5D ( extbas.asm):03713 L9BFC TSTB * 9BFD 2BEC ( extbas.asm):03714 BMI L9BEB *‘FC’ ERROR IF RESULT WOULD BE > 255 9BFF 58 ( extbas.asm):03715 ASLB MULTIPLY BY TWO 9C00 39 ( extbas.asm):03716 RTS 9C01 3460 ( extbas.asm):03717 L9C01 PSHS U,Y SAVE U,Y REGISTERS 9C03 8D16 ( extbas.asm):03718 BSR L9C1B INTERPRET COMMAND STRING AS IF IT WERE A BASIC VARIABLE 9C05 BDB70E ( extbas.asm):03719 JSR >LB70E CONVERT FPA0 TO AN INTEGER VALUE IN ACCB 9C08 35E0 ( extbas.asm):03720 PULS Y,U,PC RESTORE U,Y REGISTERS AND RETURN 9C0A BD9C1B ( extbas.asm):03721 L9C0A JSR >L9C1B EVALUATE AN EXPRESSION IN THE COMMAND STRING 9C0D C602 ( extbas.asm):03722 LDB #2 = 9C0F BDAC33 ( extbas.asm):03723 JSR >LAC33 =ROOM FOR 4 BYTES ON STACK? 9C12 D6D8 ( extbas.asm):03724 LDB VD8 * GET THE CURRENT COMMAND LENGTH AND POINTER AND 9C14 9ED9 ( extbas.asm):03725 LDX VD9 * SAVE THEM ON THE STACK 9C16 3414 ( extbas.asm):03726 PSHS X,B * 9C18 7E9A32 ( extbas.asm):03727 JMP >L9A32 GO INTERPRET AND PROCESS THE NEW ‘PLAY’ SUB COMMAND ( extbas.asm):03728 * INTERPRET THE PRESENT COMMAND STRING AS IF IT WERE A BASIC VARIABLE 9C1B 9ED9 ( extbas.asm):03729 L9C1B LDX VD9 GET COMMAND POINTER 9C1D 3410 ( extbas.asm):03730 PSHS X SAVE IT 9C1F BD9B98 ( extbas.asm):03731 JSR >L9B98 GET A COMMAND CHARACTER 9C22 BDB3A2 ( extbas.asm):03732 JSR >LB3A2 SET CARRY IF NOT ALPHA 9C25 25C4 ( extbas.asm):03733 BLO L9BEB ‘FC’ ERROR IF NOT ALPHA - ILLEGAL VARIABLE NAME 9C27 BD9B98 ( extbas.asm):03734 L9C27 JSR >L9B98 GET A COMMAND CHARACTER 9C2A 813B ( extbas.asm):03735 CMPA #'; CHECK FOR SEMICOLON - COMMAND SEPARATOR 9C2C 26F9 ( extbas.asm):03736 BNE L9C27 BRANCH UNTIL FOUND 9C2E 3510 ( extbas.asm):03737 PULS X GET SAVED COMMAND POINTER 9C30 DEA6 ( extbas.asm):03738 LDU CHARAD GET BASIC’S INPUT POINTER 9C32 3440 ( extbas.asm):03739 PSHS U SAVE IT 9C34 9FA6 ( extbas.asm):03740 STX CHARAD PUT PLAY COMMAND POINTER IN PLACE OF BASIC’S INPUT POINTER 9C36 BDB284 ( extbas.asm):03741 JSR >LB284 EVALUATE AN ALPHA EXPRESSION P GET NEW STRING DESCRIPTOR 9C39 3510 ( extbas.asm):03742 PULS X * RESTORE BASIC’S INPUT POINTER 9C3B 9FA6 ( extbas.asm):03743 STX CHARAD * 9C3D 39 ( extbas.asm):03744 RTS ( extbas.asm):03745 * MORE OF EXTENDED BASIC’S IRQ ROUTINE 9C3E 4F ( extbas.asm):03746 L9C3E CLRA CLEAR ACCA 9C3F 1F8B ( extbas.asm):03747 TFR A,DP SET THE DIRECT PAGE TO ZERO 9C41 DCE3 ( extbas.asm):03748 LDD PLYTMR GET THE ‘PLAY’ TIMER 9C43 10270D74 ( extbas.asm):03749 LBEQ LA9BB BRANCH TO COLOR BASIC’S IRQ ROUTINE IF ZERO 9C47 93D5 ( extbas.asm):03750 SUBD VD5 SUBTRACT OUT ‘PLAY’ INTERVAL 9C49 DDE3 ( extbas.asm):03751 STD PLYTMR SAVE THE NEW TIMER VALUE 9C4B 220D ( extbas.asm):03752 BHI L9C5A BRANCH IF ‘PLAY’ COMMAND NOT DONE 9C4D 0FE3 ( extbas.asm):03753 CLR PLYTMR RESET MSB OF ‘PLAY’ TIMER IF DONE 9C4F 0FE4 ( extbas.asm):03754 CLR PLYTMR+1 RESET LSB OF ‘PLAY’ TIMER 9C51 3502 ( extbas.asm):03755 PULS A GET THE CONDITION CODE REG 9C53 10EE67 ( extbas.asm):03756 LDS $07,S *LOAD THE STACK POINTER WITH THE CONTENTS OF THE U REGISTER ( extbas.asm):03757 * *WHICH WAS STACKED WHEN THE INTERRUPT WAS HONORED. 9C56 847F ( extbas.asm):03758 ANDA #$7F CLEAR E FLAG - MAKE COMPUTER THINK THIS WAS AN FIRQ 9C58 3402 ( extbas.asm):03759 PSHS A SAVE CONDITION CODE ( extbas.asm):03760 * THE RTI WILL NOW NOT RETURN TO WHERE IT WAS ( extbas.asm):03761 * INTERRUPTED FROM - IT WILL RETURN TO THE MAIN ‘PLAY’ ( extbas.asm):03762 * COMMAND INTERPRETATION LOOP. 9C5A 3B ( extbas.asm):03763 L9C5A RTI RETURN ( extbas.asm):03764 * TABLE OF NUMERICAL NOTE VALUES FOR LETTER NOTES 9C5B 0A0C0103050608 ( extbas.asm):03765 L9C5B FCB 10,12,1,3,5,6,8 NOTES A,B,C,D,E,F,G ( extbas.asm):03766 * TABLE OF DELAYS FOR OCTAVE 1 9C62 01A80190017A ( extbas.asm):03767 L9C62 FDB $01A8,$0190,$017A DELAYS FOR OCTAVE 1 9C68 01640150013D ( extbas.asm):03768 FDB $0164,$0150,$013D 9C6E 012B011A010A ( extbas.asm):03769 FDB $012B,$011A,$010A 9C74 00FB00ED00DF ( extbas.asm):03770 FDB $00FB,$00ED,$00DF ( extbas.asm):03771 * TABLE OF DELAYS FOR OCTAVE 2 9C7A 00D300C700BB ( extbas.asm):03772 L9C7A FDB $00D3,$00C7,$00BB DELAYS FOR OCTAVE 2 9C80 00B100A6009D ( extbas.asm):03773 FDB $00B1,$00A6,$009D 9C86 0094008B0083 ( extbas.asm):03774 FDB $0094,$008B,$0083 9C8C 007C0075006E ( extbas.asm):03775 FDB $007C,$0075,$006E ( extbas.asm):03776 * TABLE OF DELAYS FOR OCTAVES 3,4,5 9C92 A69C938B837B ( extbas.asm):03777 L9C92 FCB $A6,$9C,$93,$8B,$83,$7B DELAYS FOR OCTAVES 3,4,5 9C98 746D67615B56 ( extbas.asm):03778 FCB $74,$6D,$67,$61,$5B,$56 9C9E 514C47433F3B ( extbas.asm):03779 FCB $51,$4C,$47,$43,$3F,$3B 9CA4 3734312E2B28 ( extbas.asm):03780 FCB $37,$34,$31,$2E,$2B,$28 9CAA 2623211F1D1B ( extbas.asm):03781 FCB $26,$23,$21,$1F,$1D,$1B 9CB0 191816141312 ( extbas.asm):03782 FCB $19,$18,$16,$14,$13,$12 9CB6 9E8A ( extbas.asm):03783 DRAW LDX ZERO * X=0. ACCB=1; END OF DRAW COMMAND LINE VALUES - 9CB8 C601 ( extbas.asm):03784 LDB #$01 * WHEN THESE VALUES ARE PULLED OFF THE 9CBA 3414 ( extbas.asm):03785 PSHS X,B * STACK, THE DRAW COMMAND WILL END 9CBC D7C2 ( extbas.asm):03786 STB SETFLG SET PSET/PRESET FLAG TO PSET 9CBE 9FD5 ( extbas.asm):03787 STX VD5 CLEAR UPDATE FLAG AND DRAW FLAG 9CC0 BD959A ( extbas.asm):03788 JSR >L959A SET ACTIVE COLOR BYTE 9CC3 BDB156 ( extbas.asm):03789 JSR >LB156 EVALUATE EXPRESSION 9CC6 BDB654 ( extbas.asm):03790 L9CC6 JSR >LB654 GET THE LENGTH AND ADDRESS OF THE COMMAND STRING 9CC9 2008 ( extbas.asm):03791 BRA L9CD3 INTERPRET THE COMMAND STRING 9CCB BD9B98 ( extbas.asm):03792 L9CCB JSR >L9B98 GET NEXT CHARACTER FROM COMMAND LINE 9CCE 7E9BBE ( extbas.asm):03793 JMP >L9BBE EVALUATE A DECIMAL VALUE IN COMMAND LINE 9CD1 3514 ( extbas.asm):03794 L9CD1 PULS B,X GET NEXT COMMAND LINE TO BE INTERPRETED OFF THE STACK 9CD3 D7D8 ( extbas.asm):03795 L9CD3 STB VD8 SET COMMAND LENGTH CTR 9CD5 27FA ( extbas.asm):03796 BEQ L9CD1 GET NEW COMMAND LINE IF 0 9CD7 9FD9 ( extbas.asm):03797 STX VD9 SET COMMAND LINE ADDRESS 9CD9 102700EA ( extbas.asm):03798 LBEQ L9DC7 EXIT ROUTINE IF ADDRESS = 0 9CDD 0DD8 ( extbas.asm):03799 L9CDD TST VD8 TEST COMMAND LENGTH CTR 9CDF 27F0 ( extbas.asm):03800 BEQ L9CD1 GET NEW LINE IF 0 9CE1 BD9B98 ( extbas.asm):03801 JSR >L9B98 GET A COMMAND CHAR 9CE4 813B ( extbas.asm):03802 CMPA #'; CHECK FOR SEMICOLON 9CE6 27F5 ( extbas.asm):03803 BEQ L9CDD IGNORE SEMICOLONS 9CE8 8127 ( extbas.asm):03804 CMPA #'' CHECK FOR APOSTROPHES 9CEA 27F1 ( extbas.asm):03805 BEQ L9CDD IGNORE APOSTROPHES 9CEC 814E ( extbas.asm):03806 CMPA #'N UPDATE CHECK? 9CEE 2604 ( extbas.asm):03807 BNE L9CF4 NO 9CF0 03D5 ( extbas.asm):03808 COM VD5 TOGGLE UPDATE FLAG 0 = UPDATE, FF = NO UPDATE 9CF2 20E9 ( extbas.asm):03809 BRA L9CDD GET NEXT COMMAND 9CF4 8142 ( extbas.asm):03810 L9CF4 CMPA #'B CHECK DRAW FLAG? 9CF6 2604 ( extbas.asm):03811 BNE L9CFC NO 9CF8 03D6 ( extbas.asm):03812 COM VD6 TOGGLE DRAW FLAG 0 = DRAW LINE, FF = DON’T DRAW LINE 9CFA 20E1 ( extbas.asm):03813 BRA L9CDD GET NEXT COMMAND 9CFC 8158 ( extbas.asm):03814 L9CFC CMPA #'X SUBSTRING? 9CFE 10270096 ( extbas.asm):03815 LBEQ L9D98 GO EXECUTE A COMMAND 9D02 814D ( extbas.asm):03816 CMPA #'M MOVE THE DRAW POSITION ? 9D04 1027012A ( extbas.asm):03817 LBEQ L9E32 YES; GO MOVE IT 9D08 3402 ( extbas.asm):03818 PSHS A SAVE CURRENT COMMAND 9D0A C601 ( extbas.asm):03819 LDB #$01 DEFAULT VALUE IF NO NUMBER FOLLOWS COMMAND 9D0C 0DD8 ( extbas.asm):03820 TST VD8 CHECK COMMAND LENGTH CTR 9D0E 2711 ( extbas.asm):03821 BEQ L9D21 BRANCH IF NO COMMANDS LEFT 9D10 BD9B98 ( extbas.asm):03822 JSR >L9B98 GET A COMMAND CHAR 9D13 BDB3A2 ( extbas.asm):03823 JSR >LB3A2 SET CARRY IF NOT ALPHA 9D16 3401 ( extbas.asm):03824 PSHS CC SAVE CARRY FLAG 9D18 BD9BE2 ( extbas.asm):03825 JSR >L9BE2 MOVE COMMAND POINTER BACK ONE 9D1B 3501 ( extbas.asm):03826 PULS CC RESTORE CARRY FLAG 9D1D 2402 ( extbas.asm):03827 BCC L9D21 BRANCH IF NEXT COMMAND IS ALPHA 9D1F 8DAA ( extbas.asm):03828 BSR L9CCB EVALUATE A DECIMAL COMMAND LINE VALUE - RETURN VALUE IN ACCB 9D21 3502 ( extbas.asm):03829 L9D21 PULS A GET CURRENT COMMAND BACK 9D23 8143 ( extbas.asm):03830 CMPA #'C CHANGE COLOR? 9D25 2728 ( extbas.asm):03831 BEQ L9D4F YES 9D27 8141 ( extbas.asm):03832 CMPA #'A CHANGE ANGLE? 9D29 272E ( extbas.asm):03833 BEQ L9D59 YES 9D2B 8153 ( extbas.asm):03834 CMPA #'S CHANGE SCALE? 9D2D 2732 ( extbas.asm):03835 BEQ L9D61 YES 9D2F 8155 ( extbas.asm):03836 CMPA #'U GO UP? 9D31 275C ( extbas.asm):03837 BEQ L9D8F YES 9D33 8144 ( extbas.asm):03838 CMPA #'D GO DOWN? 9D35 2755 ( extbas.asm):03839 BEQ L9D8C YES 9D37 814C ( extbas.asm):03840 CMPA #'L GO LEFT? 9D39 274C ( extbas.asm):03841 BEQ L9D87 YES 9D3B 8152 ( extbas.asm):03842 CMPA #'R GO RIGHT? 9D3D 2743 ( extbas.asm):03843 BEQ L9D82 YES 9D3F 8045 ( extbas.asm):03844 SUBA #'E MASK OFF ASCII FOR LETTER E-H COMMAND CHECKS 9D41 272F ( extbas.asm):03845 BEQ L9D72 BRANCH IF E (45 DEGREES) 9D43 4A ( extbas.asm):03846 DECA * 9D44 2727 ( extbas.asm):03847 BEQ L9D6D *BRANCH IF F (135 DEGREES) 9D46 4A ( extbas.asm):03848 DECA = 9D47 2732 ( extbas.asm):03849 BEQ L9D7B =BRANCH IF G (225 DEGREES) 9D49 4A ( extbas.asm):03850 DECA * 9D4A 271D ( extbas.asm):03851 BEQ L9D69 *BRANCH IF H (31S DEGREES) 9D4C 7EB44A ( extbas.asm):03852 L9D4C JMP >LB44A ‘FC’ ERROR IF ILLEGAL COMMAND ( extbas.asm):03853 * CHANGE COLOR 9D4F BD955D ( extbas.asm):03854 L9D4F JSR >L955D ADJUST COLOR CODE FOR PROPER PMODE 9D52 D7B2 ( extbas.asm):03855 STB FORCOL SAVE NEW FOREGROUND COLOR 9D54 BD959A ( extbas.asm):03856 JSR >L959A SET COLOR BYTES (WCOLOR,ALLCOL) 9D57 2084 ( extbas.asm):03857 L9D57 BRA L9CDD GO PROCESS ANOTHER COMMAND ( extbas.asm):03858 * CHANGE ANGLE 9D59 C104 ( extbas.asm):03859 L9D59 CMPB #$04 ONLY 0-3 ARE LEGAL 9D5B 24EF ( extbas.asm):03860 BCC L9D4C ‘FC’ ERROR IF ANGLE NUMBER > 3 9D5D D7E8 ( extbas.asm):03861 STB ANGLE SAVE DRAW ANGLE 9D5F 20F6 ( extbas.asm):03862 BRA L9D57 GO PROCESS ANOTHER COMMAND ( extbas.asm):03863 * CHANGE SCALE 9D61 C13F ( extbas.asm):03864 L9D61 CMPB #63 ONLY 0-63 ARE LEGAL 9D63 24E7 ( extbas.asm):03865 BCC L9D4C ‘FC’ ERROR IF SCALE > 63 9D65 D7E9 ( extbas.asm):03866 STB SCALE SAVE DRAW SCALE 9D67 20EE ( extbas.asm):03867 BRA L9D57 GO PROCESS ANOTHER COMMAND ( extbas.asm):03868 * 315 DEGREES 9D69 4F ( extbas.asm):03869 L9D69 CLRA *NEGATE ACCD - MAKE HORIZONTAL 9D6A 8D58 ( extbas.asm):03870 BSR L9DC4 *DIFFERENCE NEGATIVE 9D6C 21 ( extbas.asm):03871 L9D6C FCB SKP1 SKIP ONE BYTE - KEEP HORIZONTAL DIFFERENCE NEGATIVE ( extbas.asm):03872 * 135 DEGREES 9D6D 4F ( extbas.asm):03873 L9D6D CLRA CLEAR MS BYTE OF HORIZONTAL DIFFERENCE 9D6E 1F01 ( extbas.asm):03874 TFR D,X COPY HORIZONTAL DIFFERENCE TO VERTICAL DIFFERENCE 9D70 2059 ( extbas.asm):03875 BRA L9DCB GO MOVE THE DRAW POSITION ( extbas.asm):03876 * 45 DEGREES 9D72 4F ( extbas.asm):03877 L9D72 CLRA CLEAR MS BYTE OF HORIZONTAL DIFFERENCE 9D73 1F01 ( extbas.asm):03878 TFR D,X COPY HORIZONTAL DIFFERENCE TO VERTICAL DIFFERENCE 9D75 8D4D ( extbas.asm):03879 BSR L9DC4 NEGATE ACCD - MAKE HORIZONTAL DIFFERENCE NEGATIVE 9D77 1E01 ( extbas.asm):03880 EXG D,X EXCHANGE HORIZONTAL AND VERTICAL DIFFERENCES 9D79 2050 ( extbas.asm):03881 BRA L9DCB GO MOVE THE DRAW POSITION ( extbas.asm):03882 * 225 DEGREES 9D7B 4F ( extbas.asm):03883 L9D7B CLRA CLEAR MS BYTE OF HORIZONTAL DIFFERENCE 9D7C 1F01 ( extbas.asm):03884 TFR D,X COPY HORIZONTAL DIFFERENCE TO VERTICAL DIFFERENCE 9D7E 8D44 ( extbas.asm):03885 BSR L9DC4 NEGATE ACCD - MAKE HORIZONTAL DIFFERENCE NEGATIVE 9D80 2049 ( extbas.asm):03886 BRA L9DCB GO MOVE THE DRAW POSITION ( extbas.asm):03887 * GO RIGHT 9D82 4F ( extbas.asm):03888 L9D82 CLRA CLEAR MS BYTE OF HORIZONTAL DIFFERENCE 9D83 9E8A ( extbas.asm):03889 L9D83 LDX ZERO X = 0; VERT DIFF = 0 9D85 2044 ( extbas.asm):03890 BRA L9DCB GO MOVE THE DRAW POSITION ( extbas.asm):03891 * GO LEFT 9D87 4F ( extbas.asm):03892 L9D87 CLRA *NEGATE ACCD - MAKE THE HORIZONTAL 9D88 8D3A ( extbas.asm):03893 BSR L9DC4 *DIFFERENCE NEGATIVE 9D8A 20F7 ( extbas.asm):03894 BRA L9D83 MAKE VERTICAL DIFFERENCE ZERO AND MOVE THE DRAW POSITION ( extbas.asm):03895 * GO DOWN 9D8C 4F ( extbas.asm):03896 L9D8C CLRA CLEAR MS BYTE OF HORIZONTAL DIFFERENCE 9D8D 2003 ( extbas.asm):03897 BRA L9D92 *MAKE VERTICAL DIFFERENCE = 0, EXCHANGE HORIZONTAL AND ( extbas.asm):03898 * *VERTICAL DIFFERENCES AND MOVE THE DRAW POSTION ( extbas.asm):03899 * GO UP 9D8F 4F ( extbas.asm):03900 L9D8F CLRA *NEGATE ACCD - MAKE THE HORIZONTAL 9D90 8D32 ( extbas.asm):03901 BSR L9DC4 *DIFFERENCE NEGATIVE 9D92 9E8A ( extbas.asm):03902 L9D92 LDX ZERO X = 0; HORZ DIFF = 0 9D94 1E10 ( extbas.asm):03903 EXG X,D EXCHANGE THE HORIZONTAL AND VERTICAL DIFFERENCES 9D96 2033 ( extbas.asm):03904 BRA L9DCB GO MOVE THE DRAW POSITION ( extbas.asm):03905 * EXECUTE A COMMAND SUB STRING 9D98 BD9C1B ( extbas.asm):03906 L9D98 JSR >L9C1B INTERPRET CURRENT COMMAND AS IF IT WERE A BASIC VARIABLE 9D9B C602 ( extbas.asm):03907 LDB #$02 = 9D9D BDAC33 ( extbas.asm):03908 JSR >LAC33 =FOUR BYTES OF FREE RAM LEFT? 9DA0 D6D8 ( extbas.asm):03909 LDB VD8 * 9DA2 9ED9 ( extbas.asm):03910 LDX VD9 * GET CURRENT COMMAND LENGTH AND POINTER 9DA4 3414 ( extbas.asm):03911 PSHS X,B * AND SAVE THEM ON THE STACK 9DA6 7E9CC6 ( extbas.asm):03912 JMP >L9CC6 EVALUATE NUMERICAL VALUE IN COMMAND LINE ( extbas.asm):03913 * MULTIPLY HOR OR VER DIFFERENCE BY SCALE FACTOR. ( extbas.asm):03914 * DIVIDE PRODUCT BY 4 AND RETURN VALUE IN ACCD 9DA9 D6E9 ( extbas.asm):03915 L9DA9 LDB SCALE GET DRAW SCALE AND BRANCH IF ZERO - THIS WILL CAUSE A 9DAB 271B ( extbas.asm):03916 BEQ L9DC8 ZERO DEFAULT TO FULL SCALE 9DAD 4F ( extbas.asm):03917 CLRA CLEAR MS BYTE 9DAE 1E01 ( extbas.asm):03918 EXG D,X EXCHANGE DIFFERENCE AND SCALE FACTOR 9DB0 A7E2 ( extbas.asm):03919 STA ,-S SAVE MS BYTE OF DIFFERENCE ON STACK (SIGN INFORMATION) 9DB2 2A02 ( extbas.asm):03920 BPL L9DB6 BRANCH IF POSITIVE DIFFERENCE 9DB4 8D0D ( extbas.asm):03921 BSR L9DC3 NEGATE ACCD 9DB6 BD9FB5 ( extbas.asm):03922 L9DB6 JSR >L9FB5 MULT DIFFERENCE BY SCALE FACTOR 9DB9 1F30 ( extbas.asm):03923 TFR U,D SAVE 2 MS BYTES IN ACCD 9DBB 44 ( extbas.asm):03924 LSRA * 9DBC 56 ( extbas.asm):03925 RORB * 9DBD 44 ( extbas.asm):03926 L9DBD LSRA * 9DBE 56 ( extbas.asm):03927 RORB *DIVIDE ACCD BY 4 - EACH SCALE INCREMENT IS 1/4 FULL SCALE 9DBF 6DE0 ( extbas.asm):03928 TST ,S+ =CHECK SIGN OF ORIGINAL DIFFERENCE AND 9DC1 2A04 ( extbas.asm):03929 BPL L9DC7 =RETURN IF POSITIVE ( extbas.asm):03930 * NEGATE ACCUMULATOR D 9DC3 40 ( extbas.asm):03931 L9DC3 NEGA 9DC4 50 ( extbas.asm):03932 L9DC4 NEGB * 9DC5 8200 ( extbas.asm):03933 SBCA #$00 * NEGATE ACCUMULATOR D IF ACCA=0 9DC7 39 ( extbas.asm):03934 L9DC7 RTS 9DC8 1F10 ( extbas.asm):03935 L9DC8 TFR X,D TRANSFER UNCHANGED DIFFERENCE TO ACCD 9DCA 39 ( extbas.asm):03936 RTS ( extbas.asm):03937 * MOVE THE DRAW POSITION - ADD THE ORTHOGONAL DIFFERENCES ( extbas.asm):03938 * IN ACCD (HORIZONTAL) AND X (VERTICAL) TO ( extbas.asm):03939 * THE CURRENT POSITION; DRAW A LINE AFTER THE MOVE 9DCB 3406 ( extbas.asm):03940 L9DCB PSHS B,A SAVE HORIZ DIFFERENCE 9DCD 8DDA ( extbas.asm):03941 BSR L9DA9 APPLY SCALE FACTOR TO VERTICAL 9DCF 3510 ( extbas.asm):03942 PULS X GET HORIZ DIFFERENCE 9DD1 3406 ( extbas.asm):03943 PSHS B,A SAVE VERT DIFFERENCE 9DD3 8DD4 ( extbas.asm):03944 BSR L9DA9 APPLY SCALE FACTOR TO HORIZONTAL 9DD5 3510 ( extbas.asm):03945 PULS X GET VERT DIFFERENCE 9DD7 109EE8 ( extbas.asm):03946 LDY ANGLE * GET THE DRAW ANGLE AND SCALE AND SAVE THEM ON 9DDA 3420 ( extbas.asm):03947 PSHS Y * THE STACK; USE Y BECAUSE IT IS THE ONLY UNUSED REGISTER 9DDC 6DE4 ( extbas.asm):03948 L9DDC TST ,S CHECK DRAW ANGLE 9DDE 2708 ( extbas.asm):03949 BEQ L9DE8 BRANCH IF NO ANGLE 9DE0 1E10 ( extbas.asm):03950 EXG X,D EXCH HOR AND VER DIFFERENCES 9DE2 8DDF ( extbas.asm):03951 BSR L9DC3 NEGATE ACCD 9DE4 6AE4 ( extbas.asm):03952 DEC ,S DECR ANGLE 9DE6 20F4 ( extbas.asm):03953 BRA L9DDC CHECK ANGLE AGAIN 9DE8 3520 ( extbas.asm):03954 L9DE8 PULS Y PULL ANGLE AND SCALE OFF THE STACK 9DEA DE8A ( extbas.asm):03955 LDU ZERO U = 0; DEFAULT HOR END POSITION = 0 9DEC D3C7 ( extbas.asm):03956 ADDD HORDEF ADD DIFFERENCE TO HORIZ START 9DEE 2B02 ( extbas.asm):03957 BMI L9DF2 HORIZ COORD = 0 IF RESULT IS NEG 9DF0 1F03 ( extbas.asm):03958 TFR D,U SAVE HOR END POSITION IN U 9DF2 1F10 ( extbas.asm):03959 L9DF2 TFR X,D PUT VERT DIFFERENCE IN ACCD 9DF4 9E8A ( extbas.asm):03960 LDX ZERO X = 0; DEFAULT VER END POSITION = 0 9DF6 D3C9 ( extbas.asm):03961 ADDD VERDEF ADD DIFFERENCE TO VER START 9DF8 2B02 ( extbas.asm):03962 BMI L9DFC VER COORD = 0 IF RESULT IS NEG 9DFA 1F01 ( extbas.asm):03963 TFR D,X SAVE VERT END POSITION IN X ( extbas.asm):03964 * MOVE THE DRAW POSITION; ENTER WITH ABSOLUTE HORIZONTAL POSITION ( extbas.asm):03965 * IN U REGISTER AND ABSOLUTE VERTICAL POSITlON IN X REGISTER. 9DFC 11830100 ( extbas.asm):03966 L9DFC CMPU #256 IS HORIZ COORD WITHIN RANGE? 9E00 2503 ( extbas.asm):03967 BLO L9E05 YES 9E02 CE00FF ( extbas.asm):03968 LDU #255 NO - FORCE TO MAX VALUE 9E05 8C00C0 ( extbas.asm):03969 L9E05 CMPX #192 IS VERT COORD WITHIN RANGE? 9E08 2503 ( extbas.asm):03970 BLO L9E0D YES 9E0A 8E00BF ( extbas.asm):03971 LDX #191 NO - FORCE TO MAX VALUE 9E0D DCC7 ( extbas.asm):03972 L9E0D LDD HORDEF * 9E0F DDBD ( extbas.asm):03973 STD HORBEG * 9E11 DCC9 ( extbas.asm):03974 LDD VERDEF * COPY THE HOR AND VER POINTERS 9E13 DDBF ( extbas.asm):03975 STD VERBEG * INTO THE DRAW LINE START POSITION 9E15 9FC5 ( extbas.asm):03976 STX VEREND = 9E17 DFC3 ( extbas.asm):03977 STU HOREND = SET THE DRAW LINE END POSITION 9E19 0DD5 ( extbas.asm):03978 TST VD5 CHECK UPDATE FLAG 9E1B 2604 ( extbas.asm):03979 BNE L9E21 BRANCH IF NO UPDATE 9E1D 9FC9 ( extbas.asm):03980 STX VERDEF * 9E1F DFC7 ( extbas.asm):03981 STU HORDEF * UPDATE POSITION OF DRAW POINTER 9E21 BD9420 ( extbas.asm):03982 L9E21 JSR >L9420 NORMALIZE COORDS IN HOREND, VEREND AND HORBEG,VERBEG 9E24 0DD6 ( extbas.asm):03983 TST VD6 GET DRAW FLAG 9E26 2603 ( extbas.asm):03984 BNE L9E2B BRANCH IF NO DRAW 9E28 BD94A1 ( extbas.asm):03985 JSR >L94A1 DRAW A LINE FROM (HORBEG,VERBEG) TO (HOREND,VEREND) 9E2B 0FD5 ( extbas.asm):03986 L9E2B CLR VD5 RESET UPDATE FLAG 9E2D 0FD6 ( extbas.asm):03987 CLR VD6 RESET DRAW FLAG 9E2F 7E9CDD ( extbas.asm):03988 JMP >L9CDD GO GET ANOTHER COMMAND ( extbas.asm):03989 * SET THE DRAW POSITION 9E32 BD9B98 ( extbas.asm):03990 L9E32 JSR >L9B98 GET A CHAR FROM COMMAND LINE 9E35 3402 ( extbas.asm):03991 PSHS A SAVE CHARACTER 9E37 BD9E5E ( extbas.asm):03992 JSR >L9E5E EVALUATE HORIZ DIFFERENCE 9E3A 3406 ( extbas.asm):03993 PSHS B,A SAVE IT ON STACK 9E3C BD9B98 ( extbas.asm):03994 JSR >L9B98 GET A CHAR FROM COMMAND LINE 9E3F 812C ( extbas.asm):03995 CMPA #', CHECK FOR COMMA 9E41 1026FF07 ( extbas.asm):03996 LBNE L9D4C ‘FC’ ERROR IF NO COMMA 9E45 BD9E5B ( extbas.asm):03997 JSR >L9E5B EVALUATE VERT DIFFERENCE 9E48 1F01 ( extbas.asm):03998 TFR D,X SAVE VERT DIFFERENCE IN X 9E4A 3540 ( extbas.asm):03999 PULS U GET HORIZ DIFFERENCE IN U 9E4C 3502 ( extbas.asm):04000 PULS A GET FIRST COMMAND CHARACTER 9E4E 812B ( extbas.asm):04001 CMPA #'+ *IF FIRST COMMAND CHAR WAS EITHER + OR -, TREAT 9E50 2704 ( extbas.asm):04002 BEQ L9E56 *THE VALUES IN U & X AS DIFFERENCES AND MOVE 9E52 812D ( extbas.asm):04003 CMPA #'- *POINTER, OTHERWISE TREAT U & X AS AN ABSOLUTE 9E54 26A6 ( extbas.asm):04004 BNE L9DFC *POSITION AND MOVE THE CURRENT POSITION THERE. 9E56 1F30 ( extbas.asm):04005 L9E56 TFR U,D PUT HORIZ DIFFERENCE IN ACCD 9E58 7E9DCB ( extbas.asm):04006 JMP >L9DCB GO MOVE THE DRAW POSITION 9E5B BD9B98 ( extbas.asm):04007 L9E5B JSR >L9B98 GET A CHAR FROM COMMAND LINE 9E5E 812B ( extbas.asm):04008 L9E5E CMPA #'+ *CHECK FOR A LEADING PLUS SIGN (RELATIVE MOTION) 9E60 2707 ( extbas.asm):04009 BEQ L9E69 *AND BRANCH IF RELATIVE 9E62 812D ( extbas.asm):04010 CMPA #'- =CHECK FOR A LEADING MINUS SIGN (RELATIVE MOTION) 9E64 2704 ( extbas.asm):04011 BEQ L9E6A =AND BRANCH IF RELATIVE 9E66 BD9BE2 ( extbas.asm):04012 JSR >L9BE2 MOVE COMMAND STRING BACK ONE IF NOT RELATIVE MOTION 9E69 4F ( extbas.asm):04013 L9E69 CLRA ACCA = 0 IS ‘+‘; ACCA <> 0 IS ‘-' 9E6A 3402 ( extbas.asm):04014 L9E6A PSHS A SAVE ADD/SUB FLAG 9E6C BD9CCB ( extbas.asm):04015 JSR >L9CCB EVALUATE DECIMAL NUMBER IN COMMAND STRING - RETURN VALUE IN ACCB ( extbas.asm):04016 * 9E6F 3502 ( extbas.asm):04017 PULS A GET ADD/SUB FLAG 9E71 4D ( extbas.asm):04018 TSTA CHECK IT, 0:ADD, <> 0:SUB 9E72 2704 ( extbas.asm):04019 BEQ L9E78 RETURN IF ADD 9E74 4F ( extbas.asm):04020 CLRA * 9E75 50 ( extbas.asm):04021 NEGB * 9E76 8200 ( extbas.asm):04022 SBCA #$00 *NEGATE ACCB INTO A TWO BYTE SIGNED VALUE IN ACCD 9E78 39 ( extbas.asm):04023 L9E78 RTS ( extbas.asm):04024 * ( extbas.asm):04025 * TABLE OF SINES AND COSINES FOR CIRCLE ( extbas.asm):04026 * 9E79 00000001 ( extbas.asm):04027 L9E79 FDB $0000,$0001 SUBARC 0 9E7D FEC51919 ( extbas.asm):04028 L9E7D FDB $FEC5,$1919 SUBARC 1 9E81 FB1631F2 ( extbas.asm):04029 L9E81 FDB $FB16,$31F2 SUBARC 2 9E85 F4FB4A51 ( extbas.asm):04030 L9E85 FDB $F4FB,$4A51 SUBARC 3 9E89 EC8461F9 ( extbas.asm):04031 L9E89 FDB $EC84,$61F9 SUBARC 4 9E8D E1C778AE ( extbas.asm):04032 L9E8D FDB $E1C7,$78AE SUBARC 5 9E91 D4DC8E3B ( extbas.asm):04033 L9E91 FDB $D4DC,$8E3B SUBARC 6 9E95 C5E5A269 ( extbas.asm):04034 L9E95 FDB $C5E5,$A269 SUBARC 7 9E99 B506B506 ( extbas.asm):04035 L9E99 FDB $B506,$B506 SUBARC 8 ( extbas.asm):04036 * ( extbas.asm):04037 * CIRCLE ( extbas.asm):04038 * THE CIRCLE IS ACTUALLY DRAWN AS A 64 SIDED ( extbas.asm):04039 * POLYGON. IT IS COMPOSED OF 64 ‘LINE’ COMMANDS 9E9D 8140 ( extbas.asm):04040 CIRCLE CMPA #'@ CHECK FOR @ SIGN 9E9F 2602 ( extbas.asm):04041 BNE L9EA3 SKIP IF NOT 9EA1 9D9F ( extbas.asm):04042 JSR GETNCH GET ANOTHER CHARACTER FROM BASIC 9EA3 BD9522 ( extbas.asm):04043 L9EA3 JSR >L9522 GET MAX HOR & VER COORD VALUES AND PUT THEM IN VD3 AND VD5 9EA6 BD93B2 ( extbas.asm):04044 JSR >L93B2 GET HOR & VER CENTER COORDS AND PUT IN HORBEG,VERBEG 9EA9 BD931D ( extbas.asm):04045 JSR >L931D NORMALIZE START COORDS FOR PROPER PMODE 9EAC AEC4 ( extbas.asm):04046 LDX ,U GET HOR COORD 9EAE 9FCB ( extbas.asm):04047 STX VCB SAVE IT 9EB0 AE42 ( extbas.asm):04048 LDX $02,U GET VERT COORD 9EB2 9FCD ( extbas.asm):04049 STX VCD SAVE IT 9EB4 BDB26D ( extbas.asm):04050 JSR SYNCOMMA SYNTAX CHECK FOR COMMA 9EB7 BDB73D ( extbas.asm):04051 JSR >LB73D EVALUATE EXPRESSION RETURN VALUE IN X 9EBA CE00CF ( extbas.asm):04052 LDU #VCF POINT U TO TEMP DATA STORAGE 9EBD AFC4 ( extbas.asm):04053 STX ,U SAVE RADIUS 9EBF BD9320 ( extbas.asm):04054 JSR >L9320 NORMALIZE RADIUS 9EC2 8601 ( extbas.asm):04055 LDA #$01 SET TO PSET 9EC4 97C2 ( extbas.asm):04056 STA SETFLG SAVE PSET/PRESET FLAG 9EC6 BD9581 ( extbas.asm):04057 JSR >L9581 GO EVALUATE COLOR EXPRESSION AND SAVE IN WCOLOR 9EC9 8E0100 ( extbas.asm):04058 LDX #$100 HEIGHT/WIDTH RATIO DEFAULT VALUE 9ECC 9DA5 ( extbas.asm):04059 JSR GETCCH GET AN INPUT CHARACTER FROM BASIC 9ECE 270F ( extbas.asm):04060 BEQ L9EDF BRANCH IF NONE 9ED0 BDB26D ( extbas.asm):04061 JSR SYNCOMMA SYNTAX CHECK FOR COMMA 9ED3 BDB141 ( extbas.asm):04062 JSR >LB141 EVALUATE EXPRESSION 9ED6 964F ( extbas.asm):04063 LDA FP0EXP *GET FPA0 EXPONENT, ADD 8 TO IT AND RESAVE IT - THIS 9ED8 8B08 ( extbas.asm):04064 ADDA #$08 *WILL EFFECTIVELY MULTIPLY FPA0 BY 256. 9EDA 974F ( extbas.asm):04065 STA FP0EXP * 9EDC BDB740 ( extbas.asm):04066 JSR >LB740 EVALUATE EXPRESSION, RETURN VALUE IN X 9EDF 96B6 ( extbas.asm):04067 L9EDF LDA PMODE GET CURRENT PMODE VALUE 9EE1 8502 ( extbas.asm):04068 BITA #$02 TEST FOR PMODE 0,1,4 9EE3 2704 ( extbas.asm):04069 BEQ L9EE9 BRANCH IF SO 9EE5 1F10 ( extbas.asm):04070 TFR X,D * MULT X BY 2 -FOR PMODES 2,3 THE HOR PIXELS ARE 2X AS LONG AS 9EE7 308B ( extbas.asm):04071 LEAX D,X * PMODES 0,1,4; MULT HW RATIO BY 2 TO COMPENSATE 9EE9 9FD1 ( extbas.asm):04072 L9EE9 STX VD1 SAVE HW RATIO 9EEB C601 ( extbas.asm):04073 LDB #$01 * 9EED D7C2 ( extbas.asm):04074 STB SETFLG *SET PSET/PRESET FLAG TO PSET 9EEF D7D8 ( extbas.asm):04075 STB VD8 FIRST TIME FLAG - SET TO 0 AFTER ARC DRAWN 9EF1 BD9FE2 ( extbas.asm):04076 JSR >L9FE2 EVALUATE CIRCLE START POINT (OCTANT, SUBARC) 9EF4 3406 ( extbas.asm):04077 PSHS B,A SAVE START POINT 9EF6 BD9FE2 ( extbas.asm):04078 JSR >L9FE2 EVALUATE CIRCLE END POINT (OCTANT, SUBARC) 9EF9 DDD9 ( extbas.asm):04079 STD VD9 SAVE END POINT 9EFB 3506 ( extbas.asm):04080 PULS A,B GET START POINT 9EFD 3406 ( extbas.asm):04081 L9EFD PSHS B,A STORE CURRENT CIRCLE POSITION 9EFF 9EC3 ( extbas.asm):04082 LDX HOREND * MOVE HOR, VER COORDS FROM HOREND,VEREND TO 9F01 9FBD ( extbas.asm):04083 STX HORBEG * HORBEG, VERBEG R MOVE OLD END COORDINATES 9F03 9EC5 ( extbas.asm):04084 LDX VEREND * NEW START COORDINATES 9F05 9FBF ( extbas.asm):04085 STX VERBEG * 9F07 CE9E7B ( extbas.asm):04086 LDU #L9E79+2 POINT TO TABLE OF SINES & COSINES 9F0A 8401 ( extbas.asm):04087 ANDA #$01 =GET OCTANT NUMBER 9F0C 2703 ( extbas.asm):04088 BEQ L9F11 =BRANCH IF EVEN 9F0E 50 ( extbas.asm):04089 NEGB * 9F0F CB08 ( extbas.asm):04090 ADDB #$08 *CONVERT 0-7 TO 8-1 FOR ODD OCTANT NUMBERS 9F11 58 ( extbas.asm):04091 L9F11 ASLB = 9F12 58 ( extbas.asm):04092 ASLB =FOUR BYTES/TABLE ENTRY 9F13 33C5 ( extbas.asm):04093 LEAU B,U POINT U TO CORRECT TABLE ENTRY 9F15 3440 ( extbas.asm):04094 PSHS U SAVE SIN/COS TABLE ENTRY 9F17 BD9FA7 ( extbas.asm):04095 JSR >L9FA7 CALCULATE HORIZ OFFSET 9F1A 3540 ( extbas.asm):04096 PULS U GET SIN/COS TABLE PTR 9F1C 335E ( extbas.asm):04097 LEAU $-02,U MOVE TO COSINE (VERT) 9F1E 3410 ( extbas.asm):04098 PSHS X SAVE HORIZ OFFSET 9F20 BD9FA7 ( extbas.asm):04099 JSR >L9FA7 CALCULATE VERT OFFSET 9F23 3520 ( extbas.asm):04100 PULS Y PUT HORIZ OFFSET IN Y 9F25 A6E4 ( extbas.asm):04101 LDA ,S * 9F27 8403 ( extbas.asm):04102 ANDA #$03 * 9F29 2706 ( extbas.asm):04103 BEQ L9F31 *BRANCH IF OCTANT 0,3,4,7 9F2B 8103 ( extbas.asm):04104 CMPA #$03 * 9F2D 2702 ( extbas.asm):04105 BEQ L9F31 *BRANCH IF OCTANT 0,3,4,7 9F2F 1E12 ( extbas.asm):04106 EXG X,Y SWAP HOR AND VERT OFFSETS 9F31 9FC3 ( extbas.asm):04107 L9F31 STX HOREND SAVE HORIZ OFFSET ( extbas.asm):04108 * THE HW RATIO WILL ONLY MODIFY THE VERT COORD 9F33 1F21 ( extbas.asm):04109 TFR Y,X LOAD X WITH THE CALCULATED VERT OFFSET 9F35 DCD1 ( extbas.asm):04110 LDD VD1 GET HW RATIO 9F37 BD9FB5 ( extbas.asm):04111 JSR >L9FB5 MULT VERT OFFSET BY HW RATIO 9F3A 1F20 ( extbas.asm):04112 TFR Y,D TRANSFER THE PRODUCT TO ACCD 9F3C 4D ( extbas.asm):04113 TSTA CHECK OVERFLOW FLAG AND GET MSB RESULT 9F3D 10261509 ( extbas.asm):04114 LBNE LB44A ‘FC’ ERROR IF RESULT > 255 9F41 D7C5 ( extbas.asm):04115 STB VEREND SAVE DELTA VER MBS 9F43 1F30 ( extbas.asm):04116 TFR U,D LSB RESULT TO ACCA 9F45 97C6 ( extbas.asm):04117 STA VEREND+1 SAVE DELTA VER LSB 9F47 A6E4 ( extbas.asm):04118 LDA ,S * 9F49 8102 ( extbas.asm):04119 CMPA #$02 * BRANCH IF OCTANT = 0,1,6,7 (SUBARC HOR END 9F4B 250E ( extbas.asm):04120 BLO L9F5B * POINT >= HOR CENTER) 9F4D 8106 ( extbas.asm):04121 CMPA #$06 = BRANCH IF OCTANT = 0,1,6,7 (SUSARC HOR END 9F4F 240A ( extbas.asm):04122 BCC L9F5B = POINT >= HOR CENTER) 9F51 DCCB ( extbas.asm):04123 LDD VCB GET HOR COORD OF CENTER 9F53 93C3 ( extbas.asm):04124 SUBD HOREND SUBTRACT HORIZONTAL DIFFERENCE 9F55 2411 ( extbas.asm):04125 BCC L9F68 BRANCH IF NO UNDERFLOW 9F57 4F ( extbas.asm):04126 CLRA * 9F58 5F ( extbas.asm):04127 CLRB * IF NEW HOR < 0, FORCE IT TO BE 0 9F59 200D ( extbas.asm):04128 BRA L9F68 SAVE NEW COORD 9F5B DCCB ( extbas.asm):04129 L9F5B LDD VCB GET HOR COORD OF CENTER 9F5D D3C3 ( extbas.asm):04130 ADDD HOREND ADD HORIZONTAL DIFFERENCE 9F5F 2505 ( extbas.asm):04131 BLO L9F66 BRANCH IF OVERFLOW 9F61 1093D3 ( extbas.asm):04132 CMPD VD3 COMPARE TO MAX HOR COORD 9F64 2502 ( extbas.asm):04133 BLO L9F68 BRANCH IF < MAX HOR 9F66 DCD3 ( extbas.asm):04134 L9F66 LDD VD3 GET MAX HOR COORD 9F68 DDC3 ( extbas.asm):04135 L9F68 STD HOREND SAVE NEW HORIZ SU8ARC END COORD 9F6A A6E4 ( extbas.asm):04136 LDA ,S * 9F6C 8104 ( extbas.asm):04137 CMPA #$04 * BRANCH IF OCTANT = 0,1,2,3 (SUBARC VERT END 9F6E 250A ( extbas.asm):04138 BLO L9F7A * POINT >= VERT CENTER) 9F70 DCCD ( extbas.asm):04139 LDD VCD GET VER COORD OF CENTER 9F72 93C5 ( extbas.asm):04140 SUBD VEREND SUBTRACT VERTICAL DIFFERENCE 9F74 2411 ( extbas.asm):04141 BCC L9F87 BRANCH IF NO UNDERFIOW 9F76 4F ( extbas.asm):04142 CLRA * 9F77 5F ( extbas.asm):04143 CLRB *IF NEW VERT < 0, FORCE IT TO BE 0 9F78 200D ( extbas.asm):04144 BRA L9F87 SAVE NEW COORD 9F7A DCCD ( extbas.asm):04145 L9F7A LDD VCD GET VER COORD OF CENTER 9F7C D3C5 ( extbas.asm):04146 ADDD VEREND ADD VERTICAL DIFFERENCE 9F7E 2505 ( extbas.asm):04147 BLO L9F85 BRANCH IF OVERFLOW 9F80 1093D5 ( extbas.asm):04148 CMPD VD5 COMPARE TO MAX VERT COORD 9F83 2502 ( extbas.asm):04149 BLO L9F87 BRANCH IF < MAX VER 9F85 DCD5 ( extbas.asm):04150 L9F85 LDD VD5 GET MAX VERT COORD 9F87 DDC5 ( extbas.asm):04151 L9F87 STD VEREND SAVE NEW VERT SUSARC END COORD 9F89 0DD8 ( extbas.asm):04152 TST VD8 CHECK FIRST TIME FLAG 9F8B 2602 ( extbas.asm):04153 BNE L9F8F *DO NOT DRAW A LINE FIRST TIME THRU - ( extbas.asm):04154 * *BECAUSE THE FIRST TIME YOU WOULD DRAW A LINE ( extbas.asm):04155 * *FROM THE CENTER TO THE FIRST POINT ON THE CIRCLE 9F8D 8D50 ( extbas.asm):04156 BSR L9FDF DRAW A LINE 9F8F 3506 ( extbas.asm):04157 L9F8F PULS A,B GET END COORDS 9F91 04D8 ( extbas.asm):04158 LSR VD8 SHIFT FIRST TIME FLAG 9F93 2505 ( extbas.asm):04159 BLO L9F9A DO NOT CHECK FOR END POINT AFTER DRAWING FIRST ARC 9F95 1093D9 ( extbas.asm):04160 CMPD VD9 COMPARE CURRENT POSITION TO END POINT 9F98 270C ( extbas.asm):04161 BEQ L9FA6 CIRCLE DRAWING FINISHED ( extbas.asm):04162 * INCREMENT SUBARC CTR, IF > 7 THEN INCR OCTANT CTR 9F9A 5C ( extbas.asm):04163 L9F9A INCB INCR SUBARC CTR 9F9B C108 ( extbas.asm):04164 CMPB #$08 > 7? 9F9D 2604 ( extbas.asm):04165 BNE L9FA3 NO 9F9F 4C ( extbas.asm):04166 INCA INCR OCTANT CTR 9FA0 5F ( extbas.asm):04167 CLRB RESET SUBARC CTR 9FA1 8407 ( extbas.asm):04168 ANDA #$07 *KEEP IN RANGE OF 0-7; ONCE ACCA = B, THIS WILL MAKE ACCA = 0, ( extbas.asm):04169 * *SO THE END POINT WILL BE (0,0) AND THE CIRCLE ROUTINE WILL END. 9FA3 7E9EFD ( extbas.asm):04170 L9FA3 JMP >L9EFD KEEP DRAWING CIRCLE 9FA6 39 ( extbas.asm):04171 L9FA6 RTS EXIT CIRCLE ROUTINE ( extbas.asm):04172 * MULTIPLY RADIUS BY SIN/COS VALUE AND RETURN OFFSET IN X 9FA7 9ECF ( extbas.asm):04173 L9FA7 LDX VCF GET RADIUS 9FA9 ECC4 ( extbas.asm):04174 LDD ,U GET SIN/COS TABLE MODIFIER 9FAB 2707 ( extbas.asm):04175 BEQ L9FB4 BRANCH IF = 0 - OFFSET = RADIUS 9FAD 830001 ( extbas.asm):04176 SUBD #1 SUBTR 1 9FB0 8D03 ( extbas.asm):04177 BSR L9FB5 MULT RADIUS BY SIN/COS 9FB2 1F21 ( extbas.asm):04178 TFR Y,X RETURN RESULT IN X REG 9FB4 39 ( extbas.asm):04179 L9FB4 RTS ( extbas.asm):04180 * MULTIPLY (UNSIGNED) TWO 16 BIT NUMBERS TOGETHER - ( extbas.asm):04181 * ENTER WITH ONE NUMBER IN ACCD, THE OTHER IN X ( extbas.asm):04182 * REG. THE 4 BYTE PRODUCT WILL BE STORED IN 4,S-7,S ( extbas.asm):04183 * (Y, U REG ON THE STACK). I.E. (AA AB) X (XH XL) = ( extbas.asm):04184 * 256*AA*XH+16*(AA*XL+AB*XH)+AB*XL. THE 2 BYTE ( extbas.asm):04185 * MULTIPLIER AND MULTIPLICAND ARE TREATED AS A 1 ( extbas.asm):04186 * BYTE INTEGER PART (MSB) WITH A 1 BYTE FRACTIONAL PART (LSB) 9FB5 3476 ( extbas.asm):04187 L9FB5 PSHS U,Y,X,B,A SAVE REGISTERS AND RESERVE STORAGE SPACE ON THE STACK 9FB7 6F64 ( extbas.asm):04188 CLR $04,S RESET OVERFLOW FLAG 9FB9 A663 ( extbas.asm):04189 LDA $03,S = 9FBB 3D ( extbas.asm):04190 MUL = 9FBC ED66 ( extbas.asm):04191 STD $06,S = CALCULATE ACCB*XL, STORE RESULT IN 6,S 9FBE EC61 ( extbas.asm):04192 LDD $01,S * 9FC0 3D ( extbas.asm):04193 MUL * CALCULATE ACCB*XH 9FC1 EB66 ( extbas.asm):04194 ADDB $06,S = 9FC3 8900 ( extbas.asm):04195 ADCA #$00 = 9FC5 ED65 ( extbas.asm):04196 STD $05,S = ADD THE CARRY FROM THE 1ST MUL TO THE RESULT OF THE 2ND MUL 9FC7 E6E4 ( extbas.asm):04197 LDB ,S * 9FC9 A663 ( extbas.asm):04198 LDA $03,S * 9FCB 3D ( extbas.asm):04199 MUL * CALCULATE ACCA*XL 9FCC E365 ( extbas.asm):04200 ADDD $05,S = 9FCE ED65 ( extbas.asm):04201 STD $05,S = ADD RESULT TO TOTAL OF 2 PREVIOUS MULTS 9FD0 2402 ( extbas.asm):04202 BCC L9FD4 BRANCH IF NO OVERFLOW 9FD2 6C64 ( extbas.asm):04203 INC $04,S SET OVERFLOW FLAG (ACCD > $FFFF) 9FD4 A6E4 ( extbas.asm):04204 L9FD4 LDA ,S * 9FD6 E662 ( extbas.asm):04205 LDB $02,S * 9FD8 3D ( extbas.asm):04206 MUL * CALCULATE ACCA*XH 9FD9 E364 ( extbas.asm):04207 ADDD $04,S = 9FDB ED64 ( extbas.asm):04208 STD $04,S = ADD TO PREVIOUS RESULT 9FDD 35F6 ( extbas.asm):04209 PULS A,B,X,Y,U,PC RETURN RESULT IN U,Y 9FDF 7E94A1 ( extbas.asm):04210 L9FDF JMP >L94A1 GO DRAW A LINE FROM (HORBEG,VERBEG) TO (HOREND,VEREND) ( extbas.asm):04211 * CALCULATE START OR END POINT WHICH IS A NUMBER FROM ( extbas.asm):04212 * 0 TO 63 SAVED AS AN OCTANT NUMBER (0-7) AND A SUBARC NUMBER (0-7) 9FE2 5F ( extbas.asm):04213 L9FE2 CLRB DEFAULT VALUE OF ZERO 9FE3 9DA5 ( extbas.asm):04214 JSR GETCCH GET CURRENT INPUT CHAR 9FE5 2711 ( extbas.asm):04215 BEQ L9FF8 BRANCH IF NONE 9FE7 BDB26D ( extbas.asm):04216 JSR SYNCOMMA SYNTAX CHECK FOR COMMA 9FEA BDB141 ( extbas.asm):04217 JSR >LB141 EVALUATE NUMERIC EXPRESSION 9FED 964F ( extbas.asm):04218 LDA FP0EXP GET EXPONENT OF FPA0 9FEF 8B06 ( extbas.asm):04219 ADDA #$06 ADD 6 TO EXPONENT - MULTIPLY EXPONENT BY 64 9FF1 974F ( extbas.asm):04220 STA FP0EXP RESAVE EXPONENT 9FF3 BDB70E ( extbas.asm):04221 JSR >LB70E CONVERT FPA0 TO INTEGER IN ACCB 9FF6 C43F ( extbas.asm):04222 ANDB #$3F MAX VALUE OF 63 9FF8 1F98 ( extbas.asm):04223 L9FF8 TFR B,A SAVE VALUE IN ACCA ALSO 9FFA C407 ( extbas.asm):04224 ANDB #$07 NOW ACCB CONTAINS SUBARC NUMBER 9FFC 44 ( extbas.asm):04225 LSRA * 9FFD 44 ( extbas.asm):04226 LSRA * 9FFE 44 ( extbas.asm):04227 LSRA * DIVIDE ACCA BY EIGHT - OCTANT NUMBER 9FFF 39 ( extbas.asm):04228 RTS 8000 ( equates.asm):00001 EXBAS EQU $8000 A000 ( equates.asm):00002 BASIC EQU $A000 ( equates.asm):00003 *ROMPAK EQU $C000 0008 ( equates.asm):00004 BS EQU 8 BACKSPACE 000D ( equates.asm):00005 CR EQU $D ENTER KEY 001B ( equates.asm):00006 ESC EQU $1B ESCAPE CODE 000A ( equates.asm):00007 LF EQU $A LINE FEED 000C ( equates.asm):00008 FORMF EQU $C FORM FEED 0020 ( equates.asm):00009 SPACE EQU $20 SPACE (BLANK) 003A ( equates.asm):00010 STKBUF EQU 58 STACK BUFFER ROOM 045E ( equates.asm):00011 DEBDEL EQU $45E DEBOUNCE DELAY 00FA ( equates.asm):00012 LBUFMX EQU 250 MAX NUMBER OF CHARS IN A BASIC LINE 00FA ( equates.asm):00013 MAXLIN EQU $FA MAXIMUM MS BYTE OF LINE NUMBER 2600 ( equates.asm):00014 DOSBUF EQU $2600 RAM LOAD LOCATION FOR THE DOS COMMAND 0020 ( equates.asm):00015 DIRLEN EQU 32 NUMBER OF BYTES IN DIRECTORY ENTRY 0100 ( equates.asm):00016 SECLEN EQU 256 LENGTH OF SECTOR IN BYTES 0012 ( equates.asm):00017 SECMAX EQU 18 MAXIMUM NUMBER OF SECTORS PER TRACK 1200 ( equates.asm):00018 TRKLEN EQU SECMAX*SECLEN LENGTH OF TRACK IN BYTES 0023 ( equates.asm):00019 TRKMAX EQU 35 MAX NUMBER OF TRACKS 004A ( equates.asm):00020 FATLEN EQU 6+(TRKMAX-1)*2 FILE ALLOCATION TABLE LENGTH 0044 ( equates.asm):00021 GRANMX EQU (TRKMAX-1)*2 MAXIMUM NUMBER OF GRANULES 0119 ( equates.asm):00022 FCBLEN EQU SECLEN+25 FILE CONTROL BLOCK LENGTH 0010 ( equates.asm):00023 INPFIL EQU $10 INPUT FILE TYPE 0020 ( equates.asm):00024 OUTFIL EQU $20 OUTPUT FILE TYPE 0040 ( equates.asm):00025 RANFIL EQU $40 RANDOM/DIRECT FILE TYPE ( equates.asm):00026 * PSEUDO PSEUDO OPS 0021 ( equates.asm):00027 SKP1 EQU $21 OP CODE OF BRN — SKIP ONE BYTE 008C ( equates.asm):00028 SKP2 EQU $8C OP CODE OF CMPX # - SKIP TWO BYTES 0086 ( equates.asm):00029 SKP1LD EQU $86 OP CODE OF LDA # - SKIP THE NEXT BYTE ( equates.asm):00030 * AND LOAD THE VALUE OF THAT BYTE INTO ACCA — THIS ( equates.asm):00031 * IS USUALLY USED TO LOAD ACCA WITH A NON ZERO VALUE ( equates.asm):00032 * REGISTER ADDRESSES ( equates.asm):00033 *PIA0 EQU $FF00 PERIPHERAL INPUT ADAPTER #0 ( equates.asm):00034 *PIA1 EQU $FF20 PERIPHERAL INPUT ADAPTER #1 ( equates.asm):00035 *DA EQU PIA1+0 DIGITAL/ANALOG CONVERTER ( equates.asm):00036 *DSKREG EQU $FF40 DISK CONTROL REGISTER ( equates.asm):00037 *FDCREG EQU $FF48 1793 CONTROL REGISTER ( equates.asm):00038 *SAMREG EQU $FFC0 SAM CONTROL REGISTER ( equates.asm):00039 ORG 0 00 ( equates.asm):00040 SETDP 0 0000 ( equates.asm):00041 ENDFLG RMB 1 STOP/END FLAG: POSITIVE=STOP, NEG=END 0001 ( equates.asm):00042 CHARAC RMB 1 TERMINATOR FLAG 1 0002 ( equates.asm):00043 ENDCHR RMB 1 TERMINATOR FLAG 2 0003 ( equates.asm):00044 TMPLOC RMB 1 SCRATCH VARIABLE 0004 ( equates.asm):00045 IFCTR RMB 1 IF COUNTER - HOW MANY IF STATEMENTS IN A LINE 0005 ( equates.asm):00046 DIMFLG RMB 1 *DV* ARRAY FLAG 0=EVALUATE, 1=DIMENSIONING 0006 ( equates.asm):00047 VALTYP RMB 1 *DV* *PV TYPE FLAG: 0=NUMERIC, $FF=STRING 0007 ( equates.asm):00048 GARBFL RMB 1 *TV STRING SPACE HOUSEKEEPING FLAG 0008 ( equates.asm):00049 ARYDIS RMB 1 DISABLE ARRAY SEARCH: 00=ALLOW SEARCH 0009 ( equates.asm):00050 INPFLG RMB 1 *TV INPUT FLAG: READ=0, INPUT<>0 000A ( equates.asm):00051 RELFLG RMB 1 *TV RELATIONAL OPERATOR FLAG 000B ( equates.asm):00052 TEMPPT RMB 2 *PV TEMPORARY STRING STACK POINTER 000D ( equates.asm):00053 LASTPT RMB 2 *PV ADDR OF LAST USED STRING STACK ADDRESS 000F ( equates.asm):00054 TEMPTR RMB 2 TEMPORARY POINTER 0011 ( equates.asm):00055 TMPTR1 RMB 2 TEMPORARY DESCRIPTOR STORAGE (STACK SEARCH) ( equates.asm):00056 * ** FLOATING POINT ACCUMULATOR #2 (MANTISSA ONLY) 0013 ( equates.asm):00057 FPA2 RMB 4 FLOATING POINT ACCUMULATOR #2 MANTISSA 0017 ( equates.asm):00058 BOTSTK RMB 2 BOTTOM OF STACK AT LAST CHECK 0019 ( equates.asm):00059 TXTTAB RMB 2 *PV BEGINNING OF BASIC PROGRAM 001B ( equates.asm):00060 VARTAB RMB 2 *PV START OF VARIABLES 001D ( equates.asm):00061 ARYTAB RMB 2 *PV START OF ARRAYS 001F ( equates.asm):00062 ARYEND RMB 2 *PV END OF ARRAYS (+1) 0021 ( equates.asm):00063 FRETOP RMB 2 *PV START OF STRING STORAGE (TOP OF FREE RAM) 0023 ( equates.asm):00064 STRTAB RMB 2 *PV START OF STRING VARIABLES 0025 ( equates.asm):00065 FRESPC RMB 2 UTILITY STRING POINTER 0027 ( equates.asm):00066 MEMSIZ RMB 2 *PV TOP OF STRING SPACE 0029 ( equates.asm):00067 OLDTXT RMB 2 SAVED LINE NUMBER DURING A "STOP" 002B ( equates.asm):00068 BINVAL RMB 2 BINARY VALUE OF A CONVERTED LINE NUMBER 002D ( equates.asm):00069 OLDPTR RMB 2 SAVED INPUT PTR DURING A "STOP" 002F ( equates.asm):00070 TINPTR RMB 2 TEMPORARY INPUT POINTER STORAGE 0031 ( equates.asm):00071 DATTXT RMB 2 *PV 'DATA' STATEMENT LINE NUMBER POINTER 0033 ( equates.asm):00072 DATPTR RMB 2 *PV 'DATA' STATEMENT ADDRESS POINTER 0035 ( equates.asm):00073 DATTMP RMB 2 DATA POINTER FOR 'INPUT' & 'READ' 0037 ( equates.asm):00074 VARNAM RMB 2 *TV TEMP STORAGE FOR A VARIABLE NAME 0039 ( equates.asm):00075 VARPTR RMB 2 *TV POINTER TO A VARIABLE DESCRIPTOR 003B ( equates.asm):00076 VARDES RMB 2 TEMP POINTER TO A VARIABLE DESCRIPTOR 003D ( equates.asm):00077 RELPTR RMB 2 POINTER TO RELATIONAL OPERATOR PROCESSING ROUTINE 003F ( equates.asm):00078 TRELFL RMB 1 TEMPORARY RELATIONAL OPERATOR FLAG BYTE ( equates.asm):00079 * FLOATING POINT ACCUMULATORS #3,4 & 5 ARE MOSTLY ( equates.asm):00080 * USED AS SCRATCH PAD VARIABLES. ( equates.asm):00081 ** FLOATING POINT ACCUMULATOR #3 :PACKED: ($40-$44) 0040 ( equates.asm):00082 V40 RMB 1 0041 ( equates.asm):00083 V41 RMB 1 0042 ( equates.asm):00084 V42 RMB 1 0043 ( equates.asm):00085 V43 RMB 1 0044 ( equates.asm):00086 V44 RMB 1 ( equates.asm):00087 ** FLOATING POINT ACCUMULATOR #4 :PACKED: ($45-$49) 0045 ( equates.asm):00088 V45 RMB 1 0046 ( equates.asm):00089 V46 RMB 1 0047 ( equates.asm):00090 V47 RMB 1 0048 ( equates.asm):00091 V48 RMB 2 ( equates.asm):00092 ** FLOATING POINT ACCUMULATOR #5 :PACKED: ($4A—$4E) 004A ( equates.asm):00093 V4A RMB 1 004B ( equates.asm):00094 V4B RMB 2 004D ( equates.asm):00095 V4D RMB 2 ( equates.asm):00096 ** FLOATING POINT ACCUMULATOR #0 004F ( equates.asm):00097 FP0EXP RMB 1 *PV FLOATING POINT ACCUMULATOR #0 EXPONENT 0050 ( equates.asm):00098 FPA0 RMB 4 *PV FLOATING POINT ACCUMULATOR #0 MANTISSA 0054 ( equates.asm):00099 FP0SGN RMB 1 *PV FLOATING POINT ACCUMULATOR #0 SIGN 0055 ( equates.asm):00100 COEFCT RMB 1 POLYNOMIAL COEFFICIENT COUNTER 0056 ( equates.asm):00101 STRDES RMB 5 TEMPORARY STRING DESCRIPTOR 005B ( equates.asm):00102 FPCARY RMB 1 FLOATING POINT CARRY BYTE ( equates.asm):00103 ** FLOATING POINT ACCUMULATOR #1 005C ( equates.asm):00104 FP1EXP RMB 1 *PV FLOATING POINT ACCUMULATOR #1 EXPONENT 005D ( equates.asm):00105 FPA1 RMB 4 *PV FLOATING POINT ACCUMULATOR #1 MANTISSA 0061 ( equates.asm):00106 FP1SGN RMB 1 *PV FLOATING POINT ACCUMULATOR #1 SIGN 0062 ( equates.asm):00107 RESSGN RMB 1 SIGN OF RESULT OF FLOATING POINT OPERATION 0063 ( equates.asm):00108 FPSBYT RMB 1 FLOATING POINT SUB BYTE (FIFTH BYTE) 0064 ( equates.asm):00109 COEFPT RMB 2 POLYNOMIAL COEFFICIENT POINTER 0066 ( equates.asm):00110 LSTTXT RMB 2 CURRENT LINE POINTER DURING LIST 0068 ( equates.asm):00111 CURLIN RMB 2 *PV CURRENT LINE # OF BASIC PROGRAM, $FFFF = DIRECT 006A ( equates.asm):00112 DEVCFW RMB 1 *TV TAB FIELD WIDTH 006B ( equates.asm):00113 DEVLCF RMB 1 *TV TAB ZONE 006C ( equates.asm):00114 DEVPOS RMB 1 *TV PRINT POSITION 006D ( equates.asm):00115 DEVWID RMB 1 *TV PRINT WIDTH 006E ( equates.asm):00116 PRTDEV RMB 1 *TV PRINT DEVICE: 0=NOT CASSETTE, -1=CASSETTE 006F ( equates.asm):00117 DEVNUM RMB 1 *PV DEVICE NUMBER: -3=DLOAD, -2=PRINTER, ( equates.asm):00118 * -1=CASSETTE, 0=SCREEN, 1-15=DISK 0070 ( equates.asm):00119 CINBFL RMB 1 *PV CONSOLE IN BUFFER FLAG: 00=NOT EMPTY, $FF=EMPTY 0071 ( equates.asm):00120 RSTFLG RMB 1 *PV WARM START FLAG: $55=WARM, OTHER=COLD 0072 ( equates.asm):00121 RSTVEC RMB 2 *PV WARM START VECTOR - JUMP ADDRESS FOR WARM START 0074 ( equates.asm):00122 TOPRAM RMB 2 *PV TOP OF RAM 0076 ( equates.asm):00123 RMB 2 SPARE: UNUSED VARIABLES 0078 ( equates.asm):00124 FILSTA RMB 1 *PV FILE STATUS FLAG: 0=CLOSED, 1=INPUT, 2=OUTPUT 0079 ( equates.asm):00125 CINCTR RMB 1 *PV CONSOLE IN BUFFER CHAR COUNTER 007A ( equates.asm):00126 CINPTR RMB 2 *PV CONSOLE IN BUFFER POINTER 007C ( equates.asm):00127 BLKTYP RMB 1 *TV CASS BLOCK TYPE: 0=HEADER, 1=DATA, $FF=EOF 007D ( equates.asm):00128 BLKLEN RMB 1 *TV CASSETTE BYTE COUNT 007E ( equates.asm):00129 CBUFAD RMB 2 *TV CASSETTE LOAD BUFFER POINTER 0080 ( equates.asm):00130 CCKSUM RMB 1 *TV CASSETTE CHECKSUM BYTE 0081 ( equates.asm):00131 CSRERR RMB 1 *TV ERROR FLAG/CHARACTER COUNT 0082 ( equates.asm):00132 CPULWD RMB 1 *TV PULSE WIDTH COUNT 0083 ( equates.asm):00133 CPERTM RMB 1 *TV BIT COUNTER 0084 ( equates.asm):00134 CBTPHA RMB 1 *TV BIT PHASE FLAG 0085 ( equates.asm):00135 CLSTSN RMB 1 *TV LAST SINE TABLE ENTRY 0086 ( equates.asm):00136 GRBLOK RMB 1 *TV GRAPHIC BLOCK VALUE FOR SET, RESET AND POINT 0087 ( equates.asm):00137 IKEYIM RMB 1 *TV INKEY$ RAM IMAGE 0088 ( equates.asm):00138 CURPOS RMB 2 *PV CURSOR LOCATION 008A ( equates.asm):00139 ZERO RMB 2 *PV DUMMY - THESE TWO BYTES ARE ALWAYS ZERO 008C ( equates.asm):00140 SNDTON RMB 1 *TV TONE VALUE FOR SOUND COMMAND 008D ( equates.asm):00141 SNDDUR RMB 2 *TV DURATION VALUE FOR SOUND COMMAND ( equates.asm):00142 * THESE BYTES ARE MOVED DOWN FROM ROM ( equates.asm):00143 * INIT DESCRIPTION ( equates.asm):00144 * VALUE 008F ( equates.asm):00145 CMPMID RMB 1 18 *PV 1200/2400 HERTZ PARTITION 0090 ( equates.asm):00146 CMP0 RMB 1 24 *PV UPPER LIMIT OF 1200 HERTZ PERIOD 0091 ( equates.asm):00147 CMP1 RMB 1 10 *PV UPPER LIMIT OF 2400 HERTZ PERIOD 0092 ( equates.asm):00148 SYNCLN RMB 2 128 *PV NUMBER OF $55'S TO CASSETTE LEADER 0094 ( equates.asm):00149 BLKCNT RMB 1 11 *PV CURSOR BLINK DELAY 0095 ( equates.asm):00150 LPTBTD RMB 2 88 *PV BAUD RATE CONSTANT (600) 0097 ( equates.asm):00151 LPTLND RMB 2 1 *PV PRINTER CARRIAGE RETURN DELAY 0099 ( equates.asm):00152 LPTCFW RMB 1 16 *PV TAB FIELD WIDTH 009A ( equates.asm):00153 LPTLCF RMB 1 112 *PV LAST TAB ZONE 009B ( equates.asm):00154 LPTWID RMB 1 132 *PV PRINTER WIDTH 009C ( equates.asm):00155 LPTPOS RMB 1 0 *PV LINE PRINTER POSITION 009D ( equates.asm):00156 EXECJP RMB 2 LB4AA *PV JUMP ADDRESS FOR EXEC COMMAND ( equates.asm):00157 ** THIS ROUTINE PICKS UP THE NEXT INPUT CHARACTER FROM ( equates.asm):00158 ** BASIC. THE ADDRESS OF THE NEXT BASIC BYTE TO BE ( equates.asm):00159 ** INTERPRETED IS STORED AT CHARAD. 009F ( equates.asm):00160 GETNCH RMB 6 ( equates.asm):00161 *GETNCH INC 0 WILL CAUSE A 'NEW' & SHUT DOWN ALL FCBS 095D ( equates.asm):00386 DLODFL RMB 1 LOAD FLAG: CAUSE A 'NEW' FOLLOWING A LOAD ERROR 095E ( equates.asm):00387 DMRGFL RMB 1 MERGE FLAG: 0=N0 MERGE, $FF=MERGE 095F ( equates.asm):00388 DUSRVC RMB 20 DISK BASIC USR COMMAND VECTORS ( equates.asm):00389 *** DISK FILE WORK AREA FOR DIRECTORY SEARCH ( equates.asm):00390 * EXISTING FILE 0973 ( equates.asm):00391 V973 RMB 1 SECTOR NUMBER 0974 ( equates.asm):00392 V974 RMB 2 RAM DIRECTORY IMAGE ADDRESS 0976 ( equates.asm):00393 V976 RMB 1 FIRST GRANULE NUMBER ( equates.asm):00394 * UNUSED FILE 0977 ( equates.asm):00395 V977 RMB 1 SECTOR NUMBER 0978 ( equates.asm):00396 V978 RMB 2 RAM DIRECTORY IMAGE ADDRESS 097A ( equates.asm):00397 WFATVL RMB 2 WRITE FAT VALUE: NUMBER OF FREE GRANULES WHICH MUST BE TAKEN ( equates.asm):00398 * FROM THE FAT TO TRIGGER A WRITE FAT TO DISK SEQUENCE 097C ( equates.asm):00399 DFFLEN RMB 2 DIRECT ACCESS FILE RECORD LENGTH 097E ( equates.asm):00400 DR0TRK RMB 4 CURRENT TRACK NUMBER, DRIVES 0,1,2,3 0982 ( equates.asm):00401 NMIFLG RMB 1 NMI FLAG: 0=DON'T VECTOR <>0=YECTOR OUT 0983 ( equates.asm):00402 DNMIVC RMB 2 NMI VECTOR: WHERE TO JUMP FOLLOWING AN NMI ( equates.asm):00403 * INTERRUPT IF THE NMI FLAG IS SET 0985 ( equates.asm):00404 RDYTMR RMB 1 MOTOR TURN OFF TIMER 0986 ( equates.asm):00405 DRGRAM RMB 1 RAM IMAGE OF DSKREG ($FF40) 0987 ( equates.asm):00406 DVERFL RMB 1 VERIFY FLAG: 0=OFF, $FF=ON 0988 ( equates.asm):00407 ATTCTR RMB 1 READ/WRITE ATTEMPT COUNTER: NUMBER OF TIMES THE ( equates.asm):00408 * DISK WILL ATTEMPT TO RETRIEVE OR WRITE DATA ( equates.asm):00409 * BEFORE IT GIVES UP AND ISSUES AN ERROR. 0989 ( equates.asm):00410 DFLBUF RMB SECLEN INITIALIZED TO SECLEN BY DISKBAS ( equates.asm):00411 *RANDOM FILE RESERVED AREA ( equates.asm):00412 *FILE CONTROL BLOCKS AND BUFFERS ( equates.asm):00413 *GRAPHIC PAGE RESERVED AREA ( equates.asm):00414 *BASIC PROGRAM ( equates.asm):00415 *VARIABLE STORAGE AREA ( equates.asm):00416 *ARRAY STORAGE AREA ( equates.asm):00417 * FREE MEMORY ( equates.asm):00418 *STACK ( equates.asm):00419 *STRING SPACE ( equates.asm):00420 *USER PROGRAM RESERVED AREA ( equates.asm):00421 *END OF RAM ( equates.asm):00422 ORG $8000 8000 ( equates.asm):00423 RMB $2000 EXTENDED BASIC ROM A000 ( equates.asm):00424 RMB $2000 COLOR BASIC ROM C000 ( equates.asm):00425 ROMPAK EQU * C000 ( equates.asm):00426 DOSBAS RMB $2000 DISK BASIC ROM/ENHANCED BASIC INIT CODE E000 ( equates.asm):00427 RMB $1F00 ENHANCED BASIC ( equates.asm):00428 * I/O AREA FF00 ( equates.asm):00429 PIA0 RMB 4 PERIPHERAL INTERFACE ADAPTER ONE ( equates.asm):00430 * BIT0 KEYBOARD ROW 1 AND RIGHT JOYSTICK SWITCH 1 ( equates.asm):00431 * BIT1 KEYBOARD ROW 2 AND LEFT JOYSTICK SWITCH 1 ( equates.asm):00432 * BIT2 KEYBOARD ROW 3 AND RIGHT JOYSTICK SWITCH 2 ( equates.asm):00433 * BIT3 KEYBOARD ROW 4 AND LEFT JOYSTICK SWITCH 2 ( equates.asm):00434 * BIT4 KEYBOARD ROW 5 ( equates.asm):00435 * BIT5 KEYBOARD ROW 6 ( equates.asm):00436 * BIT6 KEYBOARD ROW 7 ( equates.asm):00437 * BIT7 JOTSTICK COMPARISON INPUT ( equates.asm):00438 * BIT0 CONTROL OF HSYNC (63.5ps) 0 = IRQ* TO CPU DISABLED ( equates.asm):00439 * INTERRUPT 1 = IRQ* TO CPU ENABLED ( equates.asm):00440 * BIT1 CONTROL OF INTERRUPT 0 = FLAG SET ON FALLING EDGE OF HS ( equates.asm):00441 * POLARITY 1 = FLAG SET ON RISING EDGE OF HS ( equates.asm):00442 * BIT2 NORMALLY 1 0 = CHANGES FF00 TO DATA DIRECTION ( equates.asm):00443 * BIT3 SEL 1 LSB OF TWO ANALOG MUX SELECT LINES ( equates.asm):00444 * BIT4 ALWAYS 1 ( equates.asm):00445 * BIT5 ALWAYS 1 ( equates.asm):00446 * BIT6 NOT USED ( equates.asm):00447 * BIT7 HORIZONTAL SYNC INTERRUPT FLAG ( equates.asm):00448 * BIT0 KEYBOARD COLUMN 1 ( equates.asm):00449 * BIT1 KEYBOARD COLUMN 2 ( equates.asm):00450 * BIT2 KEYBOARD COLUMN 3 ( equates.asm):00451 * BIT3 KEYBOARD COLUMN 4 ( equates.asm):00452 * BIT4 KEYBOARD COLUMN 5 ( equates.asm):00453 * BIT5 KEYBOARD COLUMN 6 ( equates.asm):00454 * BIT6 KEYBOARD COLUMN 7 / RAM SIZE OUTPUT ( equates.asm):00455 * BIT7 KEYBOARD COLUMN 8 ( equates.asm):00456 * BIT0 CONTROL OF VSYNC (16.667ms) 0 = IRQ* TO CPU DISABLED ( equates.asm):00457 * INTERRUPT 1 = IRQ* TO CPU ENABLED ( equates.asm):00458 * BIT1 CONTROL OF INTERRUPT 0 = FLAG SET ON FALLING EDGE OF FS ( equates.asm):00459 * POLARITY 1 = FLAG SET ON RISING EDGE OF FS ( equates.asm):00460 * BIT2 NORMALLY 1 0 = CHANGES FF02 TO DATA DIRECTION ( equates.asm):00461 * BIT3 SEL 2 MSB OF TWO ANALOG MUX SELECT LINES ( equates.asm):00462 * BIT4 ALWAYS 1 ( equates.asm):00463 * BIT5 ALWAYS 1 ( equates.asm):00464 * BIT6 NOT USED ( equates.asm):00465 * BIT7 FIELD SYNC INTERRUPT FLAG FF04 ( equates.asm):00466 RMB 28 PIA0 IMAGES FF20 ( equates.asm):00467 DA EQU * FF20 ( equates.asm):00468 PIA1 RMB 4 PERIPHERAL INTERFACE ADAPTER TWO ( equates.asm):00469 * BIT0 CASSETTE DATA INPUT ( equates.asm):00470 * BIT1 RS-232C DATA OUTPUT ( equates.asm):00471 * BIT2 6 BIT D/A LSB ( equates.asm):00472 * BIT3 6 BIT D/A ( equates.asm):00473 * BIT4 6 BIT D/A ( equates.asm):00474 * BIT5 6 BIT D/A ( equates.asm):00475 * BIT6 6 BIT D/A ( equates.asm):00476 * BIT7 6 BIT D/A MSB ( equates.asm):00477 * BIT0 CONTROL OF CD 0 = FIRQ* TO CPU DISABLED ( equates.asm):00478 * (RS-232C STATUS) 1 = FIRQ* TO CPU ENABLED ( equates.asm):00479 * BIT1 CONTROL OF INTERRUPT 0 = FLAG SET ON FALLING EDGE OF CD ( equates.asm):00480 * POLARITY 1 = FLAG SET ON RISING EDGE OF CD ( equates.asm):00481 * BIT2 NORMALLY 1 0 = CHANGES FF20 TO DATA DIRECTION ( equates.asm):00482 * BIT3 CASSETTE MOTOR CONTROL 0 = OFF 1 = ON ( equates.asm):00483 * BIT4 ALWAYS 1 ( equates.asm):00484 * BIT5 ALWAYS 1 ( equates.asm):00485 * BIT6 NOT USED ( equates.asm):00486 * BIT7 CD INTERRUPT FLAG ( equates.asm):00487 * BIT0 RS-232C DATA INPUT ( equates.asm):00488 * BIT1 SINGLE BIT SOUND OUTPUT ( equates.asm):00489 * BIT2 RAM SIZE INPUT ( equates.asm):00490 * BIT3 RGB MONITOR SENSING INPUT CSS ( equates.asm):00491 * BIT4 VDG CONTROL OUTPUT GM0 & UPPER/LOWER CASE* ( equates.asm):00492 * BIT5 VDG CONTROL OUTPUT GM1 & INVERT ( equates.asm):00493 * BIT6 VDG CONTROL OUTPUT GM2 ( equates.asm):00494 * BIT7 VDG CONTROL OUTPUT A*/G ( equates.asm):00495 * BIT0 CONTROL OF CARTRIDGE 0 = FIRQ* TO CPU DISABLED ( equates.asm):00496 * INTERRUPT 1 = FIRQ* TO CPU ENABLED ( equates.asm):00497 * BIT1 CONTROL OF INTERRUPT 0 = FLAG SET ON FALLING EDGE OF CART* ( equates.asm):00498 * POLARITY 1 = FLAG SET ON RISING EDGE OF CART* ( equates.asm):00499 * BIT2 NORMALLY 1 0 = CHANGES FF22 TO DATA DIRECTION ( equates.asm):00500 * BIT3 SOUND ENABLE ( equates.asm):00501 * BIT4 ALWAYS 1 ( equates.asm):00502 * BIT5 ALWAYS 1 ( equates.asm):00503 * BIT6 NOT USED ( equates.asm):00504 * BIT7 CARTRIDGE INTERRUPT FLAG FF24 ( equates.asm):00505 RMB 28 PIA1 IMAGES FF40 ( equates.asm):00506 PIA2 EQU * FF40 ( equates.asm):00507 DSKREG RMB 1 DISK CONTROL REGISTER ( equates.asm):00508 * BIT0 DRIVE SELECT 0 ( equates.asm):00509 * BIT1 DRIVE SELECT 1 ( equates.asm):00510 * BIT2 DRIVE SELECT 2 ( equates.asm):00511 * BIT3 DRIVE MOTOR ENABLE 0 = MOTORS OFF 1 = MOTORS ON ( equates.asm):00512 * BIT4 WRITE PRECOMPENSATION 0 = NO PRECOMP 1 = PRECOMP ( equates.asm):00513 * BIT5 DENSITY FLAG 0 = SINGLE 1 = DOUBLE ( equates.asm):00514 * BIT6 DRIVE SELECT 3 ( equates.asm):00515 * BIT7 HALT FLAG 0 = DISABLED 1 = ENABLED FF41 ( equates.asm):00516 RMB 7 DSKREG IMAGES ( equates.asm):00517 * FLOPPY DISK CONTROLLER INTERNAL REGISTERS FF48 ( equates.asm):00518 FDCREG RMB 1 STATUS/COMMAND REGISTER ( equates.asm):00519 * COMMANDS TYPE COMMAND CODE ( equates.asm):00520 * I RESTORE $03 ( equates.asm):00521 * I SEEK $17 ( equates.asm):00522 * I STEP $23 ( equates.asm):00523 * I STEP IN $43 ( equates.asm):00524 * I STEP OUT $53 ( equates.asm):00525 * II READ SECTOR $80 ( equates.asm):00526 * II WRITE SECTOR $A0 ( equates.asm):00527 * III READ ADDRESS $C0 ( equates.asm):00528 * III READ TRACK $E4 ( equates.asm):00529 * III WRITE TRACK $F4 ( equates.asm):00530 * IV FORCE INTERRUPT $D0 ( equates.asm):00531 * STATUS BIT TYPE I READ ADDRESS/SECTOR/TRACK WRITE SECTOR/TRACK ( equates.asm):00532 * S0 BUSY BUSY BUSY ( equates.asm):00533 * S1 INDEX DRQ DRQ ( equates.asm):00534 * S2 TRACK 0 LOST DATA LOST DATA ( equates.asm):00535 * S3 CRC ERROR CRC ERROR (EXCEPT TRACK) CRC ERROR (EXCEPT TRACK) ( equates.asm):00536 * S4 SEEK ERROR RNF (EXCEPT TRACK) RNF (EXCEPT TRACK) ( equates.asm):00537 * S5 HEAD LOADED RECORD TYPE (SECTOR ONLY) WRITE FAULT ( equates.asm):00538 * S6 WRITE PROTECT WRITE PROTECT ( equates.asm):00539 * S7 NOT READY NOT READY NOT READY FF49 ( equates.asm):00540 RMB 1 TRACK REGISTER FF4A ( equates.asm):00541 RMB 1 SECTOR REGISTER FF4B ( equates.asm):00542 RMB 1 DATA REGISTER FF4C ( equates.asm):00543 RMB 4 FDCREG IMAGES FF50 ( equates.asm):00544 RMB 16 UNUSED SPACE FF60 ( equates.asm):00545 RMB 1 X COORDINATE FOR X-PAD FF61 ( equates.asm):00546 RMB 1 Y COORDINATE FOR X-PAD FF62 ( equates.asm):00547 RMB 1 STATUS REGISTER FOR X-PAD FF63 ( equates.asm):00548 RMB 5 UNUSED ( equates.asm):00549 * RS-232 PROGRAM PAK FF68 ( equates.asm):00550 RMB 1 READ/WRITE DATA REGISTER FF69 ( equates.asm):00551 RMB 1 STATUS REGISTER FF6A ( equates.asm):00552 RMB 1 COMMAND REGISTER FF6B ( equates.asm):00553 RMB 1 CONTROL REGISTER FF6C ( equates.asm):00554 RMB 4 FF70 ( equates.asm):00555 RMB 13 FF7D ( equates.asm):00556 RMB 1 SOUND/SPEECH CARTRIDGE RESET FF7E ( equates.asm):00557 RMB 1 SOUND/SPEECH CARTRIDGE READ/WRITE FF7F ( equates.asm):00558 RMB 1 MULTI-PAK PROGRAMMING REGISTER FF80 ( equates.asm):00559 RMB 16 RESERVED FOR FUTURE EXPANSION ( equates.asm):00560 ( equates.asm):00561 * COLOR COMPUTER 3 GIME REGISTERS FF90 ( equates.asm):00562 INIT0 RMB 1 INITIALIZATION REGISTER 0 FF91 ( equates.asm):00563 INIT1 RMB 1 INITIALIZATION REGISTER 1 FF92 ( equates.asm):00564 IRQENR RMB 1 IRQ INTERRUPT ENABLE REGISTER FF93 ( equates.asm):00565 FIRQENR RMB 1 FIRQ INTERRUPT ENABLE REGISTER FF94 ( equates.asm):00566 V.TIMER RMB 2 TIMER REGISTER FF96 ( equates.asm):00567 RMB 2 RESERVED FOR FUTURE EXPANSION FF98 ( equates.asm):00568 VIDEOMOD RMB 1 VIDEO MODE REGISTER FF99 ( equates.asm):00569 VIDEORES RMB 1 VIDEO MODE REGISTER FF9A ( equates.asm):00570 V.BORDER RMB 1 BORDER REGISTER FF9B ( equates.asm):00571 RMB 1 RESERVED FF9C ( equates.asm):00572 V.SCROLL RMB 1 VERTICAL SCROLL REGISTER FF9D ( equates.asm):00573 V.OFSET1 RMB 1 VERTICAL OFFSET 1 REGISTER FF9E ( equates.asm):00574 V.OFSET0 RMB 1 VERTICAL OFFSET 0 REGISTER FF9F ( equates.asm):00575 H.OFSET0 RMB 1 HORIZONTAL OFFSET 0 REGISTER FFA0 ( equates.asm):00576 MMUREG RMB 16 MEMORY MANAGEMENT UNIT REGISTERS (6 BITS) FFB0 ( equates.asm):00577 PALETREG RMB 16 COLOR PALETTE REGISTERS (6 BITS) ( equates.asm):00578 FFC0 ( equates.asm):00579 SAMREG EQU * SAM CONTROL REGISTERS FFC0 ( equates.asm):00580 V0CLR RMB 1 CLEAR COCO GRAPHICS MODE V0 FFC1 ( equates.asm):00581 V0SET RMB 1 SET COCO GRAPHICS MODE V0 FFC2 ( equates.asm):00582 V1CLR RMB 1 CLEAR COCO GRAPHICS MODE V1 FFC3 ( equates.asm):00583 V1SET RMB 1 SET COCO GRAPHICS MODE V1 FFC4 ( equates.asm):00584 V2CLR RMB 1 CLEAR COCO GRAPHICS MODE V2 FFC5 ( equates.asm):00585 V2SET RMB 1 SET COCO GRAPHICS MODE V2 FFC6 ( equates.asm):00586 F0CLR RMB 1 CLEAR COCO GRAPHICS OFFSET F0 FFC7 ( equates.asm):00587 F0SET RMB 1 SET COCO GRAPHICS OFFSET F0 FFC8 ( equates.asm):00588 F1CLR RMB 1 CLEAR COCO GRAPHICS OFFSET F1 FFC9 ( equates.asm):00589 F1SET RMB 1 SET COCO GRAPHICS OFFSET F1 FFCA ( equates.asm):00590 F2CLR RMB 1 CLEAR COCO GRAPHICS OFFSET F2 FFCB ( equates.asm):00591 F2SET RMB 1 SET COCO GRAPHICS OFFSET F2 FFCC ( equates.asm):00592 F3CLR RMB 1 CLEAR COCO GRAPHICS OFFSET F3 FFCD ( equates.asm):00593 F3SET RMB 1 SET COCO GRAPHICS OFFSET F3 FFCE ( equates.asm):00594 F4CLR RMB 1 CLEAR COCO GRAPHICS OFFSET F4 FFCF ( equates.asm):00595 F4SET RMB 1 SET COCO GRAPHICS OFFSET F4 FFD0 ( equates.asm):00596 F5CLR RMB 1 CLEAR COCO GRAPHICS OFFSET F5 FFD1 ( equates.asm):00597 F5SET RMB 1 SET COCO GRAPHICS OFFSET F5 FFD2 ( equates.asm):00598 F6CLR RMB 1 CLEAR COCO GRAPHICS OFFSET F6 FFD3 ( equates.asm):00599 F6SET RMB 1 SET COCO GRAPHICS OFFSET F6 FFD4 ( equates.asm):00600 RMB 4 RESERVED FFD8 ( equates.asm):00601 R1CLR RMB 1 CLEAR CPU RATE, (0.89 MHz) FFD9 ( equates.asm):00602 R1SET RMB 1 SET CPU RATE, (1.78 MHz) FFDA ( equates.asm):00603 RMB 4 RESERVED FFDE ( equates.asm):00604 ROMCLR RMB 1 ROM DISABLED FFDF ( equates.asm):00605 ROMSET RMB 1 ROM ENABLED FFE0 ( equates.asm):00606 RMB 18 RESERVED FOR FUTURE MPU ENHANCEMENTS ( equates.asm):00607 * INTERRUPT VECTORS FFF2 ( equates.asm):00608 SWI3 RMB 2 FFF4 ( equates.asm):00609 SWI2 RMB 2 FFF6 ( equates.asm):00610 FIRQ RMB 2 FFF8 ( equates.asm):00611 IRQ RMB 2 FFFA ( equates.asm):00612 SWI RMB 2 FFFC ( equates.asm):00613 NMI RMB 2 FFFE ( equates.asm):00614 RESETV RMB 2 ( bas.asm):00001 * Color BASIC 1.3 ( bas.asm):00002 * Copied from the PDF version of Color BASIC Unravelled. ( bas.asm):00003 * Fixed up to assemble in Mamou ( bas.asm):00004 * ( bas.asm):00005 * Revision History ( bas.asm):00006 * ( bas.asm):00007 * 04/04/2009 r21 Color BASIC 1.3 (match ROM) ( bas.asm):00008 * 04/03/2009 r18 Color BASIC 1.2 (match ROM) ( bas.asm):00009 * ( bas.asm):00010 *# $Id: $ ( bas.asm):00011 * ( bas.asm):00012 ORG $A000 A000 A1CB ( bas.asm):00013 POLCAT FDB KEYIN GET A KEYSTROKE A002 A282 ( bas.asm):00014 CHROUT FDB PUTCHR OUTPUT A CHARACTER A004 A77C ( bas.asm):00015 CSRDON FDB CASON TURN ON CASSETTE MOTOR, START READING A006 A70B ( bas.asm):00016 BLKIN FDB GETBLK READ A BLOCK FROM CASSETTE A008 A7F4 ( bas.asm):00017 BLKOUT FDB SNDBLK WRITE A BLOCK TO CASSETTE A00A A9DE ( bas.asm):00018 JOYIN FDB GETJOY READ JOYSTICKS A00C A7D8 ( bas.asm):00019 WRTLDR FDB WRLDR TURN ON MOTOR AND WRITE $55’S TO CASSETTE ( bas.asm):00020 * A00E 10CE03D7 ( bas.asm):00021 LA00E LDS #LINBUF+LBUFMX+1 SET STACK TO TOP OF LINE INPUT BUFFER A012 8637 ( bas.asm):00022 LDA #$37 * A014 B7FF23 ( bas.asm):00023 STA PIA1+3 * ENABLE 63.5 MICROSECOND INTERRUPT A017 9671 ( bas.asm):00024 LDA RSTFLG GET WARM START FLAG A019 8155 ( bas.asm):00025 CMPA #$55 IS IT A WARM START? A01B 2657 ( bas.asm):00026 BNE BACDST NO - D0 A COLD START A01D 9E72 ( bas.asm):00027 LDX RSTVEC WARM START VECTOR A01F A684 ( bas.asm):00028 LDA ,X GET FIRST BYTE OF WARM START ADDR A021 8112 ( bas.asm):00029 CMPA #$12 IS IT NOP? A023 264F ( bas.asm):00030 BNE BACDST NO - DO A COLD START A025 6E84 ( bas.asm):00031 JMP ,X YES, G0 THERE A027 318CE4 ( bas.asm):00032 RESVEC LEAY LA928 CLEAR SCREEN A080 6F80 ( bas.asm):00076 CLR ,X+ CLEAR 1ST BYTE OF BASIC PROGRAM A082 9F19 ( bas.asm):00077 STX TXTTAB BEGINNING OF BASIC PROGRAM A084 A602 ( bas.asm):00078 LA084 LDA 2,X LOOK FOR END OF MEMORY A086 43 ( bas.asm):00079 COMA * COMPLEMENT IT AND PUT IT BACK A087 A702 ( bas.asm):00080 STA 2,X * INTO SYSTEM MEMORY A089 A102 ( bas.asm):00081 CMPA 2,X IS IT RAM? A08B 2606 ( bas.asm):00082 BNE LA093 BRANCH IF NOT (ROM, BAD RAM OR NO RAM) A08D 3001 ( bas.asm):00083 LEAX 1,X MOVE POINTER UP ONE A08F 6301 ( bas.asm):00084 COM 1,X RE-COMPLEMENT TO RESTORE BYTE A091 20F1 ( bas.asm):00085 BRA LA084 KEEP LOOKING FOR END OF RAM A093 9F74 ( bas.asm):00086 LA093 STX TOPRAM SAVE ABSOLUTE TOP OF RAM A095 9F27 ( bas.asm):00087 STX MEMSIZ SAVE TOP OF STRING SPACE A097 9F23 ( bas.asm):00088 STX STRTAB SAVE START OF STRING VARIABLES A099 3089FF38 ( bas.asm):00089 LEAX -200,X CLEAR 200 - DEFAULT STRING SPACE TO 200 BYTES A09D 9F21 ( bas.asm):00090 STX FRETOP SAVE START OF STRING SPACE A09F 1F14 ( bas.asm):00091 TFR X,S PUT STACK THERE A0A1 8EA10D ( bas.asm):00092 LDX #LA10D POINT X TO ROM SOURCE DATA A0A4 CE008F ( bas.asm):00093 LDU #CMPMID POINT U TO RAM DESTINATION A0A7 C61C ( bas.asm):00094 LDB #28 MOVE 28 BYTES A0A9 BDA59A ( bas.asm):00095 JSR >LA59A MOVE 28 BYTES FROM ROM TO RAM A0AC CE010C ( bas.asm):00096 LDU #IRQVEC POINT U TO NEXT RAM DESTINATION A0AF C61E ( bas.asm):00097 LDB #30 MOVE 30 MORE BYTES A0B1 BDA59A ( bas.asm):00098 JSR >LA59A MOVE 30 BYTES FROM ROM TO RAM A0B4 AE14 ( bas.asm):00099 LDX -12,X POINT X TO SYNTAX ERROR ADDRESS A0B6 AF43 ( bas.asm):00100 LA0B6 STX 3,U * SET EXBAS COMMAND INTERPRETATION A0B8 AF48 ( bas.asm):00101 STX 8,U * HANDLERS TO SYNTAX ERROR A0BA 8E015E ( bas.asm):00102 LDX #RVEC0 POINT X TO START OF RAM VECTORS A0BD CC394B ( bas.asm):00103 LDD #$394B SET UP TO SAVE 75 RTS’ A0C0 A780 ( bas.asm):00104 LA0C0 STA ,X+ FILL THE RAM VECTORS WITH RTS’ A0C2 5A ( bas.asm):00105 DECB * DECREMENT COUNTER AND A0C3 26FB ( bas.asm):00106 BNE LA0C0 * BRANCH IF NOT DONE A0C5 B702D9 ( bas.asm):00107 STA LINHDR-1 PUT RTS IN LINHDR-1 A0C8 BDAD19 ( bas.asm):00108 JSR >LAD19 G0 DO A ‘NEW’ A0CB 8E4558 ( bas.asm):00109 LDX #$4558 ASCII ‘EX’ (FIRST TWO LETTERS OF ‘EXTENDED’) A0CE BC8000 ( bas.asm):00110 LA0CE CMPX EXBAS SEE IF EXTENDED ROM IS THERE A0D1 1027DF2D ( bas.asm):00111 LBEQ EXBAS+2 IF IT IS, BRANCH TO IT A0D5 1CAF ( bas.asm):00112 ANDCC #$AF ENABLE IRQ, FIRQ A0D7 8EA146 ( bas.asm):00113 LDX #LA147-1 POINT X TO COLOR BASIC COPYRIGHT MESSAGE A0DA BDB99C ( bas.asm):00114 JSR >LB99C PRINT ‘COLOR BASIC’ A0DD 8EA0E8 ( bas.asm):00115 LDX #BAWMST WARM START ADDRESS A0E0 9F72 ( bas.asm):00116 STX RSTVEC SAVE IT A0E2 8655 ( bas.asm):00117 LA0E2 LDA #$55 WARM START FLAG A0E4 9771 ( bas.asm):00118 STA RSTFLG SAVE IT A0E6 200B ( bas.asm):00119 BRA LA0F3 GO TO BASIC’S MAIN LOOP A0E8 12 ( bas.asm):00120 BAWMST NOP NOP REQ’D FOR WARM START A0E9 0F6F ( bas.asm):00121 CLR DEVNUM SET DEVICE NUMBER TO SCREEN A0EB BDAD33 ( bas.asm):00122 JSR >LAD33 DO PART OF A NEW A0EE 1CAF ( bas.asm):00123 ANDCC #$AF ENABLE IRQ,FIRQ A0F0 BDA928 ( bas.asm):00124 JSR >LA928 CLEAR SCREEN A0F3 7EAC73 ( bas.asm):00125 LA0F3 JMP >LAC73 GO TO MAIN LOOP OF BASIC ( bas.asm):00126 * ( bas.asm):00127 * FIRQ SERVICE ROUTINE A0F6 7DFF23 ( bas.asm):00128 BFRQSV TST PIA1+3 CARTRIDGE INTERRUPT? A0F9 2B01 ( bas.asm):00129 BMI LA0FC YES A0FB 3B ( bas.asm):00130 RTI A0FC BDA7D1 ( bas.asm):00131 LA0FC JSR >LA7D1 DELAY FOR A WHILE A0FF BDA7D1 ( bas.asm):00132 JSR >LA7D1 KEEP DELAYING A102 318C03 ( bas.asm):00133 LA102 LEAY LA02A GO DO INITIALIZATION A108 0F71 ( bas.asm):00135 LA108 CLR RSTFLG CLEAR WARM START FLAG A10A 7EC000 ( bas.asm):00136 JMP >ROMPAK JUMP TO EXTERNAL ROM PACK ( bas.asm):00137 * ( bas.asm):00138 * THESE BYTES ARE MOVED TO ADDRESSES $8F - $AA THE DIRECT PAGE A10D 12 ( bas.asm):00139 LA10D FCB 18 MID BAND PARTITION OF 1200/2400 HERTZ PERIOD A10E 18 ( bas.asm):00140 FCB 24 UPPER LIMIT OF 1200 HERTZ PERIOD A10F 0A ( bas.asm):00141 FCB 10 UPPER LIMIT OF 2400 HERTZ PERIOD A110 0080 ( bas.asm):00142 FDB 128 NUMBER OF 55’S TO CASSETTE LEADER A112 0B ( bas.asm):00143 FCB 11 CURSOR BLINK DELAY A113 0058 ( bas.asm):00144 FDB 88 CONSTANT FOR 600 BAUD VER 1.2 & UP A115 0001 ( bas.asm):00145 FDB 1 PRINTER CARRIAGE RETURN DELAY A117 10 ( bas.asm):00146 FCB 16 TAB FIELD WIDTH A118 70 ( bas.asm):00147 FCB 112 LAST TAB ZONE A119 84 ( bas.asm):00148 FCB 132 PRINTER WIDTH A11A 00 ( bas.asm):00149 FCB 0 LINE PRINTER POSITION A11B B44A ( bas.asm):00150 FDB LB44A ARGUMENT OF EXEC COMMAND - SET TO ‘FC’ ERROR ( bas.asm):00151 * LINE INPUT ROUTINE A11D 0CA7 ( bas.asm):00152 INC CHARAD+1 A11F 2602 ( bas.asm):00153 BNE LA123 A121 0CA6 ( bas.asm):00154 INC CHARAD A123 B60000 ( bas.asm):00155 LA123 LDA >0000 A126 7EAA1A ( bas.asm):00156 JMP >BROMHK ( bas.asm):00157 * ( bas.asm):00158 * THESE BYTES ARE MOVED TO ADDRESSES $10C-$129 A129 7EA9B3 ( bas.asm):00159 JMP >BIRQSV IRQ SERVICE A12C 7EA0F6 ( bas.asm):00160 JMP >BFRQSV FIRQ SERVICE A12F 7EB44A ( bas.asm):00161 JMP >LB44A USR ADDRESS FOR 8K BASIC (INITIALIZED TO ‘FC’ ERROR) A132 80 ( bas.asm):00162 FCB $80 *RANDOM SEED A133 4FC7 ( bas.asm):00163 FDB $4FC7 *RANDON SEED OF MANTISSA A135 5259 ( bas.asm):00164 FDB $5259 *.811635157 A137 FF ( bas.asm):00165 FCB $FF UPPER CASE/LOWER CASE FLAG (STARTS SET TO UPPER) A138 045E ( bas.asm):00166 FDB DEBDEL KEYBOARD DEBOUNCE DELAY A13A 7EB277 ( bas.asm):00167 JMP >LB277 DISPATCH FOR EXPONENTIATION (INITIALIZED TO SYNTAX ERROR) ( bas.asm):00168 * BASIC COMMAND INTERPRETATION TABLE ROM IMAGE A13D 35 ( bas.asm):00169 LA13D FCB 53 53 BASIC COMMANDS A13E AA66 ( bas.asm):00170 LA13E FDB LAA66 POINTS TO RESERVED WORDS A140 AB67 ( bas.asm):00171 LA140 FDB LAB67 POINTS TO JUMP TABLE FOR COMMANDS A142 14 ( bas.asm):00172 LA142 FCB 20 20 BASIC SECONDARY COMMANDS A143 AB1A ( bas.asm):00173 LA143 FDB LAB1A POINTS TO SECONDARY FUNCTION RESERVED WORDS A145 AA29 ( bas.asm):00174 LA145 FDB LAA29 POINTS TO SECONDARY FUNCTION JUMP TABLE ( bas.asm):00175 * COPYRIGHT MESSAGES A147 434F4C4F52204241 ( bas.asm):00176 LA147 FCC 'COLOR BASIC ' 53494320 A153 31 ( bas.asm):00177 FCB '1' A154 2E ( bas.asm):00178 FCC '.' A155 33 ( bas.asm):00179 FCB '3' A156 0D ( bas.asm):00180 LA156 FCB CR A157 2843292031393832 ( bas.asm):00181 LA157 FCC '(C) 1982 TANDY' 2054414E4459 A165 00 ( bas.asm):00182 LA165 FCB $00 A166 4D4943524F534F46 ( bas.asm):00183 LA166 FCC 'MICROSOFT' 54 A16F 0D00 ( bas.asm):00184 LA16F FCB CR,$00 A171 8D03 ( bas.asm):00185 LA171 BSR LA176 GET A CHARACTER FROM CONSOLE IN A173 847F ( bas.asm):00186 ANDA #$7F MASK OFF BIT 7 A175 39 ( bas.asm):00187 RTS ( bas.asm):00188 * CONSOLE IN A176 BD016A ( bas.asm):00189 LA176 JSR >RVEC4 HOOK INTO RAM A179 0F70 ( bas.asm):00190 CLR CINBFL RESET CONSOLE IN BUFFER FLAG = FULL A17B 0D6F ( bas.asm):00191 LA17B TST DEVNUM CHECK DEVICE NUMBER A17D 2732 ( bas.asm):00192 BEQ LA1B1 G0 DO CURSOR AND GET A KEY IF SCREEN MODE A17F 0D79 ( bas.asm):00193 TST CINCTR TEST CHARACTER COUNTER A181 2603 ( bas.asm):00194 BNE LA186 NOT EMPTY - READ IN SOME CASSETTE DATA A183 0370 ( bas.asm):00195 COM CINBFL SET TO $FF: CONSOLE IN BUFFER EMPTY A185 39 ( bas.asm):00196 LA185 RTS ( bas.asm):00197 * A186 3474 ( bas.asm):00198 LA186 PSHS U,Y,X,B SAVE REGISTERS A188 9E7A ( bas.asm):00199 LDX CINPTR PICK UP BUFFER POINTER A18A A680 ( bas.asm):00200 LDA ,X+ GET NEXT CHAR A18C 3402 ( bas.asm):00201 PSHS A SAVE CHAR ON STACK A18E 9F7A ( bas.asm):00202 STX CINPTR SAVE NEW BUFFER POINTER A190 0A79 ( bas.asm):00203 LA190 DEC CINCTR DECR CHAR COUNT A192 2603 ( bas.asm):00204 BNE LA197 RETURN IF BUFFER NOT EMPTY A194 BDA635 ( bas.asm):00205 JSR >LA635 GO READ TAPE A197 35F6 ( bas.asm):00206 LA197 PULS A,B,X,Y,U,PC RESTORE REGISTERS ( bas.asm):00207 * A199 0A94 ( bas.asm):00208 LA199 DEC BLKCNT CURSOR BLINK DELAY A19B 260E ( bas.asm):00209 BNE LA1AB NOT TIME FOR NEW COLOR A19D C60B ( bas.asm):00210 LDB #11 * A19F D794 ( bas.asm):00211 STB BLKCNT *RESET DELAY COUNTER A1A1 9E88 ( bas.asm):00212 LDX CURPOS GET CURSOR POSITION A1A3 A684 ( bas.asm):00213 LDA ,X GET CURRENT CURSOR CHAR A1A5 8B10 ( bas.asm):00214 ADDA #$10 BUMP TO NEXT COLOR A1A7 8A8F ( bas.asm):00215 ORA #$8F MAKE SURE IT’S A SOLID GRAPHICS BLOCK A1A9 A784 ( bas.asm):00216 STA ,X STORE TO SCREEN A1AB 8E045E ( bas.asm):00217 LA1AB LDX #DEBDEL CURSOR BLINK DELAY A1AE 7EA7D3 ( bas.asm):00218 LA1AE JMP >LA7D3 DELAY WHILE X DECREMENTS TO ZERO ( bas.asm):00219 * BLINK CURSOR WHILE WAITING FOR A KEYSTROKE A1B1 3414 ( bas.asm):00220 LA1B1 PSHS X,B SAVE REGISTERS A1B3 8DE4 ( bas.asm):00221 LA1B3 BSR LA199 GO DO CURSOR A1B5 8D14 ( bas.asm):00222 BSR KEYIN GO CHECK KEYBOARD A1B7 27FA ( bas.asm):00223 BEQ LA1B3 LOOP IF NO KEY DOWN A1B9 C660 ( bas.asm):00224 LDB #$60 BLANK A1BB E79F0088 ( bas.asm):00225 STB [CURPOS] BLANK CURRENT CURSOR CHAR ON SCREEN A1BF 3594 ( bas.asm):00226 LA1BF PULS B,X,PC ( bas.asm):00227 * ( bas.asm):00228 * THIS ROUTINE GETS A KEYSTROKE FROM THE KEYBOARD IF A KEY ( bas.asm):00229 * IS DOWN. IT RETURNS ZERO TRUE IF THERE WAS NO KEY DOWN. ( bas.asm):00230 * A1C1 7FFF02 ( bas.asm):00231 LA1C1 CLR PIA0+2 CLEAR COLUMN STROBE A1C4 B6FF00 ( bas.asm):00232 LDA PIA0 READ KEY ROWS A1C7 43 ( bas.asm):00233 COMA COMPLEMENT ROW DATA A1C8 48 ( bas.asm):00234 ASLA SHIFT OFF JOYSTICK DATA A1C9 2779 ( bas.asm):00235 BEQ LA244 RETURN IF NO KEYS OR FIRE BUTTONS DOWN A1CB 3454 ( bas.asm):00236 KEYIN PSHS U,X,B SAVE REGISTERS A1CD CEFF00 ( bas.asm):00237 LDU #PIA0 POINT U TO PIA0 A1D0 8E0152 ( bas.asm):00238 LDX #KEYBUF POINT X TO KEYBOARD MEMORY BUFFER A1D3 4F ( bas.asm):00239 CLRA * CLEAR CARRY FLAG, SET COLUMN COUNTER (ACCA) A1D4 4A ( bas.asm):00240 DECA * TO $FF A1D5 3412 ( bas.asm):00241 PSHS X,A SAVE COLUMN CTR & 2 BLANK (X REG) ON STACK A1D7 A742 ( bas.asm):00242 STA 2,U INITIALIZE COLUMN STROBE TO $FF A1D9 6942 ( bas.asm):00243 LA1D9 ROL 2,U * ROTATE COLUMN STROBE DATA LEFT 1 BIT, CARRY A1DB 2443 ( bas.asm):00244 BCC LA220 * INTO BIT 0 - BRANCH IF 8 SHIFTS DONE A1DD 6C60 ( bas.asm):00245 INC 0,S INCREMENT COLUMN COUNTER A1DF 8D59 ( bas.asm):00246 BSR LA23A READ KEYBOARD ROW DATA A1E1 A761 ( bas.asm):00247 STA 1,S TEMP STORE KEY DATA A1E3 A884 ( bas.asm):00248 EORA ,X SET ANY BIT WHERE A KEY HAS MOVED A1E5 A484 ( bas.asm):00249 ANDA ,X ACCA=0 IF NO NEW KEY DOWN, <70 IF KEY WAS RELEASED A1E7 E661 ( bas.asm):00250 LDB 1,S GET NEW KEY DATA A1E9 E780 ( bas.asm):00251 STB ,X+ STORE IT IN KEY MEMORY A1EB 4D ( bas.asm):00252 TSTA WAS A NEW KEY DOWN? A1EC 27EB ( bas.asm):00253 BEQ LA1D9 NO-CHECK ANOTHER COLUMN A1EE E642 ( bas.asm):00254 LDB 2,U * GET COLUMN STROBE DATA AND A1F0 E762 ( bas.asm):00255 STB 2,S * TEMP STORE IT ON THE STACK ( bas.asm):00256 * THIS ROUTINE CONVERTS THE KEY DEPRESSION INTO A NUMBER ( bas.asm):00257 * FROM 0-50 IN ACCB CORRESPONDING TO THE KEY THAT WAS DOWN A1F2 C6F8 ( bas.asm):00258 LDB #$F8 TO MAKE SURE ACCB=0 AFTER FIRST ADDB #8 A1F4 CB08 ( bas.asm):00259 LA1F4 ADDB #$08 ADD 8 FOR EACH ROW OF KEYBOARD A1F6 44 ( bas.asm):00260 LSRA ACCA HAS THE ROW NUMBER OF THIS KEY - ADD 8 FOR EACH ROW A1F7 24FB ( bas.asm):00261 BCC LA1F4 GO ON UNTIL A ZERO APPEARS IN THE CARRY FLAG A1F9 EB60 ( bas.asm):00262 ADDB 0,S ADD IN THE COLUMN NUMBER ( bas.asm):00263 * NOW CONVERT THE VALUE IN ACCB INTO ASCII A1FB 2748 ( bas.asm):00264 BEQ LA245 THE ‘AT SIGN’ KEY WAS DOWN A1FD C11A ( bas.asm):00265 CMPB #26 WAS IT A LETTER? A1FF 2246 ( bas.asm):00266 BHI LA247 NO A201 CA40 ( bas.asm):00267 ORB #$40 YES, CONVERT TO UPPER CASE ASCII A203 8D29 ( bas.asm):00268 BSR LA22E CHECK FOR THE SHIFT KEY A205 BA011A ( bas.asm):00269 ORA CASFLG * ‘OR’ IN THE CASE FLAG & BRANCH IF IN UPPER A208 2602 ( bas.asm):00270 BNE LA20C * CASE MODE OR SHIFT KEY DOWN A20A CA20 ( bas.asm):00271 ORB #$20 CONVERT TO LOWER CASE A20C E760 ( bas.asm):00272 LA20C STB 0,S TEMP STORE ASCII VALUE A20E BE011B ( bas.asm):00273 LDX DEBVAL GET KEYBOARD DEBOUNCE A211 8D9B ( bas.asm):00274 BSR LA1AE A213 C6FF ( bas.asm):00275 LDB #$FF SET COLUMN STROBE TO ALL ONES (NO A215 8D21 ( bas.asm):00276 BSR LA238 STROBE) AND READ KEYBOARD A217 4C ( bas.asm):00277 INCA = INCR ROW DATA, ACCA NOW 0 IF NO JOYSTICK A218 2606 ( bas.asm):00278 BNE LA220 = BUTTON DOWN. BRANCH IF JOYSTICK BUTTON DOWN A21A E662 ( bas.asm):00279 LA21A LDB 2,S GET COLUMN STROBE DATA A21C 8D1A ( bas.asm):00280 BSR LA238 READ A KEY A21E A161 ( bas.asm):00281 CMPA 1,S IS IT THE SAME KEY AS BEFORE DEBOUNCE? A220 3512 ( bas.asm):00282 LA220 PULS A,X REMOVE TEMP SLOTS FROM THE STACK AND RECOVER ( bas.asm):00283 * THE ASCII VALUE OF THE KEY A222 2607 ( bas.asm):00284 BNE LA22B NOT THE SAME KEY OR JOYSTICK BUTTON A224 8112 ( bas.asm):00285 CMPA #$12 IS SHIFT ZERO DOWN? A226 2604 ( bas.asm):00286 BNE LA22C NO A228 73011A ( bas.asm):00287 COM CASFLG YES, TOGGLE UPPER CASE/LOWER CASE FLAG A22B 4F ( bas.asm):00288 LA22B CLRA SET ZERO FLAG TO INDICATE NO NEW KEY DOWN A22C 35D4 ( bas.asm):00289 LA22C PULS B,X,U,PC RESTORE REGISTERS ( bas.asm):00290 * TEST FOR THE SHIFT KEY A22E 867F ( bas.asm):00291 LA22E LDA #$7F COLUMN STROBE A230 A742 ( bas.asm):00292 STA 2,U STORE TO PlA A232 A6C4 ( bas.asm):00293 LDA ,U READ KEY DATA A234 43 ( bas.asm):00294 COMA * A235 8440 ( bas.asm):00295 ANDA #$40 * SET BIT 6 IF SHIFT KEY DOWN A237 39 ( bas.asm):00296 RTS RETURN ( bas.asm):00297 * READ THE KEYBOARD A238 E742 ( bas.asm):00298 LA238 STB 2,U SAVE NEW COLUMN STROBE VALUE A23A A6C4 ( bas.asm):00299 LA23A LDA ,U READ PIA0, PORT A TO SEE IF KEY IS DOWN ( bas.asm):00300 * A BIT WILL BE ZERO IF ONE IS A23C 8A80 ( bas.asm):00301 ORA #$80 MASK OFF THE JOYSTICK COMPARATOR INPUT A23E 6D42 ( bas.asm):00302 TST $02,U ARE WE STROBING COLUMN 7? A240 2B02 ( bas.asm):00303 BMI LA244 NO A242 8AC0 ( bas.asm):00304 ORA #$C0 YES, FORCE ROW 6 TO BE HIGH - THIS WILL CAUSE ( bas.asm):00305 * THE SHIFT KEY TO BE IGNORED A244 39 ( bas.asm):00306 LA244 RTS RETURN A245 C633 ( bas.asm):00307 LA245 LDB #51 CODE FOR ‘AT SIGN’ A247 8EA238 ( bas.asm):00308 LA247 LDX #CONTAB-$36 POINT X TO CONTROL CODE TABLE A24A C121 ( bas.asm):00309 CMPB #33 KEY NUMBER <33? A24C 2516 ( bas.asm):00310 BLO LA264 YES (ARROW KEYS, SPACE BAR, ZERO) A24E 8EA21A ( bas.asm):00311 LDX #CONTAB-$54 POINT X TO MIDDLE OF CONTROL TABLE A251 C130 ( bas.asm):00312 CMPB #48 KEY NUMBER >48? A253 240F ( bas.asm):00313 BHS LA264 YES (ENTER,CLEAR,BREAK,AT SIGN) A255 8DD7 ( bas.asm):00314 BSR LA22E CHECK SHIFT KEY (ACCA WILL CONTAIN STATUS) A257 C12B ( bas.asm):00315 CMPB #43 IS KEY A NUMBER, COLON OR SEMICOLON? A259 2302 ( bas.asm):00316 BLS LA25D YES A25B 8840 ( bas.asm):00317 EORA #$40 TOGGLE BIT 6 OF ACCA WHICH CONTAINS THE SHIFT DATA ( bas.asm):00318 * ONLY FOR SLASH,HYPHEN,PERIOD,COMMA A25D 4D ( bas.asm):00319 LA25D TSTA SHIFT KEY DOWN? A25E 26AC ( bas.asm):00320 BNE LA20C YES A260 CB10 ( bas.asm):00321 ADDB #$10 NO, ADD IN ASCII OFFSET CORRECTION A262 20A8 ( bas.asm):00322 BRA LA20C GO CHECK FOR DEBOUNCE A264 58 ( bas.asm):00323 LA264 ASLB MULT ACCB BY 2 - THERE ARE 2 ENTRIES IN CONTROL ( bas.asm):00324 * TABLE FOR EACH KEY - ONE SHIFTED, ONE NOT A265 8DC7 ( bas.asm):00325 BSR LA22E CHECK SHIFT KEY A267 2701 ( bas.asm):00326 BEQ LA26A NOT DOWN A269 5C ( bas.asm):00327 INCB ADD ONE TO GET THE SHIFTED VALUE A26A E685 ( bas.asm):00328 LA26A LDB B,X GET ASCII CODE FROM CONTROL TABLE A26C 209E ( bas.asm):00329 BRA LA20C GO CHECK DEBOUNCE ( bas.asm):00330 * ( bas.asm):00331 * ( bas.asm):00332 * CONTROL TABLE UNSHIFTED, SHIFTED VALUES A26E 5E5F ( bas.asm):00333 CONTAB FCB $5E,$5F UP ARROW A270 0A5B ( bas.asm):00334 FCB $0A,$5B DOWN ARROW A272 0815 ( bas.asm):00335 FCB $08,$15 RIGHT ARROW A274 095D ( bas.asm):00336 FCB $09,$5D LEFT ARROW A276 2020 ( bas.asm):00337 FCB $20,$20 SPACE BAR A278 3012 ( bas.asm):00338 FCB $30,$12 ZERO A27A 0D0D ( bas.asm):00339 FCB $0D,$0D ENTER A27C 0C5C ( bas.asm):00340 FCB $0C,$5C CLEAR A27E 0303 ( bas.asm):00341 FCB $03,$03 BREAK A280 4013 ( bas.asm):00342 FCB $40,$13 AT SIGN ( bas.asm):00343 * CONSOLE OUT A282 BD0167 ( bas.asm):00344 PUTCHR JSR >RVEC3 HOOK INTO RAM A285 3404 ( bas.asm):00345 PSHS B SAVE ACCB A287 D66F ( bas.asm):00346 LDB DEVNUM GET DEVICE NUMBER A289 5C ( bas.asm):00347 INCB SET FLAGS A28A 3504 ( bas.asm):00348 PULS B RESTORE ACCB A28C 2B31 ( bas.asm):00349 BMI LA2BF SEND TO LINE PRINTER A28E 267A ( bas.asm):00350 BNE LA30A SEND TO SCREEN ( bas.asm):00351 * SEND TO CASSETTE A290 3416 ( bas.asm):00352 PSHS X,B,A RESTORE REGISTERS A292 D678 ( bas.asm):00353 LDB FILSTA GET FILE STATUS A294 5A ( bas.asm):00354 DECB INPUT FILE? A295 270F ( bas.asm):00355 BEQ LA2A6 YES A297 D679 ( bas.asm):00356 LDB CINCTR TEMP CHAR CTR A299 5C ( bas.asm):00357 INCB IS THE BUFFER FULL A29A 2602 ( bas.asm):00358 BNE LA29E NO A29C 8D0A ( bas.asm):00359 BSR LA2A8 YES, WRITE DATA BLOCK TO TAPE A29E 9E7A ( bas.asm):00360 LA29E LDX CINPTR GET BUFFER POINTER A2A0 A780 ( bas.asm):00361 STA ,X+ PUT CHAR IN CASSETTE BUFFER A2A2 9F7A ( bas.asm):00362 STX CINPTR STORE NEW BUFFER POINTER A2A4 0C79 ( bas.asm):00363 INC CINCTR INCR BYTE COUNT A2A6 3596 ( bas.asm):00364 LA2A6 PULS A,B,X,PC ( bas.asm):00365 * WRITE A BLOCK OF DATA TO TAPE A2A8 C601 ( bas.asm):00366 LA2A8 LDB #1 DATA BLOCK TYPE - NOT A HEADER BLOCK A2AA D77C ( bas.asm):00367 LA2AA STB BLKTYP BLOCK NUMBER A2AC 8E01DA ( bas.asm):00368 LDX #CASBUF CASSETTE BUFFER A2AF 9F7E ( bas.asm):00369 STX CBUFAD STARTING ADDRESS A2B1 D679 ( bas.asm):00370 LDB CINCTR GET NUMBER OF BYTES A2B3 D77D ( bas.asm):00371 STB BLKLEN BYTE COUNT A2B5 3462 ( bas.asm):00372 PSHS U,Y,A SAVE REGISTERS A2B7 BDA7E5 ( bas.asm):00373 JSR >LA7E5 WRITE A BLOCK ON TAPE A2BA 3562 ( bas.asm):00374 PULS A,Y,U RESTORE REGISTERS A2BC 7EA650 ( bas.asm):00375 JMP >LA650 RESET BUFFER POINTERS ( bas.asm):00376 * SOFTWARE UART TO L1NE PRINTER A2BF 3417 ( bas.asm):00377 LA2BF PSHS X,B,A,CC SAVE REGISTERS AND INTERRUPT STATUS A2C1 1A50 ( bas.asm):00378 ORCC #$50 DISABLE IRQ,FIRQ A2C3 F6FF22 ( bas.asm):00379 LA2C3 LDB PIA1+2 GET RS 232 STATUS A2C6 54 ( bas.asm):00380 LSRB SHIFT RS 232 STATUS BIT INTO CARRY A2C7 25FA ( bas.asm):00381 BCS LA2C3 LOOP UNTIL READY A2C9 8D30 ( bas.asm):00382 BSR LA2FB SET OUTPUT TO MARKING A2CB 5F ( bas.asm):00383 CLRB * A2CC 8D2F ( bas.asm):00384 BSR LA2FD * TRANSMIT ONE START BIT A2CE C608 ( bas.asm):00385 LDB #8 SEND 8 BITS A2D0 3404 ( bas.asm):00386 LA2D0 PSHS B SAVE BIT COUNTER A2D2 5F ( bas.asm):00387 CLRB CLEAR DA IMAGE I ZEROES TO DA WHEN SENDING RS 232 DATA A2D3 44 ( bas.asm):00388 LSRA ROTATE NEXT BIT OF OUTPUT CHARACTER TO CARRY FLAG A2D4 59 ( bas.asm):00389 ROLB * ROTATE CARRY FLAG INTO BIT ONE A2D5 58 ( bas.asm):00390 ASLB * AND ALL OTHER BITS SET TO ZERO A2D6 8D25 ( bas.asm):00391 BSR LA2FD TRANSMIT DATA BYTE A2D8 3504 ( bas.asm):00392 PULS B GET BIT COUNTER A2DA 5A ( bas.asm):00393 DECB SENT ALL 8 BITS? A2DB 26F3 ( bas.asm):00394 BNE LA2D0 NO A2DD 8D1C ( bas.asm):00395 BSR LA2FB SEND STOP BIT (ACCB:0) A2DF 3503 ( bas.asm):00396 PULS CC,A RESTORE OUTPUT CHARACTER & INTERRUPT STATUS A2E1 810D ( bas.asm):00397 CMPA #CR IS IT CARRIAGE RETURN? A2E3 2708 ( bas.asm):00398 BEQ LA2ED YES A2E5 0C9C ( bas.asm):00399 INC LPTPOS INCREMENT CHARACTER COUNTER A2E7 D69C ( bas.asm):00400 LDB LPTPOS CHECK FOR END OF LINE PRINTER LINE A2E9 D19B ( bas.asm):00401 CMPB LPTWID AT END OF LINE PRINTER LINE? A2EB 2506 ( bas.asm):00402 BLO LA2F3 NO A2ED 0F9C ( bas.asm):00403 LA2ED CLR LPTPOS RESET CHARACTER COUNTER A2EF 8D14 ( bas.asm):00404 BSR LA305 * A2F1 8D12 ( bas.asm):00405 BSR LA305 * DELAY FOR CARRIAGE RETURN A2F3 F6FF22 ( bas.asm):00406 LA2F3 LDB PIA1+2 WAIT FOR HANDSHAKE A2F6 54 ( bas.asm):00407 LSRB CHECK FOR R5232 STATUS? A2F7 25FA ( bas.asm):00408 BCS LA2F3 NOT YET READY A2F9 3594 ( bas.asm):00409 PULS B,X,PC RESTORE REGISTERS A2FB C602 ( bas.asm):00410 LA2FB LDB #2 SET RS232 OUTPUT HIGH (MARKING) A2FD F7FF20 ( bas.asm):00411 LA2FD STB DA STORE TO THE D/A CONVERTER REGISTER A300 8D00 ( bas.asm):00412 BSR LA302 GO WAIT A WHILE A302 9E95 ( bas.asm):00413 LA302 LDX LPTBTD GET BAUD RATE A304 8C ( bas.asm):00414 FCB SKP2 SKIP NEXT TWO BYTES A305 9E97 ( bas.asm):00415 LA305 LDX LPTLND PRINTER CARRIAGE RETURN DELAY A307 7EA7D3 ( bas.asm):00416 JMP >LA7D3 DELAY ON DECREMENTING X ( bas.asm):00417 * PUT A CHARACTER ON THE SCREEN A30A 3416 ( bas.asm):00418 LA30A PSHS X,B,A SAVE REGISTERS A30C 9E88 ( bas.asm):00419 LDX CURPOS POINT X TO CURRENT CHARACTER POSITION A30E 8108 ( bas.asm):00420 CMPA #BS IS IT BACKSPACE? A310 260B ( bas.asm):00421 BNE LA31D NO A312 8C0400 ( bas.asm):00422 CMPX #VIDRAM AT TOP OF SCREEN? A315 2746 ( bas.asm):00423 BEQ LA35D YES - DO NOT ALLOW BACKSPACE A317 8660 ( bas.asm):00424 LDA #$60 BLANK A319 A782 ( bas.asm):00425 STA ,-X PUT IN PREVIOUS POSITION A31B 2027 ( bas.asm):00426 BRA LA344 SAVE NEW CURPOS A31D 810D ( bas.asm):00427 LA31D CMPA #CR ENTER KEY? A31F 260E ( bas.asm):00428 BNE LA32F BRANCH IF NOT A321 9E88 ( bas.asm):00429 LDX CURPOS GET CURRENT CHAR POSITION A323 8660 ( bas.asm):00430 LA323 LDA #$60 BLANK A325 A780 ( bas.asm):00431 STA ,X+ PUT IT ON SCREEN A327 1F10 ( bas.asm):00432 TFR X,D * A329 C51F ( bas.asm):00433 BITB #$1F * TEST FOR BEGINNING OF NEW LINE A32B 26F6 ( bas.asm):00434 BNE LA323 PUT OUT BLANKS TILL NEW LINE A32D 2015 ( bas.asm):00435 BRA LA344 CHECK FOR SCROLLING A32F 8120 ( bas.asm):00436 LA32F CMPA #SPACE * A331 252A ( bas.asm):00437 BCS LA35D * BRANCH IF CONTROL CHARACTER A333 4D ( bas.asm):00438 TSTA SET FLAGS A334 2B0C ( bas.asm):00439 BMI LA342 IT IS GRAPHIC CHARACTER A336 8140 ( bas.asm):00440 CMPA #$40 * A338 2506 ( bas.asm):00441 BCS LA340 * BRANCH IF NUMBER OR SPECIAL CHARACTER A33A 8160 ( bas.asm):00442 CMPA #$60 UPPER/LOWER CASE? A33C 2504 ( bas.asm):00443 BCS LA342 BRANCH IF UPPER CASE ALPHA A33E 84DF ( bas.asm):00444 ANDA #$DF CLEAR BIT 5, FORCE ASCII LOWER CASE TO BE UPPER CASE A340 8840 ( bas.asm):00445 LA340 EORA #$40 INVERT BIT 6, CHANGE UPPER CASE TO LOWER & VICE VERSA A342 A780 ( bas.asm):00446 LA342 STA ,X+ STORE CHARACTER TO SCREEN A344 9F88 ( bas.asm):00447 LA344 STX CURPOS SAVE CURRENT CHAR POSITION A346 8C05FF ( bas.asm):00448 CMPX #VIDRAM+511 END OF SCREEN BUFFER? A349 2312 ( bas.asm):00449 BLS LA35D RETURN IF NO NEED TO SCROLL A34B 8E0400 ( bas.asm):00450 LDX #VIDRAM TOP OF SCREEN ( bas.asm):00451 * SCROLL THE SCREEN A34E EC8820 ( bas.asm):00452 LA34E LDD 32,X GET TWO BYTES A351 ED81 ( bas.asm):00453 STD ,X++ MOVE THEM UP ONE ROW A353 8C05E0 ( bas.asm):00454 CMPX #VIDRAM+$1E0 AT THE LAST LINE? A356 25F6 ( bas.asm):00455 BCS LA34E NO A358 C660 ( bas.asm):00456 LDB #$60 BLANK A35A BDA92D ( bas.asm):00457 JSR >LA92D BLANK LAST LINE A35D 3596 ( bas.asm):00458 LA35D PULS A,B,X,PC RESTORE REGISTERS ( bas.asm):00459 * SET UP TAB FIELD WIDTH, TAB ZONE, CURRENT POSITION ( bas.asm):00460 * AND LINE WIDTH ACCORDING TO THE DEVICE SELECTED A35F BD0164 ( bas.asm):00461 LA35F JSR >RVEC2 HOOK INTO RAM A362 3416 ( bas.asm):00462 PSHS X,B,A SAVE REGISTERS A364 0F6E ( bas.asm):00463 CLR PRTDEV RESET PRINT DEVICE NUMBER A366 966F ( bas.asm):00464 LDA DEVNUM GET DEVICE NUMBER A368 2709 ( bas.asm):00465 BEQ LA373 BRANCH IF SCREEN A36A 4C ( bas.asm):00466 INCA CHECK FOR CASSETTE A36B 2717 ( bas.asm):00467 BEQ LA384 BRANCH IF CASSETTE ( bas.asm):00468 * END UP HERE IF PRINTER A36D 9E99 ( bas.asm):00469 LDX LPTCFW TAB FIELD WIDTH AND TAB ZONE A36F DC9B ( bas.asm):00470 LDD LPTWID PRINTER WIDTH AND POSITION A371 2009 ( bas.asm):00471 BRA LA37C SET PRINT PARAMETERS ( bas.asm):00472 * SCREEN DISPLAY VALUES A373 D689 ( bas.asm):00473 LA373 LDB CURPOS+1 GET CURSOR LOC LS BYTE A375 C41F ( bas.asm):00474 ANDB #$1F KEEP ONLY COLUMN POSITION A377 8E1010 ( bas.asm):00475 LDX #$1010 TAB FIELD WIDTH AND LAST TAB ZONE A37A 8620 ( bas.asm):00476 LDA #32 DISPLAY SCREEN LINE WIDTH A37C 9F6A ( bas.asm):00477 LA37C STX DEVCFW SAVE TAB FIELD WIDTH AND ZONE A37E D76C ( bas.asm):00478 STB DEVPOS SAVE PRINT POSITION A380 976D ( bas.asm):00479 STA DEVWID SAVE PRINT WIDTH A382 3596 ( bas.asm):00480 PULS A,B,X,PC RESTORE REGISTERS A384 036E ( bas.asm):00481 LA384 COM PRTDEV SET TO $FF FOR CASSETTE A386 8E0100 ( bas.asm):00482 LDX #$0100 * TAB FIELD WIDTH = 1; ALL OTHER A389 4F ( bas.asm):00483 CLRA * PARAMETERS = 0 A38A 5F ( bas.asm):00484 CLRB * A38B 20EF ( bas.asm):00485 BRA LA37C SET PRINT PARAMETERS ( bas.asm):00486 * THIS IS THE ROUTINE THAT GETS AN INPUT LINE FOR BASIC ( bas.asm):00487 * EXIT WITH BREAK KEY: CARRY = 1 ( bas.asm):00488 * EXIT WITH ENTER KEY: CARRY = 0 A38D BDA928 ( bas.asm):00489 LA38D JSR >LA928 CLEAR SCREEN A390 BD0182 ( bas.asm):00490 LA390 JSR >RVEC12 HOOK INTO RAM A393 0F87 ( bas.asm):00491 CLR IKEYIM RESET BREAK CHECK KEY TEMP KEY STORAGE A395 8E02DD ( bas.asm):00492 LDX #LINBUF+1 INPUT LINE BUFFER A398 C601 ( bas.asm):00493 LDB #1 ACCB CHAR COUNTER: SET TO 1 TO ALLOW A ( bas.asm):00494 * BACKSPACE AS FIRST CHARACTER A39A BDA171 ( bas.asm):00495 LA39A JSR >LA171 GO GET A CHARACTER FROM CONSOLE IN A39D 0D70 ( bas.asm):00496 TST CINBFL GET CONSOLE IN BUFFER FLAG A39F 262B ( bas.asm):00497 BNE LA3CC BRANCH IF NO MORE CHARACTERS IN INPUT FILE A3A1 0D6F ( bas.asm):00498 TST DEVNUM CHECK DEVICE NUMBER A3A3 2623 ( bas.asm):00499 BNE LA3C8 BRANCH IF NOT SCREEN A3A5 810C ( bas.asm):00500 CMPA #FORMF FORM FEED A3A7 27E4 ( bas.asm):00501 BEQ LA38D YES - CLEAR SCREEN A3A9 8108 ( bas.asm):00502 CMPA #BS BACKSPACE A3AB 2607 ( bas.asm):00503 BNE LA3B4 NO A3AD 5A ( bas.asm):00504 DECB YES - DECREMENT CHAR COUNTER A3AE 27E0 ( bas.asm):00505 BEQ LA390 BRANCH IF BACK AT START OF LINE AGAIN A3B0 301F ( bas.asm):00506 LEAX -1,X DECREMENT BUFFER POINTER A3B2 2034 ( bas.asm):00507 BRA LA3E8 ECHO CHAR TO SCREEN A3B4 8115 ( bas.asm):00508 LA3B4 CMPA #$15 SHIFT RIGHT ARROW? A3B6 260A ( bas.asm):00509 BNE LA3C2 NO ( bas.asm):00510 * YES, RESET BUFFER TO BEGINNING AND ERASE CURRENT LINE A3B8 5A ( bas.asm):00511 LA3B8 DECB DEC CHAR CTR A3B9 27D5 ( bas.asm):00512 BEQ LA390 GO BACK TO START IF CHAR CTR = 0 A3BB 8608 ( bas.asm):00513 LDA #BS BACKSPACE? A3BD BDA282 ( bas.asm):00514 JSR >PUTCHR SEND TO CONSOLE OUT (SCREEN) A3C0 20F6 ( bas.asm):00515 BRA LA3B8 KEEP GOING A3C2 8103 ( bas.asm):00516 LA3C2 CMPA #3 BREAK KEY? A3C4 1A01 ( bas.asm):00517 ORCC #1 SET CARRY FLAG A3C6 2705 ( bas.asm):00518 LA3C6 BEQ LA3CD BRANCH IF BREAK KEY DOWN A3C8 810D ( bas.asm):00519 LA3C8 CMPA #CR ENTER KEY? A3CA 260D ( bas.asm):00520 BNE LA3D9 NO A3CC 4F ( bas.asm):00521 LA3CC CLRA CLEAR CARRY FLAG IF ENTER KEY - END LINE ENTRY A3CD 3401 ( bas.asm):00522 LA3CD PSHS CC SAVE CARRY FLAG A3CF BDB958 ( bas.asm):00523 JSR >LB958 SEND CR TO SCREEN A3D2 6F84 ( bas.asm):00524 CLR ,X MAKE LAST BYTE IN INPUT BUFFER = 0 A3D4 8E02DC ( bas.asm):00525 LDX #LINBUF RESET INPUT BUFFER POINTER A3D7 3581 ( bas.asm):00526 PULS CC,PC RESTORE CARRY FLAG ( bas.asm):00527 * INSERT A CHARACTER INTO THE BASIC LINE INPUT BUFFER A3D9 8120 ( bas.asm):00528 LA3D9 CMPA #$20 IS IT CONTROL CHAR? A3DB 25BD ( bas.asm):00529 BLO LA39A BRANCH IF CONTROL CHARACTER A3DD 817B ( bas.asm):00530 CMPA #'z+1 * A3DF 24B9 ( bas.asm):00531 BCC LA39A * IGNORE IF > LOWER CASE Z A3E1 C1FA ( bas.asm):00532 CMPB #LBUFMX HAVE 250 OR MORE CHARACTERS BEEN ENTERED? A3E3 24B5 ( bas.asm):00533 BCC LA39A YES, IGNORE ANY MORE A3E5 A780 ( bas.asm):00534 STA ,X+ PUT IT IN INPUT BUFFER A3E7 5C ( bas.asm):00535 INCB INCREMENT CHARACTER COUNTER A3E8 BDA282 ( bas.asm):00536 LA3E8 JSR >PUTCHR ECHO IT TO SCREEN A3EB 20AD ( bas.asm):00537 BRA LA39A GO SET SOME MORE ( bas.asm):00538 * INPUT DEVICE NUMBER CHECK A3ED BD016D ( bas.asm):00539 LA3ED JSR >RVEC5 HOOK INTO RAM A3F0 966F ( bas.asm):00540 LDA DEVNUM DEVICE NUMBER A3F2 2721 ( bas.asm):00541 BEQ LA415 RETURN IF SCREEN A3F4 4C ( bas.asm):00542 INCA * A3F5 260C ( bas.asm):00543 BNE LA403 * BRANCH IF NOT CASSETTE (BAD FILE MODE) A3F7 9678 ( bas.asm):00544 LDA FILSTA GET FILE STATUS A3F9 2605 ( bas.asm):00545 BNE LA400 FILE IS OPEN A3FB C62C ( bas.asm):00546 LA3FB LDB #22*2 ‘FILE NOT OPEN’ ERROR A3FD 7EAC46 ( bas.asm):00547 JMP >LAC46 JUMP TO ERROR SERVICING ROUTINE A400 4A ( bas.asm):00548 LA400 DECA * A401 2712 ( bas.asm):00549 BEQ LA415 * FILE IS IN INPUT MODE, RETURN A403 7EA616 ( bas.asm):00550 LA403 JMP >LA616 ‘BAD FILE MODE’ ERROR ( bas.asm):00551 * PRINT DEVICE NUMBER CHECK A406 BD0170 ( bas.asm):00552 LA406 JSR >RVEC6 HOOK INTO RAM A409 966F ( bas.asm):00553 LDA DEVNUM GET DEVICE NUMBER A40B 4C ( bas.asm):00554 INCA * A40C 2607 ( bas.asm):00555 BNE LA415 * RETURN IF NOT TAPE A40E 9678 ( bas.asm):00556 LDA FILSTA GET FILE STATUS A410 27E9 ( bas.asm):00557 BEQ LA3FB ‘FILE NOT OPEN’ ERROR A412 4A ( bas.asm):00558 DECA * A413 27EE ( bas.asm):00559 BEQ LA403 * ‘BAD FILE MODE’ - FILE IN INPUT MODE A415 39 ( bas.asm):00560 LA415 RTS ( bas.asm):00561 * CLOSE A416 270E ( bas.asm):00562 CLOSE BEQ LA426 BRANCH IF NO NAME SPECIFIED A418 BDA5A5 ( bas.asm):00563 JSR >LA5A5 CHECK DEVICE NUMBER A41B 8D10 ( bas.asm):00564 LA41B BSR LA42D GO CLOSE A FILE A41D 9DA5 ( bas.asm):00565 JSR GETCCH GET CURRENT BASIC CHARACTER A41F 272A ( bas.asm):00566 BEQ LA44B RETURN IF NO MORE FILES A421 BDA5A2 ( bas.asm):00567 JSR >LA5A2 CHECK SYNTAX AND DEVICE NUMBER A424 20F5 ( bas.asm):00568 BRA LA41B KEEP CLOSING FILES ( bas.asm):00569 * CLOSE ALL FILES HANDLER A426 BD0173 ( bas.asm):00570 LA426 JSR >RVEC7 HOOK INTO RAM A429 86FF ( bas.asm):00571 LA429 LDA #-1 CASSETTE DEVICE NUMBER A42B 976F ( bas.asm):00572 STA DEVNUM SET DEVICE NUMBER ( bas.asm):00573 * CLOSE FILE HANDLER A42D BD0176 ( bas.asm):00574 LA42D JSR >RVEC8 HOOK INTO RAM A430 966F ( bas.asm):00575 LDA DEVNUM GET DEVICE NUMBER A432 0F6F ( bas.asm):00576 CLR DEVNUM SET TO SCREEN A434 4C ( bas.asm):00577 INCA * A435 2614 ( bas.asm):00578 BNE LA44B * BRANCH IF WAS NOT CASSETTE A437 9678 ( bas.asm):00579 LDA FILSTA GET FILE STATUS A439 8102 ( bas.asm):00580 CMPA #2 IS IT OUTPUT MODE A43B 260C ( bas.asm):00581 BNE LA449 NO A43D 9679 ( bas.asm):00582 LDA CINCTR GET CHARACTER BUFFER CTR A43F 2703 ( bas.asm):00583 BEQ LA444 WRITE END OF PROG BLOCK IF BUFFER EMPTY A441 BDA2A8 ( bas.asm):00584 JSR >LA2A8 WRITE A BLOCK TO TAPE A444 C6FF ( bas.asm):00585 LA444 LDB #$FF END OF FILE TYPE BLOCK NUMBER A446 BDA2AA ( bas.asm):00586 JSR >LA2AA WRITE END OF FILE TYPE BLOCK A449 0F78 ( bas.asm):00587 LA449 CLR FILSTA CASSETTE FILE STATUS CLOSED A44B 39 ( bas.asm):00588 LA44B RTS ( bas.asm):00589 * CSAVE A44C BDA578 ( bas.asm):00590 CSAVE JSR >LA578 GO SCAN OFF NAME A44F 9DA5 ( bas.asm):00591 JSR GETCCH GET CURRENT CHARACTER IN THE BASIC LINE A451 2716 ( bas.asm):00592 BEQ LA469 BRANCH IF NONE A453 BDB26D ( bas.asm):00593 JSR >LB26D SYNTAX ERROR IF NOT COMMA A456 C641 ( bas.asm):00594 LDB #'A IS THIS AN ASCII SAVE? A458 BDB26F ( bas.asm):00595 JSR >LB26F SYNTAX ERROR IF NOT ‘A’ A45B 26EE ( bas.asm):00596 BNE LA44B RETURN IF NOT END OF LINE A45D 4F ( bas.asm):00597 CLRA FILE TYPE = 0 A45E BDA65C ( bas.asm):00598 JSR >LA65C WRITE OUT HEADER BLOCK A461 86FF ( bas.asm):00599 LDA #-1 CASSETTE CODE A463 976F ( bas.asm):00600 STA DEVNUM SET DEVICE NUMBER TO CASSETTE A465 4F ( bas.asm):00601 CLRA CLEAR CARRY - FORCE LIST TO BEGIN AT PROGRAM START A466 7EB764 ( bas.asm):00602 JMP >LIST GO DO A ‘LIST’ TO CASSETTE ( bas.asm):00603 * NON-ASCII CSAVE A469 4F ( bas.asm):00604 LA469 CLRA FILE TYPE = 0 A46A 9E8A ( bas.asm):00605 LDX ZERO ZERO OUT ASCII FLAG AND FILE MODE A46C BDA65F ( bas.asm):00606 JSR >LA65F WRITE HEADER BLOCK A46F 0F78 ( bas.asm):00607 CLR FILSTA CLOSE FILES A471 0C7C ( bas.asm):00608 INC BLKTYP INCREMENT BLOCK NUMBER A473 BDA7D8 ( bas.asm):00609 JSR >WRLDR WRITE 55’S TO CASSETTE A476 9E19 ( bas.asm):00610 LDX TXTTAB ADDRESS OF PROGRAM START A478 9F7E ( bas.asm):00611 LA478 STX CBUFAD STORE CURRENT BLOCK START ADDR A47A 86FF ( bas.asm):00612 LDA #255 255 BYTE BLOCKS A47C 977D ( bas.asm):00613 STA BLKLEN BLOCK SIZE A47E DC1B ( bas.asm):00614 LDD VARTAB END OF PROGRAM A480 937E ( bas.asm):00615 SUBD CBUFAD CURRENT BLOCK STARTING ADDR A482 270D ( bas.asm):00616 BEQ LA491 BRANCH IF IT CAME OUT EXACT A484 108300FF ( bas.asm):00617 CMPD #255 MORE THAN 255 BYTES LEFT? A488 2402 ( bas.asm):00618 BHS LA48C YES A48A D77D ( bas.asm):00619 STB BLKLEN USE ACTUAL BLOCK SIZE IF LESS THAN 255 A48C BDA7F4 ( bas.asm):00620 LA48C JSR >SNDBLK WRITE BLOCK TO CASSETTE A48F 20E7 ( bas.asm):00621 BRA LA478 DO ANOTHER BLOCK A491 007C ( bas.asm):00622 LA491 NEG BLKTYP MAKE BLOCK NUMBER NEGATIVE (EOF BLOCK) A493 0F7D ( bas.asm):00623 CLR BLKLEN ZERO BLOCK SIZE A495 7EA7E7 ( bas.asm):00624 JMP >LA7E7 WRITE A BLOCK, TURN OFF MOTOR ( bas.asm):00625 * CLOAD A498 0F78 ( bas.asm):00626 CLOAD CLR FILSTA CLOSE FILES A49A 814D ( bas.asm):00627 CMPA #'M IS IT CLOADM? A49C 2760 ( bas.asm):00628 BEQ LA4FE BRANCH IF SO A49E 3262 ( bas.asm):00629 LEAS 2,S GET RID OF THE RETURN A4A0 BDA5C5 ( bas.asm):00630 JSR >LA5C5 GO GET FILE NAME A4A3 BDA648 ( bas.asm):00631 JSR >LA648 SEARCH FOR FILE A4A6 7D01E4 ( bas.asm):00632 TST CASBUF+10 GET FILE MODE (NON-ZERO=DATA OR ASCII) A4A9 271D ( bas.asm):00633 BEQ LA4C8 ZERO = CRUNCHED BASIC OR MACHINE LANG A4AB B601E3 ( bas.asm):00634 LDA CASBUF+9 GET ASCII FLAG A4AE 271D ( bas.asm):00635 BEQ LA4CD ‘BAD FILE NODE’ 0 = CRUNCHED OR MACH LANG A4B0 BDAD19 ( bas.asm):00636 JSR >LAD19 DO A ‘NEW’ A4B3 86FF ( bas.asm):00637 LDA #-1 TAPE DEVICE NUMBER A4B5 976F ( bas.asm):00638 STA DEVNUM SET DEVICE NUMBER TO TAPE A4B7 0C78 ( bas.asm):00639 INC FILSTA FILE TYPE = INPUT A4B9 BDA635 ( bas.asm):00640 JSR >LA635 GO LOAD ASCII RECORD A4BC 7EAC7C ( bas.asm):00641 JMP >LAC7C GO LOAD AND CRUNCH INPUT ( bas.asm):00642 * COME HERE FROM BASIC’S DIRECT LOOP IF CONSOLE ( bas.asm):00643 * IN BUFFER EMPTY A4BF BD0185 ( bas.asm):00644 LA4BF JSR >RVEC13 HOOK INTO RAM A4C2 BDA42D ( bas.asm):00645 JSR >LA42D CLOSE ACTIVE FILE A4C5 7EAC73 ( bas.asm):00646 JMP >LAC73 GO TO BASIC’S DIRECT LOOP ( bas.asm):00647 * CLOAD A CRUNCHED BASIC A4C8 B601E2 ( bas.asm):00648 LA4C8 LDA CASBUF+8 FILE TYPE A4CB 2703 ( bas.asm):00649 BEQ LA4D0 ZERO IS CSAVE TYPE A4CD 7EA616 ( bas.asm):00650 LA4CD JMP >LA616 ‘BAD FILE MODE’ IF NOT BASIC FILE A4D0 BDAD19 ( bas.asm):00651 LA4D0 JSR >LAD19 DO A ‘NEW’ A4D3 BDA77C ( bas.asm):00652 JSR >CASON TURN ON TAPE, START READING A4D6 9E19 ( bas.asm):00653 LDX TXTTAB GET START OF PROGRAM ADDRESS A4D8 9F7E ( bas.asm):00654 LA4D8 STX CBUFAD STORE IT IN LOAD BUFFER A4DA DC7E ( bas.asm):00655 LDD CBUFAD GET START ADDRESS TO D REG A4DC 4C ( bas.asm):00656 INCA ADD 256 TO LOAD ADDRESS A4DD BDAC37 ( bas.asm):00657 JSR >LAC37 SEE IF ROOM BELOW STACK FOR ONE BLOCK A4E0 BDA70B ( bas.asm):00658 JSR >GETBLK READ A BLOCK A4E3 2613 ( bas.asm):00659 BNE LA4F8 GOT AN ERROR DURING READ A4E5 967C ( bas.asm):00660 LDA BLKTYP BLOCK NUMBER A4E7 270F ( bas.asm):00661 BEQ LA4F8 I/O ERROR IF HEADER BLOCK TYPE A4E9 2AED ( bas.asm):00662 BPL LA4D8 REAR MORE IF BLOCK NUMBER POSITIVE A4EB 9F1B ( bas.asm):00663 STX VARTAB SET END OF PROGRAM ADDRESS A4ED 8D4C ( bas.asm):00664 BSR LA53B TURN OFF TAPE DECK A4EF 8EABEC ( bas.asm):00665 LDX #LABED-1 POINT TO ‘OK’ MESSAGE A4F2 BDB99C ( bas.asm):00666 JSR >LB99C PRINT ‘OK’ TO CONSOLE OUT A4F5 7EACE9 ( bas.asm):00667 JMP >LACE9 RESET INPUT POINTER, CLEAR VARIABLES AND ( bas.asm):00668 * RETURN TO MAIN LOOP OF BASIC A4F8 BDAD19 ( bas.asm):00669 LA4F8 JSR >LAD19 DO A ‘NEW’ A4FB 7EA619 ( bas.asm):00670 LA4FB JMP >LA619 ‘I/O ERROR’ ( bas.asm):00671 * CLOADM A4FE 9D9F ( bas.asm):00672 LA4FE JSR GETNCH GET NEXT CHARACTER IN BASIC LINE A500 8D76 ( bas.asm):00673 BSR LA578 GO SCAN OFF NAME A502 BDA648 ( bas.asm):00674 JSR >LA648 SEARCH FOR FILE A505 9E8A ( bas.asm):00675 LA505 LDX ZERO STORE ZERO TO X REG, DEFAULT OFFSET VALUE A507 9DA5 ( bas.asm):00676 JSR GETCCH CHECK FOR AN OFFSET A509 2706 ( bas.asm):00677 BEQ LA511 BRANCH IF NO OFFSET A50B BDB26D ( bas.asm):00678 JSR >LB26D SYNTAX CHECK FOR COMMA A50E BDB73D ( bas.asm):00679 JSR >LB73D EVALUATE OFFSET; RETURN VALUE IN X A511 B601E2 ( bas.asm):00680 LA511 LDA CASBUF+8 CHECK FILE MODE A514 8102 ( bas.asm):00681 CMPA #2 IS IT MACHINE LANGUAGE? A516 26B5 ( bas.asm):00682 BNE LA4CD ‘BAD FILE MODE’ ERROR IF NOT A518 FC01E5 ( bas.asm):00683 LDD CASBUF+11 GET TRANSFER ADDR FROM TAPE A51B 338B ( bas.asm):00684 LEAU D,X ADD OFFSET A51D DF9D ( bas.asm):00685 STU EXECJP STORE TRANSFER ADDR IN EXEC ARGUMENT A51F 7D01E4 ( bas.asm):00686 TST CASBUF+10 CHECK FILE MODE A522 26A9 ( bas.asm):00687 BNE LA4CD ‘BAD FILE MODE’ ERROR A524 FC01E7 ( bas.asm):00688 LDD CASBUF+13 GET LOAD ADDR FROM TAPE A527 308B ( bas.asm):00689 LEAX D,X ADD OFFSET A529 9F7E ( bas.asm):00690 STX CBUFAD STORE IN BUFFER START ADDRESS POINTER A52B BDA77C ( bas.asm):00691 JSR >CASON START UP TAPE A52E BDA70B ( bas.asm):00692 LA52E JSR >GETBLK READ A BLOCK A531 26C8 ( bas.asm):00693 BNE LA4FB BRANCH IF I/O ERROR A533 9F7E ( bas.asm):00694 STX CBUFAD STORE NEW START ADDR (ONE BLOCK HIGHER) A535 0D7C ( bas.asm):00695 TST BLKTYP CHECK BLOCK NUMBER A537 27C2 ( bas.asm):00696 BEQ LA4FB BRANCH IF I/O ERROR (HEADER BLOCK) A539 2AF3 ( bas.asm):00697 BPL LA52E GO READ SOME MORE A53B 7EA7E9 ( bas.asm):00698 LA53B JMP >LA7E9 GO TURN OFF TAPE DECK ( bas.asm):00699 * EXEC A53E 2705 ( bas.asm):00700 EXEC BEQ LA545 BRANCH IF NO ARGUMENT A540 BDB73D ( bas.asm):00701 JSR >LB73D EVALUATE ARGUMENT - ARGUMENT RETURNED IN X A543 9F9D ( bas.asm):00702 STX EXECJP STORE X TO EXEC JUMP ADDRESS A545 6E9F009D ( bas.asm):00703 LA545 JMP [EXECJP] GO DO IT ( bas.asm):00704 * BREAK CHECK A549 BD017F ( bas.asm):00705 LA549 JSR >RVEC11 HOOK INTO RAM A54C 966F ( bas.asm):00706 LDA DEVNUM GET DEVICE NUMBER A54E 4C ( bas.asm):00707 INCA CHECK FOR TAPE A54F 2750 ( bas.asm):00708 BEQ LA5A1 RETURN IF TAPE A551 7EADEB ( bas.asm):00709 JMP >LADEB GO DO BREAK KEY CHECK ( bas.asm):00710 * THIS ROUTINE EVALUATES AN ARGUMENT ( bas.asm):00711 * AND MAKES SURE IT IS WITHIN LIMITS OF VIDEO DISPLAY RAM A554 BDB3E4 ( bas.asm):00712 LA554 JSR >LB3E4 EVALUATE EXPRESSION AND RETURN VALUE IN ACCD A557 8301FF ( bas.asm):00713 SUBD #511 ONLY 512 VIDEO DISPLAY LOCATIONS A55A 10220EEC ( bas.asm):00714 LBHI LB44A BRANCH IF > 511 TO ‘ILLEGAL FUNCTION CALL’ A55E C305FF ( bas.asm):00715 ADDD #VIDRAM+511 ADD BACK IN OFFSET + START OF VIDEO RAM A561 DD88 ( bas.asm):00716 STD CURPOS PUT THE CURSOR THERE A563 39 ( bas.asm):00717 RTS ( bas.asm):00718 * INKEY$ A564 9687 ( bas.asm):00719 INKEY LDA IKEYIM WAS A KEY DOWN IN THE BREAK CHECK? A566 2603 ( bas.asm):00720 BNE LA56B YES A568 BDA1CB ( bas.asm):00721 JSR >KEYIN GO GET A KEY A56B 0F87 ( bas.asm):00722 LA56B CLR IKEYIM CLEAR INKEY RAM IMAGE A56D 9753 ( bas.asm):00723 STA FPA0+3 STORE THE KEY IN FPA0 A56F 1026111C ( bas.asm):00724 LBNE LB68F CONVERT FPA0+3 TO A STRING A573 9756 ( bas.asm):00725 STA STRDES SET LENGTH OF STRING = 0 IF NO KEY DOWN A575 7EB69B ( bas.asm):00726 JMP >LB69B PUT A NULL STRING ONTO THE STRING STACK ( bas.asm):00727 * STRIP A FILENAME OFF OF THE BASIC INPUT LINE A578 8E01D1 ( bas.asm):00728 LA578 LDX #CFNBUF POINT TO FILE NAME BUFFER A57B 6F80 ( bas.asm):00729 CLR ,X+ CLEAR THE FIRST BYTE - IT WILL CONTAIN THE COUNT ( bas.asm):00730 * OF THE NUMBER OF CHARACTERS IN THE NAME A57D 8620 ( bas.asm):00731 LDA #SPACE SPACE A57F A780 ( bas.asm):00732 LA57F STA ,X+ BLANK FILL 8 CHARS A581 8C01DA ( bas.asm):00733 CMPX #CASBUF DONE? A584 26F9 ( bas.asm):00734 BNE LA57F NO A586 9DA5 ( bas.asm):00735 JSR GETCCH GET CURRENT INPUT CHAR A588 2717 ( bas.asm):00736 BEQ LA5A1 RETURN IF NO NAME A58A BDB156 ( bas.asm):00737 JSR >LB156 GET THE FILE NAME - EVALUATE EXPRESSION A58D BDB654 ( bas.asm):00738 JSR >LB654 POINT X TO START OF NAME (TOP STRING ON STRING STACK) A590 CE01D1 ( bas.asm):00739 LDU #CFNBUF CASSETTE FILE NAME BUFFER A593 E7C0 ( bas.asm):00740 STB ,U+ STORE THE NUMBER OF BYTES IN THE NAME A595 270A ( bas.asm):00741 BEQ LA5A1 NULL NAME (BLANK NAME) A597 8C ( bas.asm):00742 FCB SKP2 SKIP THE NEXT TWO BYTES A598 C608 ( bas.asm):00743 LA598 LDB #8 MOVE 8 BYTES ( bas.asm):00744 * MOVE ACCB BYTES FROM (X) TO (U) A59A A680 ( bas.asm):00745 LA59A LDA ,X+ GET BYTE FROM X A59C A7C0 ( bas.asm):00746 STA ,U+ STORE IT AT U A59E 5A ( bas.asm):00747 DECB MOVED ALL BYTES? A59F 26F9 ( bas.asm):00748 BNE LA59A NO A5A1 39 ( bas.asm):00749 LA5A1 RTS ( bas.asm):00750 * GET DEVICE NUMBER FROM BASIC LINE - CHECK VALIDITY A5A2 BDB26D ( bas.asm):00751 LA5A2 JSR >LB26D CHECK FOR COMMA, SYNTAX ERROR IF NONE A5A5 8123 ( bas.asm):00752 LA5A5 CMPA #'# IS NEXT CHARACTER A NUMBER? A5A7 2602 ( bas.asm):00753 BNE LA5AB NO A5A9 9D9F ( bas.asm):00754 JSR GETNCH GET NEXT BASIC INPUT CHARACTER A5AB BDB141 ( bas.asm):00755 LA5AB JSR >LB141 EVALUATE EXPRESSION A5AE BDB3ED ( bas.asm):00756 LA5AE JSR >INTCNV CONVERT FPA0 TO INTEGER, RETURN VALUE IN ACCD A5B1 59 ( bas.asm):00757 ROLB MSB OF ACCB TO CARRY A5B2 8900 ( bas.asm):00758 ADCA #0 ADD MSB OF ACCB TO ACCA A5B4 2669 ( bas.asm):00759 BNE LA61F ‘DEVICE # ERROR’ IF ACCA007F A5B6 56 ( bas.asm):00760 RORB RESTORE ACCB A5B7 D76F ( bas.asm):00761 STB DEVNUM STORE B IN DEVICE NUMBER A5B9 BD0161 ( bas.asm):00762 JSR >RVEC1 HOOK INTO RAM A5BC 2706 ( bas.asm):00763 BEQ LA5C4 BRANCH IF DEVICE NUMBER SET TO SCREEN A5BE 2A5F ( bas.asm):00764 BPL LA61F ‘DEVICE NUMBER’ ERROR IF POSITIVE DEVICE NUMBER A5C0 C1FE ( bas.asm):00765 CMPB #-2 LOWEST LEGAL DEVICE NUMBER A5C2 2D5B ( bas.asm):00766 BLT LA61F ‘DEVICE NUMBER ERROR’ A5C4 39 ( bas.asm):00767 LA5C4 RTS ( bas.asm):00768 ** THIS ROUTINE WILL SCAN OFF THE FILE NAME FROM A BASIC LINE ( bas.asm):00769 ** AND RETURN A SYNTAX ERROR IF THERE ARE ANY CHARACTERS ( bas.asm):00770 ** FOLLOWING THE END OF THE NAME A5C5 8DB1 ( bas.asm):00771 LA5C5 BSR LA578 SCAN OFF NAME A5C7 9DA5 ( bas.asm):00772 LA5C7 JSR GETCCH GET CURRENT INPUT CHAR FROM BASIC LINE A5C9 27F9 ( bas.asm):00773 LA5C9 BEQ LA5C4 RETURN IF END OF LINE A5CB 7EB277 ( bas.asm):00774 JMP >LB277 SYNTAX ERROR IF ANY MORE CHARACTERS ( bas.asm):00775 * EOF A5CE BD0188 ( bas.asm):00776 EOF JSR >RVEC14 HOOK INTO RAM A5D1 966F ( bas.asm):00777 LDA DEVNUM GET DEVICE NUMBER A5D3 3402 ( bas.asm):00778 PSHS A SAVE IT A5D5 8DD7 ( bas.asm):00779 BSR LA5AE CHECK DEVICE NUMBER A5D7 BDA3ED ( bas.asm):00780 JSR >LA3ED CHECK FOR PROPER FILE AND MODE A5DA 5F ( bas.asm):00781 LA5DA CLRB NOT EOF FLAG = 0 A5DB 966F ( bas.asm):00782 LDA DEVNUM TEST DEVICE NUMBER A5DD 2705 ( bas.asm):00783 BEQ LA5E4 BRANCH IF NOT SET TO DISPLAY A5DF 0D79 ( bas.asm):00784 TST CINCTR ANY CHARACTERS LEFT TO SEND? A5E1 2601 ( bas.asm):00785 BNE LA5E4 YES A5E3 53 ( bas.asm):00786 COMB NO - EOF: SET FLAG = -1 ($FF) A5E4 3502 ( bas.asm):00787 LA5E4 PULS A GET DEVICE NUMBER BACK AGAIN A5E6 976F ( bas.asm):00788 STA DEVNUM RESTORE IT A5E8 1D ( bas.asm):00789 LA5E8 SEX CONVERT ACCB TO 2 DIGIT SIGNED INTEGER A5E9 7EB4F4 ( bas.asm):00790 JMP >GIVABF CONVERT ACCD TO FLOATING POINT ( bas.asm):00791 * SKIPF A5EC 8DD7 ( bas.asm):00792 SKIPF BSR LA5C5 SCAN OFF THE BASIC FILE NAME A5EE 8D58 ( bas.asm):00793 BSR LA648 LOOK FOR THAT FILE ON TAPE A5F0 BDA6D1 ( bas.asm):00794 JSR >LA6D1 READ THE FILE A5F3 2624 ( bas.asm):00795 BNE LA619 ‘I/O ERROR’ A5F5 39 ( bas.asm):00796 RTS ( bas.asm):00797 * OPEN A5F6 BD015E ( bas.asm):00798 OPEN JSR >RVEC0 HOOK INTO RAM A5F9 BDB156 ( bas.asm):00799 JSR >LB156 GET FILE STATUS (INPUT,OUTPUT) A5FC BDB6A4 ( bas.asm):00800 JSR >LB6A4 GET FIRST BYTE OF STATUS STRING TO ACCB A5FF 3404 ( bas.asm):00801 PSHS B SAVE IT ON STACK A601 8D9F ( bas.asm):00802 BSR LA5A2 CHECK FOR SYNTAX AND GET DEVICE NUMBER A603 BDB26D ( bas.asm):00803 LA603 JSR >LB26D SYNTAX CHECK FOR COMMA, SYNTAX ERROR IF NOT A606 8DBD ( bas.asm):00804 BSR LA5C5 GET FILE NAME A608 966F ( bas.asm):00805 LDA DEVNUM GET DEVICE NUMBER A60A 0F6F ( bas.asm):00806 CLR DEVNUM SET DEVICE NUMBER TO SCREEN A60C 3504 ( bas.asm):00807 PULS B GET STATUS AGAIN A60E C149 ( bas.asm):00808 CMPB #'I IS IT INPUT MODE? A610 2712 ( bas.asm):00809 BEQ LA624 YES A612 C14F ( bas.asm):00810 CMPB #'O IS IT OUTPUT MODE? A614 2742 ( bas.asm):00811 BEQ LA658 YES ( bas.asm):00812 * IF IT ISN’T INPUT OR OUTPUT, BAD FILE MODE A616 C62A ( bas.asm):00813 LA616 LDB #21*2 ERROR # 21 ‘BAD FILE MODE’ A618 8C ( bas.asm):00814 FCB SKP2 SKIP TWO BYTES A619 C628 ( bas.asm):00815 LA619 LDB #20*2 ERROR # 20 ‘I/O ERROR A61B 8C ( bas.asm):00816 FCB SKP2 SKIP TWO BYTES A61C C624 ( bas.asm):00817 LA61C LDB #18*2 ERROR # 18 ‘FILE ALREADY OPEN’ A61E 8C ( bas.asm):00818 FCB SKP2 SKIP TWO BYTES A61F C626 ( bas.asm):00819 LA61F LDB #19*2 ERROR # 19 ‘DEVICE NUMBER ERROR’ A621 7EAC46 ( bas.asm):00820 JMP >LAC46 JUMP TO ERROR HANDLER ( bas.asm):00821 * A624 4C ( bas.asm):00822 LA624 INCA DEVICE NUMBER SET TO TAPE? A625 2BEF ( bas.asm):00823 BMI LA616 ‘BAD FILE MODE’ IF DEVNUM = NEG BUT NOT CASSETTE A627 262E ( bas.asm):00824 BNE LA657 RETURN IF DEVNUM WAS SET TO SCREEN OR DISK ( bas.asm):00825 * SET TO TAPE A629 8D1D ( bas.asm):00826 BSR LA648 GET HEADER BLOCK A62B B601E3 ( bas.asm):00827 LDA CASBUF+9 GET ASCII FLAG A62E B401E4 ( bas.asm):00828 ANDA CASBUF+10 ‘AND’ IT WITH FILE MODE A631 27E3 ( bas.asm):00829 BEQ LA616 ‘BAD FILE MODE’ - CRUNCHED FlLE OR MACH LANG A633 0C78 ( bas.asm):00830 INC FILSTA OPEN FILE FOR INPUT A635 BDA701 ( bas.asm):00831 LA635 JSR >LA701 START TAPE, READ A BLOCK A638 26DF ( bas.asm):00832 BNE LA619 ‘I/O ERROR’ A63A 0D7C ( bas.asm):00833 TST BLKTYP CHECK BLOCK NUMBER A63C 27DB ( bas.asm):00834 BEQ LA619 ‘I/O ERROR’ IF HEADER BLOCK A63E 2B17 ( bas.asm):00835 BMI LA657 BRANCH IF THIS IS THE LAST BLOCK A640 967D ( bas.asm):00836 LDA BLKLEN CHAR COUNT A642 27F1 ( bas.asm):00837 BEQ LA635 READ ANOTHER BLOCK IF NULL BLOCK A644 9779 ( bas.asm):00838 LA644 STA CINCTR STORE IN TEMP CHARACTER COUNTER A646 200A ( bas.asm):00839 BRA LA652 RESET BUFFER POINTER ( bas.asm):00840 * SEARCH FOR FILE NAME IN CNMBUF A648 0D78 ( bas.asm):00841 LA648 TST FILSTA IS THE FILE OPEN? A64A 26D0 ( bas.asm):00842 BNE LA61C YES- ‘FILE ALREADY OPEN’ A64C 8D33 ( bas.asm):00843 BSR LA681 SEARCH FOR CORRECT FILE NAME A64E 26C9 ( bas.asm):00844 BNE LA619 ‘I/O ERROR’ A650 0F79 ( bas.asm):00845 LA650 CLR CINCTR CLEAR CHARACTER COUNTER A652 8E01DA ( bas.asm):00846 LA652 LDX #CASBUF CASSETTE INPUT BUFFER ADDRESS A655 9F7A ( bas.asm):00847 STX CINPTR RESET IT A657 39 ( bas.asm):00848 LA657 RTS ( bas.asm):00849 * WRITE OUT THE HEADER BLOCK ( bas.asm):00850 ** CASBUF FILE NAME ( bas.asm):00851 ** CASBUF+8 FILE TYPE ( bas.asm):00852 ** CASBUF+9 ASCII FLAG ( bas.asm):00853 ** CASBUF+10 FILE MODE ( bas.asm):00854 ** CASBUF+11,12 TRANSFER ADDRESS ( bas.asm):00855 ** CASBUF+13,14 START ADDRESS ( bas.asm):00856 * ENTER HERE FOR DATA FILES W/DEVICE NUMBER IN ACCA A658 4C ( bas.asm):00857 LA658 INCA CHECK FOR CASSETTE DEVICE NUMBER A659 26FC ( bas.asm):00858 BNE LA657 RETURN IF DEVICE NUMBER WASN’T TAPE A65B 4C ( bas.asm):00859 INCA MAKE FILE TYPE = 1 ( bas.asm):00860 * ENTER HERE FOR ASCII FILES A65C 8EFFFF ( bas.asm):00861 LA65C LDX #$FFFF SET ASCII FLAG AND MODE = $FF A65F 0D78 ( bas.asm):00862 LA65F TST FILSTA IS FILE OPEN? A661 26B9 ( bas.asm):00863 BNE LA61C YES- ‘FILE ALREADY OPEN’ A663 CE01DA ( bas.asm):00864 LDU #CASBUF CASSETTE INPUT BUFFER A666 DF7E ( bas.asm):00865 STU CBUFAD STORE IN STARTING ADDRESS A668 A748 ( bas.asm):00866 STA 8,U FILE TYPE IN CASBUF+8 A66A AF49 ( bas.asm):00867 STX 9,U ASCII FLAG & MODE IN CASBUF+9, CASBUF+10 ( bas.asm):00868 * CASBUF +8 +9 +10 ( bas.asm):00869 * TYPE ASCII MODE ( bas.asm):00870 * BASIC CRUNCHED 00 00 00 ( bas.asm):00871 * BASIC ASCII 00 FF FF ( bas.asm):00872 * DATA 01 FF FF ( bas.asm):00873 * MACHINE LANGUAGE 02 00 00 ( bas.asm):00874 * MACHINE BLK LOAD 02 00 FF A66C 8E01D2 ( bas.asm):00875 LDX #CFNBUF+1 POINT X TO FILE NAME BUFFER A66F BDA598 ( bas.asm):00876 JSR >LA598 MOVE 8 BYTES FROM (X) TO (U) A672 0F7C ( bas.asm):00877 CLR BLKTYP ZERO BLOCK NUMBER A674 860F ( bas.asm):00878 LDA #15 15 BYTES IN THE HEADER BLOCK A676 977D ( bas.asm):00879 STA BLKLEN CHAR COUNT A678 BDA7E5 ( bas.asm):00880 JSR >LA7E5 GO WRITE ONE BLOCK A67B 8602 ( bas.asm):00881 LDA #2 OUTPUT FILE A67D 9778 ( bas.asm):00882 STA FILSTA STORE IN FILE MODE A67F 20CF ( bas.asm):00883 BRA LA650 RESET POINTERS ( bas.asm):00884 * SEARCH FOR CORRECT CASSETTE FILE NAME A681 8E01DA ( bas.asm):00885 LA681 LDX #CASBUF CASSETTE BUFFER A684 9F7E ( bas.asm):00886 STX CBUFAD LOAD ADDRESS POINTER A686 9668 ( bas.asm):00887 LA686 LDA CURLIN GET CURRENT LINE NUMBER MSB (CURLIN) A688 4C ( bas.asm):00888 INCA IN DIRECT MODE IF ACCA = $FF A689 260B ( bas.asm):00889 BNE LA696 BRANCH IF NOT DIRECT MODE A68B BDA928 ( bas.asm):00890 JSR >LA928 CLEAR SCREEN A68E 9E88 ( bas.asm):00891 LDX CURPOS CURRENT SCREEN CHAR POSITION A690 C653 ( bas.asm):00892 LDB #'S ‘S’ MEANS SEARCHING A692 E781 ( bas.asm):00893 STB ,X++ PUT AN ‘S’ ON THE SCREEN A694 9F88 ( bas.asm):00894 STX CURPOS STORE NEW CURSOR LOCATION A696 8D69 ( bas.asm):00895 LA696 BSR LA701 READ ONE BLOCK FROM TAPE A698 DA7C ( bas.asm):00896 ORB BLKTYP ‘OR’ ERROR FLAG WITH BLOCK NUMBER A69A 2634 ( bas.asm):00897 BNE LA6D0 BRANCH IF NOT BLOCK ZERO OR ERROR A69C 8E01DA ( bas.asm):00898 LDX #CASBUF POINT TO CASSETTE BUFFER A69F CE01D2 ( bas.asm):00899 LDU #CFNBUF+1 POINT TO DESIRED NAME A6A2 C608 ( bas.asm):00900 LDB #8 EIGHT CHARACTERS MAX IN NAME A6A4 6FE2 ( bas.asm):00901 CLR ,-S ZERO A BYTE ON THE STACK A6A6 A680 ( bas.asm):00902 LA6A6 LDA ,X+ GET CHAR FROM CASSETTE BLOCK A6A8 109E68 ( bas.asm):00903 LDY CURLIN GET CURLIN A6AB 3121 ( bas.asm):00904 LEAY 1,Y DIRECT MODE? A6AD 2605 ( bas.asm):00905 BNE LA6B4 FALL THROUGH IF DIRECT MODE A6AF 0F6F ( bas.asm):00906 CLR DEVNUM SET DEVICE NUMBER TO SCREEN A6B1 BDA282 ( bas.asm):00907 JSR >PUTCHR OUTPUT A CHAR A6B4 A0C0 ( bas.asm):00908 LA6B4 SUBA ,U+ SUBTRACT A CHAR FROM DESIRED NAME NON-ZERO RESULT IF NO MATCH A6B6 AAE4 ( bas.asm):00909 ORA ,S ‘OR’ WITH TOP OF STACK, RESULT WILL BE NON-ZERO IF MISMATCH A6B8 A7E4 ( bas.asm):00910 STA ,S SAVE IT A6BA 5A ( bas.asm):00911 DECB DONE ALL 8 CHARACTERS? A6BB 26E9 ( bas.asm):00912 BNE LA6A6 NO A6BD A6E0 ( bas.asm):00913 LDA ,S+ SEE IF ALL CHARS WERE OK A6BF 270A ( bas.asm):00914 BEQ LA6CB BRANCH IF GOOD COMPARE A6C1 6D57 ( bas.asm):00915 TST -9,U CHECK THE NUMBER OF CHARACTERS IN THE CLOAD STATEMENT A6C3 2706 ( bas.asm):00916 BEQ LA6CB IF NO NAME SPECIFIED, ANY FILE IS OK ( bas.asm):00917 * DIDN'T FIND THE RIGHT FILE IF HERE A6C5 8D0A ( bas.asm):00918 BSR LA6D1 LOOK FOR FILE A6C7 2607 ( bas.asm):00919 BNE LA6D0 RETURN IF ERROR A6C9 20BB ( bas.asm):00920 BRA LA686 GO LOOK SOME MORE A6CB 8646 ( bas.asm):00921 LA6CB LDA #'F * A6CD 8D29 ( bas.asm):00922 BSR LA6F8 * PUT ‘F’ ON THE SCREEN IF DIRECT MODE A6CF 4F ( bas.asm):00923 CLRA SET ZERO FLAG TO INDICATE NO ERRORS A6D0 39 ( bas.asm):00924 LA6D0 RTS A6D1 7D01E4 ( bas.asm):00925 LA6D1 TST CASBUF+10 CHECK FILE MODE A6D4 2609 ( bas.asm):00926 BNE LA6DF BRANCH IF ASCII OR DATA A6D6 BDA77C ( bas.asm):00927 JSR >CASON TURN ON TAPE DECK A6D9 8D30 ( bas.asm):00928 LA6D9 BSR GETBLK LOAD A BLOCK FROM TAPE A6DB 8D08 ( bas.asm):00929 BSR LA6E5 CHECK FOR ERROR OR LAST BLOCK A6DD 20FA ( bas.asm):00930 BRA LA6D9 KEEP GOING A6DF 8D20 ( bas.asm):00931 LA6DF BSR LA701 READ ONE BLOCK FROM TAPE A6E1 8D02 ( bas.asm):00932 BSR LA6E5 CHECK FOR ERROR OR LAST BLOCK A6E3 20FA ( bas.asm):00933 BRA LA6DF KEEP READING BLOCKS A6E5 2606 ( bas.asm):00934 LA6E5 BNE LA6ED GOT AN ERROR ON READING IN BLOCK A6E7 967C ( bas.asm):00935 LDA BLKTYP GET BLOCK NUMBER A6E9 40 ( bas.asm):00936 NEGA CHECK FOR LAST BLOCK A6EA 2B14 ( bas.asm):00937 BMI LA700 RETURN IF NOT AN END OF PROGRAM BLOCK A6EC 4A ( bas.asm):00938 DECA IF BLOCK NUMBER WAS $FF, ACCA IS NOW ZERO - THIS WILL ( bas.asm):00939 * CAUSE CLOAD TO IGNORE ERRORS IN THE ( bas.asm):00940 * BLOCKS WHICH IT IS SKIPPING WHILE ( bas.asm):00941 * LOOKING FOR THE CORRECT FILE NAME. A6ED 9781 ( bas.asm):00942 LA6ED STA CSRERR STORE ACCA TO ERROR FLAG A6EF 3262 ( bas.asm):00943 LEAS 2,S REMOVE RETURN ADDRESS FROM STACK A6F1 2012 ( bas.asm):00944 BRA LA705 TURN OFF MOTOR A6F3 B60400 ( bas.asm):00945 LA6F3 LDA VIDRAM GET FIRST CHAR ON SCREEN A6F6 8840 ( bas.asm):00946 EORA #$40 REVERSE THE VIDEO A6F8 D668 ( bas.asm):00947 LA6F8 LDB CURLIN GET CURLIN MSB A6FA 5C ( bas.asm):00948 INCB CHECK FOR DIRECT MODE A6FB 2603 ( bas.asm):00949 BNE LA700 BRANCH IF NOT DIRECT MODE A6FD B70400 ( bas.asm):00950 STA VIDRAM PUT IT ON SCREEN A700 39 ( bas.asm):00951 LA700 RTS ( bas.asm):00952 * READ A BLOCK FROM CASSETTE A701 8D79 ( bas.asm):00953 LA701 BSR CASON START TAPE, AND LOOK FOR A BUNCH OF $55 OR $AA BYTES A703 8D06 ( bas.asm):00954 BSR GETBLK READ A BLOCK A705 BDA7E9 ( bas.asm):00955 LA705 JSR >LA7E9 TURN OFF MOTOR A708 D681 ( bas.asm):00956 LDB CSRERR GET ERROR STATUS A70A 39 ( bas.asm):00957 RTS A70B 1A50 ( bas.asm):00958 GETBLK ORCC #$50 DISABLE IRQ,FIRQ A70D 8DE4 ( bas.asm):00959 BSR LA6F3 REVERSE VIDEO UPPER LEFT CHAR IF DIRECT MODE A70F 9E7E ( bas.asm):00960 LDX CBUFAD GET LOAD ADDRESS A711 4F ( bas.asm):00961 CLRA RESET ACCA A712 8D41 ( bas.asm):00962 LA712 BSR LA755 READ A BIT FROM TAPE, RETURN IT IN CARRY FLAG A714 46 ( bas.asm):00963 RORA PUT BIT IN MSB OF ACCA A715 813C ( bas.asm):00964 CMPA #$3C GET SYNC’ED ON $3C A717 26F9 ( bas.asm):00965 BNE LA712 NOT SYNC’ED YET A719 8D2E ( bas.asm):00966 BSR LA749 GET BLOCK NUMBER A71B 977C ( bas.asm):00967 STA BLKTYP SAVE IT A71D 8D2A ( bas.asm):00968 BSR LA749 GET CHAR COUNT A71F 977D ( bas.asm):00969 STA BLKLEN SAVE IT A721 9B7C ( bas.asm):00970 ADDA BLKTYP ACCUMULATE CHECKSUM A723 9780 ( bas.asm):00971 STA CCKSUM SAVE IT A725 967D ( bas.asm):00972 LDA BLKLEN GET BACK CHAR COUNT A727 9781 ( bas.asm):00973 STA CSRERR TEMP SAVE A729 2710 ( bas.asm):00974 BEQ LA73B NULL SET OF CHARACTERS A72B 8D1C ( bas.asm):00975 LA72B BSR LA749 GET BYTE FROM TAPE A72D A784 ( bas.asm):00976 STA ,X FILL MEMORY WITH TAPE DATA A72F A180 ( bas.asm):00977 CMPA ,X+ SEE IF WE READ BACK SAME THING A731 2611 ( bas.asm):00978 BNE LA744 BRANCH IF NOT PUTTING IT IN RAM A733 9B80 ( bas.asm):00979 ADDA CCKSUM ACCUMULATE CHECKSUM A735 9780 ( bas.asm):00980 STA CCKSUM TEMP STORE CHECKSUM A737 0A81 ( bas.asm):00981 DEC CSRERR DECR TEMP CHAR COUNT A739 26F0 ( bas.asm):00982 BNE LA72B GET ANOTHER CHARACTER A73B 8D0C ( bas.asm):00983 LA73B BSR LA749 GET CHECKSUM FROM TAPE A73D 9080 ( bas.asm):00984 SUBA CCKSUM COMPARE TO CALCULATED CHECKSUM A73F 2705 ( bas.asm):00985 BEQ LA746 BRANCH IF OK A741 8601 ( bas.asm):00986 LDA #1 CHECKSUM ERROR FLAG A743 8C ( bas.asm):00987 FCB SKP2 SKIP TWO BYTES A744 8602 ( bas.asm):00988 LA744 LDA #2 NON-RAM ERROR FLAG A746 9781 ( bas.asm):00989 LA746 STA CSRERR 1 IF CHECKSUM ERROR, 2 IF LOADING INTO NON-RAM A748 39 ( bas.asm):00990 RTS ( bas.asm):00991 * GET A BYTE FROM TAPE A749 8608 ( bas.asm):00992 LA749 LDA #8 8 BITS/BYTE A74B 9782 ( bas.asm):00993 STA CPULWD TEMP COUNTER A74D 8D06 ( bas.asm):00994 LA74D BSR LA755 READ A BIT FROM TAPE A74F 46 ( bas.asm):00995 RORA PUT IT INTO ACCA A750 0A82 ( bas.asm):00996 DEC CPULWD GOT ALL 8 BITS A752 26F9 ( bas.asm):00997 BNE LA74D NO A754 39 ( bas.asm):00998 RTS ( bas.asm):00999 * READ A BIT FROM THE TAPE A755 8D06 ( bas.asm):01000 LA755 BSR LA75D GET THE TIME BETWEEN TRANSITIONS A757 D683 ( bas.asm):01001 LDB CPERTM * GET PERIOD TIMER A759 5A ( bas.asm):01002 DECB * A75A D18F ( bas.asm):01003 CMPB CMPMID CMPMID CONTAINS 18 INITIALLY, AND IS USED TO DETERMINE ( bas.asm):01004 * WHETHER THE BIT READ IS A ONE OR ZERO ( bas.asm):01005 * IF THE PERIOD TIMER IS < 18, THE BIT ( bas.asm):01006 * IS CONSIDERED TO BE A ONE, IF > 18, IT IS ZERO A75C 39 ( bas.asm):01007 RTS ( bas.asm):01008 * MAIN TIMING LOOP A75D 0F83 ( bas.asm):01009 LA75D CLR CPERTM RESET PERIOD TIMER A75F 0D84 ( bas.asm):01010 TST CBTPHA CHECK TO SEE IF SYNC’ED ON THE HI-LO TRANSITION OR LO-HI A761 2610 ( bas.asm):01011 BNE LA773 BRANCH ON HI-LO TRANSITION ( bas.asm):01012 * LO - HI TRANSITION A763 8D07 ( bas.asm):01013 LA763 BSR LA76C READ CASSETTE INPUT BIT A765 25FC ( bas.asm):01014 BCS LA763 LOOP UNTIL IT IS LO A767 8D03 ( bas.asm):01015 LA767 BSR LA76C READ CASSETTE INPUT DATA A769 24FC ( bas.asm):01016 BCC LA767 WAIT UNTIL IT GOES HI A76B 39 ( bas.asm):01017 RTS ( bas.asm):01018 * READ CASSETTE INPUT BIT OF THE PIA A76C 0C83 ( bas.asm):01019 LA76C INC CPERTM INCREMENT PERIOD TIMER A76E F6FF20 ( bas.asm):01020 LDB PIA1 GET CASSETTE INPUT BIT A771 56 ( bas.asm):01021 RORB PUT CASSETTE BIT INTO THE CARRY FLAG A772 39 ( bas.asm):01022 RTS ( bas.asm):01023 * WAIT FOR HI - LO TRANSITION A773 8DF7 ( bas.asm):01024 LA773 BSR LA76C READ CASSETTE INPUT DATA A775 24FC ( bas.asm):01025 BCC LA773 LOOP UNTIL IT IS HI A777 8DF3 ( bas.asm):01026 LA777 BSR LA76C READ CASSETTE INPUT A779 25FC ( bas.asm):01027 BCS LA777 LOOP UNTIL IT IS LO A77B 39 ( bas.asm):01028 RTS ( bas.asm):01029 *** LOOK FOR THE SYNC BYTES - RETURN WITH ACCA = 0 IF SYNC’ED ( bas.asm):01030 *** ON HI - LO TRANSITION, ACCA = $A0 IF SYNC’ED ON THE ( bas.asm):01031 *** LO - HI TRANSITION OF THE INPUT SIGNAL FROM THE CASSETTE. A77C 1A50 ( bas.asm):01032 CASON ORCC #$50 DISABLE IRQ,FIRQ A77E 8D4A ( bas.asm):01033 BSR LA7CA TURN ON TAPE DECK MOTOR A780 0F82 ( bas.asm):01034 CLR CPULWD RESET UP TO SPEED COUNTER A782 8DDF ( bas.asm):01035 LA782 BSR LA763 WAIT FOR LO-HI TRANSITION A784 8D27 ( bas.asm):01036 LA784 BSR LA7AD WAIT FOR HI-LO TRANSITION A786 220F ( bas.asm):01037 BHI LA797 CASSETTE SPEED IN RANGE FOR 1200 HZ A788 8D1D ( bas.asm):01038 LA788 BSR LA7A7 WAIT FOR LO-HI TRANSITION A78A 250F ( bas.asm):01039 BCS LA79B CASSETTE SPEED IN RANGE FOR 2400 HZ A78C 0A82 ( bas.asm):01040 DEC CPULWD DECREMENT UP TO SPEED COUNTER IF SYNC’ED ON LO-HI A78E 9682 ( bas.asm):01041 LDA CPULWD GET IT A790 81A0 ( bas.asm):01042 CMPA #-96 HAVE THERE BEEN 96 CONSECUTIVE 1-0-1-0 PATTERNS A792 26EE ( bas.asm):01043 LA792 BNE LA782 NO A794 9784 ( bas.asm):01044 STA CBTPHA SAVE WHICH TRANSITION (HI-LO OR LO-HI) A796 39 ( bas.asm):01045 RTS A797 8D0E ( bas.asm):01046 LA797 BSR LA7A7 WAIT FOR LO-HI TRANSITION A799 22E9 ( bas.asm):01047 BHI LA784 BRANCH IF TWO CONSECUTIVE 1200 HZ PULSES A79B 8D10 ( bas.asm):01048 LA79B BSR LA7AD WAIT FOR HI-LO TRANSITION A79D 25E9 ( bas.asm):01049 BCS LA788 BRANCH IF TWO CONSECUTIVE 2400 HZ PULSES A79F 0C82 ( bas.asm):01050 INC CPULWD INCREMENT UP TO SPEED COUNTER IF SYNC’ED ON HI-LO A7A1 9682 ( bas.asm):01051 LDA CPULWD GET IT A7A3 8060 ( bas.asm):01052 SUBA #96 GOT ENOUGH SYNC PULSES? - ACCA WILL BE ZERO IF ( bas.asm):01053 * THERE HAVE BEEN 96 CONSECUTIVE 0-1-0-1 PATTERNS A7A5 20EB ( bas.asm):01054 BRA LA792 A7A7 0F83 ( bas.asm):01055 LA7A7 CLR CPERTM RESET PERIOD TIMER A7A9 8DBC ( bas.asm):01056 BSR LA767 WAIT UNTIL CASSETTE INPUT GOES HI A7AB 2004 ( bas.asm):01057 BRA LA7B1 A7AD 0F83 ( bas.asm):01058 LA7AD CLR CPERTM RESET PERIOD TIMER A7AF 8DC6 ( bas.asm):01059 BSR LA777 WAIT UNTIL CASSETTE GOES LO A7B1 D683 ( bas.asm):01060 LA7B1 LDB CPERTM GET PERIOD TIMER A7B3 D190 ( bas.asm):01061 CMPB CMP0 UPPER LIMIT OF 1200 HZ PERIOD A7B5 2203 ( bas.asm):01062 BHI LA7BA BRANCH IF CASSETTE SPEED IS TOO SLOW OR DROPOUT A7B7 D191 ( bas.asm):01063 CMPB CMP1 UPPER LIMIT OF 2400 HZ PERIOD A7B9 39 ( bas.asm):01064 RTS A7BA 0F82 ( bas.asm):01065 LA7BA CLR CPULWD RESET UP TO SPEED COUNTER A7BC 39 ( bas.asm):01066 RTS ( bas.asm):01067 * MOTOR A7BD 1F89 ( bas.asm):01068 MOTOR TFR A,B SAVE CURRENT TOKEN IN ACCB A7BF 9D9F ( bas.asm):01069 JSR GETNCH GET NEXT INPUT CHARACTER FROM BASIC A7C1 C1AA ( bas.asm):01070 CMPB #$AA ‘OFF’ TOKEN A7C3 2724 ( bas.asm):01071 BEQ LA7E9 YES A7C5 C188 ( bas.asm):01072 CMPB #$88 ‘ON’ TOKEN A7C7 BDA5C9 ( bas.asm):01073 JSR >LA5C9 SYNTAX ERROR IF IT WASN’T ‘ON’ OR ‘OFF’ A7CA B6FF21 ( bas.asm):01074 LA7CA LDA PIA1+1 READ CRA OF U4 A7CD 8A08 ( bas.asm):01075 ORA #$08 TURN ON BIT 3 WHICH ENABLES MOTOR DELAY A7CF 8D1F ( bas.asm):01076 BSR LA7F0 PUT IT BACK A7D1 9E8A ( bas.asm):01077 LA7D1 LDX ZERO GET READY TO WAIT A WHILE ( bas.asm):01078 * DELAY WHILE DECREMENTING X TO ZERO A7D3 301F ( bas.asm):01079 LA7D3 LEAX -1,X DECREMENT X A7D5 26FC ( bas.asm):01080 BNE LA7D3 BRANCH IF NOT ZERO A7D7 39 ( bas.asm):01081 RTS ( bas.asm):01082 * SEND SYNCLN $55’S TO TAPE A7D8 1A50 ( bas.asm):01083 WRLDR ORCC #$50 DISABLE INTERRUPTS A7DA 8DEE ( bas.asm):01084 BSR LA7CA TURN ON TAPE DECK MOTOR A7DC 9E92 ( bas.asm):01085 LDX SYNCLN GET COUNT OF $55’S TO SEND A7DE 8D48 ( bas.asm):01086 LA7DE BSR LA828 SEND $55 TO TAPE A7E0 301F ( bas.asm):01087 LEAX -1,X ARE ALL $55’S SENT? A7E2 26FA ( bas.asm):01088 BNE LA7DE NO A7E4 39 ( bas.asm):01089 RTS ( bas.asm):01090 * WRITE SYNC BYTES AND A BLOCK TO TAPE A7E5 8DF1 ( bas.asm):01091 LA7E5 BSR WRLDR WRITE SYNC BYTES TO TAPE A7E7 8D0B ( bas.asm):01092 LA7E7 BSR SNDBLK GO WRITE A BLOCK ( bas.asm):01093 * TURN OFF TAPE DECK MOTOR A7E9 1CAF ( bas.asm):01094 LA7E9 ANDCC #$AF ENABLE IRQ,FIRQ A7EB B6FF21 ( bas.asm):01095 LDA PIA1+1 READ CRA OF U4 A7EE 84F7 ( bas.asm):01096 ANDA #$F7 TURN OFF BIT 3 A7F0 B7FF21 ( bas.asm):01097 LA7F0 STA PIA1+1 PUT IT BACK A7F3 39 ( bas.asm):01098 RTS ( bas.asm):01099 * WRITE A BLOCK TO CASSETTE ( bas.asm):01100 * BUFFER SIZE IN BLKLEN ( bas.asm):01101 * STARTING ADDR IN CBUFAD ( bas.asm):01102 * BLOCK NUMBER IN BLKTYP A7F4 1A50 ( bas.asm):01103 SNDBLK ORCC #$50 DISABLE IRQ,FIRQ A7F6 D67D ( bas.asm):01104 LDB BLKLEN GET CHAR COUNT A7F8 D781 ( bas.asm):01105 STB CSRERR TEMP CHAR COUNT A7FA 967D ( bas.asm):01106 LDA BLKLEN GET CHAR COUNT (INCLUDED IN CHECKSUM) A7FC 2707 ( bas.asm):01107 BEQ LA805 BRANCH IF NO CHARACTERS - NULL A7FE 9E7E ( bas.asm):01108 LDX CBUFAD GET STARTING ADDRESS A800 AB80 ( bas.asm):01109 LA800 ADDA ,X+ CHECKSUM THE BUFFER A802 5A ( bas.asm):01110 DECB DONE ALL CHARACTERS? A803 26FB ( bas.asm):01111 BNE LA800 NO A805 9B7C ( bas.asm):01112 LA805 ADDA BLKTYP ADD IN THE BLOCK NUMBER A807 9780 ( bas.asm):01113 STA CCKSUM SAVE THE CHECKSUM A809 9E7E ( bas.asm):01114 LDX CBUFAD GET STARTING ADDRESS A80B 8D1B ( bas.asm):01115 BSR LA828 SEND $55 TO TAPE A80D 863C ( bas.asm):01116 LDA #$3C SYNC CHAR A80F 8D19 ( bas.asm):01117 BSR LA82A SEND TO TAPE A811 967C ( bas.asm):01118 LDA BLKTYP GET BLOCK NUMBER A813 8D15 ( bas.asm):01119 BSR LA82A SEND BLOCK NUMBER TO TAPE A815 967D ( bas.asm):01120 LDA BLKLEN GET CHARACTER COUNT A817 8D11 ( bas.asm):01121 BSR LA82A SEND CHAR COUNT TO TAPE A819 4D ( bas.asm):01122 TSTA SET FLAGS A81A 2708 ( bas.asm):01123 BEQ LA824 BRANCH IF CHAR COUNT IS ZERO A81C A680 ( bas.asm):01124 LA81C LDA ,X+ GET BUFFER CHARACTER A81E 8D0A ( bas.asm):01125 BSR LA82A SEND BUFFER TO TAPE A820 0A81 ( bas.asm):01126 DEC CSRERR DECR TEMP CHAR COUNT A822 26F8 ( bas.asm):01127 BNE LA81C NOT DONE YET A824 9680 ( bas.asm):01128 LA824 LDA CCKSUM GET CHECKSUM A826 8D02 ( bas.asm):01129 BSR LA82A SEND CHECKSUM TO TAPE A828 8655 ( bas.asm):01130 LA828 LDA #$55 SEND A $55 TO TAPE ( bas.asm):01131 * THIS ROUTINE SENDS THE A REG TO TAPE A82A 3402 ( bas.asm):01132 LA82A PSHS A SAVE OUTPUT CHARACTER A82C C601 ( bas.asm):01133 LDB #1 ACCB CONTAINS A MASK USED TO DETERMINE WHETHER A ( bas.asm):01134 * BIT IN THE OUTPUT CHARACTER IS HI OR LO A82E 9685 ( bas.asm):01135 LA82E LDA CLSTSN GET THE ENDING VALUE OF THE LAST SINE CYCLE A830 B7FF20 ( bas.asm):01136 STA DA STORE IN THE D/A CONVERTER A833 108EA85C ( bas.asm):01137 LDY #LA85C SINE LOOK-UP TABLE FOR GENERATING FSK A837 E5E4 ( bas.asm):01138 BITB ,S IS THE CURRENT BIT A ONE OR A ZERO ? A839 260D ( bas.asm):01139 BNE LA848 IF A 1, DO HIGH FREQ ( bas.asm):01140 * LOW FREQUENCY LOOK UP A83B A6A0 ( bas.asm):01141 LA83B LDA ,Y+ USE EVERY BYTE IN TABLE IF LOW FREQUENCY A83D 108CA880 ( bas.asm):01142 CMPY #LA85C+36 END OF SINE TABLE? A841 2712 ( bas.asm):01143 BEQ LA855 YES A843 B7FF20 ( bas.asm):01144 STA DA SEND NEXT VALUE TO D/A CONVERTER A846 20F3 ( bas.asm):01145 BRA LA83B GET NEXT VALUE ( bas.asm):01146 * HIGH FREQUENCY LOOK UP A848 A6A1 ( bas.asm):01147 LA848 LDA ,Y++ USE EVERY OTHER BYTE IF HIGH FREQUENCY A84A 108CA880 ( bas.asm):01148 CMPY #LA85C+36 END OF SINE TABLE? A84E 2705 ( bas.asm):01149 BEQ LA855 YES A850 B7FF20 ( bas.asm):01150 STA DA SEND NEXT VALUE TO D/A CONVERTER A853 20F3 ( bas.asm):01151 BRA LA848 GET NEXT VALUE A855 9785 ( bas.asm):01152 LA855 STA CLSTSN SAVE THE LAST VALUE SENT TO THE D/A CONVERTER A857 58 ( bas.asm):01153 ASLB SHIFT MASK BIT LEFT A858 24D4 ( bas.asm):01154 BCC LA82E DONE WHEN MASK BIT IS SHIFTED INTO CARRY FLAG A85A 3582 ( bas.asm):01155 PULS A,PC RESTORE OUTPUT CHARACTER AND RETURN ( bas.asm):01156 * THIS IS A LOOK-UP TABLE OF SINE VALUES FOR THE TAPE DECK FSK ( bas.asm):01157 * (BIT 1 IS USED TO KEEP THE SERIAL OUTPUT MARKING) A85C 8292AABACADA ( bas.asm):01158 LA85C FCB $82,$92,$AA,$BA,$CA,$DA A862 EAF2FAFAFAF2 ( bas.asm):01159 FCB $EA,$F2,$FA,$FA,$FA,$F2 A868 EADACABAAA92 ( bas.asm):01160 FCB $EA,$DA,$CA,$BA,$AA,$92 A86E 7A6A52423222 ( bas.asm):01161 FCB $7A,$6A,$52,$42,$32,$22 A874 120A0202020A ( bas.asm):01162 FCB $12,$0A,$02,$02,$02,$0A A87A 12223242526A ( bas.asm):01163 FCB $12,$22,$32,$42,$52,$6A ( bas.asm):01164 * SET A880 8D3F ( bas.asm):01165 SET BSR LA8C1 GET ABSOLUTE SCREEN POSITION OF GRAPHICS BLOCK A882 3410 ( bas.asm):01166 PSHS X SAVE CHARACTER LOCATION A884 BDB738 ( bas.asm):01167 JSR >LB738 SYNTAX CHECK FOR COMMA - RETURN EXPR VALUE IN ACCB A887 3510 ( bas.asm):01168 PULS X REGET CHARACTER LOCATION A889 C108 ( bas.asm):01169 CMPB #8 NINE ALLOWABLE COLORS A88B 2248 ( bas.asm):01170 BHI LA8D5 ILLEGAL COLOR - ‘ILLEGAL FUNCTION CALL’ A88D 5A ( bas.asm):01171 DECB CHANGE COLOR NUMBERS FROM 0-8 TO (-1 TO 7) A88E 2B05 ( bas.asm):01172 BMI LA895 BRANCH IF SET (X,Y,0) A890 8610 ( bas.asm):01173 LDA #$10 $10 OFFSET BETWEEN DIFFERENT COLORS A892 3D ( bas.asm):01174 MUL MULT BY COLOR FOR TOTAL OFFSET A893 2008 ( bas.asm):01175 BRA LA89D GO SAVE THE COLOR A895 E684 ( bas.asm):01176 LA895 LDB ,X GET CURRENT CHAR FROM SCREEN A897 2A03 ( bas.asm):01177 BPL LA89C BRANCH IF NOT GRAPHIC A899 C470 ( bas.asm):01178 ANDB #$70 SAVE ONLY THE COLOR INFO A89B 21 ( bas.asm):01179 FCB SKP1 SKIP THE NEXT BYTE A89C 5F ( bas.asm):01180 LA89C CLRB RESET ASCII BLOCK TO ZERO COLOR A89D 3404 ( bas.asm):01181 LA89D PSHS B SAVE COLOR INFO A89F 8D6C ( bas.asm):01182 BSR LA90D SYNTAX CHECK FOR ‘)‘ A8A1 A684 ( bas.asm):01183 LDA ,X GET CURRENT CHARACTER FROM SCREEN A8A3 2B01 ( bas.asm):01184 BMI LA8A6 BRANCH IF GRAPHIC A8A5 4F ( bas.asm):01185 CLRA RESET ASCII CHARACTER TO ALL PIXELS OFF A8A6 840F ( bas.asm):01186 LA8A6 ANDA #$0F SAVE ONLY PIXEL ON/OFF INFO A8A8 9A86 ( bas.asm):01187 ORA GRBLOK ‘OR’ WITH WHICH PIXEL TO TURN ON A8AA AAE0 ( bas.asm):01188 ORA ,S+ ‘OR’ IN THE COLOR A8AC 8A80 ( bas.asm):01189 LA8AC ORA #$80 FORCE GRAPHIC A8AE A784 ( bas.asm):01190 STA ,X DISPLAY IT ON THE SCREEN A8B0 39 ( bas.asm):01191 RTS ( bas.asm):01192 * RESET A8B1 8D0E ( bas.asm):01193 RESET BSR LA8C1 GET ABSOLUTE SCREEN ADDRESS OF THIS CHARACTER A8B3 8D58 ( bas.asm):01194 BSR LA90D SYNTAX CHECK FOR ")" A8B5 4F ( bas.asm):01195 CLRA * ACCA=ZERO GRAPHIC BLOCK - FOR USE IN CASE YOU’RE ( bas.asm):01196 * TRYING TO RESET A NON GRAPHIC BLOCK A8B6 E684 ( bas.asm):01197 LDB ,X GET CURRENT CHAR FROM SCREEN A8B8 2AF2 ( bas.asm):01198 BPL LA8AC BRANCH IF NON-GRAPHIC A8BA 0386 ( bas.asm):01199 COM GRBLOK INVERT PIXEL ON/OFF MASK A8BC D486 ( bas.asm):01200 ANDB GRBLOK AND IT WITH CURRENT ON/OFF DATA A8BE E784 ( bas.asm):01201 STB ,X DISPLAY IT A8C0 39 ( bas.asm):01202 RTS ( bas.asm):01203 *** THIS ROUTINE WILL CHECK SYNTAX AND CHECK FOR LEGAL VALUES ( bas.asm):01204 *** OF SET,RESET & POINT HORIZONTAL AND VERTICAL PARAMETERS ( bas.asm):01205 *** AND RETURN THEIR ABSOLUTE SCREEN ADDRESS IN THE X REGISTER ( bas.asm):01206 *** WHICH OF THE FOUR PIXELS OF THE GRAPHIC BLOCK SELECTED ( bas.asm):01207 *** IS RETURNED IN GRBLOK. A8C1 BDB26A ( bas.asm):01208 LA8C1 JSR >LB26A SYNTAX CHECK FOR "(" A8C4 BD019D ( bas.asm):01209 LA8C4 JSR >RVEC21 HOOK INTO RAM A8C7 BDB70B ( bas.asm):01210 JSR >LB70B EVALUATE EXPRESSION - RETURN VALUE IN ACCB A8CA C13F ( bas.asm):01211 CMPB #63 ONLY 64 HORIZONTAL GRAPHIC BLOCKS A8CC 2207 ( bas.asm):01212 BHI LA8D5 ‘ILLEGAL FUNCTION CALL’ A8CE 3404 ( bas.asm):01213 PSHS B SAVE HOR COORD A8D0 BDB738 ( bas.asm):01214 JSR >LB738 SYNTAX CHECK FOR COMMA AND EVALUATE EXPR A8D3 C11F ( bas.asm):01215 CMPB #31 ONLY 32 VERTICAL BLOCKS A8D5 2271 ( bas.asm):01216 LA8D5 BHI LA948 ‘ILLEGAL FUNCTION CALL’ A8D7 3404 ( bas.asm):01217 PSHS B SAVE VERT COORD A8D9 54 ( bas.asm):01218 LSRB DIVIDE BY TWO BECAUSE THERE ARE 2 GRAPHIC PIXELS/HOR ( bas.asm):01219 * CHARACTER POSITION (BYTE) A8DA 8620 ( bas.asm):01220 LDA #32 32 BYTES/ROW A8DC 3D ( bas.asm):01221 MUL GET ROW OFFSET OF CHAR POSITION A8DD 8E0400 ( bas.asm):01222 LDX #VIDRAM SCREEN BUFFER ADDRESS A8E0 308B ( bas.asm):01223 LEAX D,X ADD ROW OFFSET TO SCREEN BUFFER ADDRESS A8E2 E661 ( bas.asm):01224 LDB 1,S GET HOR COORD A8E4 54 ( bas.asm):01225 LSRB 2 VERTICAL PIXELS/CHARACTER POSITION A8E5 3A ( bas.asm):01226 ABX ADD VERTICAL OFFSET TO CHARACTER ADDRESS A8E6 3506 ( bas.asm):01227 PULS A,B GET VER COORD TO ACCA, HOR COORD TO ACCB A8E8 8401 ( bas.asm):01228 ANDA #1 KEEP ONLY LSB OF VER COORD A8EA 56 ( bas.asm):01229 RORB LSB OF HOR COORD TO CARRY FLAG A8EB 49 ( bas.asm):01230 ROLA LSB OF HOR TO BIT 0 OF ACCA A8EC C610 ( bas.asm):01231 LDB #$10 MAKE A BIT MASK - TURN ON BIT 4 A8EE 54 ( bas.asm):01232 LA8EE LSRB SHIFT IT RIGHT ONCE A8EF 4A ( bas.asm):01233 DECA SHIFTED IT ENOUGH? A8F0 2AFC ( bas.asm):01234 BPL LA8EE NO A8F2 D786 ( bas.asm):01235 STB GRBLOK ACCB=8 FOR UPPER LEFT PIXEL, =4 FOR UPPER RIGHT ( bas.asm):01236 * PIXEL =2 FOR LOWER LEFT, =1 FOR LOWER RIGHT A8F4 39 ( bas.asm):01237 RTS ( bas.asm):01238 * POINT A8F5 8DCD ( bas.asm):01239 POINT BSR LA8C4 EVALUATE EXPRESSION A8F7 C6FF ( bas.asm):01240 LDB #$FF INITIAL VALUE OF ON/OFF FLAG = OFF (FALSE) A8F9 A684 ( bas.asm):01241 LDA ,X GET CURRENT GRAPHIC CHARACTER A8FB 2A0D ( bas.asm):01242 BPL LA90A BRANCH IF NON-GRAPHIC (ALWAYS FALSE) A8FD 9486 ( bas.asm):01243 ANDA GRBLOK ‘AND’ CURR CHAR WITH THE PIXEL IN QUESTION A8FF 2708 ( bas.asm):01244 BEQ LA909 BRANCH IF THE ELEMENT IS OFF A901 E684 ( bas.asm):01245 LDB ,X GET CURRENT CHARACTER A903 54 ( bas.asm):01246 LSRB * SHIFT RIGHT A904 54 ( bas.asm):01247 LSRB * SHIFT RIGHT A905 54 ( bas.asm):01248 LSRB * SHIFT RIGHT A906 54 ( bas.asm):01249 LSRB * SHIFT RIGHT - NOW THE HIGH NIBBLE IS IN THE LOW NIBBLE A907 C407 ( bas.asm):01250 ANDB #7 KEEP ONLY THE COLOR INFO A909 5C ( bas.asm):01251 LA909 INCB ACCB=0 FOR NO COLOR, =1 T0 8 OTHERWISE A90A BDA5E8 ( bas.asm):01252 LA90A JSR >LA5E8 CONVERT ACCB TO FLOATING POINT A90D 7EB267 ( bas.asm):01253 LA90D JMP >LB267 SYNTAX CHECK FOR ‘)‘ ( bas.asm):01254 * CLS A910 BD01A0 ( bas.asm):01255 CLS JSR >RVEC22 HOOK INTO RAM A913 2713 ( bas.asm):01256 BEQ LA928 BRANCH IF NO ARGUMENT A915 BDB70B ( bas.asm):01257 JSR >LB70B CALCULATE ARGUMENT, RETURN VALUE IN ACCB A918 C108 ( bas.asm):01258 CMPB #8 VALID ARGUMENT? A91A 221B ( bas.asm):01259 BHI LA937 IF ARGUMENT >8, GO PRINT ‘MICROSOFT’ A91C 5D ( bas.asm):01260 TSTB SET FLAGS A91D 2706 ( bas.asm):01261 BEQ LA925 COLOR 0 A91F 5A ( bas.asm):01262 DECB ACCB NOW CONTAINS 0-7 A920 8610 ( bas.asm):01263 LDA #$10 EACH GRAPHIC BLOCK SEPARATED BY $10 FROM ONE ANOTHER A922 3D ( bas.asm):01264 MUL ACCB CONTAINS ONE OF 8 OFFSETS A923 CA0F ( bas.asm):01265 ORB #$0F BITS 0-3 SET FOR SOLID COLOR GRAPHIC BLOCK A925 CA80 ( bas.asm):01266 LA925 ORB #$80 BIT 7 SET FOR GRAPHICS A927 8C ( bas.asm):01267 FCB SKP2 SKIP TWO BYTES ( bas.asm):01268 * CLEAR SCREEN A928 C660 ( bas.asm):01269 LA928 LDB #$60 BLANK A92A 8E0400 ( bas.asm):01270 LDX #VIDRAM GET ADDR OF START OF SCREEN BUFFER A92D 9F88 ( bas.asm):01271 LA92D STX CURPOS SAVE IT IN CURPOS A92F E780 ( bas.asm):01272 LA92F STB ,X+ FILL SCREEN WITH CONTENTS OF ACCB A931 8C05FF ( bas.asm):01273 CMPX #VIDRAM+511 END OF SCREEN? A934 23F9 ( bas.asm):01274 BLS LA92F NO A936 39 ( bas.asm):01275 RTS A937 8DEF ( bas.asm):01276 LA937 BSR LA928 CLEAR SCREEN A939 8EA165 ( bas.asm):01277 LDX #LA166-1 * A93C 7EB99C ( bas.asm):01278 JMP >LB99C * PRINT ‘MICROSOFT’ A93F BDB26D ( bas.asm):01279 LA93F JSR >LB26D SYNTAX CHECK FOR A COMMA A942 BDB70B ( bas.asm):01280 LA942 JSR >LB70B EVALUATE EXPRESSION, RETURN VALUE IN ACCB A945 5D ( bas.asm):01281 TSTB SET FLAGS A946 263C ( bas.asm):01282 BNE LA984 RETURN IF NON ZERO A948 7EB44A ( bas.asm):01283 LA948 JMP >LB44A ‘ILLEGAL FUNCTION CALL’ IF ZERO ( bas.asm):01284 * SOUND A94B 8DF5 ( bas.asm):01285 SOUND BSR LA942 EVALUATE EXPRESSION (FREQUENCY) A94D D78C ( bas.asm):01286 STB SNDTON SAVE IT A94F 8DEE ( bas.asm):01287 BSR LA93F EVALUATE EXPRESSION (SOUND LENGTH) A951 8604 ( bas.asm):01288 LA951 LDA #4 CONSTANT FACTOR A953 3D ( bas.asm):01289 MUL EXPAND LENGTH EXPRESSION A954 DD8D ( bas.asm):01290 STD SNDDUR SAVE LENGTH OF SOUND A956 B6FF03 ( bas.asm):01291 LDA PIA0+3 GET CONTROL REGISTER OF PIA0, PORT B A959 8A01 ( bas.asm):01292 ORA #1 * A95B B7FF03 ( bas.asm):01293 STA PIA0+3 * ENABLE 60 HZ INTERRUPT (PIA0 IRQ) A95E 0F08 ( bas.asm):01294 CLR ARYDIS CLEAR THE ARRAY DISABLE FLAG - FOR NO APPARENT REASON A960 8D40 ( bas.asm):01295 BSR LA9A2 CONNECT D/A SOUND INPUT TO OUTPUT OF SOUND MUX A962 8D12 ( bas.asm):01296 BSR LA976 TURN ON AUDIO - ENABLE SOUND MUX A964 8D1F ( bas.asm):01297 LA964 BSR LA985 STORE 2.5 VOLTS TO D/A AND WAIT A966 86FE ( bas.asm):01298 LDA #$FE DATA TO MAKE D/A OUT = 5 VOLTS A968 8D1D ( bas.asm):01299 BSR LA987 STORE IT TO D/A AND WAIT A96A 8D19 ( bas.asm):01300 BSR LA985 STORE 2.5 VOLTS TO D/A AND WAIT A96C 8602 ( bas.asm):01301 LDA #2 DATA TO MAKE D/A OUT = 0 VOLTS A96E 8D17 ( bas.asm):01302 BSR LA987 STORE IT TO D/A AND WAIT A970 9E8D ( bas.asm):01303 LDX SNDDUR * IS SNDDUR = 0? - THE IRQ INTERRUPT SERVICING ( bas.asm):01304 * * ROUTINE WILL DECREMENT SNDDUR A972 26F0 ( bas.asm):01305 BNE LA964 NOT DONE YET ( bas.asm):01306 * THESE ROUTINES WILL ENABLE/DISABLE THE ANALOG MUX A974 4F ( bas.asm):01307 LA974 CLRA BIT 3 OF ACCA = 0, DISABLE ANALOG MUX A975 8C ( bas.asm):01308 FCB SKP2 SKIP TWO BYTES A976 8608 ( bas.asm):01309 LA976 LDA #8 BIT 3 OF ACCA = 1, ENABLE ANALOG MUX A978 A7E2 ( bas.asm):01310 STA ,-S SAVE ACCA ON STACK A97A B6FF23 ( bas.asm):01311 LDA PIA1+3 GET CONTROL REGISTER OF PIA1, PORT B A97D 84F7 ( bas.asm):01312 ANDA #$F7 RESET BIT 3 A97F AAE0 ( bas.asm):01313 ORA ,S+ OR IN BIT 3 OF ACCA (SAVED ON STACK) A981 B7FF23 ( bas.asm):01314 STA PIA1+3 SET/RESET CB2 OF U4 A984 39 ( bas.asm):01315 LA984 RTS A985 867E ( bas.asm):01316 LA985 LDA #$7E DATA VALUE TO MAKE D/A OUTPUT = 2.5 VOLTS A987 B7FF20 ( bas.asm):01317 LA987 STA DA STORE IT IN D/A A98A 968C ( bas.asm):01318 LDA SNDTON GET FREQUENCY A98C 4C ( bas.asm):01319 LA98C INCA INCREMENT IT A98D 26FD ( bas.asm):01320 BNE LA98C LOOP UNTIL DONE A98F 39 ( bas.asm):01321 RTS ( bas.asm):01322 * AUDIO A990 1F89 ( bas.asm):01323 AUDIO TFR A,B SAVE ON/OFF TOKEN IN ACCB A992 9D9F ( bas.asm):01324 JSR GETNCH MOVE BASIC POINTER TO NEXT CHARACTER A994 C1AA ( bas.asm):01325 CMPB #$AA ‘OFF’ TOKEN? A996 27DC ( bas.asm):01326 BEQ LA974 YES - TURN OFF ANALOG MUX A998 C088 ( bas.asm):01327 SUBB #$88 ‘ON’ TOKEN A99A BDA5C9 ( bas.asm):01328 JSR >LA5C9 SYNTAX ERROR IF NOT ‘OFF’ OR ‘ON’ A99D 5C ( bas.asm):01329 INCB NOW ACCB = 1 A99E 8D02 ( bas.asm):01330 BSR LA9A2 ROUTE CASSETTE TO SOUND MULTIPLEXER A9A0 20D4 ( bas.asm):01331 BRA LA976 ENABLE SOUND MULTIPLEXER ( bas.asm):01332 * THIS ROUTINE WILL TRANSFER BIT 0 OF ACCB TO SEL 1 OF ( bas.asm):01333 * THE ANALOG MULTIPLEXER AND BIT 1 OF ACCB TO SEL 2. A9A2 CEFF01 ( bas.asm):01334 LA9A2 LDU #PIA0+1 POINT U TO PIA0 CONTROL REG A9A5 8D00 ( bas.asm):01335 BSR LA9A7 PROGRAM 1ST CONTROL REGISTER A9A7 A6C4 ( bas.asm):01336 LA9A7 LDA ,U GET PIA CONTROL REGISTER A9A9 84F7 ( bas.asm):01337 ANDA #$F7 RESET CA2 (CB2) OUTPUT BIT A9AB 57 ( bas.asm):01338 ASRB SHIFT ACCB BIT 0 TO CARRY FLAG A9AC 2402 ( bas.asm):01339 BCC LA9B0 BRANCH IF CARRY = ZERO A9AE 8A08 ( bas.asm):01340 ORA #$08 FORCE BIT 3=1; SET CA2(CB2) A9B0 A7C1 ( bas.asm):01341 LA9B0 STA ,U++ PUT IT BACK IN THE PIA CONTROL REGISTER A9B2 39 ( bas.asm):01342 RTS ( bas.asm):01343 * IRQ SERVICE A9B3 B6FF03 ( bas.asm):01344 BIRQSV LDA PIA0+3 CHECK FOR 60HZ INTERRUPT A9B6 2A0D ( bas.asm):01345 BPL LA9C5 RETURN IF 63.5 MICROSECOND INTERRUPT A9B8 B6FF02 ( bas.asm):01346 LDA PIA0+2 RESET PIA0, PORT B INTERRUPT FLAG A9BB BE008D ( bas.asm):01347 LA9BB LDX >SNDDUR GET INTERRUPT TIMER (SOUND COMMAND) A9BE 2705 ( bas.asm):01348 BEQ LA9C5 RETURN IF TIMER = 0 A9C0 301F ( bas.asm):01349 LEAX -1,X DECREMENT TIMER IF NOT = 0 A9C2 BF008D ( bas.asm):01350 STX >SNDDUR SAVE NEW TIMER VALUE A9C5 3B ( bas.asm):01351 LA9C5 RTI RETURN FROM INTERRUPT ( bas.asm):01352 * JOYSTK A9C6 BDB70E ( bas.asm):01353 JOYSTK JSR >LB70E EVALUATE JOYSTICK ARGUMENT A9C9 C103 ( bas.asm):01354 CMPB #3 TWO JOYSTICKS MAXIMUM (HOR & VER FOR EACH) A9CB 10220A7B ( bas.asm):01355 LBHI LB44A ‘ILLEGAL FUNCTION CALL’ IF >3 A9CF 5D ( bas.asm):01356 TSTB SET FLAGS A9D0 2602 ( bas.asm):01357 BNE LA9D4 GET NEW DATA ONLY IF JOYSTK(0) A9D2 8D0A ( bas.asm):01358 BSR GETJOY GET NEW DATA FOR ALL JOYSTICKS A9D4 8E015A ( bas.asm):01359 LA9D4 LDX #POTVAL POINT X TO JOYSTICK DATA BUFFER A9D7 D653 ( bas.asm):01360 LDB FPA0+3 WHICH JOYSTICK DID YOU WANT? A9D9 E685 ( bas.asm):01361 LDB B,X PUT ITS DATA INTO ACCB A9DB 7EB4F3 ( bas.asm):01362 JMP >LB4F3 CONVERT ACCB INTO FLOATING POINT NUMBER ( bas.asm):01363 * ( bas.asm):01364 * JOYSTK DATA AT: ( bas.asm):01365 * $15A $15B $15C $15D ( bas.asm):01366 * LEFT LEFT RIGHT RIGHT ( bas.asm):01367 * VERT HORIZ VERT HORIZ ( bas.asm):01368 ** THIS IS A 6 BIT SOFTWARE A/D CONVERSION ROUTINE A9DE 8D94 ( bas.asm):01369 GETJOY BSR LA974 TURN OFF AUDIO A9E0 8E015E ( bas.asm):01370 LDX #POTVAL+4 POINT X TO JOYSTICK DATA BUFFER A9E3 C603 ( bas.asm):01371 LDB #3 GET FOUR SETS OF DATA (4 JOYSTICKS) A9E5 860A ( bas.asm):01372 LA9E5 LDA #10 10 TRIES TO GET STABLE READING A9E7 EDE3 ( bas.asm):01373 STD ,--S STORE JOYSTICK NUMBER AND TRY NUMBER ON THE STACK A9E9 8DB7 ( bas.asm):01374 BSR LA9A2 SET THE SELECT INPUTS ON ANALOG MULTIPLEXER A9EB CC4080 ( bas.asm):01375 LA9EB LDD #$4080 ACCA IS A SHIFT COUNTER OF HOW MANY BITS TO CONVERT ( bas.asm):01376 * AND WIlL BE $40 (6 BITS) FOR THE COLOR ( bas.asm):01377 * COMPUTER. ACCB CONTAINS A VALUE EQUAL TO 1/2 ( bas.asm):01378 * THE CURRENT TRIAL DIFFERENCE. INITIALLY =$80 (2.5 VOLTS). A9EE A7E2 ( bas.asm):01379 LA9EE STA ,-S TEMP STORE SHIFT COUNTER ON STACK A9F0 CA02 ( bas.asm):01380 ORB #2 KEEP RS 232 SERIAL OUT MARKING A9F2 F7FF20 ( bas.asm):01381 STB DA STORE IN D/A CONVERTER A9F5 C802 ( bas.asm):01382 EORB #2 PUT R5232 OUTPUT BIT BACK TO ZERO A9F7 B6FF00 ( bas.asm):01383 LDA PIA0 HIGH BIT IS FROM COMPARATOR A9FA 2B03 ( bas.asm):01384 BMI LA9FF BRANCH IF COMPARATOR OUTPUT IS HIGH A9FC E0E4 ( bas.asm):01385 SUBB ,S SUBTRACT 1/2 THE CURRENT TRIAL DIFFERENCE A9FE 8C ( bas.asm):01386 FCB SKP2 SKIP NEXT TWO BYTES A9FF EBE4 ( bas.asm):01387 LA9FF ADDB ,S ADD 1/2 OF THE CURRENT TRIAL DIFFERENCE AA01 A6E0 ( bas.asm):01388 LDA ,S+ PULL SHIFT COUNTER OFF THE STACK AA03 44 ( bas.asm):01389 LSRA SHIFT IT RIGHT ONCE AA04 8101 ( bas.asm):01390 CMPA #1 HAVE ALL THE SHIFTS BEEN DONE? AA06 26E6 ( bas.asm):01391 BNE LA9EE NO AA08 54 ( bas.asm):01392 LSRB YES - THE DATA IS IN THE TOP 6 BYTES OF ACCB AA09 54 ( bas.asm):01393 LSRB PUT IT INTO THE BOTTOM SIX AA0A E11F ( bas.asm):01394 CMPB -1,X IS THIS VALUE EQUAL TO THE LAST TRY? AA0C 2704 ( bas.asm):01395 BEQ LAA12 YES - GO SAVE THE VALUE AA0E 6AE4 ( bas.asm):01396 DEC ,S NO-DECREMENT TRIES COUNTER AA10 26D9 ( bas.asm):01397 BNE LA9EB BRANCH IF YOU HAVEN’T TRIED 10 TIMES ( bas.asm):01398 * IF YOU FALL THROUGH HERE YOU HAVE TRIED TO GET THE SAME READING ( bas.asm):01399 * 10 TIMES AND NEVER GOTTEN A MATCH. AS A RESULT YOU JUST FALL ( bas.asm):01400 * THROUGH AND USE THE LAST VALUE READ IN. AA12 E782 ( bas.asm):01401 LAA12 STB ,-X SAVE THE DIGITIZED VALUE AA14 ECE1 ( bas.asm):01402 LDD ,S++ GET THE NUMBER OF THE JOYSTICK JUST DONE AA16 5A ( bas.asm):01403 DECB DECR JOYSTK NUMBER AA17 2ACC ( bas.asm):01404 BPL LA9E5 BRANCH IF THE LAST ONE DONE WASN’T NUMBER 0 AA19 39 ( bas.asm):01405 RTS ( bas.asm):01406 * ( bas.asm):01407 * SET CARRY IF NUMERIC - RETURN WITH ( bas.asm):01408 * ZERO FLAG SET IF ACCA = 0 OR 3A(:) - END ( bas.asm):01409 * OF BASIC LINE OR SUB LINE AA1A 813A ( bas.asm):01410 BROMHK CMPA #'9+1 IS THIS CHARACTER >=(ASCII 9)+1? AA1C 240A ( bas.asm):01411 BHS LAA28 BRANCH IF > 9; Z SET IF = COLON AA1E 8120 ( bas.asm):01412 CMPA #SPACE SPACE? AA20 2602 ( bas.asm):01413 BNE LAA24 NO - SET CARRY IF NUMERIC AA22 0E9F ( bas.asm):01414 JMP GETNCH IF SPACE, GET NECT CHAR (IGNORE SPACES) AA24 8030 ( bas.asm):01415 LAA24 SUBA #'0 * SET CARRY IF AA26 80D0 ( bas.asm):01416 SUBA #-'0 * CHARACTER > ASCII 0 AA28 39 ( bas.asm):01417 LAA28 RTS ( bas.asm):01418 * ( bas.asm):01419 * DISPATCH TABLE FOR SECONDARY FUNCTIONS ( bas.asm):01420 * TOKENS ARE PRECEEDED BY $FF TOKEN # AA29 BC7A ( bas.asm):01421 LAA29 FDB SGN SGN 80 AA2B BCEE ( bas.asm):01422 FDB INT INT 81 AA2D BC93 ( bas.asm):01423 FDB ABS ABS 82 AA2F 0112 ( bas.asm):01424 FDB $0112 USR 83 AA31 BF1F ( bas.asm):01425 FDB RND RND 84 AA33 BF78 ( bas.asm):01426 FDB SIN SIN 85 AA35 B750 ( bas.asm):01427 FDB PEEK PEEK 86 AA37 B681 ( bas.asm):01428 FDB LEN LEN 87 AA39 B4FD ( bas.asm):01429 FDB STR STR$ 88 AA3B B716 ( bas.asm):01430 FDB VAL VAL 89 AA3D B6A0 ( bas.asm):01431 FDB ASC ASC 8A AA3F B68C ( bas.asm):01432 FDB CHR CHR$ 8B AA41 A5CE ( bas.asm):01433 FDB EOF EOF 8C AA43 A9C6 ( bas.asm):01434 FDB JOYSTK JOYSTK 8D AA45 B6AB ( bas.asm):01435 FDB LEFT LEFT$ 8E AA47 B6C8 ( bas.asm):01436 FDB RIGHT RIGHT$ 8F AA49 B6CF ( bas.asm):01437 FDB MID MID$ 90 AA4B A8F5 ( bas.asm):01438 FDB POINT POINT 91 AA4D A564 ( bas.asm):01439 FDB INKEY INKEY$ 92 AA4F B4EE ( bas.asm):01440 FDB MEM MEM 93 ( bas.asm):01441 * ( bas.asm):01442 * THIS TABLE CONTAINS PRECEDENCES AND DISPATCH ADDRESSES FOR ARITHMETIC ( bas.asm):01443 * AND LOGICAL OPERATORS - THE NEGATION OPERATORS DO NOT ACT ON TWO OPERANDS ( bas.asm):01444 * S0 THEY ARE NOT LISTED IN THIS TABLE. THEY ARE TREATED SEPARATELY IN THE ( bas.asm):01445 * EXPRESSION EVALUATION ROUTINE. THEY ARE: ( bas.asm):01446 * UNARY NEGATION (-), PRECEDENCE &7D AND LOGICAL NEGATION (NOT), PRECEDENCE $5A ( bas.asm):01447 * THE RELATIONAL OPERATORS < > = ARE ALSO NOT LISTED, PRECEDENCE $64. ( bas.asm):01448 * A PRECEDENCE VALUE OF ZERO INDICATES END OF EXPRESSION OR PARENTHESES ( bas.asm):01449 * AA51 79 ( bas.asm):01450 LAA51 FCB $79 AA52 B9C5 ( bas.asm):01451 FDB LB9C5 + AA54 79 ( bas.asm):01452 FCB $79 AA55 B9BC ( bas.asm):01453 FDB LB9BC - AA57 7B ( bas.asm):01454 FCB $7B AA58 BACC ( bas.asm):01455 FDB $BACC * AA5A 7B ( bas.asm):01456 FCB $7B AA5B BB91 ( bas.asm):01457 FDB $BB91 / AA5D 7F ( bas.asm):01458 FCB $7F AA5E 011D ( bas.asm):01459 FDB $011D EXPONENTIATION AA60 50 ( bas.asm):01460 FCB $50 AA61 B2D5 ( bas.asm):01461 FDB $B2D5 AND AA63 46 ( bas.asm):01462 FCB $46 AA64 B2D4 ( bas.asm):01463 FDB LB2D4 OR ( bas.asm):01464 * ( bas.asm):01465 * THIS IS THE RESERVED WORD TABLE ( bas.asm):01466 * TOKEN # AA66 464FD2 ( bas.asm):01467 LAA66 FCS 'FOR' 80 AA69 47CF ( bas.asm):01468 FCS 'GO' 81 AA6B 5245CD ( bas.asm):01469 FCS 'REM' 82 AA6E A7 ( bas.asm):01470 FCB ''+$80 83 AA6F 454C53C5 ( bas.asm):01471 FCS 'ELSE' 84 AA73 49C6 ( bas.asm):01472 FCS 'IF' 85 AA75 444154C1 ( bas.asm):01473 FCS 'DATA' 86 AA79 5052494ED4 ( bas.asm):01474 FCS 'PRINT' 87 AA7E 4FCE ( bas.asm):01475 FCS 'ON' 88 AA80 494E5055D4 ( bas.asm):01476 FCS 'INPUT' 89 AA85 454EC4 ( bas.asm):01477 FCS 'END' 8A AA88 4E4558D4 ( bas.asm):01478 FCS 'NEXT' 8B AA8C 4449CD ( bas.asm):01479 FCS 'DIM' 8C AA8F 524541C4 ( bas.asm):01480 FCS 'READ' 8D AA93 5255CE ( bas.asm):01481 FCS 'RUN' 8E AA96 524553544F52C5 ( bas.asm):01482 FCS 'RESTORE' 8F AA9D 5245545552CE ( bas.asm):01483 FCS 'RETURN' 90 AAA3 53544FD0 ( bas.asm):01484 FCS 'STOP' 91 AAA7 504F4BC5 ( bas.asm):01485 FCS 'POKE' 92 AAAB 434F4ED4 ( bas.asm):01486 FCS 'CONT' 93 AAAF 4C4953D4 ( bas.asm):01487 FCS 'LIST' 94 AAB3 434C4541D2 ( bas.asm):01488 FCS 'CLEAR' 95 AAB8 4E45D7 ( bas.asm):01489 FCS 'NEW' 96 AABB 434C4F41C4 ( bas.asm):01490 FCS 'CLOAD' 97 AAC0 43534156C5 ( bas.asm):01491 FCS 'CSAVE' 98 AAC5 4F5045CE ( bas.asm):01492 FCS 'OPEN' 99 AAC9 434C4F53C5 ( bas.asm):01493 FCS 'CLOSE' 9A AACE 4C4C4953D4 ( bas.asm):01494 FCS 'LLIST' 9B AAD3 5345D4 ( bas.asm):01495 FCS 'SET' 9C AAD6 52455345D4 ( bas.asm):01496 FCS 'RESET' 9D AADB 434CD3 ( bas.asm):01497 FCS 'CLS' 9E AADE 4D4F544FD2 ( bas.asm):01498 FCS 'MOTOR' 9F AAE3 534F554EC4 ( bas.asm):01499 FCS 'SOUND' A0 AAE8 41554449CF ( bas.asm):01500 FCS 'AUDIO' A1 AAED 455845C3 ( bas.asm):01501 FCS 'EXEC' A2 AAF1 534B4950C6 ( bas.asm):01502 FCS 'SKIPF' A3 AAF6 544142A8 ( bas.asm):01503 FCS 'TAB(' A4 AAFA 54CF ( bas.asm):01504 FCS 'TO' A5 AAFC 5355C2 ( bas.asm):01505 FCS 'SUB' A6 AAFF 544845CE ( bas.asm):01506 FCS 'THEN' A7 AB03 4E4FD4 ( bas.asm):01507 FCS 'NOT' A8 AB06 535445D0 ( bas.asm):01508 FCS 'STEP' A9 AB0A 4F46C6 ( bas.asm):01509 FCS 'OFF' AA AB0D AB ( bas.asm):01510 FCS '+' AB AB0E AD ( bas.asm):01511 FCS '-' AC AB0F AA ( bas.asm):01512 FCS '*' AD AB10 AF ( bas.asm):01513 FCS '/' AE AB11 DE ( bas.asm):01514 FCS '^' AF AB12 414EC4 ( bas.asm):01515 FCS 'AND' B0 AB15 4FD2 ( bas.asm):01516 FCS 'OR' B1 AB17 BE ( bas.asm):01517 FCS '>' B2 AB18 BD ( bas.asm):01518 FCS '=' B3 AB19 BC ( bas.asm):01519 FCS '<' B4 ( bas.asm):01520 * ( bas.asm):01521 * TOKENS FOR THE SECONDARY FUNCTIONS ARE PRECEEDED BY $FF ( bas.asm):01522 * TOKEN # AB1A 5347CE ( bas.asm):01523 LAB1A FCS 'SGN' 80 AB1D 494ED4 ( bas.asm):01524 FCS 'INT' 81 AB20 4142D3 ( bas.asm):01525 FCS 'ABS' 82 AB23 5553D2 ( bas.asm):01526 FCS 'USR' 83 AB26 524EC4 ( bas.asm):01527 FCS 'RND' 84 AB29 5349CE ( bas.asm):01528 FCS 'SIN' 85 AB2C 504545CB ( bas.asm):01529 FCS 'PEEK' 86 AB30 4C45CE ( bas.asm):01530 FCS 'LEN' 87 AB33 535452A4 ( bas.asm):01531 FCS 'STR$' 88 AB37 5641CC ( bas.asm):01532 FCS 'VAL' 89 AB3A 4153C3 ( bas.asm):01533 FCS 'ASC' 8A AB3D 434852A4 ( bas.asm):01534 FCS 'CHR$' 8B AB41 454FC6 ( bas.asm):01535 FCS 'EOF' 8C AB44 4A4F595354CB ( bas.asm):01536 FCS 'JOYSTK' 8D AB4A 4C454654A4 ( bas.asm):01537 FCS 'LEFT$' 8E AB4F 5249474854A4 ( bas.asm):01538 FCS 'RIGHT$' 8F AB55 4D4944A4 ( bas.asm):01539 FCS 'MID$' 90 AB59 504F494ED4 ( bas.asm):01540 FCS 'POINT' 91 AB5E 494E4B4559A4 ( bas.asm):01541 FCS 'INKEY$' 92 AB64 4D45CD ( bas.asm):01542 FCS 'MEM' 93 ( bas.asm):01543 * ( bas.asm):01544 * DISPATCH TABLE FOR COMMANDS TOKEN # AB67 AD47 ( bas.asm):01545 LAB67 FDB FOR FOR 80 AB69 AE86 ( bas.asm):01546 FDB GO GO 81 AB6B AEE3 ( bas.asm):01547 FDB REM REM 82 AB6D AEE3 ( bas.asm):01548 FDB REM REM 83 AB6F AEE3 ( bas.asm):01549 FDB REM ELSE 84 AB71 AF14 ( bas.asm):01550 FDB IFTOK IF 85 AB73 AEE0 ( bas.asm):01551 FDB DATA DATA 86 AB75 B8F7 ( bas.asm):01552 FDB PRINT PRINT 87 AB77 AF42 ( bas.asm):01553 FDB ON ON 88 AB79 AFF5 ( bas.asm):01554 FDB INPUT INPUT 89 AB7B AE02 ( bas.asm):01555 FDB ENDTOK END 8A AB7D B0F8 ( bas.asm):01556 FDB NEXT NEXT 8B AB7F B34E ( bas.asm):01557 FDB DIM DIM 8C AB81 B046 ( bas.asm):01558 FDB READ READ 8D AB83 AE75 ( bas.asm):01559 FDB RUN RUN 8E AB85 ADE4 ( bas.asm):01560 FDB RESTOR RESTORE 8F AB87 AEC0 ( bas.asm):01561 FDB RETURN RETURN 90 AB89 AE09 ( bas.asm):01562 FDB STOP STOP 91 AB8B B757 ( bas.asm):01563 FDB POKE POKE 92 AB8D AE30 ( bas.asm):01564 FDB CONT CONTINUE93 AB8F B764 ( bas.asm):01565 FDB LIST LIST 94 AB91 AE41 ( bas.asm):01566 FDB CLEAR CLEAR 95 AB93 AD17 ( bas.asm):01567 FDB NEW NEW 96 AB95 A498 ( bas.asm):01568 FDB CLOAD CLOAD 97 AB97 A44C ( bas.asm):01569 FDB CSAVE CSAVE 98 AB99 A5F6 ( bas.asm):01570 FDB OPEN OPEN 99 AB9B A416 ( bas.asm):01571 FDB CLOSE CLOSE 9A AB9D B75E ( bas.asm):01572 FDB LLIST LLIST 9B AB9F A880 ( bas.asm):01573 FDB SET SET 9C ABA1 A8B1 ( bas.asm):01574 FDB RESET RESET 9D ABA3 A910 ( bas.asm):01575 FDB CLS CLS 9E ABA5 A7BD ( bas.asm):01576 FDB MOTOR MOTOR 9F ABA7 A94B ( bas.asm):01577 FDB SOUND SOUND A0 ABA9 A990 ( bas.asm):01578 FDB AUDIO AUDIO A1 ABAB A53E ( bas.asm):01579 FDB EXEC EXEC A2 ABAD A5EC ( bas.asm):01580 FDB SKIPF SKIPF A3 ( bas.asm):01581 * ( bas.asm):01582 * ERROR MESSAGES AND THEIR NUMBERS AS USED INTERNALLY ABAF 4E46 ( bas.asm):01583 LABAF FCC 'NF' 0 NEXT WITHOUT FOR ABB1 534E ( bas.asm):01584 FCC 'SN' 1 SYNTAX ERROR ABB3 5247 ( bas.asm):01585 FCC 'RG' 2 RETURN WITHOUT GOSUB ABB5 4F44 ( bas.asm):01586 FCC 'OD' 3 OUT OF DATA ABB7 4643 ( bas.asm):01587 FCC 'FC' 4 ILLEGAL FUNCTION CALL ABB9 4F56 ( bas.asm):01588 FCC 'OV' 5 OVERFLOW ABBB 4F4D ( bas.asm):01589 FCC 'OM' 6 OUT OF MEMORY ABBD 554C ( bas.asm):01590 FCC 'UL' 7 UNDEFINED LINE NUMBER ABBF 4253 ( bas.asm):01591 FCC 'BS' 8 BAD SUBSCRIPT ABC1 4444 ( bas.asm):01592 FCC 'DD' 9 REDIMENSIONED ARRAY ABC3 2F30 ( bas.asm):01593 FCC '/0' 10 DIVISION BY ZERO ABC5 4944 ( bas.asm):01594 FCC 'ID' 11 ILLEGAL DIRECT STATEMENT ABC7 544D ( bas.asm):01595 FCC 'TM' 12 TYPE MISMATCH ABC9 4F53 ( bas.asm):01596 FCC 'OS' 13 OUT OF STRING SPACE ABCB 4C53 ( bas.asm):01597 FCC 'LS' 14 STRING TOO LONG ABCD 5354 ( bas.asm):01598 FCC 'ST' 15 STRING FORMULA TOO COMPLEX ABCF 434E ( bas.asm):01599 FCC 'CN' 16 CAN'T CONTINUE ABD1 4644 ( bas.asm):01600 FCC 'FD' 17 BAD FILE DATA ABD3 414F ( bas.asm):01601 FCC 'AO' 18 FILE ALREADY OPEN ABD5 444E ( bas.asm):01602 FCC 'DN' 19 DEVICE NUMBER ERROR ABD7 494F ( bas.asm):01603 FCC 'IO' 20 I/O ERROR ABD9 464D ( bas.asm):01604 FCC 'FM' 21 BAD FILE MODE ABDB 4E4F ( bas.asm):01605 FCC 'NO' 22 FILE NOT OPEN ABDD 4945 ( bas.asm):01606 FCC 'IE' 23 INPUT PAST END OF FILE ABDF 4453 ( bas.asm):01607 FCC 'DS' 24 DIRECT STATEMENT IN FILE ABE1 204552524F52 ( bas.asm):01608 LABE1 FCC ' ERROR' ABE7 00 ( bas.asm):01609 FCB $00 ABE8 20494E20 ( bas.asm):01610 LABE8 FCC ' IN ' ABEC 00 ( bas.asm):01611 FCB $00 ABED 0D ( bas.asm):01612 LABED FCB CR ABEE 4F4B ( bas.asm):01613 LABEE FCC 'OK' ABF0 0D00 ( bas.asm):01614 FCB CR,$00 ABF2 0D ( bas.asm):01615 LABF2 FCB CR ABF3 425245414B ( bas.asm):01616 FCC 'BREAK' ABF8 00 ( bas.asm):01617 FCB $00 ( bas.asm):01618 * SEARCH THE STACK FOR ‘GOSUB/RETURN’ OR ‘FOR/NEXT’ DATA. ( bas.asm):01619 * THE ‘FOR/NEXT’ INDEX VARIABLE DESCRIPTOR ADDRESS BEING ( bas.asm):01620 * SOUGHT IS STORED IN VARDES. EACH BLOCK OF FOR/NEXT DATA IS 18 ( bas.asm):01621 * BYTES WITH A $80 LEADER BYTE AND THE GOSUB/RETURN DATA IS 5 BYTES ( bas.asm):01622 * WITH AN $A6 LEADER BYTE. THE FIRST NON "FOR/NEXT" DATA ( bas.asm):01623 * IS CONSIDERED ‘GOSUB/RETURN’ ABF9 3064 ( bas.asm):01624 LABF9 LEAX 4,S POINT X TO 3RD ADDRESS ON STACK - IGNORE THE ( bas.asm):01625 * FIRST TWO RETURN ADDRESSES ON THE STACK ABFB C612 ( bas.asm):01626 LABFB LDB #18 18 BYTES SAVED ON STACK FOR EACH ‘FOR’ LOOP ABFD 9F0F ( bas.asm):01627 STX TEMPTR SAVE POINTER ABFF A684 ( bas.asm):01628 LDA ,X GET 1ST BYTE AC01 8080 ( bas.asm):01629 SUBA #$80 * CHECK FOR TYPE OF STACK JUMP FOUND AC03 2615 ( bas.asm):01630 BNE LAC1A * BRANCH IF NOT ‘FOR/NEXT’ AC05 AE01 ( bas.asm):01631 LDX 1,X = GET INDEX VARIABLE DESCRIPTOR AC07 9F11 ( bas.asm):01632 STX TMPTR1 = POINTER AND SAVE IT IN TMPTR1 AC09 9E3B ( bas.asm):01633 LDX VARDES GET INDEX VARIABLE BEING SEARCHED FOR AC0B 2709 ( bas.asm):01634 BEQ LAC16 BRANCH IF DEFAULT INDEX VARIABLE - USE THE ( bas.asm):01635 * FIRST ‘FOR/NEXT’ DATA FOUND ON STACK ( bas.asm):01636 * IF NO INDEX VARIABLE AFTER ‘NEXT’ AC0D 9C11 ( bas.asm):01637 CMPX TMPTR1 DOES THE STACK INDEX MATCH THE ONE ( bas.asm):01638 * BEING SEARCHED FOR? AC0F 2709 ( bas.asm):01639 BEQ LAC1A YES AC11 9E0F ( bas.asm):01640 LDX TEMPTR * RESTORE INITIAL POINTER, ADD AC13 3A ( bas.asm):01641 ABX * 18 TO IT AND LOOK FOR AC14 20E5 ( bas.asm):01642 BRA LABFB * NEXT BLOCK OF DATA AC16 9E11 ( bas.asm):01643 LAC16 LDX TMPTR1 = GET 1ST INDEX VARIABLE FOUND AND AC18 9F3B ( bas.asm):01644 STX VARDES = SAVE AS ‘NEXT’ INDEX AC1A 9E0F ( bas.asm):01645 LAC1A LDX TEMPTR POINT X TO START OF ‘FOR/NEXT’ DATA AC1C 4D ( bas.asm):01646 TSTA SET ZERO FLAG IF ‘FOR/NEXT’ DATA AC1D 39 ( bas.asm):01647 RTS ( bas.asm):01648 * CHECK FOR MEMORY SPACE FOR NEW TOP OF ( bas.asm):01649 * ARRAYS AND MOVE ARRAYS TO NEW LOCATION AC1E 8D17 ( bas.asm):01650 LAC1E BSR LAC37 ACCD = NEW BOTTOM OF FREE RAM - IS THERE ( bas.asm):01651 * ROOM FOR THE STACK? ( bas.asm):01652 * MOVE BYTES FROM V43(X) TO V41(U) UNTIL (X) = V47 AND ( bas.asm):01653 * SAVE FINAL VALUE OF U IN V45 AC20 DE41 ( bas.asm):01654 LAC20 LDU V41 POINT U TO DESTINATION ADDRESS (V41) AC22 3341 ( bas.asm):01655 LEAU 1,U ADD ONE TO U - COMPENSATE FOR FIRST PSHU AC24 9E43 ( bas.asm):01656 LDX V43 POINT X TO SOURCE ADDRESS (V43) AC26 3001 ( bas.asm):01657 LEAX 1,X ADD ONE - COMPENSATE FOR FIRST LDA ,X AC28 A682 ( bas.asm):01658 LAC28 LDA ,-X GRAB A BYTE FROM SOURCE AC2A 3602 ( bas.asm):01659 PSHU A MOVE IT TO DESTINATION AC2C 9C47 ( bas.asm):01660 CMPX V47 DONE? AC2E 26F8 ( bas.asm):01661 BNE LAC28 NO - KEEP MOVING BYTES AC30 DF45 ( bas.asm):01662 STU V45 SAVE FINAL DESTINATION ADDRESS AC32 39 ( bas.asm):01663 LAC32 RTS ( bas.asm):01664 * CHECK TO SEE IF THERE IS ROOM TO STORE 2*ACCB ( bas.asm):01665 * BYTES IN FREE RAM - OM ERROR IF NOT AC33 4F ( bas.asm):01666 LAC33 CLRA * ACCD CONTAINS NUMBER OF EXTRA AC34 58 ( bas.asm):01667 ASLB * BYTES TO PUT ON STACK AC35 D31F ( bas.asm):01668 ADDD ARYEND END OF PROGRAM AND VARIABLES AC37 C3003A ( bas.asm):01669 LAC37 ADDD #STKBUF ADD STACK BUFFER - ROOM FOR STACK? AC3A 2508 ( bas.asm):01670 BCS LAC44 BRANCH IF GREATER THAN $FFFF AC3C 10DF17 ( bas.asm):01671 STS BOTSTK CURRENT NEW BOTTOM OF STACK STACK POINTER AC3F 109317 ( bas.asm):01672 CMPD BOTSTK ARE WE GOING TO BE BELOW STACK? AC42 25EE ( bas.asm):01673 BCS LAC32 YES - NO ERROR AC44 C60C ( bas.asm):01674 LAC44 LDB #6*2 OUT OF MEMORY ERROR ( bas.asm):01675 * ERROR SERVICING ROUTINE AC46 BD018E ( bas.asm):01676 LAC46 JSR >RVEC16 HOOK INTO RAM AC49 BD0191 ( bas.asm):01677 LAC49 JSR >RVEC17 HOOK INTO RAM AC4C BDA7E9 ( bas.asm):01678 JSR >LA7E9 TURN OFF CASSETTE AC4F BDA974 ( bas.asm):01679 JSR >LA974 DISABLE ANA MUX AC52 BDAD33 ( bas.asm):01680 JSR >LAD33 RESET STACK, STRING STACK, CONTINUE POINTER AC55 0F6F ( bas.asm):01681 CLR DEVNUM SET DEVICE NUMBER TO SCREEN AC57 BDB95C ( bas.asm):01682 JSR >LB95C SEND A CR TO SCREEN AC5A BDB9AF ( bas.asm):01683 JSR >LB9AF SEND A ‘?‘ TO SCREEN AC5D 8EABAF ( bas.asm):01684 LDX #LABAF POINT TO ERROR TABLE AC60 3A ( bas.asm):01685 LAC60 ABX ADD MESSAGE NUMBER OFFSET AC61 8D3D ( bas.asm):01686 BSR LACA0 * GET TWO CHARACTERS FROM X AND AC63 8D3B ( bas.asm):01687 BSR LACA0 * SEND TO CONSOLE OUT (SCREEN) AC65 8EABE0 ( bas.asm):01688 LAC65 LDX #LABE1-1 POINT TO "ERROR" MESSAGE AC68 BDB99C ( bas.asm):01689 LAC68 JSR >LB99C PRINT MESSAGE POINTED TO BY X AC6B 9668 ( bas.asm):01690 LDA CURLIN GET CURRENT LINE NUMBER (CURL IN) AC6D 4C ( bas.asm):01691 INCA TEST FOR DIRECT MODE AC6E 2703 ( bas.asm):01692 BEQ LAC73 BRANCH IF DIRECT MODE AC70 BDBDC5 ( bas.asm):01693 JSR >LBDC5 PRINT ‘IN ****‘ ( bas.asm):01694 * THIS IS THE MAIN LOOP OF BASIC WHEN IN DIRECT MODE AC73 BDB95C ( bas.asm):01695 LAC73 JSR >LB95C MOVE CURSOR TO START OF LINE AC76 8EABED ( bas.asm):01696 LAC76 LDX #LABEE-1 POINT X TO ‘OK’, CR MESSAGE AC79 BDB99C ( bas.asm):01697 JSR >LB99C PRINT ‘OK’, CR AC7C BDA390 ( bas.asm):01698 LAC7C JSR >LA390 GO GET AN INPUT LINE AC7F CEFFFF ( bas.asm):01699 LDU #$FFFF THE LINE NUMBER FOR DIRECT MODE IS $FFFF AC82 DF68 ( bas.asm):01700 STU CURLIN SAVE IT IN CURLIN AC84 25F6 ( bas.asm):01701 BCS LAC7C BRANCH IF LINE INPUT TERMINATED BY BREAK AC86 0D70 ( bas.asm):01702 TST CINBFL CHECK CONSOLE INPUT BUFFER STATUS AC88 1026F833 ( bas.asm):01703 LBNE LA4BF BRANCH IF BUFFER EMPTY - CLOSE FILE IF EMPTY AC8C 9FA6 ( bas.asm):01704 STX CHARAD SAVE (X) AS CURRENT INPUT POINTER - THIS WILL ( bas.asm):01705 * ENABLE THE ‘LIVE KEYBOARD’ (DIRECT) MODE. THE ( bas.asm):01706 * LINE JUST ENTERED WILL BE INTERPRETED AC8E 9D9F ( bas.asm):01707 JSR GETNCH GET NEXT CHARACTER FROM BASIC AC90 27EA ( bas.asm):01708 BEQ LAC7C NO LINE INPUT - GET ANOTHER LINE AC92 2511 ( bas.asm):01709 BCS LACA5 BRANCH IF NUMER1C - THERE WAS A LINE NUMBER BEFORE ( bas.asm):01710 * THE STATEMENT ENTERED, SO THIS STATEMENT ( bas.asm):01711 * WILL BE MERGED INTO THE BASIC PROGRAM AC94 C630 ( bas.asm):01712 LDB #2*24 ‘DIRECT STATEMENT IN FILE’ ERROR AC96 0D6F ( bas.asm):01713 TST DEVNUM * CHECK DEVICE NUMBER AND AC98 26AC ( bas.asm):01714 BNE LAC46 * ISSUE ‘DS’ ERROR IF DEVNUM <> 0 AC9A BDB821 ( bas.asm):01715 JSR >LB821 GO CRUNCH LINE AC9D 7EADC0 ( bas.asm):01716 LAC9D JMP >LADC0 GO EXECUTE THE STATEMENT (LIVE KEYBOARD) ( bas.asm):01717 * ACA0 A680 ( bas.asm):01718 LACA0 LDA ,X+ GET A CHARACTER ACA2 7EB9B1 ( bas.asm):01719 JMP >LB9B1 SEND TO CONSOLE OUT ( bas.asm):01720 * TAKE A LINE FROM THE LINE INPUT BUFFER ( bas.asm):01721 * AND INSERT IT INTO THE BASIC PROGRAM ACA5 BDAF67 ( bas.asm):01722 LACA5 JSR >LAF67 CONVERT LINE NUMBER TO BINARY ACA8 9E2B ( bas.asm):01723 LACA8 LDX BINVAL GET CONVERTED LINE NUMBER ACAA BF02DA ( bas.asm):01724 STX LINHDR STORE IT IN LINE INPUT HEADER ACAD BDB821 ( bas.asm):01725 JSR >LB821 GO CRUNCH THE LINE ACB0 D703 ( bas.asm):01726 STB TMPLOC SAVE LINE LENGTH ACB2 8D4D ( bas.asm):01727 BSR LAD01 FIND OUT WHERE TO INSERT LINE ACB4 2512 ( bas.asm):01728 BCS LACC8 BRANCH IF LINE NUMBER DOES NOT ALREADY EXIST ACB6 DC47 ( bas.asm):01729 LDD V47 GET ABSOLUTE ADDRESS OF LINE NUMBER ACB8 A384 ( bas.asm):01730 SUBD ,X SUBTRACT ADDRESS OF NEXT LINE NUMBER ACBA D31B ( bas.asm):01731 ADDD VARTAB * ADD TO CURRENT END OF PROGRAM - THIS WILL REMOVE ACBC DD1B ( bas.asm):01732 STD VARTAB * THE LENGTH OF THIS LINE NUMBER FROM THE PROGRAM ACBE EE84 ( bas.asm):01733 LDU ,X POINT U TO ADDRESS OF NEXT LINE NUMBER ( bas.asm):01734 * DELETE OLD LINE FROM BASIC PROGRAM ACC0 3702 ( bas.asm):01735 LACC0 PULU A GET A BYTE FROM WHAT’S LEFT OF PROGRAM ACC2 A780 ( bas.asm):01736 STA ,X+ MOVE IT DOWN ACC4 9C1B ( bas.asm):01737 CMPX VARTAB COMPARE TO END OF BASIC PROGRAM ACC6 26F8 ( bas.asm):01738 BNE LACC0 BRANCH IF NOT AT END ACC8 B602DC ( bas.asm):01739 LACC8 LDA LINBUF * CHECK TO SEE IF THERE IS A LINE IN ACCB 271C ( bas.asm):01740 BEQ LACE9 * THE BUFFER AND BRANCH IF NONE ACCD DC1B ( bas.asm):01741 LDD VARTAB = SAVE CURRENT END OF ACCF DD43 ( bas.asm):01742 STD V43 = PROGRAM IN V43 ACD1 DB03 ( bas.asm):01743 ADDB TMPLOC * ADD LENGTH OF CRUNCHED LINE, ACD3 8900 ( bas.asm):01744 ADCA #0 * PROPOGATE CARRY AND SAVE NEW END ACD5 DD41 ( bas.asm):01745 STD V41 * OF PROGRAM IN V41 ACD7 BDAC1E ( bas.asm):01746 JSR >LAC1E = MAKE SURE THERE’S ENOUGH RAM FOR THIS ( bas.asm):01747 * = LINE & MAKE A HOLE IN BASIC FOR NEW LINE ACDA CE02D8 ( bas.asm):01748 LDU #LINHDR-2 POINT U TO LINE TO BE INSERTED ACDD 3702 ( bas.asm):01749 LACDD PULU A GET A BYTE FROM NEW LINE ACDF A780 ( bas.asm):01750 STA ,X+ INSERT IT IN PROGRAM ACE1 9C45 ( bas.asm):01751 CMPX V45 * COMPARE TO ADDRESS OF END OF INSERTED ACE3 26F8 ( bas.asm):01752 BNE LACDD * LINE AND BRANCH IF NOT DONE ACE5 9E41 ( bas.asm):01753 LDX V41 = GET AND SAVE ACE7 9F1B ( bas.asm):01754 STX VARTAB = END OF PROGRAM ACE9 8D36 ( bas.asm):01755 LACE9 BSR LAD21 RESET INPUT POINTER, CLEAR VARIABLES, INITIALIZE ACEB 8D02 ( bas.asm):01756 BSR LACEF ADJUST START OF NEXT LINE ADDRESSES ACED 208D ( bas.asm):01757 BRA LAC7C REENTER BASIC’S INPUT LOOP ( bas.asm):01758 * COMPUTE THE START OF NEXT LINE ADDRESSES FOR THE BASIC PROGRAM ACEF 9E19 ( bas.asm):01759 LACEF LDX TXTTAB POINT X TO START OF PROGRAM ACF1 EC84 ( bas.asm):01760 LACF1 LDD ,X GET ADDRESS OF NEXT LINE ACF3 2721 ( bas.asm):01761 BEQ LAD16 RETURN IF END OF PROGRAM ACF5 3304 ( bas.asm):01762 LEAU 4,X POINT U TO START OF BASIC TEXT IN LINE ACF7 A6C0 ( bas.asm):01763 LACF7 LDA ,U+ * SKIP THROUGH THE LINE UNTIL A ACF9 26FC ( bas.asm):01764 BNE LACF7 * ZERO (END OF LINE) IS FOUND ACFB EF84 ( bas.asm):01765 STU ,X SAVE THE NEW START OF NEXT LINE ADDRESS ACFD AE84 ( bas.asm):01766 LDX ,X POINT X TO START OF NEXT LINE ACFF 20F0 ( bas.asm):01767 BRA LACF1 KEEP GOING ( bas.asm):01768 * ( bas.asm):01769 * FIND A LINE NUMBER IN THE BASIC PROGRAM ( bas.asm):01770 * RETURN WITH CARRY SET IF NO MATCH FOUND AD01 DC2B ( bas.asm):01771 LAD01 LDD BINVAL GET THE LINE NUMBER TO FIND AD03 9E19 ( bas.asm):01772 LDX TXTTAB BEGINNING OF PROGRAM AD05 EE84 ( bas.asm):01773 LAD05 LDU ,X GET ADDRESS OF NEXT LINE NUMBER AD07 2709 ( bas.asm):01774 BEQ LAD12 BRANCH IF END OF PROG AD09 10A302 ( bas.asm):01775 CMPD 2,X IS IT A MATCH? AD0C 2306 ( bas.asm):01776 BLS LAD14 CARRY SET IF LOWER; CARRY CLEAR IF MATCH AD0E AE84 ( bas.asm):01777 LDX ,X X = ADDRESS OF NEXT LINE AD10 20F3 ( bas.asm):01778 BRA LAD05 KEEP LOOPING FOR LINE NUMBER AD12 1A01 ( bas.asm):01779 LAD12 ORCC #1 SET CARRY FLAG AD14 9F47 ( bas.asm):01780 LAD14 STX V47 SAVE MATCH LINE NUMBER OR NUMBER OF LINE JUST AFTER WHERE IT SHOULD HAVE BEEN AD16 39 ( bas.asm):01781 LAD16 RTS ( bas.asm):01782 * NEW AD17 26FB ( bas.asm):01783 NEW BNE LAD14 BRANCH IF ARGUMENT GIVEN AD19 9E19 ( bas.asm):01784 LAD19 LDX TXTTAB GET START OF BASIC AD1B 6F80 ( bas.asm):01785 CLR ,X+ * PUT 2 ZERO BYTES THERE - ERASE AD1D 6F80 ( bas.asm):01786 CLR ,X+ * THE BASIC PROGRAM AD1F 9F1B ( bas.asm):01787 STX VARTAB AND THE NEXT ADDRESS IS NOW THE END OF PROGRAM AD21 9E19 ( bas.asm):01788 LAD21 LDX TXTTAB GET START OF BASIC AD23 BDAEBB ( bas.asm):01789 JSR >LAEBB PUT INPUT POINTER ONE BEFORE START OF BASIC ( bas.asm):01790 * ERASE ALL VARIABLES AD26 9E27 ( bas.asm):01791 LAD26 LDX MEMSIZ * RESET START OF STRING VARIABLES AD28 9F23 ( bas.asm):01792 STX STRTAB * TO TOP OF STRING SPACE AD2A BDADE4 ( bas.asm):01793 JSR >RESTOR RESET ‘DATA’ POINTER TO START OF BASIC AD2D 9E1B ( bas.asm):01794 LDX VARTAB * GET START OF VARIABLES AND USE IT AD2F 9F1D ( bas.asm):01795 STX ARYTAB * TO RESET START OF ARRAYS AD31 9F1F ( bas.asm):01796 STX ARYEND RESET END OF ARRAYS AD33 8E01A9 ( bas.asm):01797 LAD33 LDX #STRSTK * RESET STRING STACK POINTER TO AD36 9F0B ( bas.asm):01798 STX TEMPPT * BOTTOM OF STRING STACK AD38 AEE4 ( bas.asm):01799 LDX ,S GET RETURN ADDRESS OFF STACK AD3A 10DE21 ( bas.asm):01800 LDS FRETOP RESTORE STACK POINTER AD3D 6FE2 ( bas.asm):01801 CLR ,-S PUT A ZERO BYTE ON STACK - TO CLEAR ANY RETURN OF ( bas.asm):01802 * FOR/NEXT DATA FROM THE STACK AD3F 0F2D ( bas.asm):01803 LAD3F CLR OLDPTR RESET ‘CONT’ ADDRESS SO YOU AD41 0F2E ( bas.asm):01804 CLR OLDPTR+1 ‘CAN’T CONTINUE’ AD43 0F08 ( bas.asm):01805 LAD43 CLR ARYDIS CLEAR THE ARRAY DISABLE FLAG AD45 6E84 ( bas.asm):01806 JMP ,X RETURN TO CALLING ROUTINE - THIS IS NECESSARY ( bas.asm):01807 * SINCE THE STACK WAS RESET ( bas.asm):01808 * ( bas.asm):01809 * FOR ( bas.asm):01810 * ( bas.asm):01811 * THE FOR COMMAND WILL STORE 18 BYTES ON THE STACK FOR ( bas.asm):01812 * EACH FOR-NEXT LOOP WHICH IS BEING PROCESSED. THESE ( bas.asm):01813 * BYTES ARE DEFINED AS FOLLOWS: 0- $80 (FOR FLAG); ( bas.asm):01814 * 1,2=INDEX VARIABLE DESCRIPTOR POINTER; 3-7=FP VALUE OF STEP; ( bas.asm):01815 * 8=STEP DIRECTION: $FF IF NEGATIVE; 0 IF ZERO; 1 IF POSITIVE; ( bas.asm):01816 * 9-13=FP VALUE OF ‘TO’ PARAMETER; ( bas.asm):01817 * 14,15=CURRENT LINE NUMBER; 16,17=RAM ADDRESS OF THE END ( bas.asm):01818 * OF THE LINE CONTAINING THE ‘FOR’ STATEMENT AD47 8680 ( bas.asm):01819 FOR LDA #$80 * SAVE THE DISABLE ARRAY FLAG IN VO8 AD49 9708 ( bas.asm):01820 STA ARYDIS * DO NOT ALLOW THE INDEX VARIABLE TO BE AN ARRAY AD4B BDAF89 ( bas.asm):01821 JSR >LET SET INDEX VARIABLE TO INITIAL VALUE AD4E BDABF9 ( bas.asm):01822 JSR >LABF9 SEARCH THE STACK FOR ‘FOR/NEXT’ DATA AD51 3262 ( bas.asm):01823 LEAS 2,S PURGE RETURN ADDRESS OFF OF THE STACK AD53 2604 ( bas.asm):01824 BNE LAD59 BRANCH IF INDEX VARIABLE NOT ALREADY BEING USED AD55 9E0F ( bas.asm):01825 LDX TEMPTR GET (ADDRESS + 18) OF MATCHED ‘FOR/NEXT’ DATA AD57 3285 ( bas.asm):01826 LEAS B,X MOVE THE STACK POINTER TO THE BEGINNING OF THE ( bas.asm):01827 * MATCHED ‘FOR/NEXT’ DATA SO THE NEW DATA WILL ( bas.asm):01828 * OVERLAY THE OLD DATA. THIS WILL ALSO DESTROY ( bas.asm):01829 * ALL OF THE ‘RETURN’ AND ‘FOR/NEXT’ DATA BELOW ( bas.asm):01830 * THIS POINT ON THE STACK AD59 C609 ( bas.asm):01831 LAD59 LDB #$09 * CHECK FOR ROOM FOR 18 BYTES AD5B BDAC33 ( bas.asm):01832 JSR >LAC33 * IN FREE RAM AD5E BDAEE8 ( bas.asm):01833 JSR >LAEE8 GET ADDR OF END OF SUBLINE IN X AD61 DC68 ( bas.asm):01834 LDD CURLIN GET CURRENT LINE NUMBER AD63 3416 ( bas.asm):01835 PSHS X,B,A SAVE LINE ADDR AND LINE NUMBER ON STACK AD65 C6A5 ( bas.asm):01836 LDB #$A5 TOKEN FOR ‘TO’ AD67 BDB26F ( bas.asm):01837 JSR >LB26F SYNTAX CHECK FOR ‘TO’ AD6A BDB143 ( bas.asm):01838 JSR >LB143 ‘TM’ ERROR IF INDEX VARIABLE SET TO STRING AD6D BDB141 ( bas.asm):01839 JSR >LB141 EVALUATE EXPRESSION ( bas.asm):01840 * AD70 D654 ( bas.asm):01841 LDB FP0SGN GET FPA0 MANTISSA SIGN AD72 CA7F ( bas.asm):01842 ORB #$7F FORM A MASK TO SAVE DATA BITS OF HIGH ORDER MANTISSA AD74 D450 ( bas.asm):01843 ANDB FPA0 PUT THE MANTISSA SIGN IN BIT 7 OF HIGH ORDER MANTISSA AD76 D750 ( bas.asm):01844 STB FPA0 SAVE THE PACKED HIGH ORDER MANTISSA AD78 108EAD7F ( bas.asm):01845 LDY #LAD7F LOAD FOLLOWING ADDRESS INTO Y AS A RETURN AD7C 7EB1EA ( bas.asm):01846 JMP >LB1EA ADDRESS - PUSH FPA0 ONTO THE STACK AD7F 8EBAC5 ( bas.asm):01847 LAD7F LDX #LBAC5 POINT X TO FLOATING POINT NUMBER 1.0 (DEFAULT STEP VALUE) AD82 BDBC14 ( bas.asm):01848 JSR >LBC14 MOVE (X) TO FPA0 AD85 9DA5 ( bas.asm):01849 JSR GETCCH GET CURRENT INPUT CHARACTER AD87 81A9 ( bas.asm):01850 CMPA #$A9 STEP TOKEN AD89 2605 ( bas.asm):01851 BNE LAD90 BRANCH IF NO ‘STEP’ VALUE AD8B 9D9F ( bas.asm):01852 JSR GETNCH GET A CHARACTER FROM BASIC AD8D BDB141 ( bas.asm):01853 JSR >LB141 EVALUATE NUMERIC EXPRESSION AD90 BDBC6D ( bas.asm):01854 LAD90 JSR >LBC6D CHECK STATUS OF FPA0 AD93 BDB1E6 ( bas.asm):01855 JSR >LB1E6 SAVE STATUS AND FPA0 ON THE STACK AD96 DC3B ( bas.asm):01856 LDD VARDES * GET DESCRIPTOR POINTER FOR THE ‘STEP’ AD98 3406 ( bas.asm):01857 PSHS B,A * VARIABLE AND SAVE IT ON THE STACK AD9A 8680 ( bas.asm):01858 LDA #$80 = GET THE ‘FOR’ FLAG AND AD9C 3402 ( bas.asm):01859 PSHS A = SAVE IT ON THE STACK ( bas.asm):01860 * ( bas.asm):01861 * MAIN COMMAND INTERPRETATION LOOP AD9E BD019A ( bas.asm):01862 LAD9E JSR >RVEC20 HOOK INTO RAM ADA1 1CAF ( bas.asm):01863 ANDCC #$AF ENABLE IRQ,FIRQ ADA3 8D46 ( bas.asm):01864 BSR LADEB CHECK FOR KEYBOARD BREAK ADA5 9EA6 ( bas.asm):01865 LDX CHARAD GET BASIC’S INPUT POINTER ADA7 9F2F ( bas.asm):01866 STX TINPTR SAVE IT ADA9 A680 ( bas.asm):01867 LDA ,X+ GET CURRENT INPUT CHAR & MOVE POINTER ADAB 2707 ( bas.asm):01868 BEQ LADB4 BRANCH IF END OF LINE ADAD 813A ( bas.asm):01869 CMPA #': CHECK FOR LINE SEPARATOR ADAF 270F ( bas.asm):01870 BEQ LADC0 BRANCH IF COLON ADB1 7EB277 ( bas.asm):01871 LADB1 JMP >LB277 ‘SYNTAX ERROR’-IF NOT LINE SEPARATOR ADB4 A681 ( bas.asm):01872 LADB4 LDA ,X++ GET MS BYTE OF ADDRESS OF NEXT BASIC LINE ADB6 9700 ( bas.asm):01873 STA ENDFLG SAVE IN STOP/END FLAG - CAUSE A STOP IF ( bas.asm):01874 * NEXT LINE ADDRESS IS < $8000; CAUSE ( bas.asm):01875 * AN END IF ADDRESS > $8000 ADB8 275B ( bas.asm):01876 BEQ LAE15 BRANCH TO ‘STOP’ - END OF PROGRAM ADBA EC80 ( bas.asm):01877 LDD ,X+ GET CURRENT LINE NUMBER ADBC DD68 ( bas.asm):01878 STD CURLIN SAVE IN CURLIN ADBE 9FA6 ( bas.asm):01879 STX CHARAD SAVE ADDRESS OF FIRST BYTE OF LINE ADC0 9D9F ( bas.asm):01880 LADC0 JSR GETNCH GET A CHARACTER FROM BASIC ADC2 8D02 ( bas.asm):01881 BSR LADC6 GO PROCESS COMMAND ADC4 20D8 ( bas.asm):01882 LADC4 BRA LAD9E GO BACK TO MAIN LOOP ADC6 2778 ( bas.asm):01883 LADC6 BEQ LAE40 RETURN IF END OF LINE ADC8 4D ( bas.asm):01884 TSTA CHECK FOR TOKEN - BIT 7 SET (NEGATIVE) ADC9 102A01BC ( bas.asm):01885 LBPL LET BRANCH IF NOT A TOKEN - GO DO A ‘LET’ WHICH ( bas.asm):01886 * IS THE ‘DEFAULT’ TOKEN FOR MICROSOFT BASIC ADCD 81A3 ( bas.asm):01887 CMPA #$A3 SKIPF TOKEN - HIGHEST EXECUTABLE COMMAND IN BASIC ADCF 220B ( bas.asm):01888 BHI LADDC BRANCH IF > A BASIC COMMAND ADD1 BE0123 ( bas.asm):01889 LDX COMVEC+3 GET ADDRESS OF BASIC’S COMMAND TABLE ADD4 48 ( bas.asm):01890 LADD4 ASLA X2 (2 BYTE/JUMP ADDRESS) & DISCARD BIT 7 ADD5 1F89 ( bas.asm):01891 TFR A,B SAVE COMMAND OFFSET IN ACCB ADD7 3A ( bas.asm):01892 ABX NON X POINTS TO COMMAND JUMP ADDR ADD8 9D9F ( bas.asm):01893 JSR GETNCH GET AN INPUT CHAR ( bas.asm):01894 * ( bas.asm):01895 * HERE IS WHERE WE BRANCH TO DO A ‘COMMAND’ ADDA 6E94 ( bas.asm):01896 JMP [,X] GO DO A COMMAND ADDC 81B4 ( bas.asm):01897 LADDC CMPA #$B4 $B4 IS HIGHEST BASIC TOKEN ADDE 23D1 ( bas.asm):01898 BLS LADB1 ‘SYNTAX ERROR’ IF NON-EXECUTABLE TOKEN ADE0 6E9F012D ( bas.asm):01899 JMP [COMVEC+13] JUMP TO AN EX BAS COMMAND ( bas.asm):01900 * ( bas.asm):01901 * RESTORE ADE4 9E19 ( bas.asm):01902 RESTOR LDX TXTTAB BEGINNING OF PROGRAM ADDRESS ADE6 301F ( bas.asm):01903 LEAX -1,X MOVE TO ONE BYTE BEFORE PROGRAM ADE8 9F33 ( bas.asm):01904 LADE8 STX DATPTR SAVE NEW DATA POINTER ADEA 39 ( bas.asm):01905 RTS ( bas.asm):01906 * ( bas.asm):01907 * BREAK CHECK ADEB BDA1C1 ( bas.asm):01908 LADEB JSR >LA1C1 GET A KEYSTROKE ENTRY ADEE 270A ( bas.asm):01909 BEQ LADFA RETURN IF NO INPUT ADF0 8103 ( bas.asm):01910 LADF0 CMPA #3 CONTROL C? (BREAK) ADF2 2715 ( bas.asm):01911 BEQ STOP YES ADF4 8113 ( bas.asm):01912 LADF4 CMPA #$13 CONTROL S? (PAUSE) ADF6 2703 ( bas.asm):01913 BEQ LADFB YES ADF8 9787 ( bas.asm):01914 STA IKEYIM SAVE KEYSTROKE IN INKEY IMAGE ADFA 39 ( bas.asm):01915 LADFA RTS ADFB BDA1CB ( bas.asm):01916 LADFB JSR >KEYIN GET A KEY ADFE 27FB ( bas.asm):01917 BEQ LADFB BRANCH IF NO KEY DOWN AE00 20EE ( bas.asm):01918 BRA LADF0 CONTINUE - DO A BREAK CHECK ( bas.asm):01919 * ( bas.asm):01920 * END AE02 BDA426 ( bas.asm):01921 ENDTOK JSR >LA426 CLOSE FILES AE05 9DA5 ( bas.asm):01922 JSR GETCCH GET CURRENT INPUT CHAR AE07 2002 ( bas.asm):01923 BRA LAE0B ( bas.asm):01924 * ( bas.asm):01925 * STOP AE09 1A01 ( bas.asm):01926 STOP ORCC #$01 SET CARRY FLAG AE0B 2633 ( bas.asm):01927 LAE0B BNE LAE40 BRANCH IF ARGUMENT EXISTS AE0D 9EA6 ( bas.asm):01928 LDX CHARAD * SAVE CURRENT POSITION OF AE0F 9F2F ( bas.asm):01929 STX TINPTR * BASIC’S INPUT POINTER AE11 0600 ( bas.asm):01930 LAE11 ROR ENDFLG ROTATE CARRY INTO BIT 7 OF STOP/END FLAG AE13 3262 ( bas.asm):01931 LEAS 2,S PURGE RETURN ADDRESS OFF STACK AE15 9E68 ( bas.asm):01932 LAE15 LDX CURLIN GET CURRENT LINE NUMBER AE17 8CFFFF ( bas.asm):01933 CMPX #$FFFF DIRECT MODE? AE1A 2706 ( bas.asm):01934 BEQ LAE22 YES AE1C 9F29 ( bas.asm):01935 STX OLDTXT SAVE CURRENT LINE NUMBER AE1E 9E2F ( bas.asm):01936 LDX TINPTR * GET AND SAVE CURRENT POSITION AE20 9F2D ( bas.asm):01937 STX OLDPTR * OF BASIC’S INPUT POINTER AE22 0F6F ( bas.asm):01938 LAE22 CLR DEVNUM SET DEVICE NUMBER TO SCREEN AE24 8EABF1 ( bas.asm):01939 LDX #LABF2-1 POINT TO CR, ‘BREAK’ MESSAGE AE27 0D00 ( bas.asm):01940 TST ENDFLG CHECK STOP/END FLAG AE29 102AFE46 ( bas.asm):01941 LBPL LAC73 BRANCH TO MAIN LOOP OF BASIC IF END AE2D 7EAC68 ( bas.asm):01942 JMP >LAC68 PRINT ‘BREAK AT ####’ AND GO TO ( bas.asm):01943 * BASIC’S MAIN LOOP IF ‘STOP’ ( bas.asm):01944 * CONT AE30 260E ( bas.asm):01945 CONT BNE LAE40 RETURN IF ARGUMENT GIVEN AE32 C620 ( bas.asm):01946 LDB #2*16 ‘CAN’T CONTINUE’ ERROR AE34 9E2D ( bas.asm):01947 LDX OLDPTR GET CONTINUE ADDRESS (INPUT POINTER) AE36 1027FE0C ( bas.asm):01948 LBEQ LAC46 ‘CN’ ERROR IF CONTINUE ADDRESS = 0 AE3A 9FA6 ( bas.asm):01949 STX CHARAD RESET BASIC’S INPUT POINTER AE3C 9E29 ( bas.asm):01950 LDX OLDTXT GET LINE NUMBER AE3E 9F68 ( bas.asm):01951 STX CURLIN RESET CURRENT LINE NUMBER AE40 39 ( bas.asm):01952 LAE40 RTS ( bas.asm):01953 * ( bas.asm):01954 * CLEAR AE41 272C ( bas.asm):01955 CLEAR BEQ LAE6F BRANCH IF NO ARGUMENT AE43 BDB3E6 ( bas.asm):01956 JSR >LB3E6 EVALUATE ARGUMENT AE46 3406 ( bas.asm):01957 PSHS B,A SAVE AMOUNT OF STRING SPACE ON STACK AE48 9E27 ( bas.asm):01958 LDX MEMSIZ GET CURRENT TOP OF CLEARED SPACE AE4A 9DA5 ( bas.asm):01959 JSR GETCCH GET CURRENT INPUT CHARACTER AE4C 270C ( bas.asm):01960 BEQ LAE5A BRANCH IF NO NEW TOP OF CLEARED SPACE AE4E BDB26D ( bas.asm):01961 JSR >LB26D SYNTAX CHECK FOR COMMA AE51 BDB73D ( bas.asm):01962 JSR >LB73D EVALUATE EXPRESSlON; RETURN VALUE IN X AE54 301F ( bas.asm):01963 LEAX -1,X X = TOP OF CLEARED SPACE AE56 9C74 ( bas.asm):01964 CMPX TOPRAM COMPARE TO TOP OF RAM AE58 2218 ( bas.asm):01965 BHI LAE72 ‘OM’ ERROR IF > TOP OF RAM AE5A 1F10 ( bas.asm):01966 LAE5A TFR X,D ACCD = TOP OF CLEARED SPACE AE5C A3E1 ( bas.asm):01967 SUBD ,S++ SUBTRACT OUT AMOUNT OF CLEARED SPACE AE5E 2512 ( bas.asm):01968 BCS LAE72 ‘OM’ ERROR IF FREE MEM < 0 AE60 1F03 ( bas.asm):01969 TFR D,U U = BOTTOM OF CLEARED SPACE AE62 83003A ( bas.asm):01970 SUBD #STKBUF SUBTRACT OUT STACK BUFFER AE65 250B ( bas.asm):01971 BCS LAE72 ‘OM’ ERROR IF FREE MEM < 0 AE67 931B ( bas.asm):01972 SUBD VARTAB SUBTRACT OUT START OF VARIABLES AE69 2507 ( bas.asm):01973 BCS LAE72 ‘OM’ ERROR IF FREE MEM < 0 AE6B DF21 ( bas.asm):01974 STU FRETOP SAVE NEW BOTTOM OF CLEARED SPACE AE6D 9F27 ( bas.asm):01975 STX MEMSIZ SAVE NEW TOP OF CLEARED SPACE AE6F 7EAD26 ( bas.asm):01976 LAE6F JMP >LAD26 ERASE ALL VARIABLES, INITIALIZE POINTERS, ETC AE72 7EAC44 ( bas.asm):01977 LAE72 JMP >LAC44 ‘OM’ ERROR ( bas.asm):01978 * ( bas.asm):01979 * RUN AE75 BD0194 ( bas.asm):01980 RUN JSR >RVEC18 HOOK INTO RAM AE78 BDA426 ( bas.asm):01981 JSR >LA426 CLOSE ANY OPEN FILES AE7B 9DA5 ( bas.asm):01982 JSR GETCCH * GET CURRENT INPUT CHARACTER AE7D 1027FEA0 ( bas.asm):01983 LBEQ LAD21 * IF NO LINE NUMBER AE81 BDAD26 ( bas.asm):01984 JSR >LAD26 ERASE ALL VARIABLES AE84 2019 ( bas.asm):01985 BRA LAE9F ‘GOTO’ THE RUN ADDRESS ( bas.asm):01986 * ( bas.asm):01987 * GO AE86 1F89 ( bas.asm):01988 GO TFR A,B SAVE INPUT CHARACTER IN ACCB AE88 9D9F ( bas.asm):01989 LAE88 JSR GETNCH GET A CHARACTER FROM BASIC AE8A C1A5 ( bas.asm):01990 CMPB #$A5 ‘TO’ TOKEN AE8C 2716 ( bas.asm):01991 BEQ LAEA4 BRANCH IF GOTO AE8E C1A6 ( bas.asm):01992 CMPB #$A6 ‘SUB’ TOKEN AE90 2645 ( bas.asm):01993 BNE LAED7 ‘SYNTAX ERROR’ IF NEITHER AE92 C603 ( bas.asm):01994 LDB #3 =ROOM FOR 6 AE94 BDAC33 ( bas.asm):01995 JSR >LAC33 =BYTES ON STACK? AE97 DEA6 ( bas.asm):01996 LDU CHARAD * SAVE CURRENT BASIC INPUT POINTER, LINE AE99 9E68 ( bas.asm):01997 LDX CURLIN * NUMBER AND SUB TOKEN ON STACK AE9B 86A6 ( bas.asm):01998 LDA #$A6 * AE9D 3452 ( bas.asm):01999 PSHS U,X,A * AE9F 8D03 ( bas.asm):02000 LAE9F BSR LAEA4 GO DO A ‘GOTO’ AEA1 7EAD9E ( bas.asm):02001 JMP >LAD9E JUMP BACK TO BASIC’S MAIN LOOP ( bas.asm):02002 * GOTO AEA4 9DA5 ( bas.asm):02003 LAEA4 JSR GETCCH GET CURRENT INPUT CHAR AEA6 BDAF67 ( bas.asm):02004 JSR >LAF67 GET LINE NUMBER TO BINARY IN BINVAL AEA9 8D40 ( bas.asm):02005 BSR LAEEB ADVANCE BASIC’S POINTER TO END OF LINE AEAB 3001 ( bas.asm):02006 LEAX $01,X POINT TO START OF NEXT LINE AEAD DC2B ( bas.asm):02007 LDD BINVAL GET THE LINE NUMBER TO RUN AEAF 109368 ( bas.asm):02008 CMPD CURLIN COMPARE TO CURRENT LINE NUMBER AEB2 2202 ( bas.asm):02009 BHI LAEB6 IF REO’D LINE NUMBER IS > CURRENT LINE NUMBER, ( bas.asm):02010 * DON’T START LOOKING FROM ( bas.asm):02011 * START OF PROGRAM AEB4 9E19 ( bas.asm):02012 LDX TXTTAB BEGINNING OF PROGRAM AEB6 BDAD05 ( bas.asm):02013 LAEB6 JSR >LAD05 GO FIND A LINE NUMBER AEB9 2517 ( bas.asm):02014 BCS LAED2 ‘UNDEFINED LINE NUMBER’ AEBB 301F ( bas.asm):02015 LAEBB LEAX -1,X MOVE BACK TO JUST BEFORE START OF LINE AEBD 9FA6 ( bas.asm):02016 STX CHARAD RESET BASIC’S INPUT POINTER AEBF 39 ( bas.asm):02017 LAEBF RTS ( bas.asm):02018 * ( bas.asm):02019 * RETURN AEC0 26FD ( bas.asm):02020 RETURN BNE LAEBF EXIT ROUTINE IF ARGUMENT GIVEN AEC2 86FF ( bas.asm):02021 LDA #$FF * PUT AN ILLEGAL VARIABLE NAME IN FIRST BYTE OF AEC4 973B ( bas.asm):02022 STA VARDES * VARDES WHICH WILL CAUSE ‘FOR/NEXT’ DATA ON THE ( bas.asm):02023 * STACK TO BE IGNORED AEC6 BDABF9 ( bas.asm):02024 JSR >LABF9 CHECK FOR RETURN DATA ON THE STACK AEC9 1F14 ( bas.asm):02025 TFR X,S RESET STACK POINTER - PURGE TWO RETURN ADDRESSES ( bas.asm):02026 * FROM THE STACK AECB 8126 ( bas.asm):02027 CMPA #$A6-$80 SUB TOKEN - $80 AECD 270B ( bas.asm):02028 BEQ LAEDA BRANCH IF ‘RETURN’ FROM SUBROUTINE AECF C604 ( bas.asm):02029 LDB #2*2 ERROR #2 ‘RETURN WITHOUT GOSUB’ AED1 8C ( bas.asm):02030 FCB SKP2 SKIP TWO BYTES AED2 C60E ( bas.asm):02031 LAED2 LDB #7*2 ERROR #7 ‘UNDEFINED LINE NUMBER’ AED4 7EAC46 ( bas.asm):02032 JMP >LAC46 JUMP TO ERROR HANDLER AED7 7EB277 ( bas.asm):02033 LAED7 JMP >LB277 ‘SYNTAX ERROR’ AEDA 3552 ( bas.asm):02034 LAEDA PULS A,X,U * RESTORE VALUES OF CURRENT LINE NUMBER AND AEDC 9F68 ( bas.asm):02035 STX CURLIN * BASIC’S INPUT POINTER FOR THIS SUBROUTINE AEDE DFA6 ( bas.asm):02036 STU CHARAD * AND LOAD ACCA WITH SUB TOKEN ($A6) ( bas.asm):02037 * ( bas.asm):02038 * DATA AEE0 8D06 ( bas.asm):02039 DATA BSR LAEE8 MOVE INPUT POINTER TO END OF SUBLINE OR LINE AEE2 8C ( bas.asm):02040 FCB SKP2 SKIP 2 BYTES ( bas.asm):02041 * REM, ELSE AEE3 ( bas.asm):02042 ELSE EQU * AEE3 8D06 ( bas.asm):02043 REM BSR LAEEB MOVE INPUT POINTER TO END OF LINE AEE5 9FA6 ( bas.asm):02044 STX CHARAD RESET BASIC’S INPUT POINTER AEE7 39 ( bas.asm):02045 LAEE7 RTS ( bas.asm):02046 * ADVANCE INPUT POINTER TO END OF SUBLINE OR LINE AEE8 C63A ( bas.asm):02047 LAEE8 LDB #': COLON = SUBLINE TERMINATOR CHARACTER AEEA 86 ( bas.asm):02048 LAEEA FCB SKP1LD SKPILD SKIP ONE BYTE; LDA #$5F ( bas.asm):02049 * ADVANCE BASIC’S INPUT POINTER TO END OF ( bas.asm):02050 * LINE - RETURN ADDRESS OF END OF LINE+1 IN X AEEB 5F ( bas.asm):02051 LAEEB CLRB 0 = LINE TERMINATOR CHARACTER AEEC D701 ( bas.asm):02052 STB CHARAC TEMP STORE PRIMARY TERMINATOR CHARACTER AEEE 5F ( bas.asm):02053 CLRB 0 (END OF LINE) = ALTERNATE TERM. CHAR. AEEF 9EA6 ( bas.asm):02054 LDX CHARAD LOAD X W/BASIC’S INPUT POINTER AEF1 1F98 ( bas.asm):02055 LAEF1 TFR B,A * CHANGE TERMINATOR CHARACTER AEF3 D601 ( bas.asm):02056 LDB CHARAC * FROM ACCB TO CHARAC - SAVE OLD TERMINATOR ( bas.asm):02057 * IN CHARAC AEF5 9701 ( bas.asm):02058 STA CHARAC SWAP PRIMARY AND SECONDARY TERMINATORS AEF7 A684 ( bas.asm):02059 LAEF7 LDA ,X GET NEXT INPUT CHARACTER AEF9 27EC ( bas.asm):02060 BEQ LAEE7 RETURN IF 0 (END OF LINE) AEFB 3404 ( bas.asm):02061 PSHS B SAVE TERMINATOR ON STACK AEFD A1E0 ( bas.asm):02062 CMPA ,S+ COMPARE TO INPUT CHARACTER AEFF 27E6 ( bas.asm):02063 BEQ LAEE7 RETURN IF EQUAL AF01 3001 ( bas.asm):02064 LEAX 1,X MOVE POINTER UP ONE AF03 8122 ( bas.asm):02065 CMPA #'" CHECK FOR DOUBLE QUOTES AF05 27EA ( bas.asm):02066 BEQ LAEF1 BRANCH IF " - TOGGLE TERMINATOR CHARACTERS AF07 4C ( bas.asm):02067 INCA * CHECK FOR $FF AND BRANCH IF AF08 2602 ( bas.asm):02068 BNE LAF0C * NOT SECONDARY TOKEN AF0A 3001 ( bas.asm):02069 LEAX 1,X MOVE INPUT POINTER 1 MORE IF SECONDARY AF0C 8186 ( bas.asm):02070 LAF0C CMPA #$85+1 TOKEN FOR IF? AF0E 26E7 ( bas.asm):02071 BNE LAEF7 NO - GET ANOTHER INPUT CHARACTER AF10 0C04 ( bas.asm):02072 INC IFCTR INCREMENT IF COUNTER - KEEP TRACK OF HOW MANY ( bas.asm):02073 * ‘IF’ STATEMENTS ARE NESTED IN ONE LINE AF12 20E3 ( bas.asm):02074 BRA LAEF7 GET ANOTHER INPUT CHARACTER ( bas.asm):02075 * IF AF14 BDB141 ( bas.asm):02076 IFTOK JSR >LB141 EVALUATE NUMERIC EXPRESSION AF17 9DA5 ( bas.asm):02077 JSR GETCCH GET CURRENT INPUT CHARACTER AF19 8181 ( bas.asm):02078 CMPA #$81 TOKEN FOR GO AF1B 2705 ( bas.asm):02079 BEQ LAF22 TREAT ‘GO’ THE SAME AS ‘THEN’ AF1D C6A7 ( bas.asm):02080 LDB #$A7 TOKEN FOR THEN AF1F BDB26F ( bas.asm):02081 JSR >LB26F DO A SYNTAX CHECK ON ACCB AF22 964F ( bas.asm):02082 LAF22 LDA FP0EXP CHECK FOR TRUE/FALSE - FALSE IF FPA0 EXPONENT = ZERO AF24 2613 ( bas.asm):02083 BNE LAF39 BRANCH IF CONDITION TRUE AF26 0F04 ( bas.asm):02084 CLR IFCTR CLEAR FLAG - KEEP TRACK OF WHICH NESTED ELSE STATEMENT ( bas.asm):02085 * TO SEARCH FOR IN NESTED ‘IF’ LOOPS AF28 8DB6 ( bas.asm):02086 LAF28 BSR DATA MOVE BASIC’S POINTER TO END OF SUBLINE AF2A 4D ( bas.asm):02087 TSTA * CHECK TO SEE IF END OF LINE OR SUBLINE AF2B 27BA ( bas.asm):02088 BEQ LAEE7 * AND RETURN IF END OF LINE AF2D 9D9F ( bas.asm):02089 JSR GETNCH GET AN INPUT CHARACTER FROM BASIC AF2F 8184 ( bas.asm):02090 CMPA #$84 TOKEN FOR ELSE AF31 26F5 ( bas.asm):02091 BNE LAF28 IGNORE ALL DATA EXCEPT ‘ELSE’ UNTIL ( bas.asm):02092 * END OF LINE (ZERO BYTE) AF33 0A04 ( bas.asm):02093 DEC IFCTR CHECK TO SEE IF YOU MUST SEARCH ANOTHER SUBLINE AF35 2AF1 ( bas.asm):02094 BPL LAF28 BRANCH TO SEARCH ANOTHER SUBLINE FOR ‘ELSE’ AF37 9D9F ( bas.asm):02095 JSR GETNCH GET AN INPUT CHARACTER FROM BASIC AF39 9DA5 ( bas.asm):02096 LAF39 JSR GETCCH GET CURRENT INPUT CHARACTER AF3B 1025FF65 ( bas.asm):02097 LBCS LAEA4 BRANCH TO ‘GOTO’ IF NUMERIC CHARACTER AF3F 7EADC6 ( bas.asm):02098 JMP >LADC6 RETURN TO MAIN INTERPRETATION LOOP ( bas.asm):02099 * ON AF42 BDB70B ( bas.asm):02100 ON JSR >LB70B EVALUATE EXPRESSION AF45 C681 ( bas.asm):02101 LAF45 LDB #$81 TOKEN FOR GO AF47 BDB26F ( bas.asm):02102 JSR >LB26F SYNTAX CHECK FOR GO AF4A 3402 ( bas.asm):02103 PSHS A SAVE NEW TOKEN (TO,SUB) AF4C 81A6 ( bas.asm):02104 CMPA #$A6 TOKEN FOR SUB? AF4E 2704 ( bas.asm):02105 BEQ LAF54 YES AF50 81A5 ( bas.asm):02106 CMPA #$A5 TOKEN FOR TO? AF52 2683 ( bas.asm):02107 LAF52 BNE LAED7 ‘SYNTAX’ ERROR IF NOT ‘SUB’ OR ‘TO’ AF54 0A53 ( bas.asm):02108 LAF54 DEC FPA0+3 DECREMENT IS BYTE OF MANTISSA OF FPA0 - THIS ( bas.asm):02109 * IS THE ARGUMENT OF THE ‘ON’ STATEMENT AF56 2605 ( bas.asm):02110 BNE LAF5D BRANCH IF NOT AT THE PROPER GOTO OR GOSUB LINE NUMBER AF58 3504 ( bas.asm):02111 PULS B GET BACK THE TOKEN FOLLOWING ‘GO’ AF5A 7EAE88 ( bas.asm):02112 JMP >LAE88 GO DO A ‘GOTO’ OR ‘GOSUB’ AF5D 9D9F ( bas.asm):02113 LAF5D JSR GETNCH GET A CHARACTER FROM BASIC AF5F 8D06 ( bas.asm):02114 BSR LAF67 CONVERT BASIC LINE NUMBER TO BINARY AF61 812C ( bas.asm):02115 CMPA #', IS CHARACTER FOLLOWING LINE NUMBER A COMMA? AF63 27EF ( bas.asm):02116 BEQ LAF54 YES AF65 3584 ( bas.asm):02117 PULS B,PC IF NOT, FALL THROUGH TO NEXT COMMAND AF67 9E8A ( bas.asm):02118 LAF67 LDX ZERO DEFAULT LINE NUMBER OF ZERO AF69 9F2B ( bas.asm):02119 STX BINVAL SAVE IT IN BINVAL ( bas.asm):02120 * ( bas.asm):02121 * CONVERT LINE NUMBER TO BINARY - RETURN VALUE IN BINVAL ( bas.asm):02122 * AF6B 2461 ( bas.asm):02123 LAF6B BCC LAFCE RETURN IF NOT NUMERIC CHARACTER AF6D 8030 ( bas.asm):02124 SUBA #'0 MASK OFF ASCII AF6F 9701 ( bas.asm):02125 STA CHARAC SAVE DIGIT IN VO1 AF71 DC2B ( bas.asm):02126 LDD BINVAL GET ACCUMULATED LINE NUMBER VALUE AF73 8118 ( bas.asm):02127 CMPA #24 LARGEST LINE NUMBER IS $F9FF (63999) - ( bas.asm):02128 * (24*256+255)*10+9 AF75 22DB ( bas.asm):02129 BHI LAF52 ‘SYNTAX’ ERROR IF TOO BIG ( bas.asm):02130 * MULT ACCD X 10 AF77 58 ( bas.asm):02131 ASLB * AF78 49 ( bas.asm):02132 ROLA * TIMES 2 AF79 58 ( bas.asm):02133 ASLB = AF7A 49 ( bas.asm):02134 ROLA = TIMES 4 AF7B D32B ( bas.asm):02135 ADDD BINVAL ADD 1 = TIMES 5 AF7D 58 ( bas.asm):02136 ASLB * AF7E 49 ( bas.asm):02137 ROLA * TIMES 10 AF7F DB01 ( bas.asm):02138 ADDB CHARAC ADD NEXT DIGIT AF81 8900 ( bas.asm):02139 ADCA #0 PROPAGATE CARRY AF83 DD2B ( bas.asm):02140 STD BINVAL SAVE NEW ACCUMULATED LINE NUMBER AF85 9D9F ( bas.asm):02141 JSR GETNCH GET NEXT CHARACTER FROM BASIC AF87 20E2 ( bas.asm):02142 BRA LAF6B LOOP- PROCESS NEXT DIGIT ( bas.asm):02143 * ( bas.asm):02144 * LET (EXBAS) ( bas.asm):02145 * EVALUATE A NON-TOKEN EXPRESSION ( bas.asm):02146 * TARGET = REPLACEMENT AF89 BDB357 ( bas.asm):02147 LET JSR >LB357 FIND TARGET VARIABLE DESCRIPTOR AF8C 9F3B ( bas.asm):02148 STX VARDES SAVE DESCRIPTOR ADDRESS OF 1ST EXPRESSION AF8E C6B3 ( bas.asm):02149 LDB #$B3 TOKEN FOR "=" AF90 BDB26F ( bas.asm):02150 JSR >LB26F DO A SYNTAX CHECK FOR ‘=‘ AF93 9606 ( bas.asm):02151 LDA VALTYP * GET VARIABLE TYPE AND AF95 3402 ( bas.asm):02152 PSHS A * SAVE ON THE STACK AF97 BDB156 ( bas.asm):02153 JSR >LB156 EVALUATE EXPRESSION AF9A 3502 ( bas.asm):02154 LAF9A PULS A * REGET VARIABLE TYPE OF 1ST EXPRESSION AND AF9C 46 ( bas.asm):02155 RORA * SET CARRY IF STRING AF9D BDB148 ( bas.asm):02156 JSR >LB148 TYPE CHECK-TM ERROR IF VARIABLE TYPES ON ( bas.asm):02157 * BOTH SIDES OF EQUALS SIGN NOT THE SAME AFA0 10270C8F ( bas.asm):02158 LBEQ LBC33 GO PUT FPA0 INTO VARIABLE DESCRIPTOR IF NUMERIC ( bas.asm):02159 * MOVE A STRING WHOSE DESCRIPTOR IS LOCATED AT ( bas.asm):02160 * FPA0+2 INTO THE STRING SPACE. TRANSFER THE ( bas.asm):02161 * DESCRIPTOR ADDRESS TO THE ADDRESS IN VARDES ( bas.asm):02162 * DON’T MOVE THE STRING IF IT IS ALREADY IN THE ( bas.asm):02163 * STRING SPACE. REMOVE DESCRIPTOR FROM STRING ( bas.asm):02164 * STACK IF IT IS LAST ONE ON THE STACK AFA4 9E52 ( bas.asm):02165 LAFA4 LDX FPA0+2 POINT X TO DESCRIPTOR OF REPLACEMENT STRING AFA6 DC21 ( bas.asm):02166 LDD FRETOP LOAD ACCD WITH START OF STRING SPACE AFA8 10A302 ( bas.asm):02167 CMPD 2,X IS THE STRING IN STRING SPACE? AFAB 2411 ( bas.asm):02168 BCC LAFBE BRANCH IF IT’S NOT IN THE STRING SPACE AFAD 9C1B ( bas.asm):02169 CMPX VARTAB COMPARE DESCRIPTOR ADDRESS TO START OF VARIABLES AFAF 250D ( bas.asm):02170 BCS LAFBE BRANCH IF DESCRIPTOR ADDRESS NOT IN VARIABLES AFB1 E684 ( bas.asm):02171 LAFB1 LDB ,X GET LENGTH OF REPLACEMENT STRING AFB3 BDB50D ( bas.asm):02172 JSR >LB50D RESERVE ACCB BYTES OF STRING SPACE AFB6 9E4D ( bas.asm):02173 LDX V4D GET DESCRIPTOR ADDRESS BACK AFB8 BDB643 ( bas.asm):02174 JSR >LB643 MOVE STRING INTO STRING SPACE AFBB 8E0056 ( bas.asm):02175 LDX #STRDES POINT X TO TEMP STRING DESCRIPTOR ADDRESS AFBE 9F4D ( bas.asm):02176 LAFBE STX V4D SAVE STRING DESCRIPTOR ADDRESS IN V4D AFC0 BDB675 ( bas.asm):02177 JSR >LB675 REMOVE STRING DESCRIPTOR IF LAST ONE ( bas.asm):02178 * ON STRING STACK AFC3 DE4D ( bas.asm):02179 LDU V4D POINT U TO REPLACEMENT DESCRIPTOR ADDRESS AFC5 9E3B ( bas.asm):02180 LDX VARDES GET TARGET DESCRIPTOR ADDRESS AFC7 3726 ( bas.asm):02181 PULU A,B,Y GET LENGTH AND START OF REPLACEMENT STRING AFC9 A784 ( bas.asm):02182 STA ,X * SAVE STRING LENGTH AND START IN AFCB 10AF02 ( bas.asm):02183 STY 2,X * TARGET DESCRIPTOR LOCATION AFCE 39 ( bas.asm):02184 LAFCE RTS AFCF 3F5245444F ( bas.asm):02185 LAFCF FCC '?REDO' ?REDO MESSAGE AFD4 0D00 ( bas.asm):02186 FCB CR,$00 AFD6 C622 ( bas.asm):02187 LAFD6 LDB #2*17 ‘BAD FILE DATA’ ERROR AFD8 0D6F ( bas.asm):02188 TST DEVNUM CHECK DEVICE NUMBER AND BRANCH AFDA 2703 ( bas.asm):02189 BEQ LAFDF IF SET TO SCREEN AFDC 7EAC46 ( bas.asm):02190 LAFDC JMP >LAC46 JMP TO ERROR HANDLER AFDF 9609 ( bas.asm):02191 LAFDF LDA INPFLG = GET THE INPUT FLAG AND BRANCH AFE1 2707 ( bas.asm):02192 BEQ LAFEA = IF ‘INPUT’ AFE3 9E31 ( bas.asm):02193 LDX DATTXT * GET LINE NUMBER WHERE THE ERROR OCCURRED AFE5 9F68 ( bas.asm):02194 STX CURLIN * AND USE IT AS THE CURRENT LINE NUMBER AFE7 7EB277 ( bas.asm):02195 JMP >LB277 ‘SYNTAX ERROR’ AFEA 8EAFCE ( bas.asm):02196 LAFEA LDX #LAFCF-1 * POINT X TO ‘?REDO’ AND PRINT AFED BDB99C ( bas.asm):02197 JSR >LB99C * IT ON THE SCREEN AFF0 9E2F ( bas.asm):02198 LDX TINPTR = GET THE SAVED ABSOLUTE ADDRESS OF AFF2 9FA6 ( bas.asm):02199 STX CHARAD = INPUT POINTER AND RESTORE IT AFF4 39 ( bas.asm):02200 RTS ( bas.asm):02201 * ( bas.asm):02202 * INPUT AFF5 C616 ( bas.asm):02203 INPUT LDB #11*2 ‘ID’ ERROR AFF7 9E68 ( bas.asm):02204 LDX CURLIN GET CURRENT LINE NUMBER AFF9 3001 ( bas.asm):02205 LEAX 1,X ADD ONE AFFB 27DF ( bas.asm):02206 BEQ LAFDC ‘ID’ ERROR BRANCH IF DIRECT MODE AFFD 8D03 ( bas.asm):02207 BSR LB002 GET SOME INPUT DATA AFFF 0F6F ( bas.asm):02208 CLR DEVNUM SET DEVICE NUMBER TO SCREEN B001 39 ( bas.asm):02209 RTS B002 8123 ( bas.asm):02210 LB002 CMPA #'# CHECK FOR DEVICE NUMBER B004 2609 ( bas.asm):02211 BNE LB00F NO DEVICE NUMBER GIVEN B006 BDA5A5 ( bas.asm):02212 JSR >LA5A5 CHECK SYNTAX AND GET DEVICE NUMBER B009 BDA3ED ( bas.asm):02213 JSR >LA3ED CHECK FOR VALID INPUT FILE B00C BDB26D ( bas.asm):02214 LB00C JSR >LB26D SYNTAX CHECK FOR COMMA B00F 8122 ( bas.asm):02215 LB00F CMPA #'" CHECK FOR PROMPT STRING DELIMITER B011 260B ( bas.asm):02216 BNE LB01E BRANCH IF NO PROMPT STRING B013 BDB244 ( bas.asm):02217 JSR >LB244 PUT PROMPT STRING ON STRING STACK B016 C63B ( bas.asm):02218 LDB #'; * B018 BDB26F ( bas.asm):02219 JSR >LB26F * DO A SYNTAX CHECK FOR SEMICOLON B01B BDB99F ( bas.asm):02220 JSR >LB99F PRINT MESSAGE TO CONSOLE OUT B01E 8E02DC ( bas.asm):02221 LB01E LDX #LINBUF POINT TO BASIC’S LINE BUFFER B021 6F84 ( bas.asm):02222 CLR ,X CLEAR 1ST BYTE - FLAG TO INDICATE NO DATA ( bas.asm):02223 * IN LINE BUFFER B023 0D6F ( bas.asm):02224 TST DEVNUM CHECK DEVICE NUMBER B025 2622 ( bas.asm):02225 BNE LB049 BRANCH IF NOT SET TO SCREEN B027 8D06 ( bas.asm):02226 BSR LB02F INPUT A STRING TO LINE BUFFER B029 C62C ( bas.asm):02227 LDB #', * INSERT A COMMA AT THE END B02B E784 ( bas.asm):02228 STB ,X * OF THE LINE INPUT BUFFER B02D 201A ( bas.asm):02229 BRA LB049 ( bas.asm):02230 * FILL BASIC’S LINE INPUT BUFFER CONSOLE IN B02F BDB9AF ( bas.asm):02231 LB02F JSR >LB9AF SEND A "?" TO CONSOLE OUT B032 BDB9AC ( bas.asm):02232 JSR >LB9AC SEND A ‘SPACE’ TO CONSOLE OUT B035 BDA390 ( bas.asm):02233 LB035 JSR >LA390 GO READ IN A BASIC LINE B038 2405 ( bas.asm):02234 BCC LB03F BRANCH IF ENTER KEY ENDED ENTRY B03A 3264 ( bas.asm):02235 LEAS 4,S PURGE TWO RETURN ADDRESSES OFF THE STACK B03C 7EAE11 ( bas.asm):02236 LB03C JMP >LAE11 GO DO A ‘STOP’ IF BREAK KEY ENDED LINE ENTRY B03F C62E ( bas.asm):02237 LB03F LDB #2*23 ‘INPUT PAST END OF FILE’ ERROR B041 0D70 ( bas.asm):02238 TST CINBFL CHECK FOR MORE CHARACTERS IN CONSOLE IN BUFFER B043 2697 ( bas.asm):02239 BNE LAFDC ‘IE’ ERROR IF EMPTY B045 39 ( bas.asm):02240 RTS ( bas.asm):02241 * ( bas.asm):02242 * READ B046 9E33 ( bas.asm):02243 READ LDX DATPTR GET ‘READ’ START ADDRESS B048 86 ( bas.asm):02244 FCB SKP1LD SKIP ONE BYTE - LDA #*$4F B049 4F ( bas.asm):02245 LB049 CLRA ‘INPUT’ ENTRY POINT: INPUT FLAG = 0 B04A 9709 ( bas.asm):02246 STA INPFLG SET INPUT FLAG; 0 = INPUT: <> 0 = READ B04C 9F35 ( bas.asm):02247 STX DATTMP SAVE ‘READ’ START ADDRESS/’INPUT’ BUFFER START B04E BDB357 ( bas.asm):02248 LB04E JSR >LB357 EVALUATE A VARIABLE B051 9F3B ( bas.asm):02249 STX VARDES SAVE DESCRIPTOR ADDRESS B053 9EA6 ( bas.asm):02250 LDX CHARAD * GET BASIC’S INPUT POINTER B055 9F2B ( bas.asm):02251 STX BINVAL * AND SAVE IT B057 9E35 ( bas.asm):02252 LDX DATTMP GET ‘READ’ ADDRESS START/’INPUT’ BUFFER POINTER B059 A684 ( bas.asm):02253 LDA ,X GET A CHARACTER FROM THE BASIC PROGRAM B05B 260C ( bas.asm):02254 BNE LB069 BRANCH IF NOT END OF LINE B05D 9609 ( bas.asm):02255 LDA INPFLG * CHECK INPUT FLAG AND BRANCH B05F 2658 ( bas.asm):02256 BNE LB0B9 * IF LOOKING FOR DATA (READ) ( bas.asm):02257 * NO DATA IN ‘INPUT’ LINE BUFFER AND/OR INPUT ( bas.asm):02258 * NOT COMING FROM SCREEN B061 BD017C ( bas.asm):02259 JSR >RVEC10 HOOK INTO RAM IF ‘INPUT’ B064 BDB9AF ( bas.asm):02260 JSR >LB9AF SEND A '?' TO CONSOLE OUT B067 8DC6 ( bas.asm):02261 BSR LB02F FILL INPUT BUFFER FROM CONSOLE IN B069 9FA6 ( bas.asm):02262 LB069 STX CHARAD RESET BASIC’S INPUT POINTER B06B 9D9F ( bas.asm):02263 JSR GETNCH GET A CHARACTER FROM BASIC B06D D606 ( bas.asm):02264 LDB VALTYP * CHECK VARIABLE TYPE AND B06F 2727 ( bas.asm):02265 BEQ LB098 * BRANCH IF NUMERIC ( bas.asm):02266 * READ/INPUT A STRING VARIABLE B071 9EA6 ( bas.asm):02267 LDX CHARAD LOAD X WITH CURRENT BASIC INPUT POINTER B073 9701 ( bas.asm):02268 STA CHARAC SAVE CURRENT INPUT CHARACTER B075 8122 ( bas.asm):02269 CMPA #'" CHECK FOR STRING DELIMITER B077 2712 ( bas.asm):02270 BEQ LB08B BRANCH IF STRING DELIMITER B079 301F ( bas.asm):02271 LEAX -1,X BACK UP POINTER B07B 4F ( bas.asm):02272 CLRA * ZERO = END OF LINE CHARACTER B07C 9701 ( bas.asm):02273 STA CHARAC * SAVE AS TERMINATOR B07E BDA35F ( bas.asm):02274 JSR >LA35F SET UP PRINT PARAMETERS B081 0D6E ( bas.asm):02275 TST PRTDEV CHECK PRINT DEVICE NUMBER B083 2606 ( bas.asm):02276 BNE LB08B BRANCH IF CASSETTE - USE TWO ZEROS AS TERMINATOR ( bas.asm):02277 * CHARACTERS FOR CASSETTE B085 863A ( bas.asm):02278 LDA #': END OF SUBLINE CHARACTER B087 9701 ( bas.asm):02279 STA CHARAC SAVE AS TERMINATOR I B089 862C ( bas.asm):02280 LDA #', COMMA B08B 9702 ( bas.asm):02281 LB08B STA ENDCHR SAVE AS TERMINATOR 2 B08D BDB51E ( bas.asm):02282 JSR >LB51E STRIP A STRING FROM THE INPUT BUFFER B090 BDB249 ( bas.asm):02283 JSR >LB249 MOVE INPUT POINTER TO END OF STRING B093 BDAFA4 ( bas.asm):02284 JSR >LAFA4 PUT A STRING INTO THE STRING SPACE IF NECESSARY B096 2006 ( bas.asm):02285 BRA LB09E CHECK FOR ANOTHER DATA ITEM ( bas.asm):02286 * SAVE A NUMERIC VALUE IN A READ OR INPUT DATA ITEM B098 BDBD12 ( bas.asm):02287 LB098 JSR >LBD12 CONVERT AN ASCII STRING TO FP NUMBER B09B BDBC33 ( bas.asm):02288 JSR >LBC33 PACK FPA0 AND STORE IT IN ADDRESS IN VARDES - ( bas.asm):02289 * INPUT OR READ DATA ITEM B09E 9DA5 ( bas.asm):02290 LB09E JSR GETCCH GET CURRENT INPUT CHARACTER B0A0 2706 ( bas.asm):02291 BEQ LB0A8 BRANCH IF END OF LINE B0A2 812C ( bas.asm):02292 CMPA #', CHECK FOR A COMMA B0A4 1026FF2E ( bas.asm):02293 LBNE LAFD6 'BAD FILE DATA' ERROR OR RETRY B0A8 9EA6 ( bas.asm):02294 LB0A8 LDX CHARAD * GET CURRENT INPUT B0AA 9F35 ( bas.asm):02295 STX DATTMP * POINTER (USED AS A DATA POINTER) AND SAVE IT B0AC 9E2B ( bas.asm):02296 LDX BINVAL * RESET INPUT POINTER TO INPUT OR B0AE 9FA6 ( bas.asm):02297 STX CHARAD * READ STATEMENT B0B0 9DA5 ( bas.asm):02298 JSR GETCCH GET CURRENT CHARACTER FROM BASIC B0B2 2721 ( bas.asm):02299 BEQ LB0D5 BRANCH IF END OF LINE - EXIT COMMAND B0B4 BDB26D ( bas.asm):02300 JSR >LB26D SYNTAX CHECK FOR COMMA B0B7 2095 ( bas.asm):02301 BRA LB04E GET ANOTHER INPUT OR READ ITEM ( bas.asm):02302 * SEARCH FROM ADDRESS IN X FOR ( bas.asm):02303 * 1ST OCCURENCE OF THE TOKEN FOR DATA B0B9 9FA6 ( bas.asm):02304 LB0B9 STX CHARAD RESET BASIC’S INPUT POINTER B0BB BDAEE8 ( bas.asm):02305 JSR >LAEE8 SEARCH FOR END OF CURRENT LINE OR SUBLINE B0BE 3001 ( bas.asm):02306 LEAX 1,X MOVE X ONE PAST END OF LINE B0C0 4D ( bas.asm):02307 TSTA CHECK FOR END OF LINE B0C1 260A ( bas.asm):02308 BNE LB0CD BRANCH IF END OF SUBLINE B0C3 C606 ( bas.asm):02309 LDB #2*3 ‘OUT OF DATA’ ERROR B0C5 EE81 ( bas.asm):02310 LDU ,X++ GET NEXT 2 CHARACTERS B0C7 2741 ( bas.asm):02311 BEQ LB10A ‘OD’ ERROR IF END OF PROGRAM B0C9 EC81 ( bas.asm):02312 LDD ,X++ GET BASIC LINE NUMBER AND B0CB DD31 ( bas.asm):02313 STD DATTXT SAVE IT IN DATTXT B0CD A684 ( bas.asm):02314 LB0CD LDA ,X GET AN INPUT CHARACTER B0CF 8186 ( bas.asm):02315 CMPA #$86 DATA TOKEN? B0D1 26E6 ( bas.asm):02316 BNE LB0B9 NO — KEEP LOOKING B0D3 2094 ( bas.asm):02317 BRA LB069 YES ( bas.asm):02318 * EXIT READ AND INPUT COMMANDS B0D5 9E35 ( bas.asm):02319 LB0D5 LDX DATTMP GET DATA POINTER B0D7 D609 ( bas.asm):02320 LDB INPFLG * CHECK INPUT FLAG B0D9 1026FD0B ( bas.asm):02321 LBNE LADE8 * SAVE NEW DATA POINTER IF READ B0DD A684 ( bas.asm):02322 LDA ,X = CHECK NEXT CHARACTER IN ‘INPUT’ BUFFER B0DF 2706 ( bas.asm):02323 BEQ LB0E7 = RETURN IF NO MORE DATA FOR INPUT B0E1 8EB0E7 ( bas.asm):02324 LDX #LB0E8-1 POINT X TO ‘?EXTRA IGNORED’ B0E4 7EB99C ( bas.asm):02325 JMP >LB99C PRINT THE MESSAGE B0E7 39 ( bas.asm):02326 LB0E7 RTS B0E8 3F45585452412049 ( bas.asm):02327 LB0E8 FCC '?EXTRA IGNORED' ?EXTRA IGNORED MESSAGE 474E4F524544 B0F6 0D00 ( bas.asm):02328 FCB CR,$00 ( bas.asm):02329 * NEXT B0F8 2604 ( bas.asm):02330 NEXT BNE LB0FE BRANCH IF ARGUMENT GIVEN B0FA 9E8A ( bas.asm):02331 LDX ZERO X = 0: DEFAULT FOR NO ARGUMENT B0FC 2003 ( bas.asm):02332 BRA LB101 B0FE BDB357 ( bas.asm):02333 LB0FE JSR >LB357 EVALUATE AN ALPHA EXPRESSION B101 9F3B ( bas.asm):02334 LB101 STX VARDES SAVE VARIABLE DESCRIPTOR POINTER B103 BDABF9 ( bas.asm):02335 JSR >LABF9 GO SCAN FOR ‘FOR/NEXT’ DATA ON STACK B106 2704 ( bas.asm):02336 BEQ LB10C BRANCH IF DATA FOUND B108 C600 ( bas.asm):02337 LDB #0 ‘NEXT WITHOUT FOR’ ERROR (SHOULD BE CLRB) B10A 2047 ( bas.asm):02338 LB10A BRA LB153 PROCESS ERROR B10C 1F14 ( bas.asm):02339 LB10C TFR X,S POINT S TO START OF ‘FOR/NEXT’ DATA B10E 3003 ( bas.asm):02340 LEAX 3,X POINT X TO FP VALUE OF STEP B110 BDBC14 ( bas.asm):02341 JSR >LBC14 COPY A FP NUMBER FROM (X) TO FPA0 B113 A668 ( bas.asm):02342 LDA 8,S GET THE DIRECTION OF STEP B115 9754 ( bas.asm):02343 STA FP0SGN SAVE IT AS THE SIGN OF FPA0 B117 9E3B ( bas.asm):02344 LDX VARDES POINT (X) TO INDEX VARIABLE DESCRIPTOR B119 BDB9C2 ( bas.asm):02345 JSR >LB9C2 ADD (X) TO FPA0 (STEP TO INDEX) B11C BDBC33 ( bas.asm):02346 JSR >LBC33 PACK FPA0 AND STORE IT IN ADDRESS ( bas.asm):02347 * CONTAINED IN VARDES B11F 3069 ( bas.asm):02348 LEAX 9,S POINT (X) TO TERMINAL VALUE OF INDEX B121 BDBC96 ( bas.asm):02349 JSR >LBC96 COMPARE CURRENT INDEX VALUE TO TERMINAL VALUE OF INDEX B124 E068 ( bas.asm):02350 SUBB 8,S ACCB = 0 IF TERMINAL VALUE=CURRENT VALUE AND STEP=0 OR IF ( bas.asm):02351 * STEP IS POSITIVE AND CURRENT VALUE>TERMINAL VALUE OR ( bas.asm):02352 * STEP IS NEGATIVE AND CURRENT VALUELAD9E JUMP BACK TO COMMAND INTEPR. LOOP B134 32E812 ( bas.asm):02359 LB134 LEAS 18,S PULL THE ‘FOR-NEXT’ DATA OFF THE STACK B137 9DA5 ( bas.asm):02360 JSR GETCCH GET CURRENT INPUT CHARACTER B139 812C ( bas.asm):02361 CMPA #', CHECK FOR ANOTHER ARGUMENT B13B 26F4 ( bas.asm):02362 BNE LB131 RETURN IF NONE B13D 9D9F ( bas.asm):02363 JSR GETNCH GET NEXT CHARACTER FROM BASIC B13F 8DBD ( bas.asm):02364 BSR LB0FE BSR SIMULATES A CALL TO ‘NEXT’ FROM COMMAND LOOP ( bas.asm):02365 * EVALUATE A NUMERIC EXPRESSION B141 8D13 ( bas.asm):02366 LB141 BSR LB156 EVALUATE EXPRESSION AND DO A TYPE CHECK FOR NUMERIC B143 1CFE ( bas.asm):02367 LB143 ANDCC #$FE CLEAR CARRY FLAG B145 7D ( bas.asm):02368 LB145 FCB $7D OP CODE OF TST $1A01 - SKIP TWO BYTES (DO ( bas.asm):02369 * NOT CHANGE CARRY FLAG) B146 1A01 ( bas.asm):02370 LB146 ORCC #1 SET CARRY ( bas.asm):02371 * STRING TYPE MODE CHECK - IF ENTERED AT LB146 THEN VALTYP PLUS IS 'TM' ERROR ( bas.asm):02372 * NUMERIC TYPE MODE CHECK - IF ENTERED AT LB143 THEN VALTYP MINUS IS 'TM' ERROR ( bas.asm):02373 * IF ENTERED AT LB148, A TYPE CHECK IS DONE ON VALTYP ( bas.asm):02374 * IF ENTERED WITH CARRY SET, THEN 'TM' ERROR IF NUMERIC ( bas.asm):02375 * IF ENTERED WITH CARRY CLEAR, THEN 'TM' ERROR IF STRING. B148 0D06 ( bas.asm):02376 LB148 TST VALTYP TEST TYPE FLAG; DO NOT CHANGE CARRY B14A 2503 ( bas.asm):02377 BCS LB14F BRANCH IF STRING B14C 2A99 ( bas.asm):02378 BPL LB0E7 RETURN ON PLUS B14E 8C ( bas.asm):02379 FCB SKP2 SKIP 2 BYTES - ‘TM’ ERROR B14F 2B96 ( bas.asm):02380 LB14F BMI LB0E7 RETURN ON MINUS B151 C618 ( bas.asm):02381 LB151 LDB #12*2 ‘TYPE MISMATCH’ ERROR B153 7EAC46 ( bas.asm):02382 LB153 JMP >LAC46 PROCESS ERROR ( bas.asm):02383 * EVALUATE EXPRESSION B156 8D6E ( bas.asm):02384 LB156 BSR LB1C6 BACK UP INPUT POINTER B158 4F ( bas.asm):02385 LB158 CLRA END OF OPERATION PRECEDENCE FLAG B159 8C ( bas.asm):02386 FCB SKP2 SKIP TWO BYTES B15A 3404 ( bas.asm):02387 LB15A PSHS B SAVE FLAG (RELATIONAL OPERATOR FLAG) B15C 3402 ( bas.asm):02388 PSHS A SAVE FLAG (PRECEDENCE FLAG) B15E C601 ( bas.asm):02389 LDB #1 * B160 BDAC33 ( bas.asm):02390 JSR >LAC33 * SEE IF ROOM IN FREE RAM FOR (B) WORDS B163 BDB223 ( bas.asm):02391 JSR >LB223 GO EVALUATE AN EXPRESSION B166 0F3F ( bas.asm):02392 LB166 CLR TRELFL RESET RELATIONAL OPERATOR FLAG B168 9DA5 ( bas.asm):02393 LB168 JSR GETCCH GET CURRENT INPUT CHARACTER ( bas.asm):02394 * CHECK FOR RELATIONAL OPERATORS B16A 80B2 ( bas.asm):02395 LB16A SUBA #$B2 TOKEN FOR > B16C 2513 ( bas.asm):02396 BCS LB181 BRANCH IF LESS THAN RELATIONAL OPERATORS B16E 8103 ( bas.asm):02397 CMPA #3 * B170 240F ( bas.asm):02398 BCC LB181 * BRANCH IF GREATER THAN RELATIONAL OPERATORS B172 8101 ( bas.asm):02399 CMPA #1 SET CARRY IF ‘>‘ B174 49 ( bas.asm):02400 ROLA CARRY TO BIT 0 B175 983F ( bas.asm):02401 EORA TRELFL * CARRY SET IF B177 913F ( bas.asm):02402 CMPA TRELFL * TRELFL = ACCA B179 2564 ( bas.asm):02403 BCS LB1DF BRANCH IF SYNTAX ERROR : == << OR >> B17B 973F ( bas.asm):02404 STA TRELFL BIT 0: >, BIT 1 =, BIT 2: < SAVE DESIRED RELATIONAL COMPARISON B17D 9D9F ( bas.asm):02405 JSR GETNCH GET AN INPUT CHARACTER B17F 20E9 ( bas.asm):02406 BRA LB16A CHECK FOR ANOTHER RELATIONAL OPERATOR ( bas.asm):02407 * B181 D63F ( bas.asm):02408 LB181 LDB TRELFL GET RELATIONAL OPERATOR FLAG B183 2633 ( bas.asm):02409 BNE LB1B8 BRANCH IF RELATIONAL COMPARISON B185 1024006B ( bas.asm):02410 LBCC LB1F4 BRANCH IF > RELATIONAL OPERATOR B189 8B07 ( bas.asm):02411 ADDA #7 SEVEN ARITHMETIC/LOGICAL OPERATORS B18B 2467 ( bas.asm):02412 BCC LB1F4 BRANCH IF NOT ARITHMETIC/LOGICAL OPERATOR B18D 9906 ( bas.asm):02413 ADCA VALTYP ADD CARRY, NUMERIC FLAG AND MODIFIED TOKEN NUMBER B18F 1027047C ( bas.asm):02414 LBEQ LB60F BRANCH IF VALTYP = FF, AND ACCA = ‘+‘ TOKEN CONCATENATE TWO STRINGS B193 89FF ( bas.asm):02415 ADCA #-1 RESTORE ARITHMETIC/LOGICAL OPERATOR NUMBER B195 3402 ( bas.asm):02416 PSHS A * STORE OPERATOR NUMBER ON STACK; MULTIPLY IT BY 2 B197 48 ( bas.asm):02417 ASLA * THEN ADD THE STORED STACK DATA = MULTIPLY B198 ABE0 ( bas.asm):02418 ADDA ,S+ * X 3; 3 BYTE/TABLE ENTRY B19A 8EAA51 ( bas.asm):02419 LDX #LAA51 JUMP TABLE FOR ARITHMETIC & LOGICAL OPERATORS B19D 3086 ( bas.asm):02420 LEAX A,X POINT X TO PROPER TABLE B19F 3502 ( bas.asm):02421 LB19F PULS A GET PRECEDENCE FLAG FROM STACK B1A1 A184 ( bas.asm):02422 CMPA ,X COMPARE TO CURRENT OPERATOR B1A3 2455 ( bas.asm):02423 BCC LB1FA BRANCH IF STACK OPERATOR > CURRENT OPERATOR B1A5 8D9C ( bas.asm):02424 BSR LB143 ‘TM’ ERROR IF VARIABLE TYPE = STRING ( bas.asm):02425 * OPERATION BEING PROCESSED IS OF HIGHER PRECEDENCE THAN THE PREVIOUS OPERATION. B1A7 3402 ( bas.asm):02426 LB1A7 PSHS A SAVE PRECEDENCE FLAG B1A9 8D29 ( bas.asm):02427 BSR LB1D4 PUSH OPERATOR ROUTINE ADDRESS AND FPA0 ONTO STACK B1AB 9E3D ( bas.asm):02428 LDX RELPTR GET POINTER TO ARITHMETIC/LOGICAL TABLE ENTRY FOR ( bas.asm):02429 * LAST CALCULATED OPERATION B1AD 3502 ( bas.asm):02430 PULS A GET PRECEDENCE FLAG OF PREVIOUS OPERATION B1AF 261D ( bas.asm):02431 BNE LB1CE BRANCH IF NOT END OF OPERATION B1B1 4D ( bas.asm):02432 TSTA CHECK TYPE OF PRECEDENCE FLAG B1B2 1027006A ( bas.asm):02433 LBEQ LB220 BRANCH IF END OF EXPRESSION OR SUB-EXPRESSION B1B6 204B ( bas.asm):02434 BRA LB203 EVALUATE AN OPERATION ( bas.asm):02435 * DO A RELATIONAL COMPARISON HERE B1B8 0806 ( bas.asm):02436 LB1B8 ASL VALTYP BIT 7 OF TYPE FLAG TO CARRY B1BA 59 ( bas.asm):02437 ROLB SHIFT RELATIONAL FLAG LEFT - VALTYP TO BIT 0 B1BB 8D09 ( bas.asm):02438 BSR LB1C6 MOVE THE INPUT POINTER BACK ONE B1BD 8EB1CB ( bas.asm):02439 LDX #LB1CB POINT X TO RELATIONAL COMPARISON JUMP TABLE B1C0 D73F ( bas.asm):02440 STB TRELFL SAVE RELATIONAL COMPARISON DATA B1C2 0F06 ( bas.asm):02441 CLR VALTYP SET VARIABLE TYPE TO NUMERIC B1C4 20D9 ( bas.asm):02442 BRA LB19F PERFORM OPERATION OR SAVE ON STACK B1C6 9EA6 ( bas.asm):02443 LB1C6 LDX CHARAD * GET BASIC’S INPUT POINTER AND B1C8 7EAEBB ( bas.asm):02444 JMP >LAEBB * MOVE IT BACK ONE ( bas.asm):02445 * RELATIONAL COMPARISON JUMP TABLE B1CB 64 ( bas.asm):02446 LB1CB FCB $64 RELATIONAL COMPARISON FLAG B1CC B2F4 ( bas.asm):02447 LB1CC FDB LB2F4 JUMP ADDRESS B1CE A184 ( bas.asm):02448 LB1CE CMPA ,X COMPARE PRECEDENCE OF LAST DONE OPERATION TO ( bas.asm):02449 * NEXT TO BE DONE OPERATION B1D0 2431 ( bas.asm):02450 BCC LB203 EVALUATE OPERATION IF LOWER PRECEDENCE B1D2 20D3 ( bas.asm):02451 BRA LB1A7 PUSH OPERATION DATA ON STACK IF HIGHER PRECEDENCE ( bas.asm):02452 * PUSH OPERATOR EVALUATION ADDRESS AND FPA0 ONTO STACK AND EVALUATE ANOTHER EXPR B1D4 EC01 ( bas.asm):02453 LB1D4 LDD 1,X GET ADDRESS OF OPERATOR ROUTINE B1D6 3406 ( bas.asm):02454 PSHS B,A SAVE IT ON THE STACK B1D8 8D08 ( bas.asm):02455 BSR LB1E2 PUSH FPA0 ONTO STACK B1DA D63F ( bas.asm):02456 LDB TRELFL GET BACK RELATIONAL OPERATOR FLAG B1DC 16FF7B ( bas.asm):02457 LBRA LB15A EVALUATE ANOTHER EXPRESSION B1DF 7EB277 ( bas.asm):02458 LB1DF JMP >LB277 ‘SYNTAX ERROR’ ( bas.asm):02459 * PUSH FPA0 ONTO THE STACK. ,S = EXPONENT ( bas.asm):02460 * 1-2,S =HIGH ORDER MANTISSA 3-4,S = LOW ORDER MANTISSA ( bas.asm):02461 * 5,S = SIGN RETURN WITH PRECEDENCE CODE IN ACCA B1E2 D654 ( bas.asm):02462 LB1E2 LDB FP0SGN GET SIGN OF FPA0 MANTISSA B1E4 A684 ( bas.asm):02463 LDA ,X GET PRECEDENCE CODE TO ACCA B1E6 3520 ( bas.asm):02464 LB1E6 PULS Y GET RETURN ADDRESS FROM STACK & PUT IT IN Y B1E8 3404 ( bas.asm):02465 PSHS B SAVE ACCB ON STACK B1EA D64F ( bas.asm):02466 LB1EA LDB FP0EXP * PUSH FPA0 ONTO THE STACK B1EC 9E50 ( bas.asm):02467 LDX FPA0 * B1EE DE52 ( bas.asm):02468 LDU FPA0+2 * B1F0 3454 ( bas.asm):02469 PSHS U,X,B * B1F2 6EA4 ( bas.asm):02470 JMP ,Y JUMP TO ADDRESS IN Y ( bas.asm):02471 * BRANCH HERE IF NON-OPERATOR CHARACTER FOUND - USUALLY ‘)‘ OR END OF LINE B1F4 9E8A ( bas.asm):02472 LB1F4 LDX ZERO POINT X TO DUMMY VALUE (ZERO) B1F6 A6E0 ( bas.asm):02473 LDA ,S+ GET PRECEDENCE FLAG FROM STACK B1F8 2726 ( bas.asm):02474 BEQ LB220 BRANCH IF END OF EXPRESSION B1FA 8164 ( bas.asm):02475 LB1FA CMPA #$64 * CHECK FOR RELATIONAL COMPARISON FLAG B1FC 2703 ( bas.asm):02476 BEQ LB201 * AND BRANCH IF RELATIONAL COMPARISON B1FE BDB143 ( bas.asm):02477 JSR >LB143 ‘TM’ ERROR IF VARIABLE TYPE = STRING B201 9F3D ( bas.asm):02478 LB201 STX RELPTR SAVE POINTER TO OPERATOR ROUTINE B203 3504 ( bas.asm):02479 LB203 PULS B GET RELATIONAL OPERATOR FLAG FROM STACK B205 815A ( bas.asm):02480 CMPA #$5A CHECK FOR ‘NOT’ OPERATOR B207 2719 ( bas.asm):02481 BEQ LB222 RETURN IF ‘NOT’ - NO RELATIONAL COMPARISON B209 817D ( bas.asm):02482 CMPA #$7D CHECK FOR NEGATION (UNARY) FLAG B20B 2715 ( bas.asm):02483 BEQ LB222 RETURN IF NEGATION - NO RELATIONAL COMPARISON ( bas.asm):02484 * EVALUATE AN OPERATION. EIGHT BYTES WILL BE STORED ON STACK, FIRST SIX BYTES ( bas.asm):02485 * ARE A TEMPORARY FLOATING POINT RESULT THEN THE ADDRESS OF ROUTINE WHICH ( bas.asm):02486 * WILL EVALUATE THE OPERATION. THE RTS AT END OF ROUTINE WILL VECTOR ( bas.asm):02487 * TO EVALUATING ROUTINE. B20D 54 ( bas.asm):02488 LSRB = ROTATE VALTYP BIT INTO CARRY B20E D70A ( bas.asm):02489 STB RELFLG = FLAG AND SAVE NEW RELFLG B210 3552 ( bas.asm):02490 PULS A,X,U * PULL A FP VALUE OFF OF THE STACK B212 975C ( bas.asm):02491 STA FP1EXP * AND SAVE IT IN FPA1 B214 9F5D ( bas.asm):02492 STX FPA1 * B216 DF5F ( bas.asm):02493 STU FPA1+2 * B218 3504 ( bas.asm):02494 PULS B = GET MANTISSA SIGN AND B21A D761 ( bas.asm):02495 STB FP1SGN = SAVE IT IN FPA1 B21C D854 ( bas.asm):02496 EORB FP0SGN EOR IT WITH FPA1 MANTISSA SIGN B21E D762 ( bas.asm):02497 STB RESSGN SAVE IT IN RESULT SIGN BYTE B220 D64F ( bas.asm):02498 LB220 LDB FP0EXP GET EXPONENT OF FPA0 B222 39 ( bas.asm):02499 LB222 RTS B223 BD018B ( bas.asm):02500 LB223 JSR >RVEC15 HOOK INTO RAM B226 0F06 ( bas.asm):02501 CLR VALTYP INITIALIZE TYPE FLAG TO NUMERIC B228 9D9F ( bas.asm):02502 JSR GETNCH GET AN INPUT CHAR B22A 2403 ( bas.asm):02503 BCC LB22F BRANCH IF NOT NUMERIC B22C 7EBD12 ( bas.asm):02504 LB22C JMP >LBD12 CONVERT ASCII STRING TO FLOATING POINT - ( bas.asm):02505 * RETURN RESULT IN FPA0 ( bas.asm):02506 * PROCESS A NON NUMERIC FIRST CHARACTER B22F BDB3A2 ( bas.asm):02507 LB22F JSR >LB3A2 SET CARRY IF NOT ALPHA B232 2450 ( bas.asm):02508 BCC LB284 BRANCH IF ALPHA CHARACTER B234 812E ( bas.asm):02509 CMPA #'. IS IT ‘.‘ (DECIMAL POINT)? B236 27F4 ( bas.asm):02510 BEQ LB22C CONVERT ASCII STRING TO FLOATING POINT B238 81AC ( bas.asm):02511 CMPA #$AC MINUS TOKEN B23A 2740 ( bas.asm):02512 BEQ LB27C YES - GO PROCESS THE MINUS OPERATOR B23C 81AB ( bas.asm):02513 CMPA #$AB PLUS TOKEN B23E 27E3 ( bas.asm):02514 BEQ LB223 YES - GET ANOTHER CHARACTER B240 8122 ( bas.asm):02515 CMPA #'" STRING DELIMITER? B242 260A ( bas.asm):02516 BNE LB24E NO B244 9EA6 ( bas.asm):02517 LB244 LDX CHARAD CURRENT BASIC POINTER TO X B246 BDB518 ( bas.asm):02518 JSR >LB518 SAVE STRING ON STRING STACK B249 9E64 ( bas.asm):02519 LB249 LDX COEFPT * GET ADDRESS OF END OF STRING AND B24B 9FA6 ( bas.asm):02520 STX CHARAD * PUT BASIC’S INPUT POINTER THERE B24D 39 ( bas.asm):02521 RTS B24E 81A8 ( bas.asm):02522 LB24E CMPA #$A8 NOT TOKEN? B250 260D ( bas.asm):02523 BNE LB25F NO ( bas.asm):02524 * PROCESS THE NOT OPERATOR B252 865A ( bas.asm):02525 LDA #$5A ‘NOT’ PRECEDENCE FLAG B254 BDB15A ( bas.asm):02526 JSR >LB15A PROCESS OPERATION FOLLOWING ‘NOT’ B257 BDB3ED ( bas.asm):02527 JSR >INTCNV CONVERT FPA0 TO INTEGER IN ACCD B25A 43 ( bas.asm):02528 COMA * ‘NOT’ THE INTEGER B25B 53 ( bas.asm):02529 COMB * B25C 7EB4F4 ( bas.asm):02530 JMP >GIVABF CONVERT ACCD TO FLOATING POINT (FPA0) B25F 4C ( bas.asm):02531 LB25F INCA CHECK FOR TOKENS PRECEEDED BY 5FF B260 272E ( bas.asm):02532 BEQ LB290 IT WAS PRECEEDED BY 5FF B262 8D06 ( bas.asm):02533 LB262 BSR LB26A SYNTAX CHECK FOR A ‘(‘ B264 BDB156 ( bas.asm):02534 JSR >LB156 EVALUATE EXPRESSIONS WITHIN PARENTHESES AT ( bas.asm):02535 * HIGHEST PRECEDENCE B267 C629 ( bas.asm):02536 LB267 LDB #') SYNTAX CHECK FOR ‘)‘ B269 8C ( bas.asm):02537 FCB SKP2 SKIP 2 BYTES B26A C628 ( bas.asm):02538 LB26A LDB #'( SYNTAX CHECK FOR ‘(‘ B26C 8C ( bas.asm):02539 FCB SKP2 SKIP 2 BYTES B26D ( bas.asm):02540 SYNCOMMA EQU * B26D C62C ( bas.asm):02541 LB26D LDB #', SYNTAX CHECK FOR COMMA B26F E19F00A6 ( bas.asm):02542 LB26F CMPB [CHARAD] * COMPARE ACCB TO CURRENT INPUT B273 2602 ( bas.asm):02543 BNE LB277 * CHARACTER - SYNTAX ERROR IF NO MATCH B275 0E9F ( bas.asm):02544 JMP GETNCH GET A CHARACTER FROM BASIC B277 C602 ( bas.asm):02545 LB277 LDB #2*1 SYNTAX ERROR B279 7EAC46 ( bas.asm):02546 JMP >LAC46 JUMP TO ERROR HANDLER ( bas.asm):02547 * PROCESS THE MINUS (UNARY) OPERATOR B27C 867D ( bas.asm):02548 LB27C LDA #$7D MINUS (UNARY) PRECEDENCE FLAG B27E BDB15A ( bas.asm):02549 JSR >LB15A PROCESS OPERATION FOLLOWING ‘UNARY’ NEGATION B281 7EBEE9 ( bas.asm):02550 JMP >LBEE9 CHANGE SIGN OF FPA0 MANTISSA ( bas.asm):02551 * EVALUATE ALPHA EXPRESSION B284 BDB357 ( bas.asm):02552 LB284 JSR >LB357 FIND THE DESCRIPTOR ADDRESS OF A VARIABLE B287 9F52 ( bas.asm):02553 LB287 STX FPA0+2 SAVE DESCRIPTOR ADDRESS IN FPA0 B289 9606 ( bas.asm):02554 LDA VALTYP TEST VARIABLE TYPE B28B 2695 ( bas.asm):02555 BNE LB222 RETURN IF STRING B28D 7EBC14 ( bas.asm):02556 JMP >LBC14 COPY A FP NUMBER FROM (X) TO FPA0 ( bas.asm):02557 * EVALUATING A SECONDARY TOKEN B290 9D9F ( bas.asm):02558 LB290 JSR GETNCH GET AN INPUT CHARACTER (SECONDARY TOKEN) B292 1F89 ( bas.asm):02559 TFR A,B SAVE IT IN ACCB B294 58 ( bas.asm):02560 ASLB X2 & BET RID OF BIT 7 B295 9D9F ( bas.asm):02561 JSR GETNCH GET ANOTHER INPUT CHARACTER B297 C126 ( bas.asm):02562 CMPB #2*19 19 SECONDARY FUNCTIONS IN BASIC B299 2304 ( bas.asm):02563 BLS LB29F BRANCH IF COLOR BASIC TOKEN B29B 6E9F0132 ( bas.asm):02564 JMP [COMVEC+18] JUMP TO EXBAS SECONDARY TOKEN HANDLER B29F 3404 ( bas.asm):02565 LB29F PSHS B SAVE TOKEN OFFSET ON STACK B2A1 C11C ( bas.asm):02566 CMPB #2*14 CHECK FOR NUMERIC ARGUMENT TOKEN B2A3 2522 ( bas.asm):02567 BCS LB2C7 DO SECONDARIES $8D (JOYSTK) OR LESS B2A5 C124 ( bas.asm):02568 CMPB #2*18 * B2A7 2420 ( bas.asm):02569 BCC LB2C9 * DO SECONDARIES $92 (INKEY$) OR > B2A9 8DBF ( bas.asm):02570 BSR LB26A SYNTAX CHECK FOR A ‘(‘ B2AB A6E4 ( bas.asm):02571 LDA ,S GET TOKEN NUMBER B2AD 8122 ( bas.asm):02572 CMPA #2*17 CHECK FOR ‘POINT’ COMMAND B2AF 2418 ( bas.asm):02573 BCC LB2C9 DO POINT COMMAND ($91) ( bas.asm):02574 * DO SECONDARIES $8E, $8F, $90 (LEFT$, RIGHT$, MID$) B2B1 BDB156 ( bas.asm):02575 JSR >LB156 EVALUATE FIRST STRING IN ARGUMENT B2B4 8DB7 ( bas.asm):02576 BSR LB26D SYNTAX CHECK FOR A COMMA B2B6 BDB146 ( bas.asm):02577 JSR >LB146 ‘TM’ ERROR IF NUMERIC VARiABLE B2B9 3502 ( bas.asm):02578 PULS A GET TOKEN OFFSET FROM STACK B2BB DE52 ( bas.asm):02579 LDU FPA0+2 POINT U TO STRING DESCRIPTOR B2BD 3442 ( bas.asm):02580 PSHS U,A SAVE TOKEN OFFSET AND DESCRIPTOR ADDRESS B2BF BDB70B ( bas.asm):02581 JSR >LB70B EVALUATE FIRST NUMERIC ARGUMENT B2C2 3502 ( bas.asm):02582 PULS A GET TOKEN OFFSET FROM STACK B2C4 3406 ( bas.asm):02583 PSHS B,A SAVE TOKEN OFFSET AND NUMERIC ARGUMENT B2C6 8E ( bas.asm):02584 FCB $8E OP CODE OF LDX# - SKlP 2 BYTES B2C7 8D99 ( bas.asm):02585 LB2C7 BSR LB262 SYNTAX CHECK FOR A ‘(‘ B2C9 3504 ( bas.asm):02586 LB2C9 PULS B GET TOKEN OFFSET B2CB BE0128 ( bas.asm):02587 LDX COMVEC+8 GET SECONDARY FUNCTION JUMP TABLE ADDRESS B2CE 3A ( bas.asm):02588 LB2CE ABX ADD IN COMMAND OFFSET ( bas.asm):02589 * ( bas.asm):02590 * HERE IS WHERE WE BRANCH TO A SECONDARY FUNCTION B2CF AD94 ( bas.asm):02591 JSR [,X] GO DO AN SECONDARY FUNCTION B2D1 7EB143 ( bas.asm):02592 JMP >LB143 ‘TM’ ERROR IF VARIABLE TYPE = STRING ( bas.asm):02593 * LOGICAL OPERATOR ‘OR’ JUMPS HERE B2D4 86 ( bas.asm):02594 LB2D4 FCB SKP1LD SKIP ONE BYTE - ‘OR’ FLAG = $4F ( bas.asm):02595 * LOGICAL OPERATOR ‘AND’ JUMPS HERE B2D5 4F ( bas.asm):02596 LB2D5 CLRA AND FLAG = 0 B2D6 9703 ( bas.asm):02597 STA TMPLOC AND/OR FLAG B2D8 BDB3ED ( bas.asm):02598 JSR >INTCNV CONVERT FPA0 INTO AN INTEGER IN ACCD B2DB DD01 ( bas.asm):02599 STD CHARAC TEMP SAVE ACCD B2DD BDBC4A ( bas.asm):02600 JSR >LBC4A MOVE FPA1 TO FPA0 B2E0 BDB3ED ( bas.asm):02601 JSR >INTCNV CONVERT FPA0 INTO AN INTEGER IN ACCD B2E3 0D03 ( bas.asm):02602 TST TMPLOC CHECK AND/OR FLAG B2E5 2606 ( bas.asm):02603 BNE LB2ED BRANCH IF OR B2E7 9401 ( bas.asm):02604 ANDA CHARAC * ‘AND’ ACCD WITH FPA0 INTEGER B2E9 D402 ( bas.asm):02605 ANDB ENDCHR * STORED IN ENDCHR B2EB 2004 ( bas.asm):02606 BRA LB2F1 CONVERT TO FP B2ED 9A01 ( bas.asm):02607 LB2ED ORA CHARAC * ‘OR’ ACCD WITH FPA0 INTEGER B2EF DA02 ( bas.asm):02608 ORB ENDCHR * STORED IN CHARAC B2F1 7EB4F4 ( bas.asm):02609 LB2F1 JMP >GIVABF CONVERT THE VALUE IN ACCD INTO A FP NUMBER ( bas.asm):02610 * RELATIONAL COMPARISON PROCESS HANDLER B2F4 BDB148 ( bas.asm):02611 LB2F4 JSR >LB148 ‘TM’ ERROR IF TYPE MISMATCH B2F7 2610 ( bas.asm):02612 BNE LB309 BRANCH IF STRING VARIABLE B2F9 9661 ( bas.asm):02613 LDA FP1SGN * ‘PACK’ THE MANTISSA B2FB 8A7F ( bas.asm):02614 ORA #$7F * SIGN OF FPA1 INTO B2FD 945D ( bas.asm):02615 ANDA FPA1 * BIT 7 OF THE B2FF 975D ( bas.asm):02616 STA FPA1 * MANTISSA MS BYTE B301 8E005C ( bas.asm):02617 LDX #FP1EXP POINT X TO FPA1 B304 BDBC96 ( bas.asm):02618 JSR >LBC96 COMPARE FPA0 TO FPA1 B307 2036 ( bas.asm):02619 BRA LB33F CHECK TRUTH OF RELATIONAL COMPARISON ( bas.asm):02620 * RELATIONAL COMPARISON OF STRINGS B309 0F06 ( bas.asm):02621 LB309 CLR VALTYP SET VARIABLE TYPE TO NUMERIC B30B 0A3F ( bas.asm):02622 DEC TRELFL REMOVE STRING TYPE FLAG (BIT0=1 FOR STRINGS) FROM THE ( bas.asm):02623 * DESIRED RELATIONAL COMPARISON DATA B30D BDB657 ( bas.asm):02624 JSR >LB657 GET LENGTH AND ADDRESS OF STRING WHOSE ( bas.asm):02625 * DESCRIPTOR ADDRESS IS IN THE BOTTOM OF FPA0 B310 D756 ( bas.asm):02626 STB STRDES * SAVE LENGTH AND ADDRESS IN TEMPORARY B312 9F58 ( bas.asm):02627 STX STRDES+2 * DESCRIPTOR (STRING B) B314 9E5F ( bas.asm):02628 LDX FPA1+2 = RETURN LENGTH AND ADDRESS OF STRING B316 BDB659 ( bas.asm):02629 JSR >LB659 = WHOSE DESCRIPTOR ADDRESS IS STORED IN FPA1+2 B319 9656 ( bas.asm):02630 LDA STRDES LOAD ACCA WITH LENGTH OF STRING B B31B 3404 ( bas.asm):02631 PSHS B SAVE LENGTH A ON STACK B31D A0E0 ( bas.asm):02632 SUBA ,S+ SUBTRACT LENGTH A FROM LENGTH B B31F 2707 ( bas.asm):02633 BEQ LB328 BRANCH IF STRINGS OF EQUAL LENGTH B321 8601 ( bas.asm):02634 LDA #1 TRUE FLAG B323 2403 ( bas.asm):02635 BCC LB328 TRUE IF LENGTH B > LENGTH A B325 D656 ( bas.asm):02636 LDB STRDES LOAD ACCB WITH LENGTH B B327 40 ( bas.asm):02637 NEGA SET FLAG = FALSE (1FF) B328 9754 ( bas.asm):02638 LB328 STA FP0SGN SAVE TRUE/FALSE FLAG B32A DE58 ( bas.asm):02639 LDU STRDES+2 POINT U TO START OF STRING B32C 5C ( bas.asm):02640 INCB COMPENSATE FOR THE DECB BELOW ( bas.asm):02641 * ENTER WITH ACCB CONTAINING LENGTH OF SHORTER STRING B32D 5A ( bas.asm):02642 LB32D DECB DECREMENT SHORTER STRING LENGTH B32E 2604 ( bas.asm):02643 BNE LB334 BRANCH IF ALL OF STRING NOT COMPARED B330 D654 ( bas.asm):02644 LDB FP0SGN GET TRUE/FALSE FLAB B332 200B ( bas.asm):02645 BRA LB33F CHECK TRUTH OF RELATIONAL COMPARISON B334 A680 ( bas.asm):02646 LB334 LDA ,X+ GET A BYTE FROM STRING A B336 A1C0 ( bas.asm):02647 CMPA ,U+ COMPARE TO STRING B B338 27F3 ( bas.asm):02648 BEQ LB32D CHECK ANOTHER CHARACTER IF = B33A C6FF ( bas.asm):02649 LDB #$FF FALSE FLAG IF STRING A > B B33C 2401 ( bas.asm):02650 BCC LB33F BRANCH IF STRING A > STRING B B33E 50 ( bas.asm):02651 NEGB SET FLAG = TRUE ( bas.asm):02652 * DETERMINE TRUTH OF COMPARISON - RETURN RESULT IN FPA0 B33F CB01 ( bas.asm):02653 LB33F ADDB #1 CONVERT $FF,0,1 TO 0,1,2 B341 59 ( bas.asm):02654 ROLB NOW IT’S 1,2,4 FOR > = < B342 D40A ( bas.asm):02655 ANDB RELFLG ‘AND’ THE ACTUAL COMPARISON WITH THE DESIRED COMPARISON B344 2702 ( bas.asm):02656 BEQ LB348 BRANCH IF FALSE (NO MATCHING BITS) B346 C6FF ( bas.asm):02657 LDB #$FF TRUE FLAG B348 7EBC7C ( bas.asm):02658 LB348 JMP >LBC7C CONVERT ACCB INTO FP NUMBER IN FPA0 ( bas.asm):02659 * DIM B34B BDB26D ( bas.asm):02660 LB34B JSR >LB26D SYNTAX CHECK FOR COMMA B34E C601 ( bas.asm):02661 DIM LDB #1 DIMENSION FLAG B350 8D08 ( bas.asm):02662 BSR LB35A SAVE ARRAY SPACE FOR THIS VARIABLE B352 9DA5 ( bas.asm):02663 JSR GETCCH GET CURRENT INPUT CHARACTER B354 26F5 ( bas.asm):02664 BNE LB34B KEEP DIMENSIONING IF NOT END OF LINE B356 39 ( bas.asm):02665 RTS ( bas.asm):02666 * EVALUATE A VARIABLE - RETURN X AND ( bas.asm):02667 * VARPTR POINTING TO VARIABLE DESCRIPTOR ( bas.asm):02668 * EACH VARIABLE REQUIRES 7 BYTES - THE FIRST TWO ( bas.asm):02669 * BYTES ARE THE VARIABLE NAME AND THE NEXT 5 ( bas.asm):02670 * BYTES ARE THE DESCRIPTOR. IF BIT 7 OF THE ( bas.asm):02671 * FIRST BYTE OF VARlABLE NAME IS SET, THE ( bas.asm):02672 * VARIABLE IS A DEF FN VARIABLE. IF BIT 7 OF ( bas.asm):02673 * THE SECOND BYTE OF VARIABLE NAME IS SET, THE ( bas.asm):02674 * VARIABLE IS A STRING, OTHERWISE THE VARIABLE ( bas.asm):02675 * IS NUMERIC. ( bas.asm):02676 * IF THE VARIABLE IS NOT FOUND, A ZERO VARIABLE IS ( bas.asm):02677 * INSERTED INTO THE VARIABLE SPACE B357 5F ( bas.asm):02678 LB357 CLRB DIMENSION FLAG = 0; DO NOT SET UP AN ARRAY B358 9DA5 ( bas.asm):02679 JSR GETCCH GET CURRENT INPUT CHARACTER B35A D705 ( bas.asm):02680 LB35A STB DIMFLG SAVE ARRAY FLAG B35C 9737 ( bas.asm):02681 LB35C STA VARNAM SAVE INPUT CHARACTER ( bas.asm):02682 * ENTRY POINT FOR DEF FN VARIABLE SEARCH B35E 9DA5 ( bas.asm):02683 JSR GETCCH GET CURRENT INPUT CHARACTER B360 8D40 ( bas.asm):02684 BSR LB3A2 SET CARRY IF NOT ALPHA B362 1025FF11 ( bas.asm):02685 LBCS LB277 SYNTAX ERROR IF NOT ALPHA B366 5F ( bas.asm):02686 CLRB DEFAULT 2ND VARIABLE CHARACTER TO ZERO B367 D706 ( bas.asm):02687 STB VALTYP SET VARIABLE TYPE TO NUMERIC B369 9D9F ( bas.asm):02688 JSR GETNCH GET ANOTHER CHARACTER FROM BASIC B36B 2504 ( bas.asm):02689 BCS LB371 BRANCH IF NUMERIC (2ND CHARACTER IN ( bas.asm):02690 * VARIABLE MAY BE NUMERIC) B36D 8D33 ( bas.asm):02691 BSR LB3A2 SET CARRY IF NOT ALPHA B36F 250A ( bas.asm):02692 BCS LB37B BRANCH IF NOT ALPHA B371 1F89 ( bas.asm):02693 LB371 TFR A,B SAVE 2ND CHARACTER IN ACCB ( bas.asm):02694 * READ INPUT CHARACTERS UNTIL A NON ALPHA OR ( bas.asm):02695 * NON NUMERIC IS FOUND - IGNORE ALL CHARACTERS ( bas.asm):02696 * IN VARIABLE NAME AFTER THE 1ST TWO B373 9D9F ( bas.asm):02697 LB373 JSR GETNCH GET AN INPUT CHARACTER B375 25FC ( bas.asm):02698 BCS LB373 BRANCH IF NUMERIC B377 8D29 ( bas.asm):02699 BSR LB3A2 SET CARRY IF NOT ALPHA B379 24F8 ( bas.asm):02700 BCC LB373 BRANCH IF ALPHA B37B 8124 ( bas.asm):02701 LB37B CMPA #'$ CHECK FOR A STRING VARIABLE B37D 2606 ( bas.asm):02702 BNE LB385 BRANCH IF IT IS NOT A STRING B37F 0306 ( bas.asm):02703 COM VALTYP SET VARIABLE TYPE TO STRING B381 CB80 ( bas.asm):02704 ADDB #$80 SET BIT 7 OF 2ND CHARACTER (STRING) B383 9D9F ( bas.asm):02705 JSR GETNCH GET AN INPUT CHARACTER B385 D738 ( bas.asm):02706 LB385 STB VARNAM+1 SAVE 2ND CHARACTER IN VARNAM+1 B387 9A08 ( bas.asm):02707 ORA ARYDIS OR IN THE ARRAY DISABLE FLAG - IF = $80, ( bas.asm):02708 * DON’T SEARCH FOR VARIABLES IN THE ARRAYS B389 8028 ( bas.asm):02709 SUBA #'( IS THIS AN ARRAY VARIABLE? B38B 10270075 ( bas.asm):02710 LBEQ LB404 BRANCH IF IT IS B38F 0F08 ( bas.asm):02711 CLR ARYDIS RESET THE ARRAY DISABLE FLAG B391 9E1B ( bas.asm):02712 LDX VARTAB POINT X TO THE START OF VARIABLES B393 DC37 ( bas.asm):02713 LDD VARNAM GET VARIABLE IN QUESTION B395 9C1D ( bas.asm):02714 LB395 CMPX ARYTAB COMPARE X TO THE END OF VARIABLES B397 2712 ( bas.asm):02715 BEQ LB3AB BRANCH IF END OF VARIABLES B399 10A381 ( bas.asm):02716 CMPD ,X++ * COMPARE VARIABLE IN QUESTION TO CURRENT B39C 273E ( bas.asm):02717 BEQ LB3DC * VARIABLE AND BRANCH IF MATCH B39E 3005 ( bas.asm):02718 LEAX 5,X = MOVE POINTER TO NEXT VARIABLE AND B3A0 20F3 ( bas.asm):02719 BRA LB395 = KEEP LOOKING ( bas.asm):02720 * SET CARRY IF NOT UPPER CASE ALPHA B3A2 8141 ( bas.asm):02721 LB3A2 CMPA #'A * CARRY SET IF < ‘A’ B3A4 2504 ( bas.asm):02722 BCS LB3AA * B3A6 805B ( bas.asm):02723 SUBA #'Z+1 = B3A8 80A5 ( bas.asm):02724 SUBA #-('Z+1) = CARRY CLEAR IF <= 'Z' B3AA 39 ( bas.asm):02725 LB3AA RTS ( bas.asm):02726 * PUT A NEW VARIABLE IN TABLE OF VARIABLES B3AB 8E008A ( bas.asm):02727 LB3AB LDX #ZERO POINT X TO ZERO LOCATION B3AE EEE4 ( bas.asm):02728 LDU ,S GET CURRENT RETURN ADDRESS B3B0 1183B287 ( bas.asm):02729 CMPU #LB287 DID WE COME FROM ‘EVALUATE ALPHA EXPR’? B3B4 2728 ( bas.asm):02730 BEQ LB3DE YES - RETURN A ZERO VALUE B3B6 DC1F ( bas.asm):02731 LDD ARYEND * GET END OF ARRAYS ADDRESS AND B3B8 DD43 ( bas.asm):02732 STD V43 * SAVE IT AT V43 B3BA C30007 ( bas.asm):02733 ADDD #7 = ADD 7 TO END OF ARRAYS (EACH B3BD DD41 ( bas.asm):02734 STD V41 = VARIABLE = 7 BYTES) AND SAVE AT V41 B3BF 9E1D ( bas.asm):02735 LDX ARYTAB * GET END OF VARIABLES AND SAVE AT V47 B3C1 9F47 ( bas.asm):02736 STX V47 * B3C3 BDAC1E ( bas.asm):02737 JSR >LAC1E MAKE A SEVEN BYTE SLOT FOR NEW VARIABLE AT ( bas.asm):02738 * TOP OF VARIABLES B3C6 9E41 ( bas.asm):02739 LDX V41 = GET NEW END OF ARRAYS AND SAVE IT B3C8 9F1F ( bas.asm):02740 STX ARYEND = B3CA 9E45 ( bas.asm):02741 LDX V45 * GET NEW END OF VARIABLES AND SAVE IT B3CC 9F1D ( bas.asm):02742 STX ARYTAB * B3CE 9E47 ( bas.asm):02743 LDX V47 GET OLD END OF VARIABLES B3D0 DC37 ( bas.asm):02744 LDD VARNAM GET NEW VARIABLE NAME B3D2 ED81 ( bas.asm):02745 STD ,X++ SAVE VARIABLE NAME B3D4 4F ( bas.asm):02746 CLRA * ZERO OUT THE FP VALUE OF THE NUMERIC B3D5 5F ( bas.asm):02747 CLRB * VARIABLE OR THE LENGTH AND ADDRESS B3D6 ED84 ( bas.asm):02748 STD ,X * OF A STRING VARIABLE B3D8 ED02 ( bas.asm):02749 STD 2,X * B3DA A704 ( bas.asm):02750 STA 4,X * B3DC 9F39 ( bas.asm):02751 LB3DC STX VARPTR STORE ADDRESS OF VARIABLE VALUE B3DE 39 ( bas.asm):02752 LB3DE RTS ( bas.asm):02753 * B3DF 9080000000 ( bas.asm):02754 LB3DF FCB $90,$80,$00,$00,$00 * FLOATING POINT -32768 ( bas.asm):02755 * SMALLEST SIGNED TWO BYTE INTEGER ( bas.asm):02756 * B3E4 9D9F ( bas.asm):02757 LB3E4 JSR GETNCH GET AN INPUT CHARACTER FROM BASIC B3E6 BDB141 ( bas.asm):02758 LB3E6 JSR >LB141 GO EVALUATE NUMERIC EXPRESSION B3E9 9654 ( bas.asm):02759 LB3E9 LDA FP0SGN GET FPA0 MANTISSA SIGN B3EB 2B5D ( bas.asm):02760 BMI LB44A ‘FC’ ERROR IF NEGATIVE NUMBER ( bas.asm):02761 * CONVERT FPA0 TO A SIGNED TWO BYTE INTEGER; RETURN VALUE IN ACCD B3ED BDB143 ( bas.asm):02762 INTCNV JSR >LB143 ‘TM’ ERROR IF STRING VARIABLE B3F0 964F ( bas.asm):02763 LDA FP0EXP GET FPA0 EXPONENT B3F2 8190 ( bas.asm):02764 CMPA #$90 * COMPARE TO 32768 - LARGEST INTEGER EXPONENT AND B3F4 2508 ( bas.asm):02765 BCS LB3FE * BRANCH IF FPA0 < 32768 B3F6 8EB3DF ( bas.asm):02766 LDX #LB3DF POINT X TO FP VALUE OF -32768 B3F9 BDBC96 ( bas.asm):02767 JSR >LBC96 COMPARE -32768 TO FPA0 B3FC 264C ( bas.asm):02768 BNE LB44A ‘FC’ ERROR IF NOT = B3FE BDBCC8 ( bas.asm):02769 LB3FE JSR >LBCC8 CONVERT FPA0 TO A TWO BYTE INTEGER B401 DC52 ( bas.asm):02770 LDD FPA0+2 GET THE INTEGER B403 39 ( bas.asm):02771 RTS ( bas.asm):02772 * EVALUATE AN ARRAY VARIABLE B404 DC05 ( bas.asm):02773 LB404 LDD DIMFLG GET ARRAY FLAG AND VARIABLE TYPE B406 3406 ( bas.asm):02774 PSHS B,A SAVE THEM ON STACK B408 12 ( bas.asm):02775 NOP DEAD SPACE CAUSED BY 1.2 REVISION B409 5F ( bas.asm):02776 CLRB RESET DIMENSION COUNTER B40A 9E37 ( bas.asm):02777 LB40A LDX VARNAM GET VARIABLE NAME B40C 3414 ( bas.asm):02778 PSHS X,B SAVE VARIABLE NAME AND DIMENSION COUNTER B40E 8DD4 ( bas.asm):02779 BSR LB3E4 EVALUATE EXPRESSION (DIMENSlON LENGTH) B410 3534 ( bas.asm):02780 PULS B,X,Y PULL OFF VARIABLE NAME, DIMENSlON COUNTER, ( bas.asm):02781 * ARRAY FLAG B412 9F37 ( bas.asm):02782 STX VARNAM SAVE VARIABLE NAME AND VARIABLE TYPE B414 DE52 ( bas.asm):02783 LDU FPA0+2 GET DIMENSION LENGTH B416 3460 ( bas.asm):02784 PSHS U,Y SAVE DIMENSION LENGTH, ARRAY FLAG, VARIABLE TYPE B418 5C ( bas.asm):02785 INCB INCREASE DIMENSION COUNTER B419 9DA5 ( bas.asm):02786 JSR GETCCH GET CURRENT INPUT CHARACTER B41B 812C ( bas.asm):02787 CMPA #', CHECK FOR ANOTHER DIMENSION B41D 27EB ( bas.asm):02788 BEQ LB40A BRANCH IF MORE B41F D703 ( bas.asm):02789 STB TMPLOC SAVE DIMENSION COUNTER B421 BDB267 ( bas.asm):02790 JSR >LB267 SYNTAX CHECK FOR A ‘)‘ B424 3506 ( bas.asm):02791 PULS A,B * RESTORE VARIABLE TYPE AND ARRAY B426 DD05 ( bas.asm):02792 STD DIMFLG * FLAG - LEAVE DIMENSION LENGTH ON STACK B428 9E1D ( bas.asm):02793 LDX ARYTAB GET START OF ARRAYS B42A 9C1F ( bas.asm):02794 LB42A CMPX ARYEND COMPARE TO END OF ARRAYS B42C 2721 ( bas.asm):02795 BEQ LB44F BRANCH IF NO MATCH FOUND B42E DC37 ( bas.asm):02796 LDD VARNAM GET VARIABLE IN QUESTION B430 10A384 ( bas.asm):02797 CMPD ,X COMPARE TO CURRENT VARIABLE B433 2706 ( bas.asm):02798 BEQ LB43B BRANCH IF = B435 EC02 ( bas.asm):02799 LDD 2,X GET OFFSET TO NEXT ARRAY VARIABLE B437 308B ( bas.asm):02800 LEAX D,X ADD TO CURRENT POINTER B439 20EF ( bas.asm):02801 BRA LB42A KEEP SEARCHING B43B C612 ( bas.asm):02802 LB43B LDB #2*9 ‘REDIMENSIONED ARRAY’ ERROR B43D 9605 ( bas.asm):02803 LDA DIMFLG * TEST ARRAY FLAG - IF <>0 YOU ARE TRYING B43F 260B ( bas.asm):02804 BNE LB44C * TO REDIMENSION AN ARRAY B441 D603 ( bas.asm):02805 LDB TMPLOC GET NUMBER OF DIMENSIONS IN ARRAY B443 E104 ( bas.asm):02806 CMPB 4,X COMPARE TO THIS ARRAYS DIMENSIONS B445 2759 ( bas.asm):02807 BEQ LB4A0 BRANCH IF = B447 C610 ( bas.asm):02808 LB447 LDB #8*2 ‘BAD SUBSCRIPT’ B449 8C ( bas.asm):02809 FCB SKP2 SKIP TWO BYTES B44A C608 ( bas.asm):02810 LB44A LDB #4*2 ‘ILLEGAL FUNCTION CALL’ B44C 7EAC46 ( bas.asm):02811 LB44C JMP >LAC46 JUMP TO ERROR SERVICING ROUTINE ( bas.asm):02812 * INSERT A NEW ARRAY INTO ARRAY VARIABLES ( bas.asm):02813 * EACH SET OF ARRAY VARIABLES IS PRECEEDED BY A DE- ( bas.asm):02814 * SCRIPTOR BLOCK COMPOSED OF 5+2*N BYTES WHERE N IS THE ( bas.asm):02815 * NUMBER OF DIMENSIONS IN THE ARRAY. THE BLOCK IS DEFINED ( bas.asm):02816 * AS FOLLOWS: BYTES 0,1:VARIABLE’S NAME; 2,3:TOTAL LENGTH ( bas.asm):02817 * OF ARRAY ITEMS AND DESCRIPTOR BLOCK; 4:NUMBER OF DIMEN- ( bas.asm):02818 * ISIONS; 5,6:LENGTH OF DIMENSION 1; 7,8:LENGTH OF DIMEN- ( bas.asm):02819 * SION 2;… 4+N,5+N:LENGTH OF DIMENSION N. B44F CC0005 ( bas.asm):02820 LB44F LDD #5 * 5 BYTES/ARRAY ENTRY SAVE AT COEFPT B452 DD64 ( bas.asm):02821 STD COEFPT * B454 DC37 ( bas.asm):02822 LDD VARNAM = GET NAME OF ARRAY AND SAVE IN B456 ED84 ( bas.asm):02823 STD ,X = FIRST 2 BYTES OF DESCRIPTOR B458 D603 ( bas.asm):02824 LDB TMPLOC GET NUMBER OF DIMENSIONS AND SAVE IN B45A E704 ( bas.asm):02825 STB 4,X * 5TH BYTE OF DESCRIPTOR B45C BDAC33 ( bas.asm):02826 JSR >LAC33 CHECK FOR ROOM FOR DESCRIPTOR IN FREE RAM B45F 9F41 ( bas.asm):02827 STX V41 TEMPORARILY SAVE DESCRIPTOR ADDRESS B461 C60B ( bas.asm):02828 LB461 LDB #11 * DEFAULT DIMENSION VALUE:X(10) B463 4F ( bas.asm):02829 CLRA * B464 0D05 ( bas.asm):02830 TST DIMFLG = CHECK ARRAY FLAG AND BRANCH IF B466 2705 ( bas.asm):02831 BEQ LB46D = NOT DIMENSIONING AN ARRAY B468 3506 ( bas.asm):02832 PULS A,B GET DIMENSION LENGTH B46A C30001 ( bas.asm):02833 ADDD #1 ADD ONE (X(0) HAS A LENGTH OF ONE) B46D ED05 ( bas.asm):02834 LB46D STD 5,X SAVE LENGTH OF ARRAY DIMENSION B46F 8D5D ( bas.asm):02835 BSR LB4CE MULTIPLY ACCUM ARRAY SIZE NUMBER LENGTH ( bas.asm):02836 * OF NEW DIMENSION B471 DD64 ( bas.asm):02837 STD COEFPT TEMP STORE NEW CURRENT ACCUMULATED ARRAY SIZE B473 3002 ( bas.asm):02838 LEAX 2,X BUMP POINTER UP TWO B475 0A03 ( bas.asm):02839 DEC TMPLOC * DECREMENT DIMENSION COUNTER AND BRANCH IF B477 26E8 ( bas.asm):02840 BNE LB461 * NOT DONE WITH ALL DIMENSIONS B479 9F0F ( bas.asm):02841 STX TEMPTR SAVE ADDRESS OF (END OF ARRAY DESCRIPTOR - 5) B47B D30F ( bas.asm):02842 ADDD TEMPTR ADD TOTAL SIZE OF NEW ARRAY B47D 1025F7C3 ( bas.asm):02843 LBCS LAC44 ‘OM’ ERROR IF > $FFFF B481 1F01 ( bas.asm):02844 TFR D,X SAVE END OF ARRAY IN X B483 BDAC37 ( bas.asm):02845 JSR >LAC37 MAKE SURE THERE IS ENOUGH FREE RAM FOR ARRAY B486 830035 ( bas.asm):02846 SUBD #STKBUF-5 SUBTRACT OUT THE (STACK BUFFER - 5) B489 DD1F ( bas.asm):02847 STD ARYEND SAVE NEW END OF ARRAYS B48B 4F ( bas.asm):02848 CLRA ZERO = TERMINATOR BYTE B48C 301F ( bas.asm):02849 LB48C LEAX -1,X * STORE TWO TERMINATOR BYTES AT B48E A705 ( bas.asm):02850 STA 5,X * THE END OF THE ARRAY DESCRIPTOR B490 9C0F ( bas.asm):02851 CMPX TEMPTR * B492 26F8 ( bas.asm):02852 BNE LB48C * B494 9E41 ( bas.asm):02853 LDX V41 GET ADDRESS OF START OF DESCRIPTOR B496 961F ( bas.asm):02854 LDA ARYEND GET MSB OF END OF ARRAYS; LSB ALREADY THERE B498 9341 ( bas.asm):02855 SUBD V41 SUBTRACT OUT ADDRESS OF START OF DESCRIPTOR B49A ED02 ( bas.asm):02856 STD 2,X SAVE LENGTH OF (ARRAY AND DESCRIPTOR) B49C 9605 ( bas.asm):02857 LDA DIMFLG * GET ARRAY FLAG AND BRANCH B49E 262D ( bas.asm):02858 BNE LB4CD * BACK IF DIMENSIONING ( bas.asm):02859 * CALCULATE POINTER TO CORRECT ELEMENT B4A0 E604 ( bas.asm):02860 LB4A0 LDB 4,X GET THE NUMBER OF DIMENSIONS B4A2 D703 ( bas.asm):02861 STB TMPLOC TEMPORARILY SAVE B4A4 4F ( bas.asm):02862 CLRA * INITIALIZE POINTER B4A5 5F ( bas.asm):02863 CLRB * TO ZERO B4A6 DD64 ( bas.asm):02864 LB4A6 STD COEFPT SAVE ACCUMULATED POINTER B4A8 3506 ( bas.asm):02865 PULS A,B * PULL DIMENSION ARGUMENT OFF THE B4AA DD52 ( bas.asm):02866 STD FPA0+2 * STACK AND SAVE IT B4AC 10A305 ( bas.asm):02867 CMPD 5,X COMPARE TO STORED ‘DIM’ ARGUMENT B4AF 243A ( bas.asm):02868 BCC LB4EB ‘BS’ ERROR IF > = "DIM" ARGUMENT B4B1 DE64 ( bas.asm):02869 LDU COEFPT * GET ACCUMULATED POINTER AND B4B3 2704 ( bas.asm):02870 BEQ LB4B9 * BRANCH IF 1ST DIMENSION B4B5 8D17 ( bas.asm):02871 BSR LB4CE = MULTIPLY ACCUMULATED POINTER AND DIMENSION B4B7 D352 ( bas.asm):02872 ADDD FPA0+2 = LENGTH AND ADD TO CURRENT ARGUMENT B4B9 3002 ( bas.asm):02873 LB4B9 LEAX 2,X MOVE POINTER TO NEXT DIMENSION B4BB 0A03 ( bas.asm):02874 DEC TMPLOC * DECREMENT DIMENSION COUNTER AND B4BD 26E7 ( bas.asm):02875 BNE LB4A6 * BRANCH IF ANY DIMENSIONS LEFT ( bas.asm):02876 * MULTIPLY ACCD BY 5 - 5 BYTES/ARRAY VALUE B4BF EDE3 ( bas.asm):02877 STD ,--S B4C1 58 ( bas.asm):02878 ASLB B4C2 49 ( bas.asm):02879 ROLA TIMES 2 B4C3 58 ( bas.asm):02880 ASLB B4C4 49 ( bas.asm):02881 ROLA TIMES 4 B4C5 E3E1 ( bas.asm):02882 ADDD ,S++ TIMES 5 B4C7 308B ( bas.asm):02883 LEAX D,X ADD OFFSET TO START OF ARRAY B4C9 3005 ( bas.asm):02884 LEAX 5,X ADJUST POINTER FOR SIZE OF DESCRIPTOR B4CB 9F39 ( bas.asm):02885 STX VARPTR SAVE POINTER TO ARRAY VALUE B4CD 39 ( bas.asm):02886 LB4CD RTS ( bas.asm):02887 * MULTIPLY 2 BYTE NUMBER IN 5,X BY THE 2 BYTE NUMBER IN COEFPT. RETURN RESULT IN ACCD, BS ERROR IF > $FFFF B4CE 8610 ( bas.asm):02888 LB4CE LDA #16 16 SHIFTS TO DO A MULTIPLY B4D0 9745 ( bas.asm):02889 STA V45 SHIFT COUNTER B4D2 EC05 ( bas.asm):02890 LDD 5,X * GET SIZE OF DIMENSION B4D4 DD17 ( bas.asm):02891 STD BOTSTK * AND SAVE IT B4D6 4F ( bas.asm):02892 CLRA * ZERO B4D7 5F ( bas.asm):02893 CLRB * ACCD B4D8 58 ( bas.asm):02894 LB4D8 ASLB = SHIFT ACCB LEFT B4D9 49 ( bas.asm):02895 ROLA = ONE BIT B4DA 250F ( bas.asm):02896 BCS LB4EB 'BS' ERROR IF CARRY B4DC 0865 ( bas.asm):02897 ASL COEFPT+1 * SHIFT MULTIPLICAND LEFT ONE B4DE 0964 ( bas.asm):02898 ROL COEFPT * BIT - ADD MULTIPLIER TO ACCUMULATOR B4E0 2404 ( bas.asm):02899 BCC LB4E6 * IF CARRY <> 0 B4E2 D317 ( bas.asm):02900 ADDD BOTSTK ADD MULTIPLIER TO ACCD B4E4 2505 ( bas.asm):02901 BCS LB4EB 'BS' ERROR IF CARRY (>$FFFF) B4E6 0A45 ( bas.asm):02902 LB4E6 DEC V45 * DECREMENT SHIFT COUNTER B4E8 26EE ( bas.asm):02903 BNE LB4D8 * IF NOT DONE B4EA 39 ( bas.asm):02904 RTS B4EB 7EB447 ( bas.asm):02905 LB4EB JMP >LB447 'BS' ERROR ( bas.asm):02906 * ( bas.asm):02907 * MEM ( bas.asm):02908 * THIS IS NOT A TRUE INDICATOR OF FREE MEMORY BECAUSE ( bas.asm):02909 * BASIC REQUIRES A STKBUF SIZE BUFFER FOR THE STACK ( bas.asm):02910 * FOR WHICH MEM DOES NOT ALLOW. ( bas.asm):02911 * B4EE 1F40 ( bas.asm):02912 MEM TFR S,D PUT STACK POINTER INTO ACCD B4F0 931F ( bas.asm):02913 SUBD ARYEND SUBTRACT END OF ARRAYS B4F2 21 ( bas.asm):02914 FCB SKP1 SKIP ONE BYTE ( bas.asm):02915 *CONVERT THE VALUE IN ACCB INTO A FP NUMBER IN FPA0 B4F3 4F ( bas.asm):02916 LB4F3 CLRA CLEAR MS BYTE OF ACCD ( bas.asm):02917 * CONVERT THE VALUE IN ACCD INTO A FLOATING POINT NUMBER IN FPA0 B4F4 0F06 ( bas.asm):02918 GIVABF CLR VALTYP SET VARIABLE TYPE TO NUMERIC B4F6 DD50 ( bas.asm):02919 STD FPA0 SAVE ACCD IN TOP OF FACA B4F8 C690 ( bas.asm):02920 LDB #$90 EXPONENT REQUIRED IF THE TOP TWO BYTES ( bas.asm):02921 * OF FPA0 ARE TO BE TREATED AS AN INTEGER IN FPA0 B4FA 7EBC82 ( bas.asm):02922 JMP >LBC82 CONVERT THE REST OF FPA0 TO AN INTEGER ( bas.asm):02923 * STR$ B4FD BDB143 ( bas.asm):02924 STR JSR >LB143 'TM' ERROR IF STRING VARIABLE B500 CE03D9 ( bas.asm):02925 LDU #STRBUF+2 *CONVERT FP NUMBER TO ASCII STRING IN B503 BDBDDC ( bas.asm):02926 JSR >LBDDC *THE STRING BUFFER B506 3262 ( bas.asm):02927 LEAS 2,S PURGE THE RETURN ADDRESS FROM THE STACK B508 8E03D8 ( bas.asm):02928 LDX #STRBUF+1 *POINT X TO STRING BUFFER AND SAVE B50B 200B ( bas.asm):02929 BRA LB518 *THE STRING IN THE STRING SPACE ( bas.asm):02930 * RESERVE ACCB BYTES OF STRING SPACE. RETURN START ( bas.asm):02931 * ADDRESS IN (X) AND FRESPC B50D 9F4D ( bas.asm):02932 LB50D STX V4D SAVE X IN V4D B50F 8D5C ( bas.asm):02933 LB50F BSR LB56D RESERVE ACCB BYTES IN STRING SPACE B511 9F58 ( bas.asm):02934 LB511 STX STRDES+2 SAVE NEW STRING ADDRESS B513 D756 ( bas.asm):02935 STB STRDES SAVE LENGTH OF RESERVED BLOCK B515 39 ( bas.asm):02936 RTS B516 301F ( bas.asm):02937 LB516 LEAX -1,X MOVE POINTER BACK ONE ( bas.asm):02938 * SCAN A LINE FROM (X) UNTIL AN END OF LINE FLAG (ZERO) OR ( bas.asm):02939 * EITHER OF THE TWO TERMINATORS STORED IN CHARAC OR ENDCHR IS MATCHED. ( bas.asm):02940 * THE RESULTING STRING IS STORED IN THE STRING SPACE ( bas.asm):02941 * ONLY IF THE START OF THE STRING IS <= STRBUF+2 B518 8622 ( bas.asm):02942 LB518 LDA #'" * INITIALIZE B51A 9701 ( bas.asm):02943 LB51A STA CHARAC * TERMINATORS B51C 9702 ( bas.asm):02944 STA ENDCHR * TO " B51E 3001 ( bas.asm):02945 LB51E LEAX 1,X MOVE POINTER UP ONE B520 9F62 ( bas.asm):02946 STX RESSGN TEMPORARILY SAVE START OF STRING B522 9F58 ( bas.asm):02947 STX STRDES+2 SAVE START OF STRING IN TEMP DESCRIPTOR B524 C6FF ( bas.asm):02948 LDB #-1 INITIALIZE CHARACTER COUNTER TO - 1 B526 5C ( bas.asm):02949 LB526 INCB INCREMENT CHARACTER COUNTER B527 A680 ( bas.asm):02950 LDA ,X+ GET CHARACTER B529 270C ( bas.asm):02951 BEQ LB537 BRANCH IF END OF LINE B52B 9101 ( bas.asm):02952 CMPA CHARAC * CHECK FOR TERMINATORS B52D 2704 ( bas.asm):02953 BEQ LB533 * IN CHARAC AND ENDCHR B52F 9102 ( bas.asm):02954 CMPA ENDCHR * DON’T MOVE POINTER BACK B531 26F3 ( bas.asm):02955 BNE LB526 * ONE IF TERMINATOR IS "MATCHED" B533 8122 ( bas.asm):02956 LB533 CMPA #'" = COMPARE CHARACTER TO STRING DELIMITER B535 2702 ( bas.asm):02957 BEQ LB539 = & DON’T MOVE POINTER BACK IF SO B537 301F ( bas.asm):02958 LB537 LEAX -1,X MOVE POINTER BACK ONE B539 9F64 ( bas.asm):02959 LB539 STX COEFPT SAVE END OF STRING ADDRESS B53B D756 ( bas.asm):02960 STB STRDES SAVE STRING LENGTH IN TEMP DESCRIPTOR B53D DE62 ( bas.asm):02961 LDU RESSGN GET INITlAL STRING START B53F 118303D9 ( bas.asm):02962 CMPU #STRBUF+2 COMPARE TO START OF STRING BUFFER B543 2207 ( bas.asm):02963 LB543 BHI LB54C BRANCH IF > START OF STRING BUFFER B545 8DC6 ( bas.asm):02964 BSR LB50D GO RESERVE SPACE FOR THE STRING B547 9E62 ( bas.asm):02965 LDX RESSGN POINT X TO THE BEGINNING OF THE STRING B549 BDB645 ( bas.asm):02966 JSR >LB645 MOVE (B) BYTES FROM (X) TO ( bas.asm):02967 * [FRESPC] - MOVE STRING DATA ( bas.asm):02968 * PUT DIRECT PAGE STRING DESCRIPTOR BUFFER DATA ( bas.asm):02969 * ON THE STRING STACK. SET VARIABLE TYPE TO STRING B54C 9E0B ( bas.asm):02970 LB54C LDX TEMPPT GET NEXT AVAILABLE STRING STACK DESCRIPTOR B54E 8C01D1 ( bas.asm):02971 CMPX #CFNBUF COMPARE TO TOP OF STRING DESCRIPTOR STACK B551 2605 ( bas.asm):02972 BNE LB558 FORMULA O.K. B553 C61E ( bas.asm):02973 LDB #15*2 'STRING FORMULA TOO COMPLEX' ERROR B555 7EAC46 ( bas.asm):02974 LB555 JMP >LAC46 JUMP TO ERROR SERVICING ROUTINE B558 9656 ( bas.asm):02975 LB558 LDA STRDES * GET LENGTH OF STRING AND SAVE IT B55A A700 ( bas.asm):02976 STA 0,X * IN BYTE 0 OF DESCRIPTOR B55C DC58 ( bas.asm):02977 LDD STRDES+2 = GET START ADDRESS OF ACTUAL STRING B55E ED02 ( bas.asm):02978 STD 2,X = AND SAVE IN BYTES 2,3 OF DESCRIPTOR B560 86FF ( bas.asm):02979 LDA #$FF * VARIABLE TYPE = STRING B562 9706 ( bas.asm):02980 STA VALTYP * SAVE IN VARIABLE TYPE FLAG B564 9F0D ( bas.asm):02981 STX LASTPT = SAVE START OF DESCRIPTOR B566 9F52 ( bas.asm):02982 STX FPA0+2 = ADDRESS IN LASTPT AND FPA0 B568 3005 ( bas.asm):02983 LEAX 5,X 5 BYTES/STRING DESCRIPTOR B56A 9F0B ( bas.asm):02984 STX TEMPPT NEXT AVAILABLE STRING VARIABLE DESCRIPTOR B56C 39 ( bas.asm):02985 RTS ( bas.asm):02986 * RESERVE ACCB BYTES IN STRING STORAGE SPACE ( bas.asm):02987 * RETURN WITH THE STARTING ADDRESS OF THE ( bas.asm):02988 * RESERVED STRING SPACE IN (X) AND FRESPC B56D 0F07 ( bas.asm):02989 LB56D CLR GARBFL CLEAR STRING REORGANIZATION FLAG B56F 4F ( bas.asm):02990 LB56F CLRA * PUSH THE LENGTH OF THE B570 3406 ( bas.asm):02991 PSHS B,A * STRING ONTO THE STACK B572 DC23 ( bas.asm):02992 LDD STRTAB GET START OF STRING VARIABLES B574 A3E0 ( bas.asm):02993 SUBD ,S+ SUBTRACT STRING LENGTH B576 109321 ( bas.asm):02994 CMPD FRETOP COMPARE TO START OF STRING STORAGE B579 250A ( bas.asm):02995 BCS LB585 IF BELOW START, THEN REORGANIZE B57B DD23 ( bas.asm):02996 STD STRTAB SAVE NEW START OF STRING VARIABLES B57D 9E23 ( bas.asm):02997 LDX STRTAB GET START OF STRING VARIABLES B57F 3001 ( bas.asm):02998 LEAX 1,X ADD ONE B581 9F25 ( bas.asm):02999 STX FRESPC SAVE START ADDRESS OF NEWLY RESERVED SPACE B583 3584 ( bas.asm):03000 PULS B,PC RESTORE NUMBER OF BYTES RESERVED AND RETURN B585 C61A ( bas.asm):03001 LB585 LDB #2*13 'OUT OF STRING SPACE' ERROR B587 0307 ( bas.asm):03002 COM GARBFL TOGGLE REORGANIZATiON FLAG B589 27CA ( bas.asm):03003 BEQ LB555 ERROR IF FRESHLY REORGANIZED B58B 8D04 ( bas.asm):03004 BSR LB591 GO REORGANIZE STRING SPACE B58D 3504 ( bas.asm):03005 PULS B GET BACK THE NUMBER OF BYTES TO RESERVE B58F 20DE ( bas.asm):03006 BRA LB56F TRY TO RESERVE ACCB BYTES AGAIN ( bas.asm):03007 * REORGANIZE THE STRING SPACE B591 9E27 ( bas.asm):03008 LB591 LDX MEMSIZ GET THE TOP OF STRING SPACE B593 9F23 ( bas.asm):03009 LB593 STX STRTAB SAVE TOP OF UNORGANIZED STRING SPACE B595 4F ( bas.asm):03010 CLRA * ZERO OUT ACCD B596 5F ( bas.asm):03011 CLRB * AND RESET VARIABLE B597 DD4B ( bas.asm):03012 STD V4B * POINTER TO 0 B599 9E21 ( bas.asm):03013 LDX FRETOP POINT X TO START OF STRING SPACE B59B 9F47 ( bas.asm):03014 STX V47 SAVE POINTER IN V47 B59D 8E01A9 ( bas.asm):03015 LDX #STRSTK POINT X TO START OF STRING DESCRIPTOR STACK B5A0 9C0B ( bas.asm):03016 LB5A0 CMPX TEMPPT COMPARE TO ADDRESS OF NEXT AVAILABLE DESCRIPTOR B5A2 2704 ( bas.asm):03017 BEQ LB5A8 BRANCH IF TOP OF STRING STACK B5A4 8D32 ( bas.asm):03018 BSR LB5D8 CHECK FOR STRING IN UNORGANIZED STRING SPACE B5A6 20F8 ( bas.asm):03019 BRA LB5A0 KEEP CHECKING B5A8 9E1B ( bas.asm):03020 LB5A8 LDX VARTAB GET THE END OF BASIC PROGRAM B5AA 9C1D ( bas.asm):03021 LB5AA CMPX ARYTAB COMPARE TO END OF VARIABLES B5AC 2704 ( bas.asm):03022 BEQ LB5B2 BRANCH IF AT TOP OF VARIABLES B5AE 8D22 ( bas.asm):03023 BSR LB5D2 CHECK FOR STRING IN UNORGANIZED STRING SPACE B5B0 20F8 ( bas.asm):03024 BRA LB5AA KEEP CHECKING VARIABLES B5B2 9F41 ( bas.asm):03025 LB5B2 STX V41 SAVE ADDRESS OF THE END OF VARIABLES B5B4 9E41 ( bas.asm):03026 LB5B4 LDX V41 GET CURRENT ARRAY POINTER B5B6 9C1F ( bas.asm):03027 LB5B6 CMPX ARYEND COMPARE TO THE END OF ARRAYS B5B8 2735 ( bas.asm):03028 BEQ LB5EF BRANCH IF AT END OF ARRAYS B5BA EC02 ( bas.asm):03029 LDD 2,X GET LENGTH OF ARRAY AND DESCRIPTOR B5BC D341 ( bas.asm):03030 ADDD V41 * ADD TO CURRENT ARRAY POINTER B5BE DD41 ( bas.asm):03031 STD V41 * AND SAVE IT B5C0 A601 ( bas.asm):03032 LDA 1,X GET 1ST CHARACTER OF VARIABLE NAME B5C2 2AF0 ( bas.asm):03033 BPL LB5B4 BRANCH IF NUMERIC ARRAY B5C4 E604 ( bas.asm):03034 LDB 4,X GET THE NUMBER OF DIMENSIONS IN THIS ARRAY B5C6 58 ( bas.asm):03035 ASLB MULTIPLY BY 2 B5C7 CB05 ( bas.asm):03036 ADDB #5 ADD FIVE BYTES (VARIABLE NAME, ARRAY ( bas.asm):03037 * LENGTH, NUMBER DIMENSIONS) B5C9 3A ( bas.asm):03038 ABX X NOW POINTS TO START OF ARRAY ELEMENTS B5CA 9C41 ( bas.asm):03039 LB5CA CMPX V41 AT END OF THIS ARRAY? B5CC 27E8 ( bas.asm):03040 BEQ LB5B6 YES - CHECK FOR ANOTHER B5CE 8D08 ( bas.asm):03041 BSR LB5D8 CHECK FOR STRING LOCATED IN ( bas.asm):03042 * UNORGANIZED STRING SPACE B5D0 20F8 ( bas.asm):03043 BRA LB5CA KEEP CHECKING ELEMENTS IN THIS ARRAY B5D2 A601 ( bas.asm):03044 LB5D2 LDA 1,X GET F1RST BYTE OF VARIABLE NAME B5D4 3002 ( bas.asm):03045 LEAX 2,X MOVE POINTER TO DESCRIPTOR B5D6 2A14 ( bas.asm):03046 BPL LB5EC BRANCH IF VARIABLE IS NUMERIC ( bas.asm):03047 * SEARCH FOR STRING - ENTER WITH X POINTING TO ( bas.asm):03048 * THE STRING DESCRIPTOR. IF STRING IS STORED ( bas.asm):03049 * BETWEEN V47 AND STRTAB, SAVE DESCRIPTOR POINTER ( bas.asm):03050 * IN V4B AND RESET V47 TO STRING ADDRESS B5D8 E684 ( bas.asm):03051 LB5D8 LDB ,X GET THE LENGTH OF THE STRING B5DA 2710 ( bas.asm):03052 BEQ LB5EC BRANCH IF NULL - NO STRING B5DC EC02 ( bas.asm):03053 LDD 2,X GET STARTING ADDRESS OF THE STRING B5DE 109323 ( bas.asm):03054 CMPD STRTAB COMPARE TO THE START OF STRING VARIABLES B5E1 2209 ( bas.asm):03055 BHI LB5EC BRANCH IF THIS STRING IS STORED IN ( bas.asm):03056 * THE STRING VARIABLES B5E3 109347 ( bas.asm):03057 CMPD V47 COMPARE TO START OF STRING SPACE B5E6 2304 ( bas.asm):03058 BLS LB5EC BRANCH IF NOT STORED IN THE STRING SPACE B5E8 9F4B ( bas.asm):03059 STX V4B SAVE VARIABLE POINTER IF STORED IN STRING SPACE B5EA DD47 ( bas.asm):03060 STD V47 SAVE STRING STARTING ADDRESS B5EC 3005 ( bas.asm):03061 LB5EC LEAX 5,X MOVE TO NEXT VARIABLE DESCRIPTOR B5EE 39 ( bas.asm):03062 LB5EE RTS B5EF 9E4B ( bas.asm):03063 LB5EF LDX V4B GET ADDRESS OF THE DESCRIPTOR FOR THE ( bas.asm):03064 * STRING WHICH IS STORED IN THE HIGHEST RAM ADDRESS IN ( bas.asm):03065 * THE UNORGANIZED STRING SPACE B5F1 27FB ( bas.asm):03066 BEQ LB5EE BRANCH IF NONE FOUND AND REORGANIZATION DONE B5F3 4F ( bas.asm):03067 CLRA CLEAR MS BYTE OF LENGTH B5F4 E684 ( bas.asm):03068 LDB ,X GET LENGTH OF STRING B5F6 5A ( bas.asm):03069 DECB SUBTRACT ONE B5F7 D347 ( bas.asm):03070 ADDD V47 ADD LENGTH OF STRING TO ITS STARTING ADDRESS B5F9 DD43 ( bas.asm):03071 STD V43 SAVE AS MOVE STARTING ADDRESS B5FB 9E23 ( bas.asm):03072 LDX STRTAB POINT X TO THE START OF ORGANIZED STRING VARIABLES B5FD 9F41 ( bas.asm):03073 STX V41 SAVE AS MOVE ENDING ADDRESS B5FF BDAC20 ( bas.asm):03074 JSR >LAC20 MOVE STRING FROM CURRENT POSITION TO THE ( bas.asm):03075 * TOP OF UNORGANIZED STRING SPACE B602 9E4B ( bas.asm):03076 LDX V4B POINT X TO STRING DESCRIPTOR B604 DC45 ( bas.asm):03077 LDD V45 * GET NEW STARTING ADDRESS OF STRING AND B606 ED02 ( bas.asm):03078 STD 2,X * SAVE IT IN DESCRIPTOR B608 9E45 ( bas.asm):03079 LDX V45 GET NEW TOP OF UNORGANIZED STRING SPACE B60A 301F ( bas.asm):03080 LEAX -1,X MOVE POINTER BACK ONE B60C 7EB593 ( bas.asm):03081 JMP >LB593 JUMP BACK AND REORGANIZE SOME MORE ( bas.asm):03082 * CONCATENATE TWO STRINGS B60F DC52 ( bas.asm):03083 LB60F LDD FPA0+2 * GET DESCRIPTOR ADDRESS OF STRING A B611 3406 ( bas.asm):03084 PSHS B,A * AND SAVE IT ON THE STACK B613 BDB223 ( bas.asm):03085 JSR >LB223 GET DESCRIPTOR ADDRESS OF STRING B B616 BDB146 ( bas.asm):03086 JSR >LB146 'TM' ERROR IF NUMERIC VARIABLE B619 3510 ( bas.asm):03087 PULS X * POINT X TO STRING A DESCRIPTOR B61B 9F62 ( bas.asm):03088 STX RESSGN * ADDRESS AND SAVE IT IN RESSGN B61D E684 ( bas.asm):03089 LDB ,X GET LENGTH OF STRING A B61F 9E52 ( bas.asm):03090 LDX FPA0+2 POINT X TO DESCRIPTOR OF STRING B B621 EB84 ( bas.asm):03091 ADDB ,X ADD LENGTH OF STRING B TO STR1NG A B623 2405 ( bas.asm):03092 BCC LB62A BRANCH IF LENGTH < 256 B625 C61C ( bas.asm):03093 LDB #2*14 'STRING TOO LONG' ERROR IF LENGTH > 255 B627 7EAC46 ( bas.asm):03094 JMP >LAC46 JUMP TO ERROR SERVICING ROUTINE B62A BDB50D ( bas.asm):03095 LB62A JSR >LB50D RESERVE ROOM IN STRING SPACE FOR NEW STRING B62D 9E62 ( bas.asm):03096 LDX RESSGN GET DESCRIPTOR ADDRESS OF STRING A B62F E684 ( bas.asm):03097 LDB ,X GET LENGTH OF STRING A B631 8D10 ( bas.asm):03098 BSR LB643 MOVE STRING A INTO RESERVED BUFFER IN STRING SPACE B633 9E4D ( bas.asm):03099 LDX V4D GET DESCRIPTOR ADDRESS OF STRING B B635 8D22 ( bas.asm):03100 BSR LB659 GET LENGTH AND ADDRESS OF STRING B B637 8D0C ( bas.asm):03101 BSR LB645 MOVE STRING B INTO REST OF RESERVED BUFFER B639 9E62 ( bas.asm):03102 LDX RESSGN POINT X TO DESCRIPTOR OF STRING A B63B 8D1C ( bas.asm):03103 BSR LB659 DELETE STRING A IF LAST STRING ON STRING STACK B63D BDB54C ( bas.asm):03104 JSR >LB54C PUT STRING DESCRIPTOR ON THE STRING STACK B640 7EB168 ( bas.asm):03105 JMP >LB168 BRANCH BACK TO EXPRESSION EVALUATION ( bas.asm):03106 * MOVE (B) BYTES FROM 2,X TO FRESPC B643 AE02 ( bas.asm):03107 LB643 LDX 2,X POINT X TO SOURCE ADDRESS B645 DE25 ( bas.asm):03108 LB645 LDU FRESPC POINT U TO DESTINATION ADDRESS B647 5C ( bas.asm):03109 INCB COMPENSATION FOR THE DECB BELOW B648 2004 ( bas.asm):03110 BRA LB64E GO MOVE THE BYTES ( bas.asm):03111 * MOVE B BYTES FROM (X) TO (U) B64A A680 ( bas.asm):03112 LB64A LDA ,X+ * GET A SOURCE BYTE AND MOVE IT B64C A7C0 ( bas.asm):03113 STA ,U+ * TO THE DESTINATION B64E 5A ( bas.asm):03114 LB64E DECB DECREMENT BYTE COUNTER B64F 26F9 ( bas.asm):03115 BNE LB64A BRANCH IF ALL BYTES NOT MOVED B651 DF25 ( bas.asm):03116 STU FRESPC SAVE ENDING ADDRESS IN FRESPC B653 39 ( bas.asm):03117 RTS ( bas.asm):03118 * RETURN LENGTH (ACCB) AND ADDRESS (X) OF ( bas.asm):03119 * STRING WHOSE DESCRIPTOR IS IN FPA0+2 ( bas.asm):03120 * DELETE THE STRING IF IT IS THE LAST ONE ( bas.asm):03121 * PUT ON THE STRING STACK. REMOVE STRING FROM STRING ( bas.asm):03122 * SPACE IF IT IS AT THE BOTTOM OF STRING VARIABLES. B654 BDB146 ( bas.asm):03123 LB654 JSR >LB146 'TM' ERROR IF VARIABLE TYPE = NUMERIC B657 9E52 ( bas.asm):03124 LB657 LDX FPA0+2 GET ADDRESS OF SELECTED STRING DESCRIPTOR B659 E684 ( bas.asm):03125 LB659 LDB ,X GET LENGTH OF STRING B65B 8D18 ( bas.asm):03126 BSR LB675 * CHECK TO SEE IF THIS STRING DESCRIPTOR WAS B65D 2613 ( bas.asm):03127 BNE LB672 * THE LAST ONE PUT ON THE STRING STACK AND ( bas.asm):03128 * * BRANCH IF NOT B65F AE07 ( bas.asm):03129 LDX 5+2,X GET START ADDRESS OF STRING JUST REMOVED B661 301F ( bas.asm):03130 LEAX -1,X MOVE POINTER DOWN ONE B663 9C23 ( bas.asm):03131 CMPX STRTAB COMPARE TO START OF STRING VARIABLES B665 2608 ( bas.asm):03132 BNE LB66F BRANCH IF THIS STRING IS NOT AT THE BOTTOM ( bas.asm):03133 * OF STRING VARIABLES B667 3404 ( bas.asm):03134 PSHS B SAVE LENGTH; ACCA WAS CLEARED B669 D323 ( bas.asm):03135 ADDD STRTAB * ADD THE LENGTH OF THE JUST REMOVED STRING B66B DD23 ( bas.asm):03136 STD STRTAB * TO THE START OF STRING VARIABLES - THIS WILL ( bas.asm):03137 * * REMOVE THE STRING FROM THE STRING SPACE B66D 3504 ( bas.asm):03138 PULS B RESTORE LENGTH B66F 3001 ( bas.asm):03139 LB66F LEAX 1,X ADD ONE TO POINTER B671 39 ( bas.asm):03140 RTS B672 AE02 ( bas.asm):03141 LB672 LDX 2,X *POINT X TO ADDRESS OF STRING NOT B674 39 ( bas.asm):03142 RTS *ON THE STRING STACK ( bas.asm):03143 * REMOVE STRING FROM STRING STACK. ENTER WITH X ( bas.asm):03144 * POINTING TO A STRING DESCRIPTOR - DELETE THE ( bas.asm):03145 * STRING FROM STACK IF IT IS ON TOP OF THE ( bas.asm):03146 * STACK. IF THE STRING IS DELETED, SET THE ZERO FLAG B675 9C0D ( bas.asm):03147 LB675 CMPX LASTPT *COMPARE TO LAST USED DESCRIPTOR ADDRESS B677 2607 ( bas.asm):03148 BNE LB680 *ON THE STRING STACK, RETURN IF DESCRIPTOR ( bas.asm):03149 * *ADDRESS NOT ON THE STRING STACK B679 9F0B ( bas.asm):03150 STX TEMPPT SAVE LAST USED DESCRIPTOR AS NEXT AVAILABLE B67B 301B ( bas.asm):03151 LEAX -5,X * MOVE LAST USED DESCRIPTOR BACK 5 BYTES B67D 9F0D ( bas.asm):03152 STX LASTPT * AND SAVE AS THE LAST USED DESCRIPTOR ADDR B67F 4F ( bas.asm):03153 CLRA SET ZERO FLAG B680 39 ( bas.asm):03154 LB680 RTS ( bas.asm):03155 * LEN B681 8D03 ( bas.asm):03156 LEN BSR LB686 POINT X TO PROPER STRING AND GET LENGTH B683 7EB4F3 ( bas.asm):03157 LB683 JMP >LB4F3 CONVERT ACCB TO FP NUMBER IN FPA0 ( bas.asm):03158 * POINT X TO STRING ADDRESS LOAD LENGTH INTO ( bas.asm):03159 * ACCB. ENTER WITH THE STRING DESCRIPTOR IN ( bas.asm):03160 * BOTTOM TWO BYTES OF FPA0 B686 8DCC ( bas.asm):03161 LB686 BSR LB654 GET LENGTH AND ADDRESS OF STRING B688 0F06 ( bas.asm):03162 CLR VALTYP SET VARIABLE TYPE TO NUMERIC B68A 5D ( bas.asm):03163 TSTB SET FLAGS ACCORDING TO LENGTH B68B 39 ( bas.asm):03164 RTS ( bas.asm):03165 * CHR$ B68C BDB70E ( bas.asm):03166 CHR JSR >LB70E CONVERT FPA0 TO AN INTEGER IN ACCD B68F C601 ( bas.asm):03167 LB68F LDB #1 * RESERVE ONE BYTE IN B691 BDB56D ( bas.asm):03168 JSR >LB56D * THE STRING SPACE B694 9653 ( bas.asm):03169 LDA FPA0+3 GET ASCII STRING VALUE B696 BDB511 ( bas.asm):03170 JSR >LB511 SAVE RESERVED STRING DESCRIPTOR IN TEMP DESCRIPTOR B699 A784 ( bas.asm):03171 STA ,X SAVE THE STRING (IT’S ONLY ONE BYTE) B69B 3262 ( bas.asm):03172 LB69B LEAS 2,S PURGE THE RETURN ADDRESS OFF OF THE STACK B69D 7EB54C ( bas.asm):03173 LB69D JMP >LB54C PUT TEMP DESCRIPTOR DATA ONTO STRING STACK ( bas.asm):03174 * ASC$ B6A0 8D02 ( bas.asm):03175 ASC BSR LB6A4 PUT 1ST CHARACTER OF STRING INTO ACCB B6A2 20DF ( bas.asm):03176 BRA LB683 CONVERT ACCB INTO FP NUMBER IN FPA0 B6A4 8DE0 ( bas.asm):03177 LB6A4 BSR LB686 POINT X TO STRING DESCRIPTOR B6A6 275E ( bas.asm):03178 BEQ LB706 'FC' ERROR IF NULL STRING B6A8 E684 ( bas.asm):03179 LDB ,X GET FIRST BYTE OF STRING B6AA 39 ( bas.asm):03180 RTS ( bas.asm):03181 * LEFT$ B6AB 8D48 ( bas.asm):03182 LEFT BSR LB6F5 GET ARGUMENTS FROM STACK B6AD 4F ( bas.asm):03183 LB6AD CLRA CLEAR STRING POINTER OFFSET - OFFSET = 0 FOR LEFT$ B6AE E184 ( bas.asm):03184 LB6AE CMPB ,X * COMPARE LENGTH PARAMETER TO LENGTH OF B6B0 2303 ( bas.asm):03185 BLS LB6B5 * STRING AND BRANCH IF LENGTH OF STRING >= LENGTH PARAMETER B6B2 E684 ( bas.asm):03186 LDB ,X USE LENGTH OF STRING OTHERWISE B6B4 4F ( bas.asm):03187 CLRA CLEAR STRING POINTER OFFSET (0 FOR LEFT$) B6B5 3406 ( bas.asm):03188 LB6B5 PSHS B,A PUSH PARAMETERS ONTO STACK B6B7 BDB50F ( bas.asm):03189 JSR >LB50F RESERVE ACCB BYTES IN THE STRING SPACE B6BA 9E4D ( bas.asm):03190 LDX V4D POINT X TO STRING DESCRIPTOR B6BC 8D9B ( bas.asm):03191 BSR LB659 GET ADDRESS OF OLD STRING (X=ADDRESS) B6BE 3504 ( bas.asm):03192 PULS B * PULL STRING POINTER OFFSET OFF OF THE STACK B6C0 3A ( bas.asm):03193 ABX * AND ADD IT TO STRING ADDRESS B6C1 3504 ( bas.asm):03194 PULS B PULL LENGTH PARAMETER OFF OF THE STACK B6C3 BDB645 ( bas.asm):03195 JSR >LB645 MOVE ACCB BYTES FROM (X) TO [FRESPC] B6C6 20D5 ( bas.asm):03196 BRA LB69D PUT TEMP STRING DESCRIPTOR ONTO THE STRING STACK ( bas.asm):03197 * RIGHT$ B6C8 8D2B ( bas.asm):03198 RIGHT BSR LB6F5 GET ARGUMENTS FROM STACK B6CA A084 ( bas.asm):03199 SUBA ,X ACCA=LENGTH PARAMETER - LENGTH OF OLD STRING B6CC 40 ( bas.asm):03200 NEGA NOW ACCA = LENGTH OF OLD STRING B6CD 20DF ( bas.asm):03201 BRA LB6AE PUT NEW STRING IN THE STRING SPACE ( bas.asm):03202 * MID$ B6CF C6FF ( bas.asm):03203 MID LDB #$FF * GET DEFAULT VALUE OF LENGTH AND B6D1 D753 ( bas.asm):03204 STB FPA0+3 * SAVE IT IN FPA0 B6D3 9DA5 ( bas.asm):03205 JSR GETCCH GET CURRENT CHARACTER FROM BASIC B6D5 8129 ( bas.asm):03206 CMPA #') ARGUMENT DELIMITER? B6D7 2705 ( bas.asm):03207 BEQ LB6DE YES - NO LENGTH PARAMETER GIVEN B6D9 BDB26D ( bas.asm):03208 JSR >LB26D SYNTAX CHECK FOR COMMA B6DC 8D2D ( bas.asm):03209 BSR LB70B EVALUATE NUMERIC EXPRESSION (LENGTH) B6DE 8D15 ( bas.asm):03210 LB6DE BSR LB6F5 GET ARGUMENTS FROM STACK B6E0 2724 ( bas.asm):03211 BEQ LB706 'FC' ERROR IF NULL STRING B6E2 5F ( bas.asm):03212 CLRB CLEAR LENGTH COUNTER (DEFAULT VALUE) B6E3 4A ( bas.asm):03213 DECA *SUOTRACT ONE FROM POSITION PARAMETER (THESE B6E4 A184 ( bas.asm):03214 CMPA ,X *ROUTINES EXPECT 1ST POSITION TO BE ZERO, NOT ONE) ( bas.asm):03215 * *AND COMPARE IT TO LENGTH OF OLD STRING B6E6 24CD ( bas.asm):03216 BCC LB6B5 IF POSITION > LENGTH OF OLD STRING, THEN NEW ( bas.asm):03217 * STRING WILL BE A NULL STRING B6E8 1F89 ( bas.asm):03218 TFR A,B SAVE ABSOLUTE POSITION PARAMETER IN ACCB B6EA E084 ( bas.asm):03219 SUBB ,X ACCB=POSITION-LENGTH OF OLD STRING B6EC 50 ( bas.asm):03220 NEGB NOW ACCB=LENGTH OF OLDSTRING-POSITION B6ED D153 ( bas.asm):03221 CMPB FPA0+3 *IF THE AMOUNT OF OLD STRING TO THE RIGHT OF B6EF 23C4 ( bas.asm):03222 BLS LB6B5 *POSITION IS <= THE LENGTH PARAMETER, BRANCH AND ( bas.asm):03223 *USE ALL OF THE STRING TO THE RIGHT OF THE POSITION ( bas.asm):03224 *INSTEAD OF THE LENGTH PARAMETER B6F1 D653 ( bas.asm):03225 LDB FPA0+3 GET LENGTH OF NEW STRING B6F3 20C0 ( bas.asm):03226 BRA LB6B5 PUT NEW STRING IN STRING SPACE ( bas.asm):03227 * DO A SYNTAX CHECK FOR ")", THEN PULL THE PREVIOUSLY CALCULATED NUMERIC ( bas.asm):03228 * ARGUMENT (ACCD) AND STRING ARGUMENT DESCRIPTOR ADDR OFF OF THE STACK B6F5 BDB267 ( bas.asm):03229 LB6F5 JSR >LB267 SYNTAX CHECK FOR A ")" B6F8 EEE4 ( bas.asm):03230 LDU ,S LOAD THE RETURN ADDRESS INTO U REGISTER B6FA AE65 ( bas.asm):03231 LDX 5,S * GET ADDRESS OF STRING AND B6FC 9F4D ( bas.asm):03232 STX V4D * SAVE IT IN V4D B6FE A664 ( bas.asm):03233 LDA 4,S = PUT LENGTH OF STRING IN B700 E664 ( bas.asm):03234 LDB 4,S = BOTH ACCA AND ACCB B702 3267 ( bas.asm):03235 LEAS 7,S REMOVE DESCRIPTOR AND RETURN ADDRESS FROM STACK B704 1F35 ( bas.asm):03236 TFR U,PC JUMP TO ADDRESS IN U REGISTER B706 7EB44A ( bas.asm):03237 LB706 JMP >LB44A 'ILLEGAL FUNCTION CALL' ( bas.asm):03238 * EVALUATE AN EXPRESSION - RETURN AN INTEGER IN ( bas.asm):03239 * ACCB - 'FC' ERROR IF EXPRESSION > 255 B709 9D9F ( bas.asm):03240 LB709 JSR GETNCH GET NEXT BASIC INPUT CHARACTER B70B ( bas.asm):03241 EVALEXPB EQU * B70B BDB141 ( bas.asm):03242 LB70B JSR >LB141 EVALUATE A NUMERIC EXPRESSION B70E BDB3E9 ( bas.asm):03243 LB70E JSR >LB3E9 CONVERT FPA0 TO INTEGER IN ACCD B711 4D ( bas.asm):03244 TSTA TEST MS BYTE OF INTEGER B712 26F2 ( bas.asm):03245 BNE LB706 'FC' ERROR IF EXPRESSION > 255 B714 0EA5 ( bas.asm):03246 JMP GETCCH GET CURRENT INPUT CHARACTER FROM BASIC ( bas.asm):03247 * VAL B716 BDB686 ( bas.asm):03248 VAL JSR >LB686 POINT X TO STRING ADDRESS B719 1027031C ( bas.asm):03249 LBEQ LBA39 IF NULL STRING SET FPA0 B71D DEA6 ( bas.asm):03250 LDU CHARAD SAVE INPUT POINTER IN REGISTER U B71F 9FA6 ( bas.asm):03251 STX CHARAD POINT INPUT POINTER TO ADDRESS OF STRING B721 3A ( bas.asm):03252 ABX MOVE POINTER TO END OF STRING TERMINATOR B722 A684 ( bas.asm):03253 LDA ,X GET LAST BYTE OF STRING B724 3452 ( bas.asm):03254 PSHS U,X,A SAVE INPUT POINTER, STRING TERMINATOR ADDRESS AND CHARACTER B726 6F84 ( bas.asm):03255 CLR ,X CLEAR STRING TERMINATOR : FOR ASCII - FP CONVERSION B728 9DA5 ( bas.asm):03256 JSR GETCCH GET CURRENT CHARACTER FROM BASIC B72A BDBD12 ( bas.asm):03257 JSR >LBD12 CONVERT AN ASCII STRING TO FLOATING POINT B72D 3552 ( bas.asm):03258 PULS A,X,U RESTORE CHARACTERS AND POINTERS B72F A784 ( bas.asm):03259 STA ,X REPLACE STRING TERMINATOR B731 DFA6 ( bas.asm):03260 STU CHARAD RESTORE INPUT CHARACTER B733 39 ( bas.asm):03261 RTS B734 8D07 ( bas.asm):03262 LB734 BSR LB73D * EVALUATE AN EXPRESSION, RETURN B736 9F2B ( bas.asm):03263 STX BINVAL * THE VALUE IN X; STORE IT IN BINVAL B738 BDB26D ( bas.asm):03264 LB738 JSR >LB26D SYNTAX CHECK FOR A COMMA B73B 20CE ( bas.asm):03265 BRA LB70B EVALUATE EXPRESSION IN RANGE 0 <= X < 256 ( bas.asm):03266 * EVALUATE EXPRESSION : RETURN INTEGER PORTION IN X - 'FC' ERROR IF ( bas.asm):03267 * EXPRESSION IS NEGATIVE OR > 32767, I.E. NOT A LEGAL POSITIVE INTEGER. B73D BDB141 ( bas.asm):03268 LB73D JSR >LB141 EVALUATE NUMERIC EXPRESSION B740 9654 ( bas.asm):03269 LB740 LDA FP0SGN GET SIGN OF FPA0 MANTISSA B742 2BC2 ( bas.asm):03270 BMI LB706 'ILLEGAL FUNCTION CALL' IF NEGATIVE B744 964F ( bas.asm):03271 LDA FP0EXP GET EXPONENT OF FPA0 B746 8190 ( bas.asm):03272 CMPA #$90 COMPARE TO LARGEST POSITIVE INTEGER B748 22BC ( bas.asm):03273 BHI LB706 'ILLEGAL FUNCTION CALL' IF TOO LARGE B74A BDBCC8 ( bas.asm):03274 JSR >LBCC8 SHIFT BINARY POINT TO EXTREME RIGHT OF FPA0 B74D 9E52 ( bas.asm):03275 LDX FPA0+2 LOAD X WITH LOWER TWO BYTES OF FPA0 B74F 39 ( bas.asm):03276 RTS ( bas.asm):03277 * PEEK B750 8DEE ( bas.asm):03278 PEEK BSR LB740 CONVERT FPA0 TO INTEGER IN REGISTER X B752 E684 ( bas.asm):03279 LDB ,X GET THE VALUE BEING 'PEEK'ED B754 7EB4F3 ( bas.asm):03280 JMP >LB4F3 CONVERT ACCB INTO A FP NUMBER ( bas.asm):03281 * POKE B757 8DDB ( bas.asm):03282 POKE BSR LB734 EVALUATE 2 EXPRESSIONS B759 9E2B ( bas.asm):03283 LDX BINVAL GET THE ADDRESS TO BE 'POKE'ED B75B E784 ( bas.asm):03284 STB ,X STORE THE DATA IN THAT ADDRESS B75D 39 ( bas.asm):03285 RTS ( bas.asm):03286 * LLIST B75E C6FE ( bas.asm):03287 LLIST LDB #-2 * SET DEVICE NUMBER TO B760 D76F ( bas.asm):03288 STB DEVNUM * PRINTER B762 9DA5 ( bas.asm):03289 JSR GETCCH GET CURRENT CHARACTER FROM BASIC ( bas.asm):03290 * LIST B764 3401 ( bas.asm):03291 LIST PSHS CC SAVE ZERO FLAG ON STACK B766 BDAF67 ( bas.asm):03292 JSR >LAF67 CONVERT DECIMAL LINE NUMBER TO BINARY B769 BDAD01 ( bas.asm):03293 JSR >LAD01 * FIND RAM ADDRESS OF THAT LINE NUMBER AND B76C 9F66 ( bas.asm):03294 STX LSTTXT * SAVE IT IN LSTTXT B76E 3501 ( bas.asm):03295 PULS CC GET ZERO FLAG FROM STACK B770 2712 ( bas.asm):03296 BEQ LB784 BRANCH IF END OF LINE B772 9DA5 ( bas.asm):03297 JSR GETCCH GET CURRENT CHARACTER FROM BASIC B774 2713 ( bas.asm):03298 BEQ LB789 BRANCH IF END OF LINE B776 81AC ( bas.asm):03299 CMPA #$AC MINUS TOKEN (IS IT A RANGE OF LINE NUMBERS?) B778 2609 ( bas.asm):03300 BNE LB783 NO - RETURN B77A 9D9F ( bas.asm):03301 JSR GETNCH GET NEXT CHARACTER FROM BASIC B77C 2706 ( bas.asm):03302 BEQ LB784 BRANCH IF END OF LINE B77E BDAF67 ( bas.asm):03303 JSR >LAF67 GET ENDING LINE NUMBER B781 2706 ( bas.asm):03304 BEQ LB789 BRANCH IF LEGAL LINE NUMBER B783 39 ( bas.asm):03305 LB783 RTS ( bas.asm):03306 * LIST THE ENTIRE PROGRAM B784 CEFFFF ( bas.asm):03307 LB784 LDU #$FFFF * SET THE DEFAULT ENDING LINE NUMBER B787 DF2B ( bas.asm):03308 STU BINVAL * TO $FFFF B789 3262 ( bas.asm):03309 LB789 LEAS 2,S PURGE RETURN ADDRESS FROM THE STACK B78B 9E66 ( bas.asm):03310 LDX LSTTXT POINT X TO STARTING LINE ADDRESS B78D BDB95C ( bas.asm):03311 LB78D JSR >LB95C MOVE CURSOR TO START OF A NEW LINE B790 BDA549 ( bas.asm):03312 JSR >LA549 CHECK FOR A BREAK OR PAUSE B793 EC84 ( bas.asm):03313 LDD ,X GET ADDRESS OF NEXT BASIC LINE B795 2608 ( bas.asm):03314 BNE LB79F BRANCH IF NOT END OF PROGRAM B797 BDA42D ( bas.asm):03315 LB797 JSR >LA42D CHECK CLOSE FILE HANDLER B79A 0F6F ( bas.asm):03316 CLR DEVNUM SET DEVICE NUMBER TO SCREEN B79C 7EAC73 ( bas.asm):03317 JMP >LAC73 RETURN TO BASIC’S MAIN INPUT LOOP B79F 9F66 ( bas.asm):03318 LB79F STX LSTTXT SAVE NEW STARTING LINE ADDRESS B7A1 EC02 ( bas.asm):03319 LDD 2,X * GET THE LINE NUMBER OF THIS LINE AND B7A3 10932B ( bas.asm):03320 CMPD BINVAL * COMPARE IT TO ENDING LINE NUMBER B7A6 22EF ( bas.asm):03321 BHI LB797 EXIT IF LINE NUMBER > ENDING LINE NUMBER B7A8 BDBDCC ( bas.asm):03322 JSR >LBDCC PRINT THE NUMBER IN ACCD ON SCREEN IN DECIMAL B7AB BDB9AC ( bas.asm):03323 JSR >LB9AC SEND A SPACE TO CONSOLE OUT B7AE 9E66 ( bas.asm):03324 LDX LSTTXT GET RAM ADDRESS OF THIS LINE B7B0 8D10 ( bas.asm):03325 BSR LB7C2 UNCRUNCH A LINE B7B2 AE9F0066 ( bas.asm):03326 LDX [LSTTXT] POINT X TO START OF NEXT LINE B7B6 CE02DD ( bas.asm):03327 LDU #LINBUF+1 POINT U TO BUFFER FULL OF UNCRUNCHED LINE B7B9 A6C0 ( bas.asm):03328 LB7B9 LDA ,U+ GET A BYTE FROM THE BUFFER B7BB 27D0 ( bas.asm):03329 BEQ LB78D BRANCH IF END OF BUFFER B7BD BDB9B1 ( bas.asm):03330 JSR >LB9B1 SEND CHARACTER TO CONSOLE OUT B7C0 20F7 ( bas.asm):03331 BRA LB7B9 GET ANOTHER CHARACTER ( bas.asm):03332 * UNCRUNCH A LINE INTO BASIC’S LINE INPUT BUFFER B7C2 BD01A6 ( bas.asm):03333 LB7C2 JSR >RVEC24 HOOK INTO RAM B7C5 3004 ( bas.asm):03334 LEAX 4,X MOVE POINTER PAST ADDRESS OF NEXT LINE AND LINE NUMBER B7C7 108E02DD ( bas.asm):03335 LDY #LINBUF+1 UNCRUNCH LINE INTO LINE INPUT BUFFER B7CB A680 ( bas.asm):03336 LB7CB LDA ,X+ GET A CHARACTER B7CD 2751 ( bas.asm):03337 BEQ LB820 BRANCH IF END OF LINE B7CF 2B15 ( bas.asm):03338 BMI LB7E6 BRANCH IF IT’S A TOKEN B7D1 813A ( bas.asm):03339 CMPA #': CHECK FOR END OF SUB LINE B7D3 260D ( bas.asm):03340 BNE LB7E2 BRNCH IF NOT END OF SUB LINE B7D5 E684 ( bas.asm):03341 LDB ,X GET CHARACTER FOLLOWING COLON B7D7 C184 ( bas.asm):03342 CMPB #$84 TOKEN FOR ELSE? B7D9 27F0 ( bas.asm):03343 BEQ LB7CB YES - DON’T PUT IT IN BUFFER B7DB C183 ( bas.asm):03344 CMPB #$83 TOKEN FOR REMARK? B7DD 27EC ( bas.asm):03345 BEQ LB7CB YES - DON’T PUT IT IN BUFFER B7DF 8C ( bas.asm):03346 FCB SKP2 SKIP TWO BYTES B7E0 8621 ( bas.asm):03347 LB7E0 LDA #'! EXCLAMATION POINT B7E2 8D30 ( bas.asm):03348 LB7E2 BSR LB814 PUT CHARACTER IN BUFFER B7E4 20E5 ( bas.asm):03349 BRA LB7CB GET ANOTHER CHARACTER ( bas.asm):03350 * UNCRUNCH A TOKEN B7E6 CE0116 ( bas.asm):03351 LB7E6 LDU #COMVEC-10 FIRST DO COMMANDS B7E9 81FF ( bas.asm):03352 CMPA #$FF CHECK FOR SECONDARY TOKEN B7EB 2604 ( bas.asm):03353 BNE LB7F1 BRANCH IF NON SECONDARY TOKEN B7ED A680 ( bas.asm):03354 LDA ,X+ GET SECONDARY TOKEN B7EF 3345 ( bas.asm):03355 LEAU 5,U BUMP IT UP TO SECONDARY FUNCTIONS B7F1 847F ( bas.asm):03356 LB7F1 ANDA #$7F MASK OFF BIT 7 OF TOKEN B7F3 334A ( bas.asm):03357 LB7F3 LEAU 10,U MOVE TO NEXT COMMAND TABLE B7F5 6DC4 ( bas.asm):03358 TST ,U IS THIS TABLE ENABLED? B7F7 27E7 ( bas.asm):03359 BEQ LB7E0 NO - ILLEGAL TOKEN B7F9 A0C4 ( bas.asm):03360 LB7F9 SUBA ,U SUBTRACT THE NUMBER OF TOKENS FROM THE CURRENT TOKEN NUMBER B7FB 2AF6 ( bas.asm):03361 BPL LB7F3 BRANCH IF TOKEN NOT IN THIS TABLE B7FD ABC4 ( bas.asm):03362 ADDA ,U RESTORE TOKEN NUMBER RELATIVE TO THIS TABLE B7FF EE41 ( bas.asm):03363 LDU 1,U POINT U TO COMMAND DICTIONARY TABLE B801 4A ( bas.asm):03364 LB801 DECA DECREMENT TOKEN NUMBER B802 2B06 ( bas.asm):03365 BMI LB80A BRANCH IF THIS IS THE CORRECT TOKEN ( bas.asm):03366 * SKIP THROUGH DICTIONARY TABLE TO START OF NEXT TOKEN B804 6DC0 ( bas.asm):03367 LB804 TST ,U+ GRAB A BYTE B806 2AFC ( bas.asm):03368 BPL LB804 BRANCH IF BIT 7 NOT SET B808 20F7 ( bas.asm):03369 BRA LB801 GO SEE IF THIS IS THE CORRECT TOKEN B80A A6C4 ( bas.asm):03370 LB80A LDA ,U GET A CHARACTER FROM DICTIONARY TABLE B80C 8D06 ( bas.asm):03371 BSR LB814 PUT CHARACTER IN BUFFER B80E 6DC0 ( bas.asm):03372 TST ,U+ CHECK FOR START OF NEXT TOKEN B810 2AF8 ( bas.asm):03373 BPL LB80A BRANCH IF NOT DONE WITH THIS TOKEN B812 20B7 ( bas.asm):03374 BRA LB7CB GO GET ANOTHER CHARACTER B814 108C03D6 ( bas.asm):03375 LB814 CMPY #LINBUF+LBUFMX TEST FOR END OF LINE INPUT BUFFER B818 2406 ( bas.asm):03376 BCC LB820 BRANCH IF AT END OF BUFFER B81A 847F ( bas.asm):03377 ANDA #$7F MASK OFF BIT 7 B81C A7A0 ( bas.asm):03378 STA ,Y+ * SAVE CHARACTER IN BUFFER AND B81E 6FA4 ( bas.asm):03379 CLR ,Y * CLEAR NEXT CHARACTER SLOT IN BUFFER B820 39 ( bas.asm):03380 LB820 RTS ( bas.asm):03381 * ( bas.asm):03382 * CRUNCH THE LINE THAT THE INPUT POINTER IS ( bas.asm):03383 * POINTING TO INTO THE LINE INPUT BUFFER ( bas.asm):03384 * RETURN LENGTH OF CRUNCHED LINE IN ACCD ( bas.asm):03385 * B821 BD01A3 ( bas.asm):03386 LB821 JSR >RVEC23 HOOK INTO RAM B824 9EA6 ( bas.asm):03387 LDX CHARAD GET BASIC'S INPUT POINTER ADDRESS B826 CE02DC ( bas.asm):03388 LDU #LINBUF POINT X TO LINE INPUT BUFFER B829 0F43 ( bas.asm):03389 LB829 CLR V43 CLEAR ILLEGAL TOKEN FLAG B82B 0F44 ( bas.asm):03390 CLR V44 CLEAR DATA FLAG B82D A680 ( bas.asm):03391 LB82D LDA ,X+ GET INPUT CHAR B82F 2721 ( bas.asm):03392 BEQ LB852 BRANCH IF END OF LINE B831 0D43 ( bas.asm):03393 TST V43 * CHECK ILLEGAL TOKEN FLAG & BRANCH IF NOT B833 270F ( bas.asm):03394 BEQ LB844 * PROCESSING AN ILLEGAL TOKEN B835 BDB3A2 ( bas.asm):03395 JSR >LB3A2 SET CARRY IF NOT UPPER CASE ALPHA B838 2418 ( bas.asm):03396 BCC LB852 BRANCH IF UPPER CASE ALPHA B83A 8130 ( bas.asm):03397 CMPA #'0 * DON’T CRUNCH ASCII NUMERIC CHARACTERS B83C 2504 ( bas.asm):03398 BLO LB842 * BRANCH IF NOT NUMERIC B83E 8139 ( bas.asm):03399 CMPA #'9 * B840 2310 ( bas.asm):03400 BLS LB852 * BRANCH IF NUMERIC ( bas.asm):03401 * END UP HERE IF NOT UPPER CASE ALPHA OR NUMERIC B842 0F43 ( bas.asm):03402 LB842 CLR V43 CLEAR ILLEGAL TOKEN FLAG B844 8120 ( bas.asm):03403 LB844 CMPA #SPACE SPACE? B846 270A ( bas.asm):03404 BEQ LB852 DO NOT REMOVE SPACES B848 9742 ( bas.asm):03405 STA V42 SAVE INPUT CHARACTER AS SCAN DELIMITER B84A 8122 ( bas.asm):03406 CMPA #'" CHECK FOR STRING DELIMITER B84C 2738 ( bas.asm):03407 BEQ LB886 BRANCH IF STRING B84E 0D44 ( bas.asm):03408 TST V44 * CHECK DATA FLAG AND BRANCH IF CLEAR B850 2719 ( bas.asm):03409 BEQ LB86B * DO NOT CRUNCH DATA B852 A7C0 ( bas.asm):03410 LB852 STA ,U+ SAVE CHARACTER IN BUFFER B854 2706 ( bas.asm):03411 BEQ LB85C BRANCH IF END OF LINE B856 813A ( bas.asm):03412 CMPA #': * CHECK FOR END OF SUBLINE B858 27CF ( bas.asm):03413 BEQ LB829 * AND RESET FLAGS IF END OF SUBLINE B85A 20D1 ( bas.asm):03414 LB85A BRA LB82D GO GET ANOTHER CHARACTER B85C 6FC0 ( bas.asm):03415 LB85C CLR ,U+ * DOUBLE ZERO AT END OF LINE B85E 6FC0 ( bas.asm):03416 CLR ,U+ * B860 1F30 ( bas.asm):03417 TFR U,D SAVE ADDRESS OF END OF LINE IN ACCD B862 8302DA ( bas.asm):03418 SUBD #LINHDR LENGTH OF LINE IN ACCD B865 8E02DB ( bas.asm):03419 LDX #LINBUF-1 * SET THE INPUT POINTER TO ONE BEFORE B868 9FA6 ( bas.asm):03420 STX CHARAD * THE START OF THE CRUNCHED LINE B86A 39 ( bas.asm):03421 RTS EXIT 'CRUNCH' B86B 813F ( bas.asm):03422 LB86B CMPA #'? CHECK FOR "?" - PRINT ABBREVIATION B86D 2604 ( bas.asm):03423 BNE LB873 BRANCH IF NOT PRINT ABBREVIATION B86F 8687 ( bas.asm):03424 LDA #$87 * GET THE PRINT TOKEN AND SAVE IT B871 20DF ( bas.asm):03425 BRA LB852 * IN BUFFER B873 8127 ( bas.asm):03426 LB873 CMPA #'' APOSTROPHE IS SAME AS REM B875 2613 ( bas.asm):03427 BNE LB88A BRANCH IF NOT REMARK B877 CC3A83 ( bas.asm):03428 LDD #$3A83 COLON, REM TOKEN B87A EDC1 ( bas.asm):03429 STD ,U++ SAVE IN BUFFER B87C 0F42 ( bas.asm):03430 LB87C CLR V42 SET DELIMITER = 0 (END OF LINE) B87E A680 ( bas.asm):03431 LB87E LDA ,X+ SCAN TILL WE MATCH [V42] B880 27D0 ( bas.asm):03432 BEQ LB852 BRANCH IF END OF LINE B882 9142 ( bas.asm):03433 CMPA V42 DELIMITER? B884 27CC ( bas.asm):03434 BEQ LB852 BRANCH OUT IF SO B886 A7C0 ( bas.asm):03435 LB886 STA ,U+ DON’T CRUNCH REMARKS OR STRINGS B888 20F4 ( bas.asm):03436 BRA LB87E GO GET MORE STRING OR REMARK B88A 8130 ( bas.asm):03437 LB88A CMPA #'0 * LESS THAN ASCII ZERO? B88C 2504 ( bas.asm):03438 BCS LB892 * BRANCH IF SO B88E 813C ( bas.asm):03439 CMPA #';+1 = CHECK FOR NUMERIC VALUE, COLON OR SEMICOLON B890 25C0 ( bas.asm):03440 BCS LB852 = AND INSERT IN BUFFER IF SO B892 301F ( bas.asm):03441 LB892 LEAX -1,X MOVE INPUT POINTER BACK ONE B894 3450 ( bas.asm):03442 PSHS U,X SAVE POINTERS TO INPUT STRING, OUTPUT STRING B896 0F41 ( bas.asm):03443 CLR V41 TOKEN FLAG 0 = COMMAND, FF = SECONDARY B898 CE0116 ( bas.asm):03444 LDU #COMVEC-10 POINT U TO COMMAND INTERPRETATION ( bas.asm):03445 * TABLE FOR BASIC - 10 B89B 0F42 ( bas.asm):03446 LB89B CLR V42 INITIALIZE V42 AS TOKEN COUNTER B89D 334A ( bas.asm):03447 LB89D LEAU 10,U MOVE TO NEXT COMMAND INTERPRETATION TABLE B89F A6C4 ( bas.asm):03448 LDA ,U GET NUMBER OF COMMANDS B8A1 2731 ( bas.asm):03449 BEQ LB8D4 GO DO SECONDARY FUNCTIONS IF NO COMMAND TABLE B8A3 10AE41 ( bas.asm):03450 LDY 1,U POINT Y TO COMMAND DICTIONARY TABLE B8A6 AEE4 ( bas.asm):03451 LB8A6 LDX ,S GET POINTER TO INPUT STRING B8A8 E6A0 ( bas.asm):03452 LB8A8 LDB ,Y+ GET A BYTE FROM DICTIONARY TABLE B8AA E080 ( bas.asm):03453 SUBB ,X+ SUBTRACT INPUT CHARACTER B8AC 27FA ( bas.asm):03454 BEQ LB8A8 LOOP IF SAME B8AE C180 ( bas.asm):03455 CMPB #$80 LAST CHAR IN RESERVED WORD TABLE HAD ( bas.asm):03456 * BIT 7 SET, SO IF WE HAVE $80 HERE ( bas.asm):03457 * THEN IT IS A GOOD COMPARE B8B0 2638 ( bas.asm):03458 BNE LB8EA BRANCH IF NO MATCH - CHECK ANOTHER COMMAND B8B2 3262 ( bas.asm):03459 LEAS 2,S DELETE OLD INPUT POINTER FROM STACK B8B4 3540 ( bas.asm):03460 PULS U GET POINTER TO OUTPUT STRING B8B6 DA42 ( bas.asm):03461 ORB V42 OR IN THE TABLE POSITION TO MAKE THE TOKEN ( bas.asm):03462 * - NOTE THAT B ALREADY HAD $80 IN IT - B8B8 9641 ( bas.asm):03463 LDA V41 * CHECK TOKEN FLAG AND BRANCH B8BA 2606 ( bas.asm):03464 BNE LB8C2 * IF SECONDARY B8BC C184 ( bas.asm):03465 CMPB #$84 IS IT ELSE TOKEN? B8BE 2606 ( bas.asm):03466 BNE LB8C6 NO B8C0 863A ( bas.asm):03467 LDA #': PUT A COLON (SUBLINE) BEFORE ELSE TOKEN B8C2 EDC1 ( bas.asm):03468 LB8C2 STD ,U++ SECONDARY TOKENS PRECEEDED BY $FF B8C4 2094 ( bas.asm):03469 BRA LB85A GO PROCESS MORE INPUT CHARACTERS B8C6 E7C0 ( bas.asm):03470 LB8C6 STB ,U+ SAVE THIS TOKEN B8C8 C186 ( bas.asm):03471 CMPB #$86 DATA TOKEN? B8CA 2602 ( bas.asm):03472 BNE LB8CE NO B8CC 0C44 ( bas.asm):03473 INC V44 SET DATA FLAG B8CE C182 ( bas.asm):03474 LB8CE CMPB #$82 REM TOKEN? B8D0 27AA ( bas.asm):03475 BEQ LB87C YES B8D2 2086 ( bas.asm):03476 LB8D2 BRA LB85A GO PROCESS MORE INPUT CHARACTERS ( bas.asm):03477 * CHECK FOR A SECONDARY TOKEN B8D4 CE011B ( bas.asm):03478 LB8D4 LDU #COMVEC-5 NOW DO SECONDARY FUNCTIONS B8D7 0341 ( bas.asm):03479 LB8D7 COM V41 TOGGLE THE TOKEN FLAG B8D9 26C0 ( bas.asm):03480 BNE LB89B BRANCH IF NOW CHECKING SECONDARY COMMANDS ( bas.asm):03481 * THIS CODE WILL PROCESS INPUT DATA WHICH CANNOT BE CRUNCHED AND SO ( bas.asm):03482 * IS ASSUMED TO BE ILLEGAL DATA OR AN ILLEGAL TOKEN B8DB 3550 ( bas.asm):03483 PULS X,U RESTORE INPUT AND OUTPUT POINTERS B8DD A680 ( bas.asm):03484 LDA ,X+ * MOVE THE FIRST CHARACTER OF AN B8DF A7C0 ( bas.asm):03485 STA ,U+ * ILLEGAL TOKEN B8E1 BDB3A2 ( bas.asm):03486 JSR >LB3A2 SET CARRY IF NOT ALPHA B8E4 25EC ( bas.asm):03487 BCS LB8D2 BRANCH IF NOT ALPHA B8E6 0343 ( bas.asm):03488 COM V43 SET ILLEGAL TOKEN FLAG IF UPPER CASE ALPHA B8E8 20E8 ( bas.asm):03489 BRA LB8D2 PROCESS MORE INPUT CHARACTERS B8EA 0C42 ( bas.asm):03490 LB8EA INC V42 INCREMENT TOKEN COUNTER B8EC 4A ( bas.asm):03491 DECA DECR COMMAND COUNTER B8ED 27AE ( bas.asm):03492 BEQ LB89D GET ANOTHER COMMAND TABLE IF DONE W/THIS ONE B8EF 313F ( bas.asm):03493 LEAY -1,Y MOVE POINTER BACK ONE B8F1 E6A0 ( bas.asm):03494 LB8F1 LDB ,Y+ * GET TO NEXT B8F3 2AFC ( bas.asm):03495 BPL LB8F1 * RESERVED WORD B8F5 20AF ( bas.asm):03496 BRA LB8A6 GO SEE IF THIS WORD IS A MATCH ( bas.asm):03497 * PRINT B8F7 275F ( bas.asm):03498 PRINT BEQ LB958 BRANCH IF NO ARGUMENT B8F9 8D03 ( bas.asm):03499 BSR LB8FE CHECK FOR ALL PRINT OPTIONS B8FB 0F6F ( bas.asm):03500 CLR DEVNUM SET DEVICE NUMBER TO SCREEN B8FD 39 ( bas.asm):03501 RTS B8FE 8140 ( bas.asm):03502 LB8FE CMPA #'@ CHECK FOR PRINT @ B900 2605 ( bas.asm):03503 BNE LB907 NOT PRINT @ B902 BDA554 ( bas.asm):03504 LB902 JSR >LA554 MOVE CURSOR TO PROPER PRINT LOCATION B905 200A ( bas.asm):03505 LB905 BRA LB911 GO PRINT THE DATA B907 8123 ( bas.asm):03506 LB907 CMPA #'# CHECK FOR PRINT NUMBER B909 260D ( bas.asm):03507 BNE LB918 NOT PRINT# B90B BDA5A5 ( bas.asm):03508 JSR >LA5A5 CHECK FOR A VALID DEVICE NUMBER B90E BDA406 ( bas.asm):03509 JSR >LA406 CHECK FOR A VALID OUTPUT FILE B911 9DA5 ( bas.asm):03510 LB911 JSR GETCCH GET CURRENT INPUT CHARACTER B913 2743 ( bas.asm):03511 BEQ LB958 BRANCH IF END OF LINE B915 BDB26D ( bas.asm):03512 JSR >LB26D SYNTAX CHECK FOR COMMA B918 BD0179 ( bas.asm):03513 LB918 JSR >RVEC9 HOOK INTO RAM B91B 2748 ( bas.asm):03514 LB91B BEQ LB965 RETURN IF END OF LINE B91D 81A4 ( bas.asm):03515 LB91D CMPA #$A4 TOKEN FOR TAB( ? B91F 275D ( bas.asm):03516 BEQ LB97E YES B921 812C ( bas.asm):03517 CMPA #', COMMA? B923 2741 ( bas.asm):03518 BEQ LB966 YES - ADVANCE TO NEXT TAB FIELD B925 813B ( bas.asm):03519 CMPA #'; SEMICOLON? B927 276E ( bas.asm):03520 BEQ LB997 YES - DO NOT ADVANCE CURSOR B929 BDB156 ( bas.asm):03521 JSR >LB156 EVALUATE EXPRESSION B92C 9606 ( bas.asm):03522 LDA VALTYP * GET VARIABLE TYPE AND B92E 3402 ( bas.asm):03523 PSHS A * SAVE IT ON THE STACK B930 2606 ( bas.asm):03524 BNE LB938 BRANCH IF STRING VARIABLE B932 BDBDD9 ( bas.asm):03525 JSR >LBDD9 CONVERT FP NUMBER TO AN ASCII STRING B935 BDB516 ( bas.asm):03526 JSR >LB516 PARSE A STRING FROM (X-1) AND PUT ( bas.asm):03527 * DESCRIPTOR ON STRING STACK B938 8D65 ( bas.asm):03528 LB938 BSR LB99F PRINT STRING POINTED TO BY X B93A 3504 ( bas.asm):03529 PULS B GET VARIABLE TYPE BACK B93C BDA35F ( bas.asm):03530 JSR >LA35F SET UP TAB WIDTH ZONE, ETC B93F 0D6E ( bas.asm):03531 TST PRTDEV * CHECK THE PRINT DEVICE B941 2706 ( bas.asm):03532 BEQ LB949 * AND BRANCH IF NOT CASSETTE B943 8D13 ( bas.asm):03533 BSR LB958 SEND A CARRIAGE RETURN TO CONSOLE OUT B945 9DA5 ( bas.asm):03534 JSR GETCCH GET CURRENT INPUT CHARACTER B947 20D2 ( bas.asm):03535 BRA LB91B CHECK FOR MORE PRINT DATA B949 5D ( bas.asm):03536 LB949 TSTB CHECK CURRENT PRINT POSITION B94A 2608 ( bas.asm):03537 BNE LB954 BRANCH IF NOT AT START OF LINE B94C 9DA5 ( bas.asm):03538 JSR GETCCH GET CURRENT INPUT CHARACTER B94E 812C ( bas.asm):03539 CMPA #', COMMA? B950 2714 ( bas.asm):03540 BEQ LB966 SKIP TO NEXT TAB FIELD B952 8D58 ( bas.asm):03541 BSR LB9AC SEND A SPACE TO CONSOLE OUT B954 9DA5 ( bas.asm):03542 LB954 JSR GETCCH GET CURRENT INPUT CHARACTER B956 26C5 ( bas.asm):03543 BNE LB91D BRANCH IF NOT END OF LINE B958 860D ( bas.asm):03544 LB958 LDA #CR * SEND A CR TO B95A 2055 ( bas.asm):03545 BRA LB9B1 * CONSOLE OUT B95C BDA35F ( bas.asm):03546 LB95C JSR >LA35F SET UP TAB WIDTH, ZONE ETC B95F 27F7 ( bas.asm):03547 LB95F BEQ LB958 BRANCH IF WIDTH = ZERO B961 966C ( bas.asm):03548 LDA DEVPOS GET PRINT POSITION B963 26F3 ( bas.asm):03549 BNE LB958 BRANCH IF NOT AT START OF LINE B965 39 ( bas.asm):03550 LB965 RTS ( bas.asm):03551 * SKIP TO NEXT TAB FIELD B966 BDA35F ( bas.asm):03552 LB966 JSR >LA35F SET UP TAB WIDTH, ZONE ETC B969 270A ( bas.asm):03553 BEQ LB975 BRANCH IF LINE WIDTH = 0 (CASSETTE) B96B D66C ( bas.asm):03554 LDB DEVPOS GET CURRENT POSITION B96D D16B ( bas.asm):03555 CMPB DEVLCF COMPARE TO LAST TAB ZONE B96F 2506 ( bas.asm):03556 BCS LB977 BRANCH IF < LAST TAB ZONE B971 8DE5 ( bas.asm):03557 BSR LB958 SEND A CARRIAGE RETURN TO CONSOLE OUT B973 2022 ( bas.asm):03558 BRA LB997 GET MORE DATA B975 D66C ( bas.asm):03559 LB975 LDB DEVPOS * B977 D06A ( bas.asm):03560 LB977 SUBB DEVCFW * SUBTRACT TAB FIELD WIDTH FROM CURRENT B979 24FC ( bas.asm):03561 BCC LB977 * POSITION UNTIL CARRY SET - NEGATING THE B97B 50 ( bas.asm):03562 NEGB * REMAINDER LEAVES THE NUMBER OF SPACES TO NEXT ( bas.asm):03563 * * TAB ZONE IN ACCB B97C 2010 ( bas.asm):03564 BRA LB98E GO ADVANCE TO NEXT TAB ZONE ( bas.asm):03565 * PRINT TAB( B97E BDB709 ( bas.asm):03566 LB97E JSR >LB709 EVALUATE EXPRESSION - RETURN VALUE IN B B981 8129 ( bas.asm):03567 CMPA #') * 'SYNTAX' ERROR IF NOT ')' B983 1026F8F0 ( bas.asm):03568 LBNE LB277 * B987 BDA35F ( bas.asm):03569 JSR >LA35F SET UP TAB WIDTH, ZONE ETC B98A D06C ( bas.asm):03570 SUBB DEVPOS GET DIFFERENCE OF PRINT POSITION & TAB POSITION B98C 2309 ( bas.asm):03571 BLS LB997 BRANCH IF TAB POSITION < CURRENT POSITION B98E 0D6E ( bas.asm):03572 LB98E TST PRTDEV * GET PRINT DEVICE NUMBER AND B990 2605 ( bas.asm):03573 BNE LB997 * BRANCH IF CASSETTE B992 8D18 ( bas.asm):03574 LB992 BSR LB9AC SEND A SPACE TO CONSOLE OUT B994 5A ( bas.asm):03575 DECB DECREMENT DIFFERENCE COUNT B995 26FB ( bas.asm):03576 BNE LB992 BRANCH UNTIL CURRENT POSITION = TAB POSITION B997 9D9F ( bas.asm):03577 LB997 JSR GETNCH GET NEXT CHARACTER FROM BASIC B999 7EB91B ( bas.asm):03578 JMP >LB91B LOOK FOR MORE PRINT DATA ( bas.asm):03579 * COPY A STRING FROM (X) TO CONSOLE OUT B99C ( bas.asm):03580 STRINOUT EQU * B99C BDB518 ( bas.asm):03581 LB99C JSR >LB518 PARSE A STRING FROM X AND PUT ( bas.asm):03582 * DESCRIPTOR ON STRING STACK B99F BDB657 ( bas.asm):03583 LB99F JSR >LB657 GET LENGTH OF STRING AND REMOVE ( bas.asm):03584 * DESCRIPTOR FROM STRING STACK B9A2 5C ( bas.asm):03585 LB9A2 INCB COMPENSATE FOR DECB BELOW B9A3 5A ( bas.asm):03586 LB9A3 DECB DECREMENT COUNTER B9A4 27BF ( bas.asm):03587 BEQ LB965 EXIT ROUTINE B9A6 A680 ( bas.asm):03588 LDA ,X+ GET A CHARACTER FROM X B9A8 8D07 ( bas.asm):03589 BSR LB9B1 SEND TO CONSOLE OUT B9AA 20F7 ( bas.asm):03590 BRA LB9A3 KEEP LOOPING B9AC 8620 ( bas.asm):03591 LB9AC LDA #SPACE SPACE TO CONSOLE OUT B9AE 8C ( bas.asm):03592 FCB SKP2 SKIP NEXT TWO BYTES B9AF 863F ( bas.asm):03593 LB9AF LDA #'? QUESTION MARK TO CONSOLE OUT B9B1 7EA282 ( bas.asm):03594 LB9B1 JMP >PUTCHR JUMP TO CONSOLE OUT ( bas.asm):03595 * FLOATING POINT MATH PACKAGE ( bas.asm):03596 * ADD .5 TO FPA0 B9B4 8EBEC0 ( bas.asm):03597 LB9B4 LDX #LBEC0 FLOATING POINT CONSTANT (.5) B9B7 2009 ( bas.asm):03598 BRA LB9C2 ADD .5 TO FPA0 ( bas.asm):03599 * SUBTRACT FPA0 FROM FP NUMBER POINTED ( bas.asm):03600 * TO BY (X), LEAVE RESULT IN FPA0 B9B9 BDBB2F ( bas.asm):03601 LB9B9 JSR >LBB2F COPY PACKED FP DATA FROM (X) TO FPA1 ( bas.asm):03602 * ARITHMETIC OPERATION (-) JUMPS HERE - SUBTRACT FPA0 FROM FPA1 (ENTER ( bas.asm):03603 * WITH EXPONENT OF FPA0 IN ACCB AND EXPONENT OF FPA1 IN ACCA) B9BC 0354 ( bas.asm):03604 LB9BC COM FP0SGN CHANGE MANTISSA SIGN OF FPA0 B9BE 0362 ( bas.asm):03605 COM RESSGN REVERSE RESULT SIGN FLAG B9C0 2003 ( bas.asm):03606 BRA LB9C5 GO ADD FPA1 AND FPA0 ( bas.asm):03607 * ADD FP NUMBER POINTED TO BY ( bas.asm):03608 * (X) TO FPA0 - LEAVE RESULT IN FPA0 B9C2 BDBB2F ( bas.asm):03609 LB9C2 JSR >LBB2F UNPACK PACKED FP DATA FROM (X) TO ( bas.asm):03610 * FPA1; RETURN EXPONENT OF FPA1 IN ACCA ( bas.asm):03611 * ARITHMETIC OPERATION (+) JUMPS HERE - ADD FPA0 TO ( bas.asm):03612 * FPA1 (ENTER WITH EXPONENT OF FPA0 IN ACCB AND EXPONENT OF FPA1 IN ACCA B9C5 5D ( bas.asm):03613 LB9C5 TSTB CHECK EXPONENT OF FPA0 B9C6 10270280 ( bas.asm):03614 LBEQ LBC4A COPY FPA1 TO FPA0 IF FPA0 = 0 B9CA 8E005C ( bas.asm):03615 LDX #FP1EXP POINT X TO FPA1 B9CD 1F89 ( bas.asm):03616 LB9CD TFR A,B PUT EXPONENT OF FPA1 INTO ACCB B9CF 5D ( bas.asm):03617 TSTB CHECK EXPONENT B9D0 276C ( bas.asm):03618 BEQ LBA3E RETURN IF EXPONENT = 0 (ADDING 0 TO FPA0) B9D2 D04F ( bas.asm):03619 SUBB FP0EXP SUBTRACT EXPONENT OF FPA0 FROM EXPONENT OF FPA1 B9D4 2769 ( bas.asm):03620 BEQ LBA3F BRANCH IF EXPONENTS ARE EQUAL B9D6 250A ( bas.asm):03621 BCS LB9E2 BRANCH IF EXPONENT FPA0 > FPA1 B9D8 974F ( bas.asm):03622 STA FP0EXP REPLACE FPA0 EXPONENT WITH FPA1 EXPONENT B9DA 9661 ( bas.asm):03623 LDA FP1SGN * REPLACE FPA0 MANTISSA SIGN B9DC 9754 ( bas.asm):03624 STA FP0SGN * WITH FPA1 MANTISSA SIGN B9DE 8E004F ( bas.asm):03625 LDX #FP0EXP POINT X TO FPA0 B9E1 50 ( bas.asm):03626 NEGB NEGATE DIFFERENCE OF EXPONENTS B9E2 C1F8 ( bas.asm):03627 LB9E2 CMPB #-8 TEST DIFFERENCE OF EXPONENTS B9E4 2F59 ( bas.asm):03628 BLE LBA3F BRANCH IF DIFFERENCE OF EXPONENTS <= 8 B9E6 4F ( bas.asm):03629 CLRA CLEAR OVERFLOW BYTE B9E7 6401 ( bas.asm):03630 LSR 1,X SHIFT MS BYTE OF MANTISSA; BIT 7 = 0 B9E9 BDBABA ( bas.asm):03631 JSR >LBABA GO SHIFT MANTISSA OF (X) TO THE RIGHT (B) TIMES B9EC D662 ( bas.asm):03632 LB9EC LDB RESSGN GET SIGN FLAG B9EE 2A0B ( bas.asm):03633 BPL LB9FB BRANCH IF FPA0 AND FPA1 SIGNS ARE THE SAME B9F0 6301 ( bas.asm):03634 COM 1,X * COMPLEMENT MANTISSA POINTED B9F2 6302 ( bas.asm):03635 COM 2,X * TO BY (X) THE B9F4 6303 ( bas.asm):03636 COM 3,X * ADCA BELOW WILL B9F6 6304 ( bas.asm):03637 COM 4,X * CONVERT THIS OPERATION B9F8 43 ( bas.asm):03638 COMA * INTO A NEG (MANTISSA) B9F9 8900 ( bas.asm):03639 ADCA #0 ADD ONE TO ACCA - COMA ALWAYS SETS THE CARRY FLAG ( bas.asm):03640 * THE PREVIOUS TWO BYTES MAY BE REPLACED BY A NEGA ( bas.asm):03641 * ( bas.asm):03642 * ADD MANTISSAS OF FPA0 AND FPA1, PUT RESULT IN FPA0 B9FB 9763 ( bas.asm):03643 LB9FB STA FPSBYT SAVE FPA SUB BYTE B9FD 9653 ( bas.asm):03644 LDA FPA0+3 * ADD LS BYTE B9FF 9960 ( bas.asm):03645 ADCA FPA1+3 * OF MANTISSA BA01 9753 ( bas.asm):03646 STA FPA0+3 SAVE IN FPA0 LSB BA03 9652 ( bas.asm):03647 LDA FPA0+2 * ADD NEXT BYTE BA05 995F ( bas.asm):03648 ADCA FPA1+2 * OF MANTISSA BA07 9752 ( bas.asm):03649 STA FPA0+2 SAVE IN FPA0 BA09 9651 ( bas.asm):03650 LDA FPA0+1 * ADD NEXT BYTE BA0B 995E ( bas.asm):03651 ADCA FPA1+1 * OF MANTISSA BA0D 9751 ( bas.asm):03652 STA FPA0+1 SAVE IN FPA0 BA0F 9650 ( bas.asm):03653 LDA FPA0 * ADD MS BYTE BA11 995D ( bas.asm):03654 ADCA FPA1 * OF MANTISSA BA13 9750 ( bas.asm):03655 STA FPA0 SAVE IN FPA0 BA15 5D ( bas.asm):03656 TSTB TEST SIGN FLAG BA16 2A44 ( bas.asm):03657 BPL LBA5C BRANCH IF FPA0 & FPA1 SIGNS WERE ALIKE BA18 2502 ( bas.asm):03658 LBA18 BCS LBA1C BRANCH IF POSITIVE MANTISSA BA1A 8D5D ( bas.asm):03659 BSR LBA79 NEGATE FPA0 MANTISSA ( bas.asm):03660 * NORMALIZE FPA0 BA1C 5F ( bas.asm):03661 LBA1C CLRB CLEAR TEMPORARY EXPONENT ACCUMULATOR BA1D 9650 ( bas.asm):03662 LBA1D LDA FPA0 TEST MSB OF MANTISSA BA1F 262E ( bas.asm):03663 BNE LBA4F BRANCH IF <> 0 BA21 9651 ( bas.asm):03664 LDA FPA0+1 * IF THE MSB IS BA23 9750 ( bas.asm):03665 STA FPA0 * 0, THEN SHIFT THE BA25 9652 ( bas.asm):03666 LDA FPA0+2 * MANTISSA A WHOLE BYTE BA27 9751 ( bas.asm):03667 STA FPA0+1 * AT A TIME. THIS BA29 9653 ( bas.asm):03668 LDA FPA0+3 * IS FASTER THAN ONE BA2B 9752 ( bas.asm):03669 STA FPA0+2 * BIT AT A TIME BA2D 9663 ( bas.asm):03670 LDA FPSBYT * BUT USES MORE MEMORY. BA2F 9753 ( bas.asm):03671 STA FPA0+3 * FPSBYT, THE CARRY IN BA31 0F63 ( bas.asm):03672 CLR FPSBYT * BYTE, REPLACES THE MATISSA LSB. BA33 CB08 ( bas.asm):03673 ADDB #8 SHIFTING ONE BYTE = 8 BIT SHIFTS; ADD 8 TO EXPONENT BA35 C128 ( bas.asm):03674 CMPB #5*8 CHECK FOR 5 SHIFTS BA37 2DE4 ( bas.asm):03675 BLT LBA1D BRANCH IF < 5 SHIFTS, IF > 5, THEN MANTISSA = 0 BA39 4F ( bas.asm):03676 LBA39 CLRA A ZERO EXPONENT = 0 FLOATING POINT BA3A 974F ( bas.asm):03677 LBA3A STA FP0EXP ZERO OUT THE EXPONENT BA3C 9754 ( bas.asm):03678 STA FP0SGN ZERO OUT THE MANTISSA SIGN BA3E 39 ( bas.asm):03679 LBA3E RTS BA3F 8D6D ( bas.asm):03680 LBA3F BSR LBAAE SHIFT FPA0 MANTISSA TO RIGHT BA41 5F ( bas.asm):03681 CLRB CLEAR CARRY FLAG BA42 20A8 ( bas.asm):03682 BRA LB9EC ( bas.asm):03683 * SHIFT FPA0 LEFT ONE BIT UNTIL BIT 7 ( bas.asm):03684 * OF MATISSA MS BYTE = 1 BA44 5C ( bas.asm):03685 LBA44 INCB ADD ONE TO EXPONENT ACCUMULATOR BA45 0863 ( bas.asm):03686 ASL FPSBYT SHIFT SUB BYTE ONE LEFT BA47 0953 ( bas.asm):03687 ROL FPA0+3 SHIFT LS BYTE BA49 0952 ( bas.asm):03688 ROL FPA0+2 SHIFT NS BYTE BA4B 0951 ( bas.asm):03689 ROL FPA0+1 SHIFT NS BYTE BA4D 0950 ( bas.asm):03690 ROL FPA0 SHIFT MS BYTE BA4F 2AF3 ( bas.asm):03691 LBA4F BPL LBA44 BRANCH IF NOT YET NORMALIZED BA51 964F ( bas.asm):03692 LDA FP0EXP GET CURRENT EXPONENT BA53 3404 ( bas.asm):03693 PSHS B SAVE EXPONENT MODIFIER CAUSED BY NORMALIZATION BA55 A0E0 ( bas.asm):03694 SUBA ,S+ SUBTRACT ACCUMULATED EXPONENT MODIFIER BA57 974F ( bas.asm):03695 STA FP0EXP SAVE AS NEW EXPONENT BA59 23DE ( bas.asm):03696 BLS LBA39 SET FPA0 = 0 IF THE NORMALIZATION CAUSED ( bas.asm):03697 * MORE OR EQUAL NUMBER OF LEFT SHIFTS THAN THE ( bas.asm):03698 * SIZE OF THE EXPONENT BA5B 8C ( bas.asm):03699 FCB SKP2 SKIP 2 BYTES BA5C 2508 ( bas.asm):03700 LBA5C BCS LBA66 BRANCH IF MANTISSA OVERFLOW BA5E 0863 ( bas.asm):03701 ASL FPSBYT SUB BYTE BIT 7 TO CARRY - USE AS ROUND-OFF ( bas.asm):03702 * FLAG (TRUNCATE THE REST OF SUB BYTE) BA60 8600 ( bas.asm):03703 LDA #0 CLRA, BUT DO NOT CHANGE CARRY FLAG BA62 9763 ( bas.asm):03704 STA FPSBYT CLEAR THE SUB BYTE BA64 200C ( bas.asm):03705 BRA LBA72 GO ROUND-OFF RESULT BA66 0C4F ( bas.asm):03706 LBA66 INC FP0EXP INCREMENT EXPONENT - MULTIPLY BY 2 BA68 2728 ( bas.asm):03707 BEQ LBA92 OVERFLOW ERROR IF CARRY PAST $FF BA6A 0650 ( bas.asm):03708 ROR FPA0 * SHIFT MANTISSA BA6C 0651 ( bas.asm):03709 ROR FPA0+1 * ONE TO BA6E 0652 ( bas.asm):03710 ROR FPA0+2 * THE RIGHT - BA70 0653 ( bas.asm):03711 ROR FPA0+3 * DIVIDE BY TWO BA72 2404 ( bas.asm):03712 LBA72 BCC LBA78 BRANCH IF NO ROUND-OFF NEEDED BA74 8D0D ( bas.asm):03713 BSR LBA83 ADD ONE TO MANTISSA - ROUND OFF BA76 27EE ( bas.asm):03714 BEQ LBA66 BRANCH iF OVERFLOW - MANTISSA = 0 BA78 39 ( bas.asm):03715 LBA78 RTS ( bas.asm):03716 * NEGATE FPA0 MANTISSA BA79 0354 ( bas.asm):03717 LBA79 COM FP0SGN TOGGLE SIGN OF MANTISSA BA7B 0350 ( bas.asm):03718 LBA7B COM FPA0 * COMPLEMENT ALL 4 MANTISSA BYTES BA7D 0351 ( bas.asm):03719 COM FPA0+1 * BA7F 0352 ( bas.asm):03720 COM FPA0+2 * BA81 0353 ( bas.asm):03721 COM FPA0+3 * ( bas.asm):03722 * ADD ONE TO FPA0 MANTISSA BA83 9E52 ( bas.asm):03723 LBA83 LDX FPA0+2 * GET BOTTOM 2 MANTISSA BA85 3001 ( bas.asm):03724 LEAX 1,X * BYTES, ADD ONE TO BA87 9F52 ( bas.asm):03725 STX FPA0+2 * THEM AND SAVE THEM BA89 2606 ( bas.asm):03726 BNE LBA91 BRANCH IF NO OVERFLOW BA8B 9E50 ( bas.asm):03727 LDX FPA0 * IF OVERFLOW ADD ONE BA8D 3001 ( bas.asm):03728 LEAX 1,X * TO TOP 2 MANTISSA BA8F 9F50 ( bas.asm):03729 STX FPA0 * BYTES AND SAVE THEM BA91 39 ( bas.asm):03730 LBA91 RTS BA92 C60A ( bas.asm):03731 LBA92 LDB #2*5 'OV' OVERFLOW ERROR BA94 7EAC46 ( bas.asm):03732 JMP >LAC46 PROCESS AN ERROR BA97 8E0012 ( bas.asm):03733 LBA97 LDX #FPA2-1 POINT X TO FPA2 ( bas.asm):03734 * SHIFT FPA POINTED TO BY (X) TO ( bas.asm):03735 * THE RIGHT -(B) TIMES. EXIT WITH ( bas.asm):03736 * ACCA CONTAINING DATA SHIFTED OUT ( bas.asm):03737 * TO THE RIGHT (SUB BYTE) AND THE DATA ( bas.asm):03738 * SHIFTED IN FROM THE LEFT WILL COME FROM FPCARY BA9A A604 ( bas.asm):03739 LBA9A LDA 4,X GET LS BYTE OF MANTISSA (X) BA9C 9763 ( bas.asm):03740 STA FPSBYT SAVE IN FPA SUB BYTE BA9E A603 ( bas.asm):03741 LDA 3,X * SHIFT THE NEXT THREE BYTES OF THE BAA0 A704 ( bas.asm):03742 STA 4,X * MANTISSA RIGHT ONE COMPLETE BYTE. BAA2 A602 ( bas.asm):03743 LDA 2,X * BAA4 A703 ( bas.asm):03744 STA 3,X * BAA6 A601 ( bas.asm):03745 LDA 1,X * BAA8 A702 ( bas.asm):03746 STA 2,X * BAAA 965B ( bas.asm):03747 LDA FPCARY GET THE CARRY IN BYTE BAAC A701 ( bas.asm):03748 STA 1,X STORE AS THE MS MANTISSA BYTE OF (X) BAAE CB08 ( bas.asm):03749 LBAAE ADDB #8 ADD 8 TO DIFFERENCE OF EXPONENTS BAB0 2FE8 ( bas.asm):03750 BLE LBA9A BRANCH IF EXPONENT DIFFERENCE < -8 BAB2 9663 ( bas.asm):03751 LDA FPSBYT GET FPA SUB BYTE BAB4 C008 ( bas.asm):03752 SUBB #8 CAST OUT THE 8 ADDED IN ABOVE BAB6 270C ( bas.asm):03753 BEQ LBAC4 BRANCH IF EXPONENT DIFFERENCE = 0 ( bas.asm):03754 * SHIFT MANTISSA POINTED TO BY (X) TO THE RIGHT (B) TIMES. OVERFLOW RETAINED IN ACCA. BAB8 6701 ( bas.asm):03755 LBAB8 ASR 1,X * SHIFT MANTISSA AND SUB BYTE ONE BIT TO THE RIGHT BABA 6602 ( bas.asm):03756 LBABA ROR 2,X * BABC 6603 ( bas.asm):03757 ROR 3,X * BABE 6604 ( bas.asm):03758 ROR 4,X * BAC0 46 ( bas.asm):03759 RORA * BAC1 5C ( bas.asm):03760 INCB ADD ONE TO EXPONENT DIFFERENCE BAC2 26F4 ( bas.asm):03761 BNE LBAB8 BRANCH IF EXPONENTS NOT = BAC4 39 ( bas.asm):03762 LBAC4 RTS BAC5 8100000000 ( bas.asm):03763 LBAC5 FCB $81,$00,$00,$00,$00 FLOATING POINT CONSTANT 1.0 ( bas.asm):03764 * ARITHMETIC OPERATION (*) JUMPS HERE - MULTIPLY ( bas.asm):03765 * FPA0 BY (X) - RETURN PRODUCT IN FPA0 BACA 8D63 ( bas.asm):03766 LBACA BSR LBB2F MOVE PACKED FPA FROM (X) TO FPA1 BACC 2760 ( bas.asm):03767 BEQ LBB2E BRANCH IF EXPONENT OF FPA0 = 0 BACE 8D78 ( bas.asm):03768 BSR LBB48 CALCULATE EXPONENT OF PRODUCT ( bas.asm):03769 * MULTIPLY FPA0 MANTISSA BY FPA1. NORMALIZE ( bas.asm):03770 * HIGH ORDER BYTES OF PRODUCT IN FPA0. THE ( bas.asm):03771 * LOW ORDER FOUR BYTES OF THE PRODUCT WILL ( bas.asm):03772 * BE STORED IN VAB-VAE. BAD0 8600 ( bas.asm):03773 LBAD0 LDA #0 * ZERO OUT MANTISSA OF FPA2 BAD2 9713 ( bas.asm):03774 STA FPA2 * BAD4 9714 ( bas.asm):03775 STA FPA2+1 * BAD6 9715 ( bas.asm):03776 STA FPA2+2 * BAD8 9716 ( bas.asm):03777 STA FPA2+3 * BADA D653 ( bas.asm):03778 LDB FPA0+3 GET LS BYTE OF FPA0 BADC 8D22 ( bas.asm):03779 BSR LBB00 MULTIPLY BY FPA1 BADE D663 ( bas.asm):03780 LDB FPSBYT * TEMPORARILY SAVE SUB BYTE 4 BAE0 D7AE ( bas.asm):03781 STB VAE * BAE2 D652 ( bas.asm):03782 LDB FPA0+2 GET NUMBER 3 MANTISSA BYTE OF FPA0 BAE4 8D1A ( bas.asm):03783 BSR LBB00 MULTIPLY BY FPA1 BAE6 D663 ( bas.asm):03784 LDB FPSBYT * TEMPORARILY SAVE SUB BYTE 3 BAE8 D7AD ( bas.asm):03785 STB VAD * BAEA D651 ( bas.asm):03786 LDB FPA0+1 GET NUMBER 2 MANTISSA BYTE OF FPA0 BAEC 8D12 ( bas.asm):03787 BSR LBB00 MULTIPLY BY FPA1 BAEE D663 ( bas.asm):03788 LDB FPSBYT * TEMPORARILY SAVE SUB BYTE 2 BAF0 D7AC ( bas.asm):03789 STB VAC * BAF2 D650 ( bas.asm):03790 LDB FPA0 GET MS BYTE OF FPA0 MANTISSA BAF4 8D0C ( bas.asm):03791 BSR LBB02 MULTIPLY BY FPA1 BAF6 D663 ( bas.asm):03792 LDB FPSBYT * TEMPORARILY SAVE SUB BYTE 1 BAF8 D7AB ( bas.asm):03793 STB VAB * BAFA BDBC0B ( bas.asm):03794 JSR >LBC0B COPY MANTISSA FROM FPA2 TO FPA0 BAFD 7EBA1C ( bas.asm):03795 JMP >LBA1C NORMALIZE FPA0 BB00 2795 ( bas.asm):03796 LBB00 BEQ LBA97 SHIFT FPA2 ONE BYTE TO RIGHT BB02 43 ( bas.asm):03797 LBB02 COMA SET CARRY FLAG ( bas.asm):03798 * MULTIPLY FPA1 MANTISSA BY ACCB AND ( bas.asm):03799 * ADD PRODUCT TO FPA2 MANTISSA BB03 9613 ( bas.asm):03800 LBB03 LDA FPA2 GET FPA2 MS BYTE BB05 56 ( bas.asm):03801 RORB ROTATE CARRY FLAG INTO SHIFT COUNTER; ( bas.asm):03802 * DATA BIT INTO CARRY BB06 2726 ( bas.asm):03803 BEQ LBB2E BRANCH WHEN 8 SHIFTS DONE BB08 2416 ( bas.asm):03804 BCC LBB20 DO NOT ADD FPA1 IF DATA BIT = 0 BB0A 9616 ( bas.asm):03805 LDA FPA2+3 * ADD MANTISSA LS BYTE BB0C 9B60 ( bas.asm):03806 ADDA FPA1+3 * BB0E 9716 ( bas.asm):03807 STA FPA2+3 * BB10 9615 ( bas.asm):03808 LDA FPA2+2 = ADD MANTISSA NUMBER 3 BYTE BB12 995F ( bas.asm):03809 ADCA FPA1+2 = BB14 9715 ( bas.asm):03810 STA FPA2+2 = BB16 9614 ( bas.asm):03811 LDA FPA2+1 * ADD MANTISSA NUMBER 2 BYTE BB18 995E ( bas.asm):03812 ADCA FPA1+1 * BB1A 9714 ( bas.asm):03813 STA FPA2+1 * BB1C 9613 ( bas.asm):03814 LDA FPA2 = ADD MANTISSA MS BYTE BB1E 995D ( bas.asm):03815 ADCA FPA1 = BB20 46 ( bas.asm):03816 LBB20 RORA * ROTATE CARRY INTO MS BYTE BB21 9713 ( bas.asm):03817 STA FPA2 * BB23 0614 ( bas.asm):03818 ROR FPA2+1 = ROTATE FPA2 ONE BIT TO THE RIGHT BB25 0615 ( bas.asm):03819 ROR FPA2+2 = BB27 0616 ( bas.asm):03820 ROR FPA2+3 = BB29 0663 ( bas.asm):03821 ROR FPSBYT = BB2B 4F ( bas.asm):03822 CLRA CLEAR CARRY FLAG BB2C 20D5 ( bas.asm):03823 BRA LBB03 KEEP LOOPING BB2E 39 ( bas.asm):03824 LBB2E RTS ( bas.asm):03825 * UNPACK A FP NUMBER FROM (X) TO FPA1 BB2F EC01 ( bas.asm):03826 LBB2F LDD 1,X GET TWO MSB BYTES OF MANTISSA FROM FPA POINTED TO BY X BB31 9761 ( bas.asm):03827 STA FP1SGN SAVE PACKED MANTISSA SIGN BYTE BB33 8A80 ( bas.asm):03828 ORA #$80 FORCE BIT 7 OF MSB MANTISSA = 1 BB35 DD5D ( bas.asm):03829 STD FPA1 SAVE 2 MSB BYTES IN FPA1 BB37 D661 ( bas.asm):03830 LDB FP1SGN * GET PACKED MANTISSA SIGN BYTE. EOR W/FPA0 BB39 D854 ( bas.asm):03831 EORB FP0SGN * SIGN - NEW SIGN POSITION IF BOTH OLD SIGNS ALIKE, BB3B D762 ( bas.asm):03832 STB RESSGN * NEG IF BOTH OLD SIGNS DIFF. SAVE ADJUSTED ( bas.asm):03833 * * MANTISSA SIGN BYTE BB3D EC03 ( bas.asm):03834 LDD 3,X = GET 2 LSB BYTES OF MANTISSA BB3F DD5F ( bas.asm):03835 STD FPA1+2 = AND PUT IN FPA1 BB41 A684 ( bas.asm):03836 LDA ,X * GET EXPONENT FROM (X) AND BB43 975C ( bas.asm):03837 STA FP1EXP * PUT IN EXPONENT OF FPA1 BB45 D64F ( bas.asm):03838 LDB FP0EXP GET EXPONENT OF FPA0 BB47 39 ( bas.asm):03839 RTS ( bas.asm):03840 * CALCULATE EXPONENT FOR PRODUCT OF FPA0 & FPA1 ( bas.asm):03841 * ENTER WITH EXPONENT OF FPA1 IN ACCA BB48 4D ( bas.asm):03842 LBB48 TSTA TEST EXPONENT OF FPA1 BB49 2716 ( bas.asm):03843 BEQ LBB61 PURGE RETURN ADDRESS & SET FPA0 = 0 BB4B 9B4F ( bas.asm):03844 ADDA FP0EXP ADD FPA1 EXPONENT TO FPA0 EXPONENT BB4D 46 ( bas.asm):03845 RORA ROTATE CARRY INTO BIT 7; BIT 0 INTO CARRY BB4E 49 ( bas.asm):03846 ROLA SET OVERFLOW FLAG BB4F 2810 ( bas.asm):03847 BVC LBB61 BRANCH IF EXPONENT TOO LARGE OR SMALL BB51 8B80 ( bas.asm):03848 ADDA #$80 ADD $80 BIAS TO EXPONENT BB53 974F ( bas.asm):03849 STA FP0EXP SAVE NEW EXPONENT BB55 270C ( bas.asm):03850 BEQ LBB63 SET FPA0 BB57 9662 ( bas.asm):03851 LDA RESSGN GET MANTISSA SIGN BB59 9754 ( bas.asm):03852 STA FP0SGN SAVE AS MANTISSA SIGN OF FPA0 BB5B 39 ( bas.asm):03853 RTS ( bas.asm):03854 * IF FPA0 = POSITIVE THEN 'OV' ERROR IF FPA0 ( bas.asm):03855 * = IS NEGATIVE THEN FPA0 = 0 BB5C 9654 ( bas.asm):03856 LBB5C LDA FP0SGN GET MANTISSA SIGN OF FPA0 BB5E 43 ( bas.asm):03857 COMA CHANGE SIGN OF FPA0 MANTISSA BB5F 2002 ( bas.asm):03858 BRA LBB63 BB61 3262 ( bas.asm):03859 LBB61 LEAS 2,S PURGE RETURN ADDRESS FROM STACK BB63 102AFED2 ( bas.asm):03860 LBB63 LBPL LBA39 ZERO FPA0 MANTISSA SIGN & EXPONENT BB67 7EBA92 ( bas.asm):03861 LBB67 JMP >LBA92 'OV' OVERFLOW ERROR ( bas.asm):03862 * FAST MULTIPLY BY 10 AND LEAVE RESULT IN FPA0 BB6A BDBC5F ( bas.asm):03863 LBB6A JSR >LBC5F TRANSFER FPA0 TO FPA1 BB6D 270D ( bas.asm):03864 BEQ LBB7C BRANCH IF EXPONENT = 0 BB6F 8B02 ( bas.asm):03865 ADDA #2 ADD 2 TO EXPONENT (TIMES 4) BB71 25F4 ( bas.asm):03866 BCS LBB67 'OV' ERROR IF EXPONENT > $FF BB73 0F62 ( bas.asm):03867 CLR RESSGN CLEAR RESULT SIGN BYTE BB75 BDB9CD ( bas.asm):03868 JSR >LB9CD ADD FPA1 TO FPA0 (TIMES 5) BB78 0C4F ( bas.asm):03869 INC FP0EXP ADD ONE TO EXPONENT (TIMES 10) BB7A 27EB ( bas.asm):03870 BEQ LBB67 'OV' ERROR IF EXPONENT > $FF BB7C 39 ( bas.asm):03871 LBB7C RTS BB7D 8420000000 ( bas.asm):03872 LBB7D FCB $84,$20,$00,$00,$00 FLOATING POINT CONSTANT 10 ( bas.asm):03873 * DIVIDE FPA0 BY 10 BB82 BDBC5F ( bas.asm):03874 LBB82 JSR >LBC5F MOVE FPA0 TO FPA1 BB85 8EBB7D ( bas.asm):03875 LDX #LBB7D POINT TO FLOATING POINT CONSTANT 10 BB88 5F ( bas.asm):03876 CLRB ZERO MANTISSA SIGN BYTE BB89 D762 ( bas.asm):03877 LBB89 STB RESSGN STORE THE QUOTIENT MANTISSA SIGN BYTE BB8B BDBC14 ( bas.asm):03878 JSR >LBC14 UNPACK AN FP NUMBER FROM (X) INTO FPA0 BB8E 8C ( bas.asm):03879 FCB SKP2 SKIP TWO BYTES ( bas.asm):03880 * DIVIDE (X) BY FPA0-LEAVE NORMALIZED QUOTIENT IN FPA0 BB8F 8D9E ( bas.asm):03881 LBB8F BSR LBB2F GET FP NUMBER FROM (X) TO FPA1 ( bas.asm):03882 * ARITHMETIC OPERATION (/) JUMPS HERE. DIVIDE FPA1 BY FPA0 (ENTER WITH ( bas.asm):03883 * EXPONENT OF FPA1 IN ACCA AND FLAGS SET BY TSTA) ( bas.asm):03884 * DIVIDE FPA1 BY FPA0 BB91 2773 ( bas.asm):03885 LBB91 BEQ LBC06 '/0' DIVIDE BY ZERO ERROR BB93 004F ( bas.asm):03886 NEG FP0EXP GET EXPONENT OF RECIPROCAL OF DIVISOR BB95 8DB1 ( bas.asm):03887 BSR LBB48 CALCULATE EXPONENT OF QUOTIENT BB97 0C4F ( bas.asm):03888 INC FP0EXP INCREMENT EXPONENT BB99 27CC ( bas.asm):03889 BEQ LBB67 'OV' OVERFLOW ERROR BB9B 8E0013 ( bas.asm):03890 LDX #FPA2 POINT X TO MANTISSA OF FPA2 - HOLD ( bas.asm):03891 * TEMPORARY QUOTIENT IN FPA2 BB9E C604 ( bas.asm):03892 LDB #4 5 BYTE DIVIDE BBA0 D703 ( bas.asm):03893 STB TMPLOC SAVE BYTE COUNTER BBA2 C601 ( bas.asm):03894 LDB #1 SHIFT COUNTER-AND TEMPORARY QUOTIENT BYTE ( bas.asm):03895 * COMPARE FPA0 MANTISSA TO FPA1 MANTISSA - ( bas.asm):03896 * SET CARRY FLAG IF FPA1 >= FPA0 BBA4 9650 ( bas.asm):03897 LBBA4 LDA FPA0 * COMPARE THE TWO MS BYTES BBA6 915D ( bas.asm):03898 CMPA FPA1 * OF FPA0 AND FPA1 AND BBA8 2613 ( bas.asm):03899 BNE LBBBD * BRANCH IF <> BBAA 9651 ( bas.asm):03900 LDA FPA0+1 = COMPARE THE NUMBER 2 BBAC 915E ( bas.asm):03901 CMPA FPA1+1 = BYTES AND BBAE 260D ( bas.asm):03902 BNE LBBBD = BRANCH IF <> BBB0 9652 ( bas.asm):03903 LDA FPA0+2 * COMPARE THE NUMBER 3 BBB2 915F ( bas.asm):03904 CMPA FPA1+2 * BYTES AND BBB4 2607 ( bas.asm):03905 BNE LBBBD * BRANCH IF <> BBB6 9653 ( bas.asm):03906 LDA FPA0+3 = COMPARE THE LS BYTES BBB8 9160 ( bas.asm):03907 CMPA FPA1+3 = AND BRANCH BBBA 2601 ( bas.asm):03908 BNE LBBBD = IF <> BBBC 43 ( bas.asm):03909 COMA SET CARRY FLAG IF FPA0 = FPA1 BBBD 1FA8 ( bas.asm):03910 LBBBD TFR CC,A SAVE CARRY FLAG STATUS IN ACCA; CARRY ( bas.asm):03911 * CLEAR IF FPA0 > FPA1 BBBF 59 ( bas.asm):03912 ROLB ROTATE CARRY INTO TEMPORARY QUOTIENT BYTE BBC0 240A ( bas.asm):03913 BCC LBBCC CARRY WILL BE SET AFTER 8 SHIFTS BBC2 E780 ( bas.asm):03914 STB ,X+ SAVE TEMPORARY QUOTIENT BBC4 0A03 ( bas.asm):03915 DEC TMPLOC DECREMENT BYTE COUNTER BBC6 2B34 ( bas.asm):03916 BMI LBBFC BRANCH IF DONE BBC8 272E ( bas.asm):03917 BEQ LBBF8 BRANCH IF LAST BYTE BBCA C601 ( bas.asm):03918 LDB #1 RESET SHIFT COUNTER AND TEMPORARY QUOTIENT BYTE BBCC 1F8A ( bas.asm):03919 LBBCC TFR A,CC RESTORE CARRY FLAG AND BBCE 250E ( bas.asm):03920 BCS LBBDE BRANCH IF FPA0 =< FPA1 BBD0 0860 ( bas.asm):03921 LBBD0 ASL FPA1+3 * SHIFT FPA1 MANTISSA 1 BIT TO LEFT BBD2 095F ( bas.asm):03922 ROL FPA1+2 * BBD4 095E ( bas.asm):03923 ROL FPA1+1 * BBD6 095D ( bas.asm):03924 ROL FPA1 * BBD8 25E3 ( bas.asm):03925 BCS LBBBD BRANCH IF CARRY - ADD ONE TO PARTIAL QUOTIENT BBDA 2BC8 ( bas.asm):03926 BMI LBBA4 IF MSB OF HIGH ORDER MANTISSA BYTE IS ( bas.asm):03927 * SET, CHECK THE MAGNITUDES OF FPA0, FPA1 BBDC 20DF ( bas.asm):03928 BRA LBBBD CARRY IS CLEAR, CHECK ANOTHER BIT ( bas.asm):03929 * SUBTRACT FPA0 FROM FPA1 - LEAVE RESULT IN FPA1 BBDE 9660 ( bas.asm):03930 LBBDE LDA FPA1+3 * SUBTRACT THE LS BYTES OF MANTISSA BBE0 9053 ( bas.asm):03931 SUBA FPA0+3 * BBE2 9760 ( bas.asm):03932 STA FPA1+3 * BBE4 965F ( bas.asm):03933 LDA FPA1+2 = THEN THE NEXT BYTE BBE6 9252 ( bas.asm):03934 SBCA FPA0+2 = BBE8 975F ( bas.asm):03935 STA FPA1+2 = BBEA 965E ( bas.asm):03936 LDA FPA1+1 * AND THE NEXT BBEC 9251 ( bas.asm):03937 SBCA FPA0+1 * BBEE 975E ( bas.asm):03938 STA FPA1+1 * BBF0 965D ( bas.asm):03939 LDA FPA1 = AND FINALLY, THE MS BYTE OF MANTISSA BBF2 9250 ( bas.asm):03940 SBCA FPA0 = BBF4 975D ( bas.asm):03941 STA FPA1 = BBF6 20D8 ( bas.asm):03942 BRA LBBD0 GO SHIFT FPA1 BBF8 C640 ( bas.asm):03943 LBBF8 LDB #$40 USE ONLY TWO BITS OF THE LAST BYTE (FIFTH) BBFA 20D0 ( bas.asm):03944 BRA LBBCC GO SHIFT THE LAST BYTE BBFC 56 ( bas.asm):03945 LBBFC RORB * SHIFT CARRY (ALWAYS SET HERE) INTO BBFD 56 ( bas.asm):03946 RORB * BIT 5 AND MOVE BBFE 56 ( bas.asm):03947 RORB * BITS 1,0 TO BITS 7,6 BBFF D763 ( bas.asm):03948 STB FPSBYT SAVE SUB BYTE BC01 8D08 ( bas.asm):03949 BSR LBC0B MOVE MANTISSA OF FPA2 TO FPA0 BC03 7EBA1C ( bas.asm):03950 JMP >LBA1C NORMALIZE FPA0 BC06 C614 ( bas.asm):03951 LBC06 LDB #2*10 '/0' ERROR BC08 7EAC46 ( bas.asm):03952 JMP >LAC46 PROCESS THE ERROR ( bas.asm):03953 * COPY MANTISSA FROM FPA2 TO FPA0 BC0B 9E13 ( bas.asm):03954 LBC0B LDX FPA2 * MOVE TOP 2 BYTES BC0D 9F50 ( bas.asm):03955 STX FPA0 * BC0F 9E15 ( bas.asm):03956 LDX FPA2+2 = MOVE BOTTOM 2 BYTES BC11 9F52 ( bas.asm):03957 STX FPA0+2 = BC13 39 ( bas.asm):03958 RTS ( bas.asm):03959 * COPY A PACKED FP NUMBER FROM (X) TO FPA0 BC14 3402 ( bas.asm):03960 LBC14 PSHS A SAVE ACCA BC16 EC01 ( bas.asm):03961 LDD 1,X GET TOP TWO MANTISSA BYTES BC18 9754 ( bas.asm):03962 STA FP0SGN SAVE MS BYTE OF MANTISSA AS MANTISSA SIGN BC1A 8A80 ( bas.asm):03963 ORA #$80 UNPACK MS BYTE BC1C DD50 ( bas.asm):03964 STD FPA0 SAVE UNPACKED TOP 2 MANTISSA BYTES BC1E 0F63 ( bas.asm):03965 CLR FPSBYT CLEAR MANTISSA SUB BYTE BC20 E684 ( bas.asm):03966 LDB ,X GET EXPONENT TO ACCB BC22 AE03 ( bas.asm):03967 LDX 3,X * MOVE LAST 2 BC24 9F52 ( bas.asm):03968 STX FPA0+2 * MANTISSA BYTES BC26 D74F ( bas.asm):03969 STB FP0EXP SAVE EXPONENT BC28 3582 ( bas.asm):03970 PULS A,PC RESTORE ACCA AND RETURN BC2A 8E0045 ( bas.asm):03971 LBC2A LDX #V45 POINT X TO MANTISSA OF FPA4 BC2D 2006 ( bas.asm):03972 BRA LBC35 MOVE FPA0 TO FPA4 BC2F 8E0040 ( bas.asm):03973 LBC2F LDX #V40 POINT X TO MANTISSA OF FPA3 BC32 8C ( bas.asm):03974 FCB SKP2 SKIP TWO BYTES BC33 9E3B ( bas.asm):03975 LBC33 LDX VARDES POINT X TO VARIABLE DESCRIPTOR IN VARDES ( bas.asm):03976 * PACK FPA0 AND MOVE IT TO ADDRESS IN X BC35 964F ( bas.asm):03977 LBC35 LDA FP0EXP * COPY EXPONENT BC37 A784 ( bas.asm):03978 STA ,X * BC39 9654 ( bas.asm):03979 LDA FP0SGN GET MANTISSA SIGN BIT BC3B 8A7F ( bas.asm):03980 ORA #$7F MASK THE BOTTOM 7 BITS BC3D 9450 ( bas.asm):03981 ANDA FPA0 AND BIT 7 OF MANTISSA SIGN INTO BIT 7 OF MS BYTE BC3F A701 ( bas.asm):03982 STA 1,X SAVE MS BYTE BC41 9651 ( bas.asm):03983 LDA FPA0+1 * MOVE 2ND MANTISSA BYTE BC43 A702 ( bas.asm):03984 STA 2,X * BC45 DE52 ( bas.asm):03985 LDU FPA0+2 = MOVE BOTTOM 2 MANTISSA BYTES BC47 EF03 ( bas.asm):03986 STU 3,X = BC49 39 ( bas.asm):03987 RTS ( bas.asm):03988 * MOVE FPA1 TO FPA0 RETURN W/MANTISSA SIGN IN ACCA BC4A 9661 ( bas.asm):03989 LBC4A LDA FP1SGN * COPY MANTISSA SIGN FROM BC4C 9754 ( bas.asm):03990 LBC4C STA FP0SGN * FPA1 TO FPA0 BC4E 9E5C ( bas.asm):03991 LDX FP1EXP = COPY EXPONENT + MS BYTE FROM BC50 9F4F ( bas.asm):03992 STX FP0EXP = FPA1 TO FPA0 BC52 0F63 ( bas.asm):03993 CLR FPSBYT CLEAR MANTISSA SUB BYTE BC54 965E ( bas.asm):03994 LDA FPA1+1 * COPY 2ND MANTISSA BYTE BC56 9751 ( bas.asm):03995 STA FPA0+1 * FROM FPA1 TO FPA0 BC58 9654 ( bas.asm):03996 LDA FP0SGN GET MANTISSA SIGN BC5A 9E5F ( bas.asm):03997 LDX FPA1+2 * COPY 3RD AND 4TH MANTISSA BYTE BC5C 9F52 ( bas.asm):03998 STX FPA0+2 * FROM FPA1 TO FPA0 BC5E 39 ( bas.asm):03999 RTS ( bas.asm):04000 * TRANSFER FPA0 TO FPA1 BC5F DC4F ( bas.asm):04001 LBC5F LDD FP0EXP * TRANSFER EXPONENT & MS BYTE BC61 DD5C ( bas.asm):04002 STD FP1EXP * BC63 9E51 ( bas.asm):04003 LDX FPA0+1 = TRANSFER MIDDLE TWO BYTES BC65 9F5E ( bas.asm):04004 STX FPA1+1 = BC67 9E53 ( bas.asm):04005 LDX FPA0+3 * TRANSFER BOTTOM TWO BYTES BC69 9F60 ( bas.asm):04006 STX FPA1+3 * BC6B 4D ( bas.asm):04007 TSTA SET FLAGS ACCORDING TO EXPONENT BC6C 39 ( bas.asm):04008 RTS ( bas.asm):04009 * CHECK FPA0; RETURN ACCB = 0 IF FPA0 = 0, ( bas.asm):04010 * ACCB = $FF IF FPA0 = NEGATIVE, ACCB = 1 IF FPA0 = POSITIVE BC6D D64F ( bas.asm):04011 LBC6D LDB FP0EXP GET EXPONENT BC6F 2708 ( bas.asm):04012 BEQ LBC79 BRANCH IF FPA0 = 0 BC71 D654 ( bas.asm):04013 LBC71 LDB FP0SGN GET SIGN OF MANTISSA BC73 59 ( bas.asm):04014 LBC73 ROLB BIT 7 TO CARRY BC74 C6FF ( bas.asm):04015 LDB #$FF NEGATIVE FLAG BC76 2501 ( bas.asm):04016 BCS LBC79 BRANCH IF NEGATIVE MANTISSA BC78 50 ( bas.asm):04017 NEGB ACCB = 1 IF POSITIVE MANTISSA BC79 39 ( bas.asm):04018 LBC79 RTS ( bas.asm):04019 * SGN BC7A 8DF1 ( bas.asm):04020 SGN BSR LBC6D SET ACCB ACCORDING TO SIGN OF FPA0 ( bas.asm):04021 * CONVERT A SIGNED NUMBER IN ACCB INTO A FLOATING POINT NUMBER BC7C D750 ( bas.asm):04022 LBC7C STB FPA0 SAVE ACCB IN FPA0 BC7E 0F51 ( bas.asm):04023 CLR FPA0+1 CLEAR NUMBER 2 MANTISSA BYTE OF FPA0 BC80 C688 ( bas.asm):04024 LDB #$88 EXPONENT REQUIRED IF FPA0 IS TO BE AN INTEGER BC82 9650 ( bas.asm):04025 LBC82 LDA FPA0 GET MS BYTE OF MANTISSA BC84 8080 ( bas.asm):04026 SUBA #$80 SET CARRY IF POSITIVE MANTISSA BC86 D74F ( bas.asm):04027 LBC86 STB FP0EXP SAVE EXPONENT BC88 DC8A ( bas.asm):04028 LDD ZERO * ZERO OUT ACCD AND BC8A DD52 ( bas.asm):04029 STD FPA0+2 * BOTTOM HALF OF FPA0 BC8C 9763 ( bas.asm):04030 STA FPSBYT CLEAR SUB BYTE BC8E 9754 ( bas.asm):04031 STA FP0SGN CLEAR SIGN OF FPA0 MANTISSA BC90 7EBA18 ( bas.asm):04032 JMP >LBA18 GO NORMALIZE FPA0 ( bas.asm):04033 * ABS BC93 0F54 ( bas.asm):04034 ABS CLR FP0SGN FORCE MANTISSA SIGN OF FPA0 POSITIVE BC95 39 ( bas.asm):04035 RTS ( bas.asm):04036 * COMPARE A PACKED FLOATING POINT NUMBER POINTED TO ( bas.asm):04037 * BY (X) TO AN UNPACKED FP NUMBER IN FPA0. RETURN ( bas.asm):04038 * ZERO FLAG SET AND ACCB = 0, IF EQUAL; ACCB = 1 IF ( bas.asm):04039 * FPA0 > (X); ACCB = $FF IF FPA0 < (X) BC96 E684 ( bas.asm):04040 LBC96 LDB ,X CHECK EXPONENT OF (X) BC98 27D3 ( bas.asm):04041 BEQ LBC6D BRANCH IF FPA = 0 BC9A E601 ( bas.asm):04042 LDB 1,X GET MS BYTE OF MANTISSA OF (X) BC9C D854 ( bas.asm):04043 EORB FP0SGN EOR WITH SIGN OF FPA0 BC9E 2BD1 ( bas.asm):04044 BMI LBC71 BRANCH IF SIGNS NOT = ( bas.asm):04045 * COMPARE FPA0 WITH FP NUMBER POINTED TO BY (X). ( bas.asm):04046 * FPA0 IS NORMALIZED, (X) IS PACKED. BCA0 D64F ( bas.asm):04047 LBCA0 LDB FP0EXP * GET EXPONENT OF BCA2 E184 ( bas.asm):04048 CMPB ,X * FPA0, COMPARE TO EXPONENT OF BCA4 261D ( bas.asm):04049 BNE LBCC3 * (X) AND BRANCH IF <>. BCA6 E601 ( bas.asm):04050 LDB 1,X * GET MS BYTE OF (X), KEEP ONLY BCA8 CA7F ( bas.asm):04051 ORB #$7F * THE SIGN BIT - 'AND' THE BOTTOM 7 BCAA D450 ( bas.asm):04052 ANDB FPA0 * BITS OF FPA0 INTO ACCB BCAC E101 ( bas.asm):04053 CMPB 1,X = COMPARE THE BOTTOM 7 BITS OF THE MANTISSA BCAE 2613 ( bas.asm):04054 BNE LBCC3 = MS BYTE AND BRANCH IF <> BCB0 D651 ( bas.asm):04055 LDB FPA0+1 * COMPARE 2ND BYTE BCB2 E102 ( bas.asm):04056 CMPB 2,X * OF MANTISSA, BCB4 260D ( bas.asm):04057 BNE LBCC3 * BRANCH IF <> BCB6 D652 ( bas.asm):04058 LDB FPA0+2 = COMPARE 3RD BYTE BCB8 E103 ( bas.asm):04059 CMPB 3,X = OF MANTISSA, BCBA 2607 ( bas.asm):04060 BNE LBCC3 = BRANCH IF <> BCBC D653 ( bas.asm):04061 LDB FPA0+3 * SUBTRACT LS BYTE BCBE E004 ( bas.asm):04062 SUBB 4,X * OF (X) FROM LS BYTE OF BCC0 2601 ( bas.asm):04063 BNE LBCC3 * FPA0, BRANCH IF <> BCC2 39 ( bas.asm):04064 RTS RETURN IF FP (X) = FPA0 BCC3 56 ( bas.asm):04065 LBCC3 RORB SHIFT CARRY TO BIT 7; CARRY SET IF FPA0 < (X) BCC4 D854 ( bas.asm):04066 EORB FP0SGN TOGGLE SIZE COMPARISON BIT IF FPA0 IS NEGATIVE BCC6 20AB ( bas.asm):04067 BRA LBC73 GO SET ACCB ACCORDING TO COMPARISON ( bas.asm):04068 * DE-NORMALIZE FPA0 : SHIFT THE MANTISSA UNTIL THE BINARY POINT IS TO THE RIGHT ( bas.asm):04069 * OF THE LEAST SIGNIFICANT BYTE OF THE MANTISSA BCC8 D64F ( bas.asm):04070 LBCC8 LDB FP0EXP GET EXPONENT OF FPA0 BCCA 273D ( bas.asm):04071 BEQ LBD09 ZERO MANTISSA IF FPA0 = 0 BCCC C0A0 ( bas.asm):04072 SUBB #$A0 SUBTRACT $A0 FROM FPA0 EXPONENT T THIS WILL YIELD ( bas.asm):04073 * THE NUMBER OF SHIFTS REQUIRED TO DENORMALIZE FPA0. WHEN ( bas.asm):04074 * THE EXPONENT OF FPA0 IS = ZERO, THEN THE BINARY POINT ( bas.asm):04075 * WILL BE TO THE RIGHT OF THE MANTISSA BCCE 9654 ( bas.asm):04076 LDA FP0SGN TEST SIGN OF FPA0 MANTISSA BCD0 2A05 ( bas.asm):04077 BPL LBCD7 BRANCH IF POSITIVE BCD2 035B ( bas.asm):04078 COM FPCARY COMPLEMENT CARRY IN BYTE BCD4 BDBA7B ( bas.asm):04079 JSR >LBA7B NEGATE MANTISSA OF FPA0 BCD7 8E004F ( bas.asm):04080 LBCD7 LDX #FP0EXP POINT X TO FPA0 BCDA C1F8 ( bas.asm):04081 CMPB #-8 EXPONENT DIFFERENCE < -8? BCDC 2E06 ( bas.asm):04082 BGT LBCE4 YES BCDE BDBAAE ( bas.asm):04083 JSR >LBAAE SHIFT FPA0 RIGHT UNTIL FPA0 EXPONENT = $A0 BCE1 0F5B ( bas.asm):04084 CLR FPCARY CLEAR CARRY IN BYTE BCE3 39 ( bas.asm):04085 RTS BCE4 0F5B ( bas.asm):04086 LBCE4 CLR FPCARY CLEAR CARRY IN BYTE BCE6 9654 ( bas.asm):04087 LDA FP0SGN * GET SIGN OF FPA0 MANTISSA BCE8 49 ( bas.asm):04088 ROLA * ROTATE IT INTO THE CARRY FLAG BCE9 0650 ( bas.asm):04089 ROR FPA0 ROTATE CARRY (MANTISSA SIGN) INTO BIT 7 ( bas.asm):04090 * OF LS BYTE OF MANTISSA BCEB 7EBABA ( bas.asm):04091 JMP >LBABA DE-NORMALIZE FPA0 ( bas.asm):04092 * INT ( bas.asm):04093 * THE INT STATEMENT WILL "DENORMALIZE" FPA0 - THAT IS IT WILL SHIFT THE BINARY POINT ( bas.asm):04094 * TO THE EXTREME RIGHT OF THE MANTISSA TO FORCE ITS EXPONENT TO BE $AO. ONCE ( bas.asm):04095 * THIS IS DONE THE MANTISSA OF FPA0 WILL CONTAIN THE FOUR LEAST SIGNIFICANT ( bas.asm):04096 * BYTES OF THE INTEGER PORTION OF FPA0. AT THE CONCLUSION OF THE DE-NORMALIZATION ( bas.asm):04097 * ONLY THE INTEGER PORTION OF FPA0 WILL REMAIN. ( bas.asm):04098 * BCEE D64F ( bas.asm):04099 INT LDB FP0EXP GET EXPONENT OF FPA0 BCF0 C1A0 ( bas.asm):04100 CMPB #$A0 LARGEST POSSIBLE INTEGER EXPONENT BCF2 241D ( bas.asm):04101 BCC LBD11 RETURN IF FPA0 >= 32768 BCF4 8DD2 ( bas.asm):04102 BSR LBCC8 SHIFT THE BINARY POINT ONE TO THE RIGHT OF THE ( bas.asm):04103 * LS BYTE OF THE FPA0 MANTISSA BCF6 D763 ( bas.asm):04104 STB FPSBYT ACCB = 0: ZERO OUT THE SUB BYTE BCF8 9654 ( bas.asm):04105 LDA FP0SGN GET MANTISSA SIGN BCFA D754 ( bas.asm):04106 STB FP0SGN FORCE MANTISSA SIGN TO BE POSITIVE BCFC 8080 ( bas.asm):04107 SUBA #$80 SET CARRY IF MANTISSA BCFE 86A0 ( bas.asm):04108 LDA #$A0 * GET DENORMALIZED EXPONENT AND BD00 974F ( bas.asm):04109 STA FP0EXP * SAVE IT IN FPA0 EXPONENT BD02 9653 ( bas.asm):04110 LDA FPA0+3 = GET LS BYTE OF FPA0 AND BD04 9701 ( bas.asm):04111 STA CHARAC = SAVE IT IN CHARAC BD06 7EBA18 ( bas.asm):04112 JMP >LBA18 NORMALIZE FPA0 BD09 D750 ( bas.asm):04113 LBD09 STB FPA0 * LOAD MANTISSA OF FPA0 WITH CONTENTS OF ACCB BD0B D751 ( bas.asm):04114 STB FPA0+1 * BD0D D752 ( bas.asm):04115 STB FPA0+2 * BD0F D753 ( bas.asm):04116 STB FPA0+3 * BD11 39 ( bas.asm):04117 LBD11 RTS * ( bas.asm):04118 * CONVERT ASCII STRING TO FLOATING POINT BD12 9E8A ( bas.asm):04119 LBD12 LDX ZERO (X) = 0 BD14 9F54 ( bas.asm):04120 STX FP0SGN * ZERO OUT FPA0 & THE SIGN FLAG (COEFCT) BD16 9F4F ( bas.asm):04121 STX FP0EXP * BD18 9F51 ( bas.asm):04122 STX FPA0+1 * BD1A 9F52 ( bas.asm):04123 STX FPA0+2 * BD1C 9F47 ( bas.asm):04124 STX V47 INITIALIZE EXPONENT & EXPONENT SIGN FLAG TO ZERO BD1E 9F45 ( bas.asm):04125 STX V45 INITIALIZE RIGHT DECIMAL CTR & DECIMAL PT FLAG TO 0 BD20 2564 ( bas.asm):04126 BCS LBD86 IF CARRY SET (NUMERIC CHARACTER), ASSUME ACCA CONTAINS FIRST ( bas.asm):04127 * NUMERIC CHAR, SIGN IS POSITIVE AND SKIP THE RAM HOOK BD22 BD0197 ( bas.asm):04128 JSR >RVEC19 HOOK INTO RAM BD25 812D ( bas.asm):04129 CMPA #'- * CHECK FOR A LEADING MINUS SIGN AND BRANCH BD27 2604 ( bas.asm):04130 BNE LBD2D * IF NO MINUS SIGN BD29 0355 ( bas.asm):04131 COM COEFCT TOGGLE SIGN; 0 = +; FF = - BD2B 2004 ( bas.asm):04132 BRA LBD31 INTERPRET THE REST OF THE STRING BD2D 812B ( bas.asm):04133 LBD2D CMPA #'+ * CHECK FOR LEADING PLUS SlGN AND BRANCH BD2F 2604 ( bas.asm):04134 BNE LBD35 * IF NOT A PLUS SIGN BD31 9D9F ( bas.asm):04135 LBD31 JSR GETNCH GET NEXT INPUT CHARACTER FROM BASIC BD33 2551 ( bas.asm):04136 BCS LBD86 BRANCH IF NUMERIC CHARACTER BD35 812E ( bas.asm):04137 LBD35 CMPA #'. DECIMAL POlNT? BD37 2728 ( bas.asm):04138 BEQ LBD61 YES BD39 8145 ( bas.asm):04139 CMPA #'E "E" SHORTHAND FORM (SCIENTIFIC NOTATION)? BD3B 2628 ( bas.asm):04140 BNE LBD65 NO ( bas.asm):04141 * EVALUATE EXPONENT OF EXPONENTIAL FORMAT BD3D 9D9F ( bas.asm):04142 JSR GETNCH GET NEXT INPUT CHARACTER FROM BASIC BD3F 2564 ( bas.asm):04143 BCS LBDA5 BRANCH IF NUMERIC BD41 81AC ( bas.asm):04144 CMPA #$AC MINUS TOKEN? BD43 270E ( bas.asm):04145 BEQ LBD53 YES BD45 812D ( bas.asm):04146 CMPA #'- ASCII MINUS? BD47 270A ( bas.asm):04147 BEQ LBD53 YES BD49 81AB ( bas.asm):04148 CMPA #$AB PLUS TOKEN? BD4B 2708 ( bas.asm):04149 BEQ LBD55 YES BD4D 812B ( bas.asm):04150 CMPA #'+ ASCII PLUS? BD4F 2704 ( bas.asm):04151 BEQ LBD55 YES BD51 2006 ( bas.asm):04152 BRA LBD59 BRANCH IF NO SIGN FOUND BD53 0348 ( bas.asm):04153 LBD53 COM V48 SET EXPONENT SIGN FLAG TO NEGATIVE ( bas.asm):04154 * STRIP A DECIMAL NUMBER FROM BASIC LINE, CONVERT IT TO BINARY IN V47 BD55 9D9F ( bas.asm):04155 LBD55 JSR GETNCH GET NEXT INPUT CHARACTER FROM BASIC BD57 254C ( bas.asm):04156 BCS LBDA5 IF NUMERIC CHARACTER, CONVERT TO BINARY BD59 0D48 ( bas.asm):04157 LBD59 TST V48 * CHECK EXPONENT SIGN FLAG BD5B 2708 ( bas.asm):04158 BEQ LBD65 * AND BRANCH IF POSITIVE BD5D 0047 ( bas.asm):04159 NEG V47 NEGATE VALUE OF EXPONENT BD5F 2004 ( bas.asm):04160 BRA LBD65 BD61 0346 ( bas.asm):04161 LBD61 COM V46 *TOGGLE DECIMAL PT FLAG AND INTERPRET ANOTHER BD63 26CC ( bas.asm):04162 BNE LBD31 *CHARACTER IF <> 0 - TERMINATE INTERPRETATION ( bas.asm):04163 * IF SECOND DECIMAL POINT ( bas.asm):04164 * ADJUST FPA0 FOR THE DECIMAL EXPONENT IN V47 BD65 9647 ( bas.asm):04165 LBD65 LDA V47 * GET EXPONENT, SUBTRACT THE NUMBER OF BD67 9045 ( bas.asm):04166 SUBA V45 * PLACES TO THE RIGHT OF DECIMAL POINT BD69 9747 ( bas.asm):04167 STA V47 * AND RESAVE IT. BD6B 2712 ( bas.asm):04168 BEQ LBD7F EXIT ROUTINE IF ADJUSTED EXPONENT = ZERO BD6D 2A09 ( bas.asm):04169 BPL LBD78 BRANCH IF POSITIVE EXPONENT BD6F BDBB82 ( bas.asm):04170 LBD6F JSR >LBB82 DIVIDE FPA0 BY 10 BD72 0C47 ( bas.asm):04171 INC V47 INCREMENT EXPONENT COUNTER (MULTIPLY BY 10) BD74 26F9 ( bas.asm):04172 BNE LBD6F KEEP MULTIPLYING BD76 2007 ( bas.asm):04173 BRA LBD7F EXIT ROUTINE BD78 BDBB6A ( bas.asm):04174 LBD78 JSR >LBB6A MULTIPLY FPA0 BY 10 BD7B 0A47 ( bas.asm):04175 DEC V47 DECREMENT EXPONENT COUNTER (DIVIDE BY 10) BD7D 26F9 ( bas.asm):04176 BNE LBD78 KEEP MULTIPLYING BD7F 9655 ( bas.asm):04177 LBD7F LDA COEFCT GET THE SIGN FLAG BD81 2A8E ( bas.asm):04178 BPL LBD11 RETURN IF POSITIVE BD83 7EBEE9 ( bas.asm):04179 JMP >LBEE9 TOGGLE MANTISSA SIGN OF FPA0, IF NEGATIVE ( bas.asm):04180 *MULTIPLY FPA0 BY TEN AND ADD ACCA TO THE RESULT BD86 D645 ( bas.asm):04181 LBD86 LDB V45 *GET THE RIGHT DECIMAL COUNTER AND SUBTRACT BD88 D046 ( bas.asm):04182 SUBB V46 *THE DECIMAL POINT FLAG FROM IT. IF DECIMAL POINT BD8A D745 ( bas.asm):04183 STB V45 *FLAG=0, NOTHING HAPPENS. IF DECIMAL POINT FLAG IS ( bas.asm):04184 * -1, THEN RIGHT DECIMAL COUNTER IS INCREMENTED BY ONE BD8C 3402 ( bas.asm):04185 PSHS A SAVE NEW DIGIT ON STACK BD8E BDBB6A ( bas.asm):04186 JSR >LBB6A MULTIPLY FPA0 BY 10 BD91 3504 ( bas.asm):04187 PULS B GET NEW DIGIT BACK BD93 C030 ( bas.asm):04188 SUBB #'0 MASK OFF ASCII BD95 8D02 ( bas.asm):04189 BSR LBD99 ADD ACCB TO FPA0 BD97 2098 ( bas.asm):04190 BRA LBD31 GET ANOTHER CHARACTER FROM BASIC BD99 BDBC2F ( bas.asm):04191 LBD99 JSR >LBC2F PACK FPA0 AND SAVE IT IN FPA3 BD9C BDBC7C ( bas.asm):04192 JSR >LBC7C CONVERT ACCB TO FP NUMBER IN FPA0 BD9F 8E0040 ( bas.asm):04193 LDX #V40 * ADD FPA0 TO BDA2 7EB9C2 ( bas.asm):04194 JMP >LB9C2 * FPA3 ( bas.asm):04195 * MULTIPLY V47 BY 10 AND ADD TO ASCII NUMBER IN ( bas.asm):04196 * ACCA - SAVE BINARY RESULT IN V47 BDA5 D647 ( bas.asm):04197 LBDA5 LDB V47 BDA7 58 ( bas.asm):04198 ASLB TIMES 2 BDA8 58 ( bas.asm):04199 ASLB TIMES 4 BDA9 DB47 ( bas.asm):04200 ADDB V47 ADD 1 = TIMES 5 BDAB 58 ( bas.asm):04201 ASLB TIMES 10 BDAC 8030 ( bas.asm):04202 SUBA #'0 *MASK OFF ASCII FROM ACCA, PUSH BDAE 3404 ( bas.asm):04203 PSHS B *RESULT ONTO THE STACK AND BDB0 ABE0 ( bas.asm):04204 ADDA ,S+ ADD lT TO ACCB BDB2 9747 ( bas.asm):04205 STA V47 SAVE IN V47 BDB4 209F ( bas.asm):04206 BRA LBD55 INTERPRET ANOTHER CHARACTER ( bas.asm):04207 * BDB6 9B3EBC1FFD ( bas.asm):04208 LBDB6 FCB $9B,$3E,$BC,$1F,$FD * 99999999.9 BDBB 9E6E6B27FD ( bas.asm):04209 LBDBB FCB $9E,$6E,$6B,$27,$FD * 999999999 BDC0 9E6E6B2800 ( bas.asm):04210 LBDC0 FCB $9E,$6E,$6B,$28,$00 * 1E + 09 ( bas.asm):04211 * BDC5 8EABE7 ( bas.asm):04212 LBDC5 LDX #LABE8-1 POINT X TO " IN " MESSAGE BDC8 8D0C ( bas.asm):04213 BSR LBDD6 COPY A STRING FROM (X) TO CONSOLE OUT BDCA DC68 ( bas.asm):04214 LDD CURLIN GET CURRENT BASIC LINE NUMBER TO ACCD ( bas.asm):04215 * CONVERT VALUE IN ACCD INTO A DECIMAL NUMBER ( bas.asm):04216 * AND PRINT IT TO CONSOLE OUT BDCC DD50 ( bas.asm):04217 LBDCC STD FPA0 SAVE ACCD IN TOP HALF OF FPA0 BDCE C690 ( bas.asm):04218 LDB #$90 REQ’D EXPONENT IF TOP HALF OF ACCD = INTEGER BDD0 43 ( bas.asm):04219 COMA SET CARRY FLAG - FORCE POSITIVE MANTISSA BDD1 BDBC86 ( bas.asm):04220 JSR >LBC86 ZERO BOTTOM HALF AND SIGN OF FPA0, THEN ( bas.asm):04221 * SAVE EXPONENT AND NORMALIZE IT BDD4 8D03 ( bas.asm):04222 BSR LBDD9 CONVERT FP NUMBER TO ASCII STRING BDD6 7EB99C ( bas.asm):04223 LBDD6 JMP >LB99C COPY A STRING FROM (X) TO CONSOLE OUT ( bas.asm):04224 * CONVERT FP NUMBER TO ASCII STRING BDD9 CE03DA ( bas.asm):04225 LBDD9 LDU #STRBUF+3 POINT U TO BUFFER WHICH WILL NOT CAUSE ( bas.asm):04226 * THE STRING TO BE STORED IN STRING SPACE BDDC 8620 ( bas.asm):04227 LBDDC LDA #SPACE SPACE = DEFAULT SIGN FOR POSITIVE # BDDE D654 ( bas.asm):04228 LDB FP0SGN GET SIGN OF FPA0 BDE0 2A02 ( bas.asm):04229 BPL LBDE4 BRANCH IF POSITIVE BDE2 862D ( bas.asm):04230 LDA #'- ASCII MINUS SIGN BDE4 A7C0 ( bas.asm):04231 LBDE4 STA ,U+ STORE SIGN OF NUMBER BDE6 DF64 ( bas.asm):04232 STU COEFPT SAVE BUFFER POINTER BDE8 9754 ( bas.asm):04233 STA FP0SGN SAVE SIGN (IN ASCII) BDEA 8630 ( bas.asm):04234 LDA #'0 ASCII ZERO IF EXPONENT = 0 BDEC D64F ( bas.asm):04235 LDB FP0EXP GET FPA0 EXPONENT BDEE 102700C6 ( bas.asm):04236 LBEQ LBEB8 BRANCH IF FPA0 = 0 BDF2 4F ( bas.asm):04237 CLRA BASE 10 EXPONENT=0 FOR FP NUMBER > 1 BDF3 C180 ( bas.asm):04238 CMPB #$80 CHECK EXPONENT BDF5 2208 ( bas.asm):04239 BHI LBDFF BRANCH IF FP NUMBER > 1 ( bas.asm):04240 * IF FPA0 < 1.0, MULTIPLY IT BY 1E+09 TO SPEED UP THE CONVERSION PROCESS BDF7 8EBDC0 ( bas.asm):04241 LDX #LBDC0 POINT X TO FP 1E+09 BDFA BDBACA ( bas.asm):04242 JSR >LBACA MULTIPLY FPA0 BY (X) BDFD 86F7 ( bas.asm):04243 LDA #-9 BASE 10 EXPONENT = -9 BDFF 9745 ( bas.asm):04244 LBDFF STA V45 BASE 10 EXPONENT ( bas.asm):04245 * PSEUDO - NORMALIZE THE FP NUMBER TO A VALUE IN THE RANGE ( bas.asm):04246 * OF 999,999,999 RO 99,999,999.9 - THIS IS THE LARGEST ( bas.asm):04247 * NUMBER RANGE IN WHICH ALL OF THE DIGITS ARE ( bas.asm):04248 * SIGNIFICANT WHICH CAN BE DISPLAYED WITHOUT USING ( bas.asm):04249 * SCIENTIFIC NOTATION BE01 8EBDBB ( bas.asm):04250 LBE01 LDX #LBDBB POINT X TO FP 999,999,999 BE04 BDBCA0 ( bas.asm):04251 JSR >LBCA0 COMPARE FPA0 TO 999,999,999 BE07 2E0F ( bas.asm):04252 BGT LBE18 BRANCH IF > 999,999,999 BE09 8EBDB6 ( bas.asm):04253 LBE09 LDX #LBDB6 POINT X TO FP 99,999,999.9 BE0C BDBCA0 ( bas.asm):04254 JSR >LBCA0 COMPARE FPA0 TO 99,999,999.9 BE0F 2E0E ( bas.asm):04255 BGT LBE1F BRANCH IF > 99,999,999.9 (IN RANGE) BE11 BDBB6A ( bas.asm):04256 JSR >LBB6A MULTIPLY FPA0 BY 10 BE14 0A45 ( bas.asm):04257 DEC V45 SUBTRACT ONE FROM DECIMAL OFFSET BE16 20F1 ( bas.asm):04258 BRA LBE09 PSEUDO - NORMALIZE SOME MORE BE18 BDBB82 ( bas.asm):04259 LBE18 JSR >LBB82 DIVIDE FPA0 BY 10 BE1B 0C45 ( bas.asm):04260 INC V45 ADD ONE TO BASE 10 EXPONENT BE1D 20E2 ( bas.asm):04261 BRA LBE01 PSEUDO - NORMALIZE SOME MORE BE1F BDB9B4 ( bas.asm):04262 LBE1F JSR >LB9B4 ADD .5 TO FPA0 (ROUND OFF) BE22 BDBCC8 ( bas.asm):04263 JSR >LBCC8 CONVERT FPA0 TO AN INTEGER BE25 C601 ( bas.asm):04264 LDB #1 DEFAULT DECIMAL POINT FLAG (FORCE IMMED DECIMAL PT) BE27 9645 ( bas.asm):04265 LDA V45 * GET BASE 10 EXPONENT AND ADD TEN TO IT BE29 8B0A ( bas.asm):04266 ADDA #9+1 * (NUMBER ‘NORMALIZED’ TO 9 PLACES & DECIMAL PT) BE2B 2B09 ( bas.asm):04267 BMI LBE36 BRANCH IF NUMBER < 1.0 BE2D 810B ( bas.asm):04268 CMPA #9+2 NINE PLACES MAY BE DISPLAYED WITHOUT ( bas.asm):04269 * USING SCIENTIFIC NOTATION BE2F 2405 ( bas.asm):04270 BCC LBE36 BRANCH IF SCIENTIFIC NOTATION REQUIRED BE31 4A ( bas.asm):04271 DECA * SUBTRACT 1 FROM MODIFIED BASE 10 EXPONENT CTR BE32 1F89 ( bas.asm):04272 TFR A,B * AND SAVE IT IN ACCB (DECiMAL POINT FLAG) BE34 8602 ( bas.asm):04273 LDA #2 FORCE EXPONENT = 0 - DON'T USE SCIENTIFIC NOTATION BE36 4A ( bas.asm):04274 LBE36 DECA * SUBTRACT TWO (WITHOUT AFFECTING CARRY) BE37 4A ( bas.asm):04275 DECA * FROM BASE 10 EXPONENT BE38 9747 ( bas.asm):04276 STA V47 SAVE EXPONENT - ZERO EXPONENT = DO NOT DISPLAY ( bas.asm):04277 * IN SCIENTIFIC NOTATION BE3A D745 ( bas.asm):04278 STB V45 DECIMAL POINT FLAG - NUMBER OF PLACES TO ( bas.asm):04279 * LEFT OF DECIMAL POINT BE3C 2E0D ( bas.asm):04280 BGT LBE4B BRANCH IF >= 1 BE3E DE64 ( bas.asm):04281 LDU COEFPT POINT U TO THE STRING BUFFER BE40 862E ( bas.asm):04282 LDA #'. * STORE A PERIOD BE42 A7C0 ( bas.asm):04283 STA ,U+ * IN THE BUFFER BE44 5D ( bas.asm):04284 TSTB CHECK DECIMAL POINT FLAG BE45 2704 ( bas.asm):04285 BEQ LBE4B BRANCH IF NOTHING TO LEFT OF DECIMAL POINT BE47 8630 ( bas.asm):04286 LDA #'0 * STORE A ZERO BE49 A7C0 ( bas.asm):04287 STA ,U+ * IN THE BUFFER ( bas.asm):04288 * CONVERT FPA0 INTO A STRING OF ASCII DIGITS BE4B 8EBEC5 ( bas.asm):04289 LBE4B LDX #LBEC5 POINT X TO FP POWER OF 10 MANTISSA BE4E C680 ( bas.asm):04290 LDB #0+$80 INITIALIZE DIGIT COUNTER TO 0+$80 ( bas.asm):04291 * BIT 7 SET IS USED TO INDICATE THAT THE POWER OF 10 MANTISSA ( bas.asm):04292 * IS NEGATIVE. WHEN YOU 'ADD' A NEGATIVE MANTISSA, IT IS ( bas.asm):04293 * THE SAME AS SUBTRACTING A POSITIVE ONE AND BIT 7 OF ACCB IS HOW ( bas.asm):04294 * THE ROUTINE KNOWS THAT A 'SUBTRACTION' IS OCCURING. BE50 9653 ( bas.asm):04295 LBE50 LDA FPA0+3 * ADD MANTISSA LS BE52 AB03 ( bas.asm):04296 ADDA 3,X * BYTE OF FPA0 BE54 9753 ( bas.asm):04297 STA FPA0+3 * AND (X) BE56 9652 ( bas.asm):04298 LDA FPA0+2 = ADD MANTISSA BE58 A902 ( bas.asm):04299 ADCA 2,X = NUMBER 3 BYTE OF BE5A 9752 ( bas.asm):04300 STA FPA0+2 = FPA0 AND (X) BE5C 9651 ( bas.asm):04301 LDA FPA0+1 * ADD MANTISSA BE5E A901 ( bas.asm):04302 ADCA 1,X * NUMBER 2 BYTE OF BE60 9751 ( bas.asm):04303 STA FPA0+1 * FPA0 AND (X) BE62 9650 ( bas.asm):04304 LDA FPA0 = ADD MANTISSA BE64 A984 ( bas.asm):04305 ADCA ,X = MS BYTE OF BE66 9750 ( bas.asm):04306 STA FPA0 = FPA0 AND (X) BE68 5C ( bas.asm):04307 INCB ADD ONE TO DIGIT COUNTER BE69 56 ( bas.asm):04308 RORB ROTATE CARRY INTO BIT 7 BE6A 59 ( bas.asm):04309 ROLB *SET OVERFLOW FLAG AND BRANCH IF CARRY = 1 AND BE6B 28E3 ( bas.asm):04310 BVC LBE50 *POSITIVE MANTISSA OR CARRY = 0 AND NEG MANTISSA BE6D 2403 ( bas.asm):04311 BCC LBE72 BRANCH IF NEGATIVE MANTISSA BE6F C00B ( bas.asm):04312 SUBB #10+1 * TAKE THE 9’S COMPLEMENT IF BE71 50 ( bas.asm):04313 NEGB * ADDING MANTISSA BE72 CB2F ( bas.asm):04314 LBE72 ADDB #'0-1 ADD ASCII OFFSET TO DIGIT BE74 3004 ( bas.asm):04315 LEAX 4,X MOVE TO NEXT POWER OF 10 MANTISSA BE76 1F98 ( bas.asm):04316 TFR B,A SAVE DIGIT IN ACCA BE78 847F ( bas.asm):04317 ANDA #$7F MASK OFF BIT 7 (ADD/SUBTRACT FLAG) BE7A A7C0 ( bas.asm):04318 STA ,U+ STORE DIGIT IN STRING BUFFER BE7C 0A45 ( bas.asm):04319 DEC V45 DECREMENT DECIMAL POINT FLAG BE7E 2604 ( bas.asm):04320 BNE LBE84 BRANCH IF NOT TIME FOR DECIMAL POINT BE80 862E ( bas.asm):04321 LDA #'. * STORE DECIMAL POINT IN BE82 A7C0 ( bas.asm):04322 STA ,U+ * STRING BUFFER BE84 53 ( bas.asm):04323 LBE84 COMB TOGGLE BIT 7 (ADD/SUBTRACT FLAG) BE85 C480 ( bas.asm):04324 ANDB #$80 MASK OFF ALL BUT ADD/SUBTRACT FLAG BE87 8CBEE9 ( bas.asm):04325 CMPX #LBEC5+9*4 COMPARE X TO END OF MANTISSA TABLE BE8A 26C4 ( bas.asm):04326 BNE LBE50 BRANCH IF NOT AT END OF TABLE ( bas.asm):04327 * BLANK TRAILING ZEROS AND STORE EXPONENT IF ANY BE8C A6C2 ( bas.asm):04328 LBE8C LDA ,-U GET THE LAST CHARACTER; MOVE POINTER BACK BE8E 8130 ( bas.asm):04329 CMPA #'0 WAS IT A ZERO? BE90 27FA ( bas.asm):04330 BEQ LBE8C IGNORE TRAILING ZEROS IF SO BE92 812E ( bas.asm):04331 CMPA #'. CHECK FOR DECIMAL POINT BE94 2602 ( bas.asm):04332 BNE LBE98 BRANCH IF NOT DECIMAL POINT BE96 335F ( bas.asm):04333 LEAU -1,U STEP OVER THE DECIMAL POINT BE98 862B ( bas.asm):04334 LBE98 LDA #'+ ASCII PLUS SIGN BE9A D647 ( bas.asm):04335 LDB V47 GET SCIENTIFIC NOTATION EXPONENT BE9C 271C ( bas.asm):04336 BEQ LBEBA BRANCH IF NOT SCIENTIFIC NOTATION BE9E 2A03 ( bas.asm):04337 BPL LBEA3 BRANCH IF POSITIVE EXPONENT BEA0 862D ( bas.asm):04338 LDA #'- ASCII MINUS SIGN BEA2 50 ( bas.asm):04339 NEGB NEGATE EXPONENT IF NEGATIVE BEA3 A742 ( bas.asm):04340 LBEA3 STA 2,U STORE EXPONENT SIGN IN STRING BEA5 8645 ( bas.asm):04341 LDA #'E * GET ASCII ‘E’ (SCIENTIFIC NOTATION BEA7 A741 ( bas.asm):04342 STA 1,U * FLAG) AND SAVE IT IN THE STRING BEA9 862F ( bas.asm):04343 LDA #'0-1 INITIALIZE ACCA TO ASCII ZERO ( bas.asm):04344 * CONVERT BINARY VALUE IN ACCB TO DECIMAL ( bas.asm):04345 * ASCII NUMBER (< 100) IN ACCD BEAB 4C ( bas.asm):04346 LBEAB INCA ADD ONE TO 10’S DIGIT OF EXPONENT BEAC C00A ( bas.asm):04347 SUBB #10 SUBTRACT 10 FROM ACCB BEAE 24FB ( bas.asm):04348 BCC LBEAB ADD 1 TO 10’S DIGIT IF NO CARRY BEB0 CB3A ( bas.asm):04349 ADDB #'9+1 CONVERT UNITS DIGIT TO ASCII BEB2 ED43 ( bas.asm):04350 STD 3,U SAVE EXPONENT IN STRING BEB4 6F45 ( bas.asm):04351 CLR 5,U CLEAR LAST BYTE (TERMINATOR) BEB6 2004 ( bas.asm):04352 BRA LBEBC GO RESET POINTER BEB8 A7C4 ( bas.asm):04353 LBEB8 STA ,U STORE LAST CHARACTER BEBA 6F41 ( bas.asm):04354 LBEBA CLR 1,U CLEAR LAST BYTE (TERMINATOR - REQUIRED BY ( bas.asm):04355 * PRINT SUBROUTINES) BEBC 8E03DA ( bas.asm):04356 LBEBC LDX #STRBUF+3 RESET POINTER TO START OF BUFFER BEBF 39 ( bas.asm):04357 RTS ( bas.asm):04358 * BEC0 8000000000 ( bas.asm):04359 LBEC0 FCB $80,$00,$00,$00,$00 FLOATING POINT .5 ( bas.asm):04360 * ( bas.asm):04361 *** TABLE OF UNNORMALIZED POWERS OF 10 BEC5 FA0A1F00 ( bas.asm):04362 LBEC5 FCB $FA,$0A,$1F,$00 -100000000 BEC9 00989680 ( bas.asm):04363 LBEC9 FCB $00,$98,$96,$80 10000000 BECD FFF0BDC0 ( bas.asm):04364 LBECD FCB $FF,$F0,$BD,$C0 -1000000 BED1 000186A0 ( bas.asm):04365 LBED1 FCB $00,$01,$86,$A0 100000 BED5 FFFFD8F0 ( bas.asm):04366 LBED5 FCB $FF,$FF,$D8,$F0 -10000 BED9 000003E8 ( bas.asm):04367 LBED9 FCB $00,$00,$03,$E8 1000 BEDD FFFFFF9C ( bas.asm):04368 LBEDD FCB $FF,$FF,$FF,$9C -100 BEE1 0000000A ( bas.asm):04369 LBEE1 FCB $00,$00,$00,$0A 10 BEE5 FFFFFFFF ( bas.asm):04370 LBEE5 FCB $FF,$FF,$FF,$FF -1 ( bas.asm):04371 * ( bas.asm):04372 * BEE9 964F ( bas.asm):04373 LBEE9 LDA FP0EXP GET EXPONENT OF FPA0 BEEB 2702 ( bas.asm):04374 BEQ LBEEF BRANCH IF FPA0 = 0 BEED 0354 ( bas.asm):04375 COM FP0SGN TOGGLE MANTISSA SIGN OF FPA0 BEEF 39 ( bas.asm):04376 LBEEF RTS ( bas.asm):04377 * EXPAND A POLYNOMIAL OF THE FORM ( bas.asm):04378 * AQ+BQ**3+CQ**5+DQ**7.... WHERE Q = FPA0 ( bas.asm):04379 * AND THE X REGISTER POINTS TO A TABLE OF ( bas.asm):04380 * COEFFICIENTS A,B,C,D.... BEF0 9F64 ( bas.asm):04381 LBEF0 STX COEFPT SAVE COEFFICIENT TABLE POINTER BEF2 BDBC2F ( bas.asm):04382 JSR >LBC2F MOVE FPA0 TO FPA3 BEF5 8D05 ( bas.asm):04383 BSR LBEFC MULTIPLY FPA3 BY FPA0 BEF7 8D08 ( bas.asm):04384 BSR LBF01 EXPAND POLYNOMIAL BEF9 8E0040 ( bas.asm):04385 LDX #V40 POINT X TO FPA3 BEFC 7EBACA ( bas.asm):04386 LBEFC JMP >LBACA MULTIPLY (X) BY FPA0 ( bas.asm):04387 * CALCULATE THE VALUE OF AN EXPANDED POLYNOMIAL ( bas.asm):04388 * EXPRESSION. ENTER WITH (X) POINTING TO A TABLE ( bas.asm):04389 * OF COEFFICIENTS, THE FIRST BYTE OF WHICH IS THE ( bas.asm):04390 * NUMBER OF (COEFFICIENTS-1) FOLLOWED BY THAT NUMBER ( bas.asm):04391 * OF PACKED FLOATING POINT NUMBERS. THE ( bas.asm):04392 * POLYNOMIAL IS EVALUATED AS FOLLOWS: VALUE = ( bas.asm):04393 * (((FPA0*Y0+Y1)*FPA0+Y2)*FPA0…YN) BEFF 9F64 ( bas.asm):04394 LBEFF STX COEFPT SAVE COEFFICIENT TABLE POINTER BF01 BDBC2A ( bas.asm):04395 LBF01 JSR >LBC2A MOVE FPA0 TO FPA4 BF04 9E64 ( bas.asm):04396 LDX COEFPT GET THE COEFFICIENT POINTER BF06 E680 ( bas.asm):04397 LDB ,X+ GET THE TOP OF COEFFICIENT TABLE TO BF08 D755 ( bas.asm):04398 STB COEFCT * USE AND STORE IT IN TEMPORARY COUNTER BF0A 9F64 ( bas.asm):04399 STX COEFPT SAVE NEW COEFFICIENT POINTER BF0C 8DEE ( bas.asm):04400 LBF0C BSR LBEFC MULTIPLY (X) BY FPA0 BF0E 9E64 ( bas.asm):04401 LDX COEFPT *GET COEFFICIENT POINTER BF10 3005 ( bas.asm):04402 LEAX 5,X *MOVE TO NEXT FP NUMBER BF12 9F64 ( bas.asm):04403 STX COEFPT *SAVE NEW COEFFICIENT POINTER BF14 BDB9C2 ( bas.asm):04404 JSR >LB9C2 ADD (X) AND FPA0 BF17 8E0045 ( bas.asm):04405 LDX #V45 POINT (X) TO FPA4 BF1A 0A55 ( bas.asm):04406 DEC COEFCT DECREMENT TEMP COUNTER BF1C 26EE ( bas.asm):04407 BNE LBF0C BRANCH IF MORE COEFFICIENTS LEFT BF1E 39 ( bas.asm):04408 RTS ( bas.asm):04409 * RND BF1F BDBC6D ( bas.asm):04410 RND JSR >LBC6D TEST FPA0 BF22 2B21 ( bas.asm):04411 BMI LBF45 BRANCH IF FPA0 = NEGATIVE BF24 2715 ( bas.asm):04412 BEQ LBF3B BRANCH IF FPA0 = 0 BF26 8D10 ( bas.asm):04413 BSR LBF38 CONVERT FPA0 TO AN INTEGER BF28 BDBC2F ( bas.asm):04414 JSR >LBC2F PACK FPA0 TO FPA3 BF2B 8D0E ( bas.asm):04415 BSR LBF3B GET A RANDOM NUMBER: FPA0 < 1.0 BF2D 8E0040 ( bas.asm):04416 LDX #V40 POINT (X) TO FPA3 BF30 8DCA ( bas.asm):04417 BSR LBEFC MULTIPLY (X) BY FPA0 BF32 8EBAC5 ( bas.asm):04418 LDX #LBAC5 POINT (X) TO FP VALUE OF 1.0 BF35 BDB9C2 ( bas.asm):04419 JSR >LB9C2 ADD 1.0 TO FPA0 BF38 7EBCEE ( bas.asm):04420 LBF38 JMP >INT CONVERT FPA0 TO AN INTEGER ( bas.asm):04421 * CALCULATE A RANDOM NUMBER IN THE RANGE 0.0 < X <= 1.0 BF3B BE0116 ( bas.asm):04422 LBF3B LDX RVSEED+1 * MOVE VARIABLE BF3E 9F50 ( bas.asm):04423 STX FPA0 * RANDOM NUMBER BF40 BE0118 ( bas.asm):04424 LDX RVSEED+3 * SEED TO BF43 9F52 ( bas.asm):04425 STX FPA0+2 * FPA0 BF45 BEBF74 ( bas.asm):04426 LBF45 LDX >RSEED = MOVE FIXED BF48 9F5D ( bas.asm):04427 STX FPA1 = RANDOM NUMBER BF4A BEBF76 ( bas.asm):04428 LDX >RSEED+2 = SEED TO BF4D 9F5F ( bas.asm):04429 STX FPA1+2 = MANTISSA OF FPA0 BF4F BDBAD0 ( bas.asm):04430 JSR >LBAD0 MULTIPLY FPA0 X FPA1 BF52 DCAD ( bas.asm):04431 LDD VAD GET THE TWO LOWEST ORDER PRODUCT BYTES BF54 C3658B ( bas.asm):04432 ADDD #$658B ADD A CONSTANT BF57 FD0118 ( bas.asm):04433 STD RVSEED+3 SAVE NEW LOW ORDER VARIABLE RANDOM # SEED BF5A DD52 ( bas.asm):04434 STD FPA0+2 SAVE NEW LOW ORDER BYTES OF FPA0 MANTISSA BF5C DCAB ( bas.asm):04435 LDD VAB GET 2 MORE LOW ORDER PRODUCT BYTES BF5E C9B0 ( bas.asm):04436 ADCB #$B0 ADD A CONSTANT BF60 8905 ( bas.asm):04437 ADCA #5 ADD A CONSTANT BF62 FD0116 ( bas.asm):04438 STD RVSEED+1 SAVE NEW HIGH ORDER VARIABLE RANDOM # SEED BF65 DD50 ( bas.asm):04439 STD FPA0 SAVE NEW HIGH ORDER FPA0 MANTISSA BF67 0F54 ( bas.asm):04440 CLR FP0SGN FORCE FPA0 MANTISSA = POSITIVE BF69 8680 ( bas.asm):04441 LDA #$80 * SET FPA0 BIASED EXPONENT BF6B 974F ( bas.asm):04442 STA FP0EXP * TO 0 1 < FPA0 < 0 BF6D 9615 ( bas.asm):04443 LDA FPA2+2 GET A BYTE FROM FPA2 (MORE RANDOMNESS) BF6F 9763 ( bas.asm):04444 STA FPSBYT SAVE AS SUB BYTE BF71 7EBA1C ( bas.asm):04445 JMP >LBA1C NORMALIZE FPA0 ( bas.asm):04446 * BF74 40E6 ( bas.asm):04447 RSEED FDB $40E6 *CONSTANT RANDOM NUMBER GENERATOR SEED BF76 4DAB ( bas.asm):04448 FDB $4DAB * ( bas.asm):04449 * SIN ( bas.asm):04450 * THE SIN FUNCTION REQUIRES AN ARGUMENT IN RADIANS AND WILL REPEAT ITSELF EVERY ( bas.asm):04451 * 2*PI RADIANS. THE ARGUMENT IS DIVIDED BY 2*PI AND ONLY THE FRACTIONAL PART IS ( bas.asm):04452 * RETAINED. SINCE THE ARGUMENT WAS DIVIDED BY 2*P1, THE COEFFICIENTS MUST BE ( bas.asm):04453 * MULTIPLIED BY THE APPROPRIATE POWER OF 2*PI. ( bas.asm):04454 * SIN IS EVALUATED USING THE TRIGONOMETRIC IDENTITIES BELOW: ( bas.asm):04455 * SIN(X)=SIN(PI-X) & -SIN(PI/2-X)=SIN((3*PI)/2+X) BF78 BDBC5F ( bas.asm):04456 SIN JSR >LBC5F COPY FPA0 TO FPA1 BF7B 8EBFBD ( bas.asm):04457 LDX #LBFBD POINT (X) TO 2*PI BF7E D661 ( bas.asm):04458 LDB FP1SGN *GET MANTISSA SIGN OF FPA1 BF80 BDBB89 ( bas.asm):04459 JSR >LBB89 *AND DIVIDE FPA0 BY 2*PI BF83 BDBC5F ( bas.asm):04460 JSR >LBC5F COPY FPA0 TO FPA1 BF86 8DB0 ( bas.asm):04461 BSR LBF38 CONVERT FPA0 TO AN INTEGER BF88 0F62 ( bas.asm):04462 CLR RESSGN SET RESULT SIGN = POSITIVE BF8A 965C ( bas.asm):04463 LDA FP1EXP *GET EXPONENT OF FPA1 BF8C D64F ( bas.asm):04464 LDB FP0EXP *GET EXPONENT OF FPA0 BF8E BDB9BC ( bas.asm):04465 JSR >LB9BC *SUBTRACT FPA0 FROM FPA1 ( bas.asm):04466 *NOW FPA0 CONTAINS ONLY THE FRACTIONAL PART OF ARGUMENT/2*PI BF91 8EBFC2 ( bas.asm):04467 LDX #LBFC2 POINT X TO FP (.25) BF94 BDB9B9 ( bas.asm):04468 JSR >LB9B9 SUBTRACT FPA0 FROM .25 (PI/2) BF97 9654 ( bas.asm):04469 LDA FP0SGN GET MANTISSA SIGN OF FPA0 BF99 3402 ( bas.asm):04470 PSHS A SAVE IT ON STACK BF9B 2A09 ( bas.asm):04471 BPL LBFA6 BRANCH IF MANTISSA POSITIVE BF9D BDB9B4 ( bas.asm):04472 JSR >LB9B4 ADD .5 (PI) TO FPA0 BFA0 9654 ( bas.asm):04473 LDA FP0SGN GET SIGN OF FPA0 BFA2 2B05 ( bas.asm):04474 BMI LBFA9 BRANCH IF NEGATIVE BFA4 030A ( bas.asm):04475 COM RELFLG COM IF +(3*PI)/2 >= ARGUMENT >+ PI/2 (QUADRANT FLAG) BFA6 BDBEE9 ( bas.asm):04476 LBFA6 JSR >LBEE9 TOGGLE MANTISSA SIGN OF FPA0 BFA9 8EBFC2 ( bas.asm):04477 LBFA9 LDX #LBFC2 POINT X TO FP (.25) BFAC BDB9C2 ( bas.asm):04478 JSR >LB9C2 ADD .25 (PI/2) TO FPA0 BFAF 3502 ( bas.asm):04479 PULS A GET OLD MANTISSA SIGN BFB1 4D ( bas.asm):04480 TSTA * BRANCH IF OLD BFB2 2A03 ( bas.asm):04481 BPL LBFB7 * SIGN WAS POSITIVE BFB4 BDBEE9 ( bas.asm):04482 JSR >LBEE9 TOGGLE MANTISSA SIGN BFB7 8EBFC7 ( bas.asm):04483 LBFB7 LDX #LBFC7 POINT X TO TABLE OF COEFFICIENTS BFBA 7EBEF0 ( bas.asm):04484 JMP >LBEF0 GO CALCULATE POLYNOMIAL VALUE BFBD 83490FDAA2 ( bas.asm):04485 LBFBD FCB $83,$49,$0F,$DA,$A2 6.28318531 (2*PI) BFC2 7F00000000 ( bas.asm):04486 LBFC2 FCB $7F,$00,$00,$00,$00 .25 ( bas.asm):04487 * MODIFIED TAYLOR SERIES SIN COEFFICIENTS BFC7 05 ( bas.asm):04488 LBFC7 FCB 6-1 SIX COEFFICIENTS BFC8 84E61A2D1B ( bas.asm):04489 LBFC8 FCB $84,$E6,$1A,$2D,$1B * -((2*PI)**11)/11! BFCD 862807FBF8 ( bas.asm):04490 LBFCD FCB $86,$28,$07,$FB,$F8 * ((2*PI)**9)/9! BFD2 8799688901 ( bas.asm):04491 LBFD2 FCB $87,$99,$68,$89,$01 * -((2*PI)**7)/7! BFD7 872335DFE1 ( bas.asm):04492 LBFD7 FCB $87,$23,$35,$DF,$E1 * ((2*PI)**5)/5! BFDC 86A55DE728 ( bas.asm):04493 LBFDC FCB $86,$A5,$5D,$E7,$28 * -((2*PI)**3)/3! BFE1 83490FDAA2 ( bas.asm):04494 LBFE1 FCB $83,$49,$0F,$DA,$A2 * 2*PI BFE6 A154468F13 ( bas.asm):04495 LBFE6 FCB $A1,$54,$46,$8F,$13 UNUSED GARBAGE BYTES BFEB 8F524389CD ( bas.asm):04496 FCB $8F,$52,$43,$89,$CD UNUSED GARBAGE BYTES ( bas.asm):04497 * INTERRUPT VECTORS BFF0 A681 ( bas.asm):04498 LBFF0 FDB LA681 RESERVED BFF2 0100 ( bas.asm):04499 LBFF2 FDB SW3VEC SWI3 BFF4 0103 ( bas.asm):04500 LBFF4 FDB SW2VEC SWI2 BFF6 010F ( bas.asm):04501 LBFF6 FDB FRQVEC FIRQ BFF8 010C ( bas.asm):04502 LBFF8 FDB IRQVEC IRQ BFFA 0106 ( bas.asm):04503 LBFFA FDB SWIVEC SWI BFFC 0109 ( bas.asm):04504 LBFFC FDB NMIVEC NMI BFFE A027 ( bas.asm):04505 LBFFE FDB RESVEC RESET BC93 ( ecb_equates.asm):00001 ABS EQU $BC93 00B5 ( ecb_equates.asm):00002 ALLCOL EQU $00B5 00E8 ( ecb_equates.asm):00003 ANGLE EQU $00E8 0008 ( ecb_equates.asm):00004 ARYDIS EQU $0008 001F ( ecb_equates.asm):00005 ARYEND EQU $001F 001D ( ecb_equates.asm):00006 ARYTAB EQU $001D B6A0 ( ecb_equates.asm):00007 ASC EQU $B6A0 83B0 ( ecb_equates.asm):00008 ATN EQU $83B0 0988 ( ecb_equates.asm):00009 ATTCTR EQU $0988 A990 ( ecb_equates.asm):00010 AUDIO EQU $A990 A074 ( ecb_equates.asm):00011 BACDST EQU $A074 00B3 ( ecb_equates.asm):00012 BAKCOL EQU $00B3 A000 ( ecb_equates.asm):00013 BASIC EQU $A000 A0E8 ( ecb_equates.asm):00014 BAWMST EQU $A0E8 00BA ( ecb_equates.asm):00015 BEGGRP EQU $00BA A0F6 ( ecb_equates.asm):00016 BFRQSV EQU $A0F6 002B ( ecb_equates.asm):00017 BINVAL EQU $002B A9B3 ( ecb_equates.asm):00018 BIRQSV EQU $A9B3 0094 ( ecb_equates.asm):00019 BLKCNT EQU $0094 A006 ( ecb_equates.asm):00020 BLKIN EQU $A006 007D ( ecb_equates.asm):00021 BLKLEN EQU $007D A008 ( ecb_equates.asm):00022 BLKOUT EQU $A008 007C ( ecb_equates.asm):00023 BLKTYP EQU $007C 0017 ( ecb_equates.asm):00024 BOTSTK EQU $0017 AA1A ( ecb_equates.asm):00025 BROMHK EQU $AA1A 0008 ( ecb_equates.asm):00026 BS EQU $0008 01DA ( ecb_equates.asm):00027 CASBUF EQU $01DA 011A ( ecb_equates.asm):00028 CASFLG EQU $011A A77C ( ecb_equates.asm):00029 CASON EQU $A77C 0084 ( ecb_equates.asm):00030 CBTPHA EQU $0084 007E ( ecb_equates.asm):00031 CBUFAD EQU $007E 0080 ( ecb_equates.asm):00032 CCKSUM EQU $0080 01D1 ( ecb_equates.asm):00033 CFNBUF EQU $01D1 0001 ( ecb_equates.asm):00034 CHARAC EQU $0001 00A6 ( ecb_equates.asm):00035 CHARAD EQU $00A6 00DB ( ecb_equates.asm):00036 CHGFLG EQU $00DB B68C ( ecb_equates.asm):00037 CHR EQU $B68C A002 ( ecb_equates.asm):00038 CHROUT EQU $A002 0070 ( ecb_equates.asm):00039 CINBFL EQU $0070 0079 ( ecb_equates.asm):00040 CINCTR EQU $0079 007A ( ecb_equates.asm):00041 CINPTR EQU $007A 9E9D ( ecb_equates.asm):00042 CIRCLE EQU $9E9D AE41 ( ecb_equates.asm):00043 CLEAR EQU $AE41 A498 ( ecb_equates.asm):00044 CLOAD EQU $A498 A416 ( ecb_equates.asm):00045 CLOSE EQU $A416 A910 ( ecb_equates.asm):00046 CLS EQU $A910 0085 ( ecb_equates.asm):00047 CLSTSN EQU $0085 0090 ( ecb_equates.asm):00048 CMP0 EQU $0090 0091 ( ecb_equates.asm):00049 CMP1 EQU $0091 008F ( ecb_equates.asm):00050 CMPMID EQU $008F 0055 ( ecb_equates.asm):00051 COEFCT EQU $0055 0064 ( ecb_equates.asm):00052 COEFPT EQU $0064 9546 ( ecb_equates.asm):00053 COLOR EQU $9546 0120 ( ecb_equates.asm):00054 COMVEC EQU $0120 AE30 ( ecb_equates.asm):00055 CONT EQU $AE30 A26E ( ecb_equates.asm):00056 CONTAB EQU $A26E 8378 ( ecb_equates.asm):00057 COS EQU $8378 0083 ( ecb_equates.asm):00058 CPERTM EQU $0083 0082 ( ecb_equates.asm):00059 CPULWD EQU $0082 000D ( ecb_equates.asm):00060 CR EQU $000D A44C ( ecb_equates.asm):00061 CSAVE EQU $A44C A004 ( ecb_equates.asm):00062 CSRDON EQU $A004 0081 ( ecb_equates.asm):00063 CSRERR EQU $0081 00C1 ( ecb_equates.asm):00064 CSSVAL EQU $00C1 0068 ( ecb_equates.asm):00065 CURLIN EQU $0068 0088 ( ecb_equates.asm):00066 CURPOS EQU $0088 FF20 ( ecb_equates.asm):00067 DA EQU $FF20 0958 ( ecb_equates.asm):00068 DASCFL EQU $0958 AEE0 ( ecb_equates.asm):00069 DATA EQU $AEE0 0033 ( ecb_equates.asm):00070 DATPTR EQU $0033 0035 ( ecb_equates.asm):00071 DATTMP EQU $0035 0031 ( ecb_equates.asm):00072 DATTXT EQU $0031 0600 ( ecb_equates.asm):00073 DBUF0 EQU $0600 0700 ( ecb_equates.asm):00074 DBUF1 EQU $0700 00EE ( ecb_equates.asm):00075 DCBPT EQU $00EE 00EB ( ecb_equates.asm):00076 DCDRV EQU $00EB 00EA ( ecb_equates.asm):00077 DCOPC EQU $00EA 00F0 ( ecb_equates.asm):00078 DCSTA EQU $00F0 00EC ( ecb_equates.asm):00079 DCTRK EQU $00EC 045E ( ecb_equates.asm):00080 DEBDEL EQU $045E 011B ( ecb_equates.asm):00081 DEBVAL EQU $011B 8871 ( ecb_equates.asm):00082 DEF EQU $8871 095A ( ecb_equates.asm):00083 DEFDRV EQU $095A 8970 ( ecb_equates.asm):00084 DEL EQU $8970 006A ( ecb_equates.asm):00085 DEVCFW EQU $006A 006B ( ecb_equates.asm):00086 DEVLCF EQU $006B 006F ( ecb_equates.asm):00087 DEVNUM EQU $006F 006C ( ecb_equates.asm):00088 DEVPOS EQU $006C 006D ( ecb_equates.asm):00089 DEVWID EQU $006D 0954 ( ecb_equates.asm):00090 DEXTBF EQU $0954 097C ( ecb_equates.asm):00091 DFFLEN EQU $097C 0989 ( ecb_equates.asm):00092 DFLBUF EQU $0989 0957 ( ecb_equates.asm):00093 DFLTYP EQU $0957 B34E ( ecb_equates.asm):00094 DIM EQU $B34E 0005 ( ecb_equates.asm):00095 DIMFLG EQU $0005 0020 ( ecb_equates.asm):00096 DIRLEN EQU $0020 00E6 ( ecb_equates.asm):00097 DLBAUD EQU $00E6 8C18 ( ecb_equates.asm):00098 DLOAD EQU $8C18 095D ( ecb_equates.asm):00099 DLODFL EQU $095D 095E ( ecb_equates.asm):00100 DMRGFL EQU $095E 094C ( ecb_equates.asm):00101 DNAMBF EQU $094C 0983 ( ecb_equates.asm):00102 DNMIVC EQU $0983 C000 ( ecb_equates.asm):00103 DOSBAS EQU $C000 2600 ( ecb_equates.asm):00104 DOSBUF EQU $2600 00E5 ( ecb_equates.asm):00105 DOTVAL EQU $00E5 097E ( ecb_equates.asm):00106 DR0TRK EQU $097E 9CB6 ( ecb_equates.asm):00107 DRAW EQU $9CB6 095C ( ecb_equates.asm):00108 DRESFL EQU $095C 0986 ( ecb_equates.asm):00109 DRGRAM EQU $0986 0959 ( ecb_equates.asm):00110 DRUNFL EQU $0959 00ED ( ecb_equates.asm):00111 DSEC EQU $00ED FF40 ( ecb_equates.asm):00112 DSKREG EQU $FF40 095F ( ecb_equates.asm):00113 DUSRVC EQU $095F 0987 ( ecb_equates.asm):00114 DVERFL EQU $0987 8533 ( ecb_equates.asm):00115 EDIT EQU $8533 AEE3 ( ecb_equates.asm):00116 ELSE EQU $AEE3 0002 ( ecb_equates.asm):00117 ENDCHR EQU $0002 0000 ( ecb_equates.asm):00118 ENDFLG EQU $0000 00B7 ( ecb_equates.asm):00119 ENDGRP EQU $00B7 AE02 ( ecb_equates.asm):00120 ENDTOK EQU $AE02 A5CE ( ecb_equates.asm):00121 EOF EQU $A5CE 001B ( ecb_equates.asm):00122 ESC EQU $001B B70B ( ecb_equates.asm):00123 EVALEXPB EQU $B70B 8000 ( ecb_equates.asm):00124 EXBAS EQU $8000 A53E ( ecb_equates.asm):00125 EXEC EQU $A53E 009D ( ecb_equates.asm):00126 EXECJP EQU $009D 84F2 ( ecb_equates.asm):00127 EXP EQU $84F2 011D ( ecb_equates.asm):00128 EXPJMP EQU $011D FFC6 ( ecb_equates.asm):00129 F0CLR EQU $FFC6 FFC7 ( ecb_equates.asm):00130 F0SET EQU $FFC7 FFC8 ( ecb_equates.asm):00131 F1CLR EQU $FFC8 FFC9 ( ecb_equates.asm):00132 F1SET EQU $FFC9 FFCA ( ecb_equates.asm):00133 F2CLR EQU $FFCA FFCB ( ecb_equates.asm):00134 F2SET EQU $FFCB FFCC ( ecb_equates.asm):00135 F3CLR EQU $FFCC FFCD ( ecb_equates.asm):00136 F3SET EQU $FFCD FFCE ( ecb_equates.asm):00137 F4CLR EQU $FFCE FFCF ( ecb_equates.asm):00138 F4SET EQU $FFCF FFD0 ( ecb_equates.asm):00139 F5CLR EQU $FFD0 FFD1 ( ecb_equates.asm):00140 F5SET EQU $FFD1 FFD2 ( ecb_equates.asm):00141 F6CLR EQU $FFD2 FFD3 ( ecb_equates.asm):00142 F6SET EQU $FFD3 0800 ( ecb_equates.asm):00143 FATBL0 EQU $0800 084A ( ecb_equates.asm):00144 FATBL1 EQU $084A 0894 ( ecb_equates.asm):00145 FATBL2 EQU $0894 08DE ( ecb_equates.asm):00146 FATBL3 EQU $08DE 004A ( ecb_equates.asm):00147 FATLEN EQU $004A 095B ( ecb_equates.asm):00148 FCBACT EQU $095B 094A ( ecb_equates.asm):00149 FCBADR EQU $094A 0119 ( ecb_equates.asm):00150 FCBLEN EQU $0119 00F1 ( ecb_equates.asm):00151 FCBTMP EQU $00F1 0928 ( ecb_equates.asm):00152 FCBV1 EQU $0928 FF48 ( ecb_equates.asm):00153 FDCREG EQU $FF48 0078 ( ecb_equates.asm):00154 FILSTA EQU $0078 FFF6 ( ecb_equates.asm):00155 FIRQ EQU $FFF6 FF93 ( ecb_equates.asm):00156 FIRQENR EQU $FF93 8524 ( ecb_equates.asm):00157 FIX EQU $8524 AD47 ( ecb_equates.asm):00158 FOR EQU $AD47 00B2 ( ecb_equates.asm):00159 FORCOL EQU $00B2 000C ( ecb_equates.asm):00160 FORMF EQU $000C 004F ( ecb_equates.asm):00161 FP0EXP EQU $004F 0054 ( ecb_equates.asm):00162 FP0SGN EQU $0054 005C ( ecb_equates.asm):00163 FP1EXP EQU $005C 0061 ( ecb_equates.asm):00164 FP1SGN EQU $0061 0050 ( ecb_equates.asm):00165 FPA0 EQU $0050 005D ( ecb_equates.asm):00166 FPA1 EQU $005D 0013 ( ecb_equates.asm):00167 FPA2 EQU $0013 005B ( ecb_equates.asm):00168 FPCARY EQU $005B 0063 ( ecb_equates.asm):00169 FPSBYT EQU $0063 0025 ( ecb_equates.asm):00170 FRESPC EQU $0025 0021 ( ecb_equates.asm):00171 FRETOP EQU $0021 010F ( ecb_equates.asm):00172 FRQVEC EQU $010F 0007 ( ecb_equates.asm):00173 GARBFL EQU $0007 9755 ( ecb_equates.asm):00174 GET EQU $9755 A70B ( ecb_equates.asm):00175 GETBLK EQU $A70B 00A5 ( ecb_equates.asm):00176 GETCCH EQU $00A5 A9DE ( ecb_equates.asm):00177 GETJOY EQU $A9DE 009F ( ecb_equates.asm):00178 GETNCH EQU $009F B4F4 ( ecb_equates.asm):00179 GIVABF EQU $B4F4 AE86 ( ecb_equates.asm):00180 GO EQU $AE86 0044 ( ecb_equates.asm):00181 GRANMX EQU $0044 0086 ( ecb_equates.asm):00182 GRBLOK EQU $0086 00BC ( ecb_equates.asm):00183 GRPRAM EQU $00BC FF9F ( ecb_equates.asm):00184 H.OFSET0 EQU $FF9F 8BDD ( ecb_equates.asm):00185 HEXDOL EQU $8BDD 00BD ( ecb_equates.asm):00186 HORBEG EQU $00BD 00B9 ( ecb_equates.asm):00187 HORBYT EQU $00B9 00C7 ( ecb_equates.asm):00188 HORDEF EQU $00C7 00C3 ( ecb_equates.asm):00189 HOREND EQU $00C3 00E6 ( ecb_equates.asm):00190 HRMODE EQU $00E6 00E7 ( ecb_equates.asm):00191 HRWIDTH EQU $00E7 0004 ( ecb_equates.asm):00192 IFCTR EQU $0004 AF14 ( ecb_equates.asm):00193 IFTOK EQU $AF14 0087 ( ecb_equates.asm):00194 IKEYIM EQU $0087 FF90 ( ecb_equates.asm):00195 INIT0 EQU $FF90 FF91 ( ecb_equates.asm):00196 INIT1 EQU $FF91 A564 ( ecb_equates.asm):00197 INKEY EQU $A564 0010 ( ecb_equates.asm):00198 INPFIL EQU $0010 0009 ( ecb_equates.asm):00199 INPFLG EQU $0009 AFF5 ( ecb_equates.asm):00200 INPUT EQU $AFF5 877E ( ecb_equates.asm):00201 INSTR EQU $877E BCEE ( ecb_equates.asm):00202 INT EQU $BCEE B3ED ( ecb_equates.asm):00203 INTCNV EQU $B3ED FFF8 ( ecb_equates.asm):00204 IRQ EQU $FFF8 FF92 ( ecb_equates.asm):00205 IRQENR EQU $FF92 010C ( ecb_equates.asm):00206 IRQVEC EQU $010C A00A ( ecb_equates.asm):00207 JOYIN EQU $A00A A9C6 ( ecb_equates.asm):00208 JOYSTK EQU $A9C6 0152 ( ecb_equates.asm):00209 KEYBUF EQU $0152 A1CB ( ecb_equates.asm):00210 KEYIN EQU $A1CB 8002 ( ecb_equates.asm):00211 L8002 EQU $8002 8031 ( ecb_equates.asm):00212 L8031 EQU $8031 80B2 ( ecb_equates.asm):00213 L80B2 EQU $80B2 80B8 ( ecb_equates.asm):00214 L80B8 EQU $80B8 80D0 ( ecb_equates.asm):00215 L80D0 EQU $80D0 80DD ( ecb_equates.asm):00216 L80DD EQU $80DD 80DE ( ecb_equates.asm):00217 L80DE EQU $80DE 80DF ( ecb_equates.asm):00218 L80DF EQU $80DF 80E1 ( ecb_equates.asm):00219 L80E1 EQU $80E1 80E3 ( ecb_equates.asm):00220 L80E3 EQU $80E3 80E4 ( ecb_equates.asm):00221 L80E4 EQU $80E4 80E6 ( ecb_equates.asm):00222 L80E6 EQU $80E6 80E8 ( ecb_equates.asm):00223 L80E8 EQU $80E8 8100 ( ecb_equates.asm):00224 L8100 EQU $8100 8101 ( ecb_equates.asm):00225 L8101 EQU $8101 811C ( ecb_equates.asm):00226 L811C EQU $811C 811D ( ecb_equates.asm):00227 L811D EQU $811D 8139 ( ecb_equates.asm):00228 L8139 EQU $8139 813C ( ecb_equates.asm):00229 L813C EQU $813C 8148 ( ecb_equates.asm):00230 L8148 EQU $8148 8150 ( ecb_equates.asm):00231 L8150 EQU $8150 8154 ( ecb_equates.asm):00232 L8154 EQU $8154 8165 ( ecb_equates.asm):00233 L8165 EQU $8165 8168 ( ecb_equates.asm):00234 L8168 EQU $8168 816C ( ecb_equates.asm):00235 L816C EQU $816C 8170 ( ecb_equates.asm):00236 L8170 EQU $8170 817D ( ecb_equates.asm):00237 L817D EQU $817D 8183 ( ecb_equates.asm):00238 L8183 EQU $8183 8186 ( ecb_equates.asm):00239 L8186 EQU $8186 818A ( ecb_equates.asm):00240 L818A EQU $818A 818E ( ecb_equates.asm):00241 L818E EQU $818E 8193 ( ecb_equates.asm):00242 L8193 EQU $8193 8196 ( ecb_equates.asm):00243 L8196 EQU $8196 8199 ( ecb_equates.asm):00244 L8199 EQU $8199 819D ( ecb_equates.asm):00245 L819D EQU $819D 81A1 ( ecb_equates.asm):00246 L81A1 EQU $81A1 81A5 ( ecb_equates.asm):00247 L81A5 EQU $81A5 81AB ( ecb_equates.asm):00248 L81AB EQU $81AB 81B1 ( ecb_equates.asm):00249 L81B1 EQU $81B1 81B7 ( ecb_equates.asm):00250 L81B7 EQU $81B7 81BC ( ecb_equates.asm):00251 L81BC EQU $81BC 81C2 ( ecb_equates.asm):00252 L81C2 EQU $81C2 81C7 ( ecb_equates.asm):00253 L81C7 EQU $81C7 81CA ( ecb_equates.asm):00254 L81CA EQU $81CA 81CD ( ecb_equates.asm):00255 L81CD EQU $81CD 81D1 ( ecb_equates.asm):00256 L81D1 EQU $81D1 81D6 ( ecb_equates.asm):00257 L81D6 EQU $81D6 81DB ( ecb_equates.asm):00258 L81DB EQU $81DB 81DF ( ecb_equates.asm):00259 L81DF EQU $81DF 81E4 ( ecb_equates.asm):00260 L81E4 EQU $81E4 81E9 ( ecb_equates.asm):00261 L81E9 EQU $81E9 81EB ( ecb_equates.asm):00262 L81EB EQU $81EB 81F0 ( ecb_equates.asm):00263 L81F0 EQU $81F0 81F2 ( ecb_equates.asm):00264 L81F2 EQU $81F2 81F4 ( ecb_equates.asm):00265 L81F4 EQU $81F4 81F6 ( ecb_equates.asm):00266 L81F6 EQU $81F6 81F8 ( ecb_equates.asm):00267 L81F8 EQU $81F8 81FA ( ecb_equates.asm):00268 L81FA EQU $81FA 81FC ( ecb_equates.asm):00269 L81FC EQU $81FC 81FE ( ecb_equates.asm):00270 L81FE EQU $81FE 8200 ( ecb_equates.asm):00271 L8200 EQU $8200 8202 ( ecb_equates.asm):00272 L8202 EQU $8202 8204 ( ecb_equates.asm):00273 L8204 EQU $8204 8206 ( ecb_equates.asm):00274 L8206 EQU $8206 8208 ( ecb_equates.asm):00275 L8208 EQU $8208 820A ( ecb_equates.asm):00276 L820A EQU $820A 820C ( ecb_equates.asm):00277 L820C EQU $820C 820E ( ecb_equates.asm):00278 L820E EQU $820E 8210 ( ecb_equates.asm):00279 L8210 EQU $8210 8212 ( ecb_equates.asm):00280 L8212 EQU $8212 8214 ( ecb_equates.asm):00281 L8214 EQU $8214 8216 ( ecb_equates.asm):00282 L8216 EQU $8216 8218 ( ecb_equates.asm):00283 L8218 EQU $8218 821A ( ecb_equates.asm):00284 L821A EQU $821A 821C ( ecb_equates.asm):00285 L821C EQU $821C 821E ( ecb_equates.asm):00286 L821E EQU $821E 8221 ( ecb_equates.asm):00287 L8221 EQU $8221 8224 ( ecb_equates.asm):00288 L8224 EQU $8224 8227 ( ecb_equates.asm):00289 L8227 EQU $8227 822A ( ecb_equates.asm):00290 L822A EQU $822A 822D ( ecb_equates.asm):00291 L822D EQU $822D 8230 ( ecb_equates.asm):00292 L8230 EQU $8230 8233 ( ecb_equates.asm):00293 L8233 EQU $8233 8236 ( ecb_equates.asm):00294 L8236 EQU $8236 823A ( ecb_equates.asm):00295 L823A EQU $823A 8240 ( ecb_equates.asm):00296 L8240 EQU $8240 8245 ( ecb_equates.asm):00297 L8245 EQU $8245 824A ( ecb_equates.asm):00298 L824A EQU $824A 8250 ( ecb_equates.asm):00299 L8250 EQU $8250 8257 ( ecb_equates.asm):00300 L8257 EQU $8257 8259 ( ecb_equates.asm):00301 L8259 EQU $8259 825B ( ecb_equates.asm):00302 L825B EQU $825B 825D ( ecb_equates.asm):00303 L825D EQU $825D 825F ( ecb_equates.asm):00304 L825F EQU $825F 8261 ( ecb_equates.asm):00305 L8261 EQU $8261 8263 ( ecb_equates.asm):00306 L8263 EQU $8263 8265 ( ecb_equates.asm):00307 L8265 EQU $8265 8267 ( ecb_equates.asm):00308 L8267 EQU $8267 8269 ( ecb_equates.asm):00309 L8269 EQU $8269 826B ( ecb_equates.asm):00310 L826B EQU $826B 826D ( ecb_equates.asm):00311 L826D EQU $826D 826F ( ecb_equates.asm):00312 L826F EQU $826F 8271 ( ecb_equates.asm):00313 L8271 EQU $8271 8285 ( ecb_equates.asm):00314 L8285 EQU $8285 82BB ( ecb_equates.asm):00315 L82BB EQU $82BB 82CF ( ecb_equates.asm):00316 L82CF EQU $82CF 82D8 ( ecb_equates.asm):00317 L82D8 EQU $82D8 82F1 ( ecb_equates.asm):00318 L82F1 EQU $82F1 8310 ( ecb_equates.asm):00319 L8310 EQU $8310 8311 ( ecb_equates.asm):00320 L8311 EQU $8311 8316 ( ecb_equates.asm):00321 L8316 EQU $8316 831A ( ecb_equates.asm):00322 L831A EQU $831A 834D ( ecb_equates.asm):00323 L834D EQU $834D 835E ( ecb_equates.asm):00324 L835E EQU $835E 8367 ( ecb_equates.asm):00325 L8367 EQU $8367 836C ( ecb_equates.asm):00326 L836C EQU $836C 837E ( ecb_equates.asm):00327 L837E EQU $837E 83A3 ( ecb_equates.asm):00328 L83A3 EQU $83A3 83A6 ( ecb_equates.asm):00329 L83A6 EQU $83A6 83AB ( ecb_equates.asm):00330 L83AB EQU $83AB 83B8 ( ecb_equates.asm):00331 L83B8 EQU $83B8 83C5 ( ecb_equates.asm):00332 L83C5 EQU $83C5 83D7 ( ecb_equates.asm):00333 L83D7 EQU $83D7 83DC ( ecb_equates.asm):00334 L83DC EQU $83DC 83DF ( ecb_equates.asm):00335 L83DF EQU $83DF 83E0 ( ecb_equates.asm):00336 L83E0 EQU $83E0 83E1 ( ecb_equates.asm):00337 L83E1 EQU $83E1 83E6 ( ecb_equates.asm):00338 L83E6 EQU $83E6 83EB ( ecb_equates.asm):00339 L83EB EQU $83EB 83F0 ( ecb_equates.asm):00340 L83F0 EQU $83F0 83F5 ( ecb_equates.asm):00341 L83F5 EQU $83F5 83FA ( ecb_equates.asm):00342 L83FA EQU $83FA 83FF ( ecb_equates.asm):00343 L83FF EQU $83FF 8404 ( ecb_equates.asm):00344 L8404 EQU $8404 8409 ( ecb_equates.asm):00345 L8409 EQU $8409 840E ( ecb_equates.asm):00346 L840E EQU $840E 8413 ( ecb_equates.asm):00347 L8413 EQU $8413 8418 ( ecb_equates.asm):00348 L8418 EQU $8418 841D ( ecb_equates.asm):00349 L841D EQU $841D 841E ( ecb_equates.asm):00350 L841E EQU $841E 8423 ( ecb_equates.asm):00351 L8423 EQU $8423 8428 ( ecb_equates.asm):00352 L8428 EQU $8428 842D ( ecb_equates.asm):00353 L842D EQU $842D 8432 ( ecb_equates.asm):00354 L8432 EQU $8432 8437 ( ecb_equates.asm):00355 L8437 EQU $8437 843C ( ecb_equates.asm):00356 L843C EQU $843C 8441 ( ecb_equates.asm):00357 L8441 EQU $8441 8489 ( ecb_equates.asm):00358 L8489 EQU $8489 8491 ( ecb_equates.asm):00359 L8491 EQU $8491 84AC ( ecb_equates.asm):00360 L84AC EQU $84AC 84C4 ( ecb_equates.asm):00361 L84C4 EQU $84C4 84C9 ( ecb_equates.asm):00362 L84C9 EQU $84C9 84CA ( ecb_equates.asm):00363 L84CA EQU $84CA 84CF ( ecb_equates.asm):00364 L84CF EQU $84CF 84D4 ( ecb_equates.asm):00365 L84D4 EQU $84D4 84D9 ( ecb_equates.asm):00366 L84D9 EQU $84D9 84DE ( ecb_equates.asm):00367 L84DE EQU $84DE 84E3 ( ecb_equates.asm):00368 L84E3 EQU $84E3 84E8 ( ecb_equates.asm):00369 L84E8 EQU $84E8 84ED ( ecb_equates.asm):00370 L84ED EQU $84ED 8501 ( ecb_equates.asm):00371 L8501 EQU $8501 8504 ( ecb_equates.asm):00372 L8504 EQU $8504 8529 ( ecb_equates.asm):00373 L8529 EQU $8529 852C ( ecb_equates.asm):00374 L852C EQU $852C 8538 ( ecb_equates.asm):00375 L8538 EQU $8538 854D ( ecb_equates.asm):00376 L854D EQU $854D 855C ( ecb_equates.asm):00377 L855C EQU $855C 855D ( ecb_equates.asm):00378 L855D EQU $855D 8570 ( ecb_equates.asm):00379 L8570 EQU $8570 857D ( ecb_equates.asm):00380 L857D EQU $857D 8581 ( ecb_equates.asm):00381 L8581 EQU $8581 858A ( ecb_equates.asm):00382 L858A EQU $858A 858C ( ecb_equates.asm):00383 L858C EQU $858C 8592 ( ecb_equates.asm):00384 L8592 EQU $8592 859D ( ecb_equates.asm):00385 L859D EQU $859D 85AB ( ecb_equates.asm):00386 L85AB EQU $85AB 85AF ( ecb_equates.asm):00387 L85AF EQU $85AF 85B3 ( ecb_equates.asm):00388 L85B3 EQU $85B3 85B4 ( ecb_equates.asm):00389 L85B4 EQU $85B4 85B6 ( ecb_equates.asm):00390 L85B6 EQU $85B6 85C2 ( ecb_equates.asm):00391 L85C2 EQU $85C2 85C3 ( ecb_equates.asm):00392 L85C3 EQU $85C3 85C7 ( ecb_equates.asm):00393 L85C7 EQU $85C7 85D1 ( ecb_equates.asm):00394 L85D1 EQU $85D1 85D5 ( ecb_equates.asm):00395 L85D5 EQU $85D5 85DE ( ecb_equates.asm):00396 L85DE EQU $85DE 85F3 ( ecb_equates.asm):00397 L85F3 EQU $85F3 85F5 ( ecb_equates.asm):00398 L85F5 EQU $85F5 860F ( ecb_equates.asm):00399 L860F EQU $860F 8613 ( ecb_equates.asm):00400 L8613 EQU $8613 861E ( ecb_equates.asm):00401 L861E EQU $861E 8625 ( ecb_equates.asm):00402 L8625 EQU $8625 8626 ( ecb_equates.asm):00403 L8626 EQU $8626 862E ( ecb_equates.asm):00404 L862E EQU $862E 8630 ( ecb_equates.asm):00405 L8630 EQU $8630 8634 ( ecb_equates.asm):00406 L8634 EQU $8634 8646 ( ecb_equates.asm):00407 L8646 EQU $8646 864A ( ecb_equates.asm):00408 L864A EQU $864A 8650 ( ecb_equates.asm):00409 L8650 EQU $8650 8659 ( ecb_equates.asm):00410 L8659 EQU $8659 865C ( ecb_equates.asm):00411 L865C EQU $865C 8665 ( ecb_equates.asm):00412 L8665 EQU $8665 866B ( ecb_equates.asm):00413 L866B EQU $866B 8679 ( ecb_equates.asm):00414 L8679 EQU $8679 867C ( ecb_equates.asm):00415 L867C EQU $867C 8685 ( ecb_equates.asm):00416 L8685 EQU $8685 8687 ( ecb_equates.asm):00417 L8687 EQU $8687 8694 ( ecb_equates.asm):00418 L8694 EQU $8694 86A6 ( ecb_equates.asm):00419 L86A6 EQU $86A6 86D6 ( ecb_equates.asm):00420 L86D6 EQU $86D6 86EB ( ecb_equates.asm):00421 L86EB EQU $86EB 86FD ( ecb_equates.asm):00422 L86FD EQU $86FD 870E ( ecb_equates.asm):00423 L870E EQU $870E 8724 ( ecb_equates.asm):00424 L8724 EQU $8724 8727 ( ecb_equates.asm):00425 L8727 EQU $8727 872E ( ecb_equates.asm):00426 L872E EQU $872E 873F ( ecb_equates.asm):00427 L873F EQU $873F 8746 ( ecb_equates.asm):00428 L8746 EQU $8746 8748 ( ecb_equates.asm):00429 L8748 EQU $8748 8768 ( ecb_equates.asm):00430 L8768 EQU $8768 876B ( ecb_equates.asm):00431 L876B EQU $876B 8776 ( ecb_equates.asm):00432 L8776 EQU $8776 877B ( ecb_equates.asm):00433 L877B EQU $877B 879C ( ecb_equates.asm):00434 L879C EQU $879C 87BE ( ecb_equates.asm):00435 L87BE EQU $87BE 87CD ( ecb_equates.asm):00436 L87CD EQU $87CD 87D6 ( ecb_equates.asm):00437 L87D6 EQU $87D6 87D8 ( ecb_equates.asm):00438 L87D8 EQU $87D8 87D9 ( ecb_equates.asm):00439 L87D9 EQU $87D9 87DF ( ecb_equates.asm):00440 L87DF EQU $87DF 87E7 ( ecb_equates.asm):00441 L87E7 EQU $87E7 87EB ( ecb_equates.asm):00442 L87EB EQU $87EB 8800 ( ecb_equates.asm):00443 L8800 EQU $8800 880A ( ecb_equates.asm):00444 L880A EQU $880A 880C ( ecb_equates.asm):00445 L880C EQU $880C 880E ( ecb_equates.asm):00446 L880E EQU $880E 881F ( ecb_equates.asm):00447 L881F EQU $881F 8826 ( ecb_equates.asm):00448 L8826 EQU $8826 882E ( ecb_equates.asm):00449 L882E EQU $882E 8834 ( ecb_equates.asm):00450 L8834 EQU $8834 883F ( ecb_equates.asm):00451 L883F EQU $883F 8845 ( ecb_equates.asm):00452 L8845 EQU $8845 8862 ( ecb_equates.asm):00453 L8862 EQU $8862 8866 ( ecb_equates.asm):00454 L8866 EQU $8866 886A ( ecb_equates.asm):00455 L886A EQU $886A 886E ( ecb_equates.asm):00456 L886E EQU $886E 88A1 ( ecb_equates.asm):00457 L88A1 EQU $88A1 88B1 ( ecb_equates.asm):00458 L88B1 EQU $88B1 88B4 ( ecb_equates.asm):00459 L88B4 EQU $88B4 88D9 ( ecb_equates.asm):00460 L88D9 EQU $88D9 88EF ( ecb_equates.asm):00461 L88EF EQU $88EF 890B ( ecb_equates.asm):00462 L890B EQU $890B 890D ( ecb_equates.asm):00463 L890D EQU $890D 890F ( ecb_equates.asm):00464 L890F EQU $890F 891C ( ecb_equates.asm):00465 L891C EQU $891C 8927 ( ecb_equates.asm):00466 L8927 EQU $8927 892C ( ecb_equates.asm):00467 L892C EQU $892C 8943 ( ecb_equates.asm):00468 L8943 EQU $8943 8944 ( ecb_equates.asm):00469 L8944 EQU $8944 8952 ( ecb_equates.asm):00470 L8952 EQU $8952 8955 ( ecb_equates.asm):00471 L8955 EQU $8955 8960 ( ecb_equates.asm):00472 L8960 EQU $8960 898C ( ecb_equates.asm):00473 L898C EQU $898C 8990 ( ecb_equates.asm):00474 L8990 EQU $8990 8992 ( ecb_equates.asm):00475 L8992 EQU $8992 8993 ( ecb_equates.asm):00476 L8993 EQU $8993 899F ( ecb_equates.asm):00477 L899F EQU $899F 89AE ( ecb_equates.asm):00478 L89AE EQU $89AE 89B4 ( ecb_equates.asm):00479 L89B4 EQU $89B4 89B8 ( ecb_equates.asm):00480 L89B8 EQU $89B8 89BF ( ecb_equates.asm):00481 L89BF EQU $89BF 89C0 ( ecb_equates.asm):00482 L89C0 EQU $89C0 89D2 ( ecb_equates.asm):00483 L89D2 EQU $89D2 89E1 ( ecb_equates.asm):00484 L89E1 EQU $89E1 89FC ( ecb_equates.asm):00485 L89FC EQU $89FC 8A02 ( ecb_equates.asm):00486 L8A02 EQU $8A02 8A04 ( ecb_equates.asm):00487 L8A04 EQU $8A04 8A20 ( ecb_equates.asm):00488 L8A20 EQU $8A20 8A2D ( ecb_equates.asm):00489 L8A2D EQU $8A2D 8A3A ( ecb_equates.asm):00490 L8A3A EQU $8A3A 8A3D ( ecb_equates.asm):00491 L8A3D EQU $8A3D 8A67 ( ecb_equates.asm):00492 L8A67 EQU $8A67 8A68 ( ecb_equates.asm):00493 L8A68 EQU $8A68 8A71 ( ecb_equates.asm):00494 L8A71 EQU $8A71 8A77 ( ecb_equates.asm):00495 L8A77 EQU $8A77 8A83 ( ecb_equates.asm):00496 L8A83 EQU $8A83 8A86 ( ecb_equates.asm):00497 L8A86 EQU $8A86 8A90 ( ecb_equates.asm):00498 L8A90 EQU $8A90 8A91 ( ecb_equates.asm):00499 L8A91 EQU $8A91 8A95 ( ecb_equates.asm):00500 L8A95 EQU $8A95 8A99 ( ecb_equates.asm):00501 L8A99 EQU $8A99 8A9B ( ecb_equates.asm):00502 L8A9B EQU $8A9B 8AAC ( ecb_equates.asm):00503 L8AAC EQU $8AAC 8AB2 ( ecb_equates.asm):00504 L8AB2 EQU $8AB2 8AB9 ( ecb_equates.asm):00505 L8AB9 EQU $8AB9 8AC0 ( ecb_equates.asm):00506 L8AC0 EQU $8AC0 8AC7 ( ecb_equates.asm):00507 L8AC7 EQU $8AC7 8AD3 ( ecb_equates.asm):00508 L8AD3 EQU $8AD3 8ADD ( ecb_equates.asm):00509 L8ADD EQU $8ADD 8AE1 ( ecb_equates.asm):00510 L8AE1 EQU $8AE1 8AE5 ( ecb_equates.asm):00511 L8AE5 EQU $8AE5 8AE9 ( ecb_equates.asm):00512 L8AE9 EQU $8AE9 8AEB ( ecb_equates.asm):00513 L8AEB EQU $8AEB 8AED ( ecb_equates.asm):00514 L8AED EQU $8AED 8AEF ( ecb_equates.asm):00515 L8AEF EQU $8AEF 8B13 ( ecb_equates.asm):00516 L8B13 EQU $8B13 8B17 ( ecb_equates.asm):00517 L8B17 EQU $8B17 8B1B ( ecb_equates.asm):00518 L8B1B EQU $8B1B 8B24 ( ecb_equates.asm):00519 L8B24 EQU $8B24 8B41 ( ecb_equates.asm):00520 L8B41 EQU $8B41 8B55 ( ecb_equates.asm):00521 L8B55 EQU $8B55 8B67 ( ecb_equates.asm):00522 L8B67 EQU $8B67 8B71 ( ecb_equates.asm):00523 L8B71 EQU $8B71 8B7B ( ecb_equates.asm):00524 L8B7B EQU $8B7B 8B7F ( ecb_equates.asm):00525 L8B7F EQU $8B7F 8B8A ( ecb_equates.asm):00526 L8B8A EQU $8B8A 8B8C ( ecb_equates.asm):00527 L8B8C EQU $8B8C 8BAE ( ecb_equates.asm):00528 L8BAE EQU $8BAE 8BBE ( ecb_equates.asm):00529 L8BBE EQU $8BBE 8BC9 ( ecb_equates.asm):00530 L8BC9 EQU $8BC9 8BD9 ( ecb_equates.asm):00531 L8BD9 EQU $8BD9 8BE5 ( ecb_equates.asm):00532 L8BE5 EQU $8BE5 8BEA ( ecb_equates.asm):00533 L8BEA EQU $8BEA 8BFF ( ecb_equates.asm):00534 L8BFF EQU $8BFF 8C07 ( ecb_equates.asm):00535 L8C07 EQU $8C07 8C0B ( ecb_equates.asm):00536 L8C0B EQU $8C0B 8C1B ( ecb_equates.asm):00537 L8C1B EQU $8C1B 8C25 ( ecb_equates.asm):00538 L8C25 EQU $8C25 8C36 ( ecb_equates.asm):00539 L8C36 EQU $8C36 8C42 ( ecb_equates.asm):00540 L8C42 EQU $8C42 8C44 ( ecb_equates.asm):00541 L8C44 EQU $8C44 8C5F ( ecb_equates.asm):00542 L8C5F EQU $8C5F 8C62 ( ecb_equates.asm):00543 L8C62 EQU $8C62 8C85 ( ecb_equates.asm):00544 L8C85 EQU $8C85 8C96 ( ecb_equates.asm):00545 L8C96 EQU $8C96 8C9B ( ecb_equates.asm):00546 L8C9B EQU $8C9B 8CB1 ( ecb_equates.asm):00547 L8CB1 EQU $8CB1 8CBF ( ecb_equates.asm):00548 L8CBF EQU $8CBF 8CC1 ( ecb_equates.asm):00549 L8CC1 EQU $8CC1 8CC5 ( ecb_equates.asm):00550 L8CC5 EQU $8CC5 8CC6 ( ecb_equates.asm):00551 L8CC6 EQU $8CC6 8CCD ( ecb_equates.asm):00552 L8CCD EQU $8CCD 8CD0 ( ecb_equates.asm):00553 L8CD0 EQU $8CD0 8CDD ( ecb_equates.asm):00554 L8CDD EQU $8CDD 8CE2 ( ecb_equates.asm):00555 L8CE2 EQU $8CE2 8CE4 ( ecb_equates.asm):00556 L8CE4 EQU $8CE4 8D01 ( ecb_equates.asm):00557 L8D01 EQU $8D01 8D02 ( ecb_equates.asm):00558 L8D02 EQU $8D02 8D12 ( ecb_equates.asm):00559 L8D12 EQU $8D12 8D14 ( ecb_equates.asm):00560 L8D14 EQU $8D14 8D1B ( ecb_equates.asm):00561 L8D1B EQU $8D1B 8D1D ( ecb_equates.asm):00562 L8D1D EQU $8D1D 8D26 ( ecb_equates.asm):00563 L8D26 EQU $8D26 8D48 ( ecb_equates.asm):00564 L8D48 EQU $8D48 8D58 ( ecb_equates.asm):00565 L8D58 EQU $8D58 8D60 ( ecb_equates.asm):00566 L8D60 EQU $8D60 8D62 ( ecb_equates.asm):00567 L8D62 EQU $8D62 8D6A ( ecb_equates.asm):00568 L8D6A EQU $8D6A 8D6B ( ecb_equates.asm):00569 L8D6B EQU $8D6B 8D72 ( ecb_equates.asm):00570 L8D72 EQU $8D72 8D7C ( ecb_equates.asm):00571 L8D7C EQU $8D7C 8D89 ( ecb_equates.asm):00572 L8D89 EQU $8D89 8D8B ( ecb_equates.asm):00573 L8D8B EQU $8D8B 8DA7 ( ecb_equates.asm):00574 L8DA7 EQU $8DA7 8DB8 ( ecb_equates.asm):00575 L8DB8 EQU $8DB8 8DBC ( ecb_equates.asm):00576 L8DBC EQU $8DBC 8DC5 ( ecb_equates.asm):00577 L8DC5 EQU $8DC5 8DC9 ( ecb_equates.asm):00578 L8DC9 EQU $8DC9 8DD4 ( ecb_equates.asm):00579 L8DD4 EQU $8DD4 8DDE ( ecb_equates.asm):00580 L8DDE EQU $8DDE 8DE6 ( ecb_equates.asm):00581 L8DE6 EQU $8DE6 8DF6 ( ecb_equates.asm):00582 L8DF6 EQU $8DF6 8DF7 ( ecb_equates.asm):00583 L8DF7 EQU $8DF7 8DF9 ( ecb_equates.asm):00584 L8DF9 EQU $8DF9 8DFD ( ecb_equates.asm):00585 L8DFD EQU $8DFD 8E04 ( ecb_equates.asm):00586 L8E04 EQU $8E04 8E0C ( ecb_equates.asm):00587 L8E0C EQU $8E0C 8E1D ( ecb_equates.asm):00588 L8E1D EQU $8E1D 8E25 ( ecb_equates.asm):00589 L8E25 EQU $8E25 8E37 ( ecb_equates.asm):00590 L8E37 EQU $8E37 8E3B ( ecb_equates.asm):00591 L8E3B EQU $8E3B 8E5F ( ecb_equates.asm):00592 L8E5F EQU $8E5F 8E69 ( ecb_equates.asm):00593 L8E69 EQU $8E69 8E71 ( ecb_equates.asm):00594 L8E71 EQU $8E71 8E82 ( ecb_equates.asm):00595 L8E82 EQU $8E82 8E88 ( ecb_equates.asm):00596 L8E88 EQU $8E88 8E95 ( ecb_equates.asm):00597 L8E95 EQU $8E95 8EA8 ( ecb_equates.asm):00598 L8EA8 EQU $8EA8 8EAE ( ecb_equates.asm):00599 L8EAE EQU $8EAE 8EB4 ( ecb_equates.asm):00600 L8EB4 EQU $8EB4 8EB7 ( ecb_equates.asm):00601 L8EB7 EQU $8EB7 8EB9 ( ecb_equates.asm):00602 L8EB9 EQU $8EB9 8EBB ( ecb_equates.asm):00603 L8EBB EQU $8EBB 8ED2 ( ecb_equates.asm):00604 L8ED2 EQU $8ED2 8ED8 ( ecb_equates.asm):00605 L8ED8 EQU $8ED8 8EDD ( ecb_equates.asm):00606 L8EDD EQU $8EDD 8EE2 ( ecb_equates.asm):00607 L8EE2 EQU $8EE2 8EEF ( ecb_equates.asm):00608 L8EEF EQU $8EEF 8EFB ( ecb_equates.asm):00609 L8EFB EQU $8EFB 8F1A ( ecb_equates.asm):00610 L8F1A EQU $8F1A 8F20 ( ecb_equates.asm):00611 L8F20 EQU $8F20 8F24 ( ecb_equates.asm):00612 L8F24 EQU $8F24 8F26 ( ecb_equates.asm):00613 L8F26 EQU $8F26 8F41 ( ecb_equates.asm):00614 L8F41 EQU $8F41 8F4F ( ecb_equates.asm):00615 L8F4F EQU $8F4F 8F5A ( ecb_equates.asm):00616 L8F5A EQU $8F5A 8F74 ( ecb_equates.asm):00617 L8F74 EQU $8F74 8F8F ( ecb_equates.asm):00618 L8F8F EQU $8F8F 8F96 ( ecb_equates.asm):00619 L8F96 EQU $8F96 8FB3 ( ecb_equates.asm):00620 L8FB3 EQU $8FB3 8FC4 ( ecb_equates.asm):00621 L8FC4 EQU $8FC4 8FC6 ( ecb_equates.asm):00622 L8FC6 EQU $8FC6 8FD8 ( ecb_equates.asm):00623 L8FD8 EQU $8FD8 8FE3 ( ecb_equates.asm):00624 L8FE3 EQU $8FE3 8FE5 ( ecb_equates.asm):00625 L8FE5 EQU $8FE5 8FF2 ( ecb_equates.asm):00626 L8FF2 EQU $8FF2 8FFA ( ecb_equates.asm):00627 L8FFA EQU $8FFA 9011 ( ecb_equates.asm):00628 L9011 EQU $9011 9015 ( ecb_equates.asm):00629 L9015 EQU $9015 9023 ( ecb_equates.asm):00630 L9023 EQU $9023 902C ( ecb_equates.asm):00631 L902C EQU $902C 9050 ( ecb_equates.asm):00632 L9050 EQU $9050 9054 ( ecb_equates.asm):00633 L9054 EQU $9054 9060 ( ecb_equates.asm):00634 L9060 EQU $9060 9065 ( ecb_equates.asm):00635 L9065 EQU $9065 907C ( ecb_equates.asm):00636 L907C EQU $907C 9096 ( ecb_equates.asm):00637 L9096 EQU $9096 909E ( ecb_equates.asm):00638 L909E EQU $909E 90A9 ( ecb_equates.asm):00639 L90A9 EQU $90A9 90AA ( ecb_equates.asm):00640 L90AA EQU $90AA 90B2 ( ecb_equates.asm):00641 L90B2 EQU $90B2 90B3 ( ecb_equates.asm):00642 L90B3 EQU $90B3 90B8 ( ecb_equates.asm):00643 L90B8 EQU $90B8 90BD ( ecb_equates.asm):00644 L90BD EQU $90BD 90BF ( ecb_equates.asm):00645 L90BF EQU $90BF 90CB ( ecb_equates.asm):00646 L90CB EQU $90CB 90E2 ( ecb_equates.asm):00647 L90E2 EQU $90E2 90EA ( ecb_equates.asm):00648 L90EA EQU $90EA 90EE ( ecb_equates.asm):00649 L90EE EQU $90EE 90FF ( ecb_equates.asm):00650 L90FF EQU $90FF 9108 ( ecb_equates.asm):00651 L9108 EQU $9108 910D ( ecb_equates.asm):00652 L910D EQU $910D 9116 ( ecb_equates.asm):00653 L9116 EQU $9116 911B ( ecb_equates.asm):00654 L911B EQU $911B 9129 ( ecb_equates.asm):00655 L9129 EQU $9129 9130 ( ecb_equates.asm):00656 L9130 EQU $9130 913C ( ecb_equates.asm):00657 L913C EQU $913C 9141 ( ecb_equates.asm):00658 L9141 EQU $9141 915A ( ecb_equates.asm):00659 L915A EQU $915A 9167 ( ecb_equates.asm):00660 L9167 EQU $9167 916F ( ecb_equates.asm):00661 L916F EQU $916F 9177 ( ecb_equates.asm):00662 L9177 EQU $9177 9185 ( ecb_equates.asm):00663 L9185 EQU $9185 919E ( ecb_equates.asm):00664 L919E EQU $919E 91A0 ( ecb_equates.asm):00665 L91A0 EQU $91A0 91B6 ( ecb_equates.asm):00666 L91B6 EQU $91B6 91BA ( ecb_equates.asm):00667 L91BA EQU $91BA 91C4 ( ecb_equates.asm):00668 L91C4 EQU $91C4 91CC ( ecb_equates.asm):00669 L91CC EQU $91CC 91CD ( ecb_equates.asm):00670 L91CD EQU $91CD 91D0 ( ecb_equates.asm):00671 L91D0 EQU $91D0 91E4 ( ecb_equates.asm):00672 L91E4 EQU $91E4 91E9 ( ecb_equates.asm):00673 L91E9 EQU $91E9 91F1 ( ecb_equates.asm):00674 L91F1 EQU $91F1 9200 ( ecb_equates.asm):00675 L9200 EQU $9200 9202 ( ecb_equates.asm):00676 L9202 EQU $9202 9211 ( ecb_equates.asm):00677 L9211 EQU $9211 9213 ( ecb_equates.asm):00678 L9213 EQU $9213 9235 ( ecb_equates.asm):00679 L9235 EQU $9235 9249 ( ecb_equates.asm):00680 L9249 EQU $9249 924D ( ecb_equates.asm):00681 L924D EQU $924D 9256 ( ecb_equates.asm):00682 L9256 EQU $9256 9262 ( ecb_equates.asm):00683 L9262 EQU $9262 9263 ( ecb_equates.asm):00684 L9263 EQU $9263 926A ( ecb_equates.asm):00685 L926A EQU $926A 927A ( ecb_equates.asm):00686 L927A EQU $927A 927B ( ecb_equates.asm):00687 L927B EQU $927B 9281 ( ecb_equates.asm):00688 L9281 EQU $9281 928E ( ecb_equates.asm):00689 L928E EQU $928E 928F ( ecb_equates.asm):00690 L928F EQU $928F 9298 ( ecb_equates.asm):00691 L9298 EQU $9298 929C ( ecb_equates.asm):00692 L929C EQU $929C 929E ( ecb_equates.asm):00693 L929E EQU $929E 92A0 ( ecb_equates.asm):00694 L92A0 EQU $92A0 92A2 ( ecb_equates.asm):00695 L92A2 EQU $92A2 92A4 ( ecb_equates.asm):00696 L92A4 EQU $92A4 92A6 ( ecb_equates.asm):00697 L92A6 EQU $92A6 92C2 ( ecb_equates.asm):00698 L92C2 EQU $92C2 92DD ( ecb_equates.asm):00699 L92DD EQU $92DD 92E5 ( ecb_equates.asm):00700 L92E5 EQU $92E5 92E9 ( ecb_equates.asm):00701 L92E9 EQU $92E9 92ED ( ecb_equates.asm):00702 L92ED EQU $92ED 92F3 ( ecb_equates.asm):00703 L92F3 EQU $92F3 92F4 ( ecb_equates.asm):00704 L92F4 EQU $92F4 92FC ( ecb_equates.asm):00705 L92FC EQU $92FC 9303 ( ecb_equates.asm):00706 L9303 EQU $9303 9309 ( ecb_equates.asm):00707 L9309 EQU $9309 9317 ( ecb_equates.asm):00708 L9317 EQU $9317 931A ( ecb_equates.asm):00709 L931A EQU $931A 931D ( ecb_equates.asm):00710 L931D EQU $931D 9320 ( ecb_equates.asm):00711 L9320 EQU $9320 932C ( ecb_equates.asm):00712 L932C EQU $932C 9338 ( ecb_equates.asm):00713 L9338 EQU $9338 9349 ( ecb_equates.asm):00714 L9349 EQU $9349 9351 ( ecb_equates.asm):00715 L9351 EQU $9351 9356 ( ecb_equates.asm):00716 L9356 EQU $9356 935B ( ecb_equates.asm):00717 L935B EQU $935B 9366 ( ecb_equates.asm):00718 L9366 EQU $9366 9377 ( ecb_equates.asm):00719 L9377 EQU $9377 938F ( ecb_equates.asm):00720 L938F EQU $938F 939E ( ecb_equates.asm):00721 L939E EQU $939E 93B2 ( ecb_equates.asm):00722 L93B2 EQU $93B2 93B8 ( ecb_equates.asm):00723 L93B8 EQU $93B8 93CE ( ecb_equates.asm):00724 L93CE EQU $93CE 93E8 ( ecb_equates.asm):00725 L93E8 EQU $93E8 93E9 ( ecb_equates.asm):00726 L93E9 EQU $93E9 9420 ( ecb_equates.asm):00727 L9420 EQU $9420 9429 ( ecb_equates.asm):00728 L9429 EQU $9429 9430 ( ecb_equates.asm):00729 L9430 EQU $9430 9432 ( ecb_equates.asm):00730 L9432 EQU $9432 9434 ( ecb_equates.asm):00731 L9434 EQU $9434 9443 ( ecb_equates.asm):00732 L9443 EQU $9443 9444 ( ecb_equates.asm):00733 L9444 EQU $9444 9451 ( ecb_equates.asm):00734 L9451 EQU $9451 945E ( ecb_equates.asm):00735 L945E EQU $945E 946B ( ecb_equates.asm):00736 L946B EQU $946B 946C ( ecb_equates.asm):00737 L946C EQU $946C 946E ( ecb_equates.asm):00738 L946E EQU $946E 947B ( ecb_equates.asm):00739 L947B EQU $947B 948A ( ecb_equates.asm):00740 L948A EQU $948A 948C ( ecb_equates.asm):00741 L948C EQU $948C 948E ( ecb_equates.asm):00742 L948E EQU $948E 9490 ( ecb_equates.asm):00743 L9490 EQU $9490 9492 ( ecb_equates.asm):00744 L9492 EQU $9492 9494 ( ecb_equates.asm):00745 L9494 EQU $9494 949D ( ecb_equates.asm):00746 L949D EQU $949D 94A1 ( ecb_equates.asm):00747 L94A1 EQU $94A1 94B2 ( ecb_equates.asm):00748 L94B2 EQU $94B2 94C1 ( ecb_equates.asm):00749 L94C1 EQU $94C1 94CC ( ecb_equates.asm):00750 L94CC EQU $94CC 94DD ( ecb_equates.asm):00751 L94DD EQU $94DD 94E2 ( ecb_equates.asm):00752 L94E2 EQU $94E2 9502 ( ecb_equates.asm):00753 L9502 EQU $9502 9506 ( ecb_equates.asm):00754 L9506 EQU $9506 950D ( ecb_equates.asm):00755 L950D EQU $950D 9514 ( ecb_equates.asm):00756 L9514 EQU $9514 951B ( ecb_equates.asm):00757 L951B EQU $951B 9522 ( ecb_equates.asm):00758 L9522 EQU $9522 9536 ( ecb_equates.asm):00759 L9536 EQU $9536 953B ( ecb_equates.asm):00760 L953B EQU $953B 9542 ( ecb_equates.asm):00761 L9542 EQU $9542 9552 ( ecb_equates.asm):00762 L9552 EQU $9552 9559 ( ecb_equates.asm):00763 L9559 EQU $9559 955A ( ecb_equates.asm):00764 L955A EQU $955A 955D ( ecb_equates.asm):00765 L955D EQU $955D 956C ( ecb_equates.asm):00766 L956C EQU $956C 9576 ( ecb_equates.asm):00767 L9576 EQU $9576 9578 ( ecb_equates.asm):00768 L9578 EQU $9578 9579 ( ecb_equates.asm):00769 L9579 EQU $9579 957B ( ecb_equates.asm):00770 L957B EQU $957B 9581 ( ecb_equates.asm):00771 L9581 EQU $9581 9598 ( ecb_equates.asm):00772 L9598 EQU $9598 959A ( ecb_equates.asm):00773 L959A EQU $959A 95A2 ( ecb_equates.asm):00774 L95A2 EQU $95A2 95AA ( ecb_equates.asm):00775 L95AA EQU $95AA 95AC ( ecb_equates.asm):00776 L95AC EQU $95AC 95CF ( ecb_equates.asm):00777 L95CF EQU $95CF 95F7 ( ecb_equates.asm):00778 L95F7 EQU $95F7 95FB ( ecb_equates.asm):00779 L95FB EQU $95FB 9600 ( ecb_equates.asm):00780 L9600 EQU $9600 9607 ( ecb_equates.asm):00781 L9607 EQU $9607 9609 ( ecb_equates.asm):00782 L9609 EQU $9609 960F ( ecb_equates.asm):00783 L960F EQU $960F 9616 ( ecb_equates.asm):00784 L9616 EQU $9616 962E ( ecb_equates.asm):00785 L962E EQU $962E 9650 ( ecb_equates.asm):00786 L9650 EQU $9650 966C ( ecb_equates.asm):00787 L966C EQU $966C 966D ( ecb_equates.asm):00788 L966D EQU $966D 967F ( ecb_equates.asm):00789 L967F EQU $967F 9687 ( ecb_equates.asm):00790 L9687 EQU $9687 96BD ( ecb_equates.asm):00791 L96BD EQU $96BD 96CB ( ecb_equates.asm):00792 L96CB EQU $96CB 96D4 ( ecb_equates.asm):00793 L96D4 EQU $96D4 96DB ( ecb_equates.asm):00794 L96DB EQU $96DB 96E6 ( ecb_equates.asm):00795 L96E6 EQU $96E6 96EC ( ecb_equates.asm):00796 L96EC EQU $96EC 9703 ( ecb_equates.asm):00797 L9703 EQU $9703 9706 ( ecb_equates.asm):00798 L9706 EQU $9706 9708 ( ecb_equates.asm):00799 L9708 EQU $9708 970A ( ecb_equates.asm):00800 L970A EQU $970A 970C ( ecb_equates.asm):00801 L970C EQU $970C 970E ( ecb_equates.asm):00802 L970E EQU $970E 9710 ( ecb_equates.asm):00803 L9710 EQU $9710 9714 ( ecb_equates.asm):00804 L9714 EQU $9714 971D ( ecb_equates.asm):00805 L971D EQU $971D 9736 ( ecb_equates.asm):00806 L9736 EQU $9736 973F ( ecb_equates.asm):00807 L973F EQU $973F 9751 ( ecb_equates.asm):00808 L9751 EQU $9751 9752 ( ecb_equates.asm):00809 L9752 EQU $9752 975A ( ecb_equates.asm):00810 L975A EQU $975A 975F ( ecb_equates.asm):00811 L975F EQU $975F 9765 ( ecb_equates.asm):00812 L9765 EQU $9765 979A ( ecb_equates.asm):00813 L979A EQU $979A 979F ( ecb_equates.asm):00814 L979F EQU $979F 97AE ( ecb_equates.asm):00815 L97AE EQU $97AE 97B7 ( ecb_equates.asm):00816 L97B7 EQU $97B7 97C0 ( ecb_equates.asm):00817 L97C0 EQU $97C0 97CA ( ecb_equates.asm):00818 L97CA EQU $97CA 97D3 ( ecb_equates.asm):00819 L97D3 EQU $97D3 97DE ( ecb_equates.asm):00820 L97DE EQU $97DE 97EB ( ecb_equates.asm):00821 L97EB EQU $97EB 9808 ( ecb_equates.asm):00822 L9808 EQU $9808 980C ( ecb_equates.asm):00823 L980C EQU $980C 9816 ( ecb_equates.asm):00824 L9816 EQU $9816 9822 ( ecb_equates.asm):00825 L9822 EQU $9822 9823 ( ecb_equates.asm):00826 L9823 EQU $9823 982E ( ecb_equates.asm):00827 L982E EQU $982E 9831 ( ecb_equates.asm):00828 L9831 EQU $9831 9839 ( ecb_equates.asm):00829 L9839 EQU $9839 983D ( ecb_equates.asm):00830 L983D EQU $983D 983E ( ecb_equates.asm):00831 L983E EQU $983E 9842 ( ecb_equates.asm):00832 L9842 EQU $9842 9843 ( ecb_equates.asm):00833 L9843 EQU $9843 9847 ( ecb_equates.asm):00834 L9847 EQU $9847 9848 ( ecb_equates.asm):00835 L9848 EQU $9848 984C ( ecb_equates.asm):00836 L984C EQU $984C 984D ( ecb_equates.asm):00837 L984D EQU $984D 9851 ( ecb_equates.asm):00838 L9851 EQU $9851 9852 ( ecb_equates.asm):00839 L9852 EQU $9852 985D ( ecb_equates.asm):00840 L985D EQU $985D 9864 ( ecb_equates.asm):00841 L9864 EQU $9864 986E ( ecb_equates.asm):00842 L986E EQU $986E 9873 ( ecb_equates.asm):00843 L9873 EQU $9873 9877 ( ecb_equates.asm):00844 L9877 EQU $9877 9884 ( ecb_equates.asm):00845 L9884 EQU $9884 9890 ( ecb_equates.asm):00846 L9890 EQU $9890 9894 ( ecb_equates.asm):00847 L9894 EQU $9894 989B ( ecb_equates.asm):00848 L989B EQU $989B 98A1 ( ecb_equates.asm):00849 L98A1 EQU $98A1 98A7 ( ecb_equates.asm):00850 L98A7 EQU $98A7 98B1 ( ecb_equates.asm):00851 L98B1 EQU $98B1 98CC ( ecb_equates.asm):00852 L98CC EQU $98CC 98D7 ( ecb_equates.asm):00853 L98D7 EQU $98D7 98E8 ( ecb_equates.asm):00854 L98E8 EQU $98E8 98EB ( ecb_equates.asm):00855 L98EB EQU $98EB 98F2 ( ecb_equates.asm):00856 L98F2 EQU $98F2 990A ( ecb_equates.asm):00857 L990A EQU $990A 9931 ( ecb_equates.asm):00858 L9931 EQU $9931 9934 ( ecb_equates.asm):00859 L9934 EQU $9934 993B ( ecb_equates.asm):00860 L993B EQU $993B 9954 ( ecb_equates.asm):00861 L9954 EQU $9954 9958 ( ecb_equates.asm):00862 L9958 EQU $9958 9969 ( ecb_equates.asm):00863 L9969 EQU $9969 996C ( ecb_equates.asm):00864 L996C EQU $996C 996E ( ecb_equates.asm):00865 L996E EQU $996E 9970 ( ecb_equates.asm):00866 L9970 EQU $9970 9983 ( ecb_equates.asm):00867 L9983 EQU $9983 998C ( ecb_equates.asm):00868 L998C EQU $998C 999E ( ecb_equates.asm):00869 L999E EQU $999E 99A1 ( ecb_equates.asm):00870 L99A1 EQU $99A1 99AC ( ecb_equates.asm):00871 L99AC EQU $99AC 99BA ( ecb_equates.asm):00872 L99BA EQU $99BA 99C6 ( ecb_equates.asm):00873 L99C6 EQU $99C6 99CB ( ecb_equates.asm):00874 L99CB EQU $99CB 99DF ( ecb_equates.asm):00875 L99DF EQU $99DF 99E8 ( ecb_equates.asm):00876 L99E8 EQU $99E8 99EE ( ecb_equates.asm):00877 L99EE EQU $99EE 99F2 ( ecb_equates.asm):00878 L99F2 EQU $99F2 9A09 ( ecb_equates.asm):00879 L9A09 EQU $9A09 9A0B ( ecb_equates.asm):00880 L9A0B EQU $9A0B 9A12 ( ecb_equates.asm):00881 L9A12 EQU $9A12 9A32 ( ecb_equates.asm):00882 L9A32 EQU $9A32 9A37 ( ecb_equates.asm):00883 L9A37 EQU $9A37 9A39 ( ecb_equates.asm):00884 L9A39 EQU $9A39 9A43 ( ecb_equates.asm):00885 L9A43 EQU $9A43 9A5C ( ecb_equates.asm):00886 L9A5C EQU $9A5C 9A6D ( ecb_equates.asm):00887 L9A6D EQU $9A6D 9A8B ( ecb_equates.asm):00888 L9A8B EQU $9A8B 9A9A ( ecb_equates.asm):00889 L9A9A EQU $9A9A 9A9F ( ecb_equates.asm):00890 L9A9F EQU $9A9F 9AAD ( ecb_equates.asm):00891 L9AAD EQU $9AAD 9AAF ( ecb_equates.asm):00892 L9AAF EQU $9AAF 9AB2 ( ecb_equates.asm):00893 L9AB2 EQU $9AB2 9AC0 ( ecb_equates.asm):00894 L9AC0 EQU $9AC0 9AC3 ( ecb_equates.asm):00895 L9AC3 EQU $9AC3 9ACD ( ecb_equates.asm):00896 L9ACD EQU $9ACD 9AD0 ( ecb_equates.asm):00897 L9AD0 EQU $9AD0 9AE7 ( ecb_equates.asm):00898 L9AE7 EQU $9AE7 9AEB ( ecb_equates.asm):00899 L9AEB EQU $9AEB 9AF2 ( ecb_equates.asm):00900 L9AF2 EQU $9AF2 9AFA ( ecb_equates.asm):00901 L9AFA EQU $9AFA 9AFF ( ecb_equates.asm):00902 L9AFF EQU $9AFF 9B15 ( ecb_equates.asm):00903 L9B15 EQU $9B15 9B18 ( ecb_equates.asm):00904 L9B18 EQU $9B18 9B1F ( ecb_equates.asm):00905 L9B1F EQU $9B1F 9B22 ( ecb_equates.asm):00906 L9B22 EQU $9B22 9B2B ( ecb_equates.asm):00907 L9B2B EQU $9B2B 9B49 ( ecb_equates.asm):00908 L9B49 EQU $9B49 9B57 ( ecb_equates.asm):00909 L9B57 EQU $9B57 9B5A ( ecb_equates.asm):00910 L9B5A EQU $9B5A 9B5F ( ecb_equates.asm):00911 L9B5F EQU $9B5F 9B64 ( ecb_equates.asm):00912 L9B64 EQU $9B64 9B72 ( ecb_equates.asm):00913 L9B72 EQU $9B72 9B80 ( ecb_equates.asm):00914 L9B80 EQU $9B80 9B83 ( ecb_equates.asm):00915 L9B83 EQU $9B83 9B88 ( ecb_equates.asm):00916 L9B88 EQU $9B88 9B8C ( ecb_equates.asm):00917 L9B8C EQU $9B8C 9B97 ( ecb_equates.asm):00918 L9B97 EQU $9B97 9B98 ( ecb_equates.asm):00919 L9B98 EQU $9B98 9B9A ( ecb_equates.asm):00920 L9B9A EQU $9B9A 9BAC ( ecb_equates.asm):00921 L9BAC EQU $9BAC 9BBE ( ecb_equates.asm):00922 L9BBE EQU $9BBE 9BC8 ( ecb_equates.asm):00923 L9BC8 EQU $9BC8 9BE2 ( ecb_equates.asm):00924 L9BE2 EQU $9BE2 9BEB ( ecb_equates.asm):00925 L9BEB EQU $9BEB 9BEE ( ecb_equates.asm):00926 L9BEE EQU $9BEE 9BF1 ( ecb_equates.asm):00927 L9BF1 EQU $9BF1 9BF2 ( ecb_equates.asm):00928 L9BF2 EQU $9BF2 9BF7 ( ecb_equates.asm):00929 L9BF7 EQU $9BF7 9BFC ( ecb_equates.asm):00930 L9BFC EQU $9BFC 9C01 ( ecb_equates.asm):00931 L9C01 EQU $9C01 9C0A ( ecb_equates.asm):00932 L9C0A EQU $9C0A 9C1B ( ecb_equates.asm):00933 L9C1B EQU $9C1B 9C27 ( ecb_equates.asm):00934 L9C27 EQU $9C27 9C3E ( ecb_equates.asm):00935 L9C3E EQU $9C3E 9C5A ( ecb_equates.asm):00936 L9C5A EQU $9C5A 9C5B ( ecb_equates.asm):00937 L9C5B EQU $9C5B 9C62 ( ecb_equates.asm):00938 L9C62 EQU $9C62 9C7A ( ecb_equates.asm):00939 L9C7A EQU $9C7A 9C92 ( ecb_equates.asm):00940 L9C92 EQU $9C92 9CC6 ( ecb_equates.asm):00941 L9CC6 EQU $9CC6 9CCB ( ecb_equates.asm):00942 L9CCB EQU $9CCB 9CD1 ( ecb_equates.asm):00943 L9CD1 EQU $9CD1 9CD3 ( ecb_equates.asm):00944 L9CD3 EQU $9CD3 9CDD ( ecb_equates.asm):00945 L9CDD EQU $9CDD 9CF4 ( ecb_equates.asm):00946 L9CF4 EQU $9CF4 9CFC ( ecb_equates.asm):00947 L9CFC EQU $9CFC 9D21 ( ecb_equates.asm):00948 L9D21 EQU $9D21 9D4C ( ecb_equates.asm):00949 L9D4C EQU $9D4C 9D4F ( ecb_equates.asm):00950 L9D4F EQU $9D4F 9D57 ( ecb_equates.asm):00951 L9D57 EQU $9D57 9D59 ( ecb_equates.asm):00952 L9D59 EQU $9D59 9D61 ( ecb_equates.asm):00953 L9D61 EQU $9D61 9D69 ( ecb_equates.asm):00954 L9D69 EQU $9D69 9D6C ( ecb_equates.asm):00955 L9D6C EQU $9D6C 9D6D ( ecb_equates.asm):00956 L9D6D EQU $9D6D 9D72 ( ecb_equates.asm):00957 L9D72 EQU $9D72 9D7B ( ecb_equates.asm):00958 L9D7B EQU $9D7B 9D82 ( ecb_equates.asm):00959 L9D82 EQU $9D82 9D83 ( ecb_equates.asm):00960 L9D83 EQU $9D83 9D87 ( ecb_equates.asm):00961 L9D87 EQU $9D87 9D8C ( ecb_equates.asm):00962 L9D8C EQU $9D8C 9D8F ( ecb_equates.asm):00963 L9D8F EQU $9D8F 9D92 ( ecb_equates.asm):00964 L9D92 EQU $9D92 9D98 ( ecb_equates.asm):00965 L9D98 EQU $9D98 9DA9 ( ecb_equates.asm):00966 L9DA9 EQU $9DA9 9DB6 ( ecb_equates.asm):00967 L9DB6 EQU $9DB6 9DBD ( ecb_equates.asm):00968 L9DBD EQU $9DBD 9DC3 ( ecb_equates.asm):00969 L9DC3 EQU $9DC3 9DC4 ( ecb_equates.asm):00970 L9DC4 EQU $9DC4 9DC7 ( ecb_equates.asm):00971 L9DC7 EQU $9DC7 9DC8 ( ecb_equates.asm):00972 L9DC8 EQU $9DC8 9DCB ( ecb_equates.asm):00973 L9DCB EQU $9DCB 9DDC ( ecb_equates.asm):00974 L9DDC EQU $9DDC 9DE8 ( ecb_equates.asm):00975 L9DE8 EQU $9DE8 9DF2 ( ecb_equates.asm):00976 L9DF2 EQU $9DF2 9DFC ( ecb_equates.asm):00977 L9DFC EQU $9DFC 9E05 ( ecb_equates.asm):00978 L9E05 EQU $9E05 9E0D ( ecb_equates.asm):00979 L9E0D EQU $9E0D 9E21 ( ecb_equates.asm):00980 L9E21 EQU $9E21 9E2B ( ecb_equates.asm):00981 L9E2B EQU $9E2B 9E32 ( ecb_equates.asm):00982 L9E32 EQU $9E32 9E56 ( ecb_equates.asm):00983 L9E56 EQU $9E56 9E5B ( ecb_equates.asm):00984 L9E5B EQU $9E5B 9E5E ( ecb_equates.asm):00985 L9E5E EQU $9E5E 9E69 ( ecb_equates.asm):00986 L9E69 EQU $9E69 9E6A ( ecb_equates.asm):00987 L9E6A EQU $9E6A 9E78 ( ecb_equates.asm):00988 L9E78 EQU $9E78 9E79 ( ecb_equates.asm):00989 L9E79 EQU $9E79 9E7D ( ecb_equates.asm):00990 L9E7D EQU $9E7D 9E81 ( ecb_equates.asm):00991 L9E81 EQU $9E81 9E85 ( ecb_equates.asm):00992 L9E85 EQU $9E85 9E89 ( ecb_equates.asm):00993 L9E89 EQU $9E89 9E8D ( ecb_equates.asm):00994 L9E8D EQU $9E8D 9E91 ( ecb_equates.asm):00995 L9E91 EQU $9E91 9E95 ( ecb_equates.asm):00996 L9E95 EQU $9E95 9E99 ( ecb_equates.asm):00997 L9E99 EQU $9E99 9EA3 ( ecb_equates.asm):00998 L9EA3 EQU $9EA3 9EDF ( ecb_equates.asm):00999 L9EDF EQU $9EDF 9EE9 ( ecb_equates.asm):01000 L9EE9 EQU $9EE9 9EFD ( ecb_equates.asm):01001 L9EFD EQU $9EFD 9F11 ( ecb_equates.asm):01002 L9F11 EQU $9F11 9F31 ( ecb_equates.asm):01003 L9F31 EQU $9F31 9F5B ( ecb_equates.asm):01004 L9F5B EQU $9F5B 9F66 ( ecb_equates.asm):01005 L9F66 EQU $9F66 9F68 ( ecb_equates.asm):01006 L9F68 EQU $9F68 9F7A ( ecb_equates.asm):01007 L9F7A EQU $9F7A 9F85 ( ecb_equates.asm):01008 L9F85 EQU $9F85 9F87 ( ecb_equates.asm):01009 L9F87 EQU $9F87 9F8F ( ecb_equates.asm):01010 L9F8F EQU $9F8F 9F9A ( ecb_equates.asm):01011 L9F9A EQU $9F9A 9FA3 ( ecb_equates.asm):01012 L9FA3 EQU $9FA3 9FA6 ( ecb_equates.asm):01013 L9FA6 EQU $9FA6 9FA7 ( ecb_equates.asm):01014 L9FA7 EQU $9FA7 9FB4 ( ecb_equates.asm):01015 L9FB4 EQU $9FB4 9FB5 ( ecb_equates.asm):01016 L9FB5 EQU $9FB5 9FD4 ( ecb_equates.asm):01017 L9FD4 EQU $9FD4 9FDF ( ecb_equates.asm):01018 L9FDF EQU $9FDF 9FE2 ( ecb_equates.asm):01019 L9FE2 EQU $9FE2 9FF8 ( ecb_equates.asm):01020 L9FF8 EQU $9FF8 A00E ( ecb_equates.asm):01021 LA00E EQU $A00E A02A ( ecb_equates.asm):01022 LA02A EQU $A02A A056 ( ecb_equates.asm):01023 LA056 EQU $A056 A05E ( ecb_equates.asm):01024 LA05E EQU $A05E A06E ( ecb_equates.asm):01025 LA06E EQU $A06E A070 ( ecb_equates.asm):01026 LA070 EQU $A070 A072 ( ecb_equates.asm):01027 LA072 EQU $A072 A077 ( ecb_equates.asm):01028 LA077 EQU $A077 A084 ( ecb_equates.asm):01029 LA084 EQU $A084 A093 ( ecb_equates.asm):01030 LA093 EQU $A093 A0B6 ( ecb_equates.asm):01031 LA0B6 EQU $A0B6 A0C0 ( ecb_equates.asm):01032 LA0C0 EQU $A0C0 A0CE ( ecb_equates.asm):01033 LA0CE EQU $A0CE A0E2 ( ecb_equates.asm):01034 LA0E2 EQU $A0E2 A0F3 ( ecb_equates.asm):01035 LA0F3 EQU $A0F3 A0FC ( ecb_equates.asm):01036 LA0FC EQU $A0FC A102 ( ecb_equates.asm):01037 LA102 EQU $A102 A108 ( ecb_equates.asm):01038 LA108 EQU $A108 A10D ( ecb_equates.asm):01039 LA10D EQU $A10D A123 ( ecb_equates.asm):01040 LA123 EQU $A123 A13D ( ecb_equates.asm):01041 LA13D EQU $A13D A13E ( ecb_equates.asm):01042 LA13E EQU $A13E A140 ( ecb_equates.asm):01043 LA140 EQU $A140 A142 ( ecb_equates.asm):01044 LA142 EQU $A142 A143 ( ecb_equates.asm):01045 LA143 EQU $A143 A145 ( ecb_equates.asm):01046 LA145 EQU $A145 A147 ( ecb_equates.asm):01047 LA147 EQU $A147 A156 ( ecb_equates.asm):01048 LA156 EQU $A156 A157 ( ecb_equates.asm):01049 LA157 EQU $A157 A165 ( ecb_equates.asm):01050 LA165 EQU $A165 A166 ( ecb_equates.asm):01051 LA166 EQU $A166 A16F ( ecb_equates.asm):01052 LA16F EQU $A16F A171 ( ecb_equates.asm):01053 LA171 EQU $A171 A176 ( ecb_equates.asm):01054 LA176 EQU $A176 A17B ( ecb_equates.asm):01055 LA17B EQU $A17B A185 ( ecb_equates.asm):01056 LA185 EQU $A185 A186 ( ecb_equates.asm):01057 LA186 EQU $A186 A190 ( ecb_equates.asm):01058 LA190 EQU $A190 A197 ( ecb_equates.asm):01059 LA197 EQU $A197 A199 ( ecb_equates.asm):01060 LA199 EQU $A199 A1AB ( ecb_equates.asm):01061 LA1AB EQU $A1AB A1AE ( ecb_equates.asm):01062 LA1AE EQU $A1AE A1B1 ( ecb_equates.asm):01063 LA1B1 EQU $A1B1 A1B3 ( ecb_equates.asm):01064 LA1B3 EQU $A1B3 A1BF ( ecb_equates.asm):01065 LA1BF EQU $A1BF A1C1 ( ecb_equates.asm):01066 LA1C1 EQU $A1C1 A1D9 ( ecb_equates.asm):01067 LA1D9 EQU $A1D9 A1F4 ( ecb_equates.asm):01068 LA1F4 EQU $A1F4 A20C ( ecb_equates.asm):01069 LA20C EQU $A20C A21A ( ecb_equates.asm):01070 LA21A EQU $A21A A220 ( ecb_equates.asm):01071 LA220 EQU $A220 A22B ( ecb_equates.asm):01072 LA22B EQU $A22B A22C ( ecb_equates.asm):01073 LA22C EQU $A22C A22E ( ecb_equates.asm):01074 LA22E EQU $A22E A238 ( ecb_equates.asm):01075 LA238 EQU $A238 A23A ( ecb_equates.asm):01076 LA23A EQU $A23A A244 ( ecb_equates.asm):01077 LA244 EQU $A244 A245 ( ecb_equates.asm):01078 LA245 EQU $A245 A247 ( ecb_equates.asm):01079 LA247 EQU $A247 A25D ( ecb_equates.asm):01080 LA25D EQU $A25D A264 ( ecb_equates.asm):01081 LA264 EQU $A264 A26A ( ecb_equates.asm):01082 LA26A EQU $A26A A29E ( ecb_equates.asm):01083 LA29E EQU $A29E A2A6 ( ecb_equates.asm):01084 LA2A6 EQU $A2A6 A2A8 ( ecb_equates.asm):01085 LA2A8 EQU $A2A8 A2AA ( ecb_equates.asm):01086 LA2AA EQU $A2AA A2BF ( ecb_equates.asm):01087 LA2BF EQU $A2BF A2C3 ( ecb_equates.asm):01088 LA2C3 EQU $A2C3 A2D0 ( ecb_equates.asm):01089 LA2D0 EQU $A2D0 A2ED ( ecb_equates.asm):01090 LA2ED EQU $A2ED A2F3 ( ecb_equates.asm):01091 LA2F3 EQU $A2F3 A2FB ( ecb_equates.asm):01092 LA2FB EQU $A2FB A2FD ( ecb_equates.asm):01093 LA2FD EQU $A2FD A302 ( ecb_equates.asm):01094 LA302 EQU $A302 A305 ( ecb_equates.asm):01095 LA305 EQU $A305 A30A ( ecb_equates.asm):01096 LA30A EQU $A30A A31D ( ecb_equates.asm):01097 LA31D EQU $A31D A323 ( ecb_equates.asm):01098 LA323 EQU $A323 A32F ( ecb_equates.asm):01099 LA32F EQU $A32F A340 ( ecb_equates.asm):01100 LA340 EQU $A340 A342 ( ecb_equates.asm):01101 LA342 EQU $A342 A344 ( ecb_equates.asm):01102 LA344 EQU $A344 A34E ( ecb_equates.asm):01103 LA34E EQU $A34E A35D ( ecb_equates.asm):01104 LA35D EQU $A35D A35F ( ecb_equates.asm):01105 LA35F EQU $A35F A373 ( ecb_equates.asm):01106 LA373 EQU $A373 A37C ( ecb_equates.asm):01107 LA37C EQU $A37C A384 ( ecb_equates.asm):01108 LA384 EQU $A384 A38D ( ecb_equates.asm):01109 LA38D EQU $A38D A390 ( ecb_equates.asm):01110 LA390 EQU $A390 A39A ( ecb_equates.asm):01111 LA39A EQU $A39A A3B4 ( ecb_equates.asm):01112 LA3B4 EQU $A3B4 A3B8 ( ecb_equates.asm):01113 LA3B8 EQU $A3B8 A3C2 ( ecb_equates.asm):01114 LA3C2 EQU $A3C2 A3C6 ( ecb_equates.asm):01115 LA3C6 EQU $A3C6 A3C8 ( ecb_equates.asm):01116 LA3C8 EQU $A3C8 A3CC ( ecb_equates.asm):01117 LA3CC EQU $A3CC A3CD ( ecb_equates.asm):01118 LA3CD EQU $A3CD A3D9 ( ecb_equates.asm):01119 LA3D9 EQU $A3D9 A3E8 ( ecb_equates.asm):01120 LA3E8 EQU $A3E8 A3ED ( ecb_equates.asm):01121 LA3ED EQU $A3ED A3FB ( ecb_equates.asm):01122 LA3FB EQU $A3FB A400 ( ecb_equates.asm):01123 LA400 EQU $A400 A403 ( ecb_equates.asm):01124 LA403 EQU $A403 A406 ( ecb_equates.asm):01125 LA406 EQU $A406 A415 ( ecb_equates.asm):01126 LA415 EQU $A415 A41B ( ecb_equates.asm):01127 LA41B EQU $A41B A426 ( ecb_equates.asm):01128 LA426 EQU $A426 A429 ( ecb_equates.asm):01129 LA429 EQU $A429 A42D ( ecb_equates.asm):01130 LA42D EQU $A42D A444 ( ecb_equates.asm):01131 LA444 EQU $A444 A449 ( ecb_equates.asm):01132 LA449 EQU $A449 A44B ( ecb_equates.asm):01133 LA44B EQU $A44B A469 ( ecb_equates.asm):01134 LA469 EQU $A469 A478 ( ecb_equates.asm):01135 LA478 EQU $A478 A48C ( ecb_equates.asm):01136 LA48C EQU $A48C A491 ( ecb_equates.asm):01137 LA491 EQU $A491 A4BF ( ecb_equates.asm):01138 LA4BF EQU $A4BF A4C8 ( ecb_equates.asm):01139 LA4C8 EQU $A4C8 A4CD ( ecb_equates.asm):01140 LA4CD EQU $A4CD A4D0 ( ecb_equates.asm):01141 LA4D0 EQU $A4D0 A4D8 ( ecb_equates.asm):01142 LA4D8 EQU $A4D8 A4F8 ( ecb_equates.asm):01143 LA4F8 EQU $A4F8 A4FB ( ecb_equates.asm):01144 LA4FB EQU $A4FB A4FE ( ecb_equates.asm):01145 LA4FE EQU $A4FE A505 ( ecb_equates.asm):01146 LA505 EQU $A505 A511 ( ecb_equates.asm):01147 LA511 EQU $A511 A52E ( ecb_equates.asm):01148 LA52E EQU $A52E A53B ( ecb_equates.asm):01149 LA53B EQU $A53B A545 ( ecb_equates.asm):01150 LA545 EQU $A545 A549 ( ecb_equates.asm):01151 LA549 EQU $A549 A554 ( ecb_equates.asm):01152 LA554 EQU $A554 A56B ( ecb_equates.asm):01153 LA56B EQU $A56B A578 ( ecb_equates.asm):01154 LA578 EQU $A578 A57F ( ecb_equates.asm):01155 LA57F EQU $A57F A598 ( ecb_equates.asm):01156 LA598 EQU $A598 A59A ( ecb_equates.asm):01157 LA59A EQU $A59A A5A1 ( ecb_equates.asm):01158 LA5A1 EQU $A5A1 A5A2 ( ecb_equates.asm):01159 LA5A2 EQU $A5A2 A5A5 ( ecb_equates.asm):01160 LA5A5 EQU $A5A5 A5AB ( ecb_equates.asm):01161 LA5AB EQU $A5AB A5AE ( ecb_equates.asm):01162 LA5AE EQU $A5AE A5C4 ( ecb_equates.asm):01163 LA5C4 EQU $A5C4 A5C5 ( ecb_equates.asm):01164 LA5C5 EQU $A5C5 A5C7 ( ecb_equates.asm):01165 LA5C7 EQU $A5C7 A5C9 ( ecb_equates.asm):01166 LA5C9 EQU $A5C9 A5DA ( ecb_equates.asm):01167 LA5DA EQU $A5DA A5E4 ( ecb_equates.asm):01168 LA5E4 EQU $A5E4 A5E8 ( ecb_equates.asm):01169 LA5E8 EQU $A5E8 A603 ( ecb_equates.asm):01170 LA603 EQU $A603 A616 ( ecb_equates.asm):01171 LA616 EQU $A616 A619 ( ecb_equates.asm):01172 LA619 EQU $A619 A61C ( ecb_equates.asm):01173 LA61C EQU $A61C A61F ( ecb_equates.asm):01174 LA61F EQU $A61F A624 ( ecb_equates.asm):01175 LA624 EQU $A624 A635 ( ecb_equates.asm):01176 LA635 EQU $A635 A644 ( ecb_equates.asm):01177 LA644 EQU $A644 A648 ( ecb_equates.asm):01178 LA648 EQU $A648 A650 ( ecb_equates.asm):01179 LA650 EQU $A650 A652 ( ecb_equates.asm):01180 LA652 EQU $A652 A657 ( ecb_equates.asm):01181 LA657 EQU $A657 A658 ( ecb_equates.asm):01182 LA658 EQU $A658 A65C ( ecb_equates.asm):01183 LA65C EQU $A65C A65F ( ecb_equates.asm):01184 LA65F EQU $A65F A681 ( ecb_equates.asm):01185 LA681 EQU $A681 A686 ( ecb_equates.asm):01186 LA686 EQU $A686 A696 ( ecb_equates.asm):01187 LA696 EQU $A696 A6A6 ( ecb_equates.asm):01188 LA6A6 EQU $A6A6 A6B4 ( ecb_equates.asm):01189 LA6B4 EQU $A6B4 A6CB ( ecb_equates.asm):01190 LA6CB EQU $A6CB A6D0 ( ecb_equates.asm):01191 LA6D0 EQU $A6D0 A6D1 ( ecb_equates.asm):01192 LA6D1 EQU $A6D1 A6D9 ( ecb_equates.asm):01193 LA6D9 EQU $A6D9 A6DF ( ecb_equates.asm):01194 LA6DF EQU $A6DF A6E5 ( ecb_equates.asm):01195 LA6E5 EQU $A6E5 A6ED ( ecb_equates.asm):01196 LA6ED EQU $A6ED A6F3 ( ecb_equates.asm):01197 LA6F3 EQU $A6F3 A6F8 ( ecb_equates.asm):01198 LA6F8 EQU $A6F8 A700 ( ecb_equates.asm):01199 LA700 EQU $A700 A701 ( ecb_equates.asm):01200 LA701 EQU $A701 A705 ( ecb_equates.asm):01201 LA705 EQU $A705 A712 ( ecb_equates.asm):01202 LA712 EQU $A712 A72B ( ecb_equates.asm):01203 LA72B EQU $A72B A73B ( ecb_equates.asm):01204 LA73B EQU $A73B A744 ( ecb_equates.asm):01205 LA744 EQU $A744 A746 ( ecb_equates.asm):01206 LA746 EQU $A746 A749 ( ecb_equates.asm):01207 LA749 EQU $A749 A74D ( ecb_equates.asm):01208 LA74D EQU $A74D A755 ( ecb_equates.asm):01209 LA755 EQU $A755 A75D ( ecb_equates.asm):01210 LA75D EQU $A75D A763 ( ecb_equates.asm):01211 LA763 EQU $A763 A767 ( ecb_equates.asm):01212 LA767 EQU $A767 A76C ( ecb_equates.asm):01213 LA76C EQU $A76C A773 ( ecb_equates.asm):01214 LA773 EQU $A773 A777 ( ecb_equates.asm):01215 LA777 EQU $A777 A782 ( ecb_equates.asm):01216 LA782 EQU $A782 A784 ( ecb_equates.asm):01217 LA784 EQU $A784 A788 ( ecb_equates.asm):01218 LA788 EQU $A788 A792 ( ecb_equates.asm):01219 LA792 EQU $A792 A797 ( ecb_equates.asm):01220 LA797 EQU $A797 A79B ( ecb_equates.asm):01221 LA79B EQU $A79B A7A7 ( ecb_equates.asm):01222 LA7A7 EQU $A7A7 A7AD ( ecb_equates.asm):01223 LA7AD EQU $A7AD A7B1 ( ecb_equates.asm):01224 LA7B1 EQU $A7B1 A7BA ( ecb_equates.asm):01225 LA7BA EQU $A7BA A7CA ( ecb_equates.asm):01226 LA7CA EQU $A7CA A7D1 ( ecb_equates.asm):01227 LA7D1 EQU $A7D1 A7D3 ( ecb_equates.asm):01228 LA7D3 EQU $A7D3 A7DE ( ecb_equates.asm):01229 LA7DE EQU $A7DE A7E5 ( ecb_equates.asm):01230 LA7E5 EQU $A7E5 A7E7 ( ecb_equates.asm):01231 LA7E7 EQU $A7E7 A7E9 ( ecb_equates.asm):01232 LA7E9 EQU $A7E9 A7F0 ( ecb_equates.asm):01233 LA7F0 EQU $A7F0 A800 ( ecb_equates.asm):01234 LA800 EQU $A800 A805 ( ecb_equates.asm):01235 LA805 EQU $A805 A81C ( ecb_equates.asm):01236 LA81C EQU $A81C A824 ( ecb_equates.asm):01237 LA824 EQU $A824 A828 ( ecb_equates.asm):01238 LA828 EQU $A828 A82A ( ecb_equates.asm):01239 LA82A EQU $A82A A82E ( ecb_equates.asm):01240 LA82E EQU $A82E A83B ( ecb_equates.asm):01241 LA83B EQU $A83B A848 ( ecb_equates.asm):01242 LA848 EQU $A848 A855 ( ecb_equates.asm):01243 LA855 EQU $A855 A85C ( ecb_equates.asm):01244 LA85C EQU $A85C A895 ( ecb_equates.asm):01245 LA895 EQU $A895 A89C ( ecb_equates.asm):01246 LA89C EQU $A89C A89D ( ecb_equates.asm):01247 LA89D EQU $A89D A8A6 ( ecb_equates.asm):01248 LA8A6 EQU $A8A6 A8AC ( ecb_equates.asm):01249 LA8AC EQU $A8AC A8C1 ( ecb_equates.asm):01250 LA8C1 EQU $A8C1 A8C4 ( ecb_equates.asm):01251 LA8C4 EQU $A8C4 A8D5 ( ecb_equates.asm):01252 LA8D5 EQU $A8D5 A8EE ( ecb_equates.asm):01253 LA8EE EQU $A8EE A909 ( ecb_equates.asm):01254 LA909 EQU $A909 A90A ( ecb_equates.asm):01255 LA90A EQU $A90A A90D ( ecb_equates.asm):01256 LA90D EQU $A90D A925 ( ecb_equates.asm):01257 LA925 EQU $A925 A928 ( ecb_equates.asm):01258 LA928 EQU $A928 A92D ( ecb_equates.asm):01259 LA92D EQU $A92D A92F ( ecb_equates.asm):01260 LA92F EQU $A92F A937 ( ecb_equates.asm):01261 LA937 EQU $A937 A93F ( ecb_equates.asm):01262 LA93F EQU $A93F A942 ( ecb_equates.asm):01263 LA942 EQU $A942 A948 ( ecb_equates.asm):01264 LA948 EQU $A948 A951 ( ecb_equates.asm):01265 LA951 EQU $A951 A964 ( ecb_equates.asm):01266 LA964 EQU $A964 A974 ( ecb_equates.asm):01267 LA974 EQU $A974 A976 ( ecb_equates.asm):01268 LA976 EQU $A976 A984 ( ecb_equates.asm):01269 LA984 EQU $A984 A985 ( ecb_equates.asm):01270 LA985 EQU $A985 A987 ( ecb_equates.asm):01271 LA987 EQU $A987 A98C ( ecb_equates.asm):01272 LA98C EQU $A98C A9A2 ( ecb_equates.asm):01273 LA9A2 EQU $A9A2 A9A7 ( ecb_equates.asm):01274 LA9A7 EQU $A9A7 A9B0 ( ecb_equates.asm):01275 LA9B0 EQU $A9B0 A9BB ( ecb_equates.asm):01276 LA9BB EQU $A9BB A9C5 ( ecb_equates.asm):01277 LA9C5 EQU $A9C5 A9D4 ( ecb_equates.asm):01278 LA9D4 EQU $A9D4 A9E5 ( ecb_equates.asm):01279 LA9E5 EQU $A9E5 A9EB ( ecb_equates.asm):01280 LA9EB EQU $A9EB A9EE ( ecb_equates.asm):01281 LA9EE EQU $A9EE A9FF ( ecb_equates.asm):01282 LA9FF EQU $A9FF AA12 ( ecb_equates.asm):01283 LAA12 EQU $AA12 AA24 ( ecb_equates.asm):01284 LAA24 EQU $AA24 AA28 ( ecb_equates.asm):01285 LAA28 EQU $AA28 AA29 ( ecb_equates.asm):01286 LAA29 EQU $AA29 AA51 ( ecb_equates.asm):01287 LAA51 EQU $AA51 AA66 ( ecb_equates.asm):01288 LAA66 EQU $AA66 AB1A ( ecb_equates.asm):01289 LAB1A EQU $AB1A AB67 ( ecb_equates.asm):01290 LAB67 EQU $AB67 ABAF ( ecb_equates.asm):01291 LABAF EQU $ABAF ABE1 ( ecb_equates.asm):01292 LABE1 EQU $ABE1 ABE8 ( ecb_equates.asm):01293 LABE8 EQU $ABE8 ABED ( ecb_equates.asm):01294 LABED EQU $ABED ABEE ( ecb_equates.asm):01295 LABEE EQU $ABEE ABF2 ( ecb_equates.asm):01296 LABF2 EQU $ABF2 ABF9 ( ecb_equates.asm):01297 LABF9 EQU $ABF9 ABFB ( ecb_equates.asm):01298 LABFB EQU $ABFB AC16 ( ecb_equates.asm):01299 LAC16 EQU $AC16 AC1A ( ecb_equates.asm):01300 LAC1A EQU $AC1A AC1E ( ecb_equates.asm):01301 LAC1E EQU $AC1E AC20 ( ecb_equates.asm):01302 LAC20 EQU $AC20 AC28 ( ecb_equates.asm):01303 LAC28 EQU $AC28 AC32 ( ecb_equates.asm):01304 LAC32 EQU $AC32 AC33 ( ecb_equates.asm):01305 LAC33 EQU $AC33 AC37 ( ecb_equates.asm):01306 LAC37 EQU $AC37 AC44 ( ecb_equates.asm):01307 LAC44 EQU $AC44 AC46 ( ecb_equates.asm):01308 LAC46 EQU $AC46 AC49 ( ecb_equates.asm):01309 LAC49 EQU $AC49 AC60 ( ecb_equates.asm):01310 LAC60 EQU $AC60 AC65 ( ecb_equates.asm):01311 LAC65 EQU $AC65 AC68 ( ecb_equates.asm):01312 LAC68 EQU $AC68 AC73 ( ecb_equates.asm):01313 LAC73 EQU $AC73 AC76 ( ecb_equates.asm):01314 LAC76 EQU $AC76 AC7C ( ecb_equates.asm):01315 LAC7C EQU $AC7C AC9D ( ecb_equates.asm):01316 LAC9D EQU $AC9D ACA0 ( ecb_equates.asm):01317 LACA0 EQU $ACA0 ACA5 ( ecb_equates.asm):01318 LACA5 EQU $ACA5 ACA8 ( ecb_equates.asm):01319 LACA8 EQU $ACA8 ACC0 ( ecb_equates.asm):01320 LACC0 EQU $ACC0 ACC8 ( ecb_equates.asm):01321 LACC8 EQU $ACC8 ACDD ( ecb_equates.asm):01322 LACDD EQU $ACDD ACE9 ( ecb_equates.asm):01323 LACE9 EQU $ACE9 ACEF ( ecb_equates.asm):01324 LACEF EQU $ACEF ACF1 ( ecb_equates.asm):01325 LACF1 EQU $ACF1 ACF7 ( ecb_equates.asm):01326 LACF7 EQU $ACF7 AD01 ( ecb_equates.asm):01327 LAD01 EQU $AD01 AD05 ( ecb_equates.asm):01328 LAD05 EQU $AD05 AD12 ( ecb_equates.asm):01329 LAD12 EQU $AD12 AD14 ( ecb_equates.asm):01330 LAD14 EQU $AD14 AD16 ( ecb_equates.asm):01331 LAD16 EQU $AD16 AD19 ( ecb_equates.asm):01332 LAD19 EQU $AD19 AD21 ( ecb_equates.asm):01333 LAD21 EQU $AD21 AD26 ( ecb_equates.asm):01334 LAD26 EQU $AD26 AD33 ( ecb_equates.asm):01335 LAD33 EQU $AD33 AD3F ( ecb_equates.asm):01336 LAD3F EQU $AD3F AD43 ( ecb_equates.asm):01337 LAD43 EQU $AD43 AD59 ( ecb_equates.asm):01338 LAD59 EQU $AD59 AD7F ( ecb_equates.asm):01339 LAD7F EQU $AD7F AD90 ( ecb_equates.asm):01340 LAD90 EQU $AD90 AD9E ( ecb_equates.asm):01341 LAD9E EQU $AD9E ADB1 ( ecb_equates.asm):01342 LADB1 EQU $ADB1 ADB4 ( ecb_equates.asm):01343 LADB4 EQU $ADB4 ADC0 ( ecb_equates.asm):01344 LADC0 EQU $ADC0 ADC4 ( ecb_equates.asm):01345 LADC4 EQU $ADC4 ADC6 ( ecb_equates.asm):01346 LADC6 EQU $ADC6 ADD4 ( ecb_equates.asm):01347 LADD4 EQU $ADD4 ADDC ( ecb_equates.asm):01348 LADDC EQU $ADDC ADE8 ( ecb_equates.asm):01349 LADE8 EQU $ADE8 ADEB ( ecb_equates.asm):01350 LADEB EQU $ADEB ADF0 ( ecb_equates.asm):01351 LADF0 EQU $ADF0 ADF4 ( ecb_equates.asm):01352 LADF4 EQU $ADF4 ADFA ( ecb_equates.asm):01353 LADFA EQU $ADFA ADFB ( ecb_equates.asm):01354 LADFB EQU $ADFB AE0B ( ecb_equates.asm):01355 LAE0B EQU $AE0B AE11 ( ecb_equates.asm):01356 LAE11 EQU $AE11 AE15 ( ecb_equates.asm):01357 LAE15 EQU $AE15 AE22 ( ecb_equates.asm):01358 LAE22 EQU $AE22 AE40 ( ecb_equates.asm):01359 LAE40 EQU $AE40 AE5A ( ecb_equates.asm):01360 LAE5A EQU $AE5A AE6F ( ecb_equates.asm):01361 LAE6F EQU $AE6F AE72 ( ecb_equates.asm):01362 LAE72 EQU $AE72 AE88 ( ecb_equates.asm):01363 LAE88 EQU $AE88 AE9F ( ecb_equates.asm):01364 LAE9F EQU $AE9F AEA4 ( ecb_equates.asm):01365 LAEA4 EQU $AEA4 AEB6 ( ecb_equates.asm):01366 LAEB6 EQU $AEB6 AEBB ( ecb_equates.asm):01367 LAEBB EQU $AEBB AEBF ( ecb_equates.asm):01368 LAEBF EQU $AEBF AED2 ( ecb_equates.asm):01369 LAED2 EQU $AED2 AED7 ( ecb_equates.asm):01370 LAED7 EQU $AED7 AEDA ( ecb_equates.asm):01371 LAEDA EQU $AEDA AEE7 ( ecb_equates.asm):01372 LAEE7 EQU $AEE7 AEE8 ( ecb_equates.asm):01373 LAEE8 EQU $AEE8 AEEA ( ecb_equates.asm):01374 LAEEA EQU $AEEA AEEB ( ecb_equates.asm):01375 LAEEB EQU $AEEB AEF1 ( ecb_equates.asm):01376 LAEF1 EQU $AEF1 AEF7 ( ecb_equates.asm):01377 LAEF7 EQU $AEF7 AF0C ( ecb_equates.asm):01378 LAF0C EQU $AF0C AF22 ( ecb_equates.asm):01379 LAF22 EQU $AF22 AF28 ( ecb_equates.asm):01380 LAF28 EQU $AF28 AF39 ( ecb_equates.asm):01381 LAF39 EQU $AF39 AF45 ( ecb_equates.asm):01382 LAF45 EQU $AF45 AF52 ( ecb_equates.asm):01383 LAF52 EQU $AF52 AF54 ( ecb_equates.asm):01384 LAF54 EQU $AF54 AF5D ( ecb_equates.asm):01385 LAF5D EQU $AF5D AF67 ( ecb_equates.asm):01386 LAF67 EQU $AF67 AF6B ( ecb_equates.asm):01387 LAF6B EQU $AF6B AF9A ( ecb_equates.asm):01388 LAF9A EQU $AF9A AFA4 ( ecb_equates.asm):01389 LAFA4 EQU $AFA4 AFB1 ( ecb_equates.asm):01390 LAFB1 EQU $AFB1 AFBE ( ecb_equates.asm):01391 LAFBE EQU $AFBE AFCE ( ecb_equates.asm):01392 LAFCE EQU $AFCE AFCF ( ecb_equates.asm):01393 LAFCF EQU $AFCF AFD6 ( ecb_equates.asm):01394 LAFD6 EQU $AFD6 AFDC ( ecb_equates.asm):01395 LAFDC EQU $AFDC AFDF ( ecb_equates.asm):01396 LAFDF EQU $AFDF AFEA ( ecb_equates.asm):01397 LAFEA EQU $AFEA 000D ( ecb_equates.asm):01398 LASTPT EQU $000D B002 ( ecb_equates.asm):01399 LB002 EQU $B002 B00C ( ecb_equates.asm):01400 LB00C EQU $B00C B00F ( ecb_equates.asm):01401 LB00F EQU $B00F B01E ( ecb_equates.asm):01402 LB01E EQU $B01E B02F ( ecb_equates.asm):01403 LB02F EQU $B02F B035 ( ecb_equates.asm):01404 LB035 EQU $B035 B03C ( ecb_equates.asm):01405 LB03C EQU $B03C B03F ( ecb_equates.asm):01406 LB03F EQU $B03F B049 ( ecb_equates.asm):01407 LB049 EQU $B049 B04E ( ecb_equates.asm):01408 LB04E EQU $B04E B069 ( ecb_equates.asm):01409 LB069 EQU $B069 B08B ( ecb_equates.asm):01410 LB08B EQU $B08B B098 ( ecb_equates.asm):01411 LB098 EQU $B098 B09E ( ecb_equates.asm):01412 LB09E EQU $B09E B0A8 ( ecb_equates.asm):01413 LB0A8 EQU $B0A8 B0B9 ( ecb_equates.asm):01414 LB0B9 EQU $B0B9 B0CD ( ecb_equates.asm):01415 LB0CD EQU $B0CD B0D5 ( ecb_equates.asm):01416 LB0D5 EQU $B0D5 B0E7 ( ecb_equates.asm):01417 LB0E7 EQU $B0E7 B0E8 ( ecb_equates.asm):01418 LB0E8 EQU $B0E8 B0FE ( ecb_equates.asm):01419 LB0FE EQU $B0FE B101 ( ecb_equates.asm):01420 LB101 EQU $B101 B10A ( ecb_equates.asm):01421 LB10A EQU $B10A B10C ( ecb_equates.asm):01422 LB10C EQU $B10C B131 ( ecb_equates.asm):01423 LB131 EQU $B131 B134 ( ecb_equates.asm):01424 LB134 EQU $B134 B141 ( ecb_equates.asm):01425 LB141 EQU $B141 B143 ( ecb_equates.asm):01426 LB143 EQU $B143 B145 ( ecb_equates.asm):01427 LB145 EQU $B145 B146 ( ecb_equates.asm):01428 LB146 EQU $B146 B148 ( ecb_equates.asm):01429 LB148 EQU $B148 B14F ( ecb_equates.asm):01430 LB14F EQU $B14F B151 ( ecb_equates.asm):01431 LB151 EQU $B151 B153 ( ecb_equates.asm):01432 LB153 EQU $B153 B156 ( ecb_equates.asm):01433 LB156 EQU $B156 B158 ( ecb_equates.asm):01434 LB158 EQU $B158 B15A ( ecb_equates.asm):01435 LB15A EQU $B15A B166 ( ecb_equates.asm):01436 LB166 EQU $B166 B168 ( ecb_equates.asm):01437 LB168 EQU $B168 B16A ( ecb_equates.asm):01438 LB16A EQU $B16A B181 ( ecb_equates.asm):01439 LB181 EQU $B181 B19F ( ecb_equates.asm):01440 LB19F EQU $B19F B1A7 ( ecb_equates.asm):01441 LB1A7 EQU $B1A7 B1B8 ( ecb_equates.asm):01442 LB1B8 EQU $B1B8 B1C6 ( ecb_equates.asm):01443 LB1C6 EQU $B1C6 B1CB ( ecb_equates.asm):01444 LB1CB EQU $B1CB B1CC ( ecb_equates.asm):01445 LB1CC EQU $B1CC B1CE ( ecb_equates.asm):01446 LB1CE EQU $B1CE B1D4 ( ecb_equates.asm):01447 LB1D4 EQU $B1D4 B1DF ( ecb_equates.asm):01448 LB1DF EQU $B1DF B1E2 ( ecb_equates.asm):01449 LB1E2 EQU $B1E2 B1E6 ( ecb_equates.asm):01450 LB1E6 EQU $B1E6 B1EA ( ecb_equates.asm):01451 LB1EA EQU $B1EA B1F4 ( ecb_equates.asm):01452 LB1F4 EQU $B1F4 B1FA ( ecb_equates.asm):01453 LB1FA EQU $B1FA B201 ( ecb_equates.asm):01454 LB201 EQU $B201 B203 ( ecb_equates.asm):01455 LB203 EQU $B203 B220 ( ecb_equates.asm):01456 LB220 EQU $B220 B222 ( ecb_equates.asm):01457 LB222 EQU $B222 B223 ( ecb_equates.asm):01458 LB223 EQU $B223 B22C ( ecb_equates.asm):01459 LB22C EQU $B22C B22F ( ecb_equates.asm):01460 LB22F EQU $B22F B244 ( ecb_equates.asm):01461 LB244 EQU $B244 B249 ( ecb_equates.asm):01462 LB249 EQU $B249 B24E ( ecb_equates.asm):01463 LB24E EQU $B24E B25F ( ecb_equates.asm):01464 LB25F EQU $B25F B262 ( ecb_equates.asm):01465 LB262 EQU $B262 B267 ( ecb_equates.asm):01466 LB267 EQU $B267 B26A ( ecb_equates.asm):01467 LB26A EQU $B26A B26D ( ecb_equates.asm):01468 LB26D EQU $B26D B26F ( ecb_equates.asm):01469 LB26F EQU $B26F B277 ( ecb_equates.asm):01470 LB277 EQU $B277 B27C ( ecb_equates.asm):01471 LB27C EQU $B27C B284 ( ecb_equates.asm):01472 LB284 EQU $B284 B287 ( ecb_equates.asm):01473 LB287 EQU $B287 B290 ( ecb_equates.asm):01474 LB290 EQU $B290 B29F ( ecb_equates.asm):01475 LB29F EQU $B29F B2C7 ( ecb_equates.asm):01476 LB2C7 EQU $B2C7 B2C9 ( ecb_equates.asm):01477 LB2C9 EQU $B2C9 B2CE ( ecb_equates.asm):01478 LB2CE EQU $B2CE B2D4 ( ecb_equates.asm):01479 LB2D4 EQU $B2D4 B2D5 ( ecb_equates.asm):01480 LB2D5 EQU $B2D5 B2ED ( ecb_equates.asm):01481 LB2ED EQU $B2ED B2F1 ( ecb_equates.asm):01482 LB2F1 EQU $B2F1 B2F4 ( ecb_equates.asm):01483 LB2F4 EQU $B2F4 B309 ( ecb_equates.asm):01484 LB309 EQU $B309 B328 ( ecb_equates.asm):01485 LB328 EQU $B328 B32D ( ecb_equates.asm):01486 LB32D EQU $B32D B334 ( ecb_equates.asm):01487 LB334 EQU $B334 B33F ( ecb_equates.asm):01488 LB33F EQU $B33F B348 ( ecb_equates.asm):01489 LB348 EQU $B348 B34B ( ecb_equates.asm):01490 LB34B EQU $B34B B357 ( ecb_equates.asm):01491 LB357 EQU $B357 B35A ( ecb_equates.asm):01492 LB35A EQU $B35A B35C ( ecb_equates.asm):01493 LB35C EQU $B35C B371 ( ecb_equates.asm):01494 LB371 EQU $B371 B373 ( ecb_equates.asm):01495 LB373 EQU $B373 B37B ( ecb_equates.asm):01496 LB37B EQU $B37B B385 ( ecb_equates.asm):01497 LB385 EQU $B385 B395 ( ecb_equates.asm):01498 LB395 EQU $B395 B3A2 ( ecb_equates.asm):01499 LB3A2 EQU $B3A2 B3AA ( ecb_equates.asm):01500 LB3AA EQU $B3AA B3AB ( ecb_equates.asm):01501 LB3AB EQU $B3AB B3DC ( ecb_equates.asm):01502 LB3DC EQU $B3DC B3DE ( ecb_equates.asm):01503 LB3DE EQU $B3DE B3DF ( ecb_equates.asm):01504 LB3DF EQU $B3DF B3E4 ( ecb_equates.asm):01505 LB3E4 EQU $B3E4 B3E6 ( ecb_equates.asm):01506 LB3E6 EQU $B3E6 B3E9 ( ecb_equates.asm):01507 LB3E9 EQU $B3E9 B3FE ( ecb_equates.asm):01508 LB3FE EQU $B3FE B404 ( ecb_equates.asm):01509 LB404 EQU $B404 B40A ( ecb_equates.asm):01510 LB40A EQU $B40A B42A ( ecb_equates.asm):01511 LB42A EQU $B42A B43B ( ecb_equates.asm):01512 LB43B EQU $B43B B447 ( ecb_equates.asm):01513 LB447 EQU $B447 B44A ( ecb_equates.asm):01514 LB44A EQU $B44A B44C ( ecb_equates.asm):01515 LB44C EQU $B44C B44F ( ecb_equates.asm):01516 LB44F EQU $B44F B461 ( ecb_equates.asm):01517 LB461 EQU $B461 B46D ( ecb_equates.asm):01518 LB46D EQU $B46D B48C ( ecb_equates.asm):01519 LB48C EQU $B48C B4A0 ( ecb_equates.asm):01520 LB4A0 EQU $B4A0 B4A6 ( ecb_equates.asm):01521 LB4A6 EQU $B4A6 B4B9 ( ecb_equates.asm):01522 LB4B9 EQU $B4B9 B4CD ( ecb_equates.asm):01523 LB4CD EQU $B4CD B4CE ( ecb_equates.asm):01524 LB4CE EQU $B4CE B4D8 ( ecb_equates.asm):01525 LB4D8 EQU $B4D8 B4E6 ( ecb_equates.asm):01526 LB4E6 EQU $B4E6 B4EB ( ecb_equates.asm):01527 LB4EB EQU $B4EB B4F3 ( ecb_equates.asm):01528 LB4F3 EQU $B4F3 B50D ( ecb_equates.asm):01529 LB50D EQU $B50D B50F ( ecb_equates.asm):01530 LB50F EQU $B50F B511 ( ecb_equates.asm):01531 LB511 EQU $B511 B516 ( ecb_equates.asm):01532 LB516 EQU $B516 B518 ( ecb_equates.asm):01533 LB518 EQU $B518 B51A ( ecb_equates.asm):01534 LB51A EQU $B51A B51E ( ecb_equates.asm):01535 LB51E EQU $B51E B526 ( ecb_equates.asm):01536 LB526 EQU $B526 B533 ( ecb_equates.asm):01537 LB533 EQU $B533 B537 ( ecb_equates.asm):01538 LB537 EQU $B537 B539 ( ecb_equates.asm):01539 LB539 EQU $B539 B543 ( ecb_equates.asm):01540 LB543 EQU $B543 B54C ( ecb_equates.asm):01541 LB54C EQU $B54C B555 ( ecb_equates.asm):01542 LB555 EQU $B555 B558 ( ecb_equates.asm):01543 LB558 EQU $B558 B56D ( ecb_equates.asm):01544 LB56D EQU $B56D B56F ( ecb_equates.asm):01545 LB56F EQU $B56F B585 ( ecb_equates.asm):01546 LB585 EQU $B585 B591 ( ecb_equates.asm):01547 LB591 EQU $B591 B593 ( ecb_equates.asm):01548 LB593 EQU $B593 B5A0 ( ecb_equates.asm):01549 LB5A0 EQU $B5A0 B5A8 ( ecb_equates.asm):01550 LB5A8 EQU $B5A8 B5AA ( ecb_equates.asm):01551 LB5AA EQU $B5AA B5B2 ( ecb_equates.asm):01552 LB5B2 EQU $B5B2 B5B4 ( ecb_equates.asm):01553 LB5B4 EQU $B5B4 B5B6 ( ecb_equates.asm):01554 LB5B6 EQU $B5B6 B5CA ( ecb_equates.asm):01555 LB5CA EQU $B5CA B5D2 ( ecb_equates.asm):01556 LB5D2 EQU $B5D2 B5D8 ( ecb_equates.asm):01557 LB5D8 EQU $B5D8 B5EC ( ecb_equates.asm):01558 LB5EC EQU $B5EC B5EE ( ecb_equates.asm):01559 LB5EE EQU $B5EE B5EF ( ecb_equates.asm):01560 LB5EF EQU $B5EF B60F ( ecb_equates.asm):01561 LB60F EQU $B60F B62A ( ecb_equates.asm):01562 LB62A EQU $B62A B643 ( ecb_equates.asm):01563 LB643 EQU $B643 B645 ( ecb_equates.asm):01564 LB645 EQU $B645 B64A ( ecb_equates.asm):01565 LB64A EQU $B64A B64E ( ecb_equates.asm):01566 LB64E EQU $B64E B654 ( ecb_equates.asm):01567 LB654 EQU $B654 B657 ( ecb_equates.asm):01568 LB657 EQU $B657 B659 ( ecb_equates.asm):01569 LB659 EQU $B659 B66F ( ecb_equates.asm):01570 LB66F EQU $B66F B672 ( ecb_equates.asm):01571 LB672 EQU $B672 B675 ( ecb_equates.asm):01572 LB675 EQU $B675 B680 ( ecb_equates.asm):01573 LB680 EQU $B680 B683 ( ecb_equates.asm):01574 LB683 EQU $B683 B686 ( ecb_equates.asm):01575 LB686 EQU $B686 B68F ( ecb_equates.asm):01576 LB68F EQU $B68F B69B ( ecb_equates.asm):01577 LB69B EQU $B69B B69D ( ecb_equates.asm):01578 LB69D EQU $B69D B6A4 ( ecb_equates.asm):01579 LB6A4 EQU $B6A4 B6AD ( ecb_equates.asm):01580 LB6AD EQU $B6AD B6AE ( ecb_equates.asm):01581 LB6AE EQU $B6AE B6B5 ( ecb_equates.asm):01582 LB6B5 EQU $B6B5 B6DE ( ecb_equates.asm):01583 LB6DE EQU $B6DE B6F5 ( ecb_equates.asm):01584 LB6F5 EQU $B6F5 B706 ( ecb_equates.asm):01585 LB706 EQU $B706 B709 ( ecb_equates.asm):01586 LB709 EQU $B709 B70B ( ecb_equates.asm):01587 LB70B EQU $B70B B70E ( ecb_equates.asm):01588 LB70E EQU $B70E B734 ( ecb_equates.asm):01589 LB734 EQU $B734 B738 ( ecb_equates.asm):01590 LB738 EQU $B738 B73D ( ecb_equates.asm):01591 LB73D EQU $B73D B740 ( ecb_equates.asm):01592 LB740 EQU $B740 B783 ( ecb_equates.asm):01593 LB783 EQU $B783 B784 ( ecb_equates.asm):01594 LB784 EQU $B784 B789 ( ecb_equates.asm):01595 LB789 EQU $B789 B78D ( ecb_equates.asm):01596 LB78D EQU $B78D B797 ( ecb_equates.asm):01597 LB797 EQU $B797 B79F ( ecb_equates.asm):01598 LB79F EQU $B79F B7B9 ( ecb_equates.asm):01599 LB7B9 EQU $B7B9 B7C2 ( ecb_equates.asm):01600 LB7C2 EQU $B7C2 B7CB ( ecb_equates.asm):01601 LB7CB EQU $B7CB B7E0 ( ecb_equates.asm):01602 LB7E0 EQU $B7E0 B7E2 ( ecb_equates.asm):01603 LB7E2 EQU $B7E2 B7E6 ( ecb_equates.asm):01604 LB7E6 EQU $B7E6 B7F1 ( ecb_equates.asm):01605 LB7F1 EQU $B7F1 B7F3 ( ecb_equates.asm):01606 LB7F3 EQU $B7F3 B7F9 ( ecb_equates.asm):01607 LB7F9 EQU $B7F9 B801 ( ecb_equates.asm):01608 LB801 EQU $B801 B804 ( ecb_equates.asm):01609 LB804 EQU $B804 B80A ( ecb_equates.asm):01610 LB80A EQU $B80A B814 ( ecb_equates.asm):01611 LB814 EQU $B814 B820 ( ecb_equates.asm):01612 LB820 EQU $B820 B821 ( ecb_equates.asm):01613 LB821 EQU $B821 B829 ( ecb_equates.asm):01614 LB829 EQU $B829 B82D ( ecb_equates.asm):01615 LB82D EQU $B82D B842 ( ecb_equates.asm):01616 LB842 EQU $B842 B844 ( ecb_equates.asm):01617 LB844 EQU $B844 B852 ( ecb_equates.asm):01618 LB852 EQU $B852 B85A ( ecb_equates.asm):01619 LB85A EQU $B85A B85C ( ecb_equates.asm):01620 LB85C EQU $B85C B86B ( ecb_equates.asm):01621 LB86B EQU $B86B B873 ( ecb_equates.asm):01622 LB873 EQU $B873 B87C ( ecb_equates.asm):01623 LB87C EQU $B87C B87E ( ecb_equates.asm):01624 LB87E EQU $B87E B886 ( ecb_equates.asm):01625 LB886 EQU $B886 B88A ( ecb_equates.asm):01626 LB88A EQU $B88A B892 ( ecb_equates.asm):01627 LB892 EQU $B892 B89B ( ecb_equates.asm):01628 LB89B EQU $B89B B89D ( ecb_equates.asm):01629 LB89D EQU $B89D B8A6 ( ecb_equates.asm):01630 LB8A6 EQU $B8A6 B8A8 ( ecb_equates.asm):01631 LB8A8 EQU $B8A8 B8C2 ( ecb_equates.asm):01632 LB8C2 EQU $B8C2 B8C6 ( ecb_equates.asm):01633 LB8C6 EQU $B8C6 B8CE ( ecb_equates.asm):01634 LB8CE EQU $B8CE B8D2 ( ecb_equates.asm):01635 LB8D2 EQU $B8D2 B8D4 ( ecb_equates.asm):01636 LB8D4 EQU $B8D4 B8D7 ( ecb_equates.asm):01637 LB8D7 EQU $B8D7 B8EA ( ecb_equates.asm):01638 LB8EA EQU $B8EA B8F1 ( ecb_equates.asm):01639 LB8F1 EQU $B8F1 B8FE ( ecb_equates.asm):01640 LB8FE EQU $B8FE B902 ( ecb_equates.asm):01641 LB902 EQU $B902 B905 ( ecb_equates.asm):01642 LB905 EQU $B905 B907 ( ecb_equates.asm):01643 LB907 EQU $B907 B911 ( ecb_equates.asm):01644 LB911 EQU $B911 B918 ( ecb_equates.asm):01645 LB918 EQU $B918 B91B ( ecb_equates.asm):01646 LB91B EQU $B91B B91D ( ecb_equates.asm):01647 LB91D EQU $B91D B938 ( ecb_equates.asm):01648 LB938 EQU $B938 B949 ( ecb_equates.asm):01649 LB949 EQU $B949 B954 ( ecb_equates.asm):01650 LB954 EQU $B954 B958 ( ecb_equates.asm):01651 LB958 EQU $B958 B95C ( ecb_equates.asm):01652 LB95C EQU $B95C B95F ( ecb_equates.asm):01653 LB95F EQU $B95F B965 ( ecb_equates.asm):01654 LB965 EQU $B965 B966 ( ecb_equates.asm):01655 LB966 EQU $B966 B975 ( ecb_equates.asm):01656 LB975 EQU $B975 B977 ( ecb_equates.asm):01657 LB977 EQU $B977 B97E ( ecb_equates.asm):01658 LB97E EQU $B97E B98E ( ecb_equates.asm):01659 LB98E EQU $B98E B992 ( ecb_equates.asm):01660 LB992 EQU $B992 B997 ( ecb_equates.asm):01661 LB997 EQU $B997 B99C ( ecb_equates.asm):01662 LB99C EQU $B99C B99F ( ecb_equates.asm):01663 LB99F EQU $B99F B9A2 ( ecb_equates.asm):01664 LB9A2 EQU $B9A2 B9A3 ( ecb_equates.asm):01665 LB9A3 EQU $B9A3 B9AC ( ecb_equates.asm):01666 LB9AC EQU $B9AC B9AF ( ecb_equates.asm):01667 LB9AF EQU $B9AF B9B1 ( ecb_equates.asm):01668 LB9B1 EQU $B9B1 B9B4 ( ecb_equates.asm):01669 LB9B4 EQU $B9B4 B9B9 ( ecb_equates.asm):01670 LB9B9 EQU $B9B9 B9BC ( ecb_equates.asm):01671 LB9BC EQU $B9BC B9C2 ( ecb_equates.asm):01672 LB9C2 EQU $B9C2 B9C5 ( ecb_equates.asm):01673 LB9C5 EQU $B9C5 B9CD ( ecb_equates.asm):01674 LB9CD EQU $B9CD B9E2 ( ecb_equates.asm):01675 LB9E2 EQU $B9E2 B9EC ( ecb_equates.asm):01676 LB9EC EQU $B9EC B9FB ( ecb_equates.asm):01677 LB9FB EQU $B9FB BA18 ( ecb_equates.asm):01678 LBA18 EQU $BA18 BA1C ( ecb_equates.asm):01679 LBA1C EQU $BA1C BA1D ( ecb_equates.asm):01680 LBA1D EQU $BA1D BA39 ( ecb_equates.asm):01681 LBA39 EQU $BA39 BA3A ( ecb_equates.asm):01682 LBA3A EQU $BA3A BA3E ( ecb_equates.asm):01683 LBA3E EQU $BA3E BA3F ( ecb_equates.asm):01684 LBA3F EQU $BA3F BA44 ( ecb_equates.asm):01685 LBA44 EQU $BA44 BA4F ( ecb_equates.asm):01686 LBA4F EQU $BA4F BA5C ( ecb_equates.asm):01687 LBA5C EQU $BA5C BA66 ( ecb_equates.asm):01688 LBA66 EQU $BA66 BA72 ( ecb_equates.asm):01689 LBA72 EQU $BA72 BA78 ( ecb_equates.asm):01690 LBA78 EQU $BA78 BA79 ( ecb_equates.asm):01691 LBA79 EQU $BA79 BA7B ( ecb_equates.asm):01692 LBA7B EQU $BA7B BA83 ( ecb_equates.asm):01693 LBA83 EQU $BA83 BA91 ( ecb_equates.asm):01694 LBA91 EQU $BA91 BA92 ( ecb_equates.asm):01695 LBA92 EQU $BA92 BA97 ( ecb_equates.asm):01696 LBA97 EQU $BA97 BA9A ( ecb_equates.asm):01697 LBA9A EQU $BA9A BAAE ( ecb_equates.asm):01698 LBAAE EQU $BAAE BAB8 ( ecb_equates.asm):01699 LBAB8 EQU $BAB8 BABA ( ecb_equates.asm):01700 LBABA EQU $BABA BAC4 ( ecb_equates.asm):01701 LBAC4 EQU $BAC4 BAC5 ( ecb_equates.asm):01702 LBAC5 EQU $BAC5 BACA ( ecb_equates.asm):01703 LBACA EQU $BACA BAD0 ( ecb_equates.asm):01704 LBAD0 EQU $BAD0 BB00 ( ecb_equates.asm):01705 LBB00 EQU $BB00 BB02 ( ecb_equates.asm):01706 LBB02 EQU $BB02 BB03 ( ecb_equates.asm):01707 LBB03 EQU $BB03 BB20 ( ecb_equates.asm):01708 LBB20 EQU $BB20 BB2E ( ecb_equates.asm):01709 LBB2E EQU $BB2E BB2F ( ecb_equates.asm):01710 LBB2F EQU $BB2F BB48 ( ecb_equates.asm):01711 LBB48 EQU $BB48 BB5C ( ecb_equates.asm):01712 LBB5C EQU $BB5C BB61 ( ecb_equates.asm):01713 LBB61 EQU $BB61 BB63 ( ecb_equates.asm):01714 LBB63 EQU $BB63 BB67 ( ecb_equates.asm):01715 LBB67 EQU $BB67 BB6A ( ecb_equates.asm):01716 LBB6A EQU $BB6A BB7C ( ecb_equates.asm):01717 LBB7C EQU $BB7C BB7D ( ecb_equates.asm):01718 LBB7D EQU $BB7D BB82 ( ecb_equates.asm):01719 LBB82 EQU $BB82 BB89 ( ecb_equates.asm):01720 LBB89 EQU $BB89 BB8F ( ecb_equates.asm):01721 LBB8F EQU $BB8F BB91 ( ecb_equates.asm):01722 LBB91 EQU $BB91 BBA4 ( ecb_equates.asm):01723 LBBA4 EQU $BBA4 BBBD ( ecb_equates.asm):01724 LBBBD EQU $BBBD BBCC ( ecb_equates.asm):01725 LBBCC EQU $BBCC BBD0 ( ecb_equates.asm):01726 LBBD0 EQU $BBD0 BBDE ( ecb_equates.asm):01727 LBBDE EQU $BBDE BBF8 ( ecb_equates.asm):01728 LBBF8 EQU $BBF8 BBFC ( ecb_equates.asm):01729 LBBFC EQU $BBFC BC06 ( ecb_equates.asm):01730 LBC06 EQU $BC06 BC0B ( ecb_equates.asm):01731 LBC0B EQU $BC0B BC14 ( ecb_equates.asm):01732 LBC14 EQU $BC14 BC2A ( ecb_equates.asm):01733 LBC2A EQU $BC2A BC2F ( ecb_equates.asm):01734 LBC2F EQU $BC2F BC33 ( ecb_equates.asm):01735 LBC33 EQU $BC33 BC35 ( ecb_equates.asm):01736 LBC35 EQU $BC35 BC4A ( ecb_equates.asm):01737 LBC4A EQU $BC4A BC4C ( ecb_equates.asm):01738 LBC4C EQU $BC4C BC5F ( ecb_equates.asm):01739 LBC5F EQU $BC5F BC6D ( ecb_equates.asm):01740 LBC6D EQU $BC6D BC71 ( ecb_equates.asm):01741 LBC71 EQU $BC71 BC73 ( ecb_equates.asm):01742 LBC73 EQU $BC73 BC79 ( ecb_equates.asm):01743 LBC79 EQU $BC79 BC7C ( ecb_equates.asm):01744 LBC7C EQU $BC7C BC82 ( ecb_equates.asm):01745 LBC82 EQU $BC82 BC86 ( ecb_equates.asm):01746 LBC86 EQU $BC86 BC96 ( ecb_equates.asm):01747 LBC96 EQU $BC96 BCA0 ( ecb_equates.asm):01748 LBCA0 EQU $BCA0 BCC3 ( ecb_equates.asm):01749 LBCC3 EQU $BCC3 BCC8 ( ecb_equates.asm):01750 LBCC8 EQU $BCC8 BCD7 ( ecb_equates.asm):01751 LBCD7 EQU $BCD7 BCE4 ( ecb_equates.asm):01752 LBCE4 EQU $BCE4 BD09 ( ecb_equates.asm):01753 LBD09 EQU $BD09 BD11 ( ecb_equates.asm):01754 LBD11 EQU $BD11 BD12 ( ecb_equates.asm):01755 LBD12 EQU $BD12 BD2D ( ecb_equates.asm):01756 LBD2D EQU $BD2D BD31 ( ecb_equates.asm):01757 LBD31 EQU $BD31 BD35 ( ecb_equates.asm):01758 LBD35 EQU $BD35 BD53 ( ecb_equates.asm):01759 LBD53 EQU $BD53 BD55 ( ecb_equates.asm):01760 LBD55 EQU $BD55 BD59 ( ecb_equates.asm):01761 LBD59 EQU $BD59 BD61 ( ecb_equates.asm):01762 LBD61 EQU $BD61 BD65 ( ecb_equates.asm):01763 LBD65 EQU $BD65 BD6F ( ecb_equates.asm):01764 LBD6F EQU $BD6F BD78 ( ecb_equates.asm):01765 LBD78 EQU $BD78 BD7F ( ecb_equates.asm):01766 LBD7F EQU $BD7F BD86 ( ecb_equates.asm):01767 LBD86 EQU $BD86 BD99 ( ecb_equates.asm):01768 LBD99 EQU $BD99 BDA5 ( ecb_equates.asm):01769 LBDA5 EQU $BDA5 BDB6 ( ecb_equates.asm):01770 LBDB6 EQU $BDB6 BDBB ( ecb_equates.asm):01771 LBDBB EQU $BDBB BDC0 ( ecb_equates.asm):01772 LBDC0 EQU $BDC0 BDC5 ( ecb_equates.asm):01773 LBDC5 EQU $BDC5 BDCC ( ecb_equates.asm):01774 LBDCC EQU $BDCC BDD6 ( ecb_equates.asm):01775 LBDD6 EQU $BDD6 BDD9 ( ecb_equates.asm):01776 LBDD9 EQU $BDD9 BDDC ( ecb_equates.asm):01777 LBDDC EQU $BDDC BDE4 ( ecb_equates.asm):01778 LBDE4 EQU $BDE4 BDFF ( ecb_equates.asm):01779 LBDFF EQU $BDFF BE01 ( ecb_equates.asm):01780 LBE01 EQU $BE01 BE09 ( ecb_equates.asm):01781 LBE09 EQU $BE09 BE18 ( ecb_equates.asm):01782 LBE18 EQU $BE18 BE1F ( ecb_equates.asm):01783 LBE1F EQU $BE1F BE36 ( ecb_equates.asm):01784 LBE36 EQU $BE36 BE4B ( ecb_equates.asm):01785 LBE4B EQU $BE4B BE50 ( ecb_equates.asm):01786 LBE50 EQU $BE50 BE72 ( ecb_equates.asm):01787 LBE72 EQU $BE72 BE84 ( ecb_equates.asm):01788 LBE84 EQU $BE84 BE8C ( ecb_equates.asm):01789 LBE8C EQU $BE8C BE98 ( ecb_equates.asm):01790 LBE98 EQU $BE98 BEA3 ( ecb_equates.asm):01791 LBEA3 EQU $BEA3 BEAB ( ecb_equates.asm):01792 LBEAB EQU $BEAB BEB8 ( ecb_equates.asm):01793 LBEB8 EQU $BEB8 BEBA ( ecb_equates.asm):01794 LBEBA EQU $BEBA BEBC ( ecb_equates.asm):01795 LBEBC EQU $BEBC BEC0 ( ecb_equates.asm):01796 LBEC0 EQU $BEC0 BEC5 ( ecb_equates.asm):01797 LBEC5 EQU $BEC5 BEC9 ( ecb_equates.asm):01798 LBEC9 EQU $BEC9 BECD ( ecb_equates.asm):01799 LBECD EQU $BECD BED1 ( ecb_equates.asm):01800 LBED1 EQU $BED1 BED5 ( ecb_equates.asm):01801 LBED5 EQU $BED5 BED9 ( ecb_equates.asm):01802 LBED9 EQU $BED9 BEDD ( ecb_equates.asm):01803 LBEDD EQU $BEDD BEE1 ( ecb_equates.asm):01804 LBEE1 EQU $BEE1 BEE5 ( ecb_equates.asm):01805 LBEE5 EQU $BEE5 BEE9 ( ecb_equates.asm):01806 LBEE9 EQU $BEE9 BEEF ( ecb_equates.asm):01807 LBEEF EQU $BEEF BEF0 ( ecb_equates.asm):01808 LBEF0 EQU $BEF0 BEFC ( ecb_equates.asm):01809 LBEFC EQU $BEFC BEFF ( ecb_equates.asm):01810 LBEFF EQU $BEFF BF01 ( ecb_equates.asm):01811 LBF01 EQU $BF01 BF0C ( ecb_equates.asm):01812 LBF0C EQU $BF0C BF38 ( ecb_equates.asm):01813 LBF38 EQU $BF38 BF3B ( ecb_equates.asm):01814 LBF3B EQU $BF3B BF45 ( ecb_equates.asm):01815 LBF45 EQU $BF45 BFA6 ( ecb_equates.asm):01816 LBFA6 EQU $BFA6 BFA9 ( ecb_equates.asm):01817 LBFA9 EQU $BFA9 BFB7 ( ecb_equates.asm):01818 LBFB7 EQU $BFB7 BFBD ( ecb_equates.asm):01819 LBFBD EQU $BFBD BFC2 ( ecb_equates.asm):01820 LBFC2 EQU $BFC2 BFC7 ( ecb_equates.asm):01821 LBFC7 EQU $BFC7 BFC8 ( ecb_equates.asm):01822 LBFC8 EQU $BFC8 BFCD ( ecb_equates.asm):01823 LBFCD EQU $BFCD BFD2 ( ecb_equates.asm):01824 LBFD2 EQU $BFD2 BFD7 ( ecb_equates.asm):01825 LBFD7 EQU $BFD7 BFDC ( ecb_equates.asm):01826 LBFDC EQU $BFDC BFE1 ( ecb_equates.asm):01827 LBFE1 EQU $BFE1 BFE6 ( ecb_equates.asm):01828 LBFE6 EQU $BFE6 BFF0 ( ecb_equates.asm):01829 LBFF0 EQU $BFF0 BFF2 ( ecb_equates.asm):01830 LBFF2 EQU $BFF2 BFF4 ( ecb_equates.asm):01831 LBFF4 EQU $BFF4 BFF6 ( ecb_equates.asm):01832 LBFF6 EQU $BFF6 BFF8 ( ecb_equates.asm):01833 LBFF8 EQU $BFF8 BFFA ( ecb_equates.asm):01834 LBFFA EQU $BFFA BFFC ( ecb_equates.asm):01835 LBFFC EQU $BFFC BFFE ( ecb_equates.asm):01836 LBFFE EQU $BFFE 00FA ( ecb_equates.asm):01837 LBUFMX EQU $00FA B6AB ( ecb_equates.asm):01838 LEFT EQU $B6AB B681 ( ecb_equates.asm):01839 LEN EQU $B681 AF89 ( ecb_equates.asm):01840 LET EQU $AF89 000A ( ecb_equates.asm):01841 LF EQU $000A 02DC ( ecb_equates.asm):01842 LINBUF EQU $02DC 93BB ( ecb_equates.asm):01843 LINE EQU $93BB 02DA ( ecb_equates.asm):01844 LINHDR EQU $02DA B764 ( ecb_equates.asm):01845 LIST EQU $B764 B75E ( ecb_equates.asm):01846 LLIST EQU $B75E 8446 ( ecb_equates.asm):01847 LOG EQU $8446 0095 ( ecb_equates.asm):01848 LPTBTD EQU $0095 0099 ( ecb_equates.asm):01849 LPTCFW EQU $0099 009A ( ecb_equates.asm):01850 LPTLCF EQU $009A 0097 ( ecb_equates.asm):01851 LPTLND EQU $0097 009C ( ecb_equates.asm):01852 LPTPOS EQU $009C 009B ( ecb_equates.asm):01853 LPTWID EQU $009B 0066 ( ecb_equates.asm):01854 LSTTXT EQU $0066 8000 ( ecb_equates.asm):01855 MAGIC EQU $8000 00FA ( ecb_equates.asm):01856 MAXLIN EQU $00FA B4EE ( ecb_equates.asm):01857 MEM EQU $B4EE 0027 ( ecb_equates.asm):01858 MEMSIZ EQU $0027 B6CF ( ecb_equates.asm):01859 MID EQU $B6CF FFA0 ( ecb_equates.asm):01860 MMUREG EQU $FFA0 A7BD ( ecb_equates.asm):01861 MOTOR EQU $A7BD AD17 ( ecb_equates.asm):01862 NEW EQU $AD17 B0F8 ( ecb_equates.asm):01863 NEXT EQU $B0F8 FFFC ( ecb_equates.asm):01864 NMI EQU $FFFC 0982 ( ecb_equates.asm):01865 NMIFLG EQU $0982 0109 ( ecb_equates.asm):01866 NMIVEC EQU $0109 00E1 ( ecb_equates.asm):01867 NOTELN EQU $00E1 00DE ( ecb_equates.asm):01868 OCTAVE EQU $00DE 002D ( ecb_equates.asm):01869 OLDPTR EQU $002D 0029 ( ecb_equates.asm):01870 OLDTXT EQU $0029 AF42 ( ecb_equates.asm):01871 ON EQU $AF42 A5F6 ( ecb_equates.asm):01872 OPEN EQU $A5F6 0020 ( ecb_equates.asm):01873 OUTFIL EQU $0020 98EC ( ecb_equates.asm):01874 PAINT EQU $98EC FFB0 ( ecb_equates.asm):01875 PALETREG EQU $FFB0 968B ( ecb_equates.asm):01876 PCLEAR EQU $968B 9532 ( ecb_equates.asm):01877 PCLS EQU $9532 9723 ( ecb_equates.asm):01878 PCOPY EQU $9723 B750 ( ecb_equates.asm):01879 PEEK EQU $B750 FF00 ( ecb_equates.asm):01880 PIA0 EQU $FF00 FF20 ( ecb_equates.asm):01881 PIA1 EQU $FF20 FF40 ( ecb_equates.asm):01882 PIA2 EQU $FF40 9A22 ( ecb_equates.asm):01883 PLAY EQU $9A22 00E3 ( ecb_equates.asm):01884 PLYTMR EQU $00E3 00B6 ( ecb_equates.asm):01885 PMODE EQU $00B6 9621 ( ecb_equates.asm):01886 PMODETOK EQU $9621 A8F5 ( ecb_equates.asm):01887 POINT EQU $A8F5 B757 ( ecb_equates.asm):01888 POKE EQU $B757 A000 ( ecb_equates.asm):01889 POLCAT EQU $A000 86AC ( ecb_equates.asm):01890 POS EQU $86AC 015A ( ecb_equates.asm):01891 POTVAL EQU $015A 9339 ( ecb_equates.asm):01892 PPOINT EQU $9339 9365 ( ecb_equates.asm):01893 PRESET EQU $9365 B8F7 ( ecb_equates.asm):01894 PRINT EQU $B8F7 006E ( ecb_equates.asm):01895 PRTDEV EQU $006E 9361 ( ecb_equates.asm):01896 PSET EQU $9361 9758 ( ecb_equates.asm):01897 PUT EQU $9758 A282 ( ecb_equates.asm):01898 PUTCHR EQU $A282 FFD8 ( ecb_equates.asm):01899 R1CLR EQU $FFD8 FFD9 ( ecb_equates.asm):01900 R1SET EQU $FFD9 0040 ( ecb_equates.asm):01901 RANFIL EQU $0040 0985 ( ecb_equates.asm):01902 RDYTMR EQU $0985 B046 ( ecb_equates.asm):01903 READ EQU $B046 000A ( ecb_equates.asm):01904 RELFLG EQU $000A 003D ( ecb_equates.asm):01905 RELPTR EQU $003D AEE3 ( ecb_equates.asm):01906 REM EQU $AEE3 8A09 ( ecb_equates.asm):01907 RENUM EQU $8A09 A8B1 ( ecb_equates.asm):01908 RESET EQU $A8B1 FFFE ( ecb_equates.asm):01909 RESETV EQU $FFFE 0062 ( ecb_equates.asm):01910 RESSGN EQU $0062 ADE4 ( ecb_equates.asm):01911 RESTOR EQU $ADE4 A027 ( ecb_equates.asm):01912 RESVEC EQU $A027 AEC0 ( ecb_equates.asm):01913 RETURN EQU $AEC0 B6C8 ( ecb_equates.asm):01914 RIGHT EQU $B6C8 0948 ( ecb_equates.asm):01915 RNBFAD EQU $0948 BF1F ( ecb_equates.asm):01916 RND EQU $BF1F FFDE ( ecb_equates.asm):01917 ROMCLR EQU $FFDE C000 ( ecb_equates.asm):01918 ROMPAK EQU $C000 FFDF ( ecb_equates.asm):01919 ROMSET EQU $FFDF BF74 ( ecb_equates.asm):01920 RSEED EQU $BF74 0071 ( ecb_equates.asm):01921 RSTFLG EQU $0071 0072 ( ecb_equates.asm):01922 RSTVEC EQU $0072 AE75 ( ecb_equates.asm):01923 RUN EQU $AE75 015E ( ecb_equates.asm):01924 RVEC0 EQU $015E 0161 ( ecb_equates.asm):01925 RVEC1 EQU $0161 017C ( ecb_equates.asm):01926 RVEC10 EQU $017C 017F ( ecb_equates.asm):01927 RVEC11 EQU $017F 0182 ( ecb_equates.asm):01928 RVEC12 EQU $0182 0185 ( ecb_equates.asm):01929 RVEC13 EQU $0185 0188 ( ecb_equates.asm):01930 RVEC14 EQU $0188 018B ( ecb_equates.asm):01931 RVEC15 EQU $018B 018E ( ecb_equates.asm):01932 RVEC16 EQU $018E 0191 ( ecb_equates.asm):01933 RVEC17 EQU $0191 0194 ( ecb_equates.asm):01934 RVEC18 EQU $0194 0197 ( ecb_equates.asm):01935 RVEC19 EQU $0197 0164 ( ecb_equates.asm):01936 RVEC2 EQU $0164 019A ( ecb_equates.asm):01937 RVEC20 EQU $019A 019D ( ecb_equates.asm):01938 RVEC21 EQU $019D 01A0 ( ecb_equates.asm):01939 RVEC22 EQU $01A0 01A3 ( ecb_equates.asm):01940 RVEC23 EQU $01A3 01A6 ( ecb_equates.asm):01941 RVEC24 EQU $01A6 0167 ( ecb_equates.asm):01942 RVEC3 EQU $0167 016A ( ecb_equates.asm):01943 RVEC4 EQU $016A 016D ( ecb_equates.asm):01944 RVEC5 EQU $016D 0170 ( ecb_equates.asm):01945 RVEC6 EQU $0170 0173 ( ecb_equates.asm):01946 RVEC7 EQU $0173 0176 ( ecb_equates.asm):01947 RVEC8 EQU $0176 0179 ( ecb_equates.asm):01948 RVEC9 EQU $0179 0115 ( ecb_equates.asm):01949 RVSEED EQU $0115 FFC0 ( ecb_equates.asm):01950 SAMREG EQU $FFC0 00E9 ( ecb_equates.asm):01951 SCALE EQU $00E9 9670 ( ecb_equates.asm):01952 SCREEN EQU $9670 0100 ( ecb_equates.asm):01953 SECLEN EQU $0100 0012 ( ecb_equates.asm):01954 SECMAX EQU $0012 A880 ( ecb_equates.asm):01955 SET EQU $A880 00C2 ( ecb_equates.asm):01956 SETFLG EQU $00C2 BC7A ( ecb_equates.asm):01957 SGN EQU $BC7A BF78 ( ecb_equates.asm):01958 SIN EQU $BF78 A5EC ( ecb_equates.asm):01959 SKIPF EQU $A5EC 0021 ( ecb_equates.asm):01960 SKP1 EQU $0021 0086 ( ecb_equates.asm):01961 SKP1LD EQU $0086 008C ( ecb_equates.asm):01962 SKP2 EQU $008C A7F4 ( ecb_equates.asm):01963 SNDBLK EQU $A7F4 008D ( ecb_equates.asm):01964 SNDDUR EQU $008D 008C ( ecb_equates.asm):01965 SNDTON EQU $008C A94B ( ecb_equates.asm):01966 SOUND EQU $A94B 0020 ( ecb_equates.asm):01967 SPACE EQU $0020 8480 ( ecb_equates.asm):01968 SQR EQU $8480 003A ( ecb_equates.asm):01969 STKBUF EQU $003A AE09 ( ecb_equates.asm):01970 STOP EQU $AE09 B4FD ( ecb_equates.asm):01971 STR EQU $B4FD 03D7 ( ecb_equates.asm):01972 STRBUF EQU $03D7 0056 ( ecb_equates.asm):01973 STRDES EQU $0056 874E ( ecb_equates.asm):01974 STRING EQU $874E B99C ( ecb_equates.asm):01975 STRINOUT EQU $B99C 01A9 ( ecb_equates.asm):01976 STRSTK EQU $01A9 0023 ( ecb_equates.asm):01977 STRTAB EQU $0023 0103 ( ecb_equates.asm):01978 SW2VEC EQU $0103 0100 ( ecb_equates.asm):01979 SW3VEC EQU $0100 FFFA ( ecb_equates.asm):01980 SWI EQU $FFFA FFF4 ( ecb_equates.asm):01981 SWI2 EQU $FFF4 FFF2 ( ecb_equates.asm):01982 SWI3 EQU $FFF2 0106 ( ecb_equates.asm):01983 SWIVEC EQU $0106 0092 ( ecb_equates.asm):01984 SYNCLN EQU $0092 B26D ( ecb_equates.asm):01985 SYNCOMMA EQU $B26D 8381 ( ecb_equates.asm):01986 TAN EQU $8381 00E2 ( ecb_equates.asm):01987 TEMPO EQU $00E2 000B ( ecb_equates.asm):01988 TEMPPT EQU $000B 000F ( ecb_equates.asm):01989 TEMPTR EQU $000F 8968 ( ecb_equates.asm):01990 TIMER EQU $8968 00E7 ( ecb_equates.asm):01991 TIMOUT EQU $00E7 0112 ( ecb_equates.asm):01992 TIMVAL EQU $0112 002F ( ecb_equates.asm):01993 TINPTR EQU $002F 0003 ( ecb_equates.asm):01994 TMPLOC EQU $0003 00DC ( ecb_equates.asm):01995 TMPSTK EQU $00DC 0011 ( ecb_equates.asm):01996 TMPTR1 EQU $0011 0074 ( ecb_equates.asm):01997 TOPRAM EQU $0074 00AF ( ecb_equates.asm):01998 TRCFLG EQU $00AF 003F ( ecb_equates.asm):01999 TRELFL EQU $003F 1200 ( ecb_equates.asm):02000 TRKLEN EQU $1200 0023 ( ecb_equates.asm):02001 TRKMAX EQU $0023 86A8 ( ecb_equates.asm):02002 TROFF EQU $86A8 86A7 ( ecb_equates.asm):02003 TRON EQU $86A7 0019 ( ecb_equates.asm):02004 TXTTAB EQU $0019 013E ( ecb_equates.asm):02005 USR0 EQU $013E 00B0 ( ecb_equates.asm):02006 USRADR EQU $00B0 0112 ( ecb_equates.asm):02007 USRJMP EQU $0112 FF9A ( ecb_equates.asm):02008 V.BORDER EQU $FF9A FF9E ( ecb_equates.asm):02009 V.OFSET0 EQU $FF9E FF9D ( ecb_equates.asm):02010 V.OFSET1 EQU $FF9D FF9C ( ecb_equates.asm):02011 V.SCROLL EQU $FF9C FF94 ( ecb_equates.asm):02012 V.TIMER EQU $FF94 FFC0 ( ecb_equates.asm):02013 V0CLR EQU $FFC0 FFC1 ( ecb_equates.asm):02014 V0SET EQU $FFC1 FFC2 ( ecb_equates.asm):02015 V1CLR EQU $FFC2 FFC3 ( ecb_equates.asm):02016 V1SET EQU $FFC3 FFC4 ( ecb_equates.asm):02017 V2CLR EQU $FFC4 FFC5 ( ecb_equates.asm):02018 V2SET EQU $FFC5 0040 ( ecb_equates.asm):02019 V40 EQU $0040 0041 ( ecb_equates.asm):02020 V41 EQU $0041 0042 ( ecb_equates.asm):02021 V42 EQU $0042 0043 ( ecb_equates.asm):02022 V43 EQU $0043 0044 ( ecb_equates.asm):02023 V44 EQU $0044 0045 ( ecb_equates.asm):02024 V45 EQU $0045 0046 ( ecb_equates.asm):02025 V46 EQU $0046 0047 ( ecb_equates.asm):02026 V47 EQU $0047 0048 ( ecb_equates.asm):02027 V48 EQU $0048 004A ( ecb_equates.asm):02028 V4A EQU $004A 004B ( ecb_equates.asm):02029 V4B EQU $004B 004D ( ecb_equates.asm):02030 V4D EQU $004D 0973 ( ecb_equates.asm):02031 V973 EQU $0973 0974 ( ecb_equates.asm):02032 V974 EQU $0974 0976 ( ecb_equates.asm):02033 V976 EQU $0976 0977 ( ecb_equates.asm):02034 V977 EQU $0977 0978 ( ecb_equates.asm):02035 V978 EQU $0978 00AB ( ecb_equates.asm):02036 VAB EQU $00AB 00AC ( ecb_equates.asm):02037 VAC EQU $00AC 00AD ( ecb_equates.asm):02038 VAD EQU $00AD 00AE ( ecb_equates.asm):02039 VAE EQU $00AE B716 ( ecb_equates.asm):02040 VAL EQU $B716 0006 ( ecb_equates.asm):02041 VALTYP EQU $0006 003B ( ecb_equates.asm):02042 VARDES EQU $003B 0037 ( ecb_equates.asm):02043 VARNAM EQU $0037 0039 ( ecb_equates.asm):02044 VARPTR EQU $0039 86BE ( ecb_equates.asm):02045 VARPTRTOK EQU $86BE 001B ( ecb_equates.asm):02046 VARTAB EQU $001B 00CB ( ecb_equates.asm):02047 VCB EQU $00CB 00CD ( ecb_equates.asm):02048 VCD EQU $00CD 00CF ( ecb_equates.asm):02049 VCF EQU $00CF 00D1 ( ecb_equates.asm):02050 VD1 EQU $00D1 00D3 ( ecb_equates.asm):02051 VD3 EQU $00D3 00D4 ( ecb_equates.asm):02052 VD4 EQU $00D4 00D5 ( ecb_equates.asm):02053 VD5 EQU $00D5 00D6 ( ecb_equates.asm):02054 VD6 EQU $00D6 00D7 ( ecb_equates.asm):02055 VD7 EQU $00D7 00D8 ( ecb_equates.asm):02056 VD8 EQU $00D8 00D9 ( ecb_equates.asm):02057 VD9 EQU $00D9 00DA ( ecb_equates.asm):02058 VDA EQU $00DA 00BF ( ecb_equates.asm):02059 VERBEG EQU $00BF 00C9 ( ecb_equates.asm):02060 VERDEF EQU $00C9 00C5 ( ecb_equates.asm):02061 VEREND EQU $00C5 FF98 ( ecb_equates.asm):02062 VIDEOMOD EQU $FF98 FF99 ( ecb_equates.asm):02063 VIDEORES EQU $FF99 0400 ( ecb_equates.asm):02064 VIDRAM EQU $0400 00DF ( ecb_equates.asm):02065 VOLHI EQU $00DF 00E0 ( ecb_equates.asm):02066 VOLLOW EQU $00E0 00B4 ( ecb_equates.asm):02067 WCOLOR EQU $00B4 097A ( ecb_equates.asm):02068 WFATVL EQU $097A A7D8 ( ecb_equates.asm):02069 WRLDR EQU $A7D8 A00C ( ecb_equates.asm):02070 WRTLDR EQU $A00C 80C0 ( ecb_equates.asm):02071 XBWMST EQU $80C0 894C ( ecb_equates.asm):02072 XIRQSV EQU $894C 8846 ( ecb_equates.asm):02073 XVEC15 EQU $8846 88F0 ( ecb_equates.asm):02074 XVEC17 EQU $88F0 829C ( ecb_equates.asm):02075 XVEC18 EQU $829C 87E5 ( ecb_equates.asm):02076 XVEC19 EQU $87E5 82B9 ( ecb_equates.asm):02077 XVEC20 EQU $82B9 8304 ( ecb_equates.asm):02078 XVEC23 EQU $8304 8273 ( ecb_equates.asm):02079 XVEC3 EQU $8273 8CF1 ( ecb_equates.asm):02080 XVEC4 EQU $8CF1 8286 ( ecb_equates.asm):02081 XVEC8 EQU $8286 8E90 ( ecb_equates.asm):02082 XVEC9 EQU $8E90 008A ( ecb_equates.asm):02083 ZERO EQU $008A ( disk.asm):00001 * Disk Color BASIC 1.1 ( disk.asm):00002 * Copied from the PDF version of Disk Color BASIC Unravelled. ( disk.asm):00003 * Fixed up to assemble in Mamou ( disk.asm):00004 * ( disk.asm):00005 * Revision History ( disk.asm):00006 * ( disk.asm):00007 *# $Id: $ ( disk.asm):00008 * 00E1 ( disk.asm):00009 DHITOK EQU $E1 HIGHEST 1.1 DISK TOKEN 0032 ( disk.asm):00010 CYEAR EQU '2 ( disk.asm):00011 * ( disk.asm):00012 * ( disk.asm):00013 * ( disk.asm):00014 ** ( disk.asm):00015 **** FILE ALLOCATION TABLE FORMAT ( disk.asm):00016 ** ( disk.asm):00017 * ( disk.asm):00018 * THE FILE ALLOCATION TABLE (FAT) CONTAINS THE STATUS OF THE GRANULES ON A DISKETTE. ( disk.asm):00019 * THE FAT CONTAINS 6 CONTROL BYTES FOLLOWED BY 68 DATA BYTES (ONE PER GRANULE). ONLY THE ( disk.asm):00020 * FIRST TWO OF THE SIX CONTROL BYTES ARE USED. A VALUE OF $FF IS SAVED IN UNALLOCATED ( disk.asm):00021 * GRANULES. IF BITS 6 & 7 OF THE DATA BYTE ARE SET, THE GRANULE IS THE LAST GRANULE ( disk.asm):00022 * IN A FILE AND BITS 0-5 ARE THE NUMBER OF USED SECTORS IN THAT GRANULE. IF BITS 6 & 7 ( disk.asm):00023 * ARE NOT SET, THE DATA BYTE CONTAINS THE NUMBER OF THE NEXT GRANULE IN THE FILE. ( disk.asm):00024 * OFFSETS TO FAT CONTROL BYTES 0000 ( disk.asm):00025 FAT0 EQU 0 ACTIVE FILE COUNTER : DISK TO RAM FAT IMAGE DISABLE 0001 ( disk.asm):00026 FAT1 EQU 1 VALID DATA FLAG: 0=DISK DATA VALID, <> 0 = NEW FAT ( disk.asm):00027 * DATA - DISK DATA INVALID ( disk.asm):00028 * 2 TO 5 NOT USED 0006 ( disk.asm):00029 FATCON EQU 6 OFFSET TO START OF FAT DATA (68 BYTES) ( disk.asm):00030 * ( disk.asm):00031 ** ( disk.asm):00032 **** DIRECTORY ENTRY FORMAT ( disk.asm):00033 ** ( disk.asm):00034 * ( disk.asm):00035 * THE DIRECTORY IS USED TO KEEP TRACK OF HOW MANY FILES ARE STORED ON A DISKETTE ( disk.asm):00036 * AND WHERE THE FILE IS STORED ON THE DISK. THE FIRST GRANULE USED BY THE FILE WILL ( disk.asm):00037 * ALLOW THE FAT TO TRACK DOWN ALL OF THE GRANULES USED BY THE FILE. IF THE FIRST ( disk.asm):00038 * BYTE OF THE DIRECTORY ENTRY IS ZERO, THE FILE HAS BEEN KILLED; ( disk.asm):00039 * IF THE FIRST BYTE IS $FF THEN THE DIRECTORY ENTRY HAS NEVER BEEN USED. ( disk.asm):00040 * ( disk.asm):00041 * BYTE DESCRIPTION 0000 ( disk.asm):00042 DIRNAM EQU 0 FILE NAME 0008 ( disk.asm):00043 DIREXT EQU 8 FILE EXTENSION 000B ( disk.asm):00044 DIRTYP EQU 11 FILE TYPE 000C ( disk.asm):00045 DIRASC EQU 12 ASCII FLAG 000D ( disk.asm):00046 DIRGRN EQU 13 FIRST GRANULE IN FILE 000E ( disk.asm):00047 DIRLST EQU 14 NUMBER OF BYTES IN LAST SECTOR ( disk.asm):00048 * 16 TO 31 UNUSED ( disk.asm):00049 * ( disk.asm):00050 ** ( disk.asm):00051 **** FILE CONTROL BLOCK FORMAT ( disk.asm):00052 ** ( disk.asm):00053 * ( disk.asm):00054 * THE FILE STRUCTURE OF COLOR TRS DOS IS CONTROLLED BY A FILE CONTROL BLOCK (FCB) ( disk.asm):00055 * THE FCB CONTAINS 25 CONTROL BYTES AND A SECTOR LONG (256 BYTES) DATA BUFFER. ( disk.asm):00056 * THE CONTROL BYTES CONTROL THE ORDERLY FLOW OF DATA FROM THE COMPUTER'S RAM TO ( disk.asm):00057 * THE DISKETTE AND VICE VERSA. THE OPEN COMMAND INITIALIZES THE FCB; THE INPUT, ( disk.asm):00058 * OUTPUT, WRITE, PRINT, GET AND PUT COMMANDS TRANSFER DATA THROUGH THE FCB AND ( disk.asm):00059 * THE CLOSE COMMAND TURNS OFF THE FCB. ( disk.asm):00060 * TABLES OF OFFSETS TO FCB CONTROL BYTES ( disk.asm):00061 ***** RANDOM FILE ( disk.asm):00062 * BYTE DESCRIPTION 0000 ( disk.asm):00063 FCBTYP EQU 0 FILE TYPE: $40=RANDOM/DIRECT, 0=CLOSED 0001 ( disk.asm):00064 FCBDRV EQU 1 DRIVE NUMBER 0002 ( disk.asm):00065 FCBFGR EQU 2 FIRST GRANULE IN FILE 0003 ( disk.asm):00066 FCBCGR EQU 3 CURRENT GRANULE BEING USED 0004 ( disk.asm):00067 FCBSEC EQU 4 CURRENT SECTOR BEING USED (1-9) ( disk.asm):00068 * 5 UNUSED 0006 ( disk.asm):00069 FCBPOS EQU 6 CURRENT PRINT POSITION - ALWAYS ZERO IN RANDOM FILES 0007 ( disk.asm):00070 FCBREC EQU 7 CURRENT RECORD NUMBER 0009 ( disk.asm):00071 FCBRLN EQU 9 RANDOM FILE RECORD LENGTH 000B ( disk.asm):00072 FCBBUF EQU 11 POINTER TO START OF THIS FILE'S RANDOM ACCESS BUFFER 000D ( disk.asm):00073 FCBSOF EQU 13 SECTOR OFFSET TO CURRENT POSITION IN RECORD 000F ( disk.asm):00074 FCBFLG EQU 15 GET/PUT FLAG: 0=PUT, 1=PUT ( disk.asm):00075 * 16,17 NOT USED 0012 ( disk.asm):00076 FCBDIR EQU 18 DIRECTORY ENTRY NUMBER (0-71) 0013 ( disk.asm):00077 FCBLST EQU 19 NUMBER OF BYTES IN LAST SECTOR OF FILE 0015 ( disk.asm):00078 FCBGET EQU 21 'GET' RECORD COUNTER: HOW MANY CHARACTERS HAVE BEEN PULLED OUT OF THE CURRENT RECORD 0017 ( disk.asm):00079 FCBPUT EQU 23 'PUT' RECORD COUNTER: POINTER TO WHERE IN THE RECORD THE NEXT BYTE WILL BE 'PUT' ( disk.asm):00080 *FCBCON EQU 25 OFFSET TO START OF FCB DATA BUFFER (256 BYTES) ( disk.asm):00081 ***** SEQUENTIAL FILE ( disk.asm):00082 * BYTE DESCRIPTION ( disk.asm):00083 *FCBTYP EQU 0 FILE TYPE: $10=INPUT, $20=OUTPUT, 0=CLOSED ( disk.asm):00084 *FCBDRV EQU 1 DRIVE NUMBER ( disk.asm):00085 *FCBFGR EQU 2 FIRST GRANULE IN FILE ( disk.asm):00086 *FCBCGR EQU 3 CURRENT GRANULE BEING USED ( disk.asm):00087 *FCBSEC EQU 4 CURRENT SECTOR BEING USED (1-9) 0005 ( disk.asm):00088 FCBCPT EQU 5 INPUT FILE: CHARACTER POINTER - POINTS TO NEXT CHARACTER IN ( disk.asm):00089 * FILE TO BE PROCESSED. ( disk.asm):00090 * OUTPUT FILE: FULL SECTOR FLAG - IF IT IS 1 WHEN THE FILE IS ( disk.asm):00091 * CLOSED IT MEANS 256 BYTES OF THE LAST SECTOR HAVE BEEN USED. ( disk.asm):00092 *FCBPOS EQU 6 CURRENT PRINT POSITION ( disk.asm):00093 *FCBREC EQU 7 CURRENT RECORD NUMBER: HOW MANY WHOLE SECTORS HAVE BEEN ( disk.asm):00094 * INPUT OR OUTPUT TO A FILE. ( disk.asm):00095 * 9 TO 15 UNUSED 0010 ( disk.asm):00096 FCBCFL EQU 16 CACHE FLAG: 00=CACHE EMPTY, $FF=CACHE FULL 0011 ( disk.asm):00097 FCBCDT EQU 17 CACHE DATA BYTE ( disk.asm):00098 *FCBDIR EQU 18 DIRECTORY ENTRY NUMBER (0-71) ( disk.asm):00099 *FCBLST EQU 19 NUMBER OF BYTES IN LAST SECTOR OF FILE ( disk.asm):00100 * 21,22 UNUSED 0017 ( disk.asm):00101 FCBDFL EQU 23 INPUT FILE ONLY: DATA LEFT FLAG: 0=DATA LEFT, $FF=NO DATA (EMPTY) 0018 ( disk.asm):00102 FCBLFT EQU 24 NUMBER OF CHARACTERS LEFT IN BUFFER (INPUT FILE) ( disk.asm):00103 * NUMBER OF CHARS STORED IN BUFFER (OUTPUT FILE) 0019 ( disk.asm):00104 FCBCON EQU 25 OFFSET TO FCB DATA BUFFER (256 BYTES) ( disk.asm):00105 ORG $C000 C000 444B ( disk.asm):00106 MAGICDG FCC 'DK' C002 2008 ( disk.asm):00107 LC002 BRA LC00C C004 D75F ( disk.asm):00108 DCNVEC FDB DSKCON DSKCON POINTER C006 00EA ( disk.asm):00109 DSKVAR FDB DCOPC ADDRESS OF DSKCON VARIABLES C008 DF4C ( disk.asm):00110 DSINIT FDB DOSINI DISK INITIALIZATION VECTOR C00A DF00 ( disk.asm):00111 DOSVEC FDB DOSCOM DOS COMMAND VECTOR ( disk.asm):00112 **** ZERO OUT THE RAM USED BY DISK BASIC C00C 8E0600 ( disk.asm):00113 LC00C LDX #DBUF0 POINT X TO START OF DISK RAM C00F 6F80 ( disk.asm):00114 LC00F CLR ,X+ CLEAR A BYTE C011 8C0989 ( disk.asm):00115 CMPX #DFLBUF END OF DISK'S RAM? C014 26F9 ( disk.asm):00116 BNE LC00F NO - KEEP CLEARING C016 8EC109 ( disk.asm):00117 LDX #LC109 POINT X TO ROM IMAGE OF COMMAND INTERPRETATION TABLE C019 CE0134 ( disk.asm):00118 LDU #COMVEC+20 POINT U TO RAM ADDRESS OF SAME C01C C60A ( disk.asm):00119 LDB #10 10 BYTES PER TABLE C01E BDA59A ( disk.asm):00120 JSR >LA59A MOVE (B) BYTES FROM (X) TO (U) C021 CCB277 ( disk.asm):00121 LDD #LB277 SYNTAX ERROR ADDRESS C024 ED43 ( disk.asm):00122 STD $03,U * SET JUMP TABLE ADDRESSES OF THE USER COMMAND C026 ED48 ( disk.asm):00123 STD $08,U * INTERPRETATION TABLE TO POINT TO SYNTAX ERROR C028 6FC4 ( disk.asm):00124 CLR ,U CLEAR BYTE 0 OF USER TABLE (DOESN'T EXIST FLAG) C02A 6F45 ( disk.asm):00125 CLR $05,U SET NUMBER OF SECONDARY USER TOKENS TO ZERO C02C CCCF0A ( disk.asm):00126 LDD #DXCVEC * SAVE NEW C02F FD012D ( disk.asm):00127 STD COMVEC+13 * POINTERS TO EXBAS C032 CCCF32 ( disk.asm):00128 LDD #DXIVEC * COMMAND AND SECONDARY C035 FD0132 ( disk.asm):00129 STD COMVEC+18 * COMMAND INTERPRETATION ROUTINES ( disk.asm):00130 **** MOVE THE NEW RAM VECTORS FROM ROM TO RAM C038 CE015E ( disk.asm):00131 LDU #RVEC0 POINT U TO 1ST RAM VECTOR C03B 867E ( disk.asm):00132 LC03B LDA #$7E OP CODE OF JMP INSTRUCTION C03D B701A0 ( disk.asm):00133 STA RVEC22 SET 1ST BYTE OF 'GET'/'PUT' RAM VECTOR TO 'JMP' C040 A7C0 ( disk.asm):00134 STA ,U+ SET 1ST BYTE OF RAM VECTOR TO 'JMP' C042 EC81 ( disk.asm):00135 LDD ,X++ GET RAM VECTOR FROM ROM C044 EDC1 ( disk.asm):00136 STD ,U++ STORE IT IN RAM C046 8CC139 ( disk.asm):00137 CMPX #LC139 COMPARE TO END OF ROM VALUES C049 26F0 ( disk.asm):00138 BNE LC03B BRANCH IF NOT ALL VECTORS MOVED C04B 8EC2B2 ( disk.asm):00139 LDX #DVEC22 GET ROM VALUE OF 'GET'/'PUT' RAM VECTOR C04E BF01A1 ( disk.asm):00140 STX RVEC22+1 SAVE IT IN RAM C051 8EC8B0 ( disk.asm):00141 LDX #DVEC20 GET DISK COMMAND INTERPRETATION LOOP RAM VECTOR C054 BF019B ( disk.asm):00142 STX RVEC20+1 SAVE IN RAM VECTOR TABLE ( disk.asm):00143 **** INITIALIZE DISK BASIC'S USR VECTORS C057 8E095F ( disk.asm):00144 LDX #DUSRVC POINT X TO START OF DISK BASIC USR VECTORS C05A 9FB0 ( disk.asm):00145 STX USRADR SAVE START ADDRESS IN USRADR C05C CEB44A ( disk.asm):00146 LDU #LB44A POINT U TO ADDRESS OF 'FUNCTION CALL' ERROR C05F C60A ( disk.asm):00147 LDB #$0A 10 USER VECTORS TO INITIALIZE C061 EF81 ( disk.asm):00148 LC061 STU ,X++ SET USR VECTOR TO 'FC' ERROR C063 5A ( disk.asm):00149 DECB DECREMENT USR VECTOR COUNTER C064 26FB ( disk.asm):00150 BNE LC061 BRANCH IN NOT DONE WITH ALL 10 VECTORS C066 8ED8A1 ( disk.asm):00151 LDX #DNMISV GET ADDRESS OF NMI SERVICING ROUTINE C069 BF010A ( disk.asm):00152 STX NMIVEC+1 SAVE IT IN NMI VECTOR C06C 867E ( disk.asm):00153 LDA #$7E OP CODE OF JMP C06E B70109 ( disk.asm):00154 STA NMIVEC MAKE THE NMI VECTOR A JMP C071 8ED8AF ( disk.asm):00155 LDX #DIRQSV GET ADDRESS OF DISK BASIC IRQ SERVICING ROUTINE C074 BF010D ( disk.asm):00156 STX IRQVEC+1 SAVE IT IN IRQVEC C077 8613 ( disk.asm):00157 LDA #$13 = INITIALIZE WRITE FAT C079 B7097A ( disk.asm):00158 STA WFATVL = TO DISK TRIGGER VALUE C07C 7F0800 ( disk.asm):00159 CLR FATBL0 * C07F 7F084A ( disk.asm):00160 CLR FATBL1 * INITIALIZE THE ACTIVE FILE COUNTER OF C082 7F0894 ( disk.asm):00161 CLR FATBL2 * EACH FAT TO ZERO. THIS WILL CAUSE THE FATS C085 7F08DE ( disk.asm):00162 CLR FATBL3 * TO THINK THERE ARE NO ACTIVE FILES C088 8E0989 ( disk.asm):00163 LDX #DFLBUF = GET THE STARTING ADDRESS OF THE C08B BF0948 ( disk.asm):00164 STX RNBFAD = RANDOM FILE BUFFER FREE AREA AND DAVE IT AS THE ( disk.asm):00165 * = START ADDRESS OF FREE RAM FOR RANDOM FILE BUFFERS C08E 30890100 ( disk.asm):00166 LEAX $0100,X SAVE 256 BYTES FOR RANDOM FILE BUFFERS INITIALLY C092 BF094A ( disk.asm):00167 STX FCBADR SAVE START ADDRESS OF FCBS C095 3001 ( disk.asm):00168 LEAX $01,X * ADD ONE AND SAVE THE STARTING C097 BF0928 ( disk.asm):00169 STX FCBV1 * ADDRESS OF FCB1 C09A 6F00 ( disk.asm):00170 CLR FCBTYP,X CLEAR THE FIRST BYTE OF FCB 1 (CLOSE FCB) C09C 30890119 ( disk.asm):00171 LEAX FCBLEN,X POINT X TO FCB 2 C0A0 BF092A ( disk.asm):00172 STX FCBV1+2 SAVE ITS STARTING ADDRESS IN FCB VECTOR TABLE C0A3 6F00 ( disk.asm):00173 CLR FCBTYP,X CLEAR THE FIRST BYTE OF FCB 2 (CLOSE FCB) C0A5 30890119 ( disk.asm):00174 LEAX FCBLEN,X * POINT X TO SYSTEM FCB - THIS FCB WILL ONLY ( disk.asm):00175 * * BE USED TO COPY, LOAD, SAVE, MERGE, ETC C0A9 BF092C ( disk.asm):00176 STX FCBV1+4 SAVE ITS ADDRESS IN THE FCB VECTOR TABLE C0AC 6F00 ( disk.asm):00177 CLR FCBTYP,X CLEAR THE FIRST BYTE OF SYSTEM FCB (CLOSE FCB) C0AE 8602 ( disk.asm):00178 LDA #$02 * SET THE NUMBER OF ACTIVE RESERVED C0B0 B7095B ( disk.asm):00179 STA FCBACT * FILE BUFFERS TO 2 (1,2) C0B3 30890119 ( disk.asm):00180 LEAX FCBLEN,X POINT X TO ONE PAST THE END OF SYSTEM FCB C0B7 1F10 ( disk.asm):00181 TFR X,D SAVE THE ADDRESS IN ACCD C0B9 5D ( disk.asm):00182 TSTB ON AN EVEN 256 BYTE BOUNDARY? C0BA 2701 ( disk.asm):00183 BEQ LC0BD YES C0BC 4C ( disk.asm):00184 INCA NO - ADD 256 TO ADDRESS C0BD 8501 ( disk.asm):00185 LC0BD BITA #$01 * CHECK TO SEE IF ACCD IS ON AN EVEN C0BF 2701 ( disk.asm):00186 BEQ LC0C2 * 512 BYTE (ONE GRAPHIC PAGE) BOUNDARY - ADD C0C1 4C ( disk.asm):00187 INCA * 256 (INCA) TO IT IF NOT C0C2 1F89 ( disk.asm):00188 LC0C2 TFR A,B COPY ACCA TO ACCB C0C4 CB18 ( disk.asm):00189 ADDB #$18 SAVE ENOUGH ROOM FOR 4 GRAPHICS PAGES (PCLEAR 4) C0C6 D719 ( disk.asm):00190 STB TXTTAB SAVE NEW START OF BASIC ADDRESS C0C8 BD96EC ( disk.asm):00191 JSR >L96EC INITIALIZE EXBAS VARIABLES & DO A NEW C0CB 96BA ( disk.asm):00192 LDA BEGGRP GET THE START OF CURRENT GRAPHICS PAGE C0CD 8B06 ( disk.asm):00193 ADDA #$06 ADD 1.5K (6 X 256 = ONE GRAPHICS PAGE) C0CF 97B7 ( disk.asm):00194 STA ENDGRP SAVE NEW END OF GRAPHICS PAGE C0D1 AD9FC008 ( disk.asm):00195 JSR [DSINIT] INITIALIZE SWI2,3 JUMP ADDRESSES C0D5 8D19 ( disk.asm):00196 BSR LC0F0 GO INITIALIZE THE FLOPPY DISK CONTROLLER C0D7 1CAF ( disk.asm):00197 ANDCC #$AF TURN ON IRQ AND FIRQ C0D9 8EC138 ( disk.asm):00198 LDX #LC139-1 POINT X TO DISK BASIC COPYRIGHT MESSAGE C0DC BDB99C ( disk.asm):00199 LC0DC JSR STRINOUT PRINT COPYRIGHT MESSAGE TO SCREEN C0DF 8EC0E7 ( disk.asm):00200 LDX #DKWMST GET DISK BASIC WARM START ADDRESS C0E2 9F72 ( disk.asm):00201 STX RSTVEC SAVE IT IN RESET VECTOR C0E4 7EA0E2 ( disk.asm):00202 JMP >LA0E2 JUMP BACK TO BASIC C0E7 12 ( disk.asm):00203 DKWMST NOP WARM START INDICATOR C0E8 8D06 ( disk.asm):00204 BSR LC0F0 INITIALIZE THE FLOPPY DISK CONTROLLER C0EA BDD2D2 ( disk.asm):00205 JSR >LD2D2 CLOSE FILES AND DO MORE INITIALIZATION C0ED 7E80C0 ( disk.asm):00206 JMP XBWMST JUMP TO EXBAS' WARM START C0F0 7F0982 ( disk.asm):00207 LC0F0 CLR NMIFLG RESET NMI FLAG C0F3 7F0985 ( disk.asm):00208 CLR RDYTMR RESET DRIVE NOT READY TIMER C0F6 7F0986 ( disk.asm):00209 CLR DRGRAM RESET RAM IMAGE OF DSKREG (MOTORS OFF) C0F9 7FFF40 ( disk.asm):00210 CLR DSKREG RESET DISK CONTROL REGISTER C0FC 86D0 ( disk.asm):00211 LDA #$D0 FORCE INTERRUPT COMMAND OF 1793 C0FE B7FF48 ( disk.asm):00212 STA FDCREG SEND IT TO 1793 C101 1E88 ( disk.asm):00213 EXG A,A * DELAY C103 1E88 ( disk.asm):00214 EXG A,A * DELAY SOME MORE C105 B6FF48 ( disk.asm):00215 LDA FDCREG GET 1793 STATUS (CLEAR REGISTER) C108 39 ( disk.asm):00216 RTS ( disk.asm):00217 * DISK BASIC COMMAND INTERP TABLES C109 14 ( disk.asm):00218 LC109 FCB 20 20 DISK BASIC 1.1 COMMANDS C10A C192 ( disk.asm):00219 FDB LC192 DISK BASIC'S COMMAND DICTIONARY C10C C238 ( disk.asm):00220 FDB LC238 COMMAND JUMP TABLE C10E 06 ( disk.asm):00221 FCB 06 6 DISK BASIC SECONDARY FUNCTIONS C10F C219 ( disk.asm):00222 FDB LC219 SECONDARY FUNCTION TABLE C111 C24E ( disk.asm):00223 FDB LC24E SECONDARY FUNCTION JUMP TABLE ( disk.asm):00224 * RAM HOOKS FOR DISK BASIC C113 C44BC888C893 ( disk.asm):00225 LC113 FDB DVEC0,DVEC1,DVEC2 C119 CC1CC5BCC848 ( disk.asm):00226 FDB DVEC3,DVEC4,DVEC5 C11F C84BCAE9CAF9 ( disk.asm):00227 FDB DVEC6,DVEC7,DVEC8 C125 8E90CD35C8A9 ( disk.asm):00228 FDB XVEC9,DVEC10,DVEC11 C12B C6E4CAE4C90C ( disk.asm):00229 FDB DVEC12,DVEC13,DVEC14 C131 CED2C6E4 ( disk.asm):00230 FDB DVEC15,DVEC12 C135 C265CA3E ( disk.asm):00231 FDB DVEC17,DVEC18 ( disk.asm):00232 * DISK BASIC COPYRIGHT MESSAGE C139 4449534B20455854 ( disk.asm):00233 LC139 FCC 'DISK EXTENDED COLOR BASIC 1.1' 454E44454420434F 4C4F522042415349 4320312E31 C156 0D ( disk.asm):00234 FCB CR C157 434F505952494748 ( disk.asm):00235 FCC 'COPYRIGHT (C) 198' 5420284329203139 38 C168 32 ( disk.asm):00236 FCB CYEAR C169 2042592054414E44 ( disk.asm):00237 FCC ' BY TANDY' 59 C172 0D ( disk.asm):00238 FCB CR C173 554E444552204C49 ( disk.asm):00239 FCC 'UNDER LICENSE FROM MICROSOFT' 43454E5345204652 4F4D204D4943524F 534F4654 C18F 0D0D00 ( disk.asm):00240 FCB CR,CR,0 ( disk.asm):00241 * DISK BASIC COMMAND DICTIONARY TABLE ( disk.asm):00242 * TOKEN # C192 4449D2 ( disk.asm):00243 LC192 FCS 'DIR' CE C195 44524956C5 ( disk.asm):00244 FCS 'DRIVE' CF C19A 4649454CC4 ( disk.asm):00245 FCS 'FIELD' D0 C19F 46494C45D3 ( disk.asm):00246 FCS 'FILES' D1 C1A4 4B494CCC ( disk.asm):00247 FCS 'KILL' D2 C1A8 4C4F41C4 ( disk.asm):00248 FCS 'LOAD' D3 C1AC 4C5345D4 ( disk.asm):00249 FCS 'LSET' D4 C1B0 4D455247C5 ( disk.asm):00250 FCS 'MERGE' D5 C1B5 52454E414DC5 ( disk.asm):00251 FCS 'RENAME' D6 C1BB 525345D4 ( disk.asm):00252 FCS 'RSET' D7 C1BF 534156C5 ( disk.asm):00253 FCS 'SAVE' D8 C1C3 57524954C5 ( disk.asm):00254 FCS 'WRITE' D9 C1C8 5645524946D9 ( disk.asm):00255 FCS 'VERIFY' DA C1CE 554E4C4F41C4 ( disk.asm):00256 FCS 'UNLOAD' DB C1D4 44534B494EC9 ( disk.asm):00257 FCS 'DSKINI' DC C1DA 4241434B55D0 ( disk.asm):00258 FCS 'BACKUP' DD C1E0 434F50D9 ( disk.asm):00259 FCS 'COPY' DE C1E4 44534B49A4 ( disk.asm):00260 FCS 'DSKI$' DF C1E9 44534B4FA4 ( disk.asm):00261 FCS 'DSKO$' E0 C1EE 444FD3 ( disk.asm):00262 FCS 'DOS' E1 ( disk.asm):00263 * DISK BASIC COMMAND JUMP TABLE ( disk.asm):00264 * COMMAND / TOKEN # C1F1 CCA9 ( disk.asm):00265 LC1F1 FDB DIR DIR / CE C1F3 CEC5 ( disk.asm):00266 FDB DRIVE DRIVE / CF C1F5 D0BC ( disk.asm):00267 FDB FIELD FIELD / D0 C1F7 D15C ( disk.asm):00268 FDB FILES FILES / D1 C1F9 C6EF ( disk.asm):00269 FDB KILL KILL / D2 C1FB CA48 ( disk.asm):00270 FDB LOAD LOAD / D3 C1FD D102 ( disk.asm):00271 FDB LSET LSET / D4 C1FF CA39 ( disk.asm):00272 FDB MERGE MERGE / D5 C201 D01B ( disk.asm):00273 FDB RENAME RENAME / D6 C203 D101 ( disk.asm):00274 FDB RSET RSET / D7 C205 C9E0 ( disk.asm):00275 FDB SAVE SAVE / D8 C207 D066 ( disk.asm):00276 FDB WRITE WRITE / D9 C209 D74E ( disk.asm):00277 FDB VERIFY VERIFY / DA C20B D233 ( disk.asm):00278 FDB UNLOAD UNLOAD / DB C20D D599 ( disk.asm):00279 FDB DSKINI DSKINI /DC C20F D262 ( disk.asm):00280 FDB BACKUP BACKUP / DD C211 D3B9 ( disk.asm):00281 FDB COPY COPY / DE C213 D4ED ( disk.asm):00282 FDB DSKI DSKI$ / DF C215 D562 ( disk.asm):00283 FDB DSKO DSKO$ / E0 C217 D6EC ( disk.asm):00284 FDB DOS DOS / E1 ( disk.asm):00285 * SECONDARY FUNCTION DICTIONARY TABLE ( disk.asm):00286 * TOKEN # C219 4356CE ( disk.asm):00287 LC219 FCS 'CVN' A2 C21C 465245C5 ( disk.asm):00288 FCS 'FREE' A3 C220 4C4FC3 ( disk.asm):00289 FCS 'LOC' A4 C223 4C4FC6 ( disk.asm):00290 FCS 'LOF' A5 C226 4D4B4EA4 ( disk.asm):00291 FCS 'MKN$' A6 C22A 41D3 ( disk.asm):00292 FCS 'AS' A7 ( disk.asm):00293 * DISK BASIC SECONDARY FUNCTION JUMP TABLE ( disk.asm):00294 * FUNCTION / TOKEN # C22C CDF4 ( disk.asm):00295 LC22C FDB CVN CVN / A2 C22E CE9C ( disk.asm):00296 FDB FREE FREE / A3 C230 CE10 ( disk.asm):00297 FDB LOC LOC / A4 C232 CE37 ( disk.asm):00298 FDB LOF LOF / A5 C234 CE02 ( disk.asm):00299 FDB MKN MKN$ / A6 C236 B277 ( disk.asm):00300 FDB LB277 AS / A7 ( disk.asm):00301 *DISK BASIC COMMAND INTERPRETATION HANDLER C238 81E1 ( disk.asm):00302 LC238 CMPA #DHITOK *COMPARE TO HIGHEST DISK BASIC TOKEN C23A 2208 ( disk.asm):00303 BHI LC244 *AND BRANCH IF HIGHER C23C 8EC1F1 ( disk.asm):00304 LDX #LC1F1 POINT X TO DISK BASIC COMMAND JUMP TABLE C23F 80CE ( disk.asm):00305 SUBA #$CE SUBTRACT OUT LOWEST DISK BASIC COMMAND TOKEN C241 7EADD4 ( disk.asm):00306 JMP >LADD4 JUMP TO BASIC'S COMMAND HANDLER C244 81E1 ( disk.asm):00307 LC244 CMPA #DHITOK COMPARE TO HIGHEST DISK BASIC TOKEN C246 1023F02D ( disk.asm):00308 LBLS LB277 'SYNTAX' ERROR IF < DISK BASIC COMMAND TOKEN C24A 6E9F0141 ( disk.asm):00309 JMP [COMVEC+33] PROCESS A USER COMMAND TOKEN ( disk.asm):00310 *DISK BASIC SECONDARY COMMAND INTERPRETATION HANDLER C24E C14E ( disk.asm):00311 LC24E CMPB #($A7-$80)*2 *COMPARE MODIFIED SECONDARY TOKEN TO C250 2304 ( disk.asm):00312 BLS LC256 *HIGHEST DISK BASIC TOKEN & BRANCH IF HIGHER C252 6E9F0146 ( disk.asm):00313 JMP [COMVEC+38] JUMP TO USER SECONDARY COMMAND HANDLER C256 C044 ( disk.asm):00314 LC256 SUBB #($A2-$80)*2 *SUBTRACT OUT THE SMALLEST SECONDARY C258 3404 ( disk.asm):00315 PSHS B *DISK TOKEN & SAVE MODIFIED TOKEN ON THE STACK C25A BDB262 ( disk.asm):00316 JSR >LB262 SYNTAX CHECK FOR '(' AND EVALUATE EXPRESSION C25D 3504 ( disk.asm):00317 PULS B RESTORE MODIFIED TOKEN C25F 8EC22C ( disk.asm):00318 LDX #LC22C POINT X TO SECONDARY COMMAND JUMP TABLE C262 7EB2CE ( disk.asm):00319 JMP >LB2CE JUMP TO BASIC'S SECONDARY COMMAND HANDLER ( disk.asm):00320 * ERROR DRIVER RAM VECTOR C265 3520 ( disk.asm):00321 DVEC17 PULS Y PUT THE RETURN ADDRESS INTO Y C267 BDAD33 ( disk.asm):00322 JSR >LAD33 RESET THE CONT FLAG, ETC C26A BDD2D2 ( disk.asm):00323 JSR >LD2D2 INITIALIZE SOME DISK VARIABLES AND CLOSE FILES C26D 3424 ( disk.asm):00324 PSHS Y,B PUT RETURN ADDRESS AND ERROR NUMBER ON THE STACK C26F BDCAE9 ( disk.asm):00325 JSR >DVEC7 CLOSE ALL FILES C272 3504 ( disk.asm):00326 PULS B GET THE ERROR NUMBER BACK C274 C136 ( disk.asm):00327 CMPB #2*27 COMPARE TO THE LOWEST DISK ERROR NUMBER C276 1025C676 ( disk.asm):00328 LBCS XVEC17 BRANCH TO EXBAS ERROR HANDLER IF NOT DISK ERROR NUMBER C27A 3262 ( disk.asm):00329 LEAS $02,S PURGE RETURN ADDRESS OFF THE STACK C27C BDA7E9 ( disk.asm):00330 JSR >LA7E9 TURN OFF THE CASSETTE MOTOR C27F BDA974 ( disk.asm):00331 JSR >LA974 DISABLE THE ANALOG MULTIPLEXER C282 0F6F ( disk.asm):00332 CLR DEVNUM SET DEVICE NUMBER TO THE SCREEN C284 BDB95C ( disk.asm):00333 JSR >LB95C SEND A CR TO THE SCREEN C287 BDB9AF ( disk.asm):00334 JSR >LB9AF SEND A '?' TO THE SCREEN C28A 8EC25A ( disk.asm):00335 LDX #LC290-2*27 POINT X TO DISK BASIC'S ERROR TABLE C28D 7EAC60 ( disk.asm):00336 JMP >LAC60 JUMP TO BASIC'S ERROR HANDLER ( disk.asm):00337 * DISK BASIC ERROR MESSAGES C290 4252 ( disk.asm):00338 LC290 FCC 'BR' 27 BAD RECORD C292 4446 ( disk.asm):00339 FCC 'DF' 28 DISK FULL C294 4F42 ( disk.asm):00340 FCC 'OB' 29 OUT OF BUFFER SPACE C296 5750 ( disk.asm):00341 FCC 'WP' 30 WRITE PROTECTED C298 464E ( disk.asm):00342 FCC 'FN' 31 BAD FILE NAME C29A 4653 ( disk.asm):00343 FCC 'FS' 32 BAD FILE STRUCTURE C29C 4145 ( disk.asm):00344 FCC 'AE' 33 FILE ALREADY EXISTS C29E 464F ( disk.asm):00345 FCC 'FO' 34 FIELD OVERFLOW C2A0 5345 ( disk.asm):00346 FCC 'SE' 35 SET TO NON-FIELDED STRING C2A2 5646 ( disk.asm):00347 FCC 'VF' 36 VERIFICATION ERROR C2A4 4552 ( disk.asm):00348 FCC 'ER' 37 WRITE OR INPUT PAST END OF RECORD ( disk.asm):00349 * DISK FILE EXTENSIONS C2A6 424153 ( disk.asm):00350 BASEXT FCC 'BAS' BASIC FILE EXTENSION C2A9 202020 ( disk.asm):00351 DEFEXT FCC " " BLANK (DEFAULT) FILE EXTENSION C2AC 444154 ( disk.asm):00352 DATEXT FCC 'DAT' DATA FILE EXTENSION C2AF 42494E ( disk.asm):00353 BINEXT FCC 'BIN' BINARY FILE EXTENSION ( disk.asm):00354 * CLS RAM VECTOR C2B2 3411 ( disk.asm):00355 DVEC22 PSHS X,CC SAVE X REG AND STATUS C2B4 AE63 ( disk.asm):00356 LDX $03,S LOAD X WITH CALLING ADDRESS C2B6 8C975F ( disk.asm):00357 CMPX #L975F COMING FROM EXBAS' GET/PUT? C2B9 2604 ( disk.asm):00358 BNE LC2BF NO C2BB 8123 ( disk.asm):00359 CMPA #'# NUMBER SIGN (GET#, PUT#)? C2BD 2702 ( disk.asm):00360 BEQ LC2C1 BRANCH IF GET OR PUT TO RANDOM FILE C2BF 3591 ( disk.asm):00361 LC2BF PULS CC,X,PC RESTORE X REG, STATUS AND RETURN ( disk.asm):00362 * GET/PUT TO A DIRECT/RANDOM FILE C2C1 3265 ( disk.asm):00363 LC2C1 LEAS $05,S PURGE RETURN ADDRESS AND REGISTERS OFF OF THE STACK C2C3 BDC82E ( disk.asm):00364 JSR >LC82E EVALUATE DEVICE NUMBER & SET FCB POINTER C2C6 9FF1 ( disk.asm):00365 STX FCBTMP SAVE FCB POINTER C2C8 6F8815 ( disk.asm):00366 CLR FCBGET,X * RESET THE GET C2CB 6F8816 ( disk.asm):00367 CLR FCBGET+1,X * DATA POINTER C2CE 6F8817 ( disk.asm):00368 CLR FCBPUT,X = RESET THE PUT C2D1 6F8818 ( disk.asm):00369 CLR FCBPUT+1,X = DATA POINTER C2D4 6F06 ( disk.asm):00370 CLR FCBPOS,X RESET PRINT POSITION COUNTER C2D6 A601 ( disk.asm):00371 LDA FCBDRV,X *GET THE FCB DRIVE NUMBER AND C2D8 97EB ( disk.asm):00372 STA DCDRV *SAVE IT IN DSKCON VARIABLE C2DA 9DA5 ( disk.asm):00373 JSR GETCCH GET CURRENT INPUT CHARACTER FROM BASIC C2DC 270C ( disk.asm):00374 BEQ LC2EA BRANCH IF END OF LINE C2DE BDB26D ( disk.asm):00375 JSR SYNCOMMA SYNTAX CHECK FOR COMMA C2E1 BDB73D ( disk.asm):00376 JSR >LB73D EVALUATE EXPRESSION - RETURN IN (X) C2E4 1F10 ( disk.asm):00377 TFR X,D SAVE RECORD NUMBER IN ACCD C2E6 9EF1 ( disk.asm):00378 LC2E6 LDX FCBTMP POINT X TO FCB C2E8 ED07 ( disk.asm):00379 STD FCBREC,X SAVE RECORD NUMBER IN FCB C2EA EC07 ( disk.asm):00380 LC2EA LDD FCBREC,X GET RECORD NUMBER C2EC 271D ( disk.asm):00381 BEQ LC30B 'BAD RECORD' ERROR IF RECORD NUMBER = 0 C2EE BDC685 ( disk.asm):00382 JSR >LC685 INCREMENT RECORD NUMBER C2F1 EC09 ( disk.asm):00383 LDD FCBRLN,X * GET RANDOM FILE RECORD LENGTH AND RANDOM FILE C2F3 AE0B ( disk.asm):00384 LDX FCBBUF,X * BUFFER POINTER AND SAVE THEM ON THE STACK - C2F5 3416 ( disk.asm):00385 PSHS X,B,A * THESE ARE THE INITIAL VALUES OF A TEMPORARY ( disk.asm):00386 * * RECORD LENGTH COUNTER AND RANDOM BUFFER ( disk.asm):00387 * * POINTER WHICH ARE MAINTAINED ON THE STACK C2F7 305E ( disk.asm):00388 LEAX $-2,U POINT X TO (RECORD NUMBER -1) C2F9 BD9FB5 ( disk.asm):00389 JSR >L9FB5 MULT (UNSIGNED) RECORD LENGTH X (RECORD NUMBER -1) C2FC 3460 ( disk.asm):00390 PSHS U,Y SAVE PRODUCT ON THE STACK C2FE A6E0 ( disk.asm):00391 LDA ,S+ CHECK MS BYTE OF PRODUCT C300 2609 ( disk.asm):00392 BNE LC30B 'BR' ERROR IF NOT ZERO (RECORD NUMBER TOO BIG) C302 3510 ( disk.asm):00393 PULS X * PULL THE BOTTOM 3 PRODUCT BYTES OFF THE STACK; C304 3504 ( disk.asm):00394 PULS B * TOP TWO IN X, BOTTOM IN ACCB; ACCB POINTS TO ( disk.asm):00395 * * THE FIRST BYTE OF THE SECTOR USED BY THIS RECORD, ( disk.asm):00396 * * (X) CONTAINS THE SECTOR OFFSET (IN WHICH SECTOR ( disk.asm):00397 * * FROM THE START THE BYTE IS LOCATED) C306 8C0264 ( disk.asm):00398 LC306 CMPX #(35-1)*18 612 SECTORS MAX IN A RANDOM FILE C309 2505 ( disk.asm):00399 BLO LC310 BRANCH IF RECORD LENGTH O.K. C30B C636 ( disk.asm):00400 LC30B LDB #2*27 'BAD RECORD' ERROR C30D 7EAC46 ( disk.asm):00401 JMP >LAC46 JUMP TO ERROR HANDLER C310 DEF1 ( disk.asm):00402 LC310 LDU FCBTMP POINT U TO FCB C312 AC4D ( disk.asm):00403 CMPX FCBSOF,U * COMPARE SAVED SECTOR OFFSET TO THE CURRENT SECTOR OFFSET C314 102700B7 ( disk.asm):00404 LBEQ LC3CF * BEING PROCESSED - DO NOT PROCESS A NEW SECTOR IF THEY ARE EQUAL C318 3414 ( disk.asm):00405 PSHS X,B SAVE BYTE AND SECTOR OFFSET TO RECORD START ON STACK C31A A64F ( disk.asm):00406 LDA FCBFLG,U * CHECK FCB GET/PUT FLAG AND C31C 2706 ( disk.asm):00407 BEQ LC324 * BRANCH IF IT WAS A GET C31E 6F4F ( disk.asm):00408 CLR FCBFLG,U FORCE GET/PUT TO 'PUT' C320 C603 ( disk.asm):00409 LDB #$03 DSKCON WRITE OP CODE C322 8D33 ( disk.asm):00410 BSR LC357 GO WRITE A SECTOR - SAVE 'PUT' DATA ON DISK ( disk.asm):00411 * CONVERT THE SECTOR OFFSET TO A GRANULE AND SECTOR NUMBER C324 EC61 ( disk.asm):00412 LC324 LDD $01,S * GET THE NUMBER OF SECTORS TO THE START OF C326 BDC784 ( disk.asm):00413 JSR >LC784 * THIS RECORD NUMBER AND CONVERT THEM TO A GRANULE OFFSET C329 3404 ( disk.asm):00414 PSHS B SAVE GRANULE OFFSET ON THE STACK C32B BDC779 ( disk.asm):00415 JSR >LC779 MULTIPLY GRANULE NUMBER X 9 - CONVERT TO NUMBER OF SECTORS C32E 50 ( disk.asm):00416 NEGB * NEGATE LS BYTE OF GRANULE OFFSET AND ADD THE C32F EB63 ( disk.asm):00417 ADDB $03,S * LS BYTE OF SECTOR OFFSET - ACCB = SECTOR ( disk.asm):00418 * * NUMBER (0-8) CORRESPONDING TO THE SECTOR NUMBER WITHIN A ( disk.asm):00419 * * GRANULE OF THE LAST SECTOR OF THE SECTOR OFFSET C331 5C ( disk.asm):00420 INCB = ADD ONE - SECTORS SAVED IN THE FCB; START C332 E744 ( disk.asm):00421 STB FCBSEC,U = AT 1 NOT 0 - SAVE IT IN THE FCB C334 E642 ( disk.asm):00422 LDB FCBFGR,U GET FIRST GRANULE IN FILE C336 BDC755 ( disk.asm):00423 JSR >LC755 POINT X TO FAT C339 3306 ( disk.asm):00424 LEAU FATCON,X POINT U TO FAT DATA C33B A6E4 ( disk.asm):00425 LDA ,S GET NUMBER OF GRANULES OFFSET TO RECORD C33D 4C ( disk.asm):00426 INCA ADD ONE (COMPENSATE FOR DECA BELOW) C33E 30C4 ( disk.asm):00427 LC33E LEAX ,U POINT X TO FAT DATA C340 3A ( disk.asm):00428 ABX POINT X TO CORRECT GRANULE C341 4A ( disk.asm):00429 DECA DECREMENT GRANULE COUNTER C342 2737 ( disk.asm):00430 BEQ LC37B BRANCH IF CORRECT GRANULE FOUND C344 E7E4 ( disk.asm):00431 STB ,S SAVE GRANULE ADDRESS ON STACK C346 E684 ( disk.asm):00432 LDB ,X GET NEXT GRANULE IN FILE C348 C1C0 ( disk.asm):00433 CMPB #$C0 LAST GRANULE IN FILE? C34A 25F2 ( disk.asm):00434 BLO LC33E NO - KEEP LOOKING ( disk.asm):00435 * THE GRANULE BEING SEARCHED FOR IS NOT PRESENTLY DEFINED IN THIS RANDOM FILE C34C E6E4 ( disk.asm):00436 LDB ,S GET OFFSET TO LAST GRANULE C34E 0DD8 ( disk.asm):00437 TST VD8 * CHECK GET/PUT FLAG C350 2614 ( disk.asm):00438 BNE LC366 * AND BRANCH IF PUT C352 C62E ( disk.asm):00439 LC352 LDB #2*23 'INPUT PAST END OF FILE' ERROR C354 7EAC46 ( disk.asm):00440 JMP >LAC46 JUMP TO ERROR HANDLER C357 30C819 ( disk.asm):00441 LC357 LEAX FCBCON,U POINT X TO FCB DATA BUFFER ( disk.asm):00442 * READ/WRITE A SECTOR. ENTER WITH OP CODE IN ACCB, BUFFER PTR IN X C35A D7EA ( disk.asm):00443 LC35A STB DCOPC SAVE DSKCON OPERATION CODE VARIABLE C35C 9FEE ( disk.asm):00444 STX DCBPT SAVE DSKCON LOAD BUFFER VARIABLE C35E 30C4 ( disk.asm):00445 LEAX ,U POINT X TO FCB C360 BDC763 ( disk.asm):00446 JSR >LC763 CONVERT FCB TRACK AND SECTOR TO DSKCON VARIABLES C363 7ED6F2 ( disk.asm):00447 JMP >LD6F2 READ/WRITE A TRACK OR SECTOR ( disk.asm):00448 * 'PUT' DATA INTO A GRANULE NOT PRESENTLY INCLUDED IN THIS FILE C366 3412 ( disk.asm):00449 LC366 PSHS X,A SAVE GRANULE COUNTER AND POINTER TO LAST USED GRANULE C368 BDC7BF ( disk.asm):00450 JSR >LC7BF FIND FIRST FREE GRANULE IN FAT C36B 1F89 ( disk.asm):00451 TFR A,B SAVE FREE GRANULE NUMBER IN ACCB C36D 3542 ( disk.asm):00452 PULS A,U PULL LAST GRANULE POINTER AND COUNTER OFF OF STACK C36F E7C4 ( disk.asm):00453 STB ,U SAVE NEWLY FOUND GRANULE NUMBER IN ADDRESS OF LAST GRANULE C371 4A ( disk.asm):00454 DECA DECREMENT GRANULE COUNTER C372 26F2 ( disk.asm):00455 BNE LC366 GET ANOTHER GRANULE IF NOT DONE C374 3414 ( disk.asm):00456 PSHS X,B SAVE POINTER TO LAST GRANULE AND OFFSET C376 BDC71E ( disk.asm):00457 JSR >LC71E WRITE FAT TO DISK C379 3514 ( disk.asm):00458 PULS B,X RESTORE POINTER AND OFFSET ( disk.asm):00459 * WHEN CORRECT GRANULE IS FOUND, FIND THE RIGHT SECTOR C37B 3261 ( disk.asm):00460 LC37B LEAS $01,S REMOVE GRAN NUMBER FROM STACK C37D DEF1 ( disk.asm):00461 LDU FCBTMP POINT U TO FCB C37F E743 ( disk.asm):00462 STB FCBCGR,U SAVE CURRENT GRANULE IN FCB C381 86FF ( disk.asm):00463 LDA #$FF *SET FCBSOF,U TO ILLEGAL SECTOR OFFSET WHICH WILL C383 A74D ( disk.asm):00464 STA FCBSOF,U *FORCE NEW SECTOR DATA TO BE READ IN C385 A684 ( disk.asm):00465 LDA ,X GET CURRENT GRANULE C387 81C0 ( disk.asm):00466 CMPA #$C0 IS IT THE LAST GRANULE? C389 2527 ( disk.asm):00467 BLO LC3B2 NO C38B 843F ( disk.asm):00468 ANDA #$3F MASK OFF LAST GRANULE FLAG BITS C38D A144 ( disk.asm):00469 CMPA FCBSEC,U * COMPARE CALCULATED SECTOR TO CURRENT SECTOR IN FCB C38F 2421 ( disk.asm):00470 BHS LC3B2 * AND BRANCH IF CALCULATED SECTOR IS > LAST SECTOR IN FILE C391 96D8 ( disk.asm):00471 LDA VD8 = CHECK GET/PUT FLAG: IF 'GET' THEN 'INPUT C393 27BD ( disk.asm):00472 BEQ LC352 = PAST END OF FILE' ERROR C395 A644 ( disk.asm):00473 LDA FCBSEC,U * GET CURRENT SECTOR NUMBER FROM FCB, C397 8AC0 ( disk.asm):00474 ORA #$C0 * OR IN THE LAST GRANULE FLAG BITS C399 A784 ( disk.asm):00475 STA ,X * AND SAVE IN FAT C39B BDC5A9 ( disk.asm):00476 JSR >LC5A9 WRITE FAT TO DISK IF NECESSARY C39E AE49 ( disk.asm):00477 LDX FCBRLN,U * GET RECORD LENGTH AND CHECK TO C3A0 8C0100 ( disk.asm):00478 CMPX #SECLEN * SEE IF IT IS SECLEN (EXACTLY ONE SECTOR) C3A3 2608 ( disk.asm):00479 BNE LC3AD BRANCH IF IT IS NOT EXACTLY ONE SECTOR C3A5 ACC813 ( disk.asm):00480 CMPX FCBLST,U =BRANCH IF THE NUMBER OF BYTES IN THE LAST SECTOR C3A8 2708 ( disk.asm):00481 BEQ LC3B2 =IS SET TO ONE SECTOR (SECLEN) C3AA 8681 ( disk.asm):00482 LDA #$81 *SET THE PRESAVED FLAG (BIT15) AND FORCE C3AC 21 ( disk.asm):00483 LC3AC FCB $21 *THE NUMBER OF BYTES IN LAST SECTOR TO 256 (THROWN AWAY BRN INSTRUCTION) C3AD 4F ( disk.asm):00484 LC3AD CLRA SET THE NUMBER OF BYTES IN LAST SECTOR TO ZERO C3AE 5F ( disk.asm):00485 CLRB CLEAR LS BYTE OF ACCD C3AF EDC813 ( disk.asm):00486 STD FCBLST,U SAVE THE NUMBER OF BYTES IN LAST SECTOR C3B2 C602 ( disk.asm):00487 LC3B2 LDB #$02 DSKCON READ OP CODE C3B4 AE49 ( disk.asm):00488 LDX FCBRLN,U * GET RECORD LENGTH AND COMPARE C3B6 8C0100 ( disk.asm):00489 CMPX #SECLEN * IT TO SECLEN - EXACTLY ONE SECTOR C3B9 260D ( disk.asm):00490 BNE LC3C8 BRANCH IF NOT EXACTLY ONE SECTOR LONG C3BB 3267 ( disk.asm):00491 LEAS $07,S CLEAN UP STACK C3BD AE4B ( disk.asm):00492 LDX FCBBUF,U POINT X TO START OF RANDOM FILE BUFFER C3BF 96D8 ( disk.asm):00493 LDA VD8 * CHECK GET/PUT FLAG AND C3C1 2702 ( disk.asm):00494 BEQ LC3C5 * BRANCH IF GET C3C3 C603 ( disk.asm):00495 LDB #$03 DSKCON WRITE OP CODE C3C5 7EC35A ( disk.asm):00496 LC3C5 JMP >LC35A READ/WRITE A SECTOR C3C8 BDC357 ( disk.asm):00497 LC3C8 JSR >LC357 READ A SECTOR INTO FCB DATA BUFFER C3CB 3514 ( disk.asm):00498 PULS B,X * GET BACK THE BYTE OFFSET TO RECORD: X = NUMBER OF ( disk.asm):00499 * * SECTORS; ACCB = BYTE POINTER IN SECTOR C3CD AF4D ( disk.asm):00500 STX FCBSOF,U SAVE SECTOR OFFSET IN FCB C3CF 3404 ( disk.asm):00501 LC3CF PSHS B SAVE BYTE OFFSET ON STACK C3D1 BDC755 ( disk.asm):00502 JSR >LC755 POINT X TO FILE ALLOCATION TABLE C3D4 3006 ( disk.asm):00503 LEAX FATCON,X MOVE X TO FAT DATA C3D6 E643 ( disk.asm):00504 LDB FCBCGR,U GET CURRENT GRANULE NUMBER C3D8 3A ( disk.asm):00505 ABX POINT X TO PROPER GRANULE IN FAT C3D9 A684 ( disk.asm):00506 LDA ,X * GET CURRENT GRANULE AND CHECK TO C3DB 81C0 ( disk.asm):00507 CMPA #$C0 * SEE IF IT IS LAST GRANULE C3DD 252B ( disk.asm):00508 BLO LC40A BRANCH IF THIS GRANULE IS < LAST GRANULE C3DF 843F ( disk.asm):00509 ANDA #$3F MASK OFF LAST GRANULE FLAG BITS C3E1 A144 ( disk.asm):00510 CMPA FCBSEC,U * COMPARE LAST SECTOR USED IN GRANULE TO C3E3 2625 ( disk.asm):00511 BNE LC40A * CALCULATED SECTOR; BRANCH IF NOT EQUAL C3E5 ECC813 ( disk.asm):00512 LDD FCBLST,U GET NUMBER OF BYTES IN LAST SECTOR C3E8 847F ( disk.asm):00513 ANDA #$7F MASK OFF PRESAVED FLAG (BIT 15) C3EA 3406 ( disk.asm):00514 PSHS B,A SAVE NUMBER OF BYTES IN LAST SECTOR ON STACK C3EC 4F ( disk.asm):00515 CLRA * LOAD ACCB WITH THE BYTE OFFSET TO CURRENT C3ED E662 ( disk.asm):00516 LDB $02,S * RECORD AND ADD THE REMAINING RECORD LENGTH C3EF E363 ( disk.asm):00517 ADDD $03,S * TO IT - ACCD = END OF RECORD OFFSET C3F1 10A3E1 ( disk.asm):00518 CMPD ,S++ =COMPARE THE END OF RECORD OFFSET TO THE NUMBER OF C3F4 2314 ( disk.asm):00519 BLS LC40A =BYTES USED IN THE LAST SECTOR C3F6 0DD8 ( disk.asm):00520 TST VD8 * CHECK GET/PUT FLAG AND BRANCH IF 'GET' C3F8 1027FF56 ( disk.asm):00521 LBEQ LC352 * TO 'INPUT PAST END OF FILE' ERROR ( disk.asm):00522 * IF LAST USED SECTOR, CALCULATE HOW MANY BYTES ARE USED ( disk.asm):00523 * IF DATA IS BEING 'PUT' PASTH THE CURRENT END OF FILE C3FC 10830100 ( disk.asm):00524 CMPD #SECLEN COMPARE TO ONE SECTOR'S LENGTH C400 2303 ( disk.asm):00525 BLS LC405 BRANCH IF REMAINDER OF RECORD LENGTH WILL FIT IN THIS SECTOR C402 CC0100 ( disk.asm):00526 LDD #SECLEN FORCE NUMBER OF BYTES = ONE SECTOR LENGTH C405 8A80 ( disk.asm):00527 LC405 ORA #$80 * SET PRE-SAVED FLAG BIT - ALL PUT RECORDS ARE ( disk.asm):00528 * * WRITTEN TO DISK BEFORE LEAVING 'PUT' C407 EDC813 ( disk.asm):00529 STD FCBLST,U SAVE NUMBER OF BYTES USED IN LAST SECTOR C40A 3504 ( disk.asm):00530 LC40A PULS B PULL BYTE OFFSET OFF OF THE STACK C40C 30C819 ( disk.asm):00531 LEAX FCBCON,U POINT X TO FCB DATA BUFFER C40F 3A ( disk.asm):00532 ABX MOVE X TO START OF RECORD C410 EE62 ( disk.asm):00533 LDU $02,S POINT U TO CURRENT POSITION IN RANDOM FILE BUFFER C412 3404 ( disk.asm):00534 PSHS B SAVE BYTE OFFSET ON STACK C414 86FF ( disk.asm):00535 LDA #-1 * CONVERT ACCD INTO A NEGATIVE 2 BYTE NUMBER ( disk.asm):00536 * * REPRESENTING THE REMAINING UNUSED BYTES IN THE SECTOR C416 E361 ( disk.asm):00537 ADDD $01,S * ADD TEMPORARY RECORD LENGTH COUNTER (SUBTRACT ( disk.asm):00538 * * REMAINING BYTES FROM TEMPORARY RECORD LENGTH) C418 2407 ( disk.asm):00539 BHS LC421 BRANCH IF THERE ARE ENOUGH UNUSED BYTES TO FINISH THE RECORD C41A ED61 ( disk.asm):00540 STD $01,S SAVE NEW TEMPORARY RECORD LENGTH COUNTER C41C 3504 ( disk.asm):00541 PULS B RESTORE BYTE COUNTER C41E 50 ( disk.asm):00542 NEGB * NEGATE IT - ACCB = THE NUMBER OF BYTES ( disk.asm):00543 * * AVAILABLE TO A RECORD IN THIS SECTOR C41F 2008 ( disk.asm):00544 BRA LC429 MOVE THE DATA ( disk.asm):00545 * BRANCH HERE IF REMAINING RECORD LENGTH WILL FIT IN ( disk.asm):00546 * WHAT'S LEFT OF THE CURRENTLY SELECTED SECTOR C421 E662 ( disk.asm):00547 LC421 LDB $02,S GET REMAINING RECORD LENGTH C423 6F61 ( disk.asm):00548 CLR $01,S * CLEAR THE TEMPORARY RECORD LENGTH C425 6F62 ( disk.asm):00549 CLR $02,S * COUNTER ON THE STACK C427 3261 ( disk.asm):00550 LEAS $01,S PURGE BYTE OFFSET FROM STACK C429 96D8 ( disk.asm):00551 LC429 LDA VD8 * CHECK GET/PUT FLAG AND C42B 2702 ( disk.asm):00552 BEQ LC42F * BRANCH IF GET C42D 1E13 ( disk.asm):00553 EXG X,U SWAP SOURCE AND DESTINATION POINTERS C42F BDA59A ( disk.asm):00554 LC42F JSR >LA59A TRANSFER DATA FROM SOURCE TO DESTINATION BUFFERS C432 EF62 ( disk.asm):00555 STU $02,S SAVE NEW TEMP RECORD POINTER ON THE STACK (GET) ( disk.asm):00556 * MOVE DATA FROM FCB DATA BUFFER TO THE RANDOM FILE BUFFER IF 'GET' ( disk.asm):00557 * OR FROM RANDOM FILE BUFFER TO FCB DATA BUFFER IF 'PUT' C434 DEF1 ( disk.asm):00558 LDU FCBTMP POINT U TO FCB C436 96D8 ( disk.asm):00559 LDA VD8 * CHECK GET/PUT FLAG AND C438 2704 ( disk.asm):00560 BEQ LC43E * BRANCH IF GET C43A A74F ( disk.asm):00561 STA FCBFLG,U SAVE 'PUT' FLAG IN THE FCB C43C AF62 ( disk.asm):00562 STX $02,S SAVE NEW TEMPORARY RECORD POINTER ON STACK (PUT) C43E AE4D ( disk.asm):00563 LC43E LDX FCBSOF,U * GET SECTOR OFFSET COUNTER AND C440 3001 ( disk.asm):00564 LEAX $01,X * ADD ONE TO IT C442 5F ( disk.asm):00565 CLRB SET BYTE OFFSET = 0 C443 EEE4 ( disk.asm):00566 LDU ,S * CHECK THE LENGTH OF THE TEMPORARY RECORD LENGTH C445 1026FEBD ( disk.asm):00567 LBNE LC306 * COUNTER AND KEEP MOVING DATA IF <> 0 C449 3596 ( disk.asm):00568 PULS A,B,X,PC * PULL TEMPORARY RECORD LENGTH AND ( disk.asm):00569 * * BUFFER ADDRESS OFF STACK AND RETURN ( disk.asm):00570 * OPEN RAM HOOK C44B 3262 ( disk.asm):00571 DVEC0 LEAS $02,S PULL RETURN ADDRESS OFF OF THE STACK C44D BDB156 ( disk.asm):00572 JSR >LB156 EVALUATE AN EXPRESSION C450 BDB6A4 ( disk.asm):00573 JSR >LB6A4 *GET MODE(I,O,R) - FIRST BYTE OF STRING EXPRESSION C453 3404 ( disk.asm):00574 PSHS B *AND SAVE IT ON STACK C455 BDA5A2 ( disk.asm):00575 JSR >LA5A2 GET DEVICE NUMBER C458 5D ( disk.asm):00576 TSTB SET FLAGS C459 102FE1A6 ( disk.asm):00577 LBLE LA603 BRANCH IF NOT A DISK FILE C45D 3502 ( disk.asm):00578 PULS A GET MODE C45F 3406 ( disk.asm):00579 PSHS B,A SAVE MODE AND DEVICE NUMBER (FILE NUMBER) C461 0F6F ( disk.asm):00580 CLR DEVNUM SET DEVICE NUMBER TO SCREEN C463 BDB26D ( disk.asm):00581 JSR SYNCOMMA SYNTAX CHECK FOR COMMA C466 8EC2AC ( disk.asm):00582 LDX #DATEXT POINT TO 'DAT' FOR EXTENSION C469 BDC938 ( disk.asm):00583 JSR >LC938 GET FILENAME FROM BASIC C46C CC01FF ( disk.asm):00584 LDD #$01FF DEFAULT DISK FILE TYPE AND ASCII FLAG C46F FD0957 ( disk.asm):00585 STD DFLTYP SAVE DEFAULT VALUES: DATA, ASCII C472 8E0100 ( disk.asm):00586 LDX #SECLEN DEFAULT RECORD LENGTH - 1 PAGE C475 9DA5 ( disk.asm):00587 JSR GETCCH GET CHAR FROM BASIC C477 2708 ( disk.asm):00588 BEQ LC481 BRANCH IF END OF LINE C479 BDB26D ( disk.asm):00589 JSR SYNCOMMA SYNTAX CHECK FOR COMMA C47C BDB3E6 ( disk.asm):00590 JSR >LB3E6 EVALUATE EXPRESSION C47F 9E52 ( disk.asm):00591 LDX FPA0+2 GET EVALUATED EXPRESSION C481 BF097C ( disk.asm):00592 LC481 STX DFFLEN RECORD LENGTH C484 1027EFC2 ( disk.asm):00593 LBEQ LB44A IF = 0, THEN 'ILLEGAL FUNCTION CALL' C488 BDA5C7 ( disk.asm):00594 JSR >LA5C7 ERROR IF ANY FURTHER CHARACTERS ON LINE C48B 3506 ( disk.asm):00595 PULS A,B GET MODE AND FILE NUMBER ( disk.asm):00596 * OPEN DISK FILE FOR READ OR WRITE C48D 3402 ( disk.asm):00597 LC48D PSHS A SAVE MODE ON STACK C48F BDC749 ( disk.asm):00598 JSR >LC749 POINT X TO FCB FOR THIS FILE C492 1026E186 ( disk.asm):00599 LBNE LA61C 'FILE ALREADY OPEN' ERROR IF FILE OPEN C496 9FF1 ( disk.asm):00600 STX FCBTMP SAVE FILE BUFFER POINTER C498 BDC79D ( disk.asm):00601 JSR >LC79D MAKE SURE FILE ALLOC TABLE IS VALID C49B BDC68C ( disk.asm):00602 JSR >LC68C SCAN DIRECTORY FOR 'FILENAME.EXT' C49E 3504 ( disk.asm):00603 PULS B GET MODE C4A0 8610 ( disk.asm):00604 LDA #INPFIL INPUT TYPE FILE C4A2 3402 ( disk.asm):00605 PSHS A SAVE FILE TYPE ON STACK C4A4 C149 ( disk.asm):00606 CMPB #'I INPUT MODE? C4A6 261F ( disk.asm):00607 BNE LC4C7 BRANCH IF NOT ( disk.asm):00608 * OPEN A SEQUENTIAL FILE FOR INPUT C4A8 BDC6E5 ( disk.asm):00609 JSR >LC6E5 CHECK TO SEE IF DIRECTORY MATCH IS FOUND C4AB BDC807 ( disk.asm):00610 JSR >LC807 CHECK TO SEE IF FILE ALREADY OPEN C4AE BE0974 ( disk.asm):00611 LDX V974 GET RAM DIRECTORY BUFFER C4B1 EC0B ( disk.asm):00612 LDD DIRTYP,X GET FILE TYPE AND ASCII FLAG C4B3 FD0957 ( disk.asm):00613 STD DFLTYP SAVE IN RAM IMAGE C4B6 8D75 ( disk.asm):00614 BSR LC52D INITIALIZE FILE BUFFER CONTROL BLOCK C4B8 BDC627 ( disk.asm):00615 JSR >LC627 GO FILL DATA BUFFER C4BB BDC755 ( disk.asm):00616 LC4BB JSR >LC755 POINT X TO PROPER FILE ALLOCATION TABLE C4BE 6C00 ( disk.asm):00617 INC FAT0,X ADD ONE TO FAT ACTIVE FILE COUNTER C4C0 9EF1 ( disk.asm):00618 LDX FCBTMP GET FILE BUFFER POINTER C4C2 3502 ( disk.asm):00619 PULS A GET FILE TYPE C4C4 A700 ( disk.asm):00620 STA FCBTYP,X SAVE IT IN FCB C4C6 39 ( disk.asm):00621 RTS C4C7 68E4 ( disk.asm):00622 LC4C7 ASL ,S SET FILE TYPE TO OUTPUT C4C9 C14F ( disk.asm):00623 CMPB #'O FILE MODE = OUTPUT? C4CB 261B ( disk.asm):00624 BNE LC4E8 BRANCH IF NOT ( disk.asm):00625 * OPEN A SEQUENTIAL FILE FOR OUTPUT C4CD 7D0973 ( disk.asm):00626 TST V973 DOES FILE EXIST ON DIRECTORY? C4D0 270F ( disk.asm):00627 BEQ LC4E1 BRANCH IF NOT C4D2 BDC6FC ( disk.asm):00628 JSR >LC6FC KILL THE OLD FILE C4D5 B60973 ( disk.asm):00629 LDA V973 * GET DIRECTORY SECTOR NUMBER OF OLD FILE AND C4D8 B70977 ( disk.asm):00630 STA V977 * SAVE IT AS FIRST FREE DIRECTORY ENTRY C4DB BE0974 ( disk.asm):00631 LDX V974 =GET RAM DIRECTORY IMAGE OF OLD FILE AND C4DE BF0978 ( disk.asm):00632 STX V978 =SAVE IT AS FIRST FREE DIRECTORY ENTRY C4E1 BDC567 ( disk.asm):00633 LC4E1 JSR >LC567 SET UP NEW DIRECTORY ENTRY ON DISK C4E4 8D52 ( disk.asm):00634 BSR LC538 INITIALIZE FILE BUFFER C4E6 20D3 ( disk.asm):00635 BRA LC4BB FLAG AND MAP FCB AS BEING USED C4E8 C152 ( disk.asm):00636 LC4E8 CMPB #'R FILE MODE = R (RANDOM)? C4EA 2706 ( disk.asm):00637 BEQ LC4F2 BRANCH IF SO C4EC C144 ( disk.asm):00638 CMPB #'D FILE MODE = D (DIRECT)? C4EE 1026E124 ( disk.asm):00639 LBNE LA616 'BAD FILE MODE' ERROR IF NOT ( disk.asm):00640 * OPEN A RANDOM/DIRECT FILE C4F2 68E4 ( disk.asm):00641 LC4F2 ASL ,S SET FILE TYPE TO DIRECT C4F4 FC0948 ( disk.asm):00642 LDD RNBFAD * GET ADDRESS OF RANDOM FILE BUFFER AREA C4F7 3406 ( disk.asm):00643 PSHS B,A * AND SAVE IT ON THE STACK C4F9 F3097C ( disk.asm):00644 ADDD DFFLEN ADD THE RECORD LENGTH C4FC 2506 ( disk.asm):00645 BLO LC504 'OB' ERROR IF SUM > $FFFF C4FE 10B3094A ( disk.asm):00646 CMPD FCBADR IS IT > THAN FCB DATA AREA? C502 2305 ( disk.asm):00647 BLS LC509 BRANCH IF NOT C504 C63A ( disk.asm):00648 LC504 LDB #2*29 'OUT OF BUFFER SPACE' ERROR C506 7EAC46 ( disk.asm):00649 JMP >LAC46 JUMP TO ERROR HANDLER C509 3406 ( disk.asm):00650 LC509 PSHS B,A SAVE END OF RANDOM BUFFER ON STACK C50B 7D0973 ( disk.asm):00651 TST V973 DID THIS FILE EXIST C50E 2604 ( disk.asm):00652 BNE LC514 BRANCH IF SO C510 8D55 ( disk.asm):00653 BSR LC567 SET UP NEW FILE IN DIRECTORY C512 2005 ( disk.asm):00654 BRA LC519 INITIALIZE FCB C514 86FF ( disk.asm):00655 LC514 LDA #$FF * SET FILE TYPE MATCH = $FF (ILLEGAL VALUE) - C516 BDC807 ( disk.asm):00656 JSR >LC807 * THIS WILL FORCE ANY OPEN MATCHED FILE TO CAUSE ( disk.asm):00657 * * A 'FILE ALREADY OPEN' ERROR C519 8D12 ( disk.asm):00658 LC519 BSR LC52D INITIALIZE FCB C51B 630D ( disk.asm):00659 COM FCBSOF,X * SET FCBSOF,X TO $FF (ILLEGAL SECTOR OFFSET) WHICH WILL ( disk.asm):00660 * * FORCE NEW SECTOR DATA TO BE READ IN DURING GET/PUT C51D 6C08 ( disk.asm):00661 INC FCBREC+1,X INITIALIZE RECORD NUMBER = 1 C51F 3546 ( disk.asm):00662 PULS A,B,U U = START OF RANDOM FILE BUFFER AREA, ACCD = END C521 FD0948 ( disk.asm):00663 STD RNBFAD SAVE NEW START OF RANDOM FILE BUFFER AREA C524 EF0B ( disk.asm):00664 STU FCBBUF,X SAVE BUFFER START IN FCB C526 FE097C ( disk.asm):00665 LDU DFFLEN * GET RANDOM FILE RECORD LENGTH C529 EF09 ( disk.asm):00666 STU FCBRLN,X * AND SAVE IT IN FCB C52B 208E ( disk.asm):00667 BRA LC4BB SET FAT FLAG, SAVE FILE TYPE IN FCB ( disk.asm):00668 * INITIALIZE FCB DATA FOR INPUT C52D 8D09 ( disk.asm):00669 LC52D BSR LC538 INITIALIZE FCB C52F FE0974 ( disk.asm):00670 LDU V974 GET RAM DIRECTORY IMAGE C532 EE4E ( disk.asm):00671 LDU DIRLST,U *GET NUMBER OF BYTES IN LAST SECTOR OF FILE C534 EF8813 ( disk.asm):00672 STU FCBLST,X *SAVE IT IN FCB C537 39 ( disk.asm):00673 RTS ( disk.asm):00674 * INITIALIZE FILE CONTROL BLOCK C538 9EF1 ( disk.asm):00675 LC538 LDX FCBTMP GET CURRENT FILE BUFFER C53A C619 ( disk.asm):00676 LDB #FCBCON CLEAR FCB CONTROL BYTES C53C 6F80 ( disk.asm):00677 LC53C CLR ,X+ CLEAR A BYTE C53E 5A ( disk.asm):00678 DECB DECREMENT COUNTER C53F 26FB ( disk.asm):00679 BNE LC53C BRANCH IF NOT DONE C541 9EF1 ( disk.asm):00680 LDX FCBTMP GET CURRENT FILE BUFFER ADDRESS BACK C543 96EB ( disk.asm):00681 LDA DCDRV *GET CURRENT DRIVE NUMBER AND C545 A701 ( disk.asm):00682 STA FCBDRV,X *SAVE IT IN FCB C547 B60976 ( disk.asm):00683 LDA V976 =GET FIRST GRANULE - C54A A702 ( disk.asm):00684 STA FCBFGR,X =SAVE IT AS THE STARTING GRANULE NUMBER AND C54C A703 ( disk.asm):00685 STA FCBCGR,X =SAVE IT AS CURRENT GRANULE NUMBER C54E F60973 ( disk.asm):00686 LDB V973 GET DIRECTORY SECTOR NUMBER C551 C003 ( disk.asm):00687 SUBB #$03 SUBTRACT 3 - DIRECTORY SECTORS START AT 3 C553 58 ( disk.asm):00688 ASLB * MULTIPLY SECTORS C554 58 ( disk.asm):00689 ASLB * BY 8 (8 DIRECTORY C555 58 ( disk.asm):00690 ASLB * ENTRIES PER SECTOR) C556 3404 ( disk.asm):00691 PSHS B SAVE SECTOR OFFSET C558 FC0974 ( disk.asm):00692 LDD V974 GET RAM DIRECTORY IMAGE C55B 830600 ( disk.asm):00693 SUBD #DBUF0 SUBTRACT RAM OFFSET C55E 8608 ( disk.asm):00694 LDA #$08 8 DIRECTORY ENTRIES/SECTOR C560 3D ( disk.asm):00695 MUL NOW ACCA CONTAINS 0-7 C561 ABE0 ( disk.asm):00696 ADDA ,S+ ACCA CONTAINS DIRECTORY ENTRY (0-71) C563 A78812 ( disk.asm):00697 STA FCBDIR,X SAVE DIRECTORY ENTRY NUMBER C566 39 ( disk.asm):00698 RTS ( disk.asm):00699 * SET UP DIRECTORY AND UPDATE FILE ALLOCATION TABLE ENTRY IN FIRST UNUSED SECTOR C567 C638 ( disk.asm):00700 LC567 LDB #28*2 'DISK FULL' ERROR C569 B60977 ( disk.asm):00701 LDA V977 GET SECTOR NUMBER OF FIRST EMPTY DIRECTORY ENTRY C56C 1027E6D6 ( disk.asm):00702 LBEQ LAC46 'DISK FULL' ERROR IF NO EMPTY DIRECTORY ENTRIES C570 B70973 ( disk.asm):00703 STA V973 SAVE SECTOR NUMBER OF FIRST EMPTY DIRECTORY ENTRY C573 97ED ( disk.asm):00704 STA DSEC SAVE SECTOR NUMBER IN DSKCON REGISTER C575 C602 ( disk.asm):00705 LDB #$02 READ OP CODE C577 D7EA ( disk.asm):00706 STB DCOPC SAVE IN DSKCON REGISTER C579 BDD6F2 ( disk.asm):00707 JSR >LD6F2 READ SECTOR C57C BE0978 ( disk.asm):00708 LDX V978 * GET ADDRESS OF RAM IMAGE OF UNUSED DIRECTORY C57F BF0974 ( disk.asm):00709 STX V974 * ENTRY AND SAVE AS CURRENT USED RAM IMAGE C582 3384 ( disk.asm):00710 LEAU ,X (TFR X,U) POINT U TO DIRECTORY RAM IMAGE C584 C620 ( disk.asm):00711 LDB #DIRLEN SET COUNTER TO CLEAR 32 BYTES (DIRECTORY ENTRY) C586 6F80 ( disk.asm):00712 LC586 CLR ,X+ CLEAR BYTE C588 5A ( disk.asm):00713 DECB DECREMENT COUNTER C589 26FB ( disk.asm):00714 BNE LC586 CONTINUE IF NOT DONE C58B 8E094C ( disk.asm):00715 LDX #DNAMBF POINT TO FILENAME AND EXTENSION RAM IMAGE C58E C60B ( disk.asm):00716 LDB #11 11 BYTES IN FILENAME AND EXTENSION C590 BDA59A ( disk.asm):00717 JSR >LA59A MOVE B BYTES FROM X TO U C593 FC0957 ( disk.asm):00718 LDD DFLTYP GET FILE TYPE AND ASCII FLAG C596 ED40 ( disk.asm):00719 STD $00,U SAVE IN RAM IMAGE C598 C621 ( disk.asm):00720 LDB #33 FIRST GRANULE TO CHECK C59A BDC7BF ( disk.asm):00721 JSR >LC7BF FIND THE FIRST FREE GRANULE C59D B70976 ( disk.asm):00722 STA V976 SAVE IN RAM C5A0 A742 ( disk.asm):00723 STA $02,U SAVE IN RAM IMAGE OF DIRECTORY TRACK C5A2 C603 ( disk.asm):00724 LDB #$03 * GET WRITE OPERATION CODE AND SAVE C5A4 D7EA ( disk.asm):00725 STB DCOPC * IT IN DSKCON REGISTER C5A6 BDD6F2 ( disk.asm):00726 JSR >LD6F2 GO WRITE A SECTOR IN DIRECTORY C5A9 3456 ( disk.asm):00727 LC5A9 PSHS U,X,B,A SAVE REGISTERS C5AB BDC755 ( disk.asm):00728 JSR >LC755 POINT X TO FILE ALLOCATION TABLE C5AE 6C01 ( disk.asm):00729 INC FAT1,X INDICATE NEW DATA IN FILE ALLOC TABLE C5B0 A601 ( disk.asm):00730 LDA FAT1,X GET NEW DATA FLAG C5B2 B1097A ( disk.asm):00731 CMPA WFATVL * HAVE ENOUGH GRANULES BEEN REMOVED FROM THE FAT TO ( disk.asm):00732 * * CAUSE THE FAT TO BE WRITTEN TO THE DISK C5B5 2503 ( disk.asm):00733 BLO LC5BA RETURN IF NO NEED TO WRITE OUT ALLOCATION TABLE C5B7 BDC71E ( disk.asm):00734 JSR >LC71E WRITE FILE ALLOCATION SECTOR TO DISK C5BA 35D6 ( disk.asm):00735 LC5BA PULS A,B,X,U,PC RESTORE REGISTERS ( disk.asm):00736 * CONSOLE IN RAM VECTOR C5BC 966F ( disk.asm):00737 DVEC4 LDA DEVNUM GET DEVICE NUMBER C5BE 102FC72F ( disk.asm):00738 LBLE XVEC4 BRANCH IF NOT DISK FILE C5C2 3262 ( disk.asm):00739 LEAS $02,S GET RID OF RETURN ADDRESS C5C4 3414 ( disk.asm):00740 LC5C4 PSHS X,B SAVE REGISTERS C5C6 0F70 ( disk.asm):00741 CLR CINBFL CLEAR BUFFER NOT EMPTY FLAG C5C8 8E0926 ( disk.asm):00742 LDX #FCBV1-2 POINT TO FILE BUFFER VECTOR TABLE C5CB D66F ( disk.asm):00743 LDB DEVNUM GET ACTIVE DISK FILE NUMBER C5CD 58 ( disk.asm):00744 ASLB TIMES 2 - TWO BYTES PER FCB ADDRESS C5CE AE85 ( disk.asm):00745 LDX B,X NOW X POINTS TO FILE BUFFER C5D0 E684 ( disk.asm):00746 LDB ,X GET FILE TYPE (FCBTYP,X) C5D2 C140 ( disk.asm):00747 CMPB #RANFIL IS THIS A RANDOM (DIRECT) FILE? C5D4 2616 ( disk.asm):00748 BNE LC5EC BRANCH IF NOT ( disk.asm):00749 * GET A BYTE FROM A RANDOM FILE - RETURN CHAR IN ACCA C5D6 EC8815 ( disk.asm):00750 LDD FCBGET,X GET THE RECORD COUNTER C5D9 10A309 ( disk.asm):00751 CMPD FCBRLN,X *COMPARE TO RECORD LENGTH AND C5DC 2420 ( disk.asm):00752 BHS LC5FE *BRANCH TO BUFFER EMPTY IF >= RECORD LENGTH C5DE C30001 ( disk.asm):00753 ADDD #$0001 = ADD ONE TO RECORD POINTER AND C5E1 ED8815 ( disk.asm):00754 STD FCBGET,X = SAVE IT IN FCB C5E4 AE0B ( disk.asm):00755 LDX FCBBUF,X * POINT X TO START OF RANDOM FILE BUFFER AND C5E6 308B ( disk.asm):00756 LEAX D,X * ADD THE RECORD COUNTER TO IT C5E8 A61F ( disk.asm):00757 LDA $-1,X GET A CHARACTER FROM THE BUFFER C5EA 3594 ( disk.asm):00758 PULS B,X,PC RESTORE REGISTERS AND RETURN ( disk.asm):00759 * GET A BYTE FROM A SEQUENTIAL FILE C5EC E68810 ( disk.asm):00760 LC5EC LDB FCBCFL,X * TEST THE CACHE FLAG AND BRANCH IF AN C5EF 2708 ( disk.asm):00761 BEQ LC5F9 * EXTRA CHARACTER HAS NOT BEEN READ FROM FILE C5F1 A68811 ( disk.asm):00762 LDA FCBCDT,X GET THE CACHE CHARACTER C5F4 6F8810 ( disk.asm):00763 CLR FCBCFL,X CLEAR THE CACHE FLAG C5F7 3594 ( disk.asm):00764 PULS B,X,PC RESTORE REGISTERS AND RETURN C5F9 E68817 ( disk.asm):00765 LC5F9 LDB FCBDFL,X IS ANY DATA LEFT? C5FC 2704 ( disk.asm):00766 BEQ LC602 BRANCH IF SO C5FE 0370 ( disk.asm):00767 LC5FE COM CINBFL SET FLAG TO BUFFER EMPTY C600 3594 ( disk.asm):00768 PULS B,X,PC RESTORE REGISTERS AND RETURN C602 E605 ( disk.asm):00769 LC602 LDB FCBCPT,X GET CHARACTER POINTER C604 6C05 ( disk.asm):00770 INC FCBCPT,X ADD ONE TO CHARACTER POINTER C606 6A8818 ( disk.asm):00771 DEC FCBLFT,X DECREMENT NUMBER OF CHARACTERS LEFT IN FILE BUFFER C609 2706 ( disk.asm):00772 BEQ LC611 IF LAST CHARACTER, GO GET SOME MORE C60B 3A ( disk.asm):00773 ABX ADD CHARACTER COUNTER TO X C60C A68819 ( disk.asm):00774 LDA FCBCON,X GET DATA CHARACTER (SKIP PAST 25 FCB CONTROL BYTES C60F 3594 ( disk.asm):00775 PULS B,X,PC ( disk.asm):00776 * GET A CHARACTER FROM FCB DATA BUFFER - RETURN CHAR IN ACCA C611 3460 ( disk.asm):00777 LC611 PSHS U,Y SAVE REGISTERS C613 4F ( disk.asm):00778 CLRA * C614 338B ( disk.asm):00779 LEAU D,X * POINT U TO CORRECT CHARACTER C616 A6C819 ( disk.asm):00780 LDA FCBCON,U =GET DATA CHAR (SKIP PAST 25 CONTROL BYTES) C619 3402 ( disk.asm):00781 PSHS A =AND SAVE DATA CHARACTER ON STACK C61B 6F05 ( disk.asm):00782 CLR FCBCPT,X RESET CHAR POINTER TO START OF BUFFER C61D A601 ( disk.asm):00783 LDA FCBDRV,X GET DRIVE NUMBER AND SAVE IT IN C61F 97EB ( disk.asm):00784 STA DCDRV DSKCON VARIABLE C621 8D04 ( disk.asm):00785 BSR LC627 GO READ A SECTOR - FILL THE BUFFER C623 3562 ( disk.asm):00786 PULS A,Y,U RESTORE REGISTERS AND DATA CHARACTER C625 3594 ( disk.asm):00787 PULS B,X,PC RESTORE REGISTERS AND RETURN ( disk.asm):00788 * REFILL THE FCB INPUT DATA BUFFER FOR SEQUENTIAL FILES C627 A604 ( disk.asm):00789 LC627 LDA FCBSEC,X GET CURRENT SECTOR NUMBER C629 4C ( disk.asm):00790 LC629 INCA ADD ONE C62A 3402 ( disk.asm):00791 PSHS A SAVE NEW SECTOR NUMBER ON THE STACK C62C 8109 ( disk.asm):00792 CMPA #$09 NINE SECTORS PER GRANULE C62E 2301 ( disk.asm):00793 BLS LC631 BRANCH IF <= 9 C630 4F ( disk.asm):00794 CLRA SET TO SECTOR ZERO C631 A704 ( disk.asm):00795 LC631 STA FCBSEC,X SAVE SECTOR NUMBER C633 E603 ( disk.asm):00796 LDB FCBCGR,X GET GRANULE NUMBET TO FAT POINTER C635 3384 ( disk.asm):00797 LEAU ,X POINT U TO FCB (TFR X,U) C637 BDC755 ( disk.asm):00798 JSR >LC755 POINT X TO PROPER FILE ALLOCATION TABLE C63A 3A ( disk.asm):00799 ABX ADD OLD GRANULE NUMBER TO FAT POINTER C63B E606 ( disk.asm):00800 LDB FATCON,X GET GRANULE NUMBER (6 CONTROL BYTES AT FRONT OF FAT) C63D 30C4 ( disk.asm):00801 LEAX ,U POINT X TO FCB C63F C1C0 ( disk.asm):00802 CMPB #$C0 IS CURRENT GRANULE LAST ONE IN FILE? C641 240A ( disk.asm):00803 BHS LC64D YES C643 3502 ( disk.asm):00804 PULS A GET SECTOR NUMBER C645 800A ( disk.asm):00805 SUBA #10 WAS IT 10? - OVERFLOW TO NEXT GRANULE IF SO C647 2615 ( disk.asm):00806 BNE LC65E BRANCH IF NOT C649 E703 ( disk.asm):00807 STB FCBCGR,X SAVE NEW GRANULE NUMBER C64B 20DC ( disk.asm):00808 BRA LC629 SET VARIABLES FOR NEW GRANULE C64D C43F ( disk.asm):00809 LC64D ANDB #$3F GET NUMBER OF SECTORS USED IN THIS GRANULE C64F C109 ( disk.asm):00810 CMPB #$09 9 SECTORS / GRANULE C651 2305 ( disk.asm):00811 BLS LC658 BRANCH IF OK C653 C640 ( disk.asm):00812 LC653 LDB #2*32 'BAD FILE STRUCTURE' ERROR C655 7EAC46 ( disk.asm):00813 JMP >LAC46 ERROR DRIVER C658 E0E0 ( disk.asm):00814 LC658 SUBB ,S+ SUBTRACT CURRENT SECTOR NUMBER AND PULS A C65A 2521 ( disk.asm):00815 BLO LC67D BRANCH IF PAST LAST SECTOR C65C 1F98 ( disk.asm):00816 TFR B,A SECTOR NUMBER TO ACCA C65E 3402 ( disk.asm):00817 LC65E PSHS A SAVE SECTOR NUMBER DIFFERENCE C660 8D23 ( disk.asm):00818 BSR LC685 INCREMENT RECORD NUMBER C662 8602 ( disk.asm):00819 LDA #$02 *GET READ OPERATION CODE C664 97EA ( disk.asm):00820 STA DCOPC *AND SAVE IT IN DSKCON VARIABLE C666 BDC763 ( disk.asm):00821 JSR >LC763 GET PROPER TRACK AND SECTOR TO DSKCON VARIABLES C669 338819 ( disk.asm):00822 LEAU FCBCON,X * POINT U TO START OF FCB DATA BUFFER C66C DFEE ( disk.asm):00823 STU DCBPT * AND SAVE IT IN DSKCON VARIABLE C66E BDD6F2 ( disk.asm):00824 JSR >LD6F2 GO READ A SECTOR INTO FCB BUFFER C671 6F8818 ( disk.asm):00825 CLR FCBLFT,X NUMBER OF CHARS LEFT IN BUFFER = 256 C674 E6E0 ( disk.asm):00826 LDB ,S+ GET SECTOR NUMBER OFF STACK C676 260C ( disk.asm):00827 BNE LC684 RETURN IF DATA LEFT; FALL THRU IF LAST SECTOR C678 EC8813 ( disk.asm):00828 LDD FCBLST,X GET NUMBER OF BYTES IN THE LAST SECTOR C67B 2604 ( disk.asm):00829 BNE LC681 BRANCH IF SOME BYTES IN LAST SECTOR C67D 5F ( disk.asm):00830 LC67D CLRB SET NUMBER OF REMAINING BYTES = 256 C67E 638817 ( disk.asm):00831 COM FCBDFL,X SET DATA LEFT FLAG TO $FF C681 E78818 ( disk.asm):00832 LC681 STB FCBLFT,X SAVE THE NUMBER OF CHARS LEFT IN BUFFER C684 39 ( disk.asm):00833 LC684 RTS C685 EE07 ( disk.asm):00834 LC685 LDU FCBREC,X GET CURRENT RECORD NUMBER C687 3341 ( disk.asm):00835 LEAU $01,U BUMP IT C689 EF07 ( disk.asm):00836 STU FCBREC,X PUT IT BACK C68B 39 ( disk.asm):00837 RTS ( disk.asm):00838 * SCAN DIRECTORY FOR FILENAME.EXT FOUND IN DNAMBF. IF FILENAME FOUND, ( disk.asm):00839 * RETURN WITH SECTOR NUMBER IN V973, GRANULE IN V976 AND RAM BUFFER ( disk.asm):00840 * CONTAINING DIRECTORY DATA IN V974. IF DISK IS FULL THEN V973, ( disk.asm):00841 * V977 = 0. THE FIRST UNUSED SECTOR RETURNED IN V977, RAM IMAGE IN V978 C68C 7F0973 ( disk.asm):00842 LC68C CLR V973 CLEAR SECTOR NUMBER C68F 7F0977 ( disk.asm):00843 CLR V977 CLEAR TEMP SECTOR COUNTER C692 CC1102 ( disk.asm):00844 LDD #$1102 TRACK 17 (DIRECTORY), READ OPERATION CODE C695 97EC ( disk.asm):00845 STA DCTRK SAVE TRACK NUMBER C697 D7EA ( disk.asm):00846 STB DCOPC SAVE OPERATION CODE (READ) C699 C603 ( disk.asm):00847 LDB #$03 READ SECTOR 3 (FIRST DIRECTORY SECTOR) C69B D7ED ( disk.asm):00848 LC69B STB DSEC SAVE SECTOR NUMBER IN DSKCON VARIABLE C69D CE0600 ( disk.asm):00849 LDU #DBUF0 *BUFFER AREA NUMBER 0 AS DATA BUFFER - SAVE C6A0 DFEE ( disk.asm):00850 STU DCBPT *IN DSKCON VARIABLE C6A2 BDD6F2 ( disk.asm):00851 JSR >LD6F2 GO READ A SECTOR C6A5 FF0974 ( disk.asm):00852 LC6A5 STU V974 SAVE RAM DIRECTORY BUFFER ADDRESS C6A8 31C4 ( disk.asm):00853 LEAY ,U POINT Y TO DIRECTORY BUFFER C6AA A6C4 ( disk.asm):00854 LDA ,U GET A BYTE FROM BUFFER C6AC 2628 ( disk.asm):00855 BNE LC6D6 BRANCH IF NOT ZERO - FILE IS ACTIVE C6AE 8D29 ( disk.asm):00856 BSR LC6D9 SET UNUSED FILE POINTERS IF ENTRY HAS BEEN KILLED C6B0 8E094C ( disk.asm):00857 LC6B0 LDX #DNAMBF POINT TO DISK FILE NAME BUFFER C6B3 A680 ( disk.asm):00858 LC6B3 LDA ,X+ *COMPARE THE FILENAME AND EXTENSION C6B5 A1C0 ( disk.asm):00859 CMPA ,U+ *STORED IN RAM AT DNAMBF TO THE DIRECTORY C6B7 260E ( disk.asm):00860 BNE LC6C7 *ENTRY STORED AT ,U (BRANCH IF MISMATCH) C6B9 8C0957 ( disk.asm):00861 CMPX #DNAMBF+11 AT END OF FILE NAME BUFFER? C6BC 26F5 ( disk.asm):00862 BNE LC6B3 BRANCH IF NOT DONE CHECKING FILENAME C6BE F70973 ( disk.asm):00863 STB V973 SAVE SECTOR NUMBER IN DSKCON VARIABLE C6C1 A642 ( disk.asm):00864 LDA FCBFGR,U *GET NUMBER OF FIRST GRANULE IN FILE C6C3 B70976 ( disk.asm):00865 STA V976 *AND SAVE IT IN V976 C6C6 39 ( disk.asm):00866 RTS C6C7 33A820 ( disk.asm):00867 LC6C7 LEAU DIRLEN,Y GET NEXT DIRECTORY ENTRY (DIRLEN BYTES PER ENTRY) C6CA 11830700 ( disk.asm):00868 CMPU #DBUF0+SECLEN AT END OF BUFFER? C6CE 26D5 ( disk.asm):00869 BNE LC6A5 CHECK NEXT ENTRY IF NOT AT END C6D0 5C ( disk.asm):00870 INCB NEXT SECTOR C6D1 C10B ( disk.asm):00871 CMPB #11 11 SECTORS MAX IN DIRECTORY C6D3 23C6 ( disk.asm):00872 BLS LC69B BRANCH IF MORE SECTORS C6D5 39 ( disk.asm):00873 RTS C6D6 43 ( disk.asm):00874 LC6D6 COMA COMPLEMENT FIRST BYTE IN DIRECTORY EMTRY C6D7 26D7 ( disk.asm):00875 BNE LC6B0 BRANCH IF FILE IS ACTIVE - FALL THRU IF NOT USED ( disk.asm):00876 * SET POINTERS FOR FIRST UNUSED DIRECTORY ENTRY C6D9 B60977 ( disk.asm):00877 LC6D9 LDA V977 UNUSED ENTRY ALREADY FOUND? C6DC 2606 ( disk.asm):00878 BNE DVEC12 RETURN IF UNUSED ENTRY ALREADY FOUND C6DE F70977 ( disk.asm):00879 STB V977 SECTOR CONTAINING THIS DIRECTORY ENTRY C6E1 FF0978 ( disk.asm):00880 STU V978 POINTS TO RAM AREA WHERE DIRECTORY DATA IS STORED C6E4 39 ( disk.asm):00881 DVEC12 RTS C6E5 C634 ( disk.asm):00882 LC6E5 LDB #2*26 'NE' ERROR C6E7 7D0973 ( disk.asm):00883 TST V973 WAS A DIRECTORY MATCH FOUND? C6EA 26F8 ( disk.asm):00884 BNE DVEC12 RETURN IF FOUND C6EC 7EAC46 ( disk.asm):00885 JMP >LAC46 JUMP TO ERROR HANDLER IF NOT FOUND ( disk.asm):00886 * KILL COMMAND C6EF BDC935 ( disk.asm):00887 KILL JSR >LC935 GET FILENAME.EXT FROM BASIC C6F2 BDA5C7 ( disk.asm):00888 JSR >LA5C7 'SYNTAX' ERROR IF MORE CHARACTERS ON LINE C6F5 BDC79D ( disk.asm):00889 JSR >LC79D GET VALID FAT DATA C6F8 8D92 ( disk.asm):00890 BSR LC68C TEST FOR FILE NAME MATCH IN DIRECTORY C6FA 8DE9 ( disk.asm):00891 BSR LC6E5 MAKE SURE THE FILE EXISTED C6FC 86FF ( disk.asm):00892 LC6FC LDA #$FF * MATCH FILE TYPE = $FF; THIS WILL CAUSE AN 'AO' ( disk.asm):00893 * * ERROR TO BE GENERATED IF ANY FILE TYPE IS OPEN C6FE BDC807 ( disk.asm):00894 JSR >LC807 CHECK TO MAKE SURE FILE IS NOT OPEN C701 BE0974 ( disk.asm):00895 LDX V974 *GET RAM IMAGE OF DIRECTORY C704 6F84 ( disk.asm):00896 CLR ,X *AND ZERO FIRST BYTE - KILL FILE (DIRNAM,X) C706 C603 ( disk.asm):00897 LDB #$03 =WRITE OPERATION CODE - SAVE C708 D7EA ( disk.asm):00898 STB DCOPC =IT IN DSKCON VARIABLE C70A BDD6F2 ( disk.asm):00899 JSR >LD6F2 WRITE A SECTOR C70D E60D ( disk.asm):00900 LDB DIRGRN,X GET NUMBER OF FIRST GRANULE IN FILE C70F 8D44 ( disk.asm):00901 LC70F BSR LC755 POINT X TO PROPER FILE ALLOCATION TABLE C711 3006 ( disk.asm):00902 LEAX FATCON,X SKIP 6 CONTROL BYTES C713 3A ( disk.asm):00903 ABX POINT TO CORRECT ENTRY C714 E684 ( disk.asm):00904 LDB ,X GET NEXT GRANULE C716 86FF ( disk.asm):00905 LDA #$FF *GET FREE GRANULE FLAG AND C718 A784 ( disk.asm):00906 STA ,X *MARK GRANULE AS FREE C71A C1C0 ( disk.asm):00907 CMPB #$C0 WAS THIS THE LAST GRANULE? C71C 25F1 ( disk.asm):00908 BLO LC70F * KEEP FREEING GRANULES IF NOT LAST ONE ( disk.asm):00909 * * WRITE FILE ALLOCATION SECTOR TO DIRECTORY - DO NOT WRITE ( disk.asm):00910 * * THE SIX CONTROL BYTES AT THE START OF THE FAT TO THE DISK C71E CE0600 ( disk.asm):00911 LC71E LDU #DBUF0 =POINT U TO DISK BUFFER 0 AND C721 DFEE ( disk.asm):00912 STU DCBPT =SAVE IT AS DSKCON VARIABLE C723 CC1103 ( disk.asm):00913 LDD #$1103 * WRITE DIRECTORY TRACK - SAVE C726 97EC ( disk.asm):00914 STA DCTRK * TRACK AND WRITE OPERATION CODE IN C728 D7EA ( disk.asm):00915 STB DCOPC * DSKCON VARIABLES C72A C602 ( disk.asm):00916 LDB #$02 = GET FILE ALLOCATION SECTOR AND C72C D7ED ( disk.asm):00917 STB DSEC = SAVE IN DSKCON VARIABLE C72E 8D25 ( disk.asm):00918 BSR LC755 POINT X TO PROPER FILE ALLOCATION TABLE C730 6F01 ( disk.asm):00919 CLR FAT1,X RESET FLAG INDICATING VALID FAT DATA HAS BEEN STORED ON DISK C732 3006 ( disk.asm):00920 LEAX FATCON,X MOVE (X) TO START OF GRANULE DATA C734 C644 ( disk.asm):00921 LDB #GRANMX 68 BYTES IN FAT C736 BDA59A ( disk.asm):00922 JSR >LA59A MOVE ACCB BYTES FROM FAT RAM IMAGE TO DBUF0 ( disk.asm):00923 * ZERO OUT ALL OF THE BYTES IN THE FAT SECTOR WHICH DO NOT CONTAIN THE GRANULE DATA C739 6FC0 ( disk.asm):00924 LC739 CLR ,U+ CLEAR A BYTE C73B 11830700 ( disk.asm):00925 CMPU #DBUF0+SECLEN FINISHED THE WHOLE SECTOR? C73F 26F8 ( disk.asm):00926 BNE LC739 NO C741 7ED6F2 ( disk.asm):00927 JMP >LD6F2 WRITE A SECTOR ( disk.asm):00928 * ENTER WITH ACCB CONTAINING FILE NUMBER (1-15); EXIT WITH X POINTING ( disk.asm):00929 * TO CORRECT FILE BUFFER; FLAGS SET ACCORDING TO FILE TYPE. C744 3404 ( disk.asm):00930 LC744 PSHS B SAVE FILE NUMBER ON STACK C746 D66F ( disk.asm):00931 LDB DEVNUM GET DEVICE NUMBER (FILE NUMBER) C748 8C ( disk.asm):00932 FCB $8C SKIP TWO BYTES (THROWN AWAY CMPX INSTRUCTION) C749 3404 ( disk.asm):00933 LC749 PSHS B SAVE FILE NUMBER ON STACK C74B 58 ( disk.asm):00934 ASLB X2: 2 BYTES PER POINTER C74C 8E0926 ( disk.asm):00935 LDX #FCBV1-2 POINT X TO START OF FCB POINTERS C74F AE85 ( disk.asm):00936 LDX B,X POINT X TO PROPER FCB C751 E600 ( disk.asm):00937 LDB FCBTYP,X SET FLAGS ACCORDING TO FILE TYPE C753 3584 ( disk.asm):00938 PULS B,PC RESTORE FILE NUMBER ( disk.asm):00939 * POINT X TO DRIVE ALLOCATION TABLE C755 3406 ( disk.asm):00940 LC755 PSHS B,A SAVE ACCD ON STACK C757 96EB ( disk.asm):00941 LDA DCDRV GET DRIVE NUMBER C759 C64A ( disk.asm):00942 LDB #FATLEN GET LENGTH OF FILE ALLOCATION TABLE C75B 3D ( disk.asm):00943 MUL MULTIPLY BY DRIVE NUMBER TO GET OFFSET C75C 8E0800 ( disk.asm):00944 LDX #FATBL0 START OF FILE ALLOCATION TABLE C75F 308B ( disk.asm):00945 LEAX D,X POINT TO RIGHT TABLE C761 3586 ( disk.asm):00946 PULS A,B,PC RESTORE ACCD ( disk.asm):00947 * CONVERT GRANULE NUMBER TO TRACK & SECTOR NUMBER - X MUST BE POINTING TO CORRECT ( disk.asm):00948 * FCB; THE TRACK AND SECTOR NUMBER WILL BE STORED IN DSKCON REGISTERS C763 E603 ( disk.asm):00949 LC763 LDB FCBCGR,X GET GRANULE NUMBER C765 54 ( disk.asm):00950 LSRB DIVIDE BY 2 - 2 GRANULES / TRACK C766 D7EC ( disk.asm):00951 STB DCTRK TRACK NUMBER C768 C111 ( disk.asm):00952 CMPB #17 TRACK 17 = DIRECTORY TRACK C76A 2502 ( disk.asm):00953 BLO LC76E BRANCH IF < DIRECTORY TRACK C76C 0CEC ( disk.asm):00954 INC DCTRK INCR TRACK NUMBER IF > DIRECTORY TRACK C76E 58 ( disk.asm):00955 LC76E ASLB MULTIPLY TRACK NUMBER BY 2 C76F 50 ( disk.asm):00956 NEGB NEGATE GRANULE NUMBER C770 EB03 ( disk.asm):00957 ADDB FCBCGR,X B=0 IF EVEN GRANULE; 1 IF ODD C772 8D05 ( disk.asm):00958 BSR LC779 RETURN B=0 FOR EVEN GRANULE NUMBER, B=9 FOR ODD GRANULE NUMBER C774 EB04 ( disk.asm):00959 ADDB FCBSEC,X ADD SECTOR NUMBER C776 D7ED ( disk.asm):00960 STB DSEC SAVE SECTOR NUMBER C778 39 ( disk.asm):00961 RTS ( disk.asm):00962 * MULTIPLY ACCD BY 9 C779 3406 ( disk.asm):00963 LC779 PSHS B,A TEMP STORE ACCD ON STACK C77B 58 ( disk.asm):00964 ASLB * C77C 49 ( disk.asm):00965 ROLA * MULTIPLY BY 2 C77D 58 ( disk.asm):00966 ASLB = C77E 49 ( disk.asm):00967 ROLA = MULTIPLY BY FOUR C77F 58 ( disk.asm):00968 ASLB * C780 49 ( disk.asm):00969 ROLA * MULTIPLY BY EIGHT C781 E3E1 ( disk.asm):00970 ADDD ,S++ ADD ONE = MULTIPLY BY NINE C783 39 ( disk.asm):00971 RTS ( disk.asm):00972 * CONVERT ACCD INTO A GRANULE NUMBER - RETURN RESULT IN ACCB; ( disk.asm):00973 * ENTER WITH ACCD CONTAINING A NUMBER OF SECTORS. RETURN IN ACCB ( disk.asm):00974 * THE NUMBER (0-67) CORRESPONDING TO THE NUMBER OF COMPLETE ( disk.asm):00975 * GRANULES CONTAINED IN THAT MANY SECTORS. ( disk.asm):00976 * DIVIDE BY 90, MULTIPLY BY 10 IS FASTER THAN DIVIDE BY 9 C784 6FE2 ( disk.asm):00977 LC784 CLR ,-S CLEAR A TEMPORARY SLOT ON THE STACK C786 6CE4 ( disk.asm):00978 LC786 INC ,S * DIVIDE ACCD BY 90 - SAVE THE C788 83005A ( disk.asm):00979 SUBD #9*10 * QUOTIENT+1 ON THE STACK - REMAINDER C78B 2AF9 ( disk.asm):00980 BPL LC786 * IN ACCB C78D A6E4 ( disk.asm):00981 LDA ,S = PUT THE QUOTIENT+1 IN ACCA AND C78F E7E4 ( disk.asm):00982 STB ,S = SAVE REMAINDER ON STACK C791 C60A ( disk.asm):00983 LDB #10 * MULTIPLY (QUOTIENT+1) C793 3D ( disk.asm):00984 MUL * BY 10 C794 3502 ( disk.asm):00985 PULS A PUT THE REMAINDER IN ACCA C796 5A ( disk.asm):00986 LC796 DECB * DECREMENT THE GRANULE COUNT BY ONE FOR C797 8B09 ( disk.asm):00987 ADDA #$09 * EVERY NINE SECTORS (1 GRANULE) IN THE C799 2BFB ( disk.asm):00988 BMI LC796 * REMAINDER - COMPENSATE FOR THE + 1 IN QUOTIENT+1 C79B 4F ( disk.asm):00989 CLRA CLEAR MS BYTE OF ACCD C79C 39 ( disk.asm):00990 LC79C RTS ( disk.asm):00991 * MAKE SURE RAM FILE ALLOCATION TABLE DATA IS VALID C79D 8DB6 ( disk.asm):00992 LC79D BSR LC755 POINT X TO FAT FOR THE CORRECT DRIVE NUMBER C79F 6D00 ( disk.asm):00993 TST FAT0,X CHECK TO SEE IF ANY FILES ARE ACTIVE C7A1 26F9 ( disk.asm):00994 BNE LC79C RETURN IF ANY FILES ACTIVE IN THIS FAT C7A3 6F01 ( disk.asm):00995 CLR FAT1,X RESET FAT DATA VALID FLAG C7A5 3306 ( disk.asm):00996 LEAU FATCON,X LOAD U WITH START OF GRANULE DATA BUFFER C7A7 8E0600 ( disk.asm):00997 LDX #DBUF0 BUFFER FOR DISK TRANSFER C7AA 9FEE ( disk.asm):00998 STX DCBPT PUT IN DSKCON PARAMETER C7AC CC1102 ( disk.asm):00999 LDD #$1102 DIRECTORY TRACK, READ SECTOR C7AF 97EC ( disk.asm):01000 STA DCTRK STORE IN DSKCON TRACK NUMBER C7B1 D7EA ( disk.asm):01001 STB DCOPC STORE IN DSKCON OP CODE C7B3 C602 ( disk.asm):01002 LDB #$02 GET SECTOR NUMBER 2 (FILE ALLOCATION TABLE) C7B5 D7ED ( disk.asm):01003 STB DSEC STORE IN DSKCON PARAMETER C7B7 BDD6F2 ( disk.asm):01004 JSR >LD6F2 GO READ SECTOR C7BA C644 ( disk.asm):01005 LDB #GRANMX TRANSFER FILE ALLOCATION TABLE TO FILE ALLOC TABLE BUFFER C7BC 7EA59A ( disk.asm):01006 JMP >LA59A MOVE B BYTES FROM (X) TO (U) ( disk.asm):01007 * FIND FIRST FREE GRANULE - ENTER WITH ACCB CONTAINING ( disk.asm):01008 * GRANULE FROM WHICH TO START SEARCHING. THE FOUND GRANULE ( disk.asm):01009 * IS MARKED BY STORING A $C0 IN THE GRANULE'S DATA BYTE ( disk.asm):01010 * TO INDICATE THAT IT IS THE LAST GRANULE IN THE FILE. ( disk.asm):01011 * RETURN WITH FIRST FREE GRANULE FOUND IN ACCA C7BF 8D94 ( disk.asm):01012 LC7BF BSR LC755 POINT X TO FILE ALLOC TABLE C7C1 3006 ( disk.asm):01013 LEAX FATCON,X SKIP CONTROL BYTES C7C3 4F ( disk.asm):01014 CLRA USE ACCA AS GRANULE COUNTER C7C4 C4FE ( disk.asm):01015 ANDB #$FE MASK OFF BIT ZERO OF SEARCH GRANULE C7C6 6FE2 ( disk.asm):01016 CLR ,-S INITIALIZE AND SAVE A BYTE ON STACK (DIRECTION FLAG) C7C8 6385 ( disk.asm):01017 LC7C8 COM B,X IS THIS GRANULE FREE? ($FF=FREE) C7CA 2731 ( disk.asm):01018 BEQ LC7FD BRANCH IF IT IS C7CC 6385 ( disk.asm):01019 COM B,X RESTORE GRANULE DATA C7CE 4C ( disk.asm):01020 INCA ADD ONE TO GRANULE COUNTER C7CF 8144 ( disk.asm):01021 CMPA #GRANMX GRANMX GEANULES PER DISK C7D1 2425 ( disk.asm):01022 BHS LC7F8 BRANCH IF ALL GRANULES CHECKED (DISK FULL) C7D3 5C ( disk.asm):01023 INCB INCR TO NEXT GRANULE C7D4 C501 ( disk.asm):01024 BITB #$01 IS BIT 0 SET? C7D6 26F0 ( disk.asm):01025 BNE LC7C8 BRANCH IF ODD GRANULE NUMBER (SAME TRACK) C7D8 3406 ( disk.asm):01026 PSHS B,A SAVE GRANULE COUNTER AND CURRENT GRANULE NUMBER C7DA C002 ( disk.asm):01027 SUBB #$02 SUBTRACT ONE TRACK (2 GRANULES) C7DC 6362 ( disk.asm):01028 COM $02,S COMPLEMENT DIRECTION FLAG C7DE 260C ( disk.asm):01029 BNE LC7EC BRANCH EVERY OTHER TIME C7E0 E0E0 ( disk.asm):01030 SUBB ,S+ SUBTRACT THE GRANULE COUNTER FROM THE CURRENT GRANULE NUMBER C7E2 2A04 ( disk.asm):01031 BPL LC7E8 BRANCH IF LOWER BOUND NOT EXCEEDED C7E4 E6E4 ( disk.asm):01032 LDB ,S RESTORE CURRENT GRANULE NUMBER IF LOWER BOUND EXCEEDED C7E6 6361 ( disk.asm):01033 LC7E6 COM $01,S * COMPLEMENT FLAG - IF GRANULE NUMBER HAS EXCEEDED ( disk.asm):01034 * * BOUNDS ON EITHER THE HI OR LO SIDE, FORCE IT TO GO IN ( disk.asm):01035 * * THE DIRECTION OPPOSITE THE EXCEEDED BOUND C7E8 3261 ( disk.asm):01036 LC7E8 LEAS $01,S CLEAN UP STACK C7EA 20DC ( disk.asm):01037 BRA LC7C8 CHECK FOR ANOTHER FREE GRANULE C7EC EBE0 ( disk.asm):01038 LC7EC ADDB ,S+ ADD THE GRANULE COUNTER TO THE CURRENT GRANULE NUMBER C7EE C144 ( disk.asm):01039 CMPB #GRANMX GRANMX GRANULES PER DISK C7F0 25F6 ( disk.asm):01040 BLO LC7E8 BRANCH IF UPPER BOUND NOT EXCEEDED C7F2 E6E4 ( disk.asm):01041 LDB ,S * RESTORE CURRENT GRANULE COUNT AND GO TWICE C7F4 C004 ( disk.asm):01042 SUBB #$04 * AS FAR AS USUAL IN OPPOSITE DIRECTION IF UPPER BOUND EXCEEDED C7F6 20EE ( disk.asm):01043 BRA LC7E6 KEEP SEARCHING C7F8 C638 ( disk.asm):01044 LC7F8 LDB #2*28 'DISK FULL' ERROR C7FA 7EAC46 ( disk.asm):01045 JMP >LAC46 JUMP TO ERROR HANDLER ( disk.asm):01046 * POINT X TO FIRST FREE GRANULE POSITION IN THE FILE ALLOCATION ( disk.asm):01047 * TABLE AND MARK THE POSITION WITH A LAST GRANULE IN FILE MARKER C7FD 3261 ( disk.asm):01048 LC7FD LEAS $01,S CLEAR UP STACK - REMOVE DIRECTION FLAG C7FF 1F98 ( disk.asm):01049 TFR B,A GRANULE NUMBER TO ACCA C801 3A ( disk.asm):01050 ABX POINT X TO FIRST FOUND GRANULE C802 C6C0 ( disk.asm):01051 LDB #$C0 LAST GRANULE FLAG C804 E784 ( disk.asm):01052 STB ,X MARK THE FIRST FOUND GRANULE AS THE LAST GRANULE C806 39 ( disk.asm):01053 LC806 RTS ( disk.asm):01054 * CHECK ALL ACTIVE FILES TO MAKE SURE A FILE IS NOT ALREADY OPEN - TO BE OPEN ( disk.asm):01055 * A FILE BUFFER MUST MATCH THE DRIVE NUMBER AND FIRST GRANULE NUMBER ( disk.asm):01056 * IN RAM DIRECTORY ENTRY AND THE FCB TYPE MUST NOT MATCH THE FILE TYPE IN ACCA ( disk.asm):01057 * AN 'AO' ERROR WILL NOT BE GENERATED IF A FILE IS BEING OPENED FOR ( disk.asm):01058 * THE SAME MODE THAT IT HAS ALREADY BEEN OPENED UNDER. C807 3402 ( disk.asm):01059 LC807 PSHS A SAVE FILE TYPE ON STACK C809 F6095B ( disk.asm):01060 LDB FCBACT NUMBER OF CURRENTLY OPEN FILES C80C 5C ( disk.asm):01061 INCB ADD ONE MORE TO FILE COUNTER C80D BDC749 ( disk.asm):01062 LC80D JSR >LC749 POINT X TO FCB OF THIS FILE C810 2717 ( disk.asm):01063 BEQ LC829 BRANCH IF BUFFER NOT BEING USED C812 96EB ( disk.asm):01064 LDA DCDRV * GET DRIVE NUMBER AND CHECK TO SEE IF IT C814 A101 ( disk.asm):01065 CMPA FCBDRV,X * MATCHES THE DRIVE NUMBER FOR THIS BUFFER C816 2611 ( disk.asm):01066 BNE LC829 FILE EXISTS ON ANOTHER DRIVE C818 FE0974 ( disk.asm):01067 LDU V974 GET RAM DIRECTORY AREA C81B A64D ( disk.asm):01068 LDA DIRGRN,U GET FIRST GRANULE IN FILE C81D A102 ( disk.asm):01069 CMPA FCBFGR,X DOES IT MATCH THIS FILE BUFFER? C81F 2608 ( disk.asm):01070 BNE LC829 NO C821 A600 ( disk.asm):01071 LDA FCBTYP,X GET FILE TYPE OF THIS BUFFER C823 A1E4 ( disk.asm):01072 CMPA ,S DOES IT MATCH THE ONE WE ARE LOOKING FOR? C825 1026DDF3 ( disk.asm):01073 LBNE LA61C 'FILE ALREADY OPEN' ERROR IF NOT C829 5A ( disk.asm):01074 LC829 DECB DECR FILE COUNTER C82A 26E1 ( disk.asm):01075 BNE LC80D BRANCH IF HAVEN'T CHECKED ALL ACTIVE FILES C82C 3582 ( disk.asm):01076 PULS A,PC RESTORE FILE TYPE AND RETURN C82E BDA5A5 ( disk.asm):01077 LC82E JSR >LA5A5 EVALUATE AN EXPRESSION (DEVICE NUMBER) C831 0F6F ( disk.asm):01078 CLR DEVNUM SET DEVICE NUMBER TO SCREEN C833 5D ( disk.asm):01079 TSTB TEST NEW DEVICE NUMBER C834 102FEC12 ( disk.asm):01080 LBLE LB44A 'FC' ERROR IF DEVICE NUMBER NOT A DISK FILE C838 BDC749 ( disk.asm):01081 JSR >LC749 POINT X TO FCB C83B A600 ( disk.asm):01082 LDA FCBTYP,X TEST IF BUFFER IS IN USE C83D 1027DBBA ( disk.asm):01083 LBEQ LA3FB 'FILE NOT OPEN' ERROR C841 8140 ( disk.asm):01084 CMPA #RANFIL DIRECT/RANDOM FILE? C843 27C1 ( disk.asm):01085 BEQ LC806 RETURN IF RANDOM C845 7EA616 ( disk.asm):01086 LC845 JMP >LA616 BAD FILE MODE ERROR IF NOT RANDOM ( disk.asm):01087 * INPUT DEVICE NUMBER CHECK RAM HOOK C848 8610 ( disk.asm):01088 DVEC5 LDA #INPFIL INPUT FILE TYPE C84A 8C ( disk.asm):01089 LC84A FCB $8C SKIP TWO BYTES (THROWN AWAY CMPX INSTRUCTION) ( disk.asm):01090 * PRINT DEVICE NUMBER CHECK RAM HOOK C84B 8620 ( disk.asm):01091 DVEC6 LDA #OUTFIL OUTPUT FILE TYPE C84D 0D6F ( disk.asm):01092 TST DEVNUM * CHECK DEVICE NUMBER AND RETURN IF C84F 2FB5 ( disk.asm):01093 BLE LC806 * NOT A DISK FILE C851 AFE4 ( disk.asm):01094 STX ,S = REPLACE SUBROUTINE RETURN ADDRESS WITH X REGISTER - ( disk.asm):01095 * = THIS IS THE SAME AS LEAS 2,S AND PSHS X C853 BDC744 ( disk.asm):01096 JSR >LC744 POINT X TO FCB C856 3406 ( disk.asm):01097 PSHS B,A SAVE ACCB AND FILE TYPE ON STACK C858 A600 ( disk.asm):01098 LDA FCBTYP,X GET FILE TYPE C85A 1027DB9D ( disk.asm):01099 LBEQ LA3FB 'FILE NOT OPEN' ERROR C85E 8140 ( disk.asm):01100 CMPA #RANFIL RANDOM FILE? C860 2706 ( disk.asm):01101 BEQ LC868 BRANCH IF RANDOM FILE C862 A1E4 ( disk.asm):01102 CMPA ,S IS THIS FCB OF THE PROPER TYPE? C864 26DF ( disk.asm):01103 BNE LC845 'FILE MODE' ERROR IF NOT C866 3596 ( disk.asm):01104 LC866 PULS A,B,X,PC RESTORE ACCB,X,ACCA (FILE TYPE) AND RETURN C868 AE64 ( disk.asm):01105 LC868 LDX $04,S * GET CALLING ADDRESS FROM THE STACK AND C86A 8CB00C ( disk.asm):01106 CMPX #LB00C * RETURN UNLESS COMING FROM C86D 26F7 ( disk.asm):01107 BNE LC866 * BASIC'S 'INPUT' STATEMENT C86F BDB26D ( disk.asm):01108 JSR SYNCOMMA SYNTAX CHECK FOR A COMMA C872 8122 ( disk.asm):01109 CMPA #'" CHECK FOR A DOUBLE QUOTE C874 260B ( disk.asm):01110 BNE LC881 RETURN TO BASIC'S 'INPUT' COMMAND C876 BDB244 ( disk.asm):01111 JSR >LB244 STRIP PROMPT STRING FROM BASIC AND PUT IT ON THE STRING STACK C879 BDB657 ( disk.asm):01112 JSR >LB657 PURGE THE STRING PUT ON THE STRING STACK C87C C63B ( disk.asm):01113 LDB #'; SEMICOLON C87E BDB26F ( disk.asm):01114 JSR >LB26F DO A SYNTAX CHECK FOR SEMICOLON C881 8EB01E ( disk.asm):01115 LC881 LDX #LB01E GET MODIFIED REENTRY POINT INTO BASIC C884 AF64 ( disk.asm):01116 STX $04,S AND PUT IT INTO THE RETURN ADDRESS ON THE STACK C886 3596 ( disk.asm):01117 PULS A,B,X,PC RETURN TO BASIC ( disk.asm):01118 * DEVICE NUMBER VALIDITY CHECK RAM HOOK C888 2F25 ( disk.asm):01119 DVEC1 BLE LC8AF RETURN IF NOT A DISK FILE C88A F1095B ( disk.asm):01120 CMPB FCBACT COMPARE DEVICE NUMBER TO HIGHEST POSSIBLE C88D 1022DD8E ( disk.asm):01121 LBHI LA61F 'DEVICE NUMBER' ERROR IF TOO BIG C891 3590 ( disk.asm):01122 PULS X,PC RETURN ( disk.asm):01123 * SET PRINT PARAMETERS RAM HOOK C893 0D6F ( disk.asm):01124 DVEC2 TST DEVNUM *CHECK DEVICE NUMBER AND C895 2F18 ( disk.asm):01125 BLE LC8AF *RETURN IF NOT DISK FILE C897 3262 ( disk.asm):01126 LEAS $02,S PURGE RETURN ADDRESS OFF OF THE STACK C899 3416 ( disk.asm):01127 PSHS X,B,A SAVE REGISTERS C89B 0F6E ( disk.asm):01128 CLR PRTDEV SET PRINT DEVICE NUMBER TO NON-CASSETTE C89D BDC744 ( disk.asm):01129 JSR >LC744 POINT X TO FCB C8A0 E606 ( disk.asm):01130 LDB FCBPOS,X GET PRINT POSITION C8A2 4F ( disk.asm):01131 CLRA PRINT WIDTH (256) C8A3 8E1000 ( disk.asm):01132 LDX #$1000 TAB FIELD WIDTH AND TAB ZONE C8A6 7EA37C ( disk.asm):01133 JMP >LA37C SAVE THE PRINT PARAMETERS ( disk.asm):01134 * BREAK CHECK RAM HOOK C8A9 0D6F ( disk.asm):01135 DVEC11 TST DEVNUM * CHECK DEVICE NUMBER AND RETURN C8AB 2F02 ( disk.asm):01136 BLE LC8AF * IF NOT A DISK FILE C8AD 3262 ( disk.asm):01137 LEAS $02,S = PURGE RETURN ADDRESS OFF OF THE STACK - DON'T C8AF 39 ( disk.asm):01138 LC8AF RTS = DO A BREAK CHECK IF DISK FILE ( disk.asm):01139 * COMMAND INTERPRETATION RAM HOOK C8B0 3262 ( disk.asm):01140 DVEC20 LEAS $02,S PURGE RETURN ADDRESS OFF OF THE STACK C8B2 1CAF ( disk.asm):01141 LC8B2 ANDCC #$AF ENABLE IRQ & FIRQ C8B4 7FFF02 ( disk.asm):01142 CLR PIA0+2 STROBE ALL KEYS (COLUMN STROBE) C8B7 B6FF00 ( disk.asm):01143 LDA PIA0 READ KEYBOARD ROWS C8BA 43 ( disk.asm):01144 COMA INVERT KEYBOARD ROW DATA C8BB 847F ( disk.asm):01145 ANDA #$7F MASK OFF JOYSTICK INPUT BIT C8BD 2703 ( disk.asm):01146 BEQ LC8C2 BRANCH IF NO KEY DOWN C8BF BDADEB ( disk.asm):01147 JSR >LADEB GO DO A BREAK CHECK IF A KEY IS DOWN C8C2 9EA6 ( disk.asm):01148 LC8C2 LDX CHARAD GET INPUT POINTER INTO X C8C4 9F2F ( disk.asm):01149 STX TINPTR TEMP SAVE IT C8C6 A680 ( disk.asm):01150 LDA ,X+ SEARCH FOR THE END OF CURRENT LINE C8C8 2707 ( disk.asm):01151 BEQ LC8D1 BRANCH IF END OF LINE C8CA 813A ( disk.asm):01152 CMPA #': CHECK FOR END OF SUB LINE, TOO C8CC 2725 ( disk.asm):01153 BEQ LC8F3 BRANCH IF END OF SUB LINE C8CE 7EB277 ( disk.asm):01154 JMP >LB277 'SYNTAX' ERROR IF NOT END OF LINE C8D1 A681 ( disk.asm):01155 LC8D1 LDA ,X++ *GET MS BYTE OF ADDRESS OF NEXT BASIC LINE C8D3 9700 ( disk.asm):01156 STA ENDFLG *AND SAVE IT IN CURLIN C8D5 2603 ( disk.asm):01157 BNE LC8DA BRANCH IF NOT END OF PROGRAM C8D7 7EAE15 ( disk.asm):01158 JMP >LAE15 GO 'STOP' THE SYSTEM C8DA EC80 ( disk.asm):01159 LC8DA LDD ,X+ *GET LINE NUMBER OF THIS LINE AND C8DC DD68 ( disk.asm):01160 STD CURLIN *SAVE IT IN CURLIN C8DE 9FA6 ( disk.asm):01161 STX CHARAD RESET BASIC'S INPUT POINTER C8E0 96AF ( disk.asm):01162 LDA TRCFLG * CHECK THE TRACE FLAG AND C8E2 270F ( disk.asm):01163 BEQ LC8F3 * BRANCH IF TRACE OFF C8E4 865B ( disk.asm):01164 LDA #'[ [ LEFT DELIMITER OF TRON C8E6 BDA282 ( disk.asm):01165 JSR PUTCHR SEND CHARACTER TO CONSOLE OUT C8E9 9668 ( disk.asm):01166 LDA CURLIN GET NUMBER OF CURRENT LINE NUMBER C8EB BDBDCC ( disk.asm):01167 JSR >LBDCC CONVERT ACCD TO DECIMAL & PRINT IT ON SCREEN C8EE 865D ( disk.asm):01168 LDA #'] ] RIGHT DELIMITER OF TRON C8F0 BDA282 ( disk.asm):01169 JSR PUTCHR SEND A CHARACTER TO CONSOLE OUT C8F3 9D9F ( disk.asm):01170 LC8F3 JSR GETNCH GET NEXT CHARACTER FROM BASIC C8F5 1FA9 ( disk.asm):01171 TFR CC,B SAVE STATUS REGISTER IN ACCB C8F7 8198 ( disk.asm):01172 CMPA #$98 CSAVE TOKEN? C8F9 2603 ( disk.asm):01173 BNE LC8FE NO C8FB 7E8316 ( disk.asm):01174 JMP >L8316 GO CHECK FOR CSAVEM C8FE 8197 ( disk.asm):01175 LC8FE CMPA #$97 CLOAD TOKEN? C900 2603 ( disk.asm):01176 BNE LC905 NO C902 7E8311 ( disk.asm):01177 JMP >L8311 JUMP TO EXBAS' CLOAD ROUTINE C905 1F9A ( disk.asm):01178 LC905 TFR B,CC RESTORE STATUS REGISTER C907 BDADC6 ( disk.asm):01179 JSR >LADC6 LOOP THROUGH BASIC'S MAIN INTERPRETATION LOOP C90A 20A6 ( disk.asm):01180 BRA LC8B2 ( disk.asm):01181 * EOF RAM HOOK C90C 3262 ( disk.asm):01182 DVEC14 LEAS $02,S PURGE RETURN ADDRESS OFF OF THE STACK C90E 966F ( disk.asm):01183 LDA DEVNUM * GET DEVICE NUMBER AND SAVE C910 3402 ( disk.asm):01184 PSHS A * IT ON THE STACK C912 BDA5AE ( disk.asm):01185 JSR >LA5AE STRIP DEVICE NUMBER OFF OF INPUT LINE C915 BDA3ED ( disk.asm):01186 JSR >LA3ED VERIFY THAT THE FILE TYPE WAS 'INPUT' C918 0D6F ( disk.asm):01187 TST DEVNUM * CHECK DEVICE NUMBER AND C91A 102FDCBC ( disk.asm):01188 LBLE LA5DA * BRANCH BACK TO BASIC'S EOF IF NOT DISK FILE C91E BDC744 ( disk.asm):01189 JSR >LC744 POINT X TO FCB C921 E600 ( disk.asm):01190 LDB FCBTYP,X GET FILE TYPE C923 C140 ( disk.asm):01191 CMPB #RANFIL RANDOM FILE? C925 1027DCED ( disk.asm):01192 LBEQ LA616 'FM' BAD FILE MODE ERROR IF RANDOM C929 5F ( disk.asm):01193 CLRB FILE NOT EMPTY FLAG - SET TO NOT EMPTY C92A A68810 ( disk.asm):01194 LDA FCBCFL,X *CHECK THE CACHE FLAG - BRANCH IF C92D 2603 ( disk.asm):01195 BNE LC932 *THERE IS A CHARACTER WHICH HAS BEEN CACHED C92F E68817 ( disk.asm):01196 LDB FCBDFL,X GET SEQUENTIAL INPUT FILE STATUS C932 7EA5E4 ( disk.asm):01197 LC932 JMP >LA5E4 LINK BACK TO BASIC'S EOF STATEMENT ( disk.asm):01198 * GET FILENAME/EXTENSION: DRIVE NUMBER FROM BASIC C935 8EC2A9 ( disk.asm):01199 LC935 LDX #DEFEXT POINT TO ' ' BLANK (DEFAULT) EXTENSION C938 6FE2 ( disk.asm):01200 LC938 CLR ,-S CLEAR A BYTE ON STACK FOR USE AS A DRIVES FLAG C93A B6095A ( disk.asm):01201 LDA DEFDRV * GET DEFAULT DISK NUMBER C93D 97EB ( disk.asm):01202 STA DCDRV * STORE IN DSKCON PARAMETER C93F CE094C ( disk.asm):01203 LDU #DNAMBF DISK FILENAME BUFFER C942 CC2008 ( disk.asm):01204 LDD #$2008 STORE 8 BLANKS IN RAM (DEFAULT FILE NAME) C945 A7C0 ( disk.asm):01205 LC945 STA ,U+ STORE A BLANK IN FILE NAME C947 5A ( disk.asm):01206 DECB DECREMENT COUNTER C948 26FB ( disk.asm):01207 BNE LC945 BRANCH IF NOT DONE C94A C603 ( disk.asm):01208 LDB #$03 3 BYTES IN EXTENSION C94C BDA59A ( disk.asm):01209 JSR >LA59A MOVE B BYTES FROM (X) TO (U) C94F BD8748 ( disk.asm):01210 JSR >L8748 EVALUATE A STRING EXPRESSION C952 3384 ( disk.asm):01211 LEAU ,X POINT U TO START OF STRING C954 C102 ( disk.asm):01212 CMPB #$02 * CHECK LENGTH OF STRING AND C956 2512 ( disk.asm):01213 BLO LC96A * BRANCH IF < 2 C958 A641 ( disk.asm):01214 LDA $01,U = GET 2ND CHARACTER IN STRING AND C95A 813A ( disk.asm):01215 CMPA #': = CHECK FOR COLON C95C 260C ( disk.asm):01216 BNE LC96A BRANCH IF NO DRIVE NUMBER C95E A6C4 ( disk.asm):01217 LDA ,U * GET 1ST CHARACTER C960 8130 ( disk.asm):01218 CMPA #'0 * IN STRING AND C962 2506 ( disk.asm):01219 BLO LC96A * CHECK TO SEE C964 8133 ( disk.asm):01220 CMPA #'3 * IF IT IS IN C966 2202 ( disk.asm):01221 BHI LC96A * THE RANGE 0-3 C968 8D33 ( disk.asm):01222 BSR LC99D GET DRIVE NUMBER C96A 8E094C ( disk.asm):01223 LC96A LDX #DNAMBF POINT X TO FILE NAME BUFFER C96D 5C ( disk.asm):01224 INCB COMPENSATE FOR DECB BELOW C96E 5A ( disk.asm):01225 LC96E DECB DECREMENT STRING LENGTH C96F 260C ( disk.asm):01226 BNE LC97D BRANCH IF MORE CHARACTERS IN STRING C971 3261 ( disk.asm):01227 LEAS $01,S CLEAN UP STACK - REMOVE DRIVE FLAG C973 8C094C ( disk.asm):01228 LC973 CMPX #DNAMBF POINTER STILL AT START OF BUFFER? C976 2667 ( disk.asm):01229 BNE LC9DF RETURN IF NOT C978 C63E ( disk.asm):01230 LC978 LDB #2*31 'BAD FILENAME' ERROR IF NULL FILENAME C97A 7EAC46 ( disk.asm):01231 JMP >LAC46 ERROR HANDLER C97D A6C0 ( disk.asm):01232 LC97D LDA ,U+ GET A CHARACTER FROM STRING C97F 812E ( disk.asm):01233 CMPA #'. LOOK FOR PERIOD? C981 272D ( disk.asm):01234 BEQ LC9B0 YES C983 812F ( disk.asm):01235 CMPA #'/ SLASH? C985 2729 ( disk.asm):01236 BEQ LC9B0 YES C987 813A ( disk.asm):01237 CMPA #': COLON? C989 2709 ( disk.asm):01238 BEQ LC994 YES C98B 8C0954 ( disk.asm):01239 CMPX #DEXTBF COMPARE POINTER TO END OF FILENAME BUFFER C98E 27E8 ( disk.asm):01240 BEQ LC978 'BAD FILENAME' ERROR - FILENAME TOO LONG C990 8D3E ( disk.asm):01241 BSR LC9D0 PUT A CHARACTER IN FILENAME C992 20DA ( disk.asm):01242 BRA LC96E GET ANOTHER CHARACTER FROM STRING C994 8DDD ( disk.asm):01243 LC994 BSR LC973 'BAD FILENAME' ERROR IF NO FILENAME YET C996 8D05 ( disk.asm):01244 BSR LC99D GET DRIVE NUMBER C998 5D ( disk.asm):01245 TSTB * CHECK LENGTH OF STRING C999 26DD ( disk.asm):01246 BNE LC978 * ''BAD FILENAME' ERROR IF MORE CHARACTERS LEFT C99B 3582 ( disk.asm):01247 LC99B PULS A,PC REMOVE DRIVES FLAG FROM STACK AND RETURN ( disk.asm):01248 * GRAB DRIVE NUMBER C99D 6362 ( disk.asm):01249 LC99D COM $02,S TOGGLE DRIVE FLAG C99F 27D7 ( disk.asm):01250 BEQ LC978 'BAD FILENAME' ERROR IF DRIVE NUMBER DEFINED TWICE C9A1 A6C1 ( disk.asm):01251 LDA ,U++ ASCII VALUE OF DRIVE NUMBER TO ACCA C9A3 C002 ( disk.asm):01252 SUBB #$02 DECREMENT STRING LENGTH BY 2 FOR DRIVE (:X) C9A5 8030 ( disk.asm):01253 SUBA #'0 SUBTRACT ASCII BIAS C9A7 25CF ( disk.asm):01254 BLO LC978 DRIVE NUMBER TOO LOW - 'BAD FILENAME' ERROR C9A9 8103 ( disk.asm):01255 CMPA #$03 MAX OF 4 DRIVES C9AB 22CB ( disk.asm):01256 BHI LC978 DRIVE NUMBER TOO HIGH - 'BAD FILENAME' ERROR C9AD 97EB ( disk.asm):01257 STA DCDRV STORE IN DSKCON DRIVE NUMBER C9AF 39 ( disk.asm):01258 RTS ( disk.asm):01259 * GRAB EXTENSION C9B0 8DC1 ( disk.asm):01260 LC9B0 BSR LC973 'BAD FILENAME' ERROR IF NO FILENAME YET C9B2 8E0957 ( disk.asm):01261 LDX #DFLTYP POINT X TO END OF EXTENSION BUFFER C9B5 8620 ( disk.asm):01262 LDA #SPACE BLANK C9B7 A782 ( disk.asm):01263 LC9B7 STA ,-X * C9B9 8C0954 ( disk.asm):01264 CMPX #DEXTBF * FILL EXTENSION WITH C9BC 26F9 ( disk.asm):01265 BNE LC9B7 * BLANKS (DEFAULT) C9BE 5A ( disk.asm):01266 LC9BE DECB DECREMENT STRING COUNTER C9BF 27DA ( disk.asm):01267 BEQ LC99B RETURN IF ZERO C9C1 A6C0 ( disk.asm):01268 LDA ,U+ GET A CHARACTER FROM STRING C9C3 813A ( disk.asm):01269 CMPA #': *CHECK FOR DRIVE SEPARATOR C9C5 27CD ( disk.asm):01270 BEQ LC994 * C9C7 8C0957 ( disk.asm):01271 CMPX #DFLTYP =CHECK FOR END OF ESTENSION RAM BUFFER & C9CA 27AC ( disk.asm):01272 BEQ LC978 = 'BAD FILENAME' ERROR IF EXTENSION TOO LONG C9CC 8D02 ( disk.asm):01273 BSR LC9D0 PUT A CHARACTER IN EXTENSION BUFFER C9CE 20EE ( disk.asm):01274 BRA LC9BE GET ANOTHER EXTENSION CHARACTER ( disk.asm):01275 * INSERT CHARACTER INTO FILENAME OR EXTENSION C9D0 A780 ( disk.asm):01276 LC9D0 STA ,X+ STORE CHARACTER IN FILENAME BUFFER C9D2 27A4 ( disk.asm):01277 BEQ LC978 'BAD FILENAME' ERROR; ZEROES ARE ILLEGAL C9D4 812E ( disk.asm):01278 CMPA #'. PERIOD? C9D6 27A0 ( disk.asm):01279 BEQ LC978 'BAD FILENAME' ERROR IF PERIOD C9D8 812F ( disk.asm):01280 CMPA #'/ SLASH? C9DA 279C ( disk.asm):01281 BEQ LC978 'BAD FILENAME' ERROR IF SLASH C9DC 4C ( disk.asm):01282 INCA CHECK FOR $FF C9DD 2799 ( disk.asm):01283 BEQ LC978 'BAD FILENAME' ERROR IF $FF C9DF 39 ( disk.asm):01284 LC9DF RTS ( disk.asm):01285 * SAVE COMMAND C9E0 814D ( disk.asm):01286 SAVE CMPA #'M * C9E2 10270582 ( disk.asm):01287 LBEQ LCF68 *BRANCH IF SAVEM C9E6 8D4B ( disk.asm):01288 BSR LCA33 GO GET FILENAME, ETC. FROM BASIC C9E8 9E8A ( disk.asm):01289 LDX ZERO ZERO OUT X REG C9EA BF0957 ( disk.asm):01290 STX DFLTYP SET FILE TYPE AND ASCII FLAG TO ZERO C9ED 9DA5 ( disk.asm):01291 JSR GETCCH GET CURRENT INPUT CHARACTER FROM BASIC C9EF 2721 ( disk.asm):01292 BEQ LCA12 BRANCH IF END OF LINE C9F1 BDB26D ( disk.asm):01293 JSR SYNCOMMA SYNTAX CHECK FOR COMMA C9F4 C641 ( disk.asm):01294 LDB #'A *ASCII FILE? C9F6 BDB26F ( disk.asm):01295 JSR >LB26F *SYNTAX CHECK ON CONTENTS OF ACCB C9F9 26E4 ( disk.asm):01296 BNE LC9DF RETURN IF NO MORE CHARACTERS ON LINE C9FB 730958 ( disk.asm):01297 COM DASCFL SET CRUNCHED/ASCII FLAG TO ASCII C9FE 8D04 ( disk.asm):01298 BSR LCA04 OPEN A SEQUENTIAL FILE FOR OUTPUT CA00 4F ( disk.asm):01299 CLRA SET ZERO FLAG - CAUSE ENTIRE FILE TO BE LISTED CA01 7EB764 ( disk.asm):01300 JMP LIST 'LIST' THE FILE TO CONSOLE OUT ( disk.asm):01301 * OPEN A SEQUENTIAL FILE FOR INPUT/OUTPUT - USE THE SYSTEM ( disk.asm):01302 * FCB LOCATED AT THE TOP OF FCBS CA04 864F ( disk.asm):01303 LCA04 LDA #'O OUTPUT FILE TYPE CA06 8C ( disk.asm):01304 LCA06 FCB $8C SKIP TWO BYTES (THROWN AWAY CMPX INSTRUCTION) CA07 8649 ( disk.asm):01305 LCA07 LDA #'I INPUT FILE TYPE CA09 F6095B ( disk.asm):01306 LDB FCBACT GET NUMBER OF RESERVED FILES CURRENTLY RESERVED CA0C 5C ( disk.asm):01307 INCB ADD ONE - USE ONE ABOVE HIGHEST RESERVED FCB CA0D D76F ( disk.asm):01308 STB DEVNUM SAVE IT IN DEVICE NUMBER CA0F 7EC48D ( disk.asm):01309 JMP >LC48D OPEN A FILE & INITIALIZE FCB ( disk.asm):01310 * SAVE A CRUNCHED FILE - A PREAMBLE OF THREE BYTES WILL PRECEED CRUNCHED ( disk.asm):01311 * FILES: BYTE 1 = $FF, 2,3 = LENGTH OF BASIC PROGRAM CA12 8DF0 ( disk.asm):01312 LCA12 BSR LCA04 OPEN A SEQUENTIAL FILE FOR OUTPUT CA14 86FF ( disk.asm):01313 LDA #$FF BASIC FILE FLAG CA16 BDCC24 ( disk.asm):01314 JSR >LCC24 CONSOLE OUT CA19 DC1B ( disk.asm):01315 LDD VARTAB LOAD ACCD WITH START OF VARIABLES CA1B 9319 ( disk.asm):01316 SUBD TXTTAB SUBTRACT START OF BASIC CA1D BDCC24 ( disk.asm):01317 JSR >LCC24 CONSOLE OUT FILE LENGTH MS BYTE CA20 1F98 ( disk.asm):01318 TFR B,A PULL LS BYTE INTO ACCA CA22 BDCC24 ( disk.asm):01319 JSR >LCC24 CONSOLE OUT FILE LENGTH LS BYTE CA25 9E19 ( disk.asm):01320 LDX TXTTAB POINT X TO START OF BASIC CA27 A680 ( disk.asm):01321 LCA27 LDA ,X+ GET BYTE FROM BASIC CA29 BDCC24 ( disk.asm):01322 JSR >LCC24 SEND TO CONSOLE OUT CA2C 9C1B ( disk.asm):01323 CMPX VARTAB COMPARE TO END OF BASIC CA2E 26F7 ( disk.asm):01324 BNE LCA27 KEEP GOING IF NOT AT END CA30 7EA42D ( disk.asm):01325 JMP >LA42D CLOSE FILE CA33 8EC2A6 ( disk.asm):01326 LCA33 LDX #BASEXT POINT TO 'BAS' EXTENSION (DEFAULT) CA36 7EC938 ( disk.asm):01327 JMP >LC938 GET FILENAME.EXT FROM BASIC ( disk.asm):01328 * MERGE COMMAND CA39 4F ( disk.asm):01329 MERGE CLRA RUN FLAG (0 = DON'T RUN) CA3A C6FF ( disk.asm):01330 LDB #$FF MERGE FLAG ($FF = MERGE) CA3C 2012 ( disk.asm):01331 BRA LCA50 GO LOAD THE FILE ( disk.asm):01332 * RUN RAM VECTOR CA3E 8122 ( disk.asm):01333 DVEC18 CMPA #'" CHECK FOR FILENAME DELIMITER (DOUBLE QUOTE) CA40 1026B858 ( disk.asm):01334 LBNE XVEC18 NONE - JUMP TO EXBAS RUN RAM HOOK CA44 8602 ( disk.asm):01335 LDA #$02 RUN FLAG - DON'T CLOSE ALL FILES BEFORE RUN CA46 2007 ( disk.asm):01336 BRA LCA4F LOAD THE FILE ( disk.asm):01337 * LOAD COMMAND CA48 814D ( disk.asm):01338 LOAD CMPA #'M * CA4A 10270573 ( disk.asm):01339 LBEQ LCFC1 *BRANCH IF LOADM CA4E 4F ( disk.asm):01340 CLRA RUN FLAG = ZERO (DON'T RUN) CA4F 5F ( disk.asm):01341 LCA4F CLRB CLEAR MERGE FLAG CA50 B70959 ( disk.asm):01342 LCA50 STA DRUNFL RUN FLAG (0 = DON'T RUN, 2 = RUN) CA53 F7095E ( disk.asm):01343 STB DMRGFL MERGE FLAG (0 = NO MERGE, $FF = MERGE) CA56 8DDB ( disk.asm):01344 BSR LCA33 GO GET FILENAME, ETC. FROM BASIC CA58 9DA5 ( disk.asm):01345 JSR GETCCH GET CURRENT INPUT CHAR CA5A 2710 ( disk.asm):01346 BEQ LCA6C BRANCH IF END OF LINE CA5C BDB26D ( disk.asm):01347 JSR SYNCOMMA SYNTAX CHECK FOR COMMA CA5F C652 ( disk.asm):01348 LDB #'R * CA61 BDB26F ( disk.asm):01349 JSR >LB26F *IS NEXT CHAR 'R'? RUN AFTER LOAD CA64 BDA5C7 ( disk.asm):01350 JSR >LA5C7 SYNTAX ERROR IF ANY MORE CHARS ON LINE CA67 8603 ( disk.asm):01351 LDA #$03 *SET FLAGS TO RUN AND CLOSE ALL FILES CA69 B70959 ( disk.asm):01352 STA DRUNFL *BEFORE THE FILE IS RUN CA6C 8D99 ( disk.asm):01353 LCA6C BSR LCA07 GRAB FCB FOR INPUT FILE CA6E B60958 ( disk.asm):01354 LDA DASCFL *CHECK ASCII FLAG AND BRANCH CA71 270B ( disk.asm):01355 BEQ LCA7E *IF CRUNCHED BASIC FILE CA73 7D095E ( disk.asm):01356 TST DMRGFL IS THIS A MERGE? CA76 2603 ( disk.asm):01357 BNE LCA7B BRANCH IF MERGE CA78 BDAD19 ( disk.asm):01358 JSR >LAD19 DO A 'NEW' - ERASE VARIABLES, RESET VARIABLES CA7B 7EAC7C ( disk.asm):01359 LCA7B JMP >LAC7C GO TO BASIC'S MAIN LOOP, IT WILL LOAD PROGRAM ( disk.asm):01360 * LOAD IN A CRUNCHED BASIC FILE CA7E B60957 ( disk.asm):01361 LCA7E LDA DFLTYP *CHECK FILE TYPE (MUST BE BASIC:0) & CHECK CA81 BA095E ( disk.asm):01362 ORA DMRGFL *MERGE FLAG (MUST BE NO MERGE: 0) CA84 1026DB8E ( disk.asm):01363 LBNE LA616 'BAD FILE MODE' ERROR IF MERGE OR NON-BASIC CA88 BDAD19 ( disk.asm):01364 JSR >LAD19 DO A 'NEW' - RESET POINTERS, ERASE VARIABLES CA8B 73095D ( disk.asm):01365 COM DLODFL * SET THE LOAD FLAG TO $FF - THIS WILL CAUSE A NEW TO ( disk.asm):01366 * * OCCUR IF AN ERROR OCCURS WHILE THE PROGRAM IS BEING LOADED CA8E BDCDBC ( disk.asm):01367 JSR >LCDBC GET CHAR FROM BUFFER - SHOULD BE $FF CA91 BDCDBC ( disk.asm):01368 JSR >LCDBC GET ANOTHER - MS BYTE OF LENGTH CA94 3402 ( disk.asm):01369 PSHS A SAVE MS BYTE ON STACK CA96 BDCDBC ( disk.asm):01370 JSR >LCDBC LS BYTE OF LENGTH OF PROGRAM CA99 1F89 ( disk.asm):01371 TFR A,B PUT LS BYTE INTO ACCB CA9B 3502 ( disk.asm):01372 PULS A NOW ACCD CONTAINS LENGTH OF PROGRAM CA9D D319 ( disk.asm):01373 ADDD TXTTAB ADD BEGINNING OF BASIC CA9F BDAC37 ( disk.asm):01374 JSR >LAC37 SEE OF ENOUGH ROOM IN RAM FOR THIS FILE CAA2 9E19 ( disk.asm):01375 LDX TXTTAB GET START OF BASIC CAA4 BDC5C4 ( disk.asm):01376 LCAA4 JSR >LC5C4 READ A CHAR FROM CONSOLE IN CAA7 D670 ( disk.asm):01377 LDB CINBFL BUFFER EMPTY? CAA9 2604 ( disk.asm):01378 BNE LCAAF BRANCH IF SO CAAB A780 ( disk.asm):01379 STA ,X+ STORE CHAR CAAD 20F5 ( disk.asm):01380 BRA LCAA4 GET ANOTHER CHARACTER CAAF 7F095D ( disk.asm):01381 LCAAF CLR DLODFL CLEAR LOAD FLAG - LOAD WAS ERROR FREE CAB2 9F1B ( disk.asm):01382 STX VARTAB SAVE NEW START OF VARIABLES ( disk.asm):01383 * MAKE SURE LAST THREE BYTES LOADED WERE ZERO CAB4 C603 ( disk.asm):01384 LDB #$03 CHECK THREE BYTES CAB6 A682 ( disk.asm):01385 LCAB6 LDA ,-X CHECK A BYTE CAB8 2603 ( disk.asm):01386 BNE LCABD BRANCH IF NON-ZERO CABA 5A ( disk.asm):01387 DECB DECREMENT COUNTER CABB 26F9 ( disk.asm):01388 BNE LCAB6 KEEP CHECKING IF NOT DONE CABD 9E1B ( disk.asm):01389 LCABD LDX VARTAB GET START OF VARIABLES CABF 9F1B ( disk.asm):01390 LCABF STX VARTAB SAVE START OF VARIABLES CAC1 6F80 ( disk.asm):01391 CLR ,X+ CLEAR A BYTE CAC3 5A ( disk.asm):01392 DECB DECREMRNT COUNTER CAC4 2AF9 ( disk.asm):01393 BPL LCABF KEEP CLEARING BYTES IF NOT DONE CAC6 BDA42D ( disk.asm):01394 LCAC6 JSR >LA42D CLOSE SELECTED FILE CAC9 BDAD21 ( disk.asm):01395 JSR >LAD21 DO PART OF NEW - ERASE VARIABLES, RESET INPUT PTR CACC BD829C ( disk.asm):01396 JSR XVEC18 INITIALIZE EXBAS GRAPHICS VARIABLES CACF BDACEF ( disk.asm):01397 JSR >LACEF RELOCATE ALL THE BASIC NEXT LINE POINTERS CAD2 770959 ( disk.asm):01398 ASR DRUNFL CHECK LSB OF RUN FLAG CAD5 2503 ( disk.asm):01399 BLO LCADA BRANCH IF DON'T CLOSE ALL FILES CAD7 BDA426 ( disk.asm):01400 JSR >LA426 CLOSE ALL FILES CADA 770959 ( disk.asm):01401 LCADA ASR DRUNFL TEST BIT 1 OF RUN FLAG CADD 1025E2BD ( disk.asm):01402 LBCS LAD9E BRANCH TO COMM INTERPRETATION LOOP IF BIT 1 SET CAE1 7EAC73 ( disk.asm):01403 JMP >LAC73 RETURN TO DIRECT MODE CAE4 0D6F ( disk.asm):01404 DVEC13 TST DEVNUM * CHECK DEVICE NUMBER AND CAE6 2EDE ( disk.asm):01405 BGT LCAC6 * TRY TO RUN FILE IF IT IS A DISK FILE CAE8 39 ( disk.asm):01406 RTS ( disk.asm):01407 * CLOSE ALL FILE BUFFERS RAM VECTOR CAE9 F6095B ( disk.asm):01408 DVEC7 LDB FCBACT GET THE NUMBER OF RESERVED FILE BUFFERS CAEC 5C ( disk.asm):01409 INCB ADD ONE CAED 3404 ( disk.asm):01410 LCAED PSHS B SAVE IT CAEF D76F ( disk.asm):01411 STB DEVNUM STORE IT IN DEVICE NUMBER CAF1 8D0E ( disk.asm):01412 BSR LCB01 CLOSE FILE CAF3 3504 ( disk.asm):01413 PULS B GET BACK NUMBER OF FILE BUFFERS CAF5 5A ( disk.asm):01414 DECB DECREMENT FILE BUFFER COUNTER CAF6 26F5 ( disk.asm):01415 BNE LCAED BRANCH IF ALL FILES NOT CLOSED CAF8 39 ( disk.asm):01416 LCAF8 RTS ( disk.asm):01417 * CLOSE FILE RAM HOOK CAF9 0D6F ( disk.asm):01418 DVEC8 TST DEVNUM * CHECK DEVICE NUMBER AND RETURN CAFB 102FB787 ( disk.asm):01419 LBLE XVEC8 * IF NOT A DISK FILE CAFF 3262 ( disk.asm):01420 LEAS $02,S PURGE RETURN ADDRESS OFF OF THE STACK CB01 BDC744 ( disk.asm):01421 LCB01 JSR >LC744 POINT X TO CORRECT FCB CB04 0F6F ( disk.asm):01422 CLR DEVNUM SET DEVICE NUMBER TO SCREEN CB06 9FF1 ( disk.asm):01423 LCB06 STX FCBTMP SAVE FILE BUFFER POINTER CB08 A600 ( disk.asm):01424 LDA FCBTYP,X GET THE TYPE OF THIS FILE CB0A 27EC ( disk.asm):01425 BEQ LCAF8 RETURN IF FILE NOT OPEN CB0C 3402 ( disk.asm):01426 PSHS A SAVE FILE TYPE CB0E 6F00 ( disk.asm):01427 CLR FCBTYP,X CLOSE THE FILE - ZERO OUT THE FILE TYPE CB10 E601 ( disk.asm):01428 LDB FCBDRV,X * GET DRIVE NUMBER AND CB12 D7EB ( disk.asm):01429 STB DCDRV * SAVE IT IN DSKCON VARIABLE CB14 8120 ( disk.asm):01430 CMPA #OUTFIL = CHECK FOR OUTPUT TYPE AND CB16 2619 ( disk.asm):01431 BNE LCB31 = BRANCH IF NOT OUTPUT TYPE FILE ( disk.asm):01432 * CLOSE A SEQUENTIAL OUTPUT FILE CB18 E68818 ( disk.asm):01433 LDB FCBLFT,X GET THE NUMBER OF CHARACTERS IN BUFFER CB1B 8680 ( disk.asm):01434 LDA #$80 * SET THE PRE-SAVED BIT TO INDICATE THAT THE DATA ( disk.asm):01435 * * HAS ALREADY BEEN SAVED ON DISK CB1D AA05 ( disk.asm):01436 ORA FCBCPT,X 'OR' IN THE FULL SECTOR FLAG CB1F ED8813 ( disk.asm):01437 STD FCBLST,X SAVE THE NUMBER OF BYTES USED IN THE LAST SECTOR CB22 6C04 ( disk.asm):01438 INC FCBSEC,X INCREMENT THE SECTOR NUMBER CB24 E603 ( disk.asm):01439 LDB FCBCGR,X GET THE CURRENT GRANULE NUMBER CB26 BDC755 ( disk.asm):01440 JSR >LC755 POINT X TO FILE ALLOCATION TABLE CB29 A701 ( disk.asm):01441 STA FAT1,X SET FAT DATA NOT VALID FLAG (ACCA <> 0) CB2B 3A ( disk.asm):01442 ABX ADD GRANULE OFFSET TO FAT POINTER CB2C 6C06 ( disk.asm):01443 INC FATCON,X * INCREMENT GRANULE DATA (ADD ONE SECTOR TO LAST ( disk.asm):01444 * * GRANULE) SKIP PAST THE SIX FAT CONTROL BYTES CB2E 7ECBC3 ( disk.asm):01445 LCB2E JMP >LCBC3 UPDATE FAT AND DIRECTORY CB31 8140 ( disk.asm):01446 LCB31 CMPA #RANFIL RANDOM FILE? CB33 26F9 ( disk.asm):01447 BNE LCB2E NO - UPDATE FAT AND DIRECTORY IF SEQUENTIAL INPUT FILE ( disk.asm):01448 * CLOSE A RANDOM FILE CB35 EC09 ( disk.asm):01449 LDD FCBRLN,X GET RECORD LENGTH CB37 AE0B ( disk.asm):01450 LDX FCBBUF,X POINT X TO RANDOM FILE BUFFER CB39 318B ( disk.asm):01451 LEAY D,X POINT Y TO END OF RANDOM FILE BUFFER CB3B 3436 ( disk.asm):01452 PSHS Y,X,B,A SAVE POINTERS ON STACK CB3D 31E4 ( disk.asm):01453 LEAY ,S POINT Y CURRENT STACK POINTER CB3F DE1B ( disk.asm):01454 LDU VARTAB GET START OF VARIABLES CB41 11931D ( disk.asm):01455 LCB41 CMPU ARYTAB COMPARE TO START OF ARRAYS CB44 270E ( disk.asm):01456 BEQ LCB54 BRANCH IF ALL VARIABLES CHECKED CB46 A641 ( disk.asm):01457 LDA $01,U GET 2ND BYTE OF VARIABLE NAME CB48 3342 ( disk.asm):01458 LEAU $02,U MOVE POINTER TO START OF DESCRIPTOR CB4A 2A02 ( disk.asm):01459 BPL LCB4E BRANCH IF VARIABLE - NUMERIC CB4C 8D28 ( disk.asm):01460 BSR LCB76 ADJUST STRING VARIABLE IF IN RANDOM FILE BUFFER CB4E 3345 ( disk.asm):01461 LCB4E LEAU $05,U MOVE POINTER TO NEXT VARIABLE CB50 20EF ( disk.asm):01462 BRA LCB41 PROCESS ANOTHER VARIABLE CB52 3540 ( disk.asm):01463 LCB52 PULS U GET ADDRESS OF NEXT ARRAY TO U CB54 11931F ( disk.asm):01464 LCB54 CMPU ARYEND COMPARE TO END OF ARRAYS CB57 273A ( disk.asm):01465 BEQ LCB93 BRANCH IF END OF ARRAYS CB59 1F30 ( disk.asm):01466 TFR U,D * SAVE ARRAY START IN ACCD, ADD OFFSET CB5B E342 ( disk.asm):01467 ADDD $02,U * TO NEXT ARRAY AND SAVE ADDRESS OF CB5D 3406 ( disk.asm):01468 PSHS B,A * NEXT ARRAY ON THE STACK CB5F A641 ( disk.asm):01469 LDA $01,U GET 2ND LETTER OF VARIABLE NAME CB61 2AEF ( disk.asm):01470 BPL LCB52 BRANCH IF NUMERIC CB63 E644 ( disk.asm):01471 LDB $04,U GET THE NUMBER OF DIMENSIONS CB65 58 ( disk.asm):01472 ASLB X2:2 BYTES PER DIMENSION CB66 CB05 ( disk.asm):01473 ADDB #$05 5 BYTES CONSTANT PER ARRAY DESCRIPTOR CB68 4F ( disk.asm):01474 CLRA CLEAR MSB OF OFFSET - (ONLY 125 DIMENSIONS ALLOWED) CB69 33CB ( disk.asm):01475 LEAU D,U POINT U TO START OF THIS ARRAY'S VARIABLES CB6B 11A3E4 ( disk.asm):01476 LCB6B CMPU ,S AT END OF THIS ARRAY? CB6E 27E2 ( disk.asm):01477 BEQ LCB52 YES CB70 8D04 ( disk.asm):01478 BSR LCB76 ADJUST STRING VARIABLE IF IN RANDOM FILE BUFFER CB72 3345 ( disk.asm):01479 LEAU $05,U MOVE POINTER TO NEXT DESCRIPTOR CB74 20F5 ( disk.asm):01480 BRA LCB6B CHECK NEXT VARIABLE ( disk.asm):01481 * ( disk.asm):01482 * CHECK TO SEE IF A STRING IS LOCATED IN THE RANDOM FILE BUFFER AREA. IF IT IS ( disk.asm):01483 * THE RANDOM FILE BUFFER IN QUESTION, IT WILL BE DELETED. IF IT IS HIGHER IN THE RANDOM ( disk.asm):01484 * FILE BUFFER SPACE THAN THE BUFFER IN QUESTION, THE LENGTH OF THE CURRENT ( disk.asm):01485 * BUFFER WILL BE SUBTRACTED FROM THE ADDRESS OF THE STRING BECAUSE THE CURRENT ( disk.asm):01486 * BUFFER IS BEING DELETED (CLOSED). CB76 AE42 ( disk.asm):01487 LCB76 LDX $02,U POINT X TO START OF STRING CB78 BC0948 ( disk.asm):01488 CMPX RNBFAD COMPARE TO START OF FREE RANDOM FILE BUFFER AREA CB7B 240E ( disk.asm):01489 BHS LCB8B RETURN IF > START OF FREE RANDOM FILE BUFFER AREA CB7D AC22 ( disk.asm):01490 CMPX $02,Y COMPARE TO START OF THIS FILE'S RANDOM BUFFER CB7F 250A ( disk.asm):01491 BLO LCB8B RETURN IF < START OF THIS FILE'S RANDOM BUFFER CB81 AC24 ( disk.asm):01492 CMPX $04,Y COMPARE TO END OF THIS FILE'S RANDOM BUFFER CB83 2507 ( disk.asm):01493 BLO LCB8C RETURN IF < END OF THIS FILE'S RANDOM BUFFER CB85 1F10 ( disk.asm):01494 TFR X,D SAVE POINTER IN ACCD CB87 A3A4 ( disk.asm):01495 SUBD ,Y SUBTRACT RECORD LENGTH FROM START OF STRING ADDRESS CB89 ED42 ( disk.asm):01496 STD $02,U SAVE NEW START OF STRING ADDRESS CB8B 39 ( disk.asm):01497 LCB8B RTS CB8C 6FC4 ( disk.asm):01498 LCB8C CLR ,U CLEAR THE LENGTH OF THE STRING CB8E 6F42 ( disk.asm):01499 CLR $02,U * CLEAR THE ADDRESS CB90 6F43 ( disk.asm):01500 CLR $03,U * OF THE STRING CB92 39 ( disk.asm):01501 RTS ( disk.asm):01502 * REMOVE RESERVED SPACE IN RANDOM FILE BUFFER FOR A 'CLOSED' RANDOM FILE ( disk.asm):01503 * ADJUST THE START OF RANDOM FILE BUFFER POINTER IN ALL RANDOM FCBS CB93 F6095B ( disk.asm):01504 LCB93 LDB FCBACT GET THE NUMBER OF ACTIVE FILES CB96 5C ( disk.asm):01505 INCB ADD ONE CB97 3404 ( disk.asm):01506 LCB97 PSHS B SAVE FILES COUNT ON THE STACK CB99 BDC749 ( disk.asm):01507 JSR >LC749 POINT X TO FCB CB9C A600 ( disk.asm):01508 LDA FCBTYP,X GET FILE TYPE CB9E 8140 ( disk.asm):01509 CMPA #RANFIL IS IT A RANDOM FILE? CBA0 260B ( disk.asm):01510 BNE LCBAD BRANCH IF NOT CBA2 EC0B ( disk.asm):01511 LDD FCBBUF,X GET START OF THIS FILE'S RANDOM FILE BUFFER CBA4 10A324 ( disk.asm):01512 CMPD $04,Y * COMPARE TO END OF RANDOM FILE BUFFER AREA AND CBA7 2504 ( disk.asm):01513 BLO LCBAD * BRANCH IF < END OF RANDOM FILE BUFFER AREA CBA9 A3A4 ( disk.asm):01514 SUBD ,Y = SUBTRACT RECORD LENGTH OF SELECTED FILE CBAB ED0B ( disk.asm):01515 STD FCBBUF,X = SAVE NEW START OF RANDOM FILE BUFFER CBAD 3504 ( disk.asm):01516 LCBAD PULS B GET THE FILES COUNTER CBAF 5A ( disk.asm):01517 DECB DECREMENT FILES COUNTER CBB0 26E5 ( disk.asm):01518 BNE LCB97 BRANCH IF ALL FILES NOT DONE CBB2 3556 ( disk.asm):01519 PULS A,B,X,U * U = END OF RANDOM FILE BUFFER, X = START OF RANDOM ( disk.asm):01520 * FILE BUFFER, ACCD = RECORD LENGTH ( disk.asm):01521 ** THIS WOULD PROBABLY BE THE MOST CONVENIENT PLACE TO FIX THE BUG WHICH ( disk.asm):01522 ** CAUSES THE SYSTEM TO HANG IF AN ERROR IS ENCOUNTERED DURING 'COPY' ( disk.asm):01523 * CMPU FCBADR * IS THE END OF THIS FCB'S BUFFER ABOVE THE END ( disk.asm):01524 * * OF THE START OF THE FCB AREA ( disk.asm):01525 * BLO LCBB4 NO - FREE UP THE SPACE USED BY THIS FILE IN RANDOM BUFFER ( disk.asm):01526 * LDX #DFLBUF YES - DOING A 'COPY'; RESET START OF RANDOM BUFFER ( disk.asm):01527 * BRA LCBC0 ( disk.asm):01528 * RANDOM FILE BUFFER AREA ( disk.asm):01529 * REMOVE RESERVED SPACE FOR CLOSED FILE FROM RANDOM FILE BUFFER SPACE CBB4 11B30948 ( disk.asm):01530 LCBB4 CMPU RNBFAD AT THE BOTTOM OF FREE RANDOM BUFFER AREA? CBB8 2706 ( disk.asm):01531 BEQ LCBC0 BRANCH IF THERE CBBA A6C0 ( disk.asm):01532 LDA ,U+ = GRAB A SOURCE BYTE AND CBBC A780 ( disk.asm):01533 STA ,X+ = MOVE IT TO DESTINATION CBBE 20F4 ( disk.asm):01534 BRA LCBB4 KEEP MOVING BYTES CBC0 BF0948 ( disk.asm):01535 LCBC0 STX RNBFAD SAVE NEW START OF FREE RANDOM BUFFER AREA CBC3 BDC755 ( disk.asm):01536 LCBC3 JSR >LC755 POINT X TO PROPER FILE ALLOCATION TABLE CBC6 6A00 ( disk.asm):01537 DEC FAT0,X REMOVE ONE ACTIVE FILE CBC8 6D01 ( disk.asm):01538 TST FAT1,X NEW DATA IN FAT RAM IMAGE? CBCA 2703 ( disk.asm):01539 BEQ LCBCF NO CBCC BDC71E ( disk.asm):01540 JSR >LC71E WRITE OUT FILE ALLOCATION TABLE TO DISK CBCF 9EF1 ( disk.asm):01541 LCBCF LDX FCBTMP GET FILE BUFFER POINTER CBD1 3502 ( disk.asm):01542 PULS A GET FILE TYPE CBD3 8120 ( disk.asm):01543 CMPA #OUTFIL IS IT A SEQUENTIAL OUTPUT FILE? CBD5 2708 ( disk.asm):01544 BEQ LCBDF YES CBD7 8140 ( disk.asm):01545 CMPA #RANFIL IS IT A RANDOM FILE? CBD9 26B0 ( disk.asm):01546 BNE LCB8B RETURN IF NOT A RANDOM FILE (SEQUENTIAL INPUT) CBDB A60F ( disk.asm):01547 LDA FCBFLG,X * TEST THE GET/PUT FLAG AND CBDD 270A ( disk.asm):01548 BEQ LCBE9 * BRANCH IF 'GET' ( disk.asm):01549 * WRITE CONTENTS OF FILE BUFFER TO DISK CBDF BDC763 ( disk.asm):01550 LCBDF JSR >LC763 GET PROPER TRACK & SECTOR NUMBERS CBE2 338819 ( disk.asm):01551 LEAU FCBCON,X POINT U TO START OF FCB DATA CBE5 DFEE ( disk.asm):01552 STU DCBPT SET UP FILE BUFFER POINTER FOR DSKCON CBE7 8D2C ( disk.asm):01553 BSR LCC15 GO WRITE A SECTOR CBE9 A68813 ( disk.asm):01554 LCBE9 LDA FCBLST,X CHECK THE PRE-SAVED FLAG CBEC 2A9D ( disk.asm):01555 BPL LCB8B RETURN IF RECORD HAS ALREADY BEEN SAVED ON DISK CBEE E68812 ( disk.asm):01556 LDB FCBDIR,X GET DIRECTORY NUMBER OF THIS FILE CBF1 C407 ( disk.asm):01557 ANDB #$07 8 ENTRIES PER SECTOR CBF3 8620 ( disk.asm):01558 LDA #DIRLEN DIRLEN BYTES PER DIRECTORY ENTRY CBF5 3D ( disk.asm):01559 MUL GET SECTOR OFFSET FOR THIS ENTRY CBF6 CE0600 ( disk.asm):01560 LDU #DBUF0 * GET READ/WRITE BUFFER 0 AND CBF9 DFEE ( disk.asm):01561 STU DCBPT * SAVE IT IN DSKCON REGISTER CBFB 31CB ( disk.asm):01562 LEAY D,U Y POINTS TO CORRECT DIRECTORY ENTRY CBFD E68812 ( disk.asm):01563 LDB FCBDIR,X GET DIRECTORY ENTRY NUMBER CC00 54 ( disk.asm):01564 LSRB * CC01 54 ( disk.asm):01565 LSRB * CC02 54 ( disk.asm):01566 LSRB * DIVIDE BY 8; EIGHT DIRECTORY ENTRIES PER SECTOR CC03 CB03 ( disk.asm):01567 ADDB #$03 ADD BIAS; FIRST 3 SECTORS NOT DIRECTORY CC05 D7ED ( disk.asm):01568 STB DSEC STORE SECTOR NUMBER CC07 CC1102 ( disk.asm):01569 LDD #$1102 DIRECTORY TRACK - READ OP CODE CC0A 97EC ( disk.asm):01570 STA DCTRK STORE TRACK NUMBER CC0C 8D09 ( disk.asm):01571 BSR LCC17 GO READ DIRECTORY CC0E EC8813 ( disk.asm):01572 LDD FCBLST,X GET NUMBER OF BYTES IN THE LAST SECTOR CC11 847F ( disk.asm):01573 ANDA #$7F MASK OFF THE PRE-SAVED FLAG CC13 ED2E ( disk.asm):01574 STD DIRLST,Y SAVE NUMBER OF BYTES IN LAST SECTOR OF FILE IN DIRECTORY CC15 C603 ( disk.asm):01575 LCC15 LDB #$03 WRITE OP CODE CC17 D7EA ( disk.asm):01576 LCC17 STB DCOPC SAVE DSKCON OP CODE VARIABLE CC19 7ED6F2 ( disk.asm):01577 JMP >LD6F2 GO READ/WRITE SECTOR ( disk.asm):01578 * CONSOLE OUT RAM HOOK CC1C 0D6F ( disk.asm):01579 DVEC3 TST DEVNUM CHECK DEVICE NUMBER CC1E 102FB651 ( disk.asm):01580 LBLE XVEC3 BRANCH TO EX BASIC IF NOT A DISK FILE CC22 3262 ( disk.asm):01581 LEAS $02,S POP RETURN OFF STACK ( disk.asm):01582 * SEND A CHARACTER IN ACCA TO A DISK FILE. A CARRIAGE RETURN WILL RESET THE ( disk.asm):01583 * PRINT POSITION AND CONTROL CODES WILL NOT INCREMENT THE PRINT POSITION. CC24 3416 ( disk.asm):01584 LCC24 PSHS X,B,A SAVE REGISTERS CC26 8E0926 ( disk.asm):01585 LDX #FCBV1-2 POINT X TO TABLE OF FILE NUMBER VECTORS CC29 D66F ( disk.asm):01586 LDB DEVNUM GET CURRENT FILE NUMBER CC2B 58 ( disk.asm):01587 ASLB 2 BYTES PER FCB ADDRESS CC2C AE85 ( disk.asm):01588 LDX B,X POINT X TO PROPER FCB CC2E E684 ( disk.asm):01589 LDB ,X GET FILE TYPE (FCBTYP,X) CC30 C110 ( disk.asm):01590 CMPB #INPFIL IS IT AN INPUT FILE? CC32 2736 ( disk.asm):01591 BEQ LCC6A RETURN IF SO CC34 810D ( disk.asm):01592 CMPA #CR CARRIAGE RETURN (ENTER) CC36 2602 ( disk.asm):01593 BNE LCC3A NO CC38 6F06 ( disk.asm):01594 CLR FCBPOS,X CLEAR PRINT POSITION IF CARRIAGE RETURN CC3A 8120 ( disk.asm):01595 LCC3A CMPA #SPACE * CC3C 2502 ( disk.asm):01596 BLO LCC40 *BRANCH IF CONTROL CHAR CC3E 6C06 ( disk.asm):01597 INC FCBPOS,X INCREMENT PRINT POSITION CC40 C140 ( disk.asm):01598 LCC40 CMPB #RANFIL IS IT RANDOM FILE? CC42 261A ( disk.asm):01599 BNE LCC5E BRANCH IF NOT RANDOM ( disk.asm):01600 * PUT A BYTE INTO A RANDOM FILE CC44 EC8817 ( disk.asm):01601 LDD FCBPUT,X GET 'PUT' BYTE COUNTER CC47 C30001 ( disk.asm):01602 ADDD #$0001 ADD ONE CC4A 10A309 ( disk.asm):01603 CMPD FCBRLN,X COMPARE TO RECORD LENGTH CC4D 1022017A ( disk.asm):01604 LBHI LCDCB 'FR' ERROR IF 'PUT' BYTE COUNTER > RECORD LENGTH CC51 ED8817 ( disk.asm):01605 STD FCBPUT,X SAVE NEW 'PUT' BYTE COUNTER CC54 AE0B ( disk.asm):01606 LDX FCBBUF,X POINT TO RANDOM FILE BUFFER POINTER CC56 308B ( disk.asm):01607 LEAX D,X POINT TO ONE PAST END OF CURRENT RECORD DATA CC58 3502 ( disk.asm):01608 PULS A PULL DATA FROM STACK CC5A A71F ( disk.asm):01609 STA -1,X STORE IN DATA BUFFER CC5C 3594 ( disk.asm):01610 PULS B,X,PC RESTORE REGISTERS AND RETURN ( disk.asm):01611 * WRITE A BYTE TO SEQUENTIAL OUTPUT FILE CC5E 6C8818 ( disk.asm):01612 LCC5E INC FCBLFT,X INCREMENT CHARACTER COUNT CC61 E68818 ( disk.asm):01613 LDB FCBLFT,X * GET CHARACTER COUNT AND BRANCH CC64 2706 ( disk.asm):01614 BEQ LCC6C * IF THE BUFFER IS FULL CC66 3A ( disk.asm):01615 ABX ADD CHARACTER COUNT TO FCB ADDRESS CC67 A78818 ( disk.asm):01616 STA FCBCON-1,X STORE NEW CHARACTER (SKIP PAST 25 CONTROL BYTES AT FCB START) CC6A 3596 ( disk.asm):01617 LCC6A PULS A,B,X,PC ( disk.asm):01618 * WRITE OUT A FULL BUFFER AND RESET BUFFER CC6C 3460 ( disk.asm):01619 LCC6C PSHS U,Y SAVE REGISTERS CC6E A7890118 ( disk.asm):01620 STA SECLEN+FCBCON-1,X STORE LAST CHARACTER IN BUFFER CC72 E601 ( disk.asm):01621 LDB FCBDRV,X * GET DRIVE NUMBER AND SAVE CC74 D7EB ( disk.asm):01622 STB DCDRV * IT IN DSKCON CONTROL TABLE CC76 6C04 ( disk.asm):01623 INC FCBSEC,X INCREMENT SECTOR NUMBER CC78 BDCBDF ( disk.asm):01624 JSR >LCBDF WRITE THE FILE BUFFER TO DISK CC7B 3184 ( disk.asm):01625 LEAY ,X SAVE FCB POINTER IN Y CC7D E603 ( disk.asm):01626 LDB FCBCGR,X GET GRANULE NUMBER CC7F BDC755 ( disk.asm):01627 JSR >LC755 POINT X TO PROPER ALLOCATION TABLE CC82 3A ( disk.asm):01628 ABX ADD THE GRANULE NUMBER TO FAT POINTER CC83 3306 ( disk.asm):01629 LEAU FATCON,X POINT U TO THE CORRECT GRANULE IN FAT - SKIP PAST THE SIX FAT CONTROL BYTES CC85 A624 ( disk.asm):01630 LDA FCBSEC,Y GET CURRENT SECTOR FOR THIS GRANULE CC87 8109 ( disk.asm):01631 CMPA #$09 MAX SECTOR NUMBER (9 SECTORS/GRANULE) CC89 250E ( disk.asm):01632 BLO LCC99 BRANCH IF NOT AT END OF GRANULE CC8B 6A24 ( disk.asm):01633 DEC FCBSEC,Y *DECREMENT SECTOR NUMBER AND INCREMENT ERROR FLAG IN CC8D 6C25 ( disk.asm):01634 INC FCBCPT,Y *CASE ERROR FOUND WHILE LOOKING FOR NEXT GRANULE — ( disk.asm):01635 * THE ERROR FLAG IS USED TO INDICATE THAT ANOTHER SECTOR ( disk.asm):01636 * MUST BE ADDED TO THE LENGTH OF FILE FOLLOWING ERROR PROCESSING. CC8F BDC7BF ( disk.asm):01637 JSR >LC7BF GET NEXT FREE GRANULE CC92 6F24 ( disk.asm):01638 CLR FCBSEC,Y *CLEAR SECTOR NUMBER AND CC94 6F25 ( disk.asm):01639 CLR FCBCPT,Y *ERROR FLAG - DISK WAS NOT FULL CC96 A723 ( disk.asm):01640 STA FCBCGR,Y SAVE NEW GRANULE IN FCB CC98 8C ( disk.asm):01641 FCB $8C SKIP TWO BYTES — NO DATA STORED IN NEW SECTOR YET (THROWN AWAY CMPX INSTRUCTION) CC99 8AC0 ( disk.asm):01642 LCC99 ORA #$C0 FORCE GRANULE NUMBER TO BE FINAL GRANULE IN FILE CC9B A7C4 ( disk.asm):01643 STA ,U STORE IN MAP CC9D 30A4 ( disk.asm):01644 LEAX ,Y POINT X TO FCB CC9F BDC685 ( disk.asm):01645 JSR >LC685 INCREMENT RECORD NUMBER CCA2 BDC5A9 ( disk.asm):01646 JSR >LC5A9 UPDATE FILE ALLOCATION TABLE CCA5 3560 ( disk.asm):01647 PULS Y,U RESTORE REGISTERS CCA7 3596 ( disk.asm):01648 PULS A,B,X,PC RESTORE REGISTERS AND RETURN ( disk.asm):01649 * DIR COMMAND CCA9 BDD24F ( disk.asm):01650 DIR JSR >LD24F SCAN DRIVE NUMBER FROM INPUT LINE CCAC BDC79D ( disk.asm):01651 JSR >LC79D GET FAT FOR THIS DRIVE CCAF BDB958 ( disk.asm):01652 JSR >LB958 PRINT CARRIAGE RETURN TO CONSOLE OUT CCB2 CC1102 ( disk.asm):01653 LDD #$1102 * GET TRACK 17 AND CCB5 97EC ( disk.asm):01654 STA DCTRK * READ OP CODE AND CCB7 D7EA ( disk.asm):01655 STB DCOPC * SAVE IN DSKCON VARIABLES CCB9 C603 ( disk.asm):01656 LDB #$03 START WITH SECTOR 3 (FIRST DIRECTORY SECTOR) ( disk.asm):01657 * READ A DIRECTORY SECTOR INTO THE I/O BUFFER CCBB D7ED ( disk.asm):01658 LCCBB STB DSEC SAVE SECTOR NUMBER IN DSKCON VARIABLE CCBD 8E0600 ( disk.asm):01659 LDX #DBUF0 * USE I/O BUFFER 0 FOR DATA TRANSFER CCC0 9FEE ( disk.asm):01660 STX DCBPT * SAVE IN DSKCON VARIABLE CCC2 BDD6F2 ( disk.asm):01661 JSR >LD6F2 READ A SECTOR ( disk.asm):01662 * SEND DIRECTORY INFORMATION TO CONSOLE OUT CCC5 3540 ( disk.asm):01663 LCCC5 PULS U SAVE TOP OF STACK CCC7 BDA549 ( disk.asm):01664 JSR >LA549 GO DO A BREAK CHECK CCCA 3440 ( disk.asm):01665 PSHS U RESTORE STACK CCCC A684 ( disk.asm):01666 LDA ,X TEST FILE NAME FIRST BYTE (DIRNAM,X) CCCE 2738 ( disk.asm):01667 BEQ LCD08 BRANCH IF KILLED CCD0 43 ( disk.asm):01668 COMA FF = END OF DIRECTORY CCD1 2744 ( disk.asm):01669 BEQ LCD17 RETURN IF END OF DIRECTORY CCD3 3410 ( disk.asm):01670 PSHS X SAVE DIRECTORY POINTER ON STACK CCD5 C608 ( disk.asm):01671 LDB #$08 NUMBER CHARACTERS TO PRINT CCD7 BDB9A2 ( disk.asm):01672 JSR >LB9A2 SEND FILENAME TO CONSOLE OUT CCDA 8D3F ( disk.asm):01673 BSR LCD1B SEND BLANK TO CONSOLE OUT CCDC C603 ( disk.asm):01674 LDB #$03 NUMBER CHARACTERS TO PRINT CCDE BDB9A2 ( disk.asm):01675 JSR >LB9A2 SEND EXTENSION TO CONSOLE OUT CCE1 8D38 ( disk.asm):01676 BSR LCD1B SEND BLANK TO CONSOLE OUT CCE3 E600 ( disk.asm):01677 LDB FCBTYP,X GET FILE TYPE CCE5 C10A ( disk.asm):01678 CMPB #10 * CHECK THE NUMBER OF DECIMAL DIGITS IN CCE7 2402 ( disk.asm):01679 BHS LCCEB * ACCB: IF THERE IS ONLY ONE DIGIT, CCE9 8D30 ( disk.asm):01680 BSR LCD1B * SEND BLANK TO CONSOLE OUT CCEB 4F ( disk.asm):01681 LCCEB CLRA CLEAR MS BYTE OF ACCO CCEC BDBDCC ( disk.asm):01682 JSR >LBDCC PRINT ACCD IN DECIMAL TO CONSOLE OUT CCEF 8D2A ( disk.asm):01683 BSR LCD1B SEND BLANK TO CONSOLE OUT CCF1 AEE4 ( disk.asm):01684 LDX ,S X NOW POINTS TO DIRECTORY ENTRY CCF3 8642 ( disk.asm):01685 LDA #'A+1 ASCII BIAS CCF5 AB0C ( disk.asm):01686 ADDA DIRASC,X ADD TO ASCII FLAG CCF7 8D1F ( disk.asm):01687 BSR LCD18 PRINT CHARACTER AND BLANK TO CONSOLE OUT CCF9 E60D ( disk.asm):01688 LDB DIRGRN,X GET FIRST GRANULE IN FILE CCFB 8D21 ( disk.asm):01689 BSR LCD1E COUNT GRANULES CCFD 1F89 ( disk.asm):01690 TFR A,B SAVE COUNT IN ACCB CCFF 4F ( disk.asm):01691 CLRA CLEAR MS BYTE OF ACCD CD00 BDBDCC ( disk.asm):01692 JSR >LBDCC PRINT ACCO IN DECIMAL TO CONSOLE OUT CD03 BDB958 ( disk.asm):01693 JSR >LB958 SEND CARRIAGE RETURN TO CONSOLE OUT CD06 3510 ( disk.asm):01694 PULS X PULL DIRECTORY POINTER OFF OF THE STACK CD08 308820 ( disk.asm):01695 LCD08 LEAX DIRLEN,X MOVE X TO NEXT DIRECTORY ENTRY CD0B 8C0700 ( disk.asm):01696 CMPX #DBUF0+SECLEN END OF I/O BUFFER? CD0E 25B5 ( disk.asm):01697 BLO LCCC5 BRANCH IF MORE DIRECTORY ENTRIES IN BUFFER CD10 D6ED ( disk.asm):01698 LDB DSEC GET CURRENT SECTOR CD12 5C ( disk.asm):01699 INCB BUMP COUNT CD13 C112 ( disk.asm):01700 CMPB #SECMAX SECMAX SECTORS IN DIRECTORY TRACK CD15 23A4 ( disk.asm):01701 BLS LCCBB GET NEXT SECTOR CD17 39 ( disk.asm):01702 LCD17 RTS FINISHED CD18 BDA282 ( disk.asm):01703 LCD18 JSR PUTCHR SEND CHARACTER TO CONSOLE OUT CD1B 7EB9AC ( disk.asm):01704 LCD1B JMP >LB9AC SEND BLANK TO CONSOLE OUT ( disk.asm):01705 * ENTER WITH ACCB POINTING TO FIRST GRANULE IN A FILE; RETURN THE NUMBER OF ( disk.asm):01706 * GRANULES IN THE FILE IN ACCA, THE GRANULE DATA FOR THE LAST SECTOR IN ACCB CD1E BDC755 ( disk.asm):01707 LCD1E JSR >LC755 POINT X TO FILE ALLOCATION BUFFER CD21 3306 ( disk.asm):01708 LEAU FATCON,X POINT U TO START OF GRANULE DATA CD23 4F ( disk.asm):01709 CLRA RESET GRANULE COUNTER CD24 4C ( disk.asm):01710 LCD24 INCA INCREMENT GRANULE COUNTER CD25 8144 ( disk.asm):01711 CMPA #GRANMX CHECKED ALL 68 GRANULES? CD27 1022F928 ( disk.asm):01712 LBHI LC653 YES - 'BAD FILE STRUCTURE' ERROR CD2B 30C4 ( disk.asm):01713 LEAX ,U POINT U TO START OF GRANULE DATA CD2D 3A ( disk.asm):01714 ABX ADD POINTER TO FIRST GRANULE CD2E E684 ( disk.asm):01715 LDB ,X GET THIS GRANULE'S CONTROL BYTE CD30 C1C0 ( disk.asm):01716 CMPB #$C0 IS THIS THE LAST GRANULE IN FILE? CD32 25F0 ( disk.asm):01717 BLO LCD24 NO - KEEP GOING CD34 39 ( disk.asm):01718 RTS ( disk.asm):01719 * INPUT RAM HOOK CD35 0D6F ( disk.asm):01720 DVEC10 TST DEVNUM * CHECK DEVICE NUMBER AND RETURN CD37 2F5E ( disk.asm):01721 BLE LCD97 * IF NOT A DISK FILE CD39 8EB069 ( disk.asm):01722 LDX #LB069 = CHANGE THE RETURN ADDRESS ON THE STACK TO RE-ENTER BASIC'S INPUT CD3C AFE4 ( disk.asm):01723 STX ,S = ROUTINE AT A DIFFERENT PLACE THAN THE CALLING ROUTINE CD3E 8E02DD ( disk.asm):01724 LDX #LINBUF+1 POINT X TO THE LINE INPUT BUFFER CD41 C62C ( disk.asm):01725 LDB #', = CD43 D701 ( disk.asm):01726 STB CHARAC =COMMA IS READ ITEM SEPARATOR (TEMPORARY STRING SEARCH FLAG) CD45 9606 ( disk.asm):01727 LDA VALTYP * GET VARIABLE TYPE AND BRANCH IF CD47 2602 ( disk.asm):01728 BNE LCD4B * IT IS A STRING CD49 C620 ( disk.asm):01729 LDB #SPACE SPACE = NUMERIC SEARCH DELIMITER CD4B 8D6F ( disk.asm):01730 LCD4B BSR LCDBC GET AN INPUT CHARACTER CD4D 8120 ( disk.asm):01731 CMPA #SPACE SPACE? CD4F 27FA ( disk.asm):01732 BEQ LCD4B YES - GET ANOTHER CHARACTER CD51 8122 ( disk.asm):01733 CMPA #'" QUOTE? CD53 260A ( disk.asm):01734 BNE LCD5F NO CD55 C12C ( disk.asm):01735 CMPB #', SEARCH CHARACTER = COMMA? CD57 2606 ( disk.asm):01736 BNE LCD5F NO - NUMERIC SEARCH CD59 1F89 ( disk.asm):01737 TFR A,B * SAVE DOUBLE QUOTE AS CD5B D701 ( disk.asm):01738 STB CHARAC * THE SEARCH FLAG CD5D 2022 ( disk.asm):01739 BRA LCD81 SAVE DOUBLE QUOTES AS FIRST ITEM IN BUFFER CD5F C122 ( disk.asm):01740 LCD5F CMPB #'" * CD61 2711 ( disk.asm):01741 BEQ LCD74 *BRANCH IF INPUTTING A STRING VARIABLE CD63 810D ( disk.asm):01742 CMPA #CR IS THE INPUT CHARACTER A CARRIAGE RETURN CD65 260D ( disk.asm):01743 BNE LCD74 NO CD67 8C02DD ( disk.asm):01744 CMPX #LINBUF+1 *IF AT THE START OF INPUTBUFFER, CHECK FOR A CD6A 2744 ( disk.asm):01745 BEQ LCDB0 *FOLLOWING LINE FEED AND EXIT ROUTINE CD6C A61F ( disk.asm):01746 LDA -1,X =IF THE INPUT CHARACTER PRECEEDING THE CR WAS A LINE FEED, CD6E 810A ( disk.asm):01747 CMPA #LF =THEN INSERT THE CR IN THE INPUT STRING, OTHERWISE CD70 263E ( disk.asm):01748 BNE LCDB0 =CHECK FOR A FOLLOWING LINE FEED AND EXIT THE ROUTINE CD72 860D ( disk.asm):01749 LDA #CR RESTORE CARRIAGE RETURN AS THE INPUT CHARACTER CD74 4D ( disk.asm):01750 LCD74 TSTA *CHECK FOR A NULL (ZERO) INPUT CHARACTER AND CD75 2717 ( disk.asm):01751 BEQ LCD8E *IGNORE IT IF lT IS A NULL CD77 9101 ( disk.asm):01752 CMPA CHARAC = CD79 271D ( disk.asm):01753 BEQ LCD98 =CHECK TO SEE IF THE INPUT CHARACTER MATCHES CD7B 3404 ( disk.asm):01754 PSHS B =EITHER ACCB OR CHARAC AND IF IT DOES, THEN CD7D A1E0 ( disk.asm):01755 CMPA ,S+ =BRANCH TO CHECK FOR ITEM SEPARATOR OR CD7F 2717 ( disk.asm):01756 BEQ LCD98 =TERMINATOR SEQUENCE AND EXIT ROUTINE CD81 A780 ( disk.asm):01757 LCD81 STA ,X+ STORE NEW CHARACTER IN BUFFER CD83 8C03D6 ( disk.asm):01758 CMPX #LINBUF+LBUFMX END OF INPUT BUFFER CD86 2606 ( disk.asm):01759 BNE LCD8E NO CD88 8D46 ( disk.asm):01760 BSR LCDD0 GET A CHARACTER FROM CONSOLE IN CD8A 2606 ( disk.asm):01761 BNE LCD92 EXIT ROUTINE IF BUFFER EMPTY CD8C 201E ( disk.asm):01762 BRA LCDAC CHECK FOR CR OR CR/LF AND EXIT ROUTINE CD8E 8D40 ( disk.asm):01763 LCD8E BSR LCDD0 GET A CHARACTER FROM CONSOLE IN CD90 27CD ( disk.asm):01764 BEQ LCD5F BRANCH IF BUFFER NOT EMPTY CD92 6F84 ( disk.asm):01765 LCD92 CLR ,X PUT A ZERO AT END OF BUFFER WHEN DONE CD94 8E02DC ( disk.asm):01766 LDX #LINBUF POINT (X) TO LINBUF - RESET POINTER CD97 39 ( disk.asm):01767 LCD97 RTS ( disk.asm):01768 * CHECK FOR ITEM SEPARATOR OR TERMINATOR AND EXIT THE INPUT ROUTINE CD98 8122 ( disk.asm):01769 LCD98 CMPA #'" QUOTE? CD9A 2704 ( disk.asm):01770 BEQ LCDA0 YES CD9C 8120 ( disk.asm):01771 CMPA #SPACE SPACE? CD9E 26F2 ( disk.asm):01772 BNE LCD92 NO - EXIT ROUTINE CDA0 8D2E ( disk.asm):01773 LCDA0 BSR LCDD0 GET A CHARACTER FROM CONSOLE IN CDA2 26EE ( disk.asm):01774 BNE LCD92 EXIT ROUTINE IF BUFFER EMPTY CDA4 8120 ( disk.asm):01775 CMPA #SPACE SPACE? CDA6 27F8 ( disk.asm):01776 BEQ LCDA0 YES - GET ANOTHER CHARACTER CDA8 812C ( disk.asm):01777 CMPA #', COMMA (ITEM SEPARATOR)? CDAA 27E6 ( disk.asm):01778 BEQ LCD92 YES - EXIT ROUTINE CDAC 810D ( disk.asm):01779 LCDAC CMPA #CR CARRIAGE RETURN? CDAE 2608 ( disk.asm):01780 BNE LCDB8 NO CDB0 8D1E ( disk.asm):01781 LCDB0 BSR LCDD0 GET A CHARACTER FROM CONSOLE IN CDB2 26DE ( disk.asm):01782 BNE LCD92 EXIT ROUTINE IF BUFFER EMPTY CDB4 810A ( disk.asm):01783 CMPA #LF LINE FEED? TREAT CR,LF AS A CR CDB6 27DA ( disk.asm):01784 BEQ LCD92 YES - EXIT ROUTINE CDB8 8D1C ( disk.asm):01785 LCDB8 BSR LCDD6 BACK UP PTR INPUT POINTER ONE CDBA 20D6 ( disk.asm):01786 BRA LCD92 EXIT ROUTINE CDBC 8D12 ( disk.asm):01787 LCDBC BSR LCDD0 GET A CHAR FROM INPUT BUFFER - RETURN IN ACCA CDBE 2715 ( disk.asm):01788 BEQ LCDD5 RETURN IF BUFFER NOT EMPTY CDC0 BDC744 ( disk.asm):01789 JSR >LC744 POINT X TO START OF FILE BUFFER CDC3 E600 ( disk.asm):01790 LDB FCBTYP,X GET FILE TYPE CDC5 C140 ( disk.asm):01791 CMPB #RANFIL IS IT RANDOM FILE TYPE? CDC7 1026F587 ( disk.asm):01792 LBNE LC352 'INPUT PAST END OF FILE’ ERROR IF NOT RANDOM CDCB C64A ( disk.asm):01793 LCDCB LDB #2*37 'WRITE/INPUT PAST END OF RECORD’ ERROR IF RANDOM CDCD 7EAC46 ( disk.asm):01794 JMP >LAC46 JUMP TO THE ERROR HANDLER CDD0 BDA176 ( disk.asm):01795 LCDD0 JSR >LA176 GET A CHAR FROM INPUT BUFFER CDD3 0D70 ( disk.asm):01796 TST CINBFL SET FLAGS ACCORDING TO CONSOLE INPUT FLAG CDD5 39 ( disk.asm):01797 LCDD5 RTS ( disk.asm):01798 * MOVE THE INPUT POINTER BACK ONE (DISK FILE) CDD6 3414 ( disk.asm):01799 LCDD6 PSHS X,B SAVE REGISTERS ON STACK CDD8 BDC744 ( disk.asm):01800 JSR >LC744 POINT X TO PROPER FCB CDDB E600 ( disk.asm):01801 LDB FCBTYP,X GET FILE TYPE OF THIS FCB CDDD C140 ( disk.asm):01802 CMPB #RANFIL IS IT A RANDOM FILE? CDDF 260B ( disk.asm):01803 BNE LCDEC BRANCH IF NOT A RANDOM FILE CDE1 EC8815 ( disk.asm):01804 LDD FCBGET,X *GRAB THE RANDOM FILE 'GET' POINTER, CDE4 830001 ( disk.asm):01805 SUBD #$0001 *MOVE IT BACK ONE AND RESTORE IT CDE7 ED8815 ( disk.asm):01806 STD FCBGET,X * CDEA 3594 ( disk.asm):01807 PULS B,X,PC RESTORE REGISTERS AND RETURN CDEC A78811 ( disk.asm):01808 LCDEC STA FCBCDT,X SAVE THE CHARACTER IN THE CACHE CDEF 638810 ( disk.asm):01809 COM FCBCFL,X SET THE CACHE FLAG TO $FF - DATA IN CACHE CDF2 3594 ( disk.asm):01810 PULS B,X,PC RESTORE REGISTERS AND RETURN ( disk.asm):01811 * CVN COMMAND CDF4 BDB654 ( disk.asm):01812 CVN JSR >LB654 GET LENGTH AND ADDRESS OF STRING CDF7 C105 ( disk.asm):01813 CMPB #$05 FIVE BYTES IN A FLOATING POINT NUMBER CDF9 1025E64D ( disk.asm):01814 LBCS LB44A 'FC' ERROR IF <> 5 BYTES CDFD 0F06 ( disk.asm):01815 CLR VALTYP SET VARIABLE TYPE TO NUMERIC CDFF 7EBC14 ( disk.asm):01816 JMP >LBC14 COPY A PACKED FP NUMBER FROM (X) TO FPA0 ( disk.asm):01817 * MKN$ COMMAND CE02 BDB143 ( disk.asm):01818 MKN JSR >LB143 'TM' ERROR IF VALTYP=STRING CE05 C605 ( disk.asm):01819 LDB #$05 FIVE BYTES IN A FLOATING POINT NUMBER CE07 BDB50F ( disk.asm):01820 JSR >LB50F RESERVE FIVE BYTES IN STRING SPACE CE0A BDBC35 ( disk.asm):01821 JSR >LBC35 PACK FPA0 AND STORE IT IN STRING SPACE CE0D 7EB69B ( disk.asm):01822 JMP >LB69B SAVE STRING DESCRIPTOR ON STRING STACK ( disk.asm):01823 * LOC COMMAND CE10 8D07 ( disk.asm):01824 LOC BSR LCE19 POINT X TO FILE BUFFER CE12 EC07 ( disk.asm):01825 LDD FCBREC,X GET RECORD NUMBER (RANDOM FILE) OR SECTOR CTR (SEQUENTIAL) CE14 DD52 ( disk.asm):01826 LCE14 STD FPA0+2 *SAVE ACCD IN BOTTOM 2 BYTES OF FPA0 AND CE16 7E880E ( disk.asm):01827 JMP >L880E *CONVERT TO FLOATING POINT NUMBER ( disk.asm):01828 * STRIP A DEVICE NUMBER FROM A BASIC STATEMENT, SET PRINT ( disk.asm):01829 * PARAMETERS ACCORDING TO IT - ERROR IF FILE NOT ( disk.asm):01830 * OPEN. RETURN WITH (X) POINTING TO THAT FILE'S FCB CE19 966F ( disk.asm):01831 LCE19 LDA DEVNUM * GET CURRENT DEVICE NUMBER AND CE1B 3402 ( disk.asm):01832 PSHS A * SAVE IT ON THE STACK CE1D BDB143 ( disk.asm):01833 JSR >LB143 'TM' ERROR IF VALTYP=STRING CE20 BDA5AE ( disk.asm):01834 JSR >LA5AE CHECK FOR VALID DEVICE NUMBER/SET PRINT PARAMETERS CE23 0D6F ( disk.asm):01835 TST DEVNUM * CHECK DEVICE NUMBER CE25 102FE621 ( disk.asm):01836 LBLE LB44A * BRANCH IF NOT DISK FILE 'ILLEGAL FUNCTION CALL' CE29 BDC744 ( disk.asm):01837 JSR >LC744 POINT (X) TO FILE BUFFER CE2C 3502 ( disk.asm):01838 PULS A * GET OLD DEVICE NUMBER OFF OF THE STACK AND CE2E 976F ( disk.asm):01839 STA DEVNUM * SAVE IT AS DEVICE NUMBER CE30 6D00 ( disk.asm):01840 TST FCBTYP,X IS FILE OPEN? CE32 1027D5C5 ( disk.asm):01841 LBEQ LA3FB 'FILE NOT OPEN' ERROR IF NOT OPEN CE36 39 ( disk.asm):01842 RTS ( disk.asm):01843 * LOF CE37 8DE0 ( disk.asm):01844 LOF BSR LCE19 POINT X TO FILE BUFFER CE39 A601 ( disk.asm):01845 LDA FCBDRV,X * GET DRIVE NUMBER AND SAVE IT CE3B 97EB ( disk.asm):01846 STA DCDRV * IN DSKCON VARIABLE CE3D E602 ( disk.asm):01847 LDB FCBFGR,X GET FIRST GRANULE OF FILE CE3F 3410 ( disk.asm):01848 PSHS X SAVE FCB POINTER ON STACK CE41 BDCD1E ( disk.asm):01849 JSR >LCD1E FIND TOTAL NUMBER OF GRANULES IN THIS FILE CE44 4A ( disk.asm):01850 DECA SUBTRACT THE LAST GRANULE IN THE FILE CE45 C43F ( disk.asm):01851 ANDB #$3F GET NUMBER OF SECTORS USED IN LAST GRANULE CE47 3404 ( disk.asm):01852 PSHS B SAVE NUMBER OF SECTORS IN LAST GRANULE ON STACK CE49 1F89 ( disk.asm):01853 TFR A,B * CONVERT ACCA TO POSITIVE CE4B 4F ( disk.asm):01854 CLRA * 2 BYTE VALUE IN ACCD CE4C BDC779 ( disk.asm):01855 JSR >LC779 MULT NUMBER OF FULL GRANULES BY 9 CE4F EBE0 ( disk.asm):01856 ADDB ,S+ ADD NUMBER SECTORS IN LAST TRACK CE51 8900 ( disk.asm):01857 ADCA #$00 PROPAGATE CARRY TO MS BYTE OF ACCD CE53 3510 ( disk.asm):01858 PULS X GET FCB POINTER BACK CE55 3402 ( disk.asm):01859 PSHS A SAVE ACCA ON STACK CE57 A600 ( disk.asm):01860 LDA FCBTYP,X * GET FILE TYPE OF THIS FCB AND CE59 8140 ( disk.asm):01861 CMPA #RANFIL * CHECK TO SEE IF IT'S A RANDOM FILE CE5B 3502 ( disk.asm):01862 PULS A RESTORE ACCA CE5D 26B5 ( disk.asm):01863 BNE LCE14 IF NOT A RANDOM FILE, THEN THE TOTAL NUMBER OF SECTORS IN THE FILE ( disk.asm):01864 * IS THE LENGTH OF THE FILE ( disk.asm):01865 * CALCULATE LOF FOR A RANDOM FILE - THE LENGTH OF A RANDOM FILE IS THE ( disk.asm):01866 * NUMBER OF RECORDS IN THE FILE. CE5F 3410 ( disk.asm):01867 PSHS X SAVE FCB POINTER ON STACK CE61 938A ( disk.asm):01868 SUBD ZERO SUBTRACT ZERO FROM ACCD (NUMBER OF SECTORS) CE63 2703 ( disk.asm):01869 BEQ LCE68 BRANCH IF ZERO SECTORS CE65 830001 ( disk.asm):01870 SUBD #$0001 SUBTRACT ONE SECTOR - THE LAST SECTOR MAY NOT BE IOOZ USED CE68 8DAA ( disk.asm):01871 LCE68 BSR LCE14 PUT ACCD INTO FPA0 CE6A D64F ( disk.asm):01872 LDB FP0EXP GET EXPONENT OF FPA0 CE6C 2704 ( disk.asm):01873 BEQ LCE72 BRANCH IF FPA0 = 0 CE6E CB08 ( disk.asm):01874 ADDB #$08 * ADD 8 TO EXPONENT (MULTIPLY FPA0 BY CE70 D74F ( disk.asm):01875 STB FP0EXP * 256 BYTES/SECTOR) AND SAVE NEW EXPONENT CE72 BDBC5F ( disk.asm):01876 LCE72 JSR >LBC5F SAVE NUMBER OF BYTES IN FULL SECTORS IN FPA1 CE75 AEE4 ( disk.asm):01877 LDX ,S POINT X TO FCB CE77 EC8813 ( disk.asm):01878 LDD FCBLST,X GET NUMBER OF BYTES IN LAST SECTOR CE7A 847F ( disk.asm):01879 ANDA #$7F MASK OFF THE PRE-SAVED BYTE CE7C 8D96 ( disk.asm):01880 BSR LCE14 PUT NUMBER BYTES IN LAST SECTOR INTO FPA0 CE7E 0F62 ( disk.asm):01881 CLR RESSGN FORCE SUM SIGN = POSITIVE CE80 965C ( disk.asm):01882 LDA FP1EXP * GET EXPONENTS OF FPA0 AND CE82 D64F ( disk.asm):01883 LDB FP0EXP * FPA1 PRIOR TO ADDITION CE84 BDB9C5 ( disk.asm):01884 JSR >LB9C5 ADD NUMBER BYTES IN LAST SECTOR TO NUMBER OF BYTES IN FULL SECTORS CE87 BDBC5F ( disk.asm):01885 JSR >LBC5F SAVE TOTAL NUMBER OF BYTES IN FPA1 CE8A 3510 ( disk.asm):01886 PULS X POINT X TO FCB CE8C EC09 ( disk.asm):01887 LDD FCBRLN,X * GET RECORD LENGTH CE8E 8D84 ( disk.asm):01888 BSR LCE14 * PUT IT INTO FPA0 CE90 0F62 ( disk.asm):01889 CLR RESSGN FORCE QUOTIENT SIGN = POSITIVE CE92 965C ( disk.asm):01890 LDA FP1EXP * GET EXPONENTS OF FPA0 AND CE94 D64F ( disk.asm):01891 LDB FP0EXP * FPA1 PRIOR TO DIVISION CE96 BDBB91 ( disk.asm):01892 JSR >LBB91 DIVIDE TOTAL NUMBER OF BYTES BY NUMBER OF BYTES IN A RECORD CE99 7EBCEE ( disk.asm):01893 JMP INT CONVERT FPA0 TO AN INTEGER ( disk.asm):01894 * FREE COMMAND CE9C BDB143 ( disk.asm):01895 FREE JSR >LB143 * NUMBER TYPE CHECK CE9F BDB70E ( disk.asm):01896 JSR >LB70E *EVALUATE NUMERIC EXPRESSION AND RETURN VALUE IN ACCB CEA2 C103 ( disk.asm):01897 CMPB #$03 ONLY 4 LEGAL DRIVES CEA4 1022D777 ( disk.asm):01898 LBHI LA61F 'DEVICE NUMBER' ERROR IF DRIVE NUMBER IS > 3 CEA8 D7EB ( disk.asm):01899 STB DCDRV SAVE IN DRIVE NUMBER CEAA BDC79D ( disk.asm):01900 JSR >LC79D GET FILE ALLOCATION TABLE AND STORE IN BUFFER CEAD BDC755 ( disk.asm):01901 JSR >LC755 POINT X TO START OF FILE ALLOCATION TABLE BUFFER CEB0 3006 ( disk.asm):01902 LEAX FATCON,X MOVE TO FIRST GRANULE DATA BYTE CEB2 6FE2 ( disk.asm):01903 CLR ,-S SPACE FOR FREE GRANULE COUNTER CEB4 C644 ( disk.asm):01904 LDB #GRANMX GET MAXIMUM NUMBER OF GRANULES CEB6 A680 ( disk.asm):01905 LCEB6 LDA ,X+ GET GRANULE DATA CEB8 43 ( disk.asm):01906 COMA *FREE GRANULES $FF CEB9 2602 ( disk.asm):01907 BNE LCEBD *BRANCH IF NOT FREE CEBB 6CE4 ( disk.asm):01908 INC ,S INCREMENT FREE GRANULE COUNTER CEBD 5A ( disk.asm):01909 LCEBD DECB DECREMENT GRANULE COUNTER CEBE 26F6 ( disk.asm):01910 BNE LCEB6 BRANCH IF NOT DONE CEC0 3504 ( disk.asm):01911 PULS B GET FREE GRANULE COUNTER TO ACCB CEC2 7EB4F3 ( disk.asm):01912 JMP >LB4F3 LOAD ACCB INTO FPA0 ( disk.asm):01913 * DRIVE COMMAND CEC5 BDB70B ( disk.asm):01914 DRIVE JSR EVALEXPB EVALUATE EXPR; RETURN VALUE IN ACCB CEC8 C103 ( disk.asm):01915 CMPB #$03 MAX DRIVE NUMBER = 3 CECA 1022D751 ( disk.asm):01916 LBHI LA61F 'DEVICE #' ERROR IF DRIVE NUMBER > 3 CECE F7095A ( disk.asm):01917 STB DEFDRV SAVE DEFAULT DRIVE NUMBER CED1 39 ( disk.asm):01918 RTS ( disk.asm):01919 * EVALUATE EXPRESSION RAM VECTOR CED2 A664 ( disk.asm):01920 DVEC15 LDA $04,S = CHECK STACKED PRECEDENCE FLAG AND IF IT IS NOT AN END CED4 2613 ( disk.asm):01921 BNE LCEE9 = OF OPERATION, BRANCH TO EXTENDED BASIC'S EXPRESSION EVALUATION ROUTINE CED6 AE65 ( disk.asm):01922 LDX $05,S * CED8 8CAF9A ( disk.asm):01923 CMPX #LAF9A * CEDB 260C ( disk.asm):01924 BNE LCEE9 * CHECK TWO RETURN ADDRESSES BACK ON THE STACK CEDD AE62 ( disk.asm):01925 LDX $02,S * TO SEE IF THE CALL TO EVALUATE EXPRESSION IS CEDF 8CB166 ( disk.asm):01926 CMPX #LB166 * COMING FROM THE 'LET' COMMAND - BRANCH OUT IF CEE2 2605 ( disk.asm):01927 BNE LCEE9 * NOT COMING FROM 'LET' CEE4 8ECEEC ( disk.asm):01928 LDX #LCEEC = IF COMING FROM 'LET', REPLACE THE RETURN ADDR CEE7 AF65 ( disk.asm):01929 STX $05,S = WITH THE DISK BASIC 'LET' MODIFIER ADDRESS CEE9 7E8846 ( disk.asm):01930 LCEE9 JMP XVEC15 EXTENDED BASIC EXPRESSION EVALUATION ( disk.asm):01931 * LET MODIFIER CEEC 3502 ( disk.asm):01932 LCEEC PULS A PULL VARIABLE TYPE OFF OF THE STACK CEEE 46 ( disk.asm):01933 RORA SET CARRY IF SIRING, CLEAR CARRY IF NUMERIC CEEF BDB148 ( disk.asm):01934 JSR >LB148 DO A 'TM' CHECK CEF2 1027ED3D ( disk.asm):01935 LBEQ LBC33 IF NUMERIC VARIABLE, PACK FPA0 INTO VARDES CEF6 9E52 ( disk.asm):01936 LDX FPA0+2 POINT X TO STRING DESCRIPTOR CEF8 EC02 ( disk.asm):01937 LDD $02,X GET ADDRESS OF SIRING CEFA 10830989 ( disk.asm):01938 CMPD #DFLBUF * COMPARE TO START OF RANDOM FILE BUFFERS CEFE 2507 ( disk.asm):01939 BLO LCF07 * AND BRANCH IF LOWER CF00 B3094A ( disk.asm):01940 SUBD FCBADR SUBTRACT OUT THE END OF RANDOM FILE BUFFERS CF03 1025E0AA ( disk.asm):01941 LBCS LAFB1 BRANCH IF STRING STORED IN RANDOM FILE BUFFER - MOVE IT INTO THE STRING SPACE CF07 7EAFA4 ( disk.asm):01942 LCF07 JMP >LAFA4 BRANCH BACK TO BASIC’S 'LET' COMMAND ( disk.asm):01943 *MODIFIER FOR EXBAS COMMAND INTERPRETATION HANDLER CF0A 81CA ( disk.asm):01944 DXCVEC CMPA #$CA TOKEN FOR DLOAD? CF0C 271C ( disk.asm):01945 BEQ LCF2A YES CF0E 81C8 ( disk.asm):01946 CMPA #$C8 TOKEN FOR PMODE? CF10 1026B228 ( disk.asm):01947 LBNE L813C NO ( disk.asm):01948 * DISK BASIC MODIFIER FOR PMODE - ALLOWS FOR THE RAM THE DOS USES CF14 9D9F ( disk.asm):01949 JSR GETNCH GET NEXT CHARACTER FROM BASIC CF16 812C ( disk.asm):01950 CMPA #', CHECK FOR COMMA CF18 1027C734 ( disk.asm):01951 LBEQ L9650 BRANCH IF COMMA CF1C BDB70B ( disk.asm):01952 JSR EVALEXPB EVALUATE EXPRESSION; RETURN VALUE IN ACCB CF1F C104 ( disk.asm):01953 CMPB #$04 CHECK FOR PMODE 4 CF21 1022E525 ( disk.asm):01954 LBHI LB44A 'FC' ERROR IF PMODE > 4 CF25 96BC ( disk.asm):01955 LDA GRPRAM NUMBER BLOCKS BEFORE GRAPHICS PAGES CF27 7E962E ( disk.asm):01956 JMP >L962E JUMP TO EXEAS' PMODE COMMAND ( disk.asm):01957 * DISK BASIC DLOAD MODIFIER CF2A BDA429 ( disk.asm):01958 LCF2A JSR >LA429 CLOSE FILES CF2D 9D9F ( disk.asm):01959 JSR GETNCH GET NEXT CHARACTER FROM BASIC CF2F 7E8C1B ( disk.asm):01960 JMP >L8C1B JUMP TO EXEAS' DLOAD CF32 C134 ( disk.asm):01961 DXIVEC CMPB #($9A-$80)*2 MODIFIED TOKEN FOR POS CF34 1026B230 ( disk.asm):01962 LBNE L8168 IF NOT POS, GO TO EXBAS SECONDARY COMM HANDLER CF38 BDB262 ( disk.asm):01963 JSR >LB262 SYNTAX CHECK FOR '(' AND EVALUATE EXPRESSION CF3B 966F ( disk.asm):01964 LDA DEVNUM * GET DEVICE NUMBER AND CF3D 3402 ( disk.asm):01965 PSHS A * SAVE IT ON STACK CF3F BDA5AE ( disk.asm):01966 JSR >LA5AE EVALUATE DEVICE NUMBER CF42 BDA406 ( disk.asm):01967 JSR >LA406 TEST DEVICE NUMBER CF45 0D6F ( disk.asm):01968 TST DEVNUM * CHECK DEVICE NUMBER AND BRANCH CF47 2F13 ( disk.asm):01969 BLE LCF5C * IF NOT A DISK FILE CF49 BDC744 ( disk.asm):01970 JSR >LC744 POINT X TO FCB CF4C E600 ( disk.asm):01971 LDB FCBTYP,X GET FILE TYPE CF4E C140 ( disk.asm):01972 CMPB #RANFIL DIRECT/RANDOM FILE? CF50 260A ( disk.asm):01973 BNE LCF5C BRANCH IF NOT A RANDOM FILE CF52 3502 ( disk.asm):01974 PULS A * RESTORE DEVICE NUMBER CF54 976F ( disk.asm):01975 STA DEVNUM * CF56 EC8817 ( disk.asm):01976 LDD FCBPUT,X =GRAB THE 'PUT' DATA ITEM COUNTER AND CONVERT CF59 7EB4F4 ( disk.asm):01977 JMP GIVABF =IT TO A FLOATING POINT NUMBER CF5C BDA35F ( disk.asm):01978 LCF5C JSR >LA35F SET PRINT PARAMETERS CF5F 3502 ( disk.asm):01979 PULS A * RESTORE DEVICE NUMBER CF61 976F ( disk.asm):01980 STA DEVNUM * CF63 D66C ( disk.asm):01981 LDB DEVPOS =GET PRINT POSITION AND CF65 7EB4F3 ( disk.asm):01982 JMP >LB4F3 =CONVERT IT TO FLOATING POINT NUMBER IN FPA0 ( disk.asm):01983 * SAVEM COMMAND CF68 9D9F ( disk.asm):01984 LCF68 JSR GETNCH GET NEXT INPUT CHARACTER CF6A 8D4F ( disk.asm):01985 BSR LCFBB GET FILENAME, ETC. CF6C BD836C ( disk.asm):01986 JSR >L836C EVALUATE EXPRESSION, PUT II (2 BYTES) ON STACK CF6F BD836C ( disk.asm):01987 JSR >L836C DITTO CF72 AC62 ( disk.asm):01988 CMPX $02,S COMPARE END ADDRESS TO START ADDRESS CF74 1025E4D2 ( disk.asm):01989 LBCS LB44A IF START > END, THEN 'ILLEGAL FUNCTION CALL' CF78 BD836C ( disk.asm):01990 JSR >L836C EVAL EXPRESSION (TRANSFER ADDRESS), PUT ON STACK CF7B BDA5C7 ( disk.asm):01991 JSR >LA5C7 SYNTAX ERROR IF ANY MORE CHARS ON THIS LINE CF7E CC0200 ( disk.asm):01992 LDD #$0200 * FILE TYPE=2, ASCII FLAG = CRUNCHED (0) CF81 FD0957 ( disk.asm):01993 STD DFLTYP * CF84 BDCA04 ( disk.asm):01994 JSR >LCA04 GET NEXT UNOPEN FILE AND INITIALIZE FCB CF87 4F ( disk.asm):01995 CLRA *ZERO FLAG - FIRST BYTE OF PREAMBLE CF88 8D2B ( disk.asm):01996 BSR LCFB5 *WRITE A BYTE TO BUFFER CF8A EC62 ( disk.asm):01997 LDD $02,S GET END ADDRESS CF8C A364 ( disk.asm):01998 SUBD $04,S SUBTRACT THE START ADDRESS CF8E C30001 ( disk.asm):01999 ADDD #$0001 THE SAVED DATA BLOCK WILL INCLUDE BOTH THE FIRST AND LAST BYTES CF91 1F02 ( disk.asm):02000 TFR D,Y SAVE LENGTH IN Y CF93 8D1E ( disk.asm):02001 BSR LCFB3 WRITE FILE LENGTH TO BUFFER - FIRST ARGUMENT OF PREAMBLE CF95 EC64 ( disk.asm):02002 LDD $04,S GET THE START ADDRESS CF97 8D1A ( disk.asm):02003 BSR LCFB3 WRITE OUT THE START ADDRESS - SECOND PREAMBLE ARGUMENT CF99 AE64 ( disk.asm):02004 LDX $04,S GET START ADDRESS CF9B A680 ( disk.asm):02005 LCF9B LDA ,X+ GRAB A BYTE CF9D BDCC24 ( disk.asm):02006 JSR >LCC24 WRITE IT OUT CFA0 313F ( disk.asm):02007 LEAY -1,Y DECREMENT BYTE COUNTER CFA2 26F7 ( disk.asm):02008 BNE LCF9B BRANCH IF ALL BYTES NOT DONE CFA4 86FF ( disk.asm):02009 LDA #$FF FIRST BYTE OF POSTAMBLE CFA6 8D0D ( disk.asm):02010 BSR LCFB5 WRITE IT OUT - EOF RECORD CFA8 4F ( disk.asm):02011 CLRA * FIRST ARGUMENT OF POSTAMBLE IS CFA9 5F ( disk.asm):02012 CLRB * A DUMMY - ZERO VALUE CFAA 8D07 ( disk.asm):02013 BSR LCFB3 WRITE OUT POSTAMBLE FIRST ARGUMENT CFAC 3536 ( disk.asm):02014 PULS A,B,X,Y GET CONTROL ADDRESSES FROM THE STACK CFAE 8D03 ( disk.asm):02015 BSR LCFB3 WRITE OUT THE TRANSFER ADDRESS - 2ND ARGUMENT CFB0 7EA42D ( disk.asm):02016 JMP >LA42D GO CLOSE ALL FILES ( disk.asm):02017 * WRITE ACCD TO THE BUFFER CFB3 8D00 ( disk.asm):02018 LCFB3 BSR LCFB5 WRITE ACCA TO BUFFER, THEN SWAP ACCA,ACCB CFB5 BDCC24 ( disk.asm):02019 LCFB5 JSR >LCC24 WRITE ACCA TO BUFFER CFB8 1E89 ( disk.asm):02020 EXG A,B SWAP ACCA,ACCB CFBA 39 ( disk.asm):02021 RTS CFBB 8EC2AF ( disk.asm):02022 LCFBB LDX #BINEXT POINT TO .BIN EXTENSION CFBE 7EC938 ( disk.asm):02023 JMP >LC938 GET FILENAME, ETC. ( disk.asm):02024 * LOADM COMMAND CFC1 9D9F ( disk.asm):02025 LCFC1 JSR GETNCH GET NEXT INPUT CHARACTER CFC3 8DF6 ( disk.asm):02026 BSR LCFBB GET FILENAME, ETC. CFC5 BDCA07 ( disk.asm):02027 JSR >LCA07 OPEN NEXT AVAILABLE FILE FOR INPUT CFC8 FC0957 ( disk.asm):02028 LDD DFLTYP GET FILE TYPE AND ASCII FLAG CFCB 830200 ( disk.asm):02029 SUBD #$0200 FOR LOADM FILE: TYPE=2, ASCII FLAG=0 CFCE 1026D644 ( disk.asm):02030 LBNE LA616 'BAD FILE MODE' ERROR CFD2 9E8A ( disk.asm):02031 LDX ZERO ZERO OUT X REG - DEFAULT VALUE OF OFFSET CFD4 9DA5 ( disk.asm):02032 JSR GETCCH GET CURRENT CHARACTER FROM BASIC CFD6 2706 ( disk.asm):02033 BEQ LCFDE BRANCH IF END OF LINE - NO OFFSET CFD8 BDB26D ( disk.asm):02034 JSR SYNCOMMA SYNTAX CHECK FOR COMMA CFDB BDB73D ( disk.asm):02035 JSR >LB73D EVALUATE EXPRESSION CFDE 9FD3 ( disk.asm):02036 LCFDE STX VD3 STORE OFFSET IN VD3 CFE0 BDA5C7 ( disk.asm):02037 JSR >LA5C7 SYNTAX ERROR IF OTHER CHARACTERS ON LINE ( disk.asm):02038 * GET PREAMBLE/POSTAMBLE CFE3 BDCDBC ( disk.asm):02039 LCFE3 JSR >LCDBC GET FIRST BYTE CFE6 3402 ( disk.asm):02040 PSHS A SAVE IT ON THE STACK CFE8 8D29 ( disk.asm):02041 BSR LD013 GET FIRST ARGUMENT CFEA 1F02 ( disk.asm):02042 TFR D,Y SAVE IT IN Y CFEC 8D25 ( disk.asm):02043 BSR LD013 GET THE SECOND ARGUMENT CFEE D3D3 ( disk.asm):02044 ADDD VD3 ADD IT TO THE OFFSET CFF0 DD9D ( disk.asm):02045 STD EXECJP STORE IT IN THE JUMP ADDRESS OF THE EXEC COMMAND CFF2 1F01 ( disk.asm):02046 TFR D,X SAVE IT IN X CFF4 A6E0 ( disk.asm):02047 LDA ,S+ GET THE FIRST BYTE OFF OF THE STACK CFF6 1026D433 ( disk.asm):02048 LBNE LA42D CLOSE FILE IF POSTAMBLE (EOF) ( disk.asm):02049 * GET RECORD BYTE(S) CFFA BDC5C4 ( disk.asm):02050 LCFFA JSR >LC5C4 GET BYTE FROM BUFFER CFFD D670 ( disk.asm):02051 LDB CINBFL GET STATUS OF CONSOLE IN BUFFER CFFF 2703 ( disk.asm):02052 BEQ LD004 BRANCH IF BUFFER NOT EMPTY D001 7EC352 ( disk.asm):02053 JMP >LC352 'INPUT PAST END OF FILE' ERROR D004 A784 ( disk.asm):02054 LD004 STA ,X STORE BYTE IN MEMORY D006 A180 ( disk.asm):02055 CMPA ,X+ *TEST TO SEE IF IT STORED PROPERLY AND D008 2703 ( disk.asm):02056 BEQ LD00D *BRANCH IF PROPER STORE (NOT IN ROM OR BAD RAM) D00A 7ED709 ( disk.asm):02057 JMP >LD709 'I/O ERROR' IF BAD STORE D00D 313F ( disk.asm):02058 LD00D LEAY -1,Y DECREMENT BYTE COUNT D00F 26E9 ( disk.asm):02059 BNE LCFFA GET NEXT BYTE IF NOT DONE D011 20D0 ( disk.asm):02060 BRA LCFE3 READ ANOTHER PRE/POST AMBLE ( disk.asm):02061 * READ TWO BYTES FROM BUFFER - RETURN THEM IN ACCD D013 8D00 ( disk.asm):02062 LD013 BSR LD015 READ A BYTE, SAVE IT IN ACCB D015 BDCDBC ( disk.asm):02063 LD015 JSR >LCDBC GET A CHARACTER FROM INPUT BUFFER, RETURN IT IN ACCA D018 1E89 ( disk.asm):02064 EXG A,B SWAP ACCA,ACCB D01A 39 ( disk.asm):02065 RTS ( disk.asm):02066 * RENAME COMMAND D01B 9EA6 ( disk.asm):02067 RENAME LDX CHARAD * SAVE CURRENT INPUT POINTER D01D 3410 ( disk.asm):02068 PSHS X * ON THE STACK D01F 8D35 ( disk.asm):02069 BSR LD056 GET FILENAME OF SOURCE FILE D021 96EB ( disk.asm):02070 LDA DCDRV * SAVE DRIVE NUMBER D023 3402 ( disk.asm):02071 PSHS A * ON THE STACK D025 8D2A ( disk.asm):02072 BSR LD051 SYNTAX CHECK FOR 'TO' AND GET NEW FILENAME D027 3502 ( disk.asm):02073 PULS A GET SOURCE DRIVE NUMBER D029 91EB ( disk.asm):02074 CMPA DCDRV COMPARE TO NEW FILE DRIVE NUMBER D02B 1026E41B ( disk.asm):02075 LBNE LB44A 'FC' ERROR IF FlIES ON DIFFERENT DRIVES D02F 8D28 ( disk.asm):02076 BSR LD059 VERIFY THAT NEW FILE DOES NOT ALREADY EXIST D031 3510 ( disk.asm):02077 PULS X * RESTORE INPUT POINTER D033 9FA6 ( disk.asm):02078 STX CHARAD * D035 8D1F ( disk.asm):02079 BSR LD056 GET SOURCE FILENAME AGAIN D037 BDC68C ( disk.asm):02080 JSR >LC68C SCAN DIRECTORY FOR SOURCE FILENAME D03A BDC6E5 ( disk.asm):02081 JSR >LC6E5 'NE' ERROR IF NOT FOUND D03D 8D12 ( disk.asm):02082 BSR LD051 SYNTAX CHECK FOR 'TO' AND GET NEW FILENAME D03F 8E094C ( disk.asm):02083 LDX #DNAMBF POINT X TO FILENAME D042 FE0974 ( disk.asm):02084 LDU V974 POINT U TO DIRECTORY ENTRY OF SOURCE FILE D045 C60B ( disk.asm):02085 LDB #$0B 11 CHARACTERS IN FILENAME AND EXTENSION D047 BDA59A ( disk.asm):02086 JSR >LA59A COPY NEW FILENAME TO SOURCE FILE DIRECTORY RAM IMAGE D04A C603 ( disk.asm):02087 LDB #$03 * GET WRITE OP CODE AND D04C D7EA ( disk.asm):02088 STB DCOPC * SAVE IN DSKCON VARIABLE D04E 7ED6F2 ( disk.asm):02089 JMP >LD6F2 WRITE NEW DIRECTORY SECTOR ( disk.asm):02090 * DO A SYNTAX CHECK FOR 'TO’ AND STRIP A FILENAME FROM BASIC D051 C6A5 ( disk.asm):02091 LD051 LDB #$A5 'TO' TOKEN D053 BDB26F ( disk.asm):02092 JSR >LB26F SYNTAX CHECK FOR 'TO' D056 7EC935 ( disk.asm):02093 LD056 JMP >LC935 GET FILENAME FROM BASIC D059 BDC68C ( disk.asm):02094 LD059 JSR >LC68C SCAN DIRECTORY FOR FILENAME D05C C642 ( disk.asm):02095 LDB #33*2 'FILE ALREADY EXISTS' ERROR D05E 7D0973 ( disk.asm):02096 TST V973 CHECK FOR A MATCH D061 1026DBE1 ( disk.asm):02097 LBNE LAC46 'AE' ERROR IF FILE IN DIRECTORY D065 39 ( disk.asm):02098 RTS ( disk.asm):02099 * WRITE COMMAND D066 1027E8EE ( disk.asm):02100 WRITE LBEQ LB958 PRINT CARRIAGE RETURN TO CONSOLE OUT IF END OF LINE D06A 8D03 ( disk.asm):02101 BSR LD06F GO WRITE AN ITEM LIST D06C 0F6F ( disk.asm):02102 CLR DEVNUM SET DEVICE NUMBER TO SCREEN D06E 39 ( disk.asm):02103 LD06E RTS D06F 8123 ( disk.asm):02104 LD06F CMPA #'# CHECK FOR DEVICE NUMBER FLAG D071 260F ( disk.asm):02105 BNE LD082 DEFAULT TO CURRENT DEVICE NUMBER IF NONE GIVEN D073 BDA5A5 ( disk.asm):02106 JSR >LA5A5 SET DEVICE NUMBER; CHECK VALIDITY D076 BDA406 ( disk.asm):02107 JSR >LA406 MAKE SURE SELECTED FILE IS AN OUTPUT FILE D079 9DA5 ( disk.asm):02108 JSR GETCCH GET CURRENT INPUT CHARACTER D07B 1027E8D9 ( disk.asm):02109 LBEQ LB958 PRINT CR TO CONSOLE OUT IF END OF LINE D07F BDB26D ( disk.asm):02110 LD07F JSR SYNCOMMA SYNTAX CHECK FOR COMMA D082 BDB156 ( disk.asm):02111 LD082 JSR >LB156 EVALUATE EXPRESSION D085 9606 ( disk.asm):02112 LDA VALTYP GET VARIABLE TYPE D087 261E ( disk.asm):02113 BNE LD0A7 BRANCH IF STRING D089 BDBDD9 ( disk.asm):02114 JSR >LBDD9 CONVERT FP NUMBER TO ASCII STRING D08C BDB516 ( disk.asm):02115 JSR >LB516 PUT ON TEMPORARY STRING STACK D08F BDB99F ( disk.asm):02116 JSR >LB99F PRINT STRING TO CONSOLE OUT ( disk.asm):02117 * PRINT ITEM SEPARATOR TO CONSOLE OUT D092 9DA5 ( disk.asm):02118 LD092 JSR GETCCH GET CURRENT CHARACTER D094 1027E8C0 ( disk.asm):02119 LBEQ LB958 PUT CR TO CONSOLE OUT IF END OF LINE D098 862C ( disk.asm):02120 LDA #', COMMA: NON-CASSETTE SEPARATOR D09A BDA35F ( disk.asm):02121 JSR >LA35F SET PRINT PARAMETERS D09D 0D6E ( disk.asm):02122 TST PRTDEV * GET CONSOLE PRINT DEVICE AND D09F 2702 ( disk.asm):02123 BEQ LD0A3 * BRANCH IF NOT CASSETTE D0A1 860D ( disk.asm):02124 LDA #CR GET CARRIAGE RETURN - CASSETTE ITEM SEPARATOR D0A3 8D14 ( disk.asm):02125 LD0A3 BSR LD0B9 SEND SEPARATOR TO CONSOLE OUT D0A5 20D8 ( disk.asm):02126 BRA LD07F GET NEXT ITEM ( disk.asm):02127 * PRINT A STRING TO CONSOLE OUT D0A7 8D07 ( disk.asm):02128 LD0A7 BSR LD0B0 PRINT LEADING STRING DELIMITER (") D0A9 BDB99F ( disk.asm):02129 JSR >LB99F PRINT STRING TO CONSOLE OUT D0AC 8D02 ( disk.asm):02130 BSR LD0B0 PRINT ENDING STRING DELIMITER (") D0AE 20E2 ( disk.asm):02131 BRA LD092 GO PRINT SEPARATOR ( disk.asm):02132 * PRINT STRING DELIMITER (") TO CONSOLE OUT D0B0 BDA35F ( disk.asm):02133 LD0B0 JSR >LA35F SET PRINT PARAMETERS D0B3 0D6E ( disk.asm):02134 TST PRTDEV * GET CONSOLE PRINT DEVICE AND D0B5 26B7 ( disk.asm):02135 BNE LD06E * RETURN IF CASSETTE D0B7 8622 ( disk.asm):02136 LDA #'" QUOTE: NON-CASSETTE STRING DELIMITER D0B9 7EA282 ( disk.asm):02137 LD0B9 JMP PUTCHR SEND TO CONSOLE OUT ( disk.asm):02138 * FIELD COMMAND D0BC BDC82E ( disk.asm):02139 FIELD JSR >LC82E EVALUATE DEVICE NUMBER & VERIFY RANDOM FILE OPEN D0BF 4F ( disk.asm):02140 CLRA * D0C0 5F ( disk.asm):02141 CLRB * CLEAR TOTAL FIELD LENGTH COUNTER D0C1 3416 ( disk.asm):02142 PSHS X,B,A SAVE FCB POINTER & INITIALIZE TOTAL FIELD LENGTH TO ZERO D0C3 9DA5 ( disk.asm):02143 LD0C3 JSR GETCCH GET CURRENT INPUT CHARACTER D0C5 2602 ( disk.asm):02144 BNE LD0C9 BRANCH IF NOT END OF LINE D0C7 3596 ( disk.asm):02145 PULS A,B,X,PC CLEAN UP STACK AND RETURN D0C9 BDB738 ( disk.asm):02146 LD0C9 JSR >LB738 SYNTAX CHECK FOR COMMA, EVALUATE EXPRESSION D0CC 3414 ( disk.asm):02147 PSHS X,B SAVE FIELD LENGTH (ACCB) ON STACK, X IS A DUMMY WHICH WILL RESERVE 2 BYTES FOR THE ADDRESS WHICH WILL BE CALCULATED BELOW ( disk.asm):02148 * AT THIS POINT THE STACK WILL HAVE THE FOLLOWING INFORMATION ON IT: ( disk.asm):02149 * ,S = FIELD LENGTH 1 2,S = RANDOM FILE BUFFER ADDRESS ( disk.asm):02150 * 3 4,S = TOTAL FIELD LENGTH 5 6,S = FCD POINTER D0CE 4F ( disk.asm):02151 CLRA CLEAR MS BYTE D0CF E363 ( disk.asm):02152 ADDD $03,S ADD FIELD LENGTH TO TOTAL FIELD LENGTH COUNTER D0D1 2507 ( disk.asm):02153 BLO LD0DA 'FO' ERROR IF SUM > $FFFF D0D3 AE65 ( disk.asm):02154 LDX $05,S POINT X TO FCB D0D5 10A309 ( disk.asm):02155 CMPD FCBRLN,X * COMPARE TO RECORD LENGTH & BRANCH IF D0D8 2305 ( disk.asm):02156 BLS LD0DF *TOTAL FIELD LENGTH < RECORD LENGTH D0DA C644 ( disk.asm):02157 LD0DA LDB #34*2 'FIELD OVERFLOW' ERROR D0DC 7EAC46 ( disk.asm):02158 JMP >LAC46 JUMP TO ERROR DRIVER D0DF EE63 ( disk.asm):02159 LD0DF LDU $03,S LOAD U WITH OLD TOTAL LENGTH OF ALL FIELDS D0E1 ED63 ( disk.asm):02160 STD $03,S SAVE NEW TOTAL FIELD LENGTH D0E3 EC0B ( disk.asm):02161 LDD FCBBUF,X POINT ACCD TO START OF RANDOM FILE BUFFER D0E5 33CB ( disk.asm):02162 LEAU D,U *POINT U TO THIS FIELD'S SLOT IN THE RANDOM D0E7 EF61 ( disk.asm):02163 STU $01,S *FILE BUFFER AND SAVE IT ON THE STACK D0E9 C6FF ( disk.asm):02164 LDB #$FF SECONDARY TOKEN D0EB BDB26F ( disk.asm):02165 JSR >LB26F SYNTAX CHECK FOR SECONDARY TOKEN D0EE C6A7 ( disk.asm):02166 LDB #$A7 'AS' TOKEN D0F0 BDB26F ( disk.asm):02167 JSR >LB26F SYNTAX CHECK FOR 'AS' TOKEN D0F3 BDB357 ( disk.asm):02168 JSR >LB357 EVALUATE VARIABLE D0F6 BDB146 ( disk.asm):02169 JSR >LB146 'TM' ERROR IF NUMERIC VARIABLE D0F9 3544 ( disk.asm):02170 PULS B,U * PULL STRING ADDRESS AND LENGTH D0FB E784 ( disk.asm):02171 STB ,X * OFF OF THE STACK AND SAVE THEM D0FD EF02 ( disk.asm):02172 STU $02,X * IN STRING DESCRIPTOR D0FF 20C2 ( disk.asm):02173 BRA LD0C3 CHECK FOR ANOTHER FIELD SPECIFICATION ( disk.asm):02174 * RSET COMMAND D101 86 ( disk.asm):02175 RSET FCB $86 SKIP ONE BYTE (THROWN AWAY LDA INSTRUCTION) ( disk.asm):02176 * LSET COMMAND D102 4F ( disk.asm):02177 LSET CLRA LSET FLAG = 0 D103 3402 ( disk.asm):02178 PSHS A SAVE RSET($4F),LSET(00) FLAG ON THE STACK D105 BDB357 ( disk.asm):02179 JSR >LB357 EVALUATE FIELD STRING VARIABLE D108 BDB146 ( disk.asm):02180 JSR >LB146 'TM' ERROR IF NUMERIC VARIABLE D10B 3410 ( disk.asm):02181 PSHS X SAVE STRING DESCRIPTOR ON STACK D10D AE02 ( disk.asm):02182 LDX $02,X POINT X TO ADDRESS OF STRING D10F 8C0989 ( disk.asm):02183 CMPX #DFLBUF * COMPARE STRING ADDRESS TO START OF RANDOM D112 2505 ( disk.asm):02184 BLO LD119 * FILE BUFFER; 'SE' ERROR IF < RANDOM FILE BUFFER D114 BC094A ( disk.asm):02185 CMPX FCBADR = COMPARE STRING ADDRESS TO TOP OF RANDOM FILE BUFFER D117 2505 ( disk.asm):02186 BLO LD11E = AREA - BRANCH IF STRING IN RANDOM FILE BUFFER D119 C646 ( disk.asm):02187 LD119 LDB #2*35 'SET TO NON-FIELDED STRING' ERROR D11B 7EAC46 ( disk.asm):02188 JMP >LAC46 JUMP TO ERROR HANDLER D11E C6B3 ( disk.asm):02189 LD11E LDB #$B3 * D120 BDB26F ( disk.asm):02190 JSR >LB26F * SYNTAX CHECK FOR '=' TOKEN D123 BD8748 ( disk.asm):02191 JSR >L8748 =EVALUATE DATA STRING EXPRESSION; RETURN WITH X ( disk.asm):02192 * =POINTING TO STRING; ACCB = LENGTH D126 3520 ( disk.asm):02193 PULS Y POINT Y TO FIELD STRING DESCRIPTOR D128 A6A4 ( disk.asm):02194 LDA ,Y GET LENGTH OF FIELD STRING D12A 272E ( disk.asm):02195 BEQ LD15A RETURN IF NULL STRING D12C 3404 ( disk.asm):02196 PSHS B SAVE LENGTH OF DATA STRING ON STACK D12E C620 ( disk.asm):02197 LDB #SPACE PREPARE TO FILL DATA STRING WITH BLANKS D130 EE22 ( disk.asm):02198 LDU $02,Y POINT U TO FIELD STRING ADDRESS ( disk.asm):02199 * FILL THE FIELDED STRING WITH BLANKS D132 E7C0 ( disk.asm):02200 LD132 STB ,U+ STORE A SPACE IN FIELDED STRING D134 4A ( disk.asm):02201 DECA DECREMENT LENGTH COUNTER D135 26FB ( disk.asm):02202 BNE LD132 KEEP FILLING W/SPACES IF NOT DONE D137 E6E0 ( disk.asm):02203 LDB ,S+ *GET THE LENGTH OF THE DATA STRING AND D139 271F ( disk.asm):02204 BEQ LD15A *RETURN IF IT IS NULL (ZERO) D13B E1A4 ( disk.asm):02205 CMPB ,Y =COMPARE LENGTH OF DATA STRING TO LENGTH OF FIELD D13D 2504 ( disk.asm):02206 BLO LD143 =STRING, BRANCH IF FIELD STRING > DATA STRING D13F E6A4 ( disk.asm):02207 LDB ,Y *GET THE LENGTH OF THE FIELD STRING AND FORCE THE D141 6FE4 ( disk.asm):02208 CLR ,S *RSET/LSET FLAG TO LSET (0) IF DATA STRING LENGTH IS ( disk.asm):02209 * *>= THE FIELD STRING LENGTH. THIS WILL CAUSE THE RIGHT ( disk.asm):02210 * *SIDE OF THE DATA STRING TO BE TRUNCATED D143 EE22 ( disk.asm):02211 LD143 LDU $02,Y LOAD U WITH THE ADDRESS OF THE FIELD STRING D145 6DE0 ( disk.asm):02212 TST ,S+ * GET THE RSET/LSET FLAG FROM THE STACK D147 270E ( disk.asm):02213 BEQ LD157 * AND BRANCH IF LSET ( disk.asm):02214 * RSET ROUTINE D149 3404 ( disk.asm):02215 PSHS B SAVE THE NUMBER OF BYTES TO MOVE INTO THE FIELD STRING D14B 4F ( disk.asm):02216 CLRA = TAKE THE 2'S COMPLEMENT OF AN UNSIGNED D14C 50 ( disk.asm):02217 NEGB = NUMBER IN ACCB - LEAVE THE DOUBLE BYTE SIGNED D14D 8200 ( disk.asm):02218 SBCA #$00 = RESULT IN ACCD D14F EBA4 ( disk.asm):02219 ADDB ,Y * ADD THE LENGTH OF THE FIELD STRING TO THE INVERSE D151 8900 ( disk.asm):02220 ADCA #$00 * OF THE NUMBER OF BYTES TO BE MOVED D153 33CB ( disk.asm):02221 LEAU D,U =ADD RESULT TO START OF FIELD STRING. NOW U ( disk.asm):02222 * =WILL POINT TO (-NUMBER OF BYTES TO MOVE) ( disk.asm):02223 * =FROM THE RIGHT SIDE OF THE FIELD STRING D155 3504 ( disk.asm):02224 PULS B GET THE NUMBER OF BYTES TO MOVE D157 7EA59A ( disk.asm):02225 LD157 JMP >LA59A MOVE ACCB BYTES FROM X TO U (DATA TO FIELD STRING) D15A 3582 ( disk.asm):02226 LD15A PULS A,PC PULL LSET/RSET FLAG OFF OF STACK AND RETURN ( disk.asm):02227 * FILES COMMAND D15C BD95AC ( disk.asm):02228 FILES JSR >L95AC RESET SAM DISPLAY PAGE AND VDG MODE D15F FC094A ( disk.asm):02229 LDD FCBADR GET START OF FILE BUFFERS D162 830989 ( disk.asm):02230 SUBD #DFLBUF SUBTRACT THE START OF RANDOM FILE BUFFER SPACE D165 3406 ( disk.asm):02231 PSHS B,A SAVE DEFAULT VALUE OF RANDOM FILE BUFFER SPACE ON STACK D167 F6095B ( disk.asm):02232 LDB FCBACT * GET CURRENT NUMBER OF FCBS D16A 3404 ( disk.asm):02233 PSHS B * AND SAVE ON THE STACK (DEFAULT VALUE) D16C 9DA5 ( disk.asm):02234 JSR GETCCH GET CURRENT INPUT CHAR D16E 812C ( disk.asm):02235 CMPA #', CHECK FOR COMMA D170 270F ( disk.asm):02236 BEQ LD181 BRANCH IF COMMA - NO BUFFER NUMBER PARAMETER GIVEN D172 BDB70B ( disk.asm):02237 JSR EVALEXPB EVALUATE EXPRESSION (BUFFER NUMBER) D175 C10F ( disk.asm):02238 CMPB #15 15 FCBS MAX D177 1022E2CF ( disk.asm):02239 LBHI LB44A BRANCH IF > 15 - 'ILLEGAL FUNCTION CALL' D17B E7E4 ( disk.asm):02240 STB ,S SAVE NUMBER OF FCBS ON STACK D17D 9DA5 ( disk.asm):02241 JSR GETCCH CHECK CURRENT INPUT CHAR D17F 2708 ( disk.asm):02242 BEQ LD189 BRANCH IF END OF LINE D181 BDB26D ( disk.asm):02243 LD181 JSR SYNCOMMA SYNTAX CHECK FOR COMMA D184 BDB3E6 ( disk.asm):02244 JSR >LB3E6 EVALUATE EXPRESSION, RETURN VALUE IN ACCD D187 ED61 ( disk.asm):02245 STD $01,S SAVE RANDOM FILE BUFFER SIZE ON STACK D189 BDCAE9 ( disk.asm):02246 LD189 JSR DVEC7 CLOSE FILES D18C E6E4 ( disk.asm):02247 LDB ,S * GET THE NUMBER OF BUFFERS TO MAKE AND D18E 3404 ( disk.asm):02248 PSHS B * INITIALIZE A BUFFER COUNTER ON THE STACK D190 CC0989 ( disk.asm):02249 LDD #DFLBUF GET START OF RANDOM FILE BUFFERS D193 E362 ( disk.asm):02250 ADDD $02,S ADD THE NEWLY SPECIFIED RANDOM FILE BUFFER SPACE D195 2571 ( disk.asm):02251 BLO LD208 'OUT OF MEMORY' ERROR IF > $FFFF D197 ED62 ( disk.asm):02252 STD $02,S SAVE START OF FCBS ( disk.asm):02253 * RESERVE SPACE FOR FCBS D199 C30119 ( disk.asm):02254 LD199 ADDD #FCBLEN FCBLEN REQUIRED FOR EACH BUFFER D19C 256A ( disk.asm):02255 BLO LD208 'OUT OF MEMORY' ERROR IF > $FFFF D19E 6AE4 ( disk.asm):02256 DEC ,S DECREMENT BUFFER COUNTER D1A0 2AF7 ( disk.asm):02257 BPL LD199 *BRANCH IF NOT DONE - THE BPL WILL SET UP ONE MORE BUFFER ( disk.asm):02258 * *THAN THE NUMBER REQUESTED. THIS EXTRA BUFFER IS THE SYSTEM BUFFER ( disk.asm):02259 * *AND IS LOCATED AT THE END OF THE NORMAL FCBS. ONLY SYSTEM ROUTINES ( disk.asm):02260 * *(COPY, BACKUP, MERGE ETC.) MAY ACCESS THIS BUFFER. D1A2 5D ( disk.asm):02261 TSTB AT AN EXACT 256 BYTE BOUNDARY? D1A3 2703 ( disk.asm):02262 BEQ LD1A8 YES D1A5 4C ( disk.asm):02263 INCA NO - ADD 256 D1A6 2760 ( disk.asm):02264 BEQ LD208 'OUT OF MEMORY' ERROR IF PAST $FFFF D1A8 8501 ( disk.asm):02265 LD1A8 BITA #$01 ON A 512 BYTE BOUNDARY? D1AA 2703 ( disk.asm):02266 BEQ LD1AF YES D1AC 4C ( disk.asm):02267 INCA NO - ADD 256 D1AD 2759 ( disk.asm):02268 BEQ LD208 'OM' ERROR IF PAST $FFFF D1AF A7E4 ( disk.asm):02269 LD1AF STA ,S SAVE MS BYTE OF NEW GRAPHIC RAM START D1B1 DC1B ( disk.asm):02270 LDD VARTAB GET START OF VARIABLES D1B3 90BC ( disk.asm):02271 SUBA GRPRAM *SUBTRACT THE OLD GRAPHIC RAM START - ACCD CONTAINS LENGTH ( disk.asm):02272 * *OF PROGRAM PLUS RESERVED GRAPHIC RAM D1B5 ABE4 ( disk.asm):02273 ADDA ,S ADD IN THE AMOUNT OF RAM CALCULATED ABOVE D1B7 254F ( disk.asm):02274 BLO LD208 'OUT OF MEMORY' ERROR IF > $FFFF D1B9 1F01 ( disk.asm):02275 TFR D,X SAVE NEW VARTAB IN X D1BB 4C ( disk.asm):02276 INCA *ADD 256 - TO GUARANTEE ENOUGH ROOM SINCE ALL CALCULATIONS USE ( disk.asm):02277 * *ONLY THE MSB OF THE ADDRESS D1BC 274A ( disk.asm):02278 BEQ LD208 'OUT OF MEMORY' ERROR IF PAST $FFFF D1BE 109321 ( disk.asm):02279 CMPD FRETOP IS IT GREATER THAN THE START OF STRING SPACE D1C1 2445 ( disk.asm):02280 BHS LD208 'OUT OF MEMORY' IF > START OF STRING SPACE D1C3 4A ( disk.asm):02281 DECA SUBTRACT 256 - COMPENSATE FOR INCA ABOVE D1C4 931B ( disk.asm):02282 SUBD VARTAB SUBTRACT START OF VARIABLES D1C6 D319 ( disk.asm):02283 ADDD TXTTAB ADD START OF BASIC D1C8 1F02 ( disk.asm):02284 TFR D,Y Y HAS NEW START OF BASIC D1CA A6E4 ( disk.asm):02285 LDA ,S * GET THE GRAPHIC RAM START, SUBTRACT D1CC 90BC ( disk.asm):02286 SUBA GRPRAM * THE OLD GRAPHIC RAN START AND SAVE D1CE 1F89 ( disk.asm):02287 TFR A,B * THE DIFFERENCE IN ACCA AND ACCB D1D0 9BBA ( disk.asm):02288 ADDA BEGGRP = ADD THE OLD GRAPHIC PAGE START AND D1D2 97BA ( disk.asm):02289 STA BEGGRP = STORE THE NEW START OF GRAPHICS RAM D1D4 DBB7 ( disk.asm):02290 ADDB ENDGRP * ADD THE OLD GRAPHIC RAM END ADDRESS AND D1D6 D7B7 ( disk.asm):02291 STB ENDGRP * STORE THE NEW END OF GRAPHICS RAM D1D8 3546 ( disk.asm):02292 PULS A,B,U = ACCA=MSB OF START OF GRAPHIC RAM; ACCB=NUMBER OF FILE BUFFERS ( disk.asm):02293 * = U=START OF FILE BUFFERS D1DA 97BC ( disk.asm):02294 STA GRPRAM SAVE NEW START OF GRAPHIC RAM D1DC F7095B ( disk.asm):02295 STB FCBACT NUMBER OF FILE BUFFERS D1DF FF094A ( disk.asm):02296 STU FCBADR START OF FILE BUFFERS D1E2 9668 ( disk.asm):02297 LDA CURLIN GET CURRENT LINE NUMBER D1E4 4C ( disk.asm):02298 INCA ARE WE IN DIRECT MODE? D1E5 2708 ( disk.asm):02299 BEQ LD1EF YES - MOVE BASIC PROGRAM D1E7 1F20 ( disk.asm):02300 TFR Y,D MOVE NEW START OF BASIC TO ACCD D1E9 9319 ( disk.asm):02301 SUBD TXTTAB SUBTRACT OLD START OF BASIC D1EB D3A6 ( disk.asm):02302 ADDD CHARAD ADD OLD INPUT POINTER D1ED DDA6 ( disk.asm):02303 STD CHARAD SAVE NEW INPUT POINTER D1EF DE1B ( disk.asm):02304 LD1EF LDU VARTAB POINT U TO OLD START OF VARIABLES D1F1 9F1B ( disk.asm):02305 STX VARTAB SAVE NEW START OF VARIBLES D1F3 11931B ( disk.asm):02306 CMPU VARTAB * COMPARE OLD START OF VARIABLES TO NEW START OF D1F6 2213 ( disk.asm):02307 BHI LD20B * VARIABLES & BRANCH IF OLD > NEW ( disk.asm):02308 * MOVE BASIC PROGRAM IF OLD START ADDRESS <= NEW START ADDRESS D1F8 A6C2 ( disk.asm):02309 LD1F8 LDA ,-U GET A BYTE D1FA A782 ( disk.asm):02310 STA ,-X MOVE lT D1FC 119319 ( disk.asm):02311 CMPU TXTTAB AT START OF BASIC PROGRAM? D1FF 26F7 ( disk.asm):02312 BNE LD1F8 NO D201 109F19 ( disk.asm):02313 STY TXTTAB STORE NEW START OF BASIC PROGRAM D204 6F3F ( disk.asm):02314 CLR -1,Y RESET START OF PROGRAM FLAG D206 2013 ( disk.asm):02315 BRA LD21B CLOSE ALL FILES D208 7EAC44 ( disk.asm):02316 LD208 JMP >LAC44 'OUT OF MEMORY' ERROR ( disk.asm):02317 * MOVE BASIC PROGRAM IF OLD START ADDRESS > NEW START ADDRESS D20B DE19 ( disk.asm):02318 LD20B LDU TXTTAB POINT U TO OLD START OF BASIC D20D 109F19 ( disk.asm):02319 STY TXTTAB SAVE NEW START OF BASIC D210 6F3F ( disk.asm):02320 CLR -1,Y RESET START OF BASIC FLAG D212 A6C0 ( disk.asm):02321 LD212 LDA ,U+ GET A BYTE D214 A7A0 ( disk.asm):02322 STA ,Y+ MOVE IT D216 109C1B ( disk.asm):02323 CMPY VARTAB AT START OF VARIABLES D219 26F7 ( disk.asm):02324 BNE LD212 NO - MOVE ANOTHER BYTE ( disk.asm):02325 * CLOSE ALL FCBS AND RECALCULATE FCB START ADDRESSES D21B CE0928 ( disk.asm):02326 LD21B LDU #FCBV1 POINT U TO FILE BUFFER POINTERS D21E BE094A ( disk.asm):02327 LDX FCBADR POINT X TO START OF BUFFERS D221 5F ( disk.asm):02328 CLRB RESET FILE COUNTER D222 AFC1 ( disk.asm):02329 LD222 STX ,U++ STORE FILE ADDRESS IN VECTOR TABLE D224 6F00 ( disk.asm):02330 CLR FCBTYP,X RESET FILE TYPE TO CLOSED D226 30890119 ( disk.asm):02331 LEAX FCBLEN,X GO TO NEXT FCB D22A 5C ( disk.asm):02332 INCB INCREMENT FILE COUNTER D22B F1095B ( disk.asm):02333 CMPB FCBACT CLOSE ALL ACTIVE BUFFERS AND SYSTEM FCB D22E 23F2 ( disk.asm):02334 BLS LD222 BRANCH IF NOT DONE D230 7E96CB ( disk.asm):02335 JMP >L96CB READJUST LINE NUMBERS, ETC. ( disk.asm):02336 * UNLOAD COMMAND D233 8D1A ( disk.asm):02337 UNLOAD BSR LD24F GET DRIVE NUMBER D235 5F ( disk.asm):02338 CLRB CLEAR FILE COUNTER D236 5C ( disk.asm):02339 LD236 INCB INCREMENT FILE COUNTER D237 BDC749 ( disk.asm):02340 JSR >LC749 POINT X TO FCB D23A 270D ( disk.asm):02341 BEQ LD249 BRANCH IF FILE NOT OPEN D23C A601 ( disk.asm):02342 LDA FCBDRV,X CHECK DRIVE NUMBER D23E 91EB ( disk.asm):02343 CMPA DCDRV DOES IT MATCH THE 'UNLOAD' DRIVE NUMBER? D240 2607 ( disk.asm):02344 BNE LD249 NO MATCH - DO NOT CLOSE THE FILE D242 3404 ( disk.asm):02345 PSHS B SAVE FILE COUNTER ON THE STACK D244 BDCB06 ( disk.asm):02346 JSR >LCB06 CLOSE FCB D247 3504 ( disk.asm):02347 PULS B RESTORE FILE COUNTER D249 F1095B ( disk.asm):02348 LD249 CMPB FCBACT CHECKED ALL FILES? D24C 23E8 ( disk.asm):02349 BLS LD236 NO D24E 39 ( disk.asm):02350 RTS ( disk.asm):02351 * GET DRIVE NUMBER FROM BASIC - USE THE DEFAULT DRIVE IF NONE GIVEN D24F F6095A ( disk.asm):02352 LD24F LDB DEFDRV GET DEFAULT DRIVE NUMBER D252 9DA5 ( disk.asm):02353 JSR GETCCH GET NEXT INPUT CHAR D254 2709 ( disk.asm):02354 BEQ LD25F USE DEFAULT DRIVE NUMBER IF NONE GIVEN D256 BDB70B ( disk.asm):02355 LD256 JSR EVALEXPB EVALUATE EXPRESSION D259 C103 ( disk.asm):02356 CMPB #$03 4 DRIVES MAX D25B 1022D3C0 ( disk.asm):02357 LBHI LA61F 'DEVICE NUMBER ERROR' IF > 3 D25F D7EB ( disk.asm):02358 LD25F STB DCDRV STORE IN DSKCON VARIABLE D261 39 ( disk.asm):02359 RTS ( disk.asm):02360 * BACKUP COMMAND D262 1027D3B9 ( disk.asm):02361 BACKUP LBEQ LA61F DEVICE NUMBER ERROR IF NO DRIVE NUMBERS GIVEN D266 BD95AC ( disk.asm):02362 JSR >L95AC RESET SAM DISPLAY PAGE AND VOG MODE D269 BDD256 ( disk.asm):02363 JSR >LD256 * GET SOURCE DRIVE NUMBER AND SAVE D26C F706FF ( disk.asm):02364 STB DBUF0+255 * IT AT TOP OF DBUF0 (TOP OF NEW STACK) D26F 9DA5 ( disk.asm):02365 JSR GETCCH GET A CHARACTER FROM BASIC D271 2708 ( disk.asm):02366 BEQ LD27B BRANCH IF END OF LINE D273 C6A5 ( disk.asm):02367 LDB #$A5 TOKEN FOR 'TO' D275 BDB26F ( disk.asm):02368 JSR >LB26F SYNTAX CHECK FOR 'TO' D278 BDD256 ( disk.asm):02369 JSR >LD256 GET DESTINATION DRIVE NUMBER D27B 10CE06FF ( disk.asm):02370 LD27B LDS #DBUF0+255 PUT STACK AT TOP OF DBUF0 D27F 3404 ( disk.asm):02371 PSHS B SAVE DESTINATION DRIVE NUMBER ON STACK D281 BDA5C7 ( disk.asm):02372 JSR >LA5C7 SYNTAX ERROR IF NOT END OF LINE D284 BDCAE9 ( disk.asm):02373 JSR DVEC7 CLOSE ALL FILES D287 6FE2 ( disk.asm):02374 CLR ,-S CLEAR A TRACK COUNTER ON STACK D289 8E0988 ( disk.asm):02375 LDX #DFLBUF-1 POINT X TO TOP OF DISK RAM VARIABLES D28C 6CE4 ( disk.asm):02376 LD28C INC ,S INCREMENT TRACK COUNTER D28E 30891200 ( disk.asm):02377 LEAX SECMAX*SECLEN,X INCREMENT X BY ONE TRACK D292 9C27 ( disk.asm):02378 CMPX MEMSIZ COMPARE TO TOP OF NON RESERVED RAN D294 23F6 ( disk.asm):02379 BLS LD28C KEEP GOING IF MORE FREE RAM LEFT D296 6AE4 ( disk.asm):02380 DEC ,S DECREMENT TRACK COUNTER D298 1027D9A8 ( disk.asm):02381 LBEQ LAC44 'OM' ERROR IF < 1 TRACK OF FREE RAM D29C 8623 ( disk.asm):02382 LDA #TRKMAX GET MAXIMUM NUMBER OF TRACKS — INITIALIZE REMAINING TRACKS CTR D29E 5F ( disk.asm):02383 CLRB INITIALIZE TRACKS WRITTEN COUNTER TO ZERO D29F 3406 ( disk.asm):02384 PSHS B,A SAVE TRACKS WRITTEN AND REMAINING COUNTERS ON STACK ( disk.asm):02385 * AT THIS POINT THE STACK HAS THE FOLLOWING DATA ON IT: ( disk.asm):02386 * ,S = TRACKS REMAINING COUNTER; 1,S = TRACKS WRITTEN COUNTER ( disk.asm):02387 * 2,S = NUMBER OF TRACKS WHICH FIT IN RAM; 3,S = DESTINATION DRIVE NUMBER ( disk.asm):02388 * 4,S = SOURCE DRIVE NUMBER D2A1 73095C ( disk.asm):02389 COM DRESFL SET THE DISK RESET FLAG TO CAUSE A RESET D2A4 5F ( disk.asm):02390 LD2A4 CLRB INITIALIZE WRITE TRACK COUNTER TO ZERO D2A5 5C ( disk.asm):02391 LD2A5 INCB ADD ONE TO WRITE TRACK COUNTER D2A6 6AE4 ( disk.asm):02392 DEC ,S * DECREMENT REMAINING TRACKS COUNTER D2A8 2704 ( disk.asm):02393 BEQ LD2AE * AND BRANCH IF NO TRACKS LEFT D2AA E162 ( disk.asm):02394 CMPB $02,S = COMPARE WRITE TRACK COUNTER TO NUMBER OF TRACKS THAT D2AC 26F7 ( disk.asm):02395 BNE LD2A5 = WILL FIT IN RAM AND BRANCH IF ROOM FOR MORE TRACKS IN RAM D2AE D703 ( disk.asm):02396 LD2AE STB TMPLOC SAVE THE NUMBER OF TRACKS TO BE TRANSFERRED D2B0 E664 ( disk.asm):02397 LDB $04,S GET SOURCE DRIVE NUMBER D2B2 8D48 ( disk.asm):02398 BSR LD2FC FILL RAM BUFFER WITH TMPLOC TRACKS OF DATA D2B4 86FF ( disk.asm):02399 LDA #$FF SET SOURCE/DESTINATION FLAG TO DESTINATION D2B6 BDD322 ( disk.asm):02400 JSR >LD322 PRINT PROMPT MESSAGE IF NEEDED D2B9 E663 ( disk.asm):02401 LDB $03,S GET DESTINATION DRIVE NUMBER D2BB 8D42 ( disk.asm):02402 BSR LD2FF WRITE TMPLOC TRACKS FROM BUFFER D2BD 6DE4 ( disk.asm):02403 TST ,S TEST TRACKS REMAINING FLAG D2BF 270C ( disk.asm):02404 BEQ LD2CD BRANCH IF BACKUP DONE D2C1 4F ( disk.asm):02405 CLRA SET SOURCE/DESTINATION FLAG TO SOURCE D2C2 BDD322 ( disk.asm):02406 JSR >LD322 PRINT PROMPT MESSAGE IF NEEDED D2C5 E661 ( disk.asm):02407 LDB $01,S * GET THE TRACKS WRITTEN COUNTER, ADD THE NUMBER OF D2C7 DB03 ( disk.asm):02408 ADDB TMPLOC * TRACKS MOVED THIS TIME THROUGH LOOP AND D2C9 E761 ( disk.asm):02409 STB $01,S * SAVE THE NEW TRACKS WRITTEN COUNTER D2CB 20D7 ( disk.asm):02410 BRA LD2A4 COPY SOME MORE TRACKS D2CD 8D03 ( disk.asm):02411 LD2CD BSR LD2D2 CHECK FOR DOS INITIALIZATION D2CF 7EAC73 ( disk.asm):02412 JMP >LAC73 JUMP BACK TO BASIC’S MAIN LOOP D2D2 3540 ( disk.asm):02413 LD2D2 PULS U PUT THE RETURN ADDRESS IN U D2D4 B6095C ( disk.asm):02414 LDA DRESFL TEST DISK RESET FLAG D2D7 2716 ( disk.asm):02415 BEQ LD2EF DON’T RESET THE DOS IF FLAG NOT SET D2D9 8E0928 ( disk.asm):02416 LDX #FCBV1 POINT X TO TABLE OF FCB ADDRESSES D2DC 4F ( disk.asm):02417 CLRA SET FILE COUNTER TO ZERO D2DD 6F91 ( disk.asm):02418 LD2DD CLR [,X++] MARK FCB AS CLOSED D2DF 4C ( disk.asm):02419 INCA ADD ONE TO FILE COUNTER D2E0 B1095B ( disk.asm):02420 CMPA FCBACT COMPARE TO NUMBER OF RESERVED FILES D2E3 23F8 ( disk.asm):02421 BLS LD2DD BRANCH IF ANY FILES NOT SHUT DOWN D2E5 9E19 ( disk.asm):02422 LDX TXTTAB LOAD X WITH THE START OF BASIC D2E7 6F1F ( disk.asm):02423 CLR -1,X SET FIRST BYTE OF BASIC PROGRAM TO ZERO D2E9 BDAD19 ( disk.asm):02424 JSR >LAD19 GO DO A 'NEW' D2EC 7F095C ( disk.asm):02425 CLR DRESFL RESET THE DOS RESET FLAG D2EF B6095D ( disk.asm):02426 LD2EF LDA DLODFL * CHECK THE LOAD RESET FLAG AND D2F2 2706 ( disk.asm):02427 BEQ LD2FA * BRANCH IF NOT SET D2F4 7F095D ( disk.asm):02428 CLR DLODFL CLEAR THE LOAD RESET FLAG D2F7 BDAD19 ( disk.asm):02429 JSR >LAD19 GO DO A 'NEW' D2FA 6EC4 ( disk.asm):02430 LD2FA JMP ,U JUMP BACK TO RETURN ADDRESS SAVED IN U ABOVE D2FC 8602 ( disk.asm):02431 LD2FC LDA #$02 READ OP CODE D2FE 8C ( disk.asm):02432 FCB $8C SKIP TWO BYTES (THROWN AWAY CMPX INSTRUCTION) D2FF 8603 ( disk.asm):02433 LD2FF LDA #$03 WRITE OP CODE D301 DDEA ( disk.asm):02434 STD DCOPC SAVE IN DSKCON VARIABLE D303 A663 ( disk.asm):02435 LDA $03,S * GET THE NUMBER OF THE TRACK BEING CURRENTLY D305 97EC ( disk.asm):02436 STA DCTRK * WRITTEN AND SAVE IT IN DSKCON VARIABLE D307 8E0989 ( disk.asm):02437 LDX #DFLBUF = TRACK BUFFER STARTS AT DFLBUF D30A 9FEE ( disk.asm):02438 STX DCBPT = SAVE IT IN DSKCON VARIABLE D30C 9603 ( disk.asm):02439 LDA TMPLOC GET NUMBER OF TRACKS TO MOVE D30E C601 ( disk.asm):02440 LD30E LDB #$01 INITIALIZE SECTOR COUNTER TO ONE D310 D7ED ( disk.asm):02441 LD310 STB DSEC SAVE DSKCON SECTOR VARIABLE D312 BDD6F2 ( disk.asm):02442 JSR >LD6F2 READ/WRITE A SECTOR D315 0CEE ( disk.asm):02443 INC DCBPT MOVE BUFFER POINTER UP ONE SECTOR (256 BYTES) D317 5C ( disk.asm):02444 INCB INCREMENT SECTOR COUNTER D318 C112 ( disk.asm):02445 CMPB #SECMAX COMPARE TO MAXIMUM NUMBER OF SECTORS PER TRACK D31A 23F4 ( disk.asm):02446 BLS LD310 BRANCH IF ANY SECTORS LEFT D31C 0CEC ( disk.asm):02447 INC DCTRK INCREMENT TRACK COUNTER VARIABLE TO NEXT TRACK D31E 4A ( disk.asm):02448 DECA DECREMENT TRACKS TO MOVE COUNTER D31F 26ED ( disk.asm):02449 BNE LD30E READ MORE TRACKS IF ANY LEFT D321 39 ( disk.asm):02450 RTS D322 E665 ( disk.asm):02451 LD322 LDB $05,S * GET THE DESTINATlON DRIVE NUMBER AND D324 E166 ( disk.asm):02452 CMPB $06,S * COMPARE IT TO THE SOURCE DRIVE NUMBER ( disk.asm):02453 * PRINT SOURCE/DESTINATION DISK SWITCH PROMPT MESSAGE D326 2636 ( disk.asm):02454 LD326 BNE LD35E RETURN IF DRIVE NUMBERS NOT EQUAL D328 7F0985 ( disk.asm):02455 CLR RDYTMR RESET THE READY TIMER D32B 7FFF40 ( disk.asm):02456 CLR DSKREG CLEAR DSKREG - TURN OFF ALL DISK MOTORS D32E 7F0986 ( disk.asm):02457 CLR DRGRAM CLEAR DSKREG RAM IMAGE D331 3402 ( disk.asm):02458 PSHS A SAVE SOURCE/DESTINATION FLAG ON STACK D333 BDA928 ( disk.asm):02459 JSR >LA928 CLEAR SCREEN D336 8ED35F ( disk.asm):02460 LDX #LD35F POINT X TO 'INSERT SOURCE' MESSAGE D339 C60D ( disk.asm):02461 LDB #13 13 BYTES IN MESSAGE D33B A6E0 ( disk.asm):02462 LDA ,S+ GET SOURCE/DESTINATION FLAG FROM THE STACK D33D 2705 ( disk.asm):02463 BEQ LD344 BRANCH IF SOURCE D33F 8ED36C ( disk.asm):02464 LDX #LD36C POINT X TO 'INSERT DESTINATION' MESSAGE D342 C612 ( disk.asm):02465 LDB #18 18 BYTES IN MESSAGE D344 BDB9A2 ( disk.asm):02466 LD344 JSR >LB9A2 SEND MESSAGE TO CONSOLE OUT D347 8ED37E ( disk.asm):02467 LDX #LD37E POINT X TO 'DISKETTE AND' MESSAGE D34A C61B ( disk.asm):02468 LDB #27 27 BYTES IN MESSAGE D34C BDB9A2 ( disk.asm):02469 JSR >LB9A2 SEND MESSAGE TO CONSOLE OUT D34F CC6405 ( disk.asm):02470 LDD #$6405 * SET UP 'SOUND' PARAMETERS D352 978C ( disk.asm):02471 STA SNDTON * FOR A BEEP D354 BDA951 ( disk.asm):02472 JSR >LA951 JUMP TO 'SOUND' - DO A BEEP D357 BDA171 ( disk.asm):02473 LD357 JSR >LA171 GET A CHARACTER FROM CONSOLE IN D35A 810D ( disk.asm):02474 CMPA #CR * KEEP LOOKING AT CONSOLE IN UNTIL D35C 26F9 ( disk.asm):02475 BNE LD357 * YOU GET A CARRIAGE RETURN D35E 39 ( disk.asm):02476 LD35E RTS D35F 494E534552542053 ( disk.asm):02477 LD35F FCC 'INSERT SOURCE' 4F55524345 D36C 494E534552542044 ( disk.asm):02478 LD36C FCC 'INSERT DESTINATION' 455354494E415449 4F4E D37E 204449534B455454 ( disk.asm):02479 LD37E FCC ' DISKETTE AND' 4520414E44 D38B 0D ( disk.asm):02480 FCB CR D38C 5052455353202745 ( disk.asm):02481 FCC "PRESS 'ENTER'" 4E54455227 ( disk.asm):02482 * PUSH FILENAME.EXT AND DRIVE NUMBER ONTO THE STACK D399 3520 ( disk.asm):02483 LD399 PULS Y SAVE RETURN ADDRESS IN Y D39B C60B ( disk.asm):02484 LDB #11 11 CHARACTERS IN FILENAME AND EXTENSION D39D 8E0957 ( disk.asm):02485 LDX #DNAMBF+11 POINT X TO TOP OF DISK NAME/EXT BUFFER D3A0 A682 ( disk.asm):02486 LD3A0 LDA ,-X * GET A CHARACTER FROM FILENAME. D3A2 3402 ( disk.asm):02487 PSHS A * EXT BUFFER AND PUSH IT ONTO THE D3A4 5A ( disk.asm):02488 DECB * STACK - DECREMENT COUNTER AND D3A5 26F9 ( disk.asm):02489 BNE LD3A0 * KEEP LOOPING UNTIL DONE D3A7 96EB ( disk.asm):02490 LDA DCDRV = GET DRIVE NUMBER AND PUSH D3A9 3402 ( disk.asm):02491 PSHS A = IT ONTO THE STACK D3AB 6EA4 ( disk.asm):02492 JMP ,Y PSEUDO - RETURN TO CALLING ROUTINE ( disk.asm):02493 * PULL FILENAME.EXT AND DRIVE NUMBER FROM (X) TO RAM D3AD A680 ( disk.asm):02494 LD3AD LDA ,X+ * GET DRIVE NUMBER AND SAVE D3AF 97EB ( disk.asm):02495 STA DCDRV * IT IN DSKCON VARIABLE D3B1 C60B ( disk.asm):02496 LDB #11 11 BYTES IN FILENAME AND EXTENSION D3B3 CE094C ( disk.asm):02497 LDU #DNAMBF POINT U TO DISK NAME BUFFER D3B6 7EA59A ( disk.asm):02498 JMP >LA59A MOVE FILENANE.EXT FROM (X) TO DNAMBF ( disk.asm):02499 * COPY ( disk.asm):02500 * THE COPY PROCESS IS PERFORMED BY COPYING DATA FROM THE SOURCE FILE ( disk.asm):02501 * TO RAM AND THEN COPYING IT TO THE DESTINATION FILE. THE SOURCE AND ( disk.asm):02502 * DESTINATION FILES ARE OPENED AS RANDOM FILES AND BOTH USE THE SYSTEM ( disk.asm):02503 * FCB ABOVE THE RESERVED FCBS. ALL OF AVAILABLE FREE RAM ABOVE THE ( disk.asm):02504 * VARIABLES IS USED AS A COPY BUFFER WHICH SPEEDS UP THE COPYING PROCESS ( disk.asm):02505 * BUT UNFORTUNATELY THE METHOD USED WILL ALLOW AN ERROR ENCOUNTERED DURING ( disk.asm):02506 * THE COPY PROCESS TO 'HANG' THE SYSTEM. THIS IS CAUSED BY POINTING THE FCB'S ( disk.asm):02507 * RANDOM FILE BUFFER POINTER (FCBBUF,X) TO THE FREE RAM BUFFER. AN ERROR ( disk.asm):02508 * WILL THEN CAUSE THE OPEN FILE TO BE CLOSED WITH FCBBUF,X POINTING TO AN ( disk.asm):02509 * AREA IN RAM WHERE THE RANDOM FILE BUFFER CLOSE ROUTINE (LCAE2) WILL NEVER ( disk.asm):02510 * LOOK FOR IT D3B9 BDC935 ( disk.asm):02511 COPY JSR >LC935 * GET SOURCE FILENAME.EXT & DRIVE NUMBER FROM BASIC D3BC 8DDB ( disk.asm):02512 BSR LD399 * AND SAVE THEM ON THE STACK D3BE 6FE2 ( disk.asm):02513 CLR ,-S CLEAR A BYTE ON STACK - SINGLE DISK COPY (SDC) FLAG D3C0 9DA5 ( disk.asm):02514 JSR GETCCH GET CURRENT INPUT CHARACTER D3C2 270A ( disk.asm):02515 BEQ LD3CE BRANCH IF END OF LINE - SINGLE DISK COPY D3C4 63E4 ( disk.asm):02516 COM ,S SET SOC FLAG TO $FF (NO SINGLE DISK COPY) D3C6 C6A5 ( disk.asm):02517 LDB #$A5 TOKEN FOR 'TO' D3C8 BDB26F ( disk.asm):02518 JSR >LB26F SYNTAX CHECK FOR 'TO' D3CB BDC935 ( disk.asm):02519 JSR >LC935 GET DESTINATION FILENAME.EXT AND DRIVE NUMBER D3CE 8DC9 ( disk.asm):02520 LD3CE BSR LD399 SAVE DESTINATION FILENAME.EXT & DRIVE NUMBER ON STACK D3D0 BDA5C7 ( disk.asm):02521 JSR >LA5C7 SYNTAX ERROR IF MORE CHARACTERS ON LINE D3D3 BDCAE9 ( disk.asm):02522 JSR DVEC7 CLOSE ALL FILES ( disk.asm):02523 * COUNT THE NUMBER OF SECTORS WORTH OF FREE RAM AVAILABLE D3D6 6FE2 ( disk.asm):02524 CLR ,-S CLEAR A SECTOR COUNTER ON THE STACK D3D8 30E9FF00 ( disk.asm):02525 LEAX -SECLEN,S POINT X ONE SECTOR LENGTH DOWN FROM THE TOP OF STACK D3DC 6CE4 ( disk.asm):02526 LD3DC INC ,S INCREMENT SECTOR COUNTER D3DE 3089FF00 ( disk.asm):02527 LEAX -SECLEN,X DECREMENT X BY ONE SECTOR D3E2 9C1F ( disk.asm):02528 CMPX ARYEND COMPARE TO TOP OF ARRAYS D3E4 24F6 ( disk.asm):02529 BHS LD3DC BRANCH IF NOT AT BOTTOM OF FREE RAM D3E6 6AE4 ( disk.asm):02530 DEC ,S DECREMENT SECTOR COUNTER D3E8 1027D858 ( disk.asm):02531 LBEQ LAC44 'OM' ERROR IF NOT AT LEAST ONE FULL SECTOR OF FREE RAM D3EC 306E ( disk.asm):02532 LEAX 14,S POINT X TO START OF SOURCE DATA D3EE 8DBD ( disk.asm):02533 BSR LD3AD PUT SOURCE DATA INTO DNAMBF AND DSKCON D3F0 BDC68C ( disk.asm):02534 JSR >LC68C SCAN DIRECTORY FOR A MATCH D3F3 BDC6E5 ( disk.asm):02535 JSR >LC6E5 'NE' ERROR IF MATCH NOT FOUND D3F6 BE0974 ( disk.asm):02536 LDX V974 POINT X TO DIRECTORY RAM IMAGE OF FOUND FILE D3F9 EE0E ( disk.asm):02537 LDU DIRLST,X * GET NUMBER OF BYTES IN LAST SECTOR AND D3FB AE0B ( disk.asm):02538 LDX DIRTYP,X * SOURCE FILE TYPE AND ASCII FLAG D3FD 3450 ( disk.asm):02539 PSHS U,X * AND SAVE THEM ON THE STACK D3FF BDC79D ( disk.asm):02540 JSR >LC79D GET VALID FAT DATA D402 F60976 ( disk.asm):02541 LDB V976 GET NUMBER OF FIRST GRANULE IN FILE D405 BDCD1E ( disk.asm):02542 JSR >LCD1E * GET THE NUMBER OF GRANULES IN FILE D408 3402 ( disk.asm):02543 PSHS A * AND SAVE IT ON THE STACK D40A 4A ( disk.asm):02544 DECA SUBTRACT OFF THE LAST GRANULE D40B C43F ( disk.asm):02545 ANDB #$3F * MASK OFF LAST GRANULE FLAG BITS AND SAVE THE D40D 3404 ( disk.asm):02546 PSHS B * NUMBER OF SECTORS IN LAST GRANULE ON STACK D40F 1F89 ( disk.asm):02547 TFR A,B SAVE THE NUMBER OF GRANULES IN ACCB D411 4F ( disk.asm):02548 CLRA CLEAR THE MS BYTE OF ACCD D412 BDC779 ( disk.asm):02549 JSR >LC779 MULTIPLY ACCD BY NINE D415 EBE4 ( disk.asm):02550 ADDB ,S * ADD THE NUMBER OF SECTORS IN THE LAST D417 8900 ( disk.asm):02551 ADCA #$00 * GRANULE TO ACCD D419 8E0001 ( disk.asm):02552 LDX #$0001 INITIALIZE RECORD COUNTER TO ONE D41C 3416 ( disk.asm):02553 PSHS X,B,A INITIALIZE SECTOR AND RECORD COUNTERS ON THE STACK ( disk.asm):02554 * AT THIS POINT THE CONTROL VARIABLES FOR COPY ARE STORED ON THE STACK. ( disk.asm):02555 * 0 1,S = REMAINING SECTORS COUNTER; 2 3,S = RECORD COUNTER ( disk.asm):02556 * 4,S = NUMBER OF SECTORS TO BE COPIED. INITIALLY SET TO NUMBER OF ( disk.asm):02557 * SECTORS IN THE LAST GRANULE. ( disk.asm):02558 * 5,S = GRAN TEST FLAG. INITIALLY SET TO NUMBER OF GRANS IN FILE ( disk.asm):02559 * 6,S = FILE TYPE; 7,S = ASCII FLAG; 8 9,S = NUMBER OF BYTES IN LAST SECTOR ( disk.asm):02560 * 10,S = NUMBER OF SECTORS WHICH WILL FIT IN THE CURRENTLY AVAILABLE FREE RAM ( disk.asm):02561 * 11-22,S = DESTINATION FILENAME.EXT AND DRIVE NUMBER ( disk.asm):02562 * 23,S = SINGLE DISK COPY FLAG; 24-35,S = SOURCE FILENAME.EXT AND DRIVE NUMBER D41E 5F ( disk.asm):02563 LD41E CLRB SET SECTOR COUNTER TO ZERO D41F AEE4 ( disk.asm):02564 LDX ,S GET THE NUMBER OF SECTORS REMAINING IN THE FILE D421 2709 ( disk.asm):02565 BEQ LD42C BRANCH IF NO SECTORS LEFT D423 5C ( disk.asm):02566 LD423 INCB ADD A SECTOR TO TEMPORARY SECTOR COUNTER D424 301F ( disk.asm):02567 LEAX -1,X DECREMENT REMAINING SECTORS COUNTER D426 2704 ( disk.asm):02568 BEQ LD42C BRANCH IF NO SECTORS LEFT D428 E16A ( disk.asm):02569 CMPB 10,S *COMPARE TEMPORARY COUNTER TO NUMBER OF SECTORS WHICH MAY ( disk.asm):02570 * *BE STORED IN FREE RAM D42A 26F7 ( disk.asm):02571 BNE LD423 BRANCH IF STILL ROOM FOR MORE SECTORS D42C AFE4 ( disk.asm):02572 LD42C STX ,S SAVE THE NUMBER OF UNCOPIED SECTORS REMAINING IN THE FILE D42E E764 ( disk.asm):02573 STB $04,S SAVE THE NUMBER OF SECTORS TO BE COPIED THIS TIME THROUGH LOOP D430 8D50 ( disk.asm):02574 BSR LD482 'GET' ACCB SECTORS TO RAM BUFFER D432 86FF ( disk.asm):02575 LDA #$FF SET SOURCE/DESTINATION FLAG TO DESTINATION D434 8D40 ( disk.asm):02576 BSR LD476 PRINT PROMPT MESSAGE IF REQUIRED D436 6D65 ( disk.asm):02577 TST $05,S * CHECK THE GRAN TEST FLAG. IF <> 0, IT CONTAINS THE D438 2725 ( disk.asm):02578 BEQ LD45F * NUMBER OF GRANS IN THE FILE AND THE DESTINATION DISK ( disk.asm):02579 * * MUST BE CHECKED FOR ENOUGH ROOM. IF IT IS =0 ( disk.asm):02580 * * THEN THE CHECK HAS ALREADY BEEN DONE D43A 306B ( disk.asm):02581 LEAX 11,S POINT TO DESTINATION FILE PARAMETERS D43C BDD3AD ( disk.asm):02582 JSR >LD3AD GET DESTINATION FILE PARAMETERS FROM STACK D43F BDD059 ( disk.asm):02583 JSR >LD059 SCAN DIRECTORY FOR FILE - 'AE' ERROR IF IT EXISTS D442 BDC79D ( disk.asm):02584 JSR >LC79D GET VALID FAT DATA ( disk.asm):02585 * MAKE SURE THERE ARE ENOUGH FREE GRANULES ON THE DESTINATION DISK D445 BDC755 ( disk.asm):02586 JSR >LC755 POINT X TO FAT D448 3006 ( disk.asm):02587 LEAX FATCON,X SKIP PAST THE FAT CONTROL BYTES D44A A665 ( disk.asm):02588 LDA $05,S GET THE NUMBER OF GRANS IN THE FILE D44C C644 ( disk.asm):02589 LDB #GRANMX SET GRAN COUNTER TO MAXIMUM D44E 6384 ( disk.asm):02590 LD44E COM ,X * CHECK TO SEE IF A BRAN IS FREE D450 2603 ( disk.asm):02591 BNE LD455 * AND BRANCH IF IT IS NOT FREE D452 4A ( disk.asm):02592 DECA = DECREMENT COUNTER AND BRANCH IF D453 2708 ( disk.asm):02593 BEQ LD45D = THERE ARE ENOUGH FREE GRANULES D455 6380 ( disk.asm):02594 LD455 COM ,X+ RESTORE FAT BYTE AND INCREMENT POINTER D457 5A ( disk.asm):02595 DECB DECREMENT GRAN COUNTER D458 26F4 ( disk.asm):02596 BNE LD44E BRANCH IF ALL GRANS NOT CHECKED D45A 7EC7F8 ( disk.asm):02597 JMP >LC7F8 'DISK FULL' ERROR D45D 6384 ( disk.asm):02598 LD45D COM ,X RESTORE FAT BYTE D45F 8D1B ( disk.asm):02599 LD45F BSR LD47C 'PUT' DATA FROM RAM BUFFER TO DESTINATION FILE D461 AEE4 ( disk.asm):02600 LDX ,S GET THE NUMBER OF REMAINING SECTORS D463 270D ( disk.asm):02601 BEQ LD472 EXIT ROUTINE IF NO SECTORS LEFT D465 EC62 ( disk.asm):02602 LDD $02,S * D467 EB64 ( disk.asm):02603 ADDB $04,S * GET THE CURRENT RECORD COUNTER, ADD D469 8900 ( disk.asm):02604 ADCA #$00 * THE NUMBER OF SECTORS (RECORDS) MOVED D46B ED62 ( disk.asm):02605 STD $02,S * AND SAVE THE NEW RECORD COUNTER D46D 4F ( disk.asm):02606 CLRA SET SOURCE/DESTINATION FLAG TO SOURCE D46E 8D06 ( disk.asm):02607 BSR LD476 PRINT PROMPT MESSAGE IF REQUIRED D470 20AC ( disk.asm):02608 BRA LD41E KEEP COPYING SECTORS D472 32E824 ( disk.asm):02609 LD472 LEAS 36,S REMOVE TEMPORARY STORAGE VARIABLES FROM STACK D475 39 ( disk.asm):02610 RTS **** COPY DONE **** D476 6DE819 ( disk.asm):02611 LD476 TST 25,S *CHECK SINGLE DISK COPY FLAG - IF <> ZERO, THEN DON'T ( disk.asm):02612 * *PRINT THE PROMPT MESSAGE D479 7ED326 ( disk.asm):02613 JMP >LD326 PRINT THE PROMPT MESSAGE IF REQUIRED ( disk.asm):02614 * 'PUT'.'GET' DATA FROM THE DESTINATION/SOURCE FILES D47C 86FF ( disk.asm):02615 LD47C LDA #$FF 'PUT' FLAG D47E 306D ( disk.asm):02616 LEAX 13,S POINT X TO DESTINATION FILENAME DATA D480 2004 ( disk.asm):02617 BRA LD486 GO 'PUT' SOME DATA D482 4F ( disk.asm):02618 LD482 CLRA ZERO IS THE 'GET' FLAG D483 30E81A ( disk.asm):02619 LEAX 26,S POINT X TO THE SOURCE FILENAME DATA D486 97D8 ( disk.asm):02620 LD486 STA VD8 SAVE THE 'GET'/'PUT' FLAG D488 BDD3AD ( disk.asm):02621 JSR >LD3AD GET FILENAME AND DRIVE DATA FROM THE STACK D48B AE68 ( disk.asm):02622 LDX $08,S * GET ASCII FLAG AND FILE TYPE AND SAVE D48D BF0957 ( disk.asm):02623 STX DFLTYP * THEM IN THE DISK RAM VARIABLES D490 8E0100 ( disk.asm):02624 LDX #SECLEN = SAVE ONE SECTOR LENGTH IN D493 BF097C ( disk.asm):02625 STX DFFLEN = RAM RECORD LENGTH VARIABLE D496 8652 ( disk.asm):02626 LDA #'R RANDOM FILE TYPE FLAG D498 F6095B ( disk.asm):02627 LDB FCBACT * GET THE HIGHEST RESERVED FCB NUMBER, ADD ONE D49B 5C ( disk.asm):02628 INCB * AND OPEN A RANDOM FILE WHOSE FCB WILL BE ONE ABOVE D49C BDC48D ( disk.asm):02629 JSR >LC48D * THE HIGHEST RESERVED FCB (THE SYSTEM FCB) D49F 9EF1 ( disk.asm):02630 LDX FCBTMP POINT X TO THE 'SYSTEM' FCB D4A1 CC0100 ( disk.asm):02631 LDD #SECLEN * SET THE NUMBER OF BYTES IN THE LAST SECTOR D4A4 ED8813 ( disk.asm):02632 STD FCBLST,X * OF THE FILE EQUAL TO ONE SECTOR LENGTH D4A7 E666 ( disk.asm):02633 LDB $06,S =GET THE NUMBER OF SECTORS TO MOVE AND D4A9 2729 ( disk.asm):02634 BEQ LD4D4 =BRANCH IF NONE LEFT D4AB D6D8 ( disk.asm):02635 LDB VD8 *GRAB THE 'GET'/'PUT' FLAG, 'AND' IT WITH THE D4AD E467 ( disk.asm):02636 ANDB $07,S *GRAN TEST FLAG - BRANCH IF 'GET'ING DATA OR THIS IS D4AF 2709 ( disk.asm):02637 BEQ LD4BA *NOT THE FIRST TIME THROUGH THE LOOP D4B1 EC62 ( disk.asm):02638 LDD $02,S =GET THE NUMBER OF SECTORS REMAINING TO BE COPIED AND D4B3 EB66 ( disk.asm):02639 ADDB $06,S =ADD THE NUMBER TO BE COPIED THIS TIME THROUGH LOOP D4B5 8900 ( disk.asm):02640 ADCA #$00 = D4B7 BDC2E6 ( disk.asm):02641 JSR >LC2E6 *'PUT' THE LAST RECORD IN THE FILE TO THE SYSTEM FCB. ( disk.asm):02642 * *THE RECORD NUMBER IS IN ACCD. D4BA 9EF1 ( disk.asm):02643 LD4BA LDX FCBTMP POINT X TO THE SYSTEM FCB D4BC EE64 ( disk.asm):02644 LDU $04,S * GET THE CURRENT RECORD NUMBER D4BE EF07 ( disk.asm):02645 STU FCBREC,X * AND SAVE IT IN THE FCB D4C0 E666 ( disk.asm):02646 LDB $06,S GET THE NUMBER OF THE RECORD (SECTOR) TO MOVE D4C2 DE1F ( disk.asm):02647 LDU ARYEND END OF ARRAYS IS THE START OF THE COPY FREE RAM BUFFER D4C4 3444 ( disk.asm):02648 LD4C4 PSHS U,B SAVE SECTOR COUNTER AND BUFFER POINTER ON THE STACK D4C6 9EF1 ( disk.asm):02649 LDX FCBTMP POINT X TO SYSTEM FCB D4C8 EF0B ( disk.asm):02650 STU FCBBUF,X *SET THE RANDOM FILE BUFFER POINTER TO THE 'COPY' RAM BUFFER ( disk.asm):02651 * *THIS WILL CAUSE THE SYSTEM TO 'HANG' IF AN ERROR OCCURS DURING COPY. D4CA BDC2EA ( disk.asm):02652 JSR >LC2EA GO 'GET' OR 'PUT' DATA TO THE SYSTEM FCB D4CD 6C61 ( disk.asm):02653 INC $01,S ADD 256 (ONE SECTOR) TO THE BUFFER POINTER D4CF 3544 ( disk.asm):02654 PULS B,U GET THE SECTOR COUNTER AND BUFFER POINER D4D1 5A ( disk.asm):02655 DECB DECREMENT SECTOR COUNTER D4D2 26F0 ( disk.asm):02656 BNE LD4C4 BRANCH IF ALL SECTORS NOT DONE D4D4 9EF1 ( disk.asm):02657 LD4D4 LDX FCBTMP POINT X TO SYSTEM FCB D4D6 CE0989 ( disk.asm):02658 LDU #DFLBUF * RESET THE RANDOM FILE BUFFER POINTER FOR THE SYSTEM D4D9 EF0B ( disk.asm):02659 STU FCBBUF,X * FCB TO THE BOTTOM OF RANDOM FILE BUFFER AREA D4DB D6D8 ( disk.asm):02660 LDB VD8 =GRAB THE 'GET'/'PUT' FLAG, 'AND' IT WITH THE GRAN D4DD E467 ( disk.asm):02661 ANDB $07,S =TEST FLAG - CLOSE THE FILE IF 'GET'ING DATA AND D4DF 2709 ( disk.asm):02662 BEQ LD4EA =THIS IS NOT THE FIRST TIME THROUGH THE LOOP D4E1 6F67 ( disk.asm):02663 CLR $07,S RESET THE GRAN TEST FLAG IF FIRST TIME THROUGH LOOP D4E3 EC6A ( disk.asm):02664 LDD 10,S *GET THE NUMBER OF BYTES IN THE LAST SECTOR, D4E5 8A80 ( disk.asm):02665 ORA #$80 *'OR' IN THE PRE-SAVED FLAG AND D4E7 ED8813 ( disk.asm):02666 STD FCBLST,X *SAVE THE NUMBER OF BYTES IN THE LAST SECTOR IN THE FCB D4EA 7ECB06 ( disk.asm):02667 LD4EA JMP >LCB06 CLOSE THE FILE ( disk.asm):02668 * DSKI$ COMMAND D4ED 8D38 ( disk.asm):02669 DSKI BSR LD527 GET THE DRIVE, TRACK AND SECTOR NUMBERS D4EF 8D2B ( disk.asm):02670 BSR LD51C * EVALUATE STRING VARIABLE 1 AND SAVE D4F1 3410 ( disk.asm):02671 PSHS X * THE DESCRIPTOR ADDRESS ON THE STACK D4F3 8D27 ( disk.asm):02672 BSR LD51C = EVALUATE STRING VARIABLE 2 AND SAVE D4F5 3410 ( disk.asm):02673 PSHS X = THE DESCRiPTOR ADDRESS ON THE STACK D4F7 C602 ( disk.asm):02674 LDB #$02 DSKCON READ OP CODE D4F9 BDD58F ( disk.asm):02675 JSR >LD58F REAO A SECTOR INTO DBUF0 D4FC CE0680 ( disk.asm):02676 LDU #DBUF0+128 POINT U TO TOP HALF OF DBUF0 D4FF 3510 ( disk.asm):02677 PULS X GET STRING 2 DESCRIPTOR ADDRESS D501 8D05 ( disk.asm):02678 BSR LD508 PUT STRING 2 INTO STRING SPACE D503 CE0600 ( disk.asm):02679 LDU #DBUF0 POINT U TO BOTTOM HALF OF DBUF0 D506 3510 ( disk.asm):02680 PULS X GET STRING 1 DESCRIPTOR ADDRESS D508 3450 ( disk.asm):02681 LD508 PSHS U,X PUT STRING DESCRIPTOR & SOURCE POINTER ON THE STACK D50A C680 ( disk.asm):02682 LDB #128 * D50C BDB50F ( disk.asm):02683 JSR >LB50F * RESERVE 128 BYTES IN STRING SPACE D50F 3384 ( disk.asm):02684 LEAU ,X POINT U TO RESERVED STRING SPACE D511 3510 ( disk.asm):02685 PULS X GET STRING DESCRIPTOR ADDRESS D513 E784 ( disk.asm):02686 STB ,X * SAVE DESCRIPTOR DATA (LENGTH AND ADDRESS) D515 EF02 ( disk.asm):02687 STU $02,X * OF THE NEW STRING D517 3510 ( disk.asm):02688 PULS X GET THE SOURCE (DBUF0) POINTER D519 7EA59A ( disk.asm):02689 LD519 JMP >LA59A MOVE SECTOR DATA FROM DBUF0 TO STRING SPACE D51C BDB26D ( disk.asm):02690 LD51C JSR SYNCOMMA SYNTAX CHECK FOR A COMMA D51F 8EB357 ( disk.asm):02691 LDX #LB357 POINT X TO EVALUATE VARIABLE ROUTINE D522 8D2F ( disk.asm):02692 BSR LD553 EVALUATE A VARIABLE D524 7EB146 ( disk.asm):02693 LD524 JMP >LB146 'TM' ERROR IF NUMERIC VARIABLE ( disk.asm):02694 * EVALUATE DRIVE, TRACK AND SECTOR NUMBERS D527 BDB70B ( disk.asm):02695 LD527 JSR EVALEXPB EVALUATE EXPRESSION, RETURN VALUE IN ACCB D52A C103 ( disk.asm):02696 CMPB #$03 * COMPARE TO 3 (HIGHEST DRIVE NUMBER) - D52C 221C ( disk.asm):02697 BHI LD54A * 'FC' ERROR IF IT’S > 3 D52E 3404 ( disk.asm):02698 PSHS B SAVE DRIVE NUMBER ON THE STACK D530 BDB738 ( disk.asm):02699 JSR >LB738 SYNTAX CHECK FOR COMMA. EVALUATE EXPRESSION (TRACK NUMBER) D533 C122 ( disk.asm):02700 CMPB #TRKMAX-1 * CHECK FOR MAXIMUM TRACK NUMBER D535 2213 ( disk.asm):02701 BHI LD54A * 'FC' ERROR IF TRACK NUMBER > 34 D537 3404 ( disk.asm):02702 PSHS B SAVE TRACK NUMBER ON THE STACK D539 BDB738 ( disk.asm):02703 JSR >LB738 SYNTAX CHECK FOR COMMA, EVALUATE EXPRESSION (SECTOR NUMBER) D53C D7ED ( disk.asm):02704 STB DSEC SAVE SECTOR NUMBER IN DSKCON VARIABLE D53E 5A ( disk.asm):02705 DECB *USELESS INSTRUCTION. NEXT INSTRUCTION SHOULD JUST D53F C111 ( disk.asm):02706 CMPB #SECMAX-1 *CHECK FOR MAXIMUM SECTOR NUMBER (SECMAX) D541 2207 ( disk.asm):02707 BHI LD54A 'FC' ERROR IF SECTOR NUMBER TOO BIG D543 3506 ( disk.asm):02708 PULS A,B * GET TRACK AND DRIVE NUMBER OFF OF D545 97EC ( disk.asm):02709 STA DCTRK * THE STACK AND SAVE IN DSKCON D547 D7EB ( disk.asm):02710 STB DCDRV * VARIABLES D549 39 ( disk.asm):02711 RTS D54A 7EB44A ( disk.asm):02712 LD54A JMP >LB44A JUMP TO 'FC' ERROR D54D BDB26D ( disk.asm):02713 LD54D JSR SYNCOMMA SYNTAX CHECK FOR COMMA D550 8EB156 ( disk.asm):02714 LDX #LB156 POINT X TO 'EVALUATE EXPRESSION' ROUTINE ADDRESS D553 D6EB ( disk.asm):02715 LD553 LDB DCDRV * GET THE DSKCON DRIVE, TRACK AND D555 DEEC ( disk.asm):02716 LDU DCTRK * SECTOR VALUES AND SAVE THEM ON THE STACK D557 3444 ( disk.asm):02717 PSHS U,B * D559 AD84 ( disk.asm):02718 JSR ,X GO EVALUATE AN EXPRESSION OR A VARIABLE D55B 3544 ( disk.asm):02719 PULS B,U * GET THE DRIVE, TRACK AND SECTOR D55D D7EB ( disk.asm):02720 STB DCDRV * NUMBERS OFF OF THE STACK AND PUT D55F DFEC ( disk.asm):02721 STU DCTRK * THEM BACK INTO THE DSKCON VARIABLES D561 39 ( disk.asm):02722 RTS ( disk.asm):02723 * DSKO$ COMMAND D562 8DC3 ( disk.asm):02724 DSKO BSR LD527 GET THE DRIVE, TRACK AND SECTOR NUMBERS D564 8DE7 ( disk.asm):02725 BSR LD54D GET THE DESCRIPTOR OF STRING 1 D566 8DBC ( disk.asm):02726 BSR LD524 'TM' ERROR IF NUMERIC EXPRESSION D568 9E52 ( disk.asm):02727 LDX FPA0+2 * GET STRING 1 DESCRIPTOR ADDRESS D56A 3410 ( disk.asm):02728 PSHS X * AND SAVE IT ON THE STACK D56C 8DDF ( disk.asm):02729 BSR LD54D GET THE DESCRIPTOR OF STRING 2 D56E BDB654 ( disk.asm):02730 JSR >LB654 *GET LENGTH AND ADDRESS OF STRING 2 AND D571 3414 ( disk.asm):02731 PSHS X,B *SAVE THEM ON THE STACK D573 5F ( disk.asm):02732 CLRB SET CLEAR COUNTER TO 256 (FULL SECTOR BUFFER) D574 8E0600 ( disk.asm):02733 LDX #DBUF0 USE DBUF0 AS THE DSKO$ I/O BUFFER D577 6F80 ( disk.asm):02734 LD577 CLR ,X+ CLEAR A BYTE IN I/O BUFFER D579 5A ( disk.asm):02735 DECB DECREMENT CLEAR COUNTER D57A 26FB ( disk.asm):02736 BNE LD577 BRANCH IF ALL 256 BYTES NOT CLEARED D57C 3514 ( disk.asm):02737 PULS B,X GET THE LENGTH AND ADDRESS OF STRING 2 D57E CE0680 ( disk.asm):02738 LDU #DBUF0+128 POINT X TO STRING 2 DESTINATION D581 8D96 ( disk.asm):02739 BSR LD519 MOVE STRING 2 DATA INTO DBUF0 D583 3510 ( disk.asm):02740 PULS X POINT X TO STRING 1 DESCRIPTOR D585 BDB659 ( disk.asm):02741 JSR >LB659 GET THE LENGTH AND ADDRESS OF STRING 1 D588 CE0600 ( disk.asm):02742 LDU #DBUF0 POINT U TO STRING 1 DESTINATION D58B 8D8C ( disk.asm):02743 BSR LD519 MOVE STRING 1 DATA INTO DBUF0 D58D C603 ( disk.asm):02744 LDB #$03 DSKCON WRITE OP CODE D58F 8E0600 ( disk.asm):02745 LD58F LDX #DBUF0 POINT X TO I/O BUFFER (DBUF0) D592 9FEE ( disk.asm):02746 STX DCBPT * D594 D7EA ( disk.asm):02747 STB DCOPC * SAVE NEW DSKCON BUFFER POINTER AND OP CODE VARIABLES D596 7ED6F2 ( disk.asm):02748 JMP >LD6F2 GO WRITE OUT A SECTOR ( disk.asm):02749 * DSKINI COMMAND D599 1027D082 ( disk.asm):02750 DSKINI LBEQ LA61F BRANCH TO 'DN' ERROR IF NO DRIVE NUMBER SPECIFIED D59D BDD256 ( disk.asm):02751 JSR >LD256 CALCULATE DRIVE NUMBER D5A0 C604 ( disk.asm):02752 LDB #$04 SKIP FACTOR DEFAULT VALUE D5A2 9DA5 ( disk.asm):02753 JSR GETCCH GET CURRENT INPUT CHAR FROM BASiC D5A4 270C ( disk.asm):02754 BEQ LD5B2 BRANCH IF END OF LINE D5A6 BDB738 ( disk.asm):02755 JSR >LB738 SYNTAX CHECK FOR COMMA AND EVALUATE EXPRESSION D5A9 C111 ( disk.asm):02756 CMPB #17 MAX VALUE OF SKIP FACTOR = 16 D5AB 1024DE9B ( disk.asm):02757 LBHS LB44A 'ILLEGAL FUNCTION CALL' IF BAD SKIP FACTOR D5AF BDA5C7 ( disk.asm):02758 JSR >LA5C7 SYNTAX ERROR IF MORE CHARACTERS ON THE LINE D5B2 3404 ( disk.asm):02759 LD5B2 PSHS B SAVE SKIP FACTOR ON THE STACK D5B4 8E0712 ( disk.asm):02760 LDX #DBUF1+SECMAX POINT TO END OF LOGICAL SECTOR NUMBER STORAGE AREA D5B7 C612 ( disk.asm):02761 LDB #SECMAX 18 SECTORS PER TRACK D5B9 6F82 ( disk.asm):02762 LD5B9 CLR ,-X CLEAR A BYTE IN THE BUFFER D5BB 5A ( disk.asm):02763 DECB CLEARED ALL 18? D5BC 26FB ( disk.asm):02764 BNE LD5B9 KEEP GOING IF NOT D5BE 4F ( disk.asm):02765 CLRA RESET PHYSICAL SECTOR COUNTER D5BF 200D ( disk.asm):02766 BRA LD5CE START WITH FIRST PHYSICAL SECTOR = 1 ( disk.asm):02767 * CALCULATE LOGICAL SECTOR NUMBERS D5C1 EBE4 ( disk.asm):02768 LD5C1 ADDB ,S ADD SKIP FACTOR TO LOGICAL SECTOR COUNTER D5C3 5C ( disk.asm):02769 LD5C3 INCB ADD ONE TO LOGICAL SECTOR COUNTER D5C4 C012 ( disk.asm):02770 LD5C4 SUBB #SECMAX SUBTRACT MAX NUMBER OF SECTORS D5C6 24FC ( disk.asm):02771 BHS LD5C4 BRANCH UNTIL 0 > ACCB >= -18 D5C8 CB12 ( disk.asm):02772 ADDB #SECMAX ADD 18, NOW ACCB IS 0-17 D5CA 6D85 ( disk.asm):02773 TST B,X IS ANYTHING STORED HERE ALREADY? D5CC 26F5 ( disk.asm):02774 BNE LD5C3 YES - GET ANOTHER SECTOR D5CE 4C ( disk.asm):02775 LD5CE INCA * INCREMENT PHYSICAL SECTOR NUMBER AND D5CF A785 ( disk.asm):02776 STA B,X * SAVE IT IN THE RAM BUFFER D5D1 8112 ( disk.asm):02777 CMPA #SECMAX FINISHED WITH ALL SECTORS? D5D3 25EC ( disk.asm):02778 BLO LD5C1 NO - KEEP GOING D5D5 3261 ( disk.asm):02779 LEAS $01,S REMOVE SKIP FACTOR FROM STACK D5D7 8E220F ( disk.asm):02780 LDX #DFLBUF+$1888-2 GET TOP OF RAM USED BY DSKINI D5DA 9C27 ( disk.asm):02781 CMPX MEMSIZ IS IT > CLEARED AREA? D5DC 1022D664 ( disk.asm):02782 LBHI LAC44 'OUT OF MEMORY' ERROR IF > CLEARED AREA D5E0 BDCAE9 ( disk.asm):02783 JSR DVEC7 CLOSE ALL FILES D5E3 73095C ( disk.asm):02784 COM DRESFL SET RESET FLAG TO $FF - THIS WILL CAUSE A DOS RESET D5E6 10CE0800 ( disk.asm):02785 LDS #DBUF1+SECLEN SET STACK TO TOP OF DBUF1 D5EA BD95AC ( disk.asm):02786 JSR >L95AC RESET SAM TO DISPLAY PAGE ZERO AND ALPHA GRAPHICS D5ED 8600 ( disk.asm):02787 LDA #$00 YOU COULD DELETE THIS INSTRUCTION AND CHANGE FOLLOWING STA TO CLR D5EF 97EA ( disk.asm):02788 STA DCOPC RESTORE HEAD TO TRACK ZERO DSKCON OP CODE D5F1 0FEC ( disk.asm):02789 CLR DCTRK SET DSKCON TRACK VARIABLE TO TRACK ZERO D5F3 BDD6F2 ( disk.asm):02790 JSR >LD6F2 RESTORE HEAD TO TRACK ZERO D5F6 7F0985 ( disk.asm):02791 CLR RDYTMR RESET THE READY TIMER D5F9 86C0 ( disk.asm):02792 LDA #$C0 * FOC READ ADDRESS CODE D5FB B7FF48 ( disk.asm):02793 STA FDCREG * D5FE BDD7D1 ( disk.asm):02794 JSR >LD7D1 CHECK DRIVE READY - WAIT UNTIL READY D601 271D ( disk.asm):02795 BEQ LD620 BRANCH IF DRIVES READY D603 7ED688 ( disk.asm):02796 JMP >LD688 ERROR IF DRIVES NOT READY D606 8116 ( disk.asm):02797 LD606 CMPA #22 = CHECK FOR TRACK 22 (PRECOMPENSATION) D608 2508 ( disk.asm):02798 BLO LD612 = AND BRANCH IF < TRACK 22 - NO PRECOMP D60A B60986 ( disk.asm):02799 LDA DRGRAM * GET THE RAM IMAGE OF DSKREG, 'OR' D60D 8A10 ( disk.asm):02800 ORA #$10 * IN THE PRECOMPENSATION FLAG AND D60F B7FF40 ( disk.asm):02801 STA DSKREG * SEND IT TO DSKREG D612 8653 ( disk.asm):02802 LD612 LDA #$53 = GET STEP IN COMMAND D614 B7FF48 ( disk.asm):02803 STA FDCREG = AND SEND IT TO THE 1793 D617 1E88 ( disk.asm):02804 EXG A,A * DELAY AFTER ISSUING COMMAND TO 1793 D619 1E88 ( disk.asm):02805 EXG A,A * D61B BDD7D1 ( disk.asm):02806 JSR >LD7D1 CHECK DRIVE READY D61E 2668 ( disk.asm):02807 BNE LD688 BRANCH IF NOT READY - ISSUE AN ERROR D620 BDD7F0 ( disk.asm):02808 LD620 JSR >LD7F0 WAIT A WHILE D623 8D6C ( disk.asm):02809 BSR LD691 BUILD A FORMATTED TRACK IN RAM D625 108EFF4B ( disk.asm):02810 LDY #FDCREG+3 Y POINTS TO 1793 DATA REGISTER D629 1A50 ( disk.asm):02811 ORCC #$50 DISABLE INTERRUPTS D62B 8ED64F ( disk.asm):02812 LDX #LD64F * GET RETURN ADDRESS AND STORE D62E BF0983 ( disk.asm):02813 STX DNMIVC * IT IN THE NON MASKABLE INTERRUPT VECTOR D631 8E0989 ( disk.asm):02814 LDX #DFLBUF POINT X TO THE FORMATTED TRACK RAM IMAGE D634 B6FF48 ( disk.asm):02815 LDA FDCREG RESET STATUS OF THE 1793 D637 86FF ( disk.asm):02816 LDA #$FF * ENABLE THE NMI FLAG TO VECTOR D639 B70982 ( disk.asm):02817 STA NMIFLG * OUT OF AN I/O LOOP UPON AN NMI INTERRUPT D63C C6F4 ( disk.asm):02818 LDB #$F4 = GET WRITE TRACK COMMAND AND D63E F7FF48 ( disk.asm):02819 STB FDCREG = SEND TO 1793 D641 B60986 ( disk.asm):02820 LDA DRGRAM * GET THE DSKREG RAM IMAGE AND 'OR' IN THE D644 8A80 ( disk.asm):02821 ORA #$80 * FLAG WHICH WILL ENABLE THE 1793 TO HALT D646 B7FF40 ( disk.asm):02822 STA DSKREG * THE 6809. SEND RESULT TO DSKREG D649 E680 ( disk.asm):02823 LD649 LDB ,X+ = GET A BYTE FROM THE FORMATTED TRACK D64B E7A4 ( disk.asm):02824 STB ,Y = RAM IMAGE, SEND IT TO THE 1793 AND D64D 20FA ( disk.asm):02825 BRA LD649 = LOOP BACK TO GET ANOTHER BYTE D64F B6FF48 ( disk.asm):02826 LD64F LDA FDCREG GET STATUS D652 1CAF ( disk.asm):02827 ANDCC #$AF ENABLE INTERRUPTS D654 8444 ( disk.asm):02828 ANDA #$44 * KEEP ONLY WRITE PROTECT & LOST DATA D656 97F0 ( disk.asm):02829 STA DCSTA * AND SAVE IT IN THE DSKCON STATUS BYTE D658 262E ( disk.asm):02830 BNE LD688 BRANCH IF ERROR D65A 0CEC ( disk.asm):02831 INC DCTRK SKIP TO THE NEXT TRACK D65C 96EC ( disk.asm):02832 LDA DCTRK GET THE TRACK NUMBER D65E 8123 ( disk.asm):02833 CMPA #TRKMAX WAS IT THE LAST TRACK D660 26A4 ( disk.asm):02834 BNE LD606 NO - KEEP GOING ( disk.asm):02835 * VERIFY THAT ALL SECTORS ARE READABLE D662 8602 ( disk.asm):02836 LDA #$02 = GET THE DSKCON READ OP CODE D664 97EA ( disk.asm):02837 STA DCOPC = AND SAVE IT IN THE DSKCON VARIABLE D666 8E0600 ( disk.asm):02838 LDX #DBUF0 * POINT THE DSKCON BUFFER POINTER D669 9FEE ( disk.asm):02839 STX DCBPT * TO DBUF0 D66B CE0700 ( disk.asm):02840 LDU #DBUF1 POINT U TO THE LOGICAL SECTOR NUMBERS D66E 4F ( disk.asm):02841 CLRA RESET THE TRACK COUNTER TO ZERO D66F 97EC ( disk.asm):02842 LD66F STA DCTRK SET THE DSKCON TRACK VARIABLE D671 5F ( disk.asm):02843 CLRB RESET THE SECTOR COUNTER D672 A6C5 ( disk.asm):02844 LD672 LDA B,U GET THE PHYSICAL SECTOR NUMBER D674 97ED ( disk.asm):02845 STA DSEC SAVE DSKCON SECTOR VARIABLE D676 BDD6F2 ( disk.asm):02846 JSR >LD6F2 READ A SECTOR D679 5C ( disk.asm):02847 INCB * INCREMENT THE SECTOR COUNTER D67A C112 ( disk.asm):02848 CMPB #SECMAX * AND COMPARE IT TO MAXIMUM SECTOR NUMBER D67C 25F4 ( disk.asm):02849 BLO LD672 * AND KEEP LOOPING IF MORE SECTORS LEFT D67E 96EC ( disk.asm):02850 LDA DCTRK = GET THE CURRENT TRACK NUMBER D680 4C ( disk.asm):02851 INCA = ADD ONE TO IT, COMPARE TO THE MAXIMUM TRACK D681 8123 ( disk.asm):02852 CMPA #TRKMAX = NUMBER AND KEEP LOOPING IF D683 25EA ( disk.asm):02853 BLO LD66F = THERE ARE STILL TRACKS TO DO D685 7ED2CD ( disk.asm):02854 JMP >LD2CD GO CHECK FOR A DOS RESET D688 7F0986 ( disk.asm):02855 LD688 CLR DRGRAM CLEAR RAM IMAGE OF DSKREG D68B 7FFF40 ( disk.asm):02856 CLR DSKREG CLEAR DSKREG - TURN DISK MOTORS OFF D68E 7ED701 ( disk.asm):02857 JMP >LD701 PROCESS DRIVES NOT READY ERROR ( disk.asm):02858 * BUILD A FORMATTED TRACK OF DATA IN RAM STARTING AT DFLBUF. D691 8E0989 ( disk.asm):02859 LD691 LDX #DFLBUF START TRACK BUFFER AT DFLBUF D694 CC204E ( disk.asm):02860 LDD #$204E GET SET TO WRITE 32 BYTES OF $4E D697 8D29 ( disk.asm):02861 BSR LD6C2 GO WRITE GAP IV D699 5F ( disk.asm):02862 CLRB RESET SECTOR COUNTER D69A 3404 ( disk.asm):02863 LD69A PSHS B SAVE SECTOR COUNTER D69C CE0700 ( disk.asm):02864 LDU #DBUF1 POINT U TO THE TABLE OF LOGICAL SECTORS D69F E6C5 ( disk.asm):02865 LDB B,U * GET LOGICAL SECTOR NUMBER FROM TABLE AND D6A1 D7ED ( disk.asm):02866 STB DSEC * SAVE IT IN THE DSKCON VARIABLE D6A3 CED6D4 ( disk.asm):02867 LDU #LD6D4 POINT U TO TABLE OF SECTOR FORMATTING DATA D6A6 C603 ( disk.asm):02868 LDB #$03 * GET FIRST 3 DATA BLOCKS AND D6A8 8D1E ( disk.asm):02869 BSR LD6C8 * WRITE THEM TO BUFFER D6AA 96EC ( disk.asm):02870 LDA DCTRK = GET TRACK NUMBER AND STORE lT D6AC A780 ( disk.asm):02871 STA ,X+ = IN THE RAM BUFFER D6AE 6F80 ( disk.asm):02872 CLR ,X+ CLEAR A BYTE (SIDE NUMBER) IN BUFFER D6B0 96ED ( disk.asm):02873 LDA DSEC * GET SECTOR NUMBER AND D6B2 A780 ( disk.asm):02874 STA ,X+ * STORE IT IN THE BUFFER D6B4 C609 ( disk.asm):02875 LDB #$09 = GET THE LAST NINE DATA BLOCKS AND D6B6 8D10 ( disk.asm):02876 BSR LD6C8 = WRITE THEM TO THE BUFFER D6B8 3504 ( disk.asm):02877 PULS B GET SECTOR COUNTER D6BA 5C ( disk.asm):02878 INCB NEXT SECTOR D6BB C112 ( disk.asm):02879 CMPB #SECMAX 18 SECTORS PER TRACK D6BD 25DB ( disk.asm):02880 BLO LD69A BRANCH IF ALL SECTORS NOT DONE D6BF CCC84E ( disk.asm):02881 LDD #$C84E WRITE 200 BYTES OF $4E AT END OF TRACK ( disk.asm):02882 * WRITE ACCA BYTES OF ACCB INTO BUFFER D6C2 E780 ( disk.asm):02883 LD6C2 STB ,X+ STORE A BYTE IN THE BUFFER D6C4 4A ( disk.asm):02884 DECA DECREMENT COUNTER D6C5 26FB ( disk.asm):02885 BNE LD6C2 BRANCH IF ALL BYTES NOT MOVED D6C7 39 ( disk.asm):02886 RTS D6C8 3404 ( disk.asm):02887 LD6C8 PSHS B SAVE THE COUNTER ON THE STACK D6CA ECC1 ( disk.asm):02888 LDD ,U++ GET TWO BYTES OF DATA FROM THE TABLE D6CC 8DF4 ( disk.asm):02889 BSR LD6C2 WRITE ACCA BYTES OF ACCB INTO THE BUFFER D6CE 3504 ( disk.asm):02890 PULS B * GET THE COUNTER BACK, DECREMENT D6D0 5A ( disk.asm):02891 DECB * IT AND BRANCH IF ALL DATA BLOCKS D6D1 26F5 ( disk.asm):02892 BNE LD6C8 * NOT DONE D6D3 39 ( disk.asm):02893 RTS ( disk.asm):02894 * DATA USED TO FORMAT A SECTOR ON THE DISK ( disk.asm):02895 * THESE DATA ARE CLOSE TO THE IBM SYSTEM 34 FORMAT FOR 256 BYTE SECTORS. ( disk.asm):02896 * DOUBLE DENSITY. THE FORMAT GENERALLY CONFORMS TO THAT SPECIFIED ON THE ( disk.asm):02897 * 1793 DATA SHEET. THE GAP SIZES HAVE BEEN REDUCED TO THE MINIMUM ( disk.asm):02898 * ALLOWABLE. THE IBM FORMAT USES $40 AS THE FILL CHARACTER FOR THE DATA ( disk.asm):02899 * BLOCKS WHILE COLOR DOS USES AN $FF AS THE FILL CHARACTER. D6D4 0800 ( disk.asm):02900 LD6D4 FCB 8,0 SYNC FIELD D6D6 03F5 ( disk.asm):02901 FCB 3,$F5 D6D8 01FE ( disk.asm):02902 FCB 1,$FE ID ADDRESS MARK (AM1) ( disk.asm):02903 * TRACK, SIDE, AND SECTOR NUMBERS ARE INSERTED HERE D6DA 0101 ( disk.asm):02904 FCB 1,1 SECTOR SIZE (256 BYTE SECTORS) D6DC 01F7 ( disk.asm):02905 FCB 1,$F7 CRC REQUEST D6DE 164E ( disk.asm):02906 FCB 22,$4E GAP II (POST-ID GAP) D6E0 0C00 ( disk.asm):02907 FCB 12,0 SYNC FIELD D6E2 03F5 ( disk.asm):02908 FCB 3,$F5 D6E4 01FB ( disk.asm):02909 FCB 1,$FB DATA ADDRESS MARK (AM2) D6E6 00FF ( disk.asm):02910 FCB 0,$FF DATA FIELD (256 BYTES) D6E8 01F7 ( disk.asm):02911 FCB 1,$F7 CRC REQUEST D6EA 184E ( disk.asm):02912 FCB 24,$4E GAP III (POST DATA GAP) ( disk.asm):02913 * DOS COMMAND D6EC 2654 ( disk.asm):02914 DOS BNE LD742 RETURN IF ARGUMENT GIVEN D6EE 6E9FC00A ( disk.asm):02915 JMP [DOSVEC] JUMP TO THE DOS COMMAND D6F2 3404 ( disk.asm):02916 LD6F2 PSHS B SAVE ACCB D6F4 C605 ( disk.asm):02917 LDB #$05 5 RETRIES D6F6 F70988 ( disk.asm):02918 STB ATTCTR SAVE RETRY COUNT D6F9 3504 ( disk.asm):02919 PULS B RESTORE ACCB D6FB 8D62 ( disk.asm):02920 LD6FB BSR DSKCON GO EXECUTE COMMAND D6FD 0DF0 ( disk.asm):02921 TST DCSTA CHECK STATUS D6FF 270D ( disk.asm):02922 BEQ LD70E BRANCH IF NO ERRORS D701 96F0 ( disk.asm):02923 LD701 LDA DCSTA GET DSKCON ERROR STATUS D703 C63C ( disk.asm):02924 LDB #2*30 'WRITE PROTECTED' ERROR D705 8540 ( disk.asm):02925 BITA #$40 CHECK BIT 6 OF STATUS D707 2602 ( disk.asm):02926 BNE LD70B BRANCH IF WRITE PROTECT ERROR D709 C628 ( disk.asm):02927 LD709 LDB #2*20 'I/O ERROR' D70B 7EAC46 ( disk.asm):02928 LD70B JMP >LAC46 JUMP TO ERROR DRIVER D70E 3402 ( disk.asm):02929 LD70E PSHS A SAVE ACCA D710 96EA ( disk.asm):02930 LDA DCOPC GET OPERATION CODE D712 8103 ( disk.asm):02931 CMPA #$03 CHECK FOR WRITE SECTOR COMMAND D714 3502 ( disk.asm):02932 PULS A RESTORE ACCA D716 262A ( disk.asm):02933 BNE LD742 RETURN IF NOT WRITE SECTOR D718 7D0987 ( disk.asm):02934 TST DVERFL CHECK VERIFY FLAG D71B 2725 ( disk.asm):02935 BEQ LD742 RETURN IF NO VERIFY D71D 3456 ( disk.asm):02936 PSHS U,X,B,A SAVE REGISTERS D71F 8602 ( disk.asm):02937 LDA #$02 READ OPERATION CODE D721 97EA ( disk.asm):02938 STA DCOPC STORE TO DSKCON PARAMETER D723 DEEE ( disk.asm):02939 LDU DCBPT POINT U TO WRITE BUFFER ADDRESS D725 8E0700 ( disk.asm):02940 LDX #DBUF1 * ADDRESS OF VERIFY BUFFER D728 9FEE ( disk.asm):02941 STX DCBPT * TO DSKCON VARIABLE D72A 8D33 ( disk.asm):02942 BSR DSKCON GO READ SECTOR D72C DFEE ( disk.asm):02943 STU DCBPT RESTORE WRITE BUFFER D72E 8603 ( disk.asm):02944 LDA #$03 WRITE OP CODE D730 97EA ( disk.asm):02945 STA DCOPC SAVE IN DSKCON VARIABLE D732 96F0 ( disk.asm):02946 LDA DCSTA CHECK STATUS FOR THE READ OPERATION D734 260D ( disk.asm):02947 BNE LD743 BRANCH IF ERROR D736 5F ( disk.asm):02948 CLRB CHECK 256 BYTES D737 A680 ( disk.asm):02949 LD737 LDA ,X+ GET BYTE FROM WRITE BUFFER D739 A1C0 ( disk.asm):02950 CMPA ,U+ COMPARE TO READ BUFFER D73B 2606 ( disk.asm):02951 BNE LD743 BRANCH IF NOT EQUAL D73D 5A ( disk.asm):02952 DECB * DECREMENT BYTE COUNTER AND D73E 26F7 ( disk.asm):02953 BNE LD737 * BRANCH IF NOT DONE D740 3556 ( disk.asm):02954 PULS A,B,X,U RESTORE REGISTERS D742 39 ( disk.asm):02955 LD742 RTS D743 3556 ( disk.asm):02956 LD743 PULS A,B,X,U RESTORE REGISTERS D745 7A0988 ( disk.asm):02957 DEC ATTCTR DECREMENT THE VERIFY COUNTER D748 26B1 ( disk.asm):02958 BNE LD6FB BRANCH IF MORE TRIES LEFT D74A C648 ( disk.asm):02959 LDB #2*36 'VERIFY ERROR' D74C 20BD ( disk.asm):02960 BRA LD70B JUMP TO ERROR HANDLER ( disk.asm):02961 * VERIFY COMMAND D74E 5F ( disk.asm):02962 VERIFY CLRB OFF FLAG = 0 D74F 81AA ( disk.asm):02963 CMPA #$AA OFF TOKEN ? D751 2707 ( disk.asm):02964 BEQ LD75A YES D753 53 ( disk.asm):02965 COMB ON FLAG = $FF D754 8188 ( disk.asm):02966 CMPA #$88 ON TOKEN D756 1026DB1D ( disk.asm):02967 LBNE LB277 BRANCH TO 'SYNTAX ERROR' IF NOT ON OR OFF D75A F70987 ( disk.asm):02968 LD75A STB DVERFL SET VERIFY FLAG D75D 0E9F ( disk.asm):02969 JMP GETNCH GET NEXT CHARACTER FROM BASIC ( disk.asm):02970 * DSKCON ROUTINE D75F 3476 ( disk.asm):02971 DSKCON PSHS U,Y,X,B,A SAVE REGISTERS D761 8605 ( disk.asm):02972 LDA #$05 * GET RETRY COUNT AND D763 3402 ( disk.asm):02973 PSHS A * SAVE IT ON THE STACK D765 7F0985 ( disk.asm):02974 LD765 CLR RDYTMR RESET DRIVE NOT READY TIMER D768 D6EB ( disk.asm):02975 LDB DCDRV GET DRIVE NUMBER D76A 8ED89D ( disk.asm):02976 LDX #LD89D POINT X TO DRIVE ENABLE MASKS D76D B60986 ( disk.asm):02977 LDA DRGRAM GET DSKREG IMAGE D770 84A8 ( disk.asm):02978 ANDA #$A8 KEEP MOTOR STATUS, DOUBLE DENSITY. HALT ENABLE D772 AA85 ( disk.asm):02979 ORA B,X 'OR' IN DRIVE SELECT DATA D774 8A20 ( disk.asm):02980 ORA #$20 'OR' IN DOUBLE DENSITY D776 D6EC ( disk.asm):02981 LDB DCTRK GET TRACK NUMBER D778 C116 ( disk.asm):02982 CMPB #22 PRECOMPENSATION STARTS AT TRACK 22 D77A 2502 ( disk.asm):02983 BLO LD77E BRANCH IF LESS THAN 22 D77C 8A10 ( disk.asm):02984 ORA #$10 TURN ON WRITE PRECOMPENSATION IF >= 22 D77E 1F89 ( disk.asm):02985 LD77E TFR A,B SAVE PARTIAL IMAGE IN ACCB D780 8A08 ( disk.asm):02986 ORA #$08 'OR' IN MOTOR ON CONTROL BIT D782 B70986 ( disk.asm):02987 STA DRGRAM SAVE IMAGE IN RAM D785 B7FF40 ( disk.asm):02988 STA DSKREG PROGRAM THE 1793 CONTROL REGISTER D788 C508 ( disk.asm):02989 BITB #$08 = WERE MOTORS ALREADY ON? D78A 2606 ( disk.asm):02990 BNE LD792 = DON'T WAIT FOR IT TO COME UP TO SPEED IF ALREADY ON D78C BDA7D1 ( disk.asm):02991 JSR >LA7D1 * WAIT A WHILE D78F BDA7D1 ( disk.asm):02992 JSR >LA7D1 * WAIT SOME MORE FOR MOTOR TO COME UP TO SPEED D792 8D3D ( disk.asm):02993 LD792 BSR LD7D1 WAIT UNTIL NOT BUSY OR TIME OUT D794 260A ( disk.asm):02994 BNE LD7A0 BRANCH IF TIMED OUT (DOOR OPEN. NO DISK, NO POWER. ETC.) D796 0FF0 ( disk.asm):02995 CLR DCSTA CLEAR STATUS REGISTER D798 8ED895 ( disk.asm):02996 LDX #LD895 POINT TO COMMAND JUMP VECTORS D79B D6EA ( disk.asm):02997 LDB DCOPC GET COMMAND D79D 58 ( disk.asm):02998 ASLB 2 BYTES PER COMMAND JUMP ADDRESS D79E AD95 ( disk.asm):02999 JSR [B,X] GO DO IT D7A0 3502 ( disk.asm):03000 LD7A0 PULS A GET RETRY COUNT D7A2 D6F0 ( disk.asm):03001 LDB DCSTA GET STATUS D7A4 270B ( disk.asm):03002 BEQ LD7B1 BRANCH IF NO ERRORS D7A6 4A ( disk.asm):03003 DECA DECREMENT RETRIES COUNTER D7A7 2708 ( disk.asm):03004 BEQ LD7B1 BRANCH IF NO RETRIES LEFT D7A9 3402 ( disk.asm):03005 PSHS A SAVE RETRY COUNT ON STACK D7AB 8D0B ( disk.asm):03006 BSR LD7B8 RESTORE HEAD TO TRACK 0 D7AD 26F1 ( disk.asm):03007 BNE LD7A0 BRANCH IF SEEK ERROR D7AF 20B4 ( disk.asm):03008 BRA LD765 GO TRY COMMAND AGAIN IF NO ERROR D7B1 8678 ( disk.asm):03009 LD7B1 LDA #120 120*1/60 = 2 SECONDS (1/60 SECOND FOR EACH IRQ INTERRUPT) D7B3 B70985 ( disk.asm):03010 STA RDYTMR WAIT 2 SECONDS BEFORE TURNING OFF MOTOR D7B6 35F6 ( disk.asm):03011 PULS A,B,X,Y,U,PC RESTORE REGISTERS - EXIT DSKCON ( disk.asm):03012 * RESTORE HEAD TO TRACK 0 D7B8 8E097E ( disk.asm):03013 LD7B8 LDX #DR0TRK POINT TO TRACK TABLE D7BB D6EB ( disk.asm):03014 LDB DCDRV GET DRIVE NUMBER D7BD 6F85 ( disk.asm):03015 CLR B,X ZERO TRACK NUMBER D7BF 8603 ( disk.asm):03016 LDA #$03 * RESTORE HEAD TO TRACK 0, UNLOAD THE HEAD D7C1 B7FF48 ( disk.asm):03017 STA FDCREG * AT START, 30 MS STEPPING RATE D7C4 1E88 ( disk.asm):03018 EXG A,A = D7C6 1E88 ( disk.asm):03019 EXG A,A = WAIT FOR 1793 TO RESPOND TO COMMAND D7C8 8D07 ( disk.asm):03020 BSR LD7D1 WAIT TILL DRIVE NOT BUSY D7CA 8D24 ( disk.asm):03021 BSR LD7F0 WAIT SOME MORE D7CC 8410 ( disk.asm):03022 ANDA #$10 1793 STATUS : KEEP ONLY SEEK ERROR D7CE 97F0 ( disk.asm):03023 STA DCSTA SAVE IN DSKCON STATUS D7D0 39 ( disk.asm):03024 LD7D0 RTS ( disk.asm):03025 * WAIT FOR THE 1793 TO BECOME UNBUSY. IF IT DOES NOT BECOME UNBUSY, ( disk.asm):03026 * FORCE AN INTERRUPT AND ISSUE A ‘DRIVE NOT READY’ 1793 ERROR. D7D1 9E8A ( disk.asm):03027 LD7D1 LDX ZERO GET ZERO TO X REGISTER - LONG WAIT D7D3 301F ( disk.asm):03028 LD7D3 LEAX -1,X DECREMENT LONG WAIT COUNTER D7D5 2708 ( disk.asm):03029 BEQ LD7DF lF NOT READY BY NOW, FORCE INTERRUPT D7D7 B6FF48 ( disk.asm):03030 LDA FDCREG * GET 1793 STATUS AND TEST D7DA 8501 ( disk.asm):03031 BITA #$01 * BUSY STATUS BIT D7DC 26F5 ( disk.asm):03032 BNE LD7D3 BRANCH IF BUSY D7DE 39 ( disk.asm):03033 RTS D7DF 86D0 ( disk.asm):03034 LD7DF LDA #$D0 * FORCE INTERRUPT COMMAND - TERMINATE ANY COMMAND D7E1 B7FF48 ( disk.asm):03035 STA FDCREG * IN PROCESS. DO NOT GENERATE A 1793 INTERRUPT REQUEST D7E4 1E88 ( disk.asm):03036 EXG A,A * WAIT BEFORE READING 1793 D7E6 1E88 ( disk.asm):03037 EXG A,A * D7E8 B6FF48 ( disk.asm):03038 LDA FDCREG RESET INTRQ (FDC INTERRUPT REQUEST) D7EB 8680 ( disk.asm):03039 LDA #$80 RETURN DRIVE NOT READY STATUS IF THE DRIVE DID NOT BECOME UNBUSY D7ED 97F0 ( disk.asm):03040 STA DCSTA SAVE DSKCON STATUS BYTE D7EF 39 ( disk.asm):03041 RTS ( disk.asm):03042 * MEDIUM DELAY D7F0 8E222E ( disk.asm):03043 LD7F0 LDX #8750 DELAY FOR A WHILE D7F3 301F ( disk.asm):03044 LD7F3 LEAX -1,X * DECREMENT DELAY COUNTER AND D7F5 26FC ( disk.asm):03045 BNE LD7F3 * BRANCH IF NOT DONE D7F7 39 ( disk.asm):03046 RTS ( disk.asm):03047 * READ ONE SECTOR D7F8 8680 ( disk.asm):03048 LD7F8 LDA #$80 $80 IS READ FLAG (1793 READ SECTOR) D7FA 8C ( disk.asm):03049 LD7FA FCB $8C SKIP TWO BYTES (THROWN AWAY CMPX INSTRUCTION) ( disk.asm):03050 * WRITE ONE SECTOR D7FB 86A0 ( disk.asm):03051 LD7FB LDA #$A0 $A0 IS WRITE FLAG (1793 WRITE SECTOR) D7FD 3402 ( disk.asm):03052 PSHS A SAVE READ/WRITE FLAG ON STACK D7FF 8E097E ( disk.asm):03053 LDX #DR0TRK POINT X TO TRACK NUMBER TABLE IN RAM D802 D6EB ( disk.asm):03054 LDB DCDRV GET DRIVE NUMBER D804 3A ( disk.asm):03055 ABX POINT X TO CORRECT DRIVE'S TRACK BYTE D805 E684 ( disk.asm):03056 LDB ,X GET TRACK NUMBER OF CURRENT HEAD POSITION D807 F7FF49 ( disk.asm):03057 STB FDCREG+1 SEND TO 1793 TRACK REGISTER D80A D1EC ( disk.asm):03058 CMPB DCTRK COMPARE TO DESIRED TRACK D80C 271E ( disk.asm):03059 BEQ LD82C BRANCH IF ON CORRECT TRACK D80E 96EC ( disk.asm):03060 LDA DCTRK GET TRACK DESIRED D810 B7FF4B ( disk.asm):03061 STA FDCREG+3 SEND TO 1793 DATA REGiSTER D813 A784 ( disk.asm):03062 STA ,X SAVE IN RAM TRACK IMAGE D815 8617 ( disk.asm):03063 LDA #$17 * SEEK COMMAND FOR 1793: DO NOT LOAD THE D817 B7FF48 ( disk.asm):03064 STA FDCREG * HEAD AT START, VERIFY DESTINATION TRACK, D81A 1E88 ( disk.asm):03065 EXG A,A * 30 MS STEPPING RATE - WAIT FOR D81C 1E88 ( disk.asm):03066 EXG A,A * VALID STATUS FROM 1793 D81E 8DB1 ( disk.asm):03067 BSR LD7D1 WAIT TILL NOT BUSY D820 2608 ( disk.asm):03068 BNE LD82A RETURN IF TIMED OUT D822 8DCC ( disk.asm):03069 BSR LD7F0 WAIT SOME MORE D824 8418 ( disk.asm):03070 ANDA #$18 KEEP ONLY SEEK ERROR OR CRC ERROR IN ID FIELD D826 2704 ( disk.asm):03071 BEQ LD82C BRANCH IF NO ERRORS - HEAD ON CORRECT TRACK D828 97F0 ( disk.asm):03072 STA DCSTA SAVE IN DSKCON STATUS D82A 3582 ( disk.asm):03073 LD82A PULS A,PC ( disk.asm):03074 * HEAD POSITIONED ON CORRECT TRACK D82C 96ED ( disk.asm):03075 LD82C LDA DSEC GET SECTOR NUMBER DESIRED D82E B7FF4A ( disk.asm):03076 STA FDCREG+2 SEND TO 1793 SECTOR REGISTER D831 8ED88B ( disk.asm):03077 LDX #LD88B * POINT X TO ROUTINE TO BE VECTORED D834 BF0983 ( disk.asm):03078 STX DNMIVC * TO BY NMI UPON COMPLETION OF DISK I/O AND SAVE VECTOR D837 9EEE ( disk.asm):03079 LDX DCBPT POINT X TO I/O BUFFER D839 B6FF48 ( disk.asm):03080 LDA FDCREG RESET INTRQ (FDC INTERRUPT REQUEST) D83C B60986 ( disk.asm):03081 LDA DRGRAM GET DSKREG IMAGE D83F 8A80 ( disk.asm):03082 ORA #$80 SET FLAG TO ENABLE 1793 TO HALT 6809 D841 3504 ( disk.asm):03083 PULS B GET READ/WRITE COMMAND FROM STACK D843 109E8A ( disk.asm):03084 LDY ZERO ZERO OUT Y - TIMEOUT INITIAL VALUE D846 CEFF48 ( disk.asm):03085 LDU #FDCREG U POINTS TO 1793 INTERFACE REGISTERS D849 730982 ( disk.asm):03086 COM NMIFLG NMI FLAG = $FF: ENABLE NMI VECTOR D84C 1A50 ( disk.asm):03087 ORCC #$50 DISABLE FIRQ,IRQ D84E F7FF48 ( disk.asm):03088 STB FDCREG * SEND READ/WRITE COMMAND TO 1793: SINGLE RECORD, COMPARE D851 1E88 ( disk.asm):03089 EXG A,A * FOR SIDE 0, NO 15 MS DELAY, DISABLE SIDE SELECT D853 1E88 ( disk.asm):03090 EXG A,A * COMPARE, WRITE DATA ADDRESS MARK (FB) - WAIT FOR STATUS D855 C180 ( disk.asm):03091 CMPB #$80 WAS THIS A READ? D857 271C ( disk.asm):03092 BEQ LD875 IF SO, GO LOOK FOR DATA ( disk.asm):03093 * WAIT FOR THE 1793 TO ACKNOWLEDGE READY TO WRITE DATA D859 C602 ( disk.asm):03094 LDB #$02 DRQ MASK BIT D85B E5C4 ( disk.asm):03095 LD85B BITB ,U IS 1793 READY FOR A BYTE? (DRQ SET IN STATUS BYTE) D85D 260C ( disk.asm):03096 BNE LD86B BRANCH IF SO D85F 313F ( disk.asm):03097 LEAY -1,Y DECREMENT WAIT TIMER D861 26F8 ( disk.asm):03098 BNE LD85B KEEP WAITING FOR THE 1793 DRQ D863 7F0982 ( disk.asm):03099 LD863 CLR NMIFLG RESET NMI FLAG D866 1CAF ( disk.asm):03100 ANDCC #$AF ENABLE FIRQ,IRQ D868 7ED7DF ( disk.asm):03101 JMP >LD7DF FORCE INTERRUPT, SET DRIVE NOT READY ERROR ( disk.asm):03102 * WRITE A SECTOR D86B E680 ( disk.asm):03103 LD86B LDB ,X+ GET A BYTE FROM RAM D86D F7FF4B ( disk.asm):03104 STB FDCREG+3 SEND IT TO 1793 DATA REGISTER D870 B7FF40 ( disk.asm):03105 STA DSKREG REPROGRAM FDC CONTROL REGISTER D873 20F6 ( disk.asm):03106 BRA LD86B SEND MORE DATA ( disk.asm):03107 * WAIT FOR THE 17933 TO ACKNOWLEDGE READY TO READ DATA D875 C602 ( disk.asm):03108 LD875 LDB #$02 DRQ MASK BIT D877 E5C4 ( disk.asm):03109 LD877 BITB ,U DOES THE 1793 HAVE A BYTE? (DRQ SET IN STATUS BYTE) D879 2606 ( disk.asm):03110 BNE LD881 YES, GO READ A SECTOR D87B 313F ( disk.asm):03111 LEAY -1,Y DECREMENT WAIT TIMER D87D 26F8 ( disk.asm):03112 BNE LD877 KEEP WAITING FOR 1793 DRQ D87F 20E2 ( disk.asm):03113 BRA LD863 GENERATE DRIVE NOT READY ERROR ( disk.asm):03114 * READ A SECTOR D881 F6FF4B ( disk.asm):03115 LD881 LDB FDCREG+3 GET DATA BYTE FROM 1793 DATA REGISTER D884 E780 ( disk.asm):03116 STB ,X+ PUT IT IN RAM D886 B7FF40 ( disk.asm):03117 STA DSKREG REPROGRAM FDC CONTROL REGISTER D889 20F6 ( disk.asm):03118 BRA LD881 KEEP GETTING DATA ( disk.asm):03119 * BRANCH HERE ON COMPLETION OF SECTOR READ/WRITE D88B 1CAF ( disk.asm):03120 LD88B ANDCC #$AF ENABLE IRQ, FIRO D88D B6FF48 ( disk.asm):03121 LDA FDCREG * GET STATUS & KEEP WRITE PROTECT, RECORD TYPE/WRITE D890 847C ( disk.asm):03122 ANDA #$7C * FAULT, RECORD NOT FOUND, CRC ERROR OR LOST DATA D892 97F0 ( disk.asm):03123 STA DCSTA SAVE IN DSKCON STATUS D894 39 ( disk.asm):03124 RTS ( disk.asm):03125 * DSKCON OPERATION CODE JUMP VECTORS D895 D7B8 ( disk.asm):03126 LD895 FDB LD7B8 RESTORE HEAD TO TRACK ZERO D897 D7D0 ( disk.asm):03127 FDB LD7D0 NO OP - RETURN D899 D7F8 ( disk.asm):03128 FDB LD7F8 READ SECTOR D89B D7FB ( disk.asm):03129 FDB LD7FB WRITE SECTOR ( disk.asm):03130 * DSKREG MASKS FOR DISK DRIVE SELECT D89D 01 ( disk.asm):03131 LD89D FCB 1 DRIVE SEL 0 D89E 02 ( disk.asm):03132 FCB 2 DRIVE SEL 1 D89F 04 ( disk.asm):03133 FCB 4 DRIVE SEL 2 D8A0 40 ( disk.asm):03134 FCB $40 DRIVE SEL 3 ( disk.asm):03135 * NMI SERVICE D8A1 B60982 ( disk.asm):03136 DNMISV LDA NMIFLG GET NMI FLAG D8A4 2708 ( disk.asm):03137 BEQ LD8AE RETURN IF NOT ACTIVE D8A6 BE0983 ( disk.asm):03138 LDX DNMIVC GET NEW RETURN VECTOR D8A9 AF6A ( disk.asm):03139 STX 10,S STORE AT STACKED PC SLOT ON STACK D8AB 7F0982 ( disk.asm):03140 CLR NMIFLG RESET NMI FLAG D8AE 3B ( disk.asm):03141 LD8AE RTI ( disk.asm):03142 * IRQ SERVICE D8AF B6FF03 ( disk.asm):03143 DIRQSV LDA PIA0+3 63.5 MICRO SECOND OR 60 HZ INTERRUPT? D8B2 2AFA ( disk.asm):03144 BPL LD8AE RETURN IF 63.5 MICROSECOND D8B4 B6FF02 ( disk.asm):03145 LDA PIA0+2 RESET 60 HZ PIA INTERRUPT FLAG D8B7 B60985 ( disk.asm):03146 LDA RDYTMR GET TIMER D8BA 2711 ( disk.asm):03147 BEQ LD8CD BRANCH IF NOT ACTIVE D8BC 4A ( disk.asm):03148 DECA DECREMENT THE TIMER D8BD B70985 ( disk.asm):03149 STA RDYTMR SAVE IT D8C0 260B ( disk.asm):03150 BNE LD8CD BRANCH IF NOT TIME TO TURN OFF DISK MOTORS D8C2 B60986 ( disk.asm):03151 LDA DRGRAM = GET DSKREG IMAGE D8C5 84B0 ( disk.asm):03152 ANDA #$B0 = TURN ALL MOTORS AND DRIVE SELECTS OFF D8C7 B70986 ( disk.asm):03153 STA DRGRAM = PUT IT BACK IN RAM IMAGE D8CA B7FF40 ( disk.asm):03154 STA DSKREG SEND TO CONTROL REGISTER (MOTORS OFF) D8CD 7E8955 ( disk.asm):03155 LD8CD JMP >L8955 JUMP TO EXTENDED BASIC'S IRQ HANDLER ( disk.asm):03156 * THIS IS THE END OF DISK BASIC (EXCEPT FOR THE DOS COMMAND AT $DF00). ( disk.asm):03157 * THE CODE FROM THIS POINT TO $DF00 IS GARBAGE. ( disk.asm):03158 * DOSBAS 1.1 = 1584 WASTED BYTES ( disk.asm):03159 ** THIS IS THE CODE FOR THE DOS COMMAND D8D0 0000000000000000 ( disk.asm):03160 FCB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 0000000000000000 D8E0 0000000000000000 ( disk.asm):03161 FCB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 0000000000000000 D8F0 0000000000000000 ( disk.asm):03162 FCB $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 0000000000000000 D900 1334069DA52703BD ( disk.asm):03163 FCB $13,$34,$06,$9D,$A5,$27,$03,$BD,$95,$81,$96,$B5,$97,$D8,$35,$06 958196B597D83506 D910 DDB44F3456BD9522 ( disk.asm):03164 FCB $DD,$B4,$4F,$34,$56,$BD,$95,$22,$BD,$92,$8F,$DF,$D9,$BD,$99,$DF BD928FDFD9BD99DF D920 270FBD99CB860197 ( disk.asm):03165 FCB $27,$0F,$BD,$99,$CB,$86,$01,$97,$D7,$BD,$99,$BA,$00,$D7,$BD,$99 D7BD99BA00D7BD99 D930 BA10DFDC0DDB2603 ( disk.asm):03166 FCB $BA,$10,$DF,$DC,$0D,$DB,$26,$03,$10,$DE,$DC,$35,$56,$0F,$DB,$10 10DEDC35560FDB10 D940 DFDC30019FBDDFD1 ( disk.asm):03167 FCB $DF,$DC,$30,$01,$9F,$BD,$DF,$D1,$97,$D7,$27,$9F,$2B,$06,$5C,$D1 97D7279F2B065CD1 D950 D623055F5D27DD5A ( disk.asm):03168 FCB $D6,$23,$05,$5F,$5D,$27,$DD,$5A,$D7,$C0,$BD,$99,$DF,$27,$0F,$10 D7C0BD99DF270F10 D960 8300032504301E8D ( disk.asm):03169 FCB $83,$00,$03,$25,$04,$30,$1E,$8D,$38,$BD,$99,$CB,$8D,$4C,$43,$53 38BD99CB8D4C4353 D970 D3D1DDD12F16BD95 ( disk.asm):03170 FCB $D3,$D1,$DD,$D1,$2F,$16,$BD,$95,$06,$BD,$9A,$12,$26,$05,$CC,$FF 06BD9A122605CCFF D980 FF20EDBD95148D3E ( disk.asm):03171 FCB $FF,$20,$ED,$BD,$95,$14,$8D,$3E,$8D,$5E,$20,$E0,$BD,$95,$06,$30 8D5E20E0BD950630 D990 8B9FBD4353830001 ( disk.asm):03172 FCB $8B,$9F,$BD,$43,$53,$83,$00,$01,$2F,$04,$1F,$01,$8D,$03,$7E,$99 2F041F018D037E99 D9A0 34DDCB3520DCBD34 ( disk.asm):03173 FCB $34,$DD,$CB,$35,$20,$DC,$BD,$34,$16,$96,$D7,$40,$D6,$C0,$34,$06 1696D740D6C03406 D9B0 3420C602BDAC33DC ( disk.asm):03174 FCB $34,$20,$C6,$02,$BD,$AC,$33,$DC,$CB,$39,$DD,$CB,$35,$20,$DC,$C3 CB39DDCB3520DCC3 D9C0 341696D720E69EBD ( disk.asm):03175 FCB $34,$16,$96,$D7,$20,$E6,$9E,$BD,$9F,$C3,$39,$DD,$CD,$10,$9E,$C3 9FC339DDCD109EC3 D9D0 8DF4109FBD8D119E ( disk.asm):03176 FCB $8D,$F4,$10,$9F,$BD,$8D,$11,$9E,$CD,$30,$8B,$C3,$00,$01,$39,$BD CD308BC3000139BD D9E0 99C6108E95142006 ( disk.asm):03177 FCB $99,$C6,$10,$8E,$95,$14,$20,$06,$10,$8E,$95,$06,$AD,$A4,$DE,$8A 108E9506ADA4DE8A D9F0 9EBD2B179CD32213 ( disk.asm):03178 FCB $9E,$BD,$2B,$17,$9C,$D3,$22,$13,$34,$60,$8D,$16,$27,$0B,$BD,$93 34608D16270BBD93 DA00 7735603341ADA420 ( disk.asm):03179 FCB $77,$35,$60,$33,$41,$AD,$A4,$20,$E9,$35,$60,$1F,$30,$1F,$01,$93 E935601F301F0193 DA10 8A39AD9F00D91F89 ( disk.asm):03180 FCB $8A,$39,$AD,$9F,$00,$D9,$1F,$89,$D4,$D8,$34,$06,$A4,$84,$A1,$61 D4D83406A484A161 DA20 35869E8AC6013414 ( disk.asm):03181 FCB $35,$86,$9E,$8A,$C6,$01,$34,$14,$BD,$B1,$56,$5F,$BD,$A9,$A2,$BD BDB1565FBDA9A2BD DA30 A976BDB654200235 ( disk.asm):03182 FCB $A9,$76,$BD,$B6,$54,$20,$02,$35,$14,$D7,$D8,$27,$FA,$9F,$D9,$10 14D7D827FA9FD910 DA40 270F310DD827F0BD ( disk.asm):03183 FCB $27,$0F,$31,$0D,$D8,$27,$F0,$BD,$9B,$98,$81,$3B,$27,$F5,$81,$27 9B98813B27F58127 DA50 27F18158102701B2 ( disk.asm):03184 FCB $27,$F1,$81,$58,$10,$27,$01,$B2,$8D,$02,$20,$E7,$81,$4F,$26,$0D 8D0220E7814F260D DA60 D6DE5C8D5B5AC104 ( disk.asm):03185 FCB $D6,$DE,$5C,$8D,$5B,$5A,$C1,$04,$22,$63,$D7,$DE,$39,$81,$56,$26 2263D7DE39815626 DA70 1AD6DF5454C01F8D ( disk.asm):03186 FCB $1A,$D6,$DF,$54,$54,$C0,$1F,$8D,$47,$C1,$1F,$22,$50,$58,$58,$34 47C11F2250585834 DA80 04CC7E7EABE4E0E0 ( disk.asm):03187 FCB $04,$CC,$7E,$7E,$AB,$E4,$E0,$E0,$DD,$DF,$39,$81,$4C,$26,$23,$D6 DDDF39814C2623D6 DA90 E18D2D5D2737D7E1 ( disk.asm):03188 FCB $E1,$8D,$2D,$5D,$27,$37,$D7,$E1,$0F,$E5,$8D,$03,$24,$FC,$39,$0D 0FE58D0324FC390D DAA0 D8270ABD9B98812E ( disk.asm):03189 FCB $D8,$27,$0A,$BD,$9B,$98,$81,$2E,$27,$05,$BD,$9B,$E2,$43,$39,$0C 2705BD9BE243390C DAB0 E5398154260DD6E2 ( disk.asm):03190 FCB $E5,$39,$81,$54,$26,$0D,$D6,$E2,$8D,$06,$5D,$27,$10,$D7,$E2,$39 8D065D2710D7E239 DAC0 7E9BAC81502624BD ( disk.asm):03191 FCB $7E,$9B,$AC,$81,$50,$26,$24,$BD,$9C,$CB,$5D,$26,$03,$7E,$B4,$4A 9CCB5D26037EB44A DAD0 96E59EDF3412867E ( disk.asm):03192 FCB $96,$E5,$9E,$DF,$34,$12,$86,$7E,$97,$DF,$97,$E0,$0F,$E5,$8D,$07 97DF97E00FE58D07 DAE0 351297E59FDF396F ( disk.asm):03193 FCB $35,$12,$97,$E5,$9F,$DF,$39,$6F,$E2,$20,$40,$81,$4E,$26,$03,$BD E22040814E2603BD DAF0 9B98814125048147 ( disk.asm):03194 FCB $9B,$98,$81,$41,$25,$04,$81,$47,$23,$05,$BD,$9B,$BE,$20,$23,$80 2305BD9BBE202380 DB00 418E9C5BE6860DD8 ( disk.asm):03195 FCB $41,$8E,$9C,$5B,$E6,$86,$0D,$D8,$27,$18,$BD,$9B,$98,$81,$23,$27 2718BD9B98812327 DB10 04812B26035C200A ( disk.asm):03196 FCB $04,$81,$2B,$26,$03,$5C,$20,$0A,$81,$2D,$26,$03,$5A,$20,$03,$BD 812D26035A2003BD DB20 9BE25AC10B22A634 ( disk.asm):03197 FCB $9B,$E2,$5A,$C1,$0B,$22,$A6,$34,$04,$D6,$E1,$96,$E2,$3D,$DD,$D5 04D6E196E23DDDD5 DB30 336196DE8101222C ( disk.asm):03198 FCB $33,$61,$96,$DE,$81,$01,$22,$2C,$8E,$9C,$62,$C6,$18,$3D,$3A,$35 8E9C62C6183D3A35 DB40 04583A31848D45DD ( disk.asm):03199 FCB $04,$58,$3A,$31,$84,$8D,$45,$DD,$E3,$8D,$0C,$96,$DF,$8D,$0B,$8D E38D0C96DF8D0B8D DB50 0696E08D0520F286 ( disk.asm):03200 FCB $06,$96,$E0,$8D,$05,$20,$F2,$86,$7E,$12,$B7,$FF,$20,$AE,$A4,$30 7E12B7FF20AEA430 DB60 1F26FC398E9C7AC6 ( disk.asm):03201 FCB $1F,$26,$FC,$39,$8E,$9C,$7A,$C6,$0C,$3D,$3A,$35,$04,$3A,$8D,$1C 0C3D3A35043A8D1C DB70 DDE38D0C96DF8D0B ( disk.asm):03202 FCB $DD,$E3,$8D,$0C,$96,$DF,$8D,$0B,$8D,$06,$96,$E0,$8D,$05,$20,$F2 8D0696E08D0520F2 DB80 867E12B7FF20A684 ( disk.asm):03203 FCB $86,$7E,$12,$B7,$FF,$20,$A6,$84,$4A,$26,$FD,$39,$C6,$FF,$96,$E5 4A26FD39C6FF96E5 DB90 27058B023D445639 ( disk.asm):03204 FCB $27,$05,$8B,$02,$3D,$44,$56,$39,$34,$10,$0D,$D8,$27,$4D,$9E,$D9 34100DD8274D9ED9 DBA0 A6809FD90AD88120 ( disk.asm):03205 FCB $A6,$80,$9F,$D9,$0A,$D8,$81,$20,$27,$F0,$35,$90,$8D,$EA,$81,$2B 27F035908DEA812B DBB0 273C812D273C813E ( disk.asm):03206 FCB $27,$3C,$81,$2D,$27,$3C,$81,$3E,$27,$42,$81,$3C,$27,$39,$81,$3D 2742813C2739813D DBC0 273FBD90AA25245F ( disk.asm):03207 FCB $27,$3F,$BD,$90,$AA,$25,$24,$5F,$80,$30,$97,$D7,$86,$0A,$3D,$4D 803097D7860A3D4D DBD0 2619DBD725150DD8 ( disk.asm):03208 FCB $26,$19,$DB,$D7,$25,$15,$0D,$D8,$27,$17,$BD,$9B,$98,$BD,$90,$AA 2717BD9B98BD90AA DBE0 24E60CD89ED9301F ( disk.asm):03209 FCB $24,$E6,$0C,$D8,$9E,$D9,$30,$1F,$9F,$D9,$39,$7E,$B4,$4A,$5C,$27 9FD9397EB44A5C27 DBF0 FA395D27F65A395D ( disk.asm):03210 FCB $FA,$39,$5D,$27,$F6,$5A,$39,$5D,$27,$F1,$54,$39,$5D,$2B,$EC,$58 27F154395D2BEC58 DC00 3934608D16BDB70E ( disk.asm):03211 FCB $39,$34,$60,$8D,$16,$BD,$B7,$0E,$35,$E0,$BD,$9C,$1B,$C6,$02,$BD 35E0BD9C1BC602BD DC10 AC33D6D89ED93414 ( disk.asm):03212 FCB $AC,$33,$D6,$D8,$9E,$D9,$34,$14,$7E,$9A,$32,$9E,$D9,$34,$10,$BD 7E9A329ED93410BD DC20 9B98BDB3A225C4BD ( disk.asm):03213 FCB $9B,$98,$BD,$B3,$A2,$25,$C4,$BD,$9B,$98,$81,$3B,$26,$F9,$35,$10 9B98813B26F93510 DC30 DEA634409FA6BDB2 ( disk.asm):03214 FCB $DE,$A6,$34,$40,$9F,$A6,$BD,$B2,$84,$35,$10,$9F,$A6,$39,$4F,$1F 8435109FA6394F1F DC40 8BDCE310270D7493 ( disk.asm):03215 FCB $8B,$DC,$E3,$10,$27,$0D,$74,$93,$D5,$DD,$E3,$22,$0D,$0F,$E3,$0F D5DDE3220D0FE30F DC50 E4350210EE67847F ( disk.asm):03216 FCB $E4,$35,$02,$10,$EE,$67,$84,$7F,$34,$02,$3B,$0A,$0C,$01,$03,$05 34023B0A0C010305 DC60 060801A80190017A ( disk.asm):03217 FCB $06,$08,$01,$A8,$01,$90,$01,$7A,$01,$64,$01,$50,$01,$3D,$01,$2B 01640150013D012B DC70 011A010A00FB00ED ( disk.asm):03218 FCB $01,$1A,$01,$0A,$00,$FB,$00,$ED,$00,$DF,$00,$D3,$00,$C7,$00,$BB 00DF00D300C700BB DC80 00B100A6009D0094 ( disk.asm):03219 FCB $00,$B1,$00,$A6,$00,$9D,$00,$94,$00,$8B,$00,$83,$00,$7C,$00,$75 008B0083007C0075 DC90 006EA69C938B837B ( disk.asm):03220 FCB $00,$6E,$A6,$9C,$93,$8B,$83,$7B,$74,$6D,$67,$61,$5B,$56,$51,$4C 746D67615B56514C DCA0 47433F3B3734312E ( disk.asm):03221 FCB $47,$43,$3F,$3B,$37,$34,$31,$2E,$2B,$28,$26,$23,$21,$1F,$1D,$1B 2B282623211F1D1B DCB0 1918161413129E8A ( disk.asm):03222 FCB $19,$18,$16,$14,$13,$12,$9E,$8A,$C6,$01,$34,$14,$D7,$C2,$9F,$D5 C6013414D7C29FD5 DCC0 BD959ABDB156BDB6 ( disk.asm):03223 FCB $BD,$95,$9A,$BD,$B1,$56,$BD,$B6,$54,$20,$08,$BD,$9B,$98,$7E,$9B 542008BD9B987E9B DCD0 BE3514D7D827FA9F ( disk.asm):03224 FCB $BE,$35,$14,$D7,$D8,$27,$FA,$9F,$D9,$10,$27,$00,$EA,$0D,$D8,$27 D9102700EA0DD827 DCE0 F0BD9B98813B27F5 ( disk.asm):03225 FCB $F0,$BD,$9B,$98,$81,$3B,$27,$F5,$81,$27,$27,$F1,$81,$4E,$26,$04 812727F1814E2604 DCF0 03D520E981422604 ( disk.asm):03226 FCB $03,$D5,$20,$E9,$81,$42,$26,$04,$03,$D6,$20,$E1,$81,$58,$10,$27 03D620E181581027 DD00 0096814D1027012A ( disk.asm):03227 FCB $00,$96,$81,$4D,$10,$27,$01,$2A,$34,$02,$C6,$01,$0D,$D8,$27,$11 3402C6010DD82711 DD10 BD9B98BDB3A23401 ( disk.asm):03228 FCB $BD,$9B,$98,$BD,$B3,$A2,$34,$01,$BD,$9B,$E2,$35,$01,$24,$02,$8D BD9BE2350124028D DD20 AA35028143272881 ( disk.asm):03229 FCB $AA,$35,$02,$81,$43,$27,$28,$81,$41,$27,$2E,$81,$53,$27,$32,$81 41272E8153273281 DD30 55275C8144275581 ( disk.asm):03230 FCB $55,$27,$5C,$81,$44,$27,$55,$81,$4C,$27,$4C,$81,$52,$27,$43,$80 4C274C8152274380 DD40 45272F4A27274A27 ( disk.asm):03231 FCB $45,$27,$2F,$4A,$27,$27,$4A,$27,$32,$4A,$27,$1D,$7E,$B4,$4A,$BD 324A271D7EB44ABD DD50 955DD7B2BD959A20 ( disk.asm):03232 FCB $95,$5D,$D7,$B2,$BD,$95,$9A,$20,$84,$C1,$04,$24,$EF,$D7,$E8,$20 84C10424EFD7E820 DD60 F6C13F24E7D7E920 ( disk.asm):03233 FCB $F6,$C1,$3F,$24,$E7,$D7,$E9,$20,$EE,$4F,$8D,$58,$21,$4F,$1F,$01 EE4F8D58214F1F01 DD70 20594F1F018D4D1E ( disk.asm):03234 FCB $20,$59,$4F,$1F,$01,$8D,$4D,$1E,$01,$20,$50,$4F,$1F,$01,$8D,$44 0120504F1F018D44 DD80 20494F9E8A20444F ( disk.asm):03235 FCB $20,$49,$4F,$9E,$8A,$20,$44,$4F,$8D,$3A,$20,$F7,$4F,$20,$03,$4F 8D3A20F74F20034F DD90 8D329E8A1E102033 ( disk.asm):03236 FCB $8D,$32,$9E,$8A,$1E,$10,$20,$33,$BD,$9C,$1B,$C6,$02,$BD,$AC,$33 BD9C1BC602BDAC33 DDA0 D6D89ED934147E9C ( disk.asm):03237 FCB $D6,$D8,$9E,$D9,$34,$14,$7E,$9C,$C6,$D6,$E9,$27,$1B,$4F,$1E,$01 C6D6E9271B4F1E01 DDB0 A7E22A028D0DBD9F ( disk.asm):03238 FCB $A7,$E2,$2A,$02,$8D,$0D,$BD,$9F,$B5,$1F,$30,$44,$56,$44,$56,$6D B51F30445644566D DDC0 E02A044050820039 ( disk.asm):03239 FCB $E0,$2A,$04,$40,$50,$82,$00,$39,$1F,$10,$39,$34,$06,$8D,$DA,$35 1F103934068DDA35 DDD0 1034068DD4351010 ( disk.asm):03240 FCB $10,$34,$06,$8D,$D4,$35,$10,$10,$9E,$E8,$34,$20,$6D,$E4,$27,$08 9EE834206DE42708 DDE0 1E108DDF6AE420F4 ( disk.asm):03241 FCB $1E,$10,$8D,$DF,$6A,$E4,$20,$F4,$35,$20,$DE,$8A,$D3,$C7,$2B,$02 3520DE8AD3C72B02 DDF0 1F031F109E8AD3C9 ( disk.asm):03242 FCB $1F,$03,$1F,$10,$9E,$8A,$D3,$C9,$2B,$02,$1F,$01,$11,$83,$01,$00 2B021F0111830100 DE00 2503CE00FF8C00C0 ( disk.asm):03243 FCB $25,$03,$CE,$00,$FF,$8C,$00,$C0,$25,$03,$8E,$00,$BF,$DC,$C7,$DD 25038E00BFDCC7DD DE10 BDDCC9DDBF9FC5DF ( disk.asm):03244 FCB $BD,$DC,$C9,$DD,$BF,$9F,$C5,$DF,$C3,$0D,$D5,$26,$04,$9F,$C9,$DF C30DD526049FC9DF DE20 C7BD94200DD62603 ( disk.asm):03245 FCB $C7,$BD,$94,$20,$0D,$D6,$26,$03,$BD,$94,$A1,$0F,$D5,$0F,$D6,$7E BD94A10FD50FD67E DE30 9CDDBD9B983402BD ( disk.asm):03246 FCB $9C,$DD,$BD,$9B,$98,$34,$02,$BD,$9E,$5E,$34,$06,$BD,$9B,$98,$81 9E5E3406BD9B9881 DE40 2C1026FF07BD9E5B ( disk.asm):03247 FCB $2C,$10,$26,$FF,$07,$BD,$9E,$5B,$1F,$01,$35,$40,$35,$02,$81,$2B 1F0135403502812B DE50 2704812D26A61F30 ( disk.asm):03248 FCB $27,$04,$81,$2D,$26,$A6,$1F,$30,$7E,$9D,$CB,$BD,$9B,$98,$81,$2B 7E9DCBBD9B98812B DE60 2707812D2704BD9B ( disk.asm):03249 FCB $27,$07,$81,$2D,$27,$04,$BD,$9B,$E2,$4F,$34,$02,$BD,$9C,$CB,$35 E24F3402BD9CCB35 DE70 024D27044F508200 ( disk.asm):03250 FCB $02,$4D,$27,$04,$4F,$50,$82,$00,$39,$00,$00,$00,$01,$FE,$C5,$19 3900000001FEC519 DE80 19FB1631F2F4FB4A ( disk.asm):03251 FCB $19,$FB,$16,$31,$F2,$F4,$FB,$4A,$51,$EC,$84,$61,$F9,$E1,$C7,$78 51EC8461F9E1C778 DE90 AED4DC8E3BC5E5A2 ( disk.asm):03252 FCB $AE,$D4,$DC,$8E,$3B,$C5,$E5,$A2,$69,$B5,$06,$B5,$06,$81,$40,$26 69B506B506814026 DEA0 029D9FBD9522BD93 ( disk.asm):03253 FCB $02,$9D,$9F,$BD,$95,$22,$BD,$93,$B2,$BD,$93,$1D,$AE,$C4,$9F,$CB B2BD931DAEC49FCB DEB0 AE429FCDBDB26DBD ( disk.asm):03254 FCB $AE,$42,$9F,$CD,$BD,$B2,$6D,$BD,$B7,$3D,$CE,$00,$CF,$AF,$C4,$BD B73DCE00CFAFC4BD DEC0 9320860197C2BD95 ( disk.asm):03255 FCB $93,$20,$86,$01,$97,$C2,$BD,$95,$81,$8E,$01,$00,$9D,$A5,$27,$0F 818E01009DA5270F DED0 BDB26DBDB141964F ( disk.asm):03256 FCB $BD,$B2,$6D,$BD,$B1,$41,$96,$4F,$8B,$08,$97,$4F,$BD,$B7,$40,$96 8B08974FBDB74096 DEE0 B6850227041F1030 ( disk.asm):03257 FCB $B6,$85,$02,$27,$04,$1F,$10,$30,$8B,$9F,$D1,$C6,$01,$D7,$C2,$D7 8B9FD1C601D7C2D7 DEF0 D8BD9FE23406BD9F ( disk.asm):03258 FCB $D8,$BD,$9F,$E2,$34,$06,$BD,$9F,$E2,$DD,$D9,$35,$06,$34,$06,$9E E2DDD9350634069E DF00 113F ( disk.asm):03259 DOSCOM SWI3 DO A SOFTWARE INTERRUPT (#3) DF02 0F03 ( disk.asm):03260 CLR TMPLOC RESET SECTOR COUNTER DF04 CC2600 ( disk.asm):03261 LDD #DOSBUF RAM LOAD ADDRESS FOR SECTOR DATA DF07 3406 ( disk.asm):03262 PSHS B,A SAVE RAM LOAD ADDRESS DF09 BEC006 ( disk.asm):03263 LDF09 LDX DSKVAR POINT X TO DSKCON VARIABLES DF0C 0C03 ( disk.asm):03264 INC TMPLOC INCREMENT SECTOR COUNTER DF0E 9603 ( disk.asm):03265 LDA TMPLOC GET THE SECTOR COUNTER DF10 8112 ( disk.asm):03266 CMPA #SECMAX LOADED IN 18 SECTORS? (ONE TRACK) DF12 2222 ( disk.asm):03267 BHI LDF36 YES - EXIT DF14 A703 ( disk.asm):03268 STA $03,X NO - SAVE SECTOR NUMBER IN DSEC DF16 CC0200 ( disk.asm):03269 LDD #$0200 GET FDC OP CODE (READ) AND DRIVE NUMBER (0) DF19 A784 ( disk.asm):03270 STA ,X SAVE THEM IN DSKCON VARIABLES (BUG - SHOULD BE STD ,X) DF1B 8622 ( disk.asm):03271 LDA #34 GET TRACK NUMBER (34) DF1D A702 ( disk.asm):03272 STA $02,X SAVE IT IN DSKCON VARIABLES TOO DF1F 3506 ( disk.asm):03273 PULS A,B GET RAM LOAD ADDRESS DF21 ED04 ( disk.asm):03274 STD $04,X AND SAVE IT IN THE DSKCON VARIABLES DF23 8B01 ( disk.asm):03275 ADDA #$01 ADD 256 (ONE SECTOR) TO RAM LOAD ADDRESS (SHOULD BE INCA) DF25 3406 ( disk.asm):03276 PSHS B,A SAVE NEW RAM LOAD ADDRESS DF27 AD9FC004 ( disk.asm):03277 JSR [DCNVEC] GO READ A SECTOR DF2B 6D06 ( disk.asm):03278 TST $06,X CHECK FOR ERRORS DF2D 27DA ( disk.asm):03279 BEQ LDF09 KEEP READING IF NONE DF2F 3506 ( disk.asm):03280 PULS A,B PULL LOAD ADDRESS OFF OF THE STACK DF31 C628 ( disk.asm):03281 LDB #2*20 'IO' ERROR DF33 7EAC46 ( disk.asm):03282 JMP >LAC46 JUMP TO ERROR SERVICING ROUTINE DF36 3506 ( disk.asm):03283 LDF36 PULS A,B PULL RAM LOAD ADDRESS OFF OF THE STACK DF38 FC2600 ( disk.asm):03284 LDD DOSBUF GET FIRST TWO BYTES OF RAM DATA DF3B 10834F53 ( disk.asm):03285 CMPD #$4F53 LOOK FOR 'OS' (OS9) AT START OF BUFFER DF3F 102746BF ( disk.asm):03286 LBEQ DOSBUF+2 IF 'OS' THEN BRANCH TO DATA LOADED IN RAM DF43 7F2600 ( disk.asm):03287 CLR DOSBUF * OTHERWISE CLEAR THE FIRST TWO DF46 7F2601 ( disk.asm):03288 CLR DOSBUF+1 * BYTES OF RAM DATA DF49 7EA0E8 ( disk.asm):03289 JMP BAWMST JUMP TO BASIC'S WARM START DF4C CC3B3B ( disk.asm):03290 DOSINI LDD #$3B3B TWO RTI INSTRUCTIONS DF4F FD0100 ( disk.asm):03291 STD SW3VEC * DF52 FD0102 ( disk.asm):03292 STD SW3VEC+2 * LOAD THE SWI2 AND SWI3 JUMP DF55 FD0104 ( disk.asm):03293 STD SW2VEC+1 * VECTORS WITH RTIS DF58 39 ( disk.asm):03294 END RTS ( disk.asm):03295 * END OF THE DOS AND DOSINI COMMANDS - THE REST OF THE CODE ( disk.asm):03296 * TO THE END OF THE DISK ROM ($DFFF) IS GARBAGE. ( disk.asm):03297 * DOSBAS 1.1 = 167 WASTED BYTES DF59 0000000000000005 ( disk.asm):03298 FCB $00,$00,$00,$00,$00,$00,$00,$05,$10,$93,$D3,$25,$02,$DC,$D3,$DD 1093D32502DCD3DD DF69 C3A6E48104250ADC ( disk.asm):03299 FCB $C3,$A6,$E4,$81,$04,$25,$0A,$DC,$CD,$93,$C5,$24,$11,$4F,$5F,$20 CD93C524114F5F20 DF79 0DDCCDD3C5250510 ( disk.asm):03300 FCB $0D,$DC,$CD,$D3,$C5,$25,$05,$10,$93,$D5,$25,$02,$DC,$D5,$DD,$C5 93D52502DCD5DDC5 DF89 0DD826028D503506 ( disk.asm):03301 FCB $0D,$D8,$26,$02,$8D,$50,$35,$06,$04,$D8,$25,$05,$10,$93,$D9,$27 04D825051093D927 DF99 0C5CC10826044C5F ( disk.asm):03302 FCB $0C,$5C,$C1,$08,$26,$04,$4C,$5F,$84,$07,$7E,$9E,$FD,$39,$9E,$CF 84077E9EFD399ECF DFA9 ECC427078300018D ( disk.asm):03303 FCB $EC,$C4,$27,$07,$83,$00,$01,$8D,$03,$1F,$21,$39,$34,$76,$6F,$64 031F213934766F64 DFB9 A6633DED66EC613D ( disk.asm):03304 FCB $A6,$63,$3D,$ED,$66,$EC,$61,$3D,$EB,$66,$89,$00,$ED,$65,$E6,$E4 EB668900ED65E6E4 DFC9 A6633DE365ED6524 ( disk.asm):03305 FCB $A6,$63,$3D,$E3,$65,$ED,$65,$24,$02,$6C,$64,$A6,$E4,$E6,$62,$3D 026C64A6E4E6623D DFD9 E364ED6435F67E94 ( disk.asm):03306 FCB $E3,$64,$ED,$64,$35,$F6,$7E,$94,$A1,$5F,$9D,$A5,$27,$11,$BD,$B2 A15F9DA52711BDB2 DFE9 6DBDB141964F8B06 ( disk.asm):03307 FCB $6D,$BD,$B1,$41,$96,$4F,$8B,$06,$97,$4F,$BD,$B7,$0E,$C4,$3F,$1F 974FBDB70EC43F1F DFF9 98C40744444439 ( disk.asm):03308 FCB $98,$C4,$07,$44,$44,$44,$39