Acorn Disc and Network Filing Systems - DNFS 3.00 ================================================= Assembly listing generated by TurboMASM from the original Acorn source. Source: https://github.com/stardot/AcornDNFSv300/ Source: https://www.4corn.co.uk/articles/65hostandmos/ Branch slack calculated by Greg Cook with slack.pl (attached), 16 September 2023 Columns, left to right: (1) Filename, (2) line number and (3) hex address of limiting branch instruction (4) Direction of limiting branch: ^=backwards, v=forwards, Space=N/A (5) Hex number of bytes that may be inserted at this address, or between the branch instruction and the target SYMBOL at this address (NB: a more generous limit than shown may apply on the far side of the symbol.) --=no limit. (6) Current source filename, (7) line of assembly listing which typically starts with source line number, hex address and optional hex equate. *emulateturbo Acorn 6502 Tube 6502 Emulator OS 0.64 (19 Oct 1988) HIBASIC >*exec print1 >*| -> AsmRom >*TurMasm TURBOMASM Acorn Macro assembler 1.15 Action : PRINT ON Action : WIDTH 127 Action : length 127 Action : ASM NFS00 NFS00 NFS00 Macro library : NFS00 NFS00 NFS00 NFS00 Acorn macro assembler Page 1 NFS00 NFS00 NFS00 Pass 1 NFS00 Pass 2 -- NFS00 0001 0000 -- NFS00 0002 0000 TTL ECONET Version III - High level source > NFS00 -- NFS00 0003 0000 OPT &01 -- NFS00 0004 0000 ; This is an upgrade of the existing ECONET version II -- NFS00 0005 0000 ; for use with the BBC microcomputer. These sources deal -- NFS00 0006 0000 ; with the high level function of the network and assume -- NFS00 0007 0000 ; the existence of an underlying low-level software doing -- NFS00 0008 0000 ; all of the hard work such as transmission of packets. -- NFS00 0009 0000 ; The commenting of the sources may well give some clue as -- NFS00 0010 0000 ; to the intended function of the code. If the entire -- NFS00 0011 0000 ; implementation is finished by the end of April 1982, I -- NFS00 0012 0000 ; for one will be very surprised. -- NFS00 0013 0000 ; -- NFS00 0014 0000 ; -- NFS00 0015 0000 ; -- NFS00 0016 0000 ; VVV VVV #### #### #### -- NFS00 0017 0000 ; VVV VVV ## ## ## -- NFS00 0018 0000 ; VVV VVV ## ## ## -- NFS00 0019 0000 ; VVV VVV ## ## ## -- NFS00 0020 0000 ; VVV VVV ## ## ## -- NFS00 0021 0000 ; VVVVVV %% ## ## ## -- NFS00 0022 0000 ; VVVV %% #### #### #### -- NFS00 0023 0000 ; -- NFS00 0024 0000 ; -- NFS00 0025 0000 OPT 3 -- NFS00 0046 0000 OPT VIII0 NFS00 NFS00 NFS00 NFS00 Acorn macro assembler Page 2 NFS00 System Organisation NFS00 -- NFS00 0047 0000 -- NFS00 0048 0000 0000 YES * &0000 -- NFS00 0049 0000 FFFF NO * &FFFF ;conditional assembly -- NFS00 0050 0000 -- NFS00 0051 0000 -- NFS00 0052 0000 0000 BBC * YES ; Assemble for BBCpu -- NFS00 0053 0000 0000 ROM * YES ; Sideways ROM -- NFS00 0054 0000 0000 LOWLVL * YES ; Is Low-level incorporated -- NFS00 0055 0000 0000 REG4XX * YES ; Is Register 1 available -- NFS00 0056 0000 -- NFS00 0057 0000 ORG &8000 -- NFS00 0058 8000 9630 LOWORG * . + &1630 ;low level code start address -- NFS00 0059 8000 -- NFS00 0060 8000 < &00 ;get source from drive zero -- NFS00 0061 8000 > &02 ;object code to drive two -- NFS00 0062 8000 -- NFS00 0063 8000 -- NFS00 0064 8000 ; *** SYSTEM CALLS *** -- NFS00 0065 8000 FFE0 OSRDCH * &FFE0 -- NFS00 0066 8000 FFE3 OSASCI * &FFE3 -- NFS00 0067 8000 FFEE OSWRCH * &FFEE -- NFS00 0068 8000 FFE7 OSCRLF * &FFE7 -- NFS00 0069 8000 FFE7 OSNEWL * OSCRLF -- NFS00 0070 8000 FFF7 OSCLI * &FFF7 -- NFS00 0071 8000 FFF4 OSBYTE * &FFF4 -- NFS00 0072 8000 FFF1 OSWORD * &FFF1 -- NFS00 0073 8000 9F9D DISC * &9F9D ;* was $9FC8 DFS -- NFS00 0074 8000 BFF0 HEXOUT * &BFF0 ;** In DFS Rom now ** -- NFS00 0075 8000 -- NFS00 0076 8000 ; *** FILE SERVER CODES *** -- NFS00 0077 8000 -- NFS00 0078 8000 0001 FCSAVE * &0001 ;save -- NFS00 0079 8000 0002 FCLOAD * &0002 ;load -- NFS00 0080 8000 0003 FCEXAM * &0003 ;examine -- NFS00 0081 8000 0004 FCCHDR * &0004 ;catalogue -- NFS00 0082 8000 0005 FCCMND * &0005 ;load as command -- NFS00 0083 8000 0006 FCFIND * &0006 ;find/open -- NFS00 0084 8000 0007 FCSHUT * &0007 ;close -- NFS00 0085 8000 0008 FCBGET * &0008 ;getbyte -- NFS00 0086 8000 0009 FCPUTB * &0009 ;putbyte -- NFS00 0087 8000 000A FCGBYS * &000A ;getbytes -- NFS00 0088 8000 000B FCPBYS * &000B ;putbytes -- NFS00 0089 8000 000C FCGARG * &000C ;read pointer/extent of open file -- NFS00 0090 8000 000D FCSARG * &000D ;set the pointer/extent of open file -- NFS00 0091 8000 000E FCDISC * &000E ;returns the current discs -- NFS00 0092 8000 000F FCUSRS * &000F ;returns logged-on users -- NFS00 0093 8000 0011 FCEOF * &0011 ;end-of-file -- NFS00 0094 8000 0012 FCREAD * &0012 ;read args -- NFS00 0095 8000 0013 FCSET * &0013 ;set args -- NFS00 0096 8000 0014 FCDEL * &0014 ;code for delete -- NFS00 0097 8000 0015 FCUSER * &0015 ;read user environment -- NFS00 0098 8000 0016 FCOPT * &0016 ;set AUTOBOOT option number -- NFS00 0099 8000 0017 FCBYE * &0017 ;logoff (*BYE) code -- NFS00 0100 8000 -- NFS00 0101 8000 -- NFS00 0102 8000 ; *** PORTS *** -- NFS00 0103 8000 -- NFS00 0104 8000 ;large fudge due to the need to interface -- NFS00 0105 8000 ;with the version 2 file server -- NFS00 0106 8000 0099 PCMND * &0099 -- NFS00 0107 8000 0090 PREPLY * &0090 -- NFS00 0108 8000 0091 PSAACK * &0091 -- NFS00 0109 8000 0092 PLDATA * &0092 -- NFS00 0110 8000 0093 PREMOT * &0093 ;remote port -- NFS00 0111 8000 00D1 PBLOCK * &00D1 ;printer port for blocks -- NFS00 0112 8000 -- NFS00 0113 8000 ; The ports are arranged in the space above #B0 (say), -- NFS00 0114 8000 ; to allow the user a clear field from 1 to #AA. If you -- NFS00 0115 8000 ; put this in a manual it looks as if you've thought about -- NFS00 0116 8000 ; it. Obviously more ports can be accomodated, it's just -- NFS00 0117 8000 ; that I happen to like ports with the same digit -- NFS00 0118 8000 ; repeated, like #EE. -- NFS00 0119 8000 -- NFS00 0120 8000 ; *** Delays for various operations eg. load,save *** -- NFS00 0121 8000 -- NFS00 0122 8000 002A DLOAD * &002A ;all in seconds, all the same for now -- NFS00 0123 8000 002A DFINAL * &002A -- NFS00 0124 8000 0014 DLODBK * &0014 -- NFS00 0125 8000 0014 DREPLY * &0014 -- NFS00 0126 8000 0060 FSDELY * &0060 ;ms delay here -- NFS00 0127 8000 002A DSAVE * &002A -- NFS00 0128 8000 -- NFS00 0129 8000 ; *** Operating System Vectors *** -- NFS00 0130 8000 -- NFS00 0131 8000 0212 FILVEC * &0212 -- NFS00 0132 8000 -- NFS00 0133 8000 ; *** Error numbers *** -- NFS00 0134 8000 -- NFS00 0135 8000 00A0 LINJAM * &A0 -- NFS00 0136 8000 00A1 NETER * &A1 -- NFS00 0137 8000 00A2 NOLISE * &A2 -- NFS00 0138 8000 00A3 NOCLK * &A3 -- NFS00 0139 8000 00A4 TXCBER * &A4 -- NFS00 0140 8000 0011 ESCER * &11 -- NFS00 0141 8000 00CB OPTER * &CB -- NFS00 0142 8000 00A5 NOREPE * &A5 -- NFS00 0143 8000 00D6 NOTFND * &D6 -- NFS00 0144 8000 -- NFS00 0145 8000 ; *** A few constants *** -- NFS00 0146 8000 -- NFS00 0147 8000 0000 ZERO * &0000 -- NFS00 0148 8000 0001 ONE * &0001 -- NFS00 0149 8000 0002 TWO * &0002 -- NFS00 0150 8000 0003 THREE * &0003 -- NFS00 0151 8000 0004 FOUR * &0004 -- NFS00 0152 8000 0005 FIVE * &0005 -- NFS00 0153 8000 0006 SIX * &0006 -- NFS00 0154 8000 0007 SEVEN * &0007 -- NFS00 0155 8000 0008 EIGHT * &0008 -- NFS00 0156 8000 0009 NINE * &0009 -- NFS00 0157 8000 -- NFS00 0158 8000 0020 HAND * &0020 -- NFS00 0159 8000 00FE FS * &FE ;default fileserver -- NFS00 0160 8000 00EB PS * &EB ;default printer station -- NFS00 0161 8000 00A8 ERRCUT * &00A8 ;error cutoff for FS -- NFS00 0162 8000 -- NFS00 0163 8000 ;*** selectors in Control block *** -- NFS00 0164 8000 -- NFS00 0165 8000 0004 LPTR * &0004 -- NFS00 0166 8000 0008 HPTR * &0008 ;hi pointer into Tx/Rxcb -- NFS00 0167 8000 0002 DESTN * &0002 ;destination part of packet NFS00 NFS00 NFS00 NFS00 Acorn macro assembler Page 3 NFS00 System Organisation NFS00 -- NFS00 0168 8000 0001 PORT * &0001 ;port part of packet -- NFS00 0169 8000 -- NFS00 0170 8000 ;*** Context info held in page #E00 *** -- NFS00 0171 8000 -- NFS00 0172 8000 0E00 FSLOCN * &0E00 ;put at start of page E -- NFS00 0173 8000 0E02 URD * FSLOCN +&02 -- NFS00 0174 8000 0E03 CSD * URD +&01 -- NFS00 0175 8000 0E04 LIB * CSD +&01 -- NFS00 0176 8000 0E05 OPT * LIB + &01 ;BOOT option number -- NFS00 0177 8000 0E06 MESS * OPT +&01 ;flag to indicate messages on,off -- NFS00 0178 8000 0E07 EOF * MESS +&01 ;flags for EOF operation -- NFS00 0179 8000 0E08 SEQNOS * EOF +&01 ;sequence numbers for Byte stream -- NFS00 0180 8000 ;*** Context is defined by these locations *** -- NFS00 0181 8000 0E09 ERROR * SEQNOS +&01 ;slot for last unknown error -- NFS00 0182 8000 0E0A SPARE * ERROR + &01 -- NFS00 0183 8000 0E0A JCMNDP * SPARE -- NFS00 0184 8000 -- NFS00 0185 8000 ;*** Manifests for useful things *** -- NFS00 0186 8000 -- NFS00 0187 8000 000D CR * &000D ;carriage return -- NFS00 0188 8000 0020 SPACE * &0020 ;space -- NFS00 0189 8000 00FF FILLER * &00FF ;padding for 4-byte addresses -- NFS00 0190 8000 0080 TXFLAG * &0080 ;OR this with flag byte before xmit -- NFS00 0191 8000 007F RXRDY * &007F ;set flag byte to this value for reception -- NFS00 0192 8000 00FF FSTRY * &00FF ;number of retries -- NFS00 0193 8000 8000 SCREND * &8000 ;end of screen memory -- NFS00 0194 8000 0012 RXCBS * &12 ;number of RXCBs available -- NFS00 0195 8000 -- NFS00 0196 8000 ; *** OSBYTE Manifests and the like *** -- NFS00 0197 8000 -- NFS00 0198 8000 00D9 MARK * &00D9 -- NFS00 0199 8000 00DA FSPACE * &00DA -- NFS00 0200 8000 -- NFS00 0201 8000 ; *** Function codes for Immediate operations *** -- NFS00 0202 8000 -- NFS00 0203 8000 0081 PEEK * &0081 -- NFS00 0204 8000 0082 POKE * &0082 -- NFS00 0205 8000 -- NFS00 0206 8000 ; *** Zero page workspace, starting from #B8 *** -- NFS00 0207 8000 -- NFS00 0208 8000 0099 PFLAGS * &99 ;Printer status flags -- NFS00 0209 8000 -- NFS00 0210 8000 009A TXCBP * &9A ;pointer used with lo level -- NFS00 0211 8000 009A RXCBP * TXCBP ;complement to $23D in V2 -- NFS00 0212 8000 -- NFS00 0213 8000 00A0 LTXCBP * &A0 -- NFS00 0214 8000 -- NFS00 0215 8000 0D61 PBUFFP * &D61 ;*** dedicated area somewhere *** -- NFS00 0216 8000 0D62 TXCLR * &D62 ;flag to show Tx in progress -- NFS00 0217 8000 0D63 LSTAT * &D63 ;copy of PEEK, POKE status -- NFS00 0218 8000 0D64 LFLAG * &D64 ;flag byte used for T/Rx -- NFS00 0219 8000 0D65 OLDJSR * &D65 ;old copy of JSR buffer protection bits -- NFS00 0220 8000 0D67 TBFLAG * &D67 ;TUBE present flag, held by BRIAN -- NFS00 0221 8000 -- NFS00 0222 8000 ;**** work area for OSWORD, SROMs & VIEW **** -- NFS00 0223 8000 -- NFS00 0224 8000 00A8 UTIL0 * &A8 -- NFS00 0225 8000 00A9 UTIL1 * UTIL0 + 1 -- NFS00 0226 8000 00AA UTIL2 * UTIL1 + 1 -- NFS00 0227 8000 00AB UTIL3 * UTIL2 + 1 -- NFS00 0228 8000 00AC UTIL4 * UTIL3 + 1 -- NFS00 0229 8000 00AD UTIL5 * UTIL4 + 1 -- NFS00 0230 8000 -- NFS00 0231 8000 ;**** Low level variables etc **** -- NFS00 0232 8000 -- NFS00 0233 8000 00B0 WORK * &B0 ;space for variables -- NFS00 0234 8000 00B2 W1 * WORK +&02 -- NFS00 0235 8000 00B3 W2 * W1 +&01 ;spare work variables -- NFS00 0236 8000 -- NFS00 0237 8000 ;**** NB Two bytes free here ($CD,$CE) **** -- NFS00 0238 8000 -- NFS00 0239 8000 00B8 JWORK * &B8 ;three bytes used for timing purposes -- NFS00 0240 8000 00B9 UNUSED * JWORK +&01 ;two spare bytes here ***** -- NFS00 0241 8000 00A8 ROMY * UTIL0 -- NFS00 0242 8000 00A9 ROMA * UTIL1 -- NFS00 0243 8000 00B9 CRFLAG * UNUSED ;used in two column cat's -- NFS00 0244 8000 00BA SPOOL1 * UNUSED + 1 ;used in RANDOM access -- NFS00 0245 8000 00BB TEMPX * JWORK +&03 ;start of 0-page area -- NFS00 0246 8000 00BC TEMPY * TEMPX +&01 ;save Y,forms a pointer with X -- NFS00 0247 8000 00BD TEMPA * TEMPY +&01 ;save monkeying with the stack -- NFS00 0248 8000 00BE POINTR * TEMPA +&01 ;a nice area for a pointer -- NFS00 0249 8000 00C0 TEMP0 * POINTR +&02 ;space used in OSWORD calls -- NFS00 0250 8000 00C0 TXCB * POINTR +&02 ;temp only -- NFS00 0251 8000 00C0 RXCB * TXCB ;note blocks overlap exactly -- NFS00 0252 8000 00CF SPOOL0 * RXCB +&0F ;last byte in 0-page, holds handle -- NFS00 0253 8000 0097 ESCAP * &97 ;flag to determine if escapable -- NFS00 0254 8000 ;** 9/2/84 moved from $CC due to printing clash -- NFS00 0255 8000 00FF ESCADR * &00FF ;flag for escape -- NFS00 0256 8000 -- NFS00 0257 8000 ; *** RAM allocation of two pages, #0E and #0F *** -- NFS00 0258 8000 -- NFS00 0259 8000 0F00 BIGBUF * &0F00 -- NFS00 0260 8000 0F05 TXBUF * BIGBUF +&05 ;start of TX data area -- NFS00 0261 8000 0F05 RXBUF * TXBUF -- NFS00 0262 8000 0FFF RXBUFE * BIGBUF +&FF ;buffer size is 256 -- NFS00 0263 8000 0F00 HDRREP * BIGBUF -- NFS00 0264 8000 0F01 HDRFN * HDRREP +&01 ;function code -- NFS00 0265 8000 0F02 HDRURD * HDRFN +&01 ;urd slot -- NFS00 0266 8000 0F03 HDRCSD * HDRURD +&01 ;csd slot -- NFS00 0267 8000 0F04 HDRLIB * HDRCSD +&01 ;lib slot -- NFS00 0268 8000 0F03 RXCC * RXBUF -&02 ;control code -- NFS00 0269 8000 0F04 RXRC * RXCC +&01 ;return code -- NFS00 0270 8000 -- NFS00 0271 8000 0E10 CMNDP * &E10 ;pointer to rest of command line -- NFS00 0272 8000 0E0D RSTAT * JCMNDP +&03 -- NFS00 0273 8000 -- NFS00 0274 8000 ;**** Special buffer for BGET, BPUT **** -- NFS00 0275 8000 -- NFS00 0276 8000 0FDC PUTB * &0FDC ;buffer for single byte random access -- NFS00 0277 8000 0FDC PUTB1 * PUTB -- NFS00 0278 8000 0FDD PUTB2 * PUTB1 +&01 -- NFS00 0279 8000 0FDE PUTB3 * PUTB2 +&01 -- NFS00 0280 8000 0FDF PUTB4 * PUTB3 +&01 -- NFS00 0281 8000 0FDD GETB2 * PUTB2 -- NFS00 0282 8000 0FDE GETB3 * PUTB3 -- NFS00 0283 8000 0FDF GETB4 * PUTB4 ;buffer used for GETBYT as well -- NFS00 0284 8000 -- NFS00 0285 8000 ;**** Area reserved, not to be used again **** -- NFS00 0286 8000 -- NFS00 0287 8000 0E0E TARGET * RSTAT +&01 -- NFS00 0288 8000 0E30 FNAME * CMNDP +&20 ;space to hold filename passed NFS00 NFS00 NFS00 NFS00 Acorn macro assembler Page 4 NFS00 System Organisation NFS00 -- NFS00 0289 8000 0E10 VDATA * TARGET +&02 -- NFS00 0290 8000 FE00 R6845 * &FE00 -- NFS00 0291 8000 FE01 D6845 * &FE01 -- NFS00 0292 8000 -- NFS00 0293 8000 000A ROFF * &000A -- NFS00 0294 8000 -- NFS00 0295 8000 0000 RWRITE * &0000 -- NFS00 0296 8000 0001 RWORD * &0001 -- NFS00 0297 8000 0002 RBYTE1 * &0002 -- NFS00 0298 8000 0003 RBYTE2 * &0003 -- NFS00 0299 8000 -- NFS00 0300 8000 ;*** Manifest offsets in the static area (2) *** -- NFS00 0301 8000 -- NFS00 0302 8000 0000 PRXCB * &00 ;offset from start of page -- NFS00 0303 8000 0000 PTXCB * &0000 -- NFS00 0304 8000 0002 PSLOCN * PTXCB +&02 ;located inside the CB -- NFS00 0305 8000 0018 UFSCB * 12 * 2 ;dedicated CB for DOFSOP's -- NFS00 0306 8000 000C RTXCB * &000C -- NFS00 0307 8000 00D9 BUFFER * RXCBS * &0C +&1 ;lowest area available -- NFS00 0308 8000 00DA DATA1 * BUFFER +&01 -- NFS00 0309 8000 00DB DATA2 * DATA1 +&01 -- NFS00 0310 8000 00DC DATA3 * DATA2 +&01 ;pointers into the 4 byte data area -- NFS00 0311 8000 00DD DATA4 * DATA3 +&01 -- NFS00 0312 8000 00E9 VBUFF * &E9 ;offset in page2 -- NFS00 0313 8000 -- NFS00 0314 8000 ;*** Manifest offsets in the static area (1) *** -- NFS00 0315 8000 -- NFS00 0316 8000 0000 SAVEAR * &0000 ;save area over OSWORD calls -- NFS00 0317 8000 0004 STAT2 * SAVEAR +&04 ;status byte -- NFS00 0318 8000 0005 SAVELO * STAT2 +&01 ;low level save area -- NFS00 0319 8000 0015 SAVEHI * SAVELO +&10 ;high level save area -- NFS00 0320 8000 001F PBUFF * SAVEHI +&0A ;start of printer buffer -- NFS00 0321 8000 0080 JSRBUF * &0080 ;start of JSR buffer -- NFS00 0322 8000 007F JSRSIZ * JSRBUF -&01 ;counter for JSR args -- NFS00 0323 8000 006F UTXCB * JSRSIZ -&10 ;user TXCB -- NFS00 0324 8000 0050 PSIZE * UTXCB - PBUFF ;as much space as is available -- NFS00 0325 8000 -- NFS00 0326 8000 ;*** dedicated pointers *** -- NFS00 0327 8000 -- NFS00 0328 8000 009C PAGE1 * &009C ;dedicated pointer -- NFS00 0329 8000 009E WORKP1 * &009E ;pointer to workarea -- NFS00 0330 8000 -- NFS00 0331 8000 ;*** MOS 0-page save area for registers *** -- NFS00 0332 8000 -- NFS00 0333 8000 00F0 PARMX * &00F0 -- NFS00 0334 8000 00F1 PARMY * &00F1 -- NFS00 0335 8000 00EF PARMA * &00EF ;parameters passed in OSBYTE,WORD -- NFS00 0336 8000 -- NFS00 0337 8000 ;*** TUBE registers and routines *** -- NFS00 0338 8000 -- NFS00 0339 8000 FEE5 REG3 * &FEE5 ;write data to here -- NFS00 0340 8000 0406 TBINIT * &0406 ;initialise the TUBE -- NFS00 0341 8000 00C3 TBSEMA * &C3 -- NFS00 0342 8000 0083 TCSEMA * &83 ;claim and release protocol -- NFS00 0343 8000 -- NFS00 0344 8000 ;*** MOS string reading routines *** -- NFS00 0345 8000 -- NFS00 0346 8000 FFC2 GSINIT * &FFC2 -- NFS00 0347 8000 FFC5 GSREAD * &FFC5 -- NFS00 0348 8000 -- NFS00 0349 8000 ;*** Control chars in data tables *** -- NFS00 0350 8000 -- NFS00 0351 8000 00FE CBSTOP * &FE -- NFS00 0352 8000 00FD CBSKIP * &FD -- NFS00 0353 8000 00FC CBFILL * &FC -- NFS00 0354 8000 -- NFS00 0355 8000 ;*** SEI-state 0-page *** -- NFS00 0356 8000 -- NFS00 0357 8000 00FA SEI1 * &FA -- NFS00 0358 8000 00FB SEI2 * &FB -- NFS00 0359 8000 -- NFS00 0360 8000 LNK NFS01 -- NFS01 0001 8000 -- NFS01 0002 8000 ; > NFS01 -- NFS01 0003 8000 TTL Sideways ROM service routines -- NFS01 0004 8000 OPT ROMP NFS01 NFS01 NFS01 NFS01 Acorn macro assembler Page 5 NFS01 Sideways ROM service routines NFS01 -- NFS01 0005 8000 ;(C) 1981 ACORN Computers Limited -- NFS01 0006 8000 -- NFS01 0007 8000 FFFF FALSE * &FFFF -- NFS01 0008 8000 -- NFS01 0009 8000 ; OS routine indirections -- NFS01 0010 8000 021E FSCVEC * &021E -- NFS01 0011 8000 -- NFS01 0012 8000 001B rFILID * &1B -- NFS01 0013 8000 -- NFS01 0014 8000 -- NFS01 0015 8000 ; ROM routine addresses -- NFS01 0016 8000 FF00 ROMNMI * &FF00 -- NFS01 0017 8000 FF03 ROMBRK * ROMNMI+&3 -- NFS01 0018 8000 FF06 ROMIRA * ROMBRK+&3 -- NFS01 0019 8000 FF09 ROMIRB * ROMIRA+&3 -- NFS01 0020 8000 FF0C ROMCOM * ROMIRB+&3 -- NFS01 0021 8000 FF0F ROMBYT * ROMCOM+&3 -- NFS01 0022 8000 FF12 ROMWRD * ROMBYT+&3 -- NFS01 0023 8000 FF15 ROMWRC * ROMWRD+&3 -- NFS01 0024 8000 FF18 ROMRDC * ROMWRC+&3 -- NFS01 0025 8000 FF1B ROMFIL * ROMRDC+&3 -- NFS01 0026 8000 FF1E ROMARG * ROMFIL+&3 -- NFS01 0027 8000 FF21 ROMBGT * ROMARG+&3 -- NFS01 0028 8000 FF24 ROMBPT * ROMBGT+&3 -- NFS01 0029 8000 FF27 ROMGPB * ROMBPT+&3 -- NFS01 0030 8000 FF2A ROMFND * ROMGPB+&3 -- NFS01 0031 8000 FF2D ROMFSC * ROMFND+&3 -- NFS01 0032 8000 FF30 ROMEVT * ROMFSC+&3 -- NFS01 0033 8000 FF33 ROMVDU * ROMEVT+&3 -- NFS01 0034 8000 FF36 ROMUPT * ROMVDU+&3 -- NFS01 0035 8000 -- NFS01 0036 8000 ; OSBYTE codes -- NFS01 0037 8000 007A FXSCAN * &7A ;scan keyboard -- NFS01 0038 8000 0077 FXSPEX * &77 ;close SPOOL and EXEC files -- NFS01 0039 8000 00A8 FXROMI * &A8 ;ROM 3-byte indirection origins -- NFS01 0040 8000 0078 FXOKEY * &78 ;set OKEY -- NFS01 0041 8000 00FD FXRSET * &FD ;reset type -- NFS01 0042 8000 -- NFS01 0043 8000 ; MOS variables -- NFS01 0044 8000 00F2 LINE * &00F2 -- NFS01 0045 8000 00F4 ROMID * &00F4 -- NFS01 0046 8000 00F6 ROMPTR * &00F6 -- NFS01 0047 8000 -- NFS01 0048 8000 FFFF dA * FALSE -- NFS01 0049 8000 00A0 START * &00A0 -- NFS01 0050 8000 00A2 ADDRL * START +&02 -- NFS01 0051 8000 00A3 ADDRH * ADDRL +&01 -- NFS01 0052 8000 00A4 TIMOUT * ADDRH +&01 -- NFS01 0053 8000 00A9 END * TIMOUT +&05 -- NFS01 0054 8000 -- NFS01 0055 8000 TUBE -- NFS01 0056 8000 0400 RTUBE * &0400 ;other org -- NFS01 0057 8000 0128 WRAM * &0128 -- NFS01 0058 8000 0700 SRAM * &0700 -- NFS01 0059 8000 0000 ZRAM * &0000 -- NFS01 0060 8000 0012 QRAM * ZRAM +&12 ;** 21/9/83 ** -- NFS01 0061 8000 0014 CLAIMT * QRAM +&02 -- NFS01 0062 8000 0015 CLAIMER * CLAIMT +&01 -- NFS01 0063 8000 0016 ZPTUBE * CLAIMER +&01 -- NFS01 0064 8000 00FD REPTR * &00FD -- NFS01 0065 8000 00FF ESCFLG * &00FF -- NFS01 0066 8000 0202 BRKVEC * &0202 -- NFS01 0067 8000 020E WRCVEC * &020E -- NFS01 0068 8000 0210 RDCVEC * &0210 -- NFS01 0069 8000 0220 EVTVEC * &0220 -- NFS01 0070 8000 FEE0 R1STAT * &FEE0 -- NFS01 0071 8000 FEE1 R1DATA * R1STAT +&01 -- NFS01 0072 8000 FEE2 R2STAT * R1DATA +&01 -- NFS01 0073 8000 FEE3 R2DATA * R2STAT +&01 -- NFS01 0074 8000 FEE4 R3STAT * R2DATA +&01 -- NFS01 0075 8000 FEE5 R3DATA * R3STAT +&01 -- NFS01 0076 8000 FEE6 R4STAT * R3DATA +&01 -- NFS01 0077 8000 FEE7 R4DATA * R4STAT +&01 -- NFS01 0078 8000 FFCE OSFIND * &FFCE -- NFS01 0079 8000 FFD1 OSGBPB * OSFIND +&03 -- NFS01 0080 8000 FFD4 OSBPUT * OSGBPB +&03 -- NFS01 0081 8000 FFD7 OSBGET * OSBPUT +&03 -- NFS01 0082 8000 FFDA OSARGX * OSBGET +&03 -- NFS01 0083 8000 FFDD OSFILE * OSARGX +&03 -- NFS01 0084 8000 -- NFS01 0085 8000 ; paged ROM origin -- NFS01 0086 8000 4C E1 80 ORG JMP RPROC ;Remote proc jump -- NFS01 0087 8003 4C F7 80 JMP THERE ;OS service routine -- NFS01 0088 8006 82 = &82 ;type byte (service ROM) -- NFS01 0089 8007 10 = COPYR ;offset pointer to copyright message -- NFS01 0090 8008 NAMES ;names to match on -- NFS01 0091 8008 83 BIN = &83 ;Binary version number -- NFS01 0092 8009 44 46 53 DISK = "DFS," -- NFS01 0093 800D 4E 45 54 NET = "NET" -- NFS01 0094 8010 COPYR -- NFS01 0095 8010 00 = ZERO ;terminator -- NFS01 0096 8011 28 43 29 = "(C)" -- NFS01 0097 8014 52 4F 46 ROFFL = "ROFF" -- NFS01 0098 8018 -- NFS01 0099 8018 ERRTAB -- NFS01 0100 8018 00 = NLIST1 - MESTAB -- NFS01 0101 8019 0D = NLIST2 - MESTAB -- NFS01 0102 801A 18 = NLIST3 - MESTAB -- NFS01 0103 801B 27 = NLIST4 - MESTAB -- NFS01 0104 801C 31 = NLIST5 - MESTAB -- NFS01 0105 801D 31 = NLIST6 - MESTAB -- NFS01 0106 801E 31 = NLIST7 - MESTAB -- NFS01 0107 801F 39 = NLIST8 - MESTAB -- NFS01 0108 8020 45 = NRMSG - MESTAB -- NFS01 0109 8021 -- NFS01 0110 8021 MCPEEK ;this area is peeked to determine the M/c info -- NFS01 0111 8021 01 = &01 ;BBCpu -- NFS01 0112 8022 00 = &00 ;Acorn M/c -- NFS01 0113 8023 60 = &60 ;=> kosher version (using reg. 4) -- NFS01 0114 8024 03 = &03 ;issue number -- NFS01 0115 8025 -- NFS01 0116 8025 CASELO -- NFS01 0117 8025 -- NFS01 0118 8025 SVLO ;lo-byte of service routine address -- NFS01 0119 8025 F5 = RTTS -&01 ;no-operation -- NFS01 0120 8026 BB = STATIC -&01 ;offer static workspace -- NFS01 0121 8027 C4 = DYNAM -&01 ;offer dynamic workspace -- NFS01 0122 8028 1C = BOOT -&01 ;offer bootstrap -- NFS01 0123 8029 B4 = NAME -&01 ;offer command name -- NFS01 0124 802A 3B = BRIANI -&01 ;unknown interrupt -- NFS01 0125 802B F5 = RTTS -&01 ;BRK NFS01 NFS01 NFS01 NFS01 Acorn macro assembler Page 6 NFS01 Sideways ROM service routines NFS01 -- NFS01 0126 802C 6E = FSBYTE -&01 ;OSBYTE call -- NFS01 0127 802D 86 = FSWORD -&01 ;OSWORD call -- NFS01 0128 802E 07 = HELP -&01 ;*HELP command -- NFS01 0129 802F F5 = RTTS - &01 ;Claim for static workspace -- NFS01 0130 8030 38 = BRIANQ - &01 ;Relinquish NMI, restore old user -- NFS01 0131 8031 35 = BRIANC - &01 ;call to claim NMI -- NFS01 0132 8032 F0 = NAME1 - &1 ;restart filing system -- NFS01 0133 8033 -- NFS01 0134 8033 FC PRLO = CHARIN -&01 ;put chars into buffer -- NFS01 0135 8034 AE = REMOT - &01 ;initialise REMOTE -- NFS01 0136 8035 AA = CVIEW - &01 ;grab screen parameters -- NFS01 0137 8036 DC = RESET - &01 ;restart language -- NFS01 0138 8037 EC = RCHAR - &01 ;char from REMOTE -- NFS01 0139 8038 -- NFS01 0140 8038 FTABLO -- NFS01 0141 8038 2B = OPTION -&01 ;(0) -- NFS01 0142 8039 AC = EOFR -&01 ;(1) end-of-file -- NFS01 0143 803A DB = CMNDR -&01 ;(2) -- NFS01 0144 803B 1A = DECODE -&01 ;(3) unrecognised command line -- NFS01 0145 803C DB = CMNDR -&01 ;(4) *RUN command -- NFS01 0146 803D 66 = CAT -&01 ;(5) catalogue request -- NFS01 0147 803E 50 = FSDIE - &01 ;(6) New filing system -- NFS01 0148 803F CA = HANDLE - &01 ;(7) bounds on handles -- NFS01 0149 8040 -- NFS01 0150 8040 95 CTABLO = INFO -&01 -- NFS01 0151 8041 37 = LOGIN -&01 -- NFS01 0152 8042 38 = SDISC -&01 -- NFS01 0153 8043 31 = SDIR -&01 -- NFS01 0154 8044 E1 = CMND -&01 ;entry for load as command -- NFS01 0155 8045 2C = SLIB -&01 -- NFS01 0156 8046 -- NFS01 0157 8046 66 TABLO = TXPOLL -&01 -- NFS01 0158 8047 6C = RXPOLL -&01 -- NFS01 0159 8048 7C = DELCB -&01 -- NFS01 0160 8049 BB = ROFFF - &01 -- NFS01 0161 804A -- NFS01 0162 804A CASEHI -- NFS01 0163 804A -- NFS01 0164 804A SVHI ;hi-byte of service routine address -- NFS01 0165 804A 80 = /(RTTS -&01 ) -- NFS01 0166 804B 82 = /(STATIC -&01 ) -- NFS01 0167 804C 82 = /(DYNAM -&01 ) -- NFS01 0168 804D 82 = /(BOOT -&01 ) -- NFS01 0169 804E 81 = /(NAME -&01 ) -- NFS01 0170 804F 96 = /(BRIANI -&01 ) -- NFS01 0171 8050 80 = /(RTTS -&01 ) -- NFS01 0172 8051 80 = /(FSBYTE -&01 ) -- NFS01 0173 8052 8E = /(FSWORD -&01 ) -- NFS01 0174 8053 82 = /(HELP -&01 ) -- NFS01 0175 8054 80 = /(RTTS - &01 ) -- NFS01 0176 8055 96 = /(BRIANQ - &01 ) -- NFS01 0177 8056 96 = /(BRIANC - &01 ) -- NFS01 0178 8057 81 = /(NAME1 - &01 ) -- NFS01 0179 8058 -- NFS01 0180 8058 84 PRHI = /(CHARIN -&01 ) -- NFS01 0181 8059 84 = /(REMOT -&01 ) -- NFS01 0182 805A 92 = /(CVIEW - &01 ) -- NFS01 0183 805B 84 = /(RESET - &01 ) -- NFS01 0184 805C 84 = /(RCHAR - &01 ) -- NFS01 0185 805D -- NFS01 0186 805D FTABHI -- NFS01 0187 805D 8A = /(OPTION -&01 ) ;(0) -- NFS01 0188 805E 88 = /(EOFR -&01 ) ;(1) -- NFS01 0189 805F 8D = /(CMNDR -&01 ) ;(2) -- NFS01 0190 8060 8C = /(DECODE -&01 ) ;(3) -- NFS01 0191 8061 8D = /(CMNDR -&01 ) ;(4) -- NFS01 0192 8062 8C = /(CAT -&01 ) ;(5) -- NFS01 0193 8063 83 = /(FSDIE - &01 ) ;(6) -- NFS01 0194 8064 86 = /(HANDLE - &01 ) ;(7) -- NFS01 0195 8065 -- NFS01 0196 8065 8D CTABHI = /(INFO -&01 ) -- NFS01 0197 8066 8E = /(LOGIN -&01 ) -- NFS01 0198 8067 8E = /(SDISC -&01 ) -- NFS01 0199 8068 8E = /(SDIR -&01 ) -- NFS01 0200 8069 8D = /(CMND -&01 ) ;entry for load as command -- NFS01 0201 806A 8E = /(SLIB -&01 ) -- NFS01 0202 806B -- NFS01 0203 806B 8E TABHI = /(TXPOLL -&01 ) -- NFS01 0204 806C 8E = /(RXPOLL -&01 ) -- NFS01 0205 806D 8E = /(DELCB -&01 ) -- NFS01 0206 806E 81 = /(ROFFF -&01 ) -- NFS01 0207 806F -- NFS01 0208 806F 0005 PRTBLN * FTABLO - PRLO ;set table length -- NFS01 0209 806F FSBYTE ;call here on BYTE -- NFS01 0210 806F ;Y holds the call number -- NFS01 0211 806F ; Table of calls -- NFS01 0212 806F ; 50 = Poll Txcb -- NFS01 0213 806F ; 51 = Poll Rxcb -- NFS01 0214 806F ; 52 = Delete Rxcb -- NFS01 0215 806F ; 53 = Break Remote link -- NFS01 0216 806F -- NFS01 0217 806F A5 EF LDA PARMA ;old value -- NFS01 0218 8071 E9 31 SBCIM 49 ;check bounds -- NFS01 0219 8073 ; BMI RTTS -- NFS01 0220 8073 C9 04 CMPIM &04 -- NFS01 0221 8075 B0 6C BCS RPROC1 NFS01 0221 8075 v13 NFS01 0222 8077 AA TAX NFS01 0221 8075 v13 NFS01 0223 8078 NFS01 0221 8075 v13 NFS01 0224 8078 A9 00 LDAIM 0 NFS01 0221 8075 v13 NFS01 0225 807A 85 A9 STA ROMA ;claim call NFS01 0221 8075 v13 NFS01 0226 807C NFS01 0221 8075 v13 NFS01 0227 807C 98 TYA ;save Y NFS01 0221 8075 v13 NFS01 0228 807D A0 21 LDYIM TABLO - CASELO NFS01 0221 8075 v13 NFS01 0229 807F D0 66 BNE JMI ;do JMI NFS01 0221 8075 v13 NFS01 0230 8081 NFS01 0221 8075 v13 NFS01 0231 8081 C8 READIN INY NFS01 0221 8075 v13 NFS01 0232 8082 LOGON ;called from DECODE as the FS number may NFS01 0221 8075 v13 NFS01 0233 8082 ;be embedded in the command line and should be extracted NFS01 0221 8075 v13 NFS01 0234 8082 ;and stored in FSLOCN. NFS01 0221 8075 v13 NFS01 0235 8082 NFS01 0221 8075 v13 NFS01 0236 8082 B1 BB LDAIY TEMPX NFS01 0221 8075 v13 NFS01 0237 8084 C9 20 CMPIM SPACE NFS01 0221 8075 v13 NFS01 0238 8086 F0 F9 BEQ READIN NFS01 0221 8075 v13 NFS01 0239 8088 C9 3A CMPIM "9"+ 1 ;returns C=1 if no number NFS01 0221 8075 v13 NFS01 0240 808A B0 11 BCS PWFL1 NFS01 0221 8075 v13 NFS01 0241 808C 20 77 86 JSR DECIN NFS01 0221 8075 v13 NFS01 0242 808F 90 07 BCC READEX ;found a '.' NFS01 0221 8075 v13 NFS01 0243 8091 NFS01 0221 8075 v13 NFS01 0244 8091 8D 01 0E STA FSLOCN + 1 ;network number NFS01 0221 8075 v13 NFS01 0245 8094 C8 INY NFS01 0221 8075 v13 NFS01 0246 8095 20 77 86 JSR DECIN NFS01 NFS01 NFS01 NFS01 Acorn macro assembler Page 7 NFS01 Sideways ROM service routines NFS01 NFS01 0221 8075 v13 NFS01 0247 8098 NFS01 0221 8075 v13 NFS01 0248 8098 F0 03 READEX BEQ PWFL1 NFS01 0221 8075 v13 NFS01 0249 809A 8D 00 0E STA FSLOCN ;so set up new FS id NFS01 0221 8075 v13 NFS01 0250 809D NFS01 0221 8075 v13 NFS01 0251 809D 20 82 8D PWFL1 JSR CATLP NFS01 0221 8075 v13 NFS01 0252 80A0 88 PWFLA DEY NFS01 0221 8075 v13 NFS01 0253 80A1 F0 22 BEQ PWFLB NFS01 0221 8075 v13 NFS01 0254 80A3 B9 05 0F LDAAY TXBUF NFS01 0221 8075 v13 NFS01 0255 80A6 C9 3A CMPIM ":" NFS01 0221 8075 v13 NFS01 0256 80A8 D0 F6 BNE PWFLA NFS01 0221 8075 v13 NFS01 0257 80AA NFS01 0221 8075 v13 NFS01 0258 80AA 20 EE FF JSR OSWRCH ;prompt for password NFS01 0221 8075 v13 NFS01 0259 80AD 20 A1 84 PWFL3 JSR ESC ;detect escape here NFS01 0221 8075 v13 NFS01 0260 80B0 20 E0 FF JSR OSRDCH ;read password NFS01 0221 8075 v13 NFS01 0261 80B3 99 05 0F STAAY TXBUF ;fill it into the buffer NFS01 0221 8075 v13 NFS01 0262 80B6 C8 INY NFS01 0221 8075 v13 NFS01 0263 80B7 E8 INX NFS01 0221 8075 v13 NFS01 0264 80B8 C9 0D CMPIM CR ;'til end of line NFS01 0221 8075 v13 NFS01 0265 80BA D0 F1 BNE PWFL3 NFS01 0221 8075 v13 NFS01 0266 80BC 20 E7 FF JSR OSNEWL NFS01 0221 8075 v13 NFS01 0267 80BF D0 DF BNE PWFLA NFS01 0221 8075 v13 NFS01 0268 80C1 NFS01 0221 8075 v13 NFS01 0269 80C1 COMERR ;passes the command line to FS with Fn=0 NFS01 0221 8075 v13 NFS01 0270 80C1 ;to get a FS decoding of it. The command code returned shows NFS01 0221 8075 v13 NFS01 0271 80C1 ;what action, if any, should be taken by the user. NFS01 0221 8075 v13 NFS01 0272 80C1 NFS01 0221 8075 v13 NFS01 0273 80C1 20 82 8D JSR CATLP ;copy the command line across NFS01 0221 8075 v13 NFS01 0274 80C4 A8 TAY ;indicates command line decoding NFS01 0221 8075 v13 NFS01 0275 80C5 20 C7 83 PWFLB JSR DOFSOP NFS01 0221 8075 v13 NFS01 0276 80C8 AE 03 0F LDX RXCC ;get command code NFS01 0221 8075 v13 NFS01 0277 80CB F0 29 BEQ RTTS ;skip if RC=0 NFS01 0221 8075 v13 NFS01 0278 80CD AD 05 0F LDA RXBUF NFS01 0221 8075 v13 NFS01 0279 80D0 A0 17 LDYIM CTABLO - CASELO -&04 ;get offset NFS01 0221 8075 v13 NFS01 0280 80D2 D0 13 BNE JMI NFS01 0221 8075 v13 NFS01 0281 80D4 NFS01 0221 8075 v13 NFS01 0282 80D4 FSOP NFS01 0221 8075 v13 NFS01 0283 80D4 20 49 86 JSR PUTREG ;save registers NFS01 0221 8075 v13 NFS01 0284 80D7 C9 08 CMPIM &08 ;look for table extent NFS01 0221 8075 v13 NFS01 0285 80D9 B0 1B BCS RTTS ;exit, no regs corrupt NFS01 0221 8075 v13 NFS01 0286 80DB NFS01 0221 8075 v13 NFS01 0287 80DB AA TAX ;index the table NFS01 0221 8075 v13 NFS01 0288 80DC 98 TYA ;save A NFS01 0221 8075 v13 NFS01 0289 80DD A0 13 LDYIM FTABLO - CASELO NFS01 0221 8075 v13 NFS01 0290 80DF D0 06 BNE JMI NFS01 0221 8075 v13 NFS01 0291 80E1 NFS01 0221 8075 v13 NFS01 0292 80E1 E0 05 RPROC CPXIM PRTBLN ;come here on Remote Proc jump NFS01 0221 8075 v13 NFS01 0293 80E3 B0 11 RPROC1 BCS RTTS ;skip if no good NFS01 0229 807F v19 NFS01 0294 80E5 A0 0E LDYIM PRLO - CASELO NFS01 0229 807F v19 NFS01 0295 80E7 E8 JMI INX NFS01 0277 80CB v56 NFS01 0296 80E8 88 DEY NFS01 0277 80CB v56 NFS01 0297 80E9 10 FC BPL JMI ;get correct offset NFS01 0277 80CB v56 NFS01 0298 80EB A8 TAY ;restore Y NFS01 0277 80CB v56 NFS01 0299 80EC BD 49 80 LDAAX CASEHI -&01 NFS01 0277 80CB v56 NFS01 0300 80EF 48 PHA NFS01 0277 80CB v56 NFS01 0301 80F0 BD 24 80 LDAAX CASELO -&01 NFS01 0277 80CB v56 NFS01 0302 80F3 48 PHA NFS01 0277 80CB v56 NFS01 0303 80F4 A6 BB LDX TEMPX NFS01 0277 80CB v56 NFS01 0304 80F6 60 RTTS RTS -- NFS01 0305 80F7 000D NSV * &0D ;number of entries in SV table -- NFS01 0306 80F7 SERVICE ;entered by MOS for service request -- NFS01 0307 80F7 ; A = service code -- NFS01 0308 80F7 ; X = ROM id -- NFS01 0309 80F7 ; Y = argument (service dependent) -- NFS01 0310 80F7 -- NFS01 0311 80F7 2C 8F 02 THERE BIT &28F -- NFS01 0312 80FA 08 PHP -- NFS01 0313 80FB 10 03 BPL THERE7 NFS01 0313 80FB v7C NFS01 0314 80FD 20 9D 9F JSR DISC NFS01 0313 80FB v7C NFS01 0315 8100 NFS01 0313 80FB v7C NFS01 0316 8100 48 THERE7 PHA -- NFS01 0317 8101 C9 01 CMPIM 1 ;do this every RESET pass 1 -- NFS01 0318 8103 D0 15 BNE FRUGA NFS01 0318 8103 v6A NFS01 0319 8105 NFS01 0318 8103 v6A NFS01 0320 8105 AD A0 FE LDA &FEA0 ;status register 0 NFS01 0318 8103 v6A NFS01 0321 8108 29 ED ANDIM &ED NFS01 0318 8103 v6A NFS01 0322 810A D0 07 BNE FRUGC NFS01 0318 8103 v6A NFS01 0323 810C NFS01 0318 8103 v6A NFS01 0324 810C AD A1 FE LDA &FEA1 ;status register 1 NFS01 0318 8103 v6A NFS01 0325 810F 29 DB ANDIM &DB NFS01 0318 8103 v6A NFS01 0326 8111 F0 07 BEQ FRUGA NFS01 0318 8103 v6A NFS01 0327 8113 NFS01 0318 8103 v6A NFS01 0328 8113 3E F0 0D FRUGC ROLAX &DF0 NFS01 0318 8103 v6A NFS01 0329 8116 38 SEC NFS01 0318 8103 v6A NFS01 0330 8117 7E F0 0D RORAX &DF0 ;frugal the net here NFS01 0318 8103 v6A NFS01 0331 811A NFS01 0318 8103 v6A NFS01 0332 811A BD F0 0D FRUGA LDAAX &DF0 -- NFS01 0333 811D 0A ASLA -- NFS01 0334 811E 68 PLA ;restore Acc -- NFS01 0335 811F -- NFS01 0336 811F 30 02 BMI THERE1 ;allow tube to function NFS01 0336 811F v7D NFS01 0337 8121 B0 6E BCS SERVC3 ; ROM off here NFS01 0337 8121 v11 NFS01 0338 8123 NFS01 0337 8121 v11 NFS01 0339 8123 ; Double jump here, so dont change condition NFS01 0337 8121 v11 NFS01 0340 8123 NFS01 0337 8121 v11 NFS01 0341 8123 C9 FE THERE1 CMPIM &FE NFS01 0337 8121 v11 NFS01 0342 8125 90 5C BCC XXXL1 NFS01 0337 8121 v11 NFS01 0343 8127 D0 1B BNE TGO ;A=$FF here NFS01 0337 8121 v11 NFS01 0344 8129 C0 00 CPYIM &00 ;A=$FE here NFS01 0337 8121 v11 NFS01 0345 812B F0 56 BEQ XXXL1 ;Skip here NFS01 0337 8121 v11 NFS01 0346 812D A2 06 LDXIM &06 NFS01 0337 8121 v11 NFS01 0347 812F A9 14 LDAIM &14 NFS01 0337 8121 v11 NFS01 0348 8131 20 F4 FF JSR OSBYTE NFS01 0337 8121 v11 NFS01 0349 8134 2C E0 FE TMESSA BIT R1STAT NFS01 0337 8121 v11 NFS01 0350 8137 10 FB BPL TMESSA NFS01 0337 8121 v11 NFS01 0351 8139 AD E1 FE LDA R1DATA NFS01 0337 8121 v11 NFS01 0352 813C F0 43 BEQ TOUT NFS01 0337 8121 v11 NFS01 0353 813E 20 EE FF JSR OSWRCH NFS01 0337 8121 v11 NFS01 0354 8141 4C 34 81 JMP TMESSA NFS01 0337 8121 v11 NFS01 0355 8144 NFS01 0337 8121 v11 NFS01 0356 8144 A9 AD TGO LDAIM EVENT NFS01 0337 8121 v11 NFS01 0357 8146 8D 20 02 STA EVTVEC NFS01 0337 8121 v11 NFS01 0358 8149 A9 06 LDAIM /(EVENT ) NFS01 0337 8121 v11 NFS01 0359 814B 8D 21 02 STA EVTVEC +&01 NFS01 0337 8121 v11 NFS01 0360 814E A9 16 LDAIM NEWBR NFS01 0337 8121 v11 NFS01 0361 8150 8D 02 02 STA BRKVEC NFS01 0337 8121 v11 NFS01 0362 8153 A9 00 LDAIM /(NEWBR ) NFS01 0337 8121 v11 NFS01 0363 8155 8D 03 02 STA BRKVEC +&01 NFS01 0337 8121 v11 NFS01 0364 8158 A9 8E LDAIM &8E NFS01 0337 8121 v11 NFS01 0365 815A 8D E0 FE STA R1STAT NFS01 0337 8121 v11 NFS01 0366 815D NFS01 0337 8121 v11 NFS01 0367 815D A0 00 LDYIM 0 NFS01 NFS01 NFS01 NFS01 Acorn macro assembler Page 8 NFS01 Sideways ROM service routines NFS01 NFS01 0337 8121 v11 NFS01 0368 815F B9 62 93 CLOOP LDAAY ORG52 ;code ORG'd at $400 NFS01 0337 8121 v11 NFS01 0369 8162 99 00 04 STAAY &0400 NFS01 0337 8121 v11 NFS01 0370 8165 B9 62 94 LDAAY ORG53 ;code ORG'd at $500 NFS01 0337 8121 v11 NFS01 0371 8168 99 00 05 STAAY &0500 NFS01 0337 8121 v11 NFS01 0372 816B B9 62 95 LDAAY ORG53 +&FF+&01 ;one page on NFS01 0337 8121 v11 NFS01 0373 816E 99 00 06 STAAY &0600 NFS01 0337 8121 v11 NFS01 0374 8171 88 DEY NFS01 0337 8121 v11 NFS01 0375 8172 D0 EB BNE CLOOP NFS01 0337 8121 v11 NFS01 0376 8174 20 21 04 JSR ADRRAL ;release all claims NFS01 0337 8121 v11 NFS01 0377 8177 A2 60 LDXIM &60 NFS01 0337 8121 v11 NFS01 0378 8179 BD 21 93 FLOOP LDAAX ZCODE NFS01 0337 8121 v11 NFS01 0379 817C 95 16 STAAX ZPTUBE NFS01 0337 8121 v11 NFS01 0380 817E CA DEX NFS01 0337 8121 v11 NFS01 0381 817F 10 F8 BPL FLOOP NFS01 0337 8121 v11 NFS01 0382 8181 NFS01 0337 8121 v11 NFS01 0383 8181 A9 00 TOUT LDAIM &00 NFS01 0337 8121 v11 NFS01 0384 8183 NFS01 0337 8121 v11 NFS01 0385 8183 C9 12 XXXL1 CMPIM &12 NFS01 0337 8121 v11 NFS01 0386 8185 D0 08 BNE SERVC1 ;explicit test for $12 NFS01 0337 8121 v11 NFS01 0387 8187 C0 05 CPYIM &05 NFS01 0337 8121 v11 NFS01 0388 8189 D0 04 BNE SERVC1 ;restart only if Y=5 NFS01 0337 8121 v11 NFS01 0389 818B A9 0D LDAIM NSV NFS01 0337 8121 v11 NFS01 0390 818D D0 04 BNE SERVC2 ;** 9/8/83 ** NFS01 0337 8121 v11 NFS01 0391 818F NFS01 0337 8121 v11 NFS01 0392 818F C9 0D SERVC1 CMPIM NSV NFS01 0337 8121 v11 NFS01 0393 8191 B0 1C SERVC3 BCS RTS ;[unrecognised service code] NFS01 0393 8191 v63 NFS01 0394 8193 AA SERVC2 TAX NFS01 0393 8191 v63 NFS01 0395 8194 A5 A9 LDA ROMA NFS01 0393 8191 v63 NFS01 0396 8196 48 PHA NFS01 0393 8191 v63 NFS01 0397 8197 A5 A8 LDA ROMY NFS01 0393 8191 v63 NFS01 0398 8199 48 PHA ;save work area NFS01 0393 8191 v63 NFS01 0399 819A NFS01 0393 8191 v63 NFS01 0400 819A 86 A9 STX ROMA ;save service code NFS01 0393 8191 v63 NFS01 0401 819C 84 A8 STY ROMY NFS01 0393 8191 v63 NFS01 0402 819E NFS01 0393 8191 v63 NFS01 0403 819E ; jump to appropriate service routine NFS01 0393 8191 v63 NFS01 0404 819E 98 TYA ;save Y NFS01 0393 8191 v63 NFS01 0405 819F A0 00 LDYIM SVLO - CASELO NFS01 0393 8191 v63 NFS01 0406 81A1 20 E7 80 JSR JMI NFS01 0393 8191 v63 NFS01 0407 81A4 A6 A9 LDX ROMA ;restore service code / zero NFS01 0393 8191 v63 NFS01 0408 81A6 NFS01 0393 8191 v63 NFS01 0409 81A6 68 PLA NFS01 0393 8191 v63 NFS01 0410 81A7 85 A8 STA ROMY NFS01 0393 8191 v63 NFS01 0411 81A9 68 PLA NFS01 0393 8191 v63 NFS01 0412 81AA 85 A9 STA ROMA NFS01 0393 8191 v63 NFS01 0413 81AC 8A TXA NFS01 0393 8191 v63 NFS01 0414 81AD A6 F4 LDX ROMID ;restore X as ROM number NFS01 0393 8191 v63 NFS01 0415 81AF NFS01 0393 8191 v63 NFS01 0416 81AF RTS NFS01 0393 8191 v63 NFS01 0417 81AF 28 PLP -- NFS01 0418 81B0 30 37 BMI TABVC3 NFS01 0418 81B0 v48 NFS01 0419 81B2 4C 9D 9F JMP DISC NFS01 0418 81B0 v48 NFS01 0420 81B5 NFS01 0418 81B0 v48 NFS01 0421 81B5 NFS01 0418 81B0 v48 NFS01 0422 81B5 NAME ;command name to decode NFS01 0418 81B0 v48 NFS01 0423 81B5 ; LINE(ROMY) -> command name NFS01 0418 81B0 v48 NFS01 0424 81B5 A2 0C LDXIM ROFFL - NAMES NFS01 0418 81B0 v48 NFS01 0425 81B7 20 62 83 JSR MATCH ;returns A=0, Z=1 on match NFS01 0418 81B0 v48 NFS01 0426 81BA D0 2E BNE NAME2 NFS01 0418 81B0 v48 NFS01 0427 81BC NFS01 0418 81B0 v48 NFS01 0428 81BC ROFFF NFS01 0418 81B0 v48 NFS01 0429 81BC NROFF NFS01 0418 81B0 v48 NFS01 0430 81BC ;code executed when +++ NFS01 0418 81B0 v48 NFS01 0431 81BC ;*ROFF or Break-link command issued NFS01 0418 81B0 v48 NFS01 0432 81BC ;The System masks are reset and control NFS01 0418 81B0 v48 NFS01 0433 81BC ;passes to the MOS. NFS01 0418 81B0 v48 NFS01 0434 81BC NFS01 0418 81B0 v48 NFS01 0435 81BC A0 04 LDYIM STAT2 NFS01 0418 81B0 v48 NFS01 0436 81BE B1 9C LDAIY PAGE1 NFS01 0418 81B0 v48 NFS01 0437 81C0 F0 21 BEQ NROFFX ;not done so end NFS01 0418 81B0 v48 NFS01 0438 81C2 A9 00 LDAIM &00 NFS01 0418 81B0 v48 NFS01 0439 81C4 AA TAX NFS01 0418 81B0 v48 NFS01 0440 81C5 91 9C STAIY PAGE1 NFS01 0418 81B0 v48 NFS01 0441 81C7 A8 TAY NFS01 0418 81B0 v48 NFS01 0442 81C8 A9 C9 LDAIM &C9 NFS01 0418 81B0 v48 NFS01 0443 81CA 20 F4 FF JSR OSBYTE ;enable KB NFS01 0418 81B0 v48 NFS01 0444 81CD A9 0A LDAIM ROFF NFS01 0418 81B0 v48 NFS01 0445 81CF 20 C4 90 JSR NTX NFS01 0418 81B0 v48 NFS01 0446 81D2 ;to set masks to zero NFS01 0418 81B0 v48 NFS01 0447 81D2 86 9E REMOL0 STX WORKP1 NFS01 0418 81B0 v48 NFS01 0448 81D4 A9 CE LDAIM &CE NFS01 0418 81B0 v48 NFS01 0449 81D6 A6 9E REMOL1 LDX WORKP1 NFS01 0418 81B0 v48 NFS01 0450 81D8 A0 7F LDYIM &7F ;keep lo 6 bits NFS01 0418 81B0 v48 NFS01 0451 81DA 20 F4 FF JSR OSBYTE ;intercept calls NFS01 0418 81B0 v48 NFS01 0452 81DD 69 01 ADCIM &01 ;carry set so add (net) 2 NFS01 0418 81B0 v48 NFS01 0453 81DF C9 D0 CMPIM &D0 NFS01 0418 81B0 v48 NFS01 0454 81E1 F0 F3 BEQ REMOL1 NFS01 0418 81B0 v48 NFS01 0455 81E3 A9 00 NROFFX LDAIM &00 NFS01 0418 81B0 v48 NFS01 0456 81E5 85 A9 STA ROMA ;claim call NFS01 0418 81B0 v48 NFS01 0457 81E7 85 9E STA WORKP1 ;restore the pointer NFS01 0418 81B0 v48 NFS01 0458 81E9 60 TABVC3 RTS NFS01 0426 81BA v51 NFS01 0459 81EA A2 05 NAME2 LDXIM NET -NAMES -- NFS01 0460 81EC 20 62 83 JSR MATCH -- NFS01 0461 81EF D0 24 BNE BADRTS NFS01 0461 81EF v5B NFS01 0462 81F1 NFS01 0461 81EF v5B NFS01 0463 81F1 20 18 82 NAME1 JSR JM16 ;kill previous filing system NFS01 0461 81EF v5B NFS01 0464 81F4 38 SEC NFS01 0461 81EF v5B NFS01 0465 81F5 66 A8 ROR ROMY ;kill AUTO-BOOT here NFS01 0461 81EF v5B NFS01 0466 81F7 20 7B 82 JSR AUTOFS ;claim the work-space and vectors NFS01 0461 81EF v5B NFS01 0467 81FA A0 1D LDYIM SAVEHI +&08 ;restore saved area after *NET only NFS01 0461 81EF v5B NFS01 0468 81FC NFS01 0461 81EF v5B NFS01 0469 81FC B1 9C INITL LDAIY PAGE1 NFS01 0461 81EF v5B NFS01 0470 81FE 99 EB 0D STAAY FSLOCN - SAVEHI NFS01 0461 81EF v5B NFS01 0471 8201 88 DEY NFS01 0461 81EF v5B NFS01 0472 8202 C0 14 CPYIM SAVEHI -&01 NFS01 0461 81EF v5B NFS01 0473 8204 D0 F6 BNE INITL NFS01 0461 81EF v5B NFS01 0474 8206 F0 5C BEQ INIT NFS01 0474 8206 v23 NFS01 0475 8208 NFS01 0474 8206 v23 NFS01 0476 8208 20 5C 86 HELP JSR VSTRNG NFS01 0474 8206 v23 NFS01 0477 820B 0D 4E 46 = CR,"NFS 3.60" NFS01 0474 8206 v23 NFS01 0478 8214 0D = CR ;Terminate HELP message NFS01 0474 8206 v23 NFS01 0479 8215 NFS01 0474 8206 v23 NFS01 0480 8215 BOOT0 NFS01 0474 8206 v23 NFS01 0481 8215 BADRTS NFS01 0474 8206 v23 NFS01 0482 8215 A4 A8 LDY ROMY NFS01 0474 8206 v23 NFS01 0483 8217 60 RTS NFS01 0474 8206 v23 NFS01 0484 8218 NFS01 0474 8206 v23 NFS01 0485 8218 A9 06 JM16 LDAIM SIX NFS01 0474 8206 v23 NFS01 0486 821A 6C 1E 02 JM1 JMI &021E ;call to OSFUNC NFS01 0474 8206 v23 NFS01 0487 821D NFS01 0474 8206 v23 NFS01 0488 821D BOOT ;bootstrap offered NFS01 NFS01 NFS01 NFS01 Acorn macro assembler Page 9 NFS01 Sideways ROM service routines NFS01 NFS01 0474 8206 v23 NFS01 0489 821D ; scan keyboard NFS01 0474 8206 v23 NFS01 0490 821D 20 18 82 JSR JM16 ;call to claim vectors NFS01 0474 8206 v23 NFS01 0491 8220 A9 7A LDAIM FXSCAN NFS01 0474 8206 v23 NFS01 0492 8222 20 F4 FF JSR OSBYTE ;X := matrix address of pressed key ($FF=no key pressed) NFS01 0474 8206 v23 NFS01 0493 8225 8A TXA NFS01 0474 8206 v23 NFS01 0494 8226 30 0A BMI AUTO ;[auto boot, no key pressed] NFS01 0474 8206 v23 NFS01 0495 8228 ; key pressed - matrix address in A & X NFS01 0474 8206 v23 NFS01 0496 8228 49 55 EORIM &55 ;'n' NFS01 0474 8206 v23 NFS01 0497 822A D0 E9 BNE BOOT0 ;[not 'n' key] NFS01 0474 8206 v23 NFS01 0498 822C A8 TAY ;Y=0 here NFS01 0474 8206 v23 NFS01 0499 822D A9 78 LDAIM FXOKEY NFS01 0474 8206 v23 NFS01 0500 822F 20 F4 FF JSR OSBYTE ;forget key NFS01 0474 8206 v23 NFS01 0501 8232 AUTO ;identify filing system NFS01 0474 8206 v23 NFS01 0502 8232 20 5C 86 JSR VSTRNG NFS01 0474 8206 v23 NFS01 0503 8235 45 63 6F = "Econet Station " NFS01 0474 8206 v23 NFS01 0504 8244 A0 14 LDYIM SAVEHI - 1 NFS01 0474 8206 v23 NFS01 0505 8246 B1 9C LDAIY PAGE1 ;output the station number NFS01 0474 8206 v23 NFS01 0506 8248 20 BD 8D JSR DECOUT NFS01 0474 8206 v23 NFS01 0507 824B A9 20 LDAIM &20 ;look for data carrier detect NFS01 0474 8206 v23 NFS01 0508 824D 2C A1 FE BIT &FEA1 ;SR2 NFS01 0474 8206 v23 NFS01 0509 8250 F0 0D BEQ INITCR NFS01 0474 8206 v23 NFS01 0510 8252 20 5C 86 JSR VSTRNG NFS01 0474 8206 v23 NFS01 0511 8255 20 4E 6F = " No Clock" NFS01 0474 8206 v23 NFS01 0512 825E EA NOP ;negative byte NFS01 0474 8206 v23 NFS01 0513 825F 20 5C 86 INITCR JSR VSTRNG NFS01 0474 8206 v23 NFS01 0514 8262 0D 0D = CR,CR NFS01 0474 8206 v23 NFS01 0515 8264 INIT NFS01 0474 8206 v23 NFS01 0516 8264 ; alter normal OS indirections NFS01 0474 8206 v23 NFS01 0517 8264 A0 0D LDYIM FSCVEC-FILVEC+&1 -- NFS01 0518 8266 INIT1 -- NFS01 0519 8266 B9 9A 82 LDAAY VECTAB NFS01 0522 826D ^77 NFS01 0520 8269 99 12 02 STAAY FILVEC NFS01 0522 826D ^77 NFS01 0521 826C 88 DEY NFS01 0522 826D ^77 NFS01 0522 826D 10 F7 BPL INIT1 -- NFS01 0523 826F ; alter ROM indirections -- NFS01 0524 826F ; ROMPTR -> ROM indirection 3-byte tuples -- NFS01 0525 826F 20 25 83 JSR DYNVEC ;intercept the NET vector -- NFS01 0526 8272 A0 1B LDYIM rFILID -- NFS01 0527 8274 A2 07 LDXIM &07 -- NFS01 0528 8276 20 39 83 JSR INIT4 ;code in DYNVEC -- NFS01 0529 8279 86 A9 STX ROMA ;claim call -- NFS01 0530 827B -- NFS01 0531 827B A9 8F AUTOFS LDAIM &8F -- NFS01 0532 827D A2 0F LDXIM &0F -- NFS01 0533 827F 20 F4 FF JSR OSBYTE ;vectors claimed -- NFS01 0534 8282 A2 0A LDXIM &0A -- NFS01 0535 8284 20 F4 FF JSR OSBYTE ;claim FS workspace -- NFS01 0536 8287 A6 A8 LDX ROMY ;detect BOOT option -- NFS01 0537 8289 D0 37 BNE STATEX NFS01 0537 8289 v48 NFS01 0538 828B A2 92 LDXIM BOOTUP NFS01 0537 8289 v48 NFS01 0539 828D A0 82 LDYIM /(BOOTUP ) NFS01 0537 8289 v48 NFS01 0540 828F 4C 1B 8C JMP DECODE ;call with "I AM ... BOOT" NFS01 0537 8289 v48 NFS01 0541 8292 NFS01 0537 8289 v48 NFS01 0542 8292 49 20 2E BOOTUP = "I .BOOT",CR NFS01 0537 8289 v48 NFS01 0543 829A NFS01 0537 8289 v48 NFS01 0544 829A VECTAB NFS01 0537 8289 v48 NFS01 0545 829A 1B = ROMFIL NFS01 0537 8289 v48 NFS01 0546 829B FF = /(ROMFIL ) NFS01 0537 8289 v48 NFS01 0547 829C 1E = ROMARG NFS01 0537 8289 v48 NFS01 0548 829D FF = /(ROMARG ) NFS01 0537 8289 v48 NFS01 0549 829E 21 = ROMBGT NFS01 0537 8289 v48 NFS01 0550 829F FF = /(ROMBGT ) NFS01 0537 8289 v48 NFS01 0551 82A0 24 = ROMBPT NFS01 0537 8289 v48 NFS01 0552 82A1 FF = /(ROMBPT ) NFS01 0537 8289 v48 NFS01 0553 82A2 27 = ROMGPB NFS01 0537 8289 v48 NFS01 0554 82A3 FF = /(ROMGPB ) NFS01 0537 8289 v48 NFS01 0555 82A4 2A = ROMFND NFS01 0537 8289 v48 NFS01 0556 82A5 FF = /(ROMFND ) NFS01 0537 8289 v48 NFS01 0557 82A6 2D = ROMFSC NFS01 0537 8289 v48 NFS01 0558 82A7 FF = /(ROMFSC ) NFS01 0537 8289 v48 NFS01 0559 82A8 NFS01 0537 8289 v48 NFS01 0560 82A8 ECOTAB NFS01 0537 8289 v48 NFS01 0561 82A8 0C = FILEOP NFS01 0537 8289 v48 NFS01 0562 82A9 87 = /(FILEOP ) NFS01 0537 8289 v48 NFS01 0563 82AA 4A = "J" ;osfile NFS01 0537 8289 v48 NFS01 0564 82AB NFS01 0537 8289 v48 NFS01 0565 82AB 68 = OSARGS NFS01 0537 8289 v48 NFS01 0566 82AC 89 = /(OSARGS ) NFS01 0537 8289 v48 NFS01 0567 82AD 44 = "D" ;osargs NFS01 0537 8289 v48 NFS01 0568 82AE NFS01 0537 8289 v48 NFS01 0569 82AE 63 = GETBYT NFS01 0537 8289 v48 NFS01 0570 82AF 85 = /(GETBYT ) NFS01 0537 8289 v48 NFS01 0571 82B0 57 = "W" ;osbget NFS01 0537 8289 v48 NFS01 0572 82B1 NFS01 0537 8289 v48 NFS01 0573 82B1 13 = PUTBYT NFS01 0537 8289 v48 NFS01 0574 82B2 84 = /(PUTBYT ) NFS01 0537 8289 v48 NFS01 0575 82B3 42 = "B" ;osbput NFS01 0537 8289 v48 NFS01 0576 82B4 NFS01 0537 8289 v48 NFS01 0577 82B4 72 = OSBGPB NFS01 0537 8289 v48 NFS01 0578 82B5 8A = /(OSBGPB ) NFS01 0537 8289 v48 NFS01 0579 82B6 41 = "A" ;osbgpb NFS01 0537 8289 v48 NFS01 0580 82B7 NFS01 0537 8289 v48 NFS01 0581 82B7 D8 = FINDOP NFS01 0537 8289 v48 NFS01 0582 82B8 89 = /(FINDOP ) NFS01 0537 8289 v48 NFS01 0583 82B9 52 = "R" ;osfind NFS01 0537 8289 v48 NFS01 0584 82BA NFS01 0537 8289 v48 NFS01 0585 82BA D4 = FSOP NFS01 0537 8289 v48 NFS01 0586 82BB 80 = /(FSOP ) NFS01 0537 8289 v48 NFS01 0587 82BC ; = ZERO ;fsfunc NFS01 0537 8289 v48 NFS01 0588 82BC NFS01 0537 8289 v48 NFS01 0589 82BC STATIC NFS01 0537 8289 v48 NFS01 0590 82BC C0 10 CPYIM &10 ;this fits into the space in ECOTAB NFS01 0537 8289 v48 NFS01 0591 82BE B0 02 BCS STATEX NFS01 0537 8289 v48 NFS01 0592 82C0 A0 10 LDYIM &10 NFS01 0537 8289 v48 NFS01 0593 82C2 60 STATEX RTS -- NFS01 0594 82C3 -- NFS01 0595 82C3 80 = ENTRY ;NETVEC interception -- NFS01 0596 82C4 90 = /(ENTRY ) -- NFS01 0597 82C5 -- NFS01 0598 82C5 84 9D DYNAM STY &9D ;first page static area -- NFS01 0599 82C7 C8 INY ;claim one page -- NFS01 0600 82C8 84 9F STY &9F ;second page -- NFS01 0601 82CA A9 00 LDAIM &00 -- NFS01 0602 82CC A0 04 LDYIM STAT2 -- NFS01 0603 82CE 91 9C STAIY PAGE1 ;clean status byte -- NFS01 0604 82D0 A0 FF LDYIM FILLER -- NFS01 0605 82D2 85 9C STA &9C -- NFS01 0606 82D4 85 9E STA &9E ;set up pointers -- NFS01 0607 82D6 85 A8 STA ROMY -- NFS01 0608 82D8 8D 62 0D STA TXCLR ;reset TX sema -- NFS01 0609 82DB AA TAX NFS01 NFS01 NFS01 NFS01 Acorn macro assembler Page 10 NFS01 Sideways ROM service routines NFS01 -- NFS01 0610 82DC A9 FD LDAIM FXRSET ;check type of reset -- NFS01 0611 82DE 20 F4 FF JSR OSBYTE -- NFS01 0612 82E1 8A TXA ;A=0 then BREAK, A=1 then POWER-UP, A=2 then CTRL-BREAK -- NFS01 0613 82E2 F0 32 BEQ NETON NFS01 0613 82E2 v4D NFS01 0614 82E4 NFS01 0613 82E2 v4D NFS01 0615 82E4 A0 15 LDYIM SAVEHI ;stow this in Dynamic space too NFS01 0613 82E2 v4D NFS01 0616 82E6 A9 FE LDAIM FS NFS01 0613 82E2 v4D NFS01 0617 82E8 8D 00 0E STA FSLOCN ;default station NFS01 0613 82E2 v4D NFS01 0618 82EB 91 9C STAIY PAGE1 ;save in private workarea NFS01 0613 82E2 v4D NFS01 0619 82ED A9 00 LDAIM 0 NFS01 0613 82E2 v4D NFS01 0620 82EF 8D 01 0E STA FSLOCN + 1 NFS01 0613 82E2 v4D NFS01 0621 82F2 8D 63 0D STA LSTAT ;initial status copied for Low level NFS01 0613 82E2 v4D NFS01 0622 82F5 8D 06 0E STA MESS ;turn messages OFF NFS01 0613 82E2 v4D NFS01 0623 82F8 8D 05 0E STA OPT ;initialise this (for small FS) NFS01 0613 82E2 v4D NFS01 0624 82FB C8 INY NFS01 0613 82E2 v4D NFS01 0625 82FC 91 9C STAIY PAGE1 ;save in private work area NFS01 0613 82E2 v4D NFS01 0626 82FE A0 03 LDYIM 3 NFS01 0613 82E2 v4D NFS01 0627 8300 91 9E STAIY WORKP1 NFS01 0613 82E2 v4D NFS01 0628 8302 88 DEY NFS01 0613 82E2 v4D NFS01 0629 8303 A9 EB LDAIM PS NFS01 0613 82E2 v4D NFS01 0630 8305 91 9E STAIY WORKP1 ;set default printer server NFS01 0613 82E2 v4D NFS01 0631 8307 NFS01 0613 82E2 v4D NFS01 0632 8307 A5 A8 DNAML1 LDA ROMY ;null flag byte NFS01 0613 82E2 v4D NFS01 0633 8309 20 55 8E JSR OFFSET NFS01 0613 82E2 v4D NFS01 0634 830C B0 08 BCS NETON NFS01 0613 82E2 v4D NFS01 0635 830E A9 3F LDAIM &3F NFS01 0613 82E2 v4D NFS01 0636 8310 91 9E STAIY WORKP1 ;set up CB's NFS01 0613 82E2 v4D NFS01 0637 8312 E6 A8 INC ROMY NFS01 0613 82E2 v4D NFS01 0638 8314 D0 F1 BNE DNAML1 NFS01 0613 82E2 v4D NFS01 0639 8316 AD 18 FE NETON LDA &FE18 ;read station Id -- NFS01 0640 8319 A0 14 LDYIM SAVEHI - 1 -- NFS01 0641 831B 91 9C STAIY PAGE1 ;save station id -- NFS01 0642 831D 20 33 96 JSR BRIANP ;call lowlevel software to initialise -- NFS01 0643 8320 A9 40 LDAIM &40 ;enable user lowlevel Rx -- NFS01 0644 8322 8D 64 0D STA LFLAG -- NFS01 0645 8325 -- NFS01 0646 8325 A9 A8 DYNVEC LDAIM FXROMI ;********* -- NFS01 0647 8327 A2 00 LDXIM &00 ;note new osbyte call -- NFS01 0648 8329 A0 FF LDYIM FILLER -- NFS01 0649 832B 20 F4 FF JSR OSBYTE -- NFS01 0650 832E ; XY -> ROM indirection 3-byte tuples -- NFS01 0651 832E 86 F6 STX ROMPTR+&00 -- NFS01 0652 8330 84 F7 STY ROMPTR+&01 -- NFS01 0653 8332 -- NFS01 0654 8332 A0 36 LDYIM &36 -- NFS01 0655 8334 8C 24 02 STY &0224 -- NFS01 0656 8337 A2 01 LDXIM ONE -- NFS01 0657 8339 INIT4 -- NFS01 0658 8339 B9 8D 82 LDAAY ECOTAB - rFILID NFS01 0668 834B ^6C NFS01 0659 833C 91 F6 STAIY ROMPTR NFS01 0668 834B ^6C NFS01 0660 833E C8 INY NFS01 0668 834B ^6C NFS01 0661 833F B9 8D 82 LDAAY ECOTAB - rFILID NFS01 0668 834B ^6C NFS01 0662 8342 91 F6 STAIY ROMPTR NFS01 0668 834B ^6C NFS01 0663 8344 C8 INY NFS01 0668 834B ^6C NFS01 0664 8345 A5 F4 LDA ROMID NFS01 0668 834B ^6C NFS01 0665 8347 91 F6 STAIY ROMPTR NFS01 0668 834B ^6C NFS01 0666 8349 C8 INY NFS01 0668 834B ^6C NFS01 0667 834A CA DEX NFS01 0668 834B ^6C NFS01 0668 834B D0 EC BNE INIT4 -- NFS01 0669 834D -- NFS01 0670 834D A4 9F LDY WORKP1 +&01 -- NFS01 0671 834F C8 INY ;return the updated pointer -- NFS01 0672 8350 60 RTS -- NFS01 0673 8351 -- NFS01 0674 8351 FSDIE ;called through here when a new filing -- NFS01 0675 8351 ;system is started up, to relinquish the FS workarea. -- NFS01 0676 8351 A0 1D LDYIM SAVEHI +&08 -- NFS01 0677 8353 B9 EB 0D FSDIEL LDAAY FSLOCN - SAVEHI NFS01 0681 835B ^76 NFS01 0678 8356 91 9C STAIY PAGE1 ;into dynamic area NFS01 0681 835B ^76 NFS01 0679 8358 88 DEY NFS01 0681 835B ^76 NFS01 0680 8359 C0 14 CPYIM SAVEHI -&01 NFS01 0681 835B ^76 NFS01 0681 835B D0 F6 BNE FSDIEL ;save context -- NFS01 0682 835D A9 77 LDAIM FXSPEX -- NFS01 0683 835F 4C F4 FF JMP OSBYTE ;close SPOOL and EXEC files -- NFS01 0684 8362 -- NFS01 0685 8362 MATCH ;try to match on command name -- NFS01 0686 8362 ; NAMES(X) -> name -- NFS01 0687 8362 ; LINE(ROMY) -> command name -- NFS01 0688 8362 A4 A8 LDY ROMY -- NFS01 0689 8364 MATCH1 -- NFS01 0690 8364 B1 F2 LDAIY LINE NFS01 0701 8375 ^6D NFS01 0691 8366 NFS01 0701 8375 ^6D NFS01 0692 8366 C9 2E CMPIM "." ;** 22/8/83 ** NFS01 0701 8375 ^6D NFS01 0693 8368 F0 13 BEQ SKPSPI NFS01 0693 8368 v6C NFS01 0694 836A NFS01 0693 8368 v6C NFS01 0695 836A 29 DF ANDIM &DF ;force to upper case NFS01 0693 8368 v6C NFS01 0696 836C F0 09 BEQ MATCH2 ;[SPACE detected] NFS01 0693 8368 v6C NFS01 0697 836E DD 08 80 CMPAX NAMES NFS01 0693 8368 v6C NFS01 0698 8371 D0 04 BNE MATCH2 ;[mismatch] NFS01 0693 8368 v6C NFS01 0699 8373 C8 INY NFS01 0693 8368 v6C NFS01 0700 8374 E8 INX NFS01 0693 8368 v6C NFS01 0701 8375 D0 ED BNE MATCH1 ;[ALWAYS jump, end of internal name] NFS01 0693 8368 v6C NFS01 0702 8377 ; NEVER fall thru NFS01 0693 8368 v6C NFS01 0703 8377 NFS01 0693 8368 v6C NFS01 0704 8377 MATCH2 ;check for end of internal name NFS01 0693 8368 v6C NFS01 0705 8377 BD 08 80 LDAAX NAMES NFS01 0693 8368 v6C NFS01 0706 837A F0 02 BEQ SKPSP ;[matched on full name, NFS01 0693 8368 v6C NFS01 0707 837C ; skip spaces and return result in Z flag] NFS01 0693 8368 v6C NFS01 0708 837C ; not a match on full name NFS01 0693 8368 v6C NFS01 0709 837C 60 RTS NFS01 0693 8368 v6C NFS01 0710 837D NFS01 0693 8368 v6C NFS01 0711 837D SKPSPI NFS01 0693 8368 v6C NFS01 0712 837D C8 INY NFS01 0716 8382 ^79 NFS01 0713 837E SKPSP NFS01 0716 8382 ^79 NFS01 0714 837E B1 F2 LDAIY LINE NFS01 0716 8382 ^79 NFS01 0715 8380 C9 20 CMPIM SPACE NFS01 0716 8382 ^79 NFS01 0716 8382 F0 F9 BEQ SKPSPI -- NFS01 0717 8384 49 0D EORIM CR ;return Z=1, A=0 if match -- NFS01 0718 8386 60 RTS -- NFS01 0719 8387 -- NFS01 0720 8387 LNK NFS02 -- NFS02 0001 8387 -- NFS02 0002 8387 ; NFS02 -- NFS02 0003 8387 OPT BRIAN NFS02 NFS02 NFS02 NFS02 Acorn macro assembler Page 11 NFS02 Sideways ROM service routines NFS02 -- NFS02 0004 8387 -- NFS02 0005 8387 9630 BRIANX * LOWORG + &0000 ;transmit address -- NFS02 0006 8387 9633 BRIANP * LOWORG + &0003 ;power up -- NFS02 0007 8387 9636 BRIANC * LOWORG + &0006 ;relinquish NMI -- NFS02 0008 8387 9639 BRIANQ * LOWORG + &0009 ;reclaim NMI, NO message -- NFS02 0009 8387 963C BRIANI * LOWORG + &000C ;address for unknown interrupt -- NFS02 0010 8387 -- NFS02 0011 8387 -- NFS02 0012 8387 TTL Status Bytes -- NFS02 0013 8387 -- NFS02 0014 8387 ; Low level byte -- NFS02 0015 8387 ; bit0 - PEEK -- NFS02 0016 8387 ; bit1 - POKE -- NFS02 0017 8387 ; bit2 - HALT -- NFS02 0018 8387 ; bit3 - REMOTE JSR -- NFS02 0019 8387 ; bit4 - REMOTE PROC -- NFS02 0020 8387 -- NFS02 0021 8387 ; High level byte -- NFS02 0022 8387 ; bit0 - REMOTE {allowed} [=0] -- NFS02 0023 8387 ; bit1 - VIEW {allowed} [=0] -- NFS02 0024 8387 ; bit2 - NOTIFY {allowed} [=0] -- NFS02 0025 8387 ; bit3 - STATION REMOTED [=1] -- NFS02 0026 8387 ; bit4 - KB event in REMOTE [=1] -- NFS02 0027 8387 ; bit5 - ESC event in REMOTE [=1] -- NFS02 0028 8387 ; bit6 - VIEW/NOTIFY busy [=1] -- NFS02 0029 8387 ; bit7 - NET FS selected [=1] -- NFS02 0030 8387 -- NFS02 0031 8387 ; High level flags -- NFS02 0032 8387 ; bit0 Printer enabled [=1] -- NFS02 0033 8387 ; bit6 always one -- NFS02 0034 8387 ; bit7 Sequence number -- NFS02 0035 8387 -- NFS02 0036 8387 ; Rx enable byte -- NFS02 0037 8387 ; bit6 USER Rx enable [=1] -- NFS02 0038 8387 ; Bit7 FS Rx enable [=1] -- NFS02 0039 8387 -- NFS02 0040 8387 -- NFS02 0041 8387 LNK NFS03 -- NFS03 0001 8387 -- NFS03 0002 8387 ; > NFS03 -- NFS03 0003 8387 TTL General Utilities -- NFS03 0004 8387 OPT UTILS NFS03 NFS03 NFS03 NFS03 Acorn macro assembler Page 12 NFS03 General Utilities NFS03 -- NFS03 0005 8387 -- NFS03 0006 8387 ; This file contains most of the useful utility routines -- NFS03 0007 8387 ; used by the rest of the programs and routines. -- NFS03 0008 8387 -- NFS03 0009 8387 -- NFS03 0010 8387 FSRXCB ;sets up an Rxcb into the FS buffer -- NFS03 0011 8387 A9 90 LDAIM PREPLY ;option for default port -- NFS03 0012 8389 FSRXCC ;entry point for user-specified port -- NFS03 0013 8389 20 95 83 JSR FSTXCB -- NFS03 0014 838C 85 C1 STA RXCB + PORT ;A preserved over call -- NFS03 0015 838E A9 03 LDAIM RXCC -- NFS03 0016 8390 85 C4 STA RXCB +LPTR ;adjust the pointer -- NFS03 0017 8392 C6 C0 DEC RXCB ;$80 => $7F -- NFS03 0018 8394 60 RTS -- NFS03 0019 8395 -- NFS03 0020 8395 FSTXCB ;sets up TXCB pointing to a full -- NFS03 0021 8395 ;FS buffer. The hi-pointer is ammended in another routine -- NFS03 0022 8395 ;to ensure that only significant data is sent. -- NFS03 0023 8395 -- NFS03 0024 8395 48 PHA -- NFS03 0025 8396 A0 0B LDYIM &0B -- NFS03 0026 8398 B9 AD 83 FSTXL1 LDAAY TXTAB NFS03 0033 83A9 ^6D NFS03 0027 839B 99 C0 00 STAAY TXCB NFS03 0033 83A9 ^6D NFS03 0028 839E C0 02 CPYIM TWO NFS03 0033 83A9 ^6D NFS03 0029 83A0 10 06 BPL FSTXL2 NFS03 0033 83A9 ^6D NFS03 0030 83A2 B9 00 0E LDAAY FSLOCN NFS03 0033 83A9 ^6D NFS03 0031 83A5 99 C2 00 STAAY TXCB + DESTN NFS03 0033 83A9 ^6D NFS03 0032 83A8 88 FSTXL2 DEY NFS03 0033 83A9 ^6D NFS03 0033 83A9 10 ED BPL FSTXL1 -- NFS03 0034 83AB 68 PLA -- NFS03 0035 83AC 60 RTS -- NFS03 0036 83AD -- NFS03 0037 83AD TXTAB -- NFS03 0038 83AD 80 = TXFLAG -- NFS03 0039 83AE 99 = PCMND -- NFS03 0040 83AF 00 = ZERO -- NFS03 0041 83B0 00 = ZERO -- NFS03 0042 83B1 00 = BIGBUF -- NFS03 0043 83B2 0F = /(BIGBUF ) -- NFS03 0044 83B3 FF ALL1S = FILLER -- NFS03 0045 83B4 FF = FILLER -- NFS03 0046 83B5 FF = RXBUFE -- NFS03 0047 83B6 0F = /(RXBUFE ) -- NFS03 0048 83B7 FF = FILLER -- NFS03 0049 83B8 FF = FILLER ;usual table with padded addresses -- NFS03 0050 83B9 -- NFS03 0051 83B9 DOFSBX -- NFS03 0052 83B9 ;entry point for use with the byte stream. -- NFS03 0053 83B9 ;On entry :- A = Handle -- NFS03 0054 83B9 ;X,Y as usual -- NFS03 0055 83B9 ;The entry point saves the handle and sets -- NFS03 0056 83B9 ;the carry as a flag for later use. -- NFS03 0057 83B9 -- NFS03 0058 83B9 48 PHA ;save handle on stack -- NFS03 0059 83BA 38 SEC ;the all-important bit -- NFS03 0060 83BB B0 12 BCS DOFSL4 NFS03 0060 83BB v6D NFS03 0061 83BD NFS03 0060 83BB v6D NFS03 0062 83BD B8 DOFSUP CLV NFS03 0060 83BB v6D NFS03 0063 83BE 50 0E BVC DOFSL6 ;common entry point NFS03 0060 83BB v6D NFS03 0064 83C0 NFS03 0060 83BB v6D NFS03 0065 83C0 A9 77 BYE LDAIM &77 NFS03 0060 83BB v6D NFS03 0066 83C2 20 F4 FF JSR OSBYTE NFS03 0060 83BB v6D NFS03 0067 83C5 A0 17 LDYIM FCBYE ;logoff code NFS03 0060 83BB v6D NFS03 0068 83C7 NFS03 0060 83BB v6D NFS03 0069 83C7 DOFSOP ;first entry point, uses default timeout NFS03 0060 83BB v6D NFS03 0070 83C7 NFS03 0060 83BB v6D NFS03 0071 83C7 ;perform a transaction with the fileserver. NFS03 0060 83BB v6D NFS03 0072 83C7 ;ENTRY :: A = wait period for FS reply NFS03 0060 83BB v6D NFS03 0073 83C7 ;X = extent of the FS buffer NFS03 0060 83BB v6D NFS03 0074 83C7 ;Y = function code for the transaction NFS03 0060 83BB v6D NFS03 0075 83C7 NFS03 0060 83BB v6D NFS03 0076 83C7 B8 CLV NFS03 0060 83BB v6D NFS03 0077 83C8 AD 02 0E DOFSER LDA URD ;enter here with A=delay, HDRURD=URD for no errors NFS03 0060 83BB v6D NFS03 0078 83CB 8D 02 0F STA HDRURD NFS03 0060 83BB v6D NFS03 0079 83CE NFS03 0060 83BB v6D NFS03 0080 83CE 18 DOFSL6 CLC ;clear the carry on XMIT entry NFS03 0060 83BB v6D NFS03 0081 83CF 8C 01 0F DOFSL4 STY HDRFN -- NFS03 0082 83D2 A0 01 LDYIM ONE -- NFS03 0083 83D4 B9 03 0E DOFSL1 LDAAY CSD NFS03 0086 83DB ^77 NFS03 0084 83D7 99 03 0F STAAY HDRCSD ;copy other two handles NFS03 0086 83DB ^77 NFS03 0085 83DA 88 DEY NFS03 0086 83DB ^77 NFS03 0086 83DB 10 F7 BPL DOFSL1 -- NFS03 0087 83DD 08 DOFS0 PHP ;entry point with Fn and handles set up -- NFS03 0088 83DE ; LDAIM DLOAD -- NFS03 0089 83DE ; STA JWORK ;** 2/8/83 ** -- NFS03 0090 83DE A9 90 LDAIM PREPLY -- NFS03 0091 83E0 8D 00 0F STA HDRREP ;reply port -- NFS03 0092 83E3 20 95 83 JSR FSTXCB -- NFS03 0093 83E6 8A TXA -- NFS03 0094 83E7 69 05 ADCIM FIVE -- NFS03 0095 83E9 85 C8 STA TXCB +HPTR ;ammend TXCB end pointer -- NFS03 0096 83EB 28 PLP ;restore the carry flag -- NFS03 0097 83EC B0 1A BCS DOFSL5 ;do different if C = 1 NFS03 0097 83EC v65 NFS03 0098 83EE 08 PHP ;save P over the call NFS03 0097 83EC v65 NFS03 0099 83EF 20 F7 85 JSR FSXMIT ;do the transmission NFS03 0097 83EC v65 NFS03 0100 83F2 28 PLP NFS03 0097 83EC v65 NFS03 0101 83F3 ; BCC DOFSL3 NFS03 0097 83EC v65 NFS03 0102 83F3 DOFSL8 ; LDAIM DFINAL NFS03 0097 83EC v65 NFS03 0103 83F3 ; STA JWORK NFS03 0097 83EC v65 NFS03 0104 83F3 08 DOFSL3 PHP NFS03 0097 83EC v65 NFS03 0105 83F4 20 87 83 JSR FSRXCB ;reply on reply port NFS03 0097 83EC v65 NFS03 0106 83F7 ; LDA JWORK ;eliminate WAIT1 routine NFS03 0097 83EC v65 NFS03 0107 83F7 20 30 85 JSR WAITFS ;delay already set NFS03 0097 83EC v65 NFS03 0108 83FA 28 PLP NFS03 0097 83EC v65 NFS03 0109 83FB C8 DOFSL7 INY ;Y=0 on exit from BSXMIT and WAIT NFS03 0097 83EC v65 NFS03 0110 83FC B1 C4 LDAIY RXCB +LPTR ;get the return code NFS03 0097 83EC v65 NFS03 0111 83FE AA TAX NFS03 0097 83EC v65 NFS03 0112 83FF F0 06 BEQ DOFSEX NFS03 0097 83EC v65 NFS03 0113 8401 50 02 BVC DOFSEV ;skip if errors off NFS03 0097 83EC v65 NFS03 0114 8403 NFS03 0097 83EC v65 NFS03 0115 8403 69 2A ADCIM &100-NOTFND ;C=0 here NFS03 0097 83EC v65 NFS03 0116 8405 D0 73 DOFSEV BNE FSERR ;stop if error not $D6 NFS03 0116 8405 v0C NFS03 0117 8407 60 DOFSEX RTS ;C=1, A=0 if "not found" NFS03 0116 8405 v0C NFS03 0118 8408 NFS03 0116 8405 v0C NFS03 0119 8408 68 DOFSL5 PLA ;get the handle for BSXMIT NFS03 0116 8405 v0C NFS03 0120 8409 A2 C0 LDXIM TXCB NFS03 0116 8405 v0C NFS03 0121 840B C8 INY NFS03 0116 8405 v0C NFS03 0122 840C 20 66 92 JSR BSXMIT ;do byte stream NFS03 0116 8405 v0C NFS03 0123 840F 85 B3 STA W2 ;save new sequence numbers NFS03 0116 8405 v0C NFS03 0124 8411 90 E8 BCC DOFSL7 ;.. then leap off to inspect the return code NFS03 0116 8405 v0C NFS03 0125 8413 NFS03 NFS03 NFS03 NFS03 Acorn macro assembler Page 13 NFS03 General Utilities NFS03 NFS03 0116 8405 v0C NFS03 0126 8413 ; ********************************* NFS03 0116 8405 v0C NFS03 0127 8413 ; *************************************** NFS03 0116 8405 v0C NFS03 0128 8413 ; ****** RANDOM ACCESS ***** NFS03 0116 8405 v0C NFS03 0129 8413 ; *************************************** NFS03 0116 8405 v0C NFS03 0130 8413 ; ******************************** NFS03 0116 8405 v0C NFS03 0131 8413 NFS03 0116 8405 v0C NFS03 0132 8413 18 PUTBYT CLC NFS03 0116 8405 v0C NFS03 0133 8414 20 57 86 RANDOM JSR ENTER ;disable escape NFS03 0116 8405 v0C NFS03 0134 8417 48 PHA NFS03 0116 8405 v0C NFS03 0135 8418 8D DF 0F STA PUTB4 NFS03 0116 8405 v0C NFS03 0136 841B 8A TXA NFS03 0116 8405 v0C NFS03 0137 841C 48 PHA NFS03 0116 8405 v0C NFS03 0138 841D 98 TYA NFS03 0116 8405 v0C NFS03 0139 841E 48 PHA ;save regs and carry NFS03 0116 8405 v0C NFS03 0140 841F 08 PHP NFS03 0116 8405 v0C NFS03 0141 8420 [ &00=0 NFS03 0116 8405 v0C NFS03 0142 8420 84 BA STY SPOOL1 ;save new handle NFS03 0116 8405 v0C NFS03 0143 8422 ] NFS03 0116 8405 v0C NFS03 0144 8422 20 9B 86 JSR Y2FS NFS03 0116 8405 v0C NFS03 0145 8425 8C DE 0F STY PUTB3 NFS03 0116 8405 v0C NFS03 0146 8428 84 CF STY SPOOL0 ;handle in FS format NFS03 0116 8405 v0C NFS03 0147 842A [ &FF=0 NFS03 0116 8405 v0C NFS03 0149 842A ] NFS03 0116 8405 v0C NFS03 0150 842A A0 90 LDYIM PREPLY NFS03 0116 8405 v0C NFS03 0151 842C 8C DC 0F STY PUTB1 NFS03 0116 8405 v0C NFS03 0152 842F 20 95 83 JSR FSTXCB NFS03 0116 8405 v0C NFS03 0153 8432 A9 DC LDAIM PUTB NFS03 0116 8405 v0C NFS03 0154 8434 85 C4 STA TXCB +LPTR NFS03 0116 8405 v0C NFS03 0155 8436 A9 E0 LDAIM PUTB4 +&01 ;accurate offset NFS03 0116 8405 v0C NFS03 0156 8438 85 C8 STA TXCB + HPTR ;ammend CB NFS03 0116 8405 v0C NFS03 0157 843A C8 INY NFS03 0116 8405 v0C NFS03 0158 843B A2 09 LDXIM FCPUTB NFS03 0116 8405 v0C NFS03 0159 843D 28 PLP NFS03 0116 8405 v0C NFS03 0160 843E 90 01 BCC RAND1 NFS03 0116 8405 v0C NFS03 0161 8440 CA DEX NFS03 0116 8405 v0C NFS03 0162 8441 8E DD 0F RAND1 STX GETB2 NFS03 0116 8405 v0C NFS03 0163 8444 A5 CF LDA SPOOL0 NFS03 0116 8405 v0C NFS03 0164 8446 A2 C0 LDXIM TXCB ;point to CB NFS03 0116 8405 v0C NFS03 0165 8448 20 66 92 JSR BSXMIT NFS03 0116 8405 v0C NFS03 0166 844B AE DD 0F LDX GETB2 ;check return code NFS03 0116 8405 v0C NFS03 0167 844E F0 48 BEQ RAND3 NFS03 0116 8405 v0C NFS03 0168 8450 NFS03 0116 8405 v0C NFS03 0169 8450 A0 1F LDYIM RXBUFE -PUTB -&04 NFS03 0116 8405 v0C NFS03 0170 8452 B9 DC 0F ERROR1 LDAAY PUTB NFS03 0116 8405 v0C NFS03 0171 8455 99 E0 0F STAAY PUTB +&04 NFS03 0116 8405 v0C NFS03 0172 8458 88 DEY NFS03 0116 8405 v0C NFS03 0173 8459 10 F7 BPL ERROR1 NFS03 0116 8405 v0C NFS03 0174 845B NFS03 0116 8405 v0C NFS03 0175 845B AA TAX ;last byte is error code 0 NFS03 0116 8405 v0C NFS03 0176 845C A9 C6 LDAIM &C6 ;read spool handle NFS03 0116 8405 v0C NFS03 0177 845E 20 F4 FF JSR OSBYTE ;returned in X NFS03 0116 8405 v0C NFS03 0178 8461 NFS03 0116 8405 v0C NFS03 0179 8461 [ &FF=0 NFS03 0116 8405 v0C NFS03 0184 8461 | NFS03 0116 8405 v0C NFS03 0185 8461 A9 29 LDAIM SPOFF NFS03 0116 8405 v0C NFS03 0186 8463 C4 BA CPY SPOOL1 NFS03 0116 8405 v0C NFS03 0187 8465 F0 06 BEQ FSERR2 NFS03 0116 8405 v0C NFS03 0188 8467 A9 2D LDAIM EXOFF NFS03 0116 8405 v0C NFS03 0189 8469 E4 BA FSERR0 CPX SPOOL1 NFS03 0116 8405 v0C NFS03 0190 846B D0 06 BNE FSERR4 NFS03 0116 8405 v0C NFS03 0191 846D ] NFS03 0116 8405 v0C NFS03 0192 846D NFS03 0116 8405 v0C NFS03 0193 846D AA FSERR2 TAX ;get address NFS03 0116 8405 v0C NFS03 0194 846E A0 85 LDYIM /(SPOFF ) ;hand string to OSCLI NFS03 0116 8405 v0C NFS03 0195 8470 20 F7 FF JSR OSCLI NFS03 0116 8405 v0C NFS03 0196 8473 NFS03 0116 8405 v0C NFS03 0197 8473 A9 E0 FSERR4 LDAIM PUTB +&04 NFS03 0116 8405 v0C NFS03 0198 8475 85 C4 STA RXCB +LPTR ;ammend pointer NFS03 0116 8405 v0C NFS03 0199 8477 AE DD 0F LDX GETB2 NFS03 0116 8405 v0C NFS03 0200 847A NFS03 0116 8405 v0C NFS03 0201 847A FSERR ;this handles errors from the file-server. These consist NFS03 0116 8405 v0C NFS03 0202 847A ;of a standard header + a message CR. The routine replaces NFS03 0116 8405 v0C NFS03 0203 847A ;the CR with a zero, replaces the CC with BRK and jumps to NFS03 0116 8405 v0C NFS03 0204 847A ;the BRK packet thus formed. NFS03 0116 8405 v0C NFS03 0205 847A NFS03 0116 8405 v0C NFS03 0206 847A 8E 09 0E STX ERROR ;save the error number for OSWORD call NFS03 0167 844E v37 NFS03 0207 847D A0 01 LDYIM ONE NFS03 0167 844E v37 NFS03 0208 847F E0 A8 CPXIM &A8 NFS03 0167 844E v37 NFS03 0209 8481 B0 04 BCS FSERR1 NFS03 0167 844E v37 NFS03 0210 8483 A9 A8 LDAIM &A8 ;standard error number NFS03 0167 844E v37 NFS03 0211 8485 91 C4 STAIY RXCB +LPTR NFS03 0167 844E v37 NFS03 0212 8487 NFS03 0167 844E v37 NFS03 0213 8487 [ &FF=0 NFS03 0167 844E v37 NFS03 0222 8487 | NFS03 0167 844E v37 NFS03 0223 8487 A0 FF FSERR1 LDYIM &FF NFS03 0167 844E v37 NFS03 0224 8489 C8 FSERR3 INY ;y=0 on entry NFS03 0167 844E v37 NFS03 0225 848A B1 C4 LDAIY RXCB + LPTR NFS03 0167 844E v37 NFS03 0226 848C 99 00 01 STAAY &100 NFS03 0167 844E v37 NFS03 0227 848F 49 0D EORIM CR ;look for carriage return NFS03 0167 844E v37 NFS03 0228 8491 D0 F6 BNE FSERR3 NFS03 0167 844E v37 NFS03 0229 8493 99 00 01 STAAY &100 NFS03 0167 844E v37 NFS03 0230 8496 F0 52 BEQ NOL3 NFS03 0230 8496 v2D NFS03 0231 8498 ] NFS03 0230 8496 v2D NFS03 0232 8498 NFS03 0230 8496 v2D NFS03 0233 8498 8D 08 0E RAND3 STA SEQNOS ;update sequence numbers NFS03 0230 8496 v2D NFS03 0234 849B 68 PLA NFS03 0230 8496 v2D NFS03 0235 849C A8 TAY NFS03 0230 8496 v2D NFS03 0236 849D 68 PLA NFS03 0230 8496 v2D NFS03 0237 849E AA TAX NFS03 0230 8496 v2D NFS03 0238 849F 68 PLA NFS03 0230 8496 v2D NFS03 0239 84A0 60 NOERR RTS ;all restored NFS03 0230 8496 v2D NFS03 0240 84A1 NFS03 0230 8496 v2D NFS03 0241 84A1 A5 FF ESC LDA ESCADR ;$FF, top bit NFS03 0230 8496 v2D NFS03 0242 84A3 25 97 AND ESCAP ;** 9/12/83 ** NFS03 0230 8496 v2D NFS03 0243 84A5 10 F9 BPL NOERR NFS03 0230 8496 v2D NFS03 0244 84A7 A9 7E LDAIM &7E NFS03 0230 8496 v2D NFS03 0245 84A9 20 F4 FF JSR OSBYTE ;ack the escape condition NFS03 0230 8496 v2D NFS03 0246 84AC 4C 12 85 JMP NLISNE ;leave with A=&7E NFS03 0230 8496 v2D NFS03 0247 84AF NFS03 0230 8496 v2D NFS03 0248 84AF ;This code is called from a REMOTE proc call NFS03 0230 8496 v2D NFS03 0249 84AF ;and performs the following actions NFS03 0230 8496 v2D NFS03 0250 84AF ; 1) Disables KB NFS03 0230 8496 v2D NFS03 0251 84AF ; 2) Sets the pointer to the work area NFS03 0230 8496 v2D NFS03 0252 84AF ; 3) Set status busy NFS03 0230 8496 v2D NFS03 0253 84AF ; 4) Sets the Read/Write/Byte/Word masks NFS03 0230 8496 v2D NFS03 0254 84AF ; 5) Sets up the CB NFS03 0230 8496 v2D NFS03 0255 84AF ; 6) Set mode7 NFS03 0230 8496 v2D NFS03 0256 84AF ; 7) Set auto repeat rates NFS03 0230 8496 v2D NFS03 0257 84AF ; 8) Enter current language NFS03 0230 8496 v2D NFS03 0258 84AF NFS03 0230 8496 v2D NFS03 0259 84AF A0 04 REMOT LDYIM STAT2 ;adjust status byte NFS03 NFS03 NFS03 NFS03 Acorn macro assembler Page 14 NFS03 General Utilities NFS03 NFS03 0230 8496 v2D NFS03 0260 84B1 B1 9C LDAIY PAGE1 NFS03 0230 8496 v2D NFS03 0261 84B3 F0 03 BEQ REMOT1 ;skip if already remoted NFS03 0230 8496 v2D NFS03 0262 84B5 4C F0 92 RCHEX JMP CLRJSR ;enable JSR's again anyway NFS03 0230 8496 v2D NFS03 0263 84B8 09 09 REMOT1 ORAIM &09 ;set bits 3,0 => REMOTED, remote DISallowed NFS03 0230 8496 v2D NFS03 0264 84BA 91 9C STAIY PAGE1 NFS03 0230 8496 v2D NFS03 0265 84BC NFS03 0230 8496 v2D NFS03 0266 84BC A2 80 LDXIM &80 ;entry from RCHAR, omitting test phase NFS03 0230 8496 v2D NFS03 0267 84BE NFS03 0230 8496 v2D NFS03 0268 84BE A0 80 LDYIM JSRBUF ;copy numbers from JSRBUF to TERMIN NFS03 0230 8496 v2D NFS03 0269 84C0 B1 9C LDAIY PAGE1 NFS03 0230 8496 v2D NFS03 0270 84C2 48 PHA NFS03 0230 8496 v2D NFS03 0271 84C3 C8 INY NFS03 0230 8496 v2D NFS03 0272 84C4 B1 9C LDAIY PAGE1 NFS03 0230 8496 v2D NFS03 0273 84C6 A0 0F LDYIM RTXCB +&03 NFS03 0230 8496 v2D NFS03 0274 84C8 91 9E STAIY WORKP1 NFS03 0230 8496 v2D NFS03 0275 84CA 88 DEY NFS03 0230 8496 v2D NFS03 0276 84CB 68 PLA NFS03 0230 8496 v2D NFS03 0277 84CC 91 9E STAIY WORKP1 ;what a lot of fuss NFS03 0230 8496 v2D NFS03 0278 84CE NFS03 0230 8496 v2D NFS03 0279 84CE 20 D2 81 JSR REMOL0 NFS03 0230 8496 v2D NFS03 0280 84D1 20 88 91 JSR CBSET1 ;new routine NFS03 0230 8496 v2D NFS03 0281 84D4 NFS03 0230 8496 v2D NFS03 0282 84D4 A2 01 LDXIM ONE NFS03 0230 8496 v2D NFS03 0283 84D6 A0 00 LDYIM ZERO NFS03 0230 8496 v2D NFS03 0284 84D8 A9 C9 LDAIM &C9 NFS03 0230 8496 v2D NFS03 0285 84DA 20 F4 FF JSR OSBYTE ;disable the KB NFS03 0230 8496 v2D NFS03 0286 84DD NFS03 0230 8496 v2D NFS03 0287 84DD 20 F0 92 RESET JSR CLRJSR ;enable JSR's again NFS03 0230 8496 v2D NFS03 0288 84E0 A2 02 LDXIM &02 NFS03 0230 8496 v2D NFS03 0289 84E2 A9 00 RESET2 LDAIM &00 NFS03 0230 8496 v2D NFS03 0290 84E4 9D 00 01 RESET1 STAAX &100 NFS03 0230 8496 v2D NFS03 0291 84E7 CA DEX NFS03 0230 8496 v2D NFS03 0292 84E8 10 FA BPL RESET1 NFS03 0230 8496 v2D NFS03 0293 84EA 4C 00 01 NOL3 JMP &100 ;BASIC fatal error NFS03 0304 84FB ^38 NFS03 0294 84ED NFS03 0304 84FB ^38 NFS03 0295 84ED RCHAR ;chars from REMOTE NFS03 0304 84FB ^38 NFS03 0296 84ED A0 04 LDYIM STAT2 NFS03 0304 84FB ^38 NFS03 0297 84EF B1 9C LDAIY PAGE1 NFS03 0304 84FB ^38 NFS03 0298 84F1 F0 C5 BEQ REMOT1 NFS03 0304 84FB ^38 NFS03 0299 84F3 NFS03 0304 84FB ^38 NFS03 0300 84F3 A0 80 LDYIM JSRBUF NFS03 0304 84FB ^38 NFS03 0301 84F5 B1 9C LDAIY PAGE1 NFS03 0304 84FB ^38 NFS03 0302 84F7 A0 0E LDYIM RTXCB +&02 NFS03 0304 84FB ^38 NFS03 0303 84F9 D1 9E CMPIY WORKP1 ;same station ???? NFS03 0304 84FB ^38 NFS03 0304 84FB D0 B8 BNE RCHEX ;skip if not NFS03 0332 8523 ^45 NFS03 0305 84FD NFS03 0332 8523 ^45 NFS03 0306 84FD A0 82 CHARIN LDYIM JSRBUF +&02 ;grab the data passed NFS03 0332 8523 ^45 NFS03 0307 84FF B1 9C LDAIY PAGE1 NFS03 0332 8523 ^45 NFS03 0308 8501 A8 TAY ;char in Y NFS03 0332 8523 ^45 NFS03 0309 8502 A2 00 LDXIM ZERO ;KB buffer NFS03 0332 8523 ^45 NFS03 0310 8504 20 F0 92 JSR CLRJSR ;after reading data, enable JSR's NFS03 0332 8523 ^45 NFS03 0311 8507 A9 99 LDAIM &99 ;put char into buffer, detect Escape NFS03 0332 8523 ^45 NFS03 0312 8509 4C F4 FF JMP OSBYTE ;and then return NFS03 0332 8523 ^45 NFS03 0313 850C NFS03 0332 8523 ^45 NFS03 0314 850C NREPLY ;a routine which indicates that a 'no reply' NFS03 0332 8523 ^45 NFS03 0315 850C ;error has just occurred. This uses the MOS BRK convention. NFS03 0332 8523 ^45 NFS03 0316 850C NFS03 0332 8523 ^45 NFS03 0317 850C A9 08 LDAIM &08 NFS03 0378 8560 ^2A NFS03 0318 850E D0 04 BNE NLISN2 NFS03 0378 8560 ^2A NFS03 0319 8510 NFS03 0378 8560 ^2A NFS03 0320 8510 NLISTN ;this is similar to the above but produces NFS03 0378 8560 ^2A NFS03 0321 8510 ;a 'not listening' message. NFS03 0378 8560 ^2A NFS03 0322 8510 NFS03 0378 8560 ^2A NFS03 0323 8510 A1 9A LDAIX TXCBP ;get flag byte NFS03 0378 8560 ^2A NFS03 0324 8512 29 07 NLISNE ANDIM &07 ;get low 7 bits NFS03 0378 8560 ^2A NFS03 0325 8514 AA NLISN2 TAX ;use this as offset NFS03 0378 8560 ^2A NFS03 0326 8515 BC 18 80 LDYAX ERRTAB ;get message offset NFS03 0378 8560 ^2A NFS03 0327 8518 NFS03 0378 8560 ^2A NFS03 0328 8518 A2 00 LDXIM 0 NFS03 0378 8560 ^2A NFS03 0329 851A 8E 00 01 STX &100 NFS03 0378 8560 ^2A NFS03 0330 851D B9 80 85 NOL2 LDAAY MESTAB NFS03 0378 8560 ^2A NFS03 0331 8520 9D 01 01 STAAX &0101 ;copy text message NFS03 0378 8560 ^2A NFS03 0332 8523 F0 C5 BEQ NOL3 NFS03 0378 8560 ^2A NFS03 0333 8525 C8 INY NFS03 0378 8560 ^2A NFS03 0334 8526 E8 INX NFS03 0378 8560 ^2A NFS03 0335 8527 D0 F4 BNE NOL2 NFS03 0378 8560 ^2A NFS03 0336 8529 NFS03 0378 8560 ^2A NFS03 0337 8529 53 50 2E SPOFF = "SP.",CR NFS03 0378 8560 ^2A NFS03 0338 852D 45 2E EXOFF = "E." NFS03 0378 8560 ^2A NFS03 0339 852F 0D CROFF = CR NFS03 0378 8560 ^2A NFS03 0340 8530 NFS03 0378 8560 ^2A NFS03 0341 8530 0085 SP1 * SPOFF :SHR: 8 NFS03 0378 8560 ^2A NFS03 0342 8530 0085 CR1 * CROFF :SHR: 8 NFS03 0378 8560 ^2A NFS03 0343 8530 [ CR1 - SP1=0 NFS03 0378 8560 ^2A NFS03 0344 8530 | NFS03 0378 8560 ^2A NFS03 0346 8530 ] NFS03 0378 8560 ^2A NFS03 0347 8530 NFS03 0378 8560 ^2A NFS03 0348 8530 A9 2A WAITFS LDAIM DFINAL NFS03 0378 8560 ^2A NFS03 0349 8532 48 WAIT PHA ;save 'seconds' byte NFS03 0378 8560 ^2A NFS03 0350 8533 NFS03 0378 8560 ^2A NFS03 0351 8533 AD 64 0D FSRXON LDA LFLAG NFS03 0378 8560 ^2A NFS03 0352 8536 48 PHA ;second entry on stack is Rx flag NFS03 0378 8560 ^2A NFS03 0353 8537 A6 9B LDX RXCBP + 1 ;Check if RX'ing into page zero control block NFS03 0378 8560 ^2A NFS03 0354 8539 D0 05 BNE WAITJD ;No => DONT SET SYSTEM RX FLAG ! NFS03 0378 8560 ^2A NFS03 0355 853B NFS03 0378 8560 ^2A NFS03 0356 853B 09 80 ORAIM &80 ;enable system Rx NFS03 0378 8560 ^2A NFS03 0357 853D 8D 64 0D STA LFLAG NFS03 0378 8560 ^2A NFS03 0358 8540 NFS03 0378 8560 ^2A NFS03 0359 8540 A9 00 WAITJD LDAIM ZERO ;initialise counter NFS03 0378 8560 ^2A NFS03 0360 8542 48 PHA NFS03 0378 8560 ^2A NFS03 0361 8543 48 PHA ;null bytes NFS03 0378 8560 ^2A NFS03 0362 8544 A8 TAY NFS03 0378 8560 ^2A NFS03 0363 8545 BA TSX ;must not use store, so use stack NFS03 0378 8560 ^2A NFS03 0364 8546 B1 9A WAITL1 LDAIY RXCBP ;poll RXCB NFS03 0378 8560 ^2A NFS03 0365 8548 30 0F BMI WAITEX ;something happened NFS03 0378 8560 ^2A NFS03 0366 854A DE 01 01 DECAX &0101 NFS03 0378 8560 ^2A NFS03 0367 854D D0 F7 BNE WAITL1 NFS03 0378 8560 ^2A NFS03 0368 854F DE 02 01 DECAX &0102 NFS03 0378 8560 ^2A NFS03 0369 8552 D0 F2 BNE WAITL1 NFS03 0378 8560 ^2A NFS03 0370 8554 DE 04 01 DECAX &0104 NFS03 0378 8560 ^2A NFS03 0371 8557 D0 ED BNE WAITL1 NFS03 0378 8560 ^2A NFS03 0372 8559 NFS03 0378 8560 ^2A NFS03 0373 8559 68 WAITEX PLA NFS03 0378 8560 ^2A NFS03 0374 855A 68 PLA NFS03 0378 8560 ^2A NFS03 0375 855B 68 PLA NFS03 0378 8560 ^2A NFS03 0376 855C 8D 64 0D STA LFLAG NFS03 0378 8560 ^2A NFS03 0377 855F 68 PLA ;tidy stack NFS03 0378 8560 ^2A NFS03 0378 8560 F0 AA BEQ NREPLY -- NFS03 0379 8562 60 RTS -- NFS03 0380 8563 -- NFS03 0381 8563 38 GETBYT SEC NFS03 NFS03 NFS03 NFS03 Acorn macro assembler Page 15 NFS03 General Utilities NFS03 -- NFS03 0382 8564 20 14 84 JSR RANDOM ;return with C = 1 -- NFS03 0383 8567 38 SEC -- NFS03 0384 8568 A9 FE LDAIM &FE ;error byte -- NFS03 0385 856A 2C DF 0F BIT GETB4 ;return with A,X,Y all saved -- NFS03 0386 856D 70 10 BVS GETBEY ;test flag = $40 NFS03 0386 856D v6F NFS03 0387 856F 18 CLC NFS03 0386 856D v6F NFS03 0388 8570 08 PHP NFS03 0386 856D v6F NFS03 0389 8571 A5 CF LDA SPOOL0 ;get handle NFS03 0386 856D v6F NFS03 0390 8573 28 PLP NFS03 0386 856D v6F NFS03 0391 8574 30 03 BMI GBLAST ;test flag = $80 NFS03 0386 856D v6F NFS03 0392 8576 20 D5 86 JSR CLREOF ;clear end-of-file NFS03 0386 856D v6F NFS03 0393 8579 20 D0 86 GBLAST JSR SETEOF ;fall thru' ok here NFS03 0386 856D v6F NFS03 0394 857C AD DE 0F LDA GETB3 NFS03 0386 856D v6F NFS03 0395 857F 60 GETBEY RTS ;A = data, X,Y preserved, C = condition -- NFS03 0396 8580 -- NFS03 0397 8580 MESTAB -- NFS03 0398 8580 A0 4C 69 NLIST1 = LINJAM,"Line Jammed",ZERO -- NFS03 0399 858D A1 4E 65 NLIST2 = NETER,"Net Error",ZERO -- NFS03 0400 8598 A2 4E 6F NLIST3 = NOLISE,"Not listening",ZERO -- NFS03 0401 85A7 A3 4E 6F NLIST4 = NOCLK,"No Clock",ZERO -- NFS03 0402 85B1 NLIST5 -- NFS03 0403 85B1 NLIST6 -- NFS03 0404 85B1 11 45 73 NLIST7 = ESCER,"Escape",ZERO -- NFS03 0405 85B9 CB 42 61 NLIST8 = OPTER,"Bad Option",ZERO -- NFS03 0406 85C5 A5 4E 6F NRMSG = NOREPE,"No reply",ZERO -- NFS03 0407 85CF -- NFS03 0408 85CF A0 0E CHAPRT LDYIM &0E -- NFS03 0409 85D1 B1 BB LDAIY TEMPX -- NFS03 0410 85D3 -- NFS03 0411 85D3 ;BBCFS change BBC protection format to FS -- NFS03 0412 85D3 29 3F ANDIM &3F -- NFS03 0413 85D5 A2 04 LDXIM PROTTC - PROTTB - &01 ;index for the table -- NFS03 0414 85D7 D0 04 BNE BBCFS ;common code NFS03 0414 85D7 v7B NFS03 0415 85D9 FSBBC ;change FS protection format to BBC NFS03 0414 85D7 v7B NFS03 0416 85D9 29 1F ANDIM &1F ;lose top 3 bits NFS03 0414 85D7 v7B NFS03 0417 85DB A2 FF LDXIM FILLER NFS03 0414 85D7 v7B NFS03 0418 85DD 85 B8 BBCFS STA JWORK ;spare zero page -- NFS03 0419 85DF A9 00 LDAIM ZERO ;result returned in A -- NFS03 0420 85E1 -- NFS03 0421 85E1 E8 BBCFS1 INX NFS03 0425 85E9 ^76 NFS03 0422 85E2 46 B8 LSR JWORK NFS03 0425 85E9 ^76 NFS03 0423 85E4 90 03 BCC BBCFS2 NFS03 0425 85E9 ^76 NFS03 0424 85E6 1D EC 85 ORAAX PROTTB NFS03 0425 85E9 ^76 NFS03 0425 85E9 D0 F6 BBCFS2 BNE BBCFS1 ;not done yet -- NFS03 0426 85EB 60 RTS ;return in A -- NFS03 0427 85EC -- NFS03 0428 85EC 50 PROTTB = &50 ;set bits4, 6 -- NFS03 0429 85ED 20 = &20 -- NFS03 0430 85EE 05 = &05 -- NFS03 0431 85EF 02 = &02 -- NFS03 0432 85F0 88 = &88 ;set bits3, 7 -- NFS03 0433 85F1 -- NFS03 0434 85F1 04 PROTTC = &04 -- NFS03 0435 85F2 08 = &08 -- NFS03 0436 85F3 80 = &80 ;unused bit in access byte -- NFS03 0437 85F4 10 = &10 -- NFS03 0438 85F5 01 = &01 -- NFS03 0439 85F6 02 = &02 -- NFS03 0440 85F7 -- NFS03 0441 85F7 FSXMIT -- NFS03 0442 85F7 ;on call to transmit, pointer to TXCB is -- NFS03 0443 85F7 ;passed in page-0, indicated by X. Y holds -- NFS03 0444 85F7 ;the delay between retries and A holds the -- NFS03 0445 85F7 ;the number of retries. -- NFS03 0446 85F7 -- NFS03 0447 85F7 ;FSXMIT assumes that TXCB is used, XMIT is -- NFS03 0448 85F7 ;the general routine -- NFS03 0449 85F7 -- NFS03 0450 85F7 A2 C0 LDXIM TXCB -- NFS03 0451 85F9 86 9A STX TXCBP -- NFS03 0452 85FB A2 00 LDXIM /(TXCB ) -- NFS03 0453 85FD 86 9B STX TXCBP +&01 -- NFS03 0454 85FF -- NFS03 0455 85FF A9 FF XMITFS LDAIM FSTRY ;standard number of retries -- NFS03 0456 8601 A0 60 XMITFY LDYIM FSDELY ;standard delay -- NFS03 0457 8603 -- NFS03 0458 8603 48 XMIT PHA -- NFS03 0459 8604 98 TYA -- NFS03 0460 8605 48 PHA -- NFS03 0461 8606 A2 00 LDXIM ZERO -- NFS03 0462 8608 A1 9A LDAIX TXCBP -- NFS03 0463 860A 81 9A L0 STAIX TXCBP NFS03 0501 863D ^4B NFS03 0464 860C 48 PHA NFS03 0501 863D ^4B NFS03 0465 860D 0E 62 0D L5 ASL TXCLR NFS03 0501 863D ^4B NFS03 0466 8610 90 FB BCC L5 ;poll until clear NFS03 0501 863D ^4B NFS03 0467 8612 NFS03 0501 863D ^4B NFS03 0468 8612 A5 9A LDA TXCBP ;copy pointer now that semaphore claimed NFS03 0501 863D ^4B NFS03 0469 8614 85 A0 STA LTXCBP NFS03 0501 863D ^4B NFS03 0470 8616 A5 9B LDA TXCBP +&01 NFS03 0501 863D ^4B NFS03 0471 8618 85 A1 STA LTXCBP +&01 NFS03 0501 863D ^4B NFS03 0472 861A NFS03 0501 863D ^4B NFS03 0473 861A 20 30 96 JSR BRIANX NFS03 0501 863D ^4B NFS03 0474 861D A1 9A L4 LDAIX TXCBP NFS03 0501 863D ^4B NFS03 0475 861F 30 FC BMI L4 NFS03 0501 863D ^4B NFS03 0476 8621 0A ASLA NFS03 0501 863D ^4B NFS03 0477 8622 10 1F BPL L2 NFS03 0501 863D ^4B NFS03 0478 8624 0A ASLA NFS03 0501 863D ^4B NFS03 0479 8625 F0 18 BEQ LE NFS03 0501 863D ^4B NFS03 0480 8627 NFS03 0501 863D ^4B NFS03 0481 8627 20 A1 84 JSR ESC NFS03 0501 863D ^4B NFS03 0482 862A NFS03 0501 863D ^4B NFS03 0483 862A 68 PLA NFS03 0501 863D ^4B NFS03 0484 862B AA TAX NFS03 0501 863D ^4B NFS03 0485 862C 68 PLA NFS03 0501 863D ^4B NFS03 0486 862D A8 TAY NFS03 0501 863D ^4B NFS03 0487 862E 68 PLA NFS03 0501 863D ^4B NFS03 0488 862F F0 0E BEQ LE NFS03 0501 863D ^4B NFS03 0489 8631 E9 01 SBCIM &01 NFS03 0501 863D ^4B NFS03 0490 8633 48 PHA NFS03 0501 863D ^4B NFS03 0491 8634 98 TYA NFS03 0501 863D ^4B NFS03 0492 8635 48 PHA NFS03 0501 863D ^4B NFS03 0493 8636 8A TXA NFS03 0501 863D ^4B NFS03 0494 8637 NFS03 0501 863D ^4B NFS03 0495 8637 MSDELY NFS03 0501 863D ^4B NFS03 0496 8637 CA DLPP DEX NFS03 0501 863D ^4B NFS03 0497 8638 D0 FD BNE DLPP ;1msec loop NFS03 0501 863D ^4B NFS03 0498 863A 88 DEY NFS03 0501 863D ^4B NFS03 0499 863B D0 FA BNE DLPP ;Outer loop NFS03 0501 863D ^4B NFS03 0500 863D NFS03 0501 863D ^4B NFS03 0501 863D F0 CB BEQ L0 NFS03 0477 8622 v60 NFS03 0502 863F AA LE TAX ;X=0 here NFS03 NFS03 NFS03 NFS03 Acorn macro assembler Page 16 NFS03 General Utilities NFS03 NFS03 0477 8622 v60 NFS03 0503 8640 4C 10 85 JMP NLISTN NFS03 0477 8622 v60 NFS03 0504 8643 68 L2 PLA -- NFS03 0505 8644 68 PLA -- NFS03 0506 8645 68 PLA -- NFS03 0507 8646 -- NFS03 0508 8646 4C 57 86 JMP ENTER ;disable escape after here -- NFS03 0509 8649 -- NFS03 0510 8649 ;** dont drop thru' here -- NFS03 0511 8649 -- NFS03 0512 8649 86 F2 PUTREG STX &F2 -- NFS03 0513 864B 84 F3 STY &F3 ;set up for MOS -- NFS03 0514 864D ; STX CMNDP -- NFS03 0515 864D ; STY CMNDP +%1 ;command line pointer -- NFS03 0516 864D REGPUT ;save the registers for later recovery -- NFS03 0517 864D 85 BD STA TEMPA -- NFS03 0518 864F 86 BB REGXY STX TEMPX ;save X,Y only -- NFS03 0519 8651 84 BC STY TEMPY ;forms a 0-page pointer of X,Y -- NFS03 0520 8653 86 BE STX POINTR -- NFS03 0521 8655 84 BF STY POINTR +&01 -- NFS03 0522 8657 08 ENTER PHP ;** 9/12/83 ** -- NFS03 0523 8658 46 97 LSR ESCAP ;** disable escape -- NFS03 0524 865A 28 PLP ;carry preserved -- NFS03 0525 865B 60 RTS -- NFS03 0526 865C -- NFS03 0527 865C -- NFS03 0528 865C LNK NFS04 link to next file -- NFS03 0001 865C ; > NFS04 -- NFS03 0002 865C TTL Tx/Rx and Screen I/O -- NFS03 0003 865C OPT DEBUG NFS03 NFS03 NFS03 NFS03 Acorn macro assembler Page 17 NFS03 Tx/Rx and Screen I/O NFS03 -- NFS03 0004 865C -- NFS03 0005 865C VSTRNG ;inline message handler,does not handle BRK!! -- NFS03 0006 865C 68 PLA -- NFS03 0007 865D 85 B0 STA WORK -- NFS03 0008 865F 68 PLA -- NFS03 0009 8660 85 B1 STA WORK +&01 ;current address -- NFS03 0010 8662 A0 00 LDYIM ZERO -- NFS03 0011 8664 E6 B0 VSTRLP INC WORK -- NFS03 0012 8666 D0 02 BNE INCPX NFS03 0012 8666 v7D NFS03 0013 8668 E6 B1 INC WORK +&01 NFS03 0012 8666 v7D NFS03 0014 866A B1 B0 INCPX LDAIY WORK ;step pointer by 1 -- NFS03 0015 866C 30 06 BMI VSTRNX NFS03 0015 866C v79 NFS03 0016 866E 20 E3 FF JSR OSASCI NFS03 0015 866C v79 NFS03 0017 8671 4C 64 86 JMP VSTRLP NFS03 0015 866C v79 NFS03 0018 8674 6C B0 00 VSTRNX JMI WORK ;continue the execution -- NFS03 0019 8677 -- NFS03 0020 8677 ; Routine to extract the FS number (or whatever) from -- NFS03 0021 8677 ; a string pointed at by TEMPX. -- NFS03 0022 8677 -- NFS03 0023 8677 A9 00 DECIN LDAIM ZERO -- NFS03 0024 8679 85 B2 STA W1 -- NFS03 0025 867B B1 BB DECIN1 LDAIY TEMPX NFS03 0044 8694 ^65 NFS03 0026 867D ; CMPIM $40 NFS03 0044 8694 ^65 NFS03 0027 867D ; BCS DECIN3 NFS03 0044 8694 ^65 NFS03 0028 867D C9 2E CMPIM "." NFS03 0044 8694 ^65 NFS03 0029 867F F0 16 BEQ DECIN2 NFS03 0044 8694 ^65 NFS03 0030 8681 90 13 BCC DECIN3 ;** 21/9/83 ** NFS03 0044 8694 ^65 NFS03 0031 8683 ; BMI DECIN3 NFS03 0044 8694 ^65 NFS03 0032 8683 29 0F ANDIM &0F NFS03 0044 8694 ^65 NFS03 0033 8685 NFS03 0044 8694 ^65 NFS03 0034 8685 85 B3 STA W2 ;addition routine NFS03 0044 8694 ^65 NFS03 0035 8687 06 B2 ASL W1 NFS03 0044 8694 ^65 NFS03 0036 8689 A5 B2 LDA W1 NFS03 0044 8694 ^65 NFS03 0037 868B 0A ASLA NFS03 0044 8694 ^65 NFS03 0038 868C 0A ASLA NFS03 0044 8694 ^65 NFS03 0039 868D 65 B2 ADC W1 NFS03 0044 8694 ^65 NFS03 0040 868F 65 B3 ADC W2 NFS03 0044 8694 ^65 NFS03 0041 8691 85 B2 STA W1 NFS03 0044 8694 ^65 NFS03 0042 8693 NFS03 0044 8694 ^65 NFS03 0043 8693 C8 INY NFS03 0044 8694 ^65 NFS03 0044 8694 D0 E5 BNE DECIN1 NFS03 0029 867F v69 NFS03 0045 8696 18 DECIN3 CLC NFS03 0029 867F v69 NFS03 0046 8697 A5 B2 DECIN2 LDA W1 ;return A as number read -- NFS03 0047 8699 60 RTS -- NFS03 0048 869A -- NFS03 0049 869A A8 Y2FSA TAY ;handle passed in A, not Y here -- NFS03 0050 869B Y2FS -- NFS03 0051 869B ;Converts the FS handle to one -- NFS03 0052 869B ;segregated inside the BBCpu. This -- NFS03 0053 869B ;allows the user to discriminate handles -- NFS03 0054 869B -- NFS03 0055 869B ;Passed handle in Y -- NFS03 0056 869B -- NFS03 0057 869B 18 CLC -- NFS03 0058 869C 48 Y2FSX PHA ;enter here for FINDOP -- NFS03 0059 869D 8A TXA -- NFS03 0060 869E 48 PHA -- NFS03 0061 869F -- NFS03 0062 869F 98 TYA ;get the handle -- NFS03 0063 86A0 90 02 BCC Y2FSL5 ;detect 0-handle NFS03 0063 86A0 v7D NFS03 0064 86A2 F0 0F BEQ Y2FSL4 NFS03 0064 86A2 v70 NFS03 0065 86A4 38 Y2FSL5 SEC NFS03 0064 86A2 v70 NFS03 0066 86A5 E9 1F SBCIM HAND -&01 ;base for FS handles NFS03 0064 86A2 v70 NFS03 0067 86A7 AA TAX ;>0 NFS03 0064 86A2 v70 NFS03 0068 86A8 A9 01 LDAIM ONE NFS03 0064 86A2 v70 NFS03 0069 86AA 0A Y2FSL2 ASLA ;this loop returns 0 for invalid handles NFS03 0064 86A2 v70 NFS03 0070 86AB CA DEX NFS03 0064 86A2 v70 NFS03 0071 86AC D0 FC BNE Y2FSL2 ;set up the handle NFS03 0064 86A2 v70 NFS03 0072 86AE 6A RORA ;shift right to adjust NFS03 0064 86A2 v70 NFS03 0073 86AF NFS03 0064 86A2 v70 NFS03 0074 86AF A8 TAY NFS03 0064 86A2 v70 NFS03 0075 86B0 D0 01 BNE Y2FSL4 ;detect bad handle NFS03 0064 86A2 v70 NFS03 0076 86B2 88 DEY ;pass $FF as handle NFS03 0064 86A2 v70 NFS03 0077 86B3 68 Y2FSL4 PLA -- NFS03 0078 86B4 AA TAX -- NFS03 0079 86B5 68 PLA -- NFS03 0080 86B6 60 RTS ;return with Y=FS handle -- NFS03 0081 86B7 -- NFS03 0082 86B7 FS2A ;handle passed in A -- NFS03 0083 86B7 ;Need to convert FS to internal form. -- NFS03 0084 86B7 A2 1F LDXIM HAND - 1 -- NFS03 0085 86B9 E8 FS2AL1 INX NFS03 0087 86BB ^7C NFS03 0086 86BA 4A LSRA NFS03 0087 86BB ^7C NFS03 0087 86BB D0 FC BNE FS2AL1 -- NFS03 0088 86BD 8A TXA -- NFS03 0089 86BE 60 RTS -- NFS03 0090 86BF -- NFS03 0091 86BF ;Return with A=internal form -- NFS03 0092 86BF A2 04 DATA0 LDXIM FOUR -- NFS03 0093 86C1 B5 AF DATA01 LDAAX WORK -&01 NFS03 0097 86C8 ^77 NFS03 0094 86C3 55 B3 EORAX WORK +&03 ;testing for zero data NFS03 0097 86C8 ^77 NFS03 0095 86C5 D0 03 BNE DATA02 NFS03 0097 86C8 ^77 NFS03 0096 86C7 CA DEX NFS03 0097 86C8 ^77 NFS03 0097 86C8 D0 F7 BNE DATA01 NFS03 0095 86C5 v7C NFS03 0098 86CA 60 DATA02 RTS ;return Z=1 for no data -- NFS03 0099 86CB -- NFS03 0100 86CB A2 20 HANDLE LDXIM HAND -- NFS03 0101 86CD A0 27 LDYIM HAND +&07 -- NFS03 0102 86CF 60 HANDX RTS ;return the bounds on FS handles -- NFS03 0103 86D0 -- NFS03 0104 86D0 0D 07 0E SETEOF ORA EOF -- NFS03 0105 86D3 D0 05 BNE SETCLR NFS03 0105 86D3 v7A NFS03 0106 86D5 NFS03 0105 86D3 v7A NFS03 0107 86D5 49 FF CLREOF EORIM FILLER NFS03 0105 86D3 v7A NFS03 0108 86D7 2D 07 0E AND EOF NFS03 0105 86D3 v7A NFS03 0109 86DA NFS03 0105 86D3 v7A NFS03 0110 86DA 8D 07 0E SETCLR STA EOF -- NFS03 0111 86DD 60 RTS -- NFS03 0112 86DE -- NFS03 0113 86DE -- NFS03 0114 86DE LNK NFS05 -- NFS05 0001 86DE ; > NFS05 -- NFS05 0002 86DE TTL Filing System -- NFS05 0003 86DE OPT VIIIX NFS05 NFS05 NFS05 NFS05 Acorn macro assembler Page 18 NFS05 Filing System NFS05 -- NFS05 0004 86DE ; *********************** -- NFS05 0005 86DE ; ***************************** -- NFS05 0006 86DE ; ******** OSFILE ******* -- NFS05 0007 86DE ; ***************************** -- NFS05 0008 86DE ; *********************** -- NFS05 0009 86DE -- NFS05 0010 86DE -- NFS05 0011 86DE ; OSFILE is a MOS call which deals with almost all -- NFS05 0012 86DE ; operations concerning Files which can be performed -- NFS05 0013 86DE ; using the file-title. Such operations include -- NFS05 0014 86DE ; Loading, Saving, Reading and Writing catalogue info -- NFS05 0015 86DE ; for existing files. All calls are associated with -- NFS05 0016 86DE ; a control block and the A register, to determine the -- NFS05 0017 86DE ; operation involved. -- NFS05 0018 86DE -- NFS05 0019 86DE ; X,Y -> -------------------- -- NFS05 0020 86DE ; : Pointer to title : (2) -- NFS05 0021 86DE ; -------------------- -- NFS05 0022 86DE ; : Load Address : (4) -- NFS05 0023 86DE ; -------------------- -- NFS05 0024 86DE ; : Exec Address : (4) -- NFS05 0025 86DE ; -------------------- -- NFS05 0026 86DE ; : Data start [length]: (4) -- NFS05 0027 86DE ; -------------------- -- NFS05 0028 86DE ; : Data end [Protn.] : (4) -- NFS05 0029 86DE ; -------------------- -- NFS05 0030 86DE -- NFS05 0031 86DE ;A = &FF -> LOAD file. If byte 6 of CB = 0 -- NFS05 0032 86DE ;then load to supplied address else load to file address. -- NFS05 0033 86DE ;A = 0 -> SAVE file -- NFS05 0034 86DE ;A = 1,5 see CHARGS -- NFS05 0035 86DE -- NFS05 0036 86DE A0 01 QUOTES LDYIM ONE -- NFS05 0037 86E0 B1 BB FILE1 LDAIY TEMPX NFS05 0040 86E6 ^78 NFS05 0038 86E2 99 F2 00 STAAY &F2 NFS05 0040 86E6 ^78 NFS05 0039 86E5 88 DEY NFS05 0040 86E6 ^78 NFS05 0040 86E6 10 F8 BPL FILE1 -- NFS05 0041 86E8 -- NFS05 0042 86E8 A0 00 QUOTED LDYIM &00 ;routine entered here too -- NFS05 0043 86EA A2 FF QUOTER LDXIM &FF -- NFS05 0044 86EC 18 CLC -- NFS05 0045 86ED 20 C2 FF JSR GSINIT -- NFS05 0046 86F0 F0 0B BEQ QUOTE2 ;look for null string NFS05 0046 86F0 v74 NFS05 0047 86F2 20 C5 FF QUOTE1 JSR GSREAD NFS05 0046 86F0 v74 NFS05 0048 86F5 B0 06 BCS QUOTE2 ;continue until C=1 NFS05 0046 86F0 v74 NFS05 0049 86F7 E8 INX NFS05 0046 86F0 v74 NFS05 0050 86F8 9D 30 0E STAAX FNAME ;Y,A updated NFS05 0046 86F0 v74 NFS05 0051 86FB 90 F5 BCC QUOTE1 NFS05 0046 86F0 v74 NFS05 0052 86FD E8 QUOTE2 INX -- NFS05 0053 86FE A9 0D LDAIM CR -- NFS05 0054 8700 9D 30 0E STAAX FNAME ;fill in CR -- NFS05 0055 8703 A9 30 LDAIM FNAME -- NFS05 0056 8705 85 BE STA POINTR -- NFS05 0057 8707 A9 0E LDAIM /(FNAME ) -- NFS05 0058 8709 85 BF STA POINTR +&01 -- NFS05 0059 870B 60 RTS -- NFS05 0060 870C -- NFS05 0061 870C FILEOP -- NFS05 0062 870C 20 4D 86 JSR REGPUT -- NFS05 0063 870F 20 DE 86 JSR QUOTES -- NFS05 0064 8712 A5 BD LDA TEMPA ;test operation -- NFS05 0065 8714 10 7A BPL SAVEOP ;do a save operation NFS05 0065 8714 v05 NFS05 0066 8716 C9 FF CMPIM &FF NFS05 0065 8714 v05 NFS05 0067 8718 F0 03 BEQ LOADOP ;only allow legal operations NFS05 0065 8714 v05 NFS05 0068 871A 4C B3 89 JMP REGGET ;else return NFS05 0065 8714 v05 NFS05 0069 871D NFS05 0065 8714 v05 NFS05 0070 871D TTL OSFILE - load NFS05 0065 8714 v05 NFS05 0071 871D NFS05 0065 8714 v05 NFS05 0072 871D 20 82 8D LOADOP JSR COPYCL ;copy the filename NFS05 0065 8714 v05 NFS05 0073 8720 A0 02 LDYIM FCLOAD ;Y=Fn. code, X= buffer extent NFS05 0065 8714 v05 NFS05 0074 8722 NFS05 0065 8714 v05 NFS05 0075 8722 A9 92 LODCMD LDAIM PLDATA ;enter here on load as command NFS05 0065 8714 v05 NFS05 0076 8724 85 97 STA ESCAP ;** 9/12/83 ** NFS05 0065 8714 v05 NFS05 0077 8726 8D 02 0F STA HDRURD ;fudge header to carry data port NFS05 0065 8714 v05 NFS05 0078 8729 ; LDAIM DLOAD NFS05 0065 8714 v05 NFS05 0079 8729 20 BD 83 JSR DOFSUP NFS05 0065 8714 v05 NFS05 0080 872C NFS05 0065 8714 v05 NFS05 0081 872C A0 06 LDYIM SIX NFS05 0065 8714 v05 NFS05 0082 872E B1 BB LDAIY TEMPX ;get exec flag NFS05 0065 8714 v05 NFS05 0083 8730 D0 08 BNE LODFIL ;if flag unset then skip loadaddress copy NFS05 0065 8714 v05 NFS05 0084 8732 NFS05 0065 8714 v05 NFS05 0085 8732 20 2F 88 JSR LODR1 ;copy from CB to WORK NFS05 0065 8714 v05 NFS05 0086 8735 20 41 88 JSR LODR2 ;copy from RXBUF to CB NFS05 0065 8714 v05 NFS05 0087 8738 90 06 BCC LODCOM NFS05 0065 8714 v05 NFS05 0088 873A NFS05 0065 8714 v05 NFS05 0089 873A 20 41 88 LODFIL JSR LODR2 ;ammend CB with final data NFS05 0065 8714 v05 NFS05 0090 873D 20 2F 88 JSR LODR1 ;copy data into WORK NFS05 0065 8714 v05 NFS05 0091 8740 NFS05 0065 8714 v05 NFS05 0092 8740 A0 04 LODCOM LDYIM FOUR ;C=0 here from either branch NFS05 0065 8714 v05 NFS05 0093 8742 B5 B0 LODSIZ LDAAX WORK NFS05 0065 8714 v05 NFS05 0094 8744 95 C8 STAAX RXCB +HPTR NFS05 0065 8714 v05 NFS05 0095 8746 7D 0D 0F ADCAX RXBUF +&08 ;.. WORK4-7 hold hi pointer NFS05 0065 8714 v05 NFS05 0096 8749 95 B4 STAAX WORK +&04 ;calculate file size NFS05 0065 8714 v05 NFS05 0097 874B E8 INX NFS05 0065 8714 v05 NFS05 0098 874C 88 DEY ;count on Y NFS05 0065 8714 v05 NFS05 0099 874D D0 F3 BNE LODSIZ ;loop three times for add NFS05 0065 8714 v05 NFS05 0100 874F 38 SEC NFS05 0065 8714 v05 NFS05 0101 8750 ED 10 0F SBC RXBUF +&0B ;C=0 here NFS05 0065 8714 v05 NFS05 0102 8753 85 B7 STA WORK +&07 NFS05 0065 8714 v05 NFS05 0103 8755 NFS05 0065 8714 v05 NFS05 0104 8755 20 65 87 JSR LODLP3 ;do the data xfer NFS05 0065 8714 v05 NFS05 0105 8758 NFS05 0065 8714 v05 NFS05 0106 8758 A2 02 LDXIM TWO NFS05 0065 8714 v05 NFS05 0107 875A BD 10 0F LODATT LDAAX RXBUF +&0B ;move the date/protn. NFS05 0065 8714 v05 NFS05 0108 875D 9D 05 0F STAAX RXBUF NFS05 0065 8714 v05 NFS05 0109 8760 CA DEX NFS05 0065 8714 v05 NFS05 0110 8761 10 F7 BPL LODATT NFS05 0065 8714 v05 NFS05 0111 8763 30 73 BMI SAVRTS ;dual exit routine NFS05 0065 8714 v05 NFS05 0112 8765 NFS05 0065 8714 v05 NFS05 0113 8765 ;Entry conditions for LODLP3 are that WORK[0:7] NFS05 0065 8714 v05 NFS05 0114 8765 ;hold the low and high addresses of the buffer NFS05 0065 8714 v05 NFS05 0115 8765 ;being received into. These locations are altered NFS05 0065 8714 v05 NFS05 0116 8765 ;during the routine and need not neccesarily NFS05 0065 8714 v05 NFS05 0117 8765 ;reside in 0-page NFS05 0065 8714 v05 NFS05 0118 8765 NFS05 0065 8714 v05 NFS05 0119 8765 LODLP3 ;main loop for block transfer from FS NFS05 0065 8714 v05 NFS05 0120 8765 NFS05 0065 8714 v05 NFS05 0121 8765 20 BF 86 JSR DATA0 ;test for zero data NFS05 0065 8714 v05 NFS05 0122 8768 F0 25 BEQ LODX NFS05 0065 8714 v05 NFS05 0123 876A NFS05 0065 8714 v05 NFS05 0124 876A A9 92 LDAIM PLDATA NFS05 NFS05 NFS05 NFS05 Acorn macro assembler Page 19 NFS05 OSFILE - load NFS05 NFS05 0065 8714 v05 NFS05 0125 876C 85 C1 STA RXCB + PORT ;set up the data port NFS05 0065 8714 v05 NFS05 0126 876E NFS05 0065 8714 v05 NFS05 0127 876E A2 03 LODLPV LDXIM THREE NFS05 0065 8714 v05 NFS05 0128 8770 B5 C8 LODLPX LDAAX RXCB + HPTR NFS05 0065 8714 v05 NFS05 0129 8772 95 C4 STAAX RXCB + LPTR NFS05 0065 8714 v05 NFS05 0130 8774 B5 B4 LDAAX WORK +&04 NFS05 0065 8714 v05 NFS05 0131 8776 95 C8 STAAX RXCB + HPTR NFS05 0065 8714 v05 NFS05 0132 8778 CA DEX NFS05 0065 8714 v05 NFS05 0133 8779 10 F5 BPL LODLPX NFS05 0065 8714 v05 NFS05 0134 877B NFS05 0065 8714 v05 NFS05 0135 877B A9 7F LDAIM RXRDY NFS05 0065 8714 v05 NFS05 0136 877D 85 C0 STA RXCB ;ready for receive NFS05 0065 8714 v05 NFS05 0137 877F 20 30 85 JSR WAITFS NFS05 0065 8714 v05 NFS05 0138 8782 NFS05 0065 8714 v05 NFS05 0139 8782 A0 03 LDYIM THREE NFS05 0065 8714 v05 NFS05 0140 8784 B9 C8 00 LODCHK LDAAY RXCB +HPTR NFS05 0065 8714 v05 NFS05 0141 8787 59 B4 00 EORAY WORK +&04 NFS05 0065 8714 v05 NFS05 0142 878A D0 E2 BNE LODLPV NFS05 0065 8714 v05 NFS05 0143 878C 88 DEY NFS05 0065 8714 v05 NFS05 0144 878D 10 F5 BPL LODCHK NFS05 0065 8714 v05 NFS05 0145 878F 60 LODX RTS NFS05 0065 8714 v05 NFS05 0146 8790 NFS05 0065 8714 v05 NFS05 0147 8790 TTL OSFILE - Save NFS05 0065 8714 v05 NFS05 0148 8790 NFS05 0065 8714 v05 NFS05 0149 8790 ; ********************* NFS05 0065 8714 v05 NFS05 0150 8790 ;****** SAVE ****** NFS05 0065 8714 v05 NFS05 0151 8790 ; ********************* NFS05 0065 8714 v05 NFS05 0152 8790 NFS05 0065 8714 v05 NFS05 0153 8790 SAVEOP ;called when A=0 NFS05 0065 8714 v05 NFS05 0154 8790 NFS05 0065 8714 v05 NFS05 0155 8790 F0 03 BEQ SAVEL1 NFS05 0111 8763 v0C NFS05 0156 8792 4C D1 88 JMP CHARGS NFS05 0111 8763 v0C NFS05 0157 8795 A2 04 SAVEL1 LDXIM FOUR NFS05 0111 8763 v0C NFS05 0158 8797 A0 0E LDYIM &0E NFS05 0111 8763 v0C NFS05 0159 8799 NFS05 0111 8763 v0C NFS05 0160 8799 SAVSIZ NFS05 0111 8763 v0C NFS05 0161 8799 B1 BB LDAIY TEMPX NFS05 0111 8763 v0C NFS05 0162 879B 99 A6 00 STAAY WORK -&0A ;save at WORK4->7 NFS05 0111 8763 v0C NFS05 0163 879E 20 4E 88 JSR DOWN4 NFS05 0111 8763 v0C NFS05 0164 87A1 F1 BB SBCIY TEMPX ;take start from end NFS05 0111 8763 v0C NFS05 0165 87A3 99 03 0F STAAY TXBUF -&02 ;save size NFS05 0111 8763 v0C NFS05 0166 87A6 48 PHA ;eliminate copying NFS05 0111 8763 v0C NFS05 0167 87A7 B1 BB LDAIY TEMPX NFS05 0111 8763 v0C NFS05 0168 87A9 99 A6 00 STAAY WORK -&0A ;save start addr for now NFS05 0111 8763 v0C NFS05 0169 87AC 68 PLA ;restore size NFS05 0111 8763 v0C NFS05 0170 87AD 91 BB STAIY TEMPX ;update CB NFS05 0111 8763 v0C NFS05 0171 87AF 20 3B 88 JSR UP5 NFS05 0111 8763 v0C NFS05 0172 87B2 CA DEX ;count on X NFS05 0111 8763 v0C NFS05 0173 87B3 D0 E4 BNE SAVSIZ ;four byte size spec'd NFS05 0111 8763 v0C NFS05 0174 87B5 NFS05 0111 8763 v0C NFS05 0175 87B5 A0 09 LDYIM NINE NFS05 0111 8763 v0C NFS05 0176 87B7 B1 BB SAVLP1 LDAIY TEMPX NFS05 0111 8763 v0C NFS05 0177 87B9 99 03 0F STAAY TXBUF -&02 NFS05 0111 8763 v0C NFS05 0178 87BC 88 DEY NFS05 0111 8763 v0C NFS05 0179 87BD D0 F8 BNE SAVLP1 ;copy load and exec addresses NFS05 0111 8763 v0C NFS05 0180 87BF A9 91 LDAIM PSAACK NFS05 0111 8763 v0C NFS05 0181 87C1 85 97 STA ESCAP ;** 9/12/83 ** NFS05 0111 8763 v0C NFS05 0182 87C3 8D 02 0F STA HDRURD NFS05 0111 8763 v0C NFS05 0183 87C6 85 B8 STA WORK +&08 ;save ack. port for later NFS05 0111 8763 v0C NFS05 0184 87C8 NFS05 0111 8763 v0C NFS05 0185 87C8 A2 0B LDXIM &0B NFS05 0111 8763 v0C NFS05 0186 87CA 20 84 8D JSR COPYCX NFS05 0111 8763 v0C NFS05 0187 87CD NFS05 0111 8763 v0C NFS05 0188 87CD A0 01 LDYIM FCSAVE NFS05 0111 8763 v0C NFS05 0189 87CF ; LDAIM DREPLY NFS05 0111 8763 v0C NFS05 0190 87CF 20 BD 83 JSR DOFSUP ;do the operation NFS05 0111 8763 v0C NFS05 0191 87D2 AD 05 0F LDA RXBUF ;get data port NFS05 0111 8763 v0C NFS05 0192 87D5 NFS05 0111 8763 v0C NFS05 0193 87D5 20 53 88 JSR SAVLP ;else get the data NFS05 0111 8763 v0C NFS05 0194 87D8 NFS05 0111 8763 v0C NFS05 0195 87D8 AD 03 0F SAVRTS LDA RXBUF - 2 ;Store fs indication from command code -- NFS05 0196 87DB 48 PHA -- NFS05 0197 87DC -- NFS05 0198 87DC 20 F3 83 JSR DOFSL8 ;share RC inspection code -- NFS05 0199 87DF -- NFS05 0200 87DF ;Screen monitor routine -- NFS05 0201 87DF ;Assumes the OSFILE control block -- NFS05 0202 87DF ;is up to date and the TEMPX points -- NFS05 0203 87DF ;at it, also that POINTR points at -- NFS05 0204 87DF ;the file title -- NFS05 0205 87DF -- NFS05 0206 87DF 68 PLA ;Restore fs type indication -- NFS05 0207 87E0 -- NFS05 0208 87E0 AC 06 0E LDY MESS -- NFS05 0209 87E3 F0 32 BEQ SAVJD2 NFS05 0209 87E3 v4D NFS05 0210 87E5 A0 00 LDYIM &00 ;messages on here NFS05 0209 87E3 v4D NFS05 0211 87E7 NFS05 0209 87E3 v4D NFS05 0212 87E7 AA TAX ;Check fd type indication NFS05 0209 87E3 v4D NFS05 0213 87E8 F0 05 BEQ MONL1 ;Z implies old FS NFS05 0209 87E3 v4D NFS05 0214 87EA 20 98 8D JSR INFOLP ;else print string in buffer NFS05 0209 87E3 v4D NFS05 0215 87ED 30 14 BMI MONL3 ;exit condition NFS05 0209 87E3 v4D NFS05 0216 87EF NFS05 0209 87E3 v4D NFS05 0217 87EF B1 BE MONL1 LDAIY POINTR NFS05 0209 87E3 v4D NFS05 0218 87F1 [ &FF=0 NFS05 0209 87E3 v4D NFS05 0223 87F1 | NFS05 0209 87E3 v4D NFS05 0224 87F1 C9 21 CMPIM &21 NFS05 0209 87E3 v4D NFS05 0225 87F3 90 06 BCC MONL2 NFS05 0209 87E3 v4D NFS05 0226 87F5 ] NFS05 0209 87E3 v4D NFS05 0227 87F5 20 E3 FF JSR OSASCI NFS05 0209 87E3 v4D NFS05 0228 87F8 C8 INY NFS05 0209 87E3 v4D NFS05 0229 87F9 D0 F4 BNE MONL1 NFS05 0209 87E3 v4D NFS05 0230 87FB NFS05 0209 87E3 v4D NFS05 0231 87FB 20 7B 8D MONL2 JSR NUMSP NFS05 0209 87E3 v4D NFS05 0232 87FE C8 INY NFS05 0209 87E3 v4D NFS05 0233 87FF C0 0C CPYIM &0C NFS05 0209 87E3 v4D NFS05 0234 8801 90 F8 BCC MONL2 NFS05 0209 87E3 v4D NFS05 0235 8803 NFS05 0209 87E3 v4D NFS05 0236 8803 A0 05 MONL3 LDYIM &05 NFS05 0209 87E3 v4D NFS05 0237 8805 20 70 8D JSR NUMOUT ;print load address NFS05 0209 87E3 v4D NFS05 0238 8808 NFS05 0209 87E3 v4D NFS05 0239 8808 A0 09 LDYIM &09 NFS05 0209 87E3 v4D NFS05 0240 880A 20 70 8D JSR NUMOUT NFS05 0209 87E3 v4D NFS05 0241 880D A0 0C LDYIM &0C NFS05 0209 87E3 v4D NFS05 0242 880F A2 03 LDXIM THREE NFS05 0209 87E3 v4D NFS05 0243 8811 20 72 8D JSR NUM01 NFS05 0209 87E3 v4D NFS05 0244 8814 NFS05 0209 87E3 v4D NFS05 0245 8814 20 E7 FF JSR OSNEWL NFS05 0209 87E3 v4D NFS05 0246 8817 NFS05 0209 87E3 v4D NFS05 0247 8817 SAVJD2 NFS05 0209 87E3 v4D NFS05 0248 8817 ; LDXIM 0 ; ****************************** Bruce 27/2/86 *********** NFS05 0209 87E3 v4D NFS05 0249 8817 8E 08 0F STX RXBUF +&03 ;zero byte for attributes NFS05 NFS05 NFS05 NFS05 Acorn macro assembler Page 20 NFS05 OSFILE - Save NFS05 -- NFS05 0250 881A A0 0E LDYIM &0E -- NFS05 0251 881C AD 05 0F LDA RXBUF ;convert protection format -- NFS05 0252 881F 20 D9 85 JSR FSBBC -- NFS05 0253 8822 91 BB SAVJD3 STAIY TEMPX ;fill in the CB NFS05 0257 882A ^76 NFS05 0254 8824 C8 INY NFS05 0257 882A ^76 NFS05 0255 8825 B9 F7 0E LDAAY RXBUF -&0E ;Read next byte NFS05 0257 882A ^76 NFS05 0256 8828 C0 12 CPYIM &12 NFS05 0257 882A ^76 NFS05 0257 882A D0 F6 BNE SAVJD3 -- NFS05 0258 882C -- NFS05 0259 882C 4C B3 89 SAVEXX JMP REGGET ;restore registers and return -- NFS05 0260 882F -- NFS05 0261 882F LODR1 ;routine to copy from CB into WORK -- NFS05 0262 882F A0 05 LDYIM FIVE -- NFS05 0263 8831 B1 BB LODRL1 LDAIY TEMPX NFS05 0267 8839 ^76 NFS05 0264 8833 99 AE 00 STAAY WORK -&02 ;grab from LOAD address area NFS05 0267 8839 ^76 NFS05 0265 8836 88 DEY NFS05 0267 8839 ^76 NFS05 0266 8837 C0 02 CPYIM TWO NFS05 0267 8839 ^76 NFS05 0267 8839 B0 F6 BCS LODRL1 ;stop after 4 bytes -- NFS05 0268 883B -- NFS05 0269 883B C8 UP5 INY ;pointer manipulation -- NFS05 0270 883C C8 UP4 INY ;routines -- NFS05 0271 883D C8 INY -- NFS05 0272 883E C8 INY -- NFS05 0273 883F C8 INY -- NFS05 0274 8840 -- NFS05 0275 8840 60 RTS -- NFS05 0276 8841 -- NFS05 0277 8841 LODR2 ;routine to copy LOAD and EXEC addr to CB -- NFS05 0278 8841 A0 0D LDYIM &0D -- NFS05 0279 8843 8A TXA ;zero here -- NFS05 0280 8844 91 BB LODRL2 STAIY TEMPX NFS05 0284 884C ^76 NFS05 0281 8846 B9 02 0F LDAAY RXBUF - &03 NFS05 0284 884C ^76 NFS05 0282 8849 88 DEY NFS05 0284 884C ^76 NFS05 0283 884A C0 02 CPYIM TWO NFS05 0284 884C ^76 NFS05 0284 884C B0 F6 BCS LODRL2 -- NFS05 0285 884E -- NFS05 0286 884E 88 DOWN4 DEY ;space saving 10/3/83 -- NFS05 0287 884F 88 DOWN3 DEY -- NFS05 0288 8850 88 DEY -- NFS05 0289 8851 88 DEY -- NFS05 0290 8852 60 RTS -- NFS05 0291 8853 -- NFS05 0292 8853 ;Entry conditions for this routine are that -- NFS05 0293 8853 ;WORK[0:7] hold the low and high addresses of -- NFS05 0294 8853 ;the data being sent. WORK[8] holds the port -- NFS05 0295 8853 ;on which to receive the byte acknowledges for -- NFS05 0296 8853 ;each data block. -- NFS05 0297 8853 -- NFS05 0298 8853 SAVLP -- NFS05 0299 8853 48 PHA ;save this for call -- NFS05 0300 8854 20 BF 86 JSR DATA0 -- NFS05 0301 8857 F0 74 BEQ EOFRTS NFS05 0301 8857 v0B NFS05 0302 8859 NFS05 0301 8857 v0B NFS05 0303 8859 A9 00 SAVLP2 LDAIM ZERO ;Push 4-byte buffer value NFS05 0301 8857 v0B NFS05 0304 885B 48 PHA NFS05 0301 8857 v0B NFS05 0305 885C 48 PHA NFS05 0301 8857 v0B NFS05 0306 885D AA TAX ;Set counter = 0 NFS05 0301 8857 v0B NFS05 0307 885E AD 07 0F LDA RXBUF + 2 NFS05 0301 8857 v0B NFS05 0308 8861 48 PHA NFS05 0301 8857 v0B NFS05 0309 8862 AD 06 0F LDA RXBUF + 1 NFS05 0301 8857 v0B NFS05 0310 8865 48 PHA NFS05 0301 8857 v0B NFS05 0311 8866 A0 04 LDYIM 4 NFS05 0301 8857 v0B NFS05 0312 8868 18 CLC NFS05 0301 8857 v0B NFS05 0313 8869 NFS05 0301 8857 v0B NFS05 0314 8869 B5 B0 SAVJD1 LDAAX WORK NFS05 0301 8857 v0B NFS05 0315 886B 95 C4 STAAX TXCB +LPTR NFS05 0301 8857 v0B NFS05 0316 886D 68 PLA NFS05 0301 8857 v0B NFS05 0317 886E 75 B0 ADCAX WORK NFS05 0301 8857 v0B NFS05 0318 8870 95 C8 STAAX RXCB +HPTR NFS05 0301 8857 v0B NFS05 0319 8872 95 B0 STAAX WORK NFS05 0301 8857 v0B NFS05 0320 8874 E8 INX NFS05 0301 8857 v0B NFS05 0321 8875 88 DEY NFS05 0301 8857 v0B NFS05 0322 8876 D0 F1 BNE SAVJD1 NFS05 0301 8857 v0B NFS05 0323 8878 ;BCS SAVCC ;wrap-round check NFS05 0301 8857 v0B NFS05 0324 8878 NFS05 0301 8857 v0B NFS05 0325 8878 ;Y=0, X=4 here NFS05 0301 8857 v0B NFS05 0326 8878 38 SEC NFS05 0301 8857 v0B NFS05 0327 8879 B9 B0 00 SAVCHK LDAAY WORK ;get current end pointer NFS05 0301 8857 v0B NFS05 0328 887C F9 B4 00 SBCAY WORK +&04 NFS05 0301 8857 v0B NFS05 0329 887F C8 INY NFS05 0301 8857 v0B NFS05 0330 8880 CA DEX NFS05 0301 8857 v0B NFS05 0331 8881 D0 F6 BNE SAVCHK ;loop 4 times NFS05 0301 8857 v0B NFS05 0332 8883 90 09 BCC SAVMOR ;carry set on end condition NFS05 0301 8857 v0B NFS05 0333 8885 NFS05 0301 8857 v0B NFS05 0334 8885 A2 03 SAVCC LDXIM &03 ;come here on wraparound NFS05 0301 8857 v0B NFS05 0335 8887 B5 B4 SAVEND LDAAX WORK +&04 NFS05 0301 8857 v0B NFS05 0336 8889 95 C8 STAAX TXCB +HPTR NFS05 0301 8857 v0B NFS05 0337 888B CA DEX NFS05 0301 8857 v0B NFS05 0338 888C 10 F9 BPL SAVEND NFS05 0301 8857 v0B NFS05 0339 888E NFS05 0301 8857 v0B NFS05 0340 888E 68 SAVMOR PLA ;get data port NFS05 0301 8857 v0B NFS05 0341 888F 48 PHA ;save this again NFS05 0301 8857 v0B NFS05 0342 8890 08 PHP NFS05 0301 8857 v0B NFS05 0343 8891 85 C1 STA RXCB +PORT NFS05 0301 8857 v0B NFS05 0344 8893 A9 80 LDAIM TXFLAG NFS05 0301 8857 v0B NFS05 0345 8895 85 C0 STA TXCB NFS05 0301 8857 v0B NFS05 0346 8897 20 F7 85 JSR FSXMIT ;send the data NFS05 0301 8857 v0B NFS05 0347 889A A5 B8 LDA WORK +&08 NFS05 0301 8857 v0B NFS05 0348 889C 20 89 83 JSR FSRXCC ;ready for reply NFS05 0301 8857 v0B NFS05 0349 889F 28 PLP NFS05 0301 8857 v0B NFS05 0350 88A0 B0 2B BCS EOFRTS NFS05 0301 8857 v0B NFS05 0351 88A2 A9 91 LDAIM PSAACK NFS05 0301 8857 v0B NFS05 0352 88A4 85 C1 STA RXCB + PORT NFS05 0301 8857 v0B NFS05 0353 88A6 ; LDAIM DSAVE NFS05 0301 8857 v0B NFS05 0354 88A6 NFS05 0301 8857 v0B NFS05 0355 88A6 E6 C4 INC RXCB +LPTR ;RX ack. into RC slot, avoiding CC which indicates NFS05 0301 8857 v0B NFS05 0356 88A8 ;which fs type we are communicating with. NFS05 0301 8857 v0B NFS05 0357 88A8 ;Note assumes RXBUF don't cross a page !! NFS05 0301 8857 v0B NFS05 0358 88A8 NFS05 0301 8857 v0B NFS05 0359 88A8 20 30 85 JSR WAITFS NFS05 0301 8857 v0B NFS05 0360 88AB D0 AC BNE SAVLP2 NFS05 0301 8857 v0B NFS05 0361 88AD NFS05 0301 8857 v0B NFS05 0362 88AD TTL OSFSCM - EOF NFS05 0301 8857 v0B NFS05 0363 88AD NFS05 0301 8857 v0B NFS05 0364 88AD ; The BBCpu BASIC has a peculiar method of recognising NFS05 0301 8857 v0B NFS05 0365 88AD ; the end of an open file; the last byte is signalled, NFS05 0301 8857 v0B NFS05 0366 88AD ; the next byte returns with carry set and the next is NFS05 0301 8857 v0B NFS05 0367 88AD ; an error. The user may have upto eight files open NFS05 0301 8857 v0B NFS05 0368 88AD ; at once, so a byte is used to hold eight hints about NFS05 0301 8857 v0B NFS05 0369 88AD ; the state of each file. The hint bit, if zero, indicates NFS05 0301 8857 v0B NFS05 0370 88AD ; that the user is certainly NOT at the end of file, NFS05 NFS05 NFS05 NFS05 Acorn macro assembler Page 21 NFS05 OSFSCM - EOF NFS05 NFS05 0301 8857 v0B NFS05 0371 88AD ; otherwise the FS must be interrogated. The EOF status NFS05 0301 8857 v0B NFS05 0372 88AD ; is updated after GETBYTE(S),OPEN and EOF operations. NFS05 0301 8857 v0B NFS05 0373 88AD ; The hint is unset on a PTR update operation. NFS05 0301 8857 v0B NFS05 0374 88AD NFS05 0301 8857 v0B NFS05 0375 88AD NFS05 0301 8857 v0B NFS05 0376 88AD EOFR NFS05 0301 8857 v0B NFS05 0377 88AD ;hint set = 0 NFS05 0301 8857 v0B NFS05 0378 88AD NFS05 0301 8857 v0B NFS05 0379 88AD 48 PHA NFS05 0301 8857 v0B NFS05 0380 88AE 8A TXA ;handle passed in X NFS05 0301 8857 v0B NFS05 0381 88AF 20 9A 86 JSR Y2FSA ;convert to FS form NFS05 0301 8857 v0B NFS05 0382 88B2 NFS05 0301 8857 v0B NFS05 0383 88B2 98 TYA NFS05 0301 8857 v0B NFS05 0384 88B3 2D 07 0E AND EOF ;get the flag bit NFS05 0301 8857 v0B NFS05 0385 88B6 AA TAX ;return it in X NFS05 0301 8857 v0B NFS05 0386 88B7 F0 14 BEQ EOFRTS ;if zero then done NFS05 0301 8857 v0B NFS05 0387 88B9 48 PHA ;save true handle NFS05 0301 8857 v0B NFS05 0388 88BA 8C 05 0F STY TXBUF NFS05 0301 8857 v0B NFS05 0389 88BD A0 11 LDYIM FCEOF NFS05 0301 8857 v0B NFS05 0390 88BF A2 01 LDXIM ONE NFS05 0301 8857 v0B NFS05 0391 88C1 20 C7 83 JSR DOFSOP NFS05 0301 8857 v0B NFS05 0392 88C4 68 PLA ;A=true handle NFS05 0301 8857 v0B NFS05 0393 88C5 AE 05 0F LDX RXBUF ;X<>0 indicates end-of-file NFS05 0301 8857 v0B NFS05 0394 88C8 D0 03 BNE EOFRTS NFS05 0301 8857 v0B NFS05 0395 88CA 20 D5 86 JSR CLREOF NFS05 0301 8857 v0B NFS05 0396 88CD 68 EOFRTS PLA -- NFS05 0397 88CE A4 BC LDY TEMPY -- NFS05 0398 88D0 60 RTS ;restore A and Y -- NFS05 0399 88D1 -- NFS05 0400 88D1 TTL OSFILE - args 1->6 -- NFS05 0401 88D1 -- NFS05 0402 88D1 ; *********************** -- NFS05 0403 88D1 ;********* OS-ARGS CALLS ********* -- NFS05 0404 88D1 ; *********************** -- NFS05 0405 88D1 -- NFS05 0406 88D1 CHARGS -- NFS05 0407 88D1 ;concerned with READING and WRITING of file -- NFS05 0408 88D1 ;statistics. Operation is specified by A, passed -- NFS05 0409 88D1 ;in the call -- NFS05 0410 88D1 -- NFS05 0411 88D1 -- NFS05 0412 88D1 ;From the current specification :- -- NFS05 0413 88D1 -- NFS05 0414 88D1 ;A = 1 : WRITE catalogue info for file -- NFS05 0415 88D1 ;A = 2 : WRITE load address for file -- NFS05 0416 88D1 ;A = 3 : WRITE exec address for file -- NFS05 0417 88D1 ;A = 4 : WRITE attributes for file -- NFS05 0418 88D1 ;A = 5 : READ file's catalogue information, Type in A -- NFS05 0419 88D1 -- NFS05 0420 88D1 8D 05 0F STA TXBUF ;save A as FS arg -- NFS05 0421 88D4 C9 06 CMPIM SIX ;OSFILE delete -- NFS05 0422 88D6 F0 3F BEQ CHA6 NFS05 0422 88D6 v40 NFS05 0423 88D8 B0 48 BCS CHA6XX ;error return NFS05 0423 88D8 v37 NFS05 0424 88DA C9 05 CMPIM FIVE NFS05 0423 88D8 v37 NFS05 0425 88DC F0 52 BEQ CHA5 NFS05 0425 88DC v2D NFS05 0426 88DE C9 04 CMPIM FOUR NFS05 0425 88DC v2D NFS05 0427 88E0 F0 44 BEQ CHA4 ;slightly different NFS05 0425 88DC v2D NFS05 0428 88E2 C9 01 CMPIM ONE NFS05 0425 88DC v2D NFS05 0429 88E4 F0 15 BEQ CHA1 ;also a bit different NFS05 0425 88DC v2D NFS05 0430 88E6 0A ASLA NFS05 0425 88DC v2D NFS05 0431 88E7 0A ASLA ;multiply by four NFS05 0425 88DC v2D NFS05 0432 88E8 A8 TAY ;form offset NFS05 0425 88DC v2D NFS05 0433 88E9 20 4F 88 JSR DOWN3 NFS05 0425 88DC v2D NFS05 0434 88EC A2 03 LDXIM THREE NFS05 0425 88DC v2D NFS05 0435 88EE B1 BB CHALP1 LDAIY TEMPX NFS05 0425 88DC v2D NFS05 0436 88F0 9D 06 0F STAAX TXBUF +&01 NFS05 0425 88DC v2D NFS05 0437 88F3 88 DEY NFS05 0425 88DC v2D NFS05 0438 88F4 CA DEX NFS05 0425 88DC v2D NFS05 0439 88F5 10 F7 BPL CHALP1 NFS05 0425 88DC v2D NFS05 0440 88F7 A2 05 LDXIM FIVE NFS05 0425 88DC v2D NFS05 0441 88F9 D0 15 BNE CHASK2 ;skip a bit NFS05 0425 88DC v2D NFS05 0442 88FB NFS05 0425 88DC v2D NFS05 0443 88FB 20 CF 85 CHA1 JSR CHAPRT ;get protection status NFS05 0425 88DC v2D NFS05 0444 88FE 8D 0E 0F STA TXBUF +&09 NFS05 0425 88DC v2D NFS05 0445 8901 A0 09 LDYIM &09 NFS05 0425 88DC v2D NFS05 0446 8903 A2 08 LDXIM &08 NFS05 0425 88DC v2D NFS05 0447 8905 B1 BB CHALP2 LDAIY TEMPX ;copy all LOAD, EXEC address NFS05 0425 88DC v2D NFS05 0448 8907 9D 05 0F STAAX TXBUF NFS05 0425 88DC v2D NFS05 0449 890A 88 DEY NFS05 0425 88DC v2D NFS05 0450 890B CA DEX NFS05 0425 88DC v2D NFS05 0451 890C D0 F7 BNE CHALP2 NFS05 0425 88DC v2D NFS05 0452 890E A2 0A LDXIM &0A NFS05 0425 88DC v2D NFS05 0453 8910 20 84 8D CHASK2 JSR COPYCX ;filename after details NFS05 0425 88DC v2D NFS05 0454 8913 A0 13 LDYIM FCSET NFS05 0425 88DC v2D NFS05 0455 8915 D0 05 BNE CHAFSX NFS05 0425 88DC v2D NFS05 0456 8917 NFS05 0425 88DC v2D NFS05 0457 8917 20 82 8D CHA6 JSR COPYCL ;copy the filename NFS05 0425 88DC v2D NFS05 0458 891A A0 14 LDYIM FCDEL ;dec 20 NFS05 0425 88DC v2D NFS05 0459 891C 2C B3 83 CHAFSX BIT ALL1S NFS05 0425 88DC v2D NFS05 0460 891F 20 C8 83 JSR DOFSER ;perform the delete NFS05 0425 88DC v2D NFS05 0461 8922 B0 42 CHA6XX BCS CHA5FY ;exit if error found NFS05 0425 88DC v2D NFS05 0462 8924 90 71 BCC CHA5FX NFS05 0462 8924 v0E NFS05 0463 8926 ;[NB. no copy back of ex-cat info] NFS05 0462 8924 v0E NFS05 0464 8926 NFS05 0462 8924 v0E NFS05 0465 8926 20 CF 85 CHA4 JSR CHAPRT NFS05 0462 8924 v0E NFS05 0466 8929 8D 06 0F STA TXBUF +&01 NFS05 0462 8924 v0E NFS05 0467 892C A2 02 LDXIM TWO NFS05 0462 8924 v0E NFS05 0468 892E D0 E0 BNE CHASK2 NFS05 0462 8924 v0E NFS05 0469 8930 NFS05 0462 8924 v0E NFS05 0470 8930 A2 01 CHA5 LDXIM ONE ;offset in the buffer NFS05 0462 8924 v0E NFS05 0471 8932 20 84 8D JSR COPYCX ;copy filename NFS05 0462 8924 v0E NFS05 0472 8935 A0 12 LDYIM FCREAD ;function code to read args NFS05 0462 8924 v0E NFS05 0473 8937 20 C7 83 JSR DOFSOP ;get the info from FS NFS05 0462 8924 v0E NFS05 0474 893A NFS05 0462 8924 v0E NFS05 0475 893A AD 11 0F LDA RXBUF + &0C ;get the access byte NFS05 0462 8924 v0E NFS05 0476 893D 8E 11 0F STX RXBUF +&0C NFS05 0462 8924 v0E NFS05 0477 8940 8E 14 0F STX RXBUF +&0F NFS05 0462 8924 v0E NFS05 0478 8943 20 D9 85 JSR FSBBC ;convert the protection format NFS05 0462 8924 v0E NFS05 0479 8946 NFS05 0462 8924 v0E NFS05 0480 8946 ; LDX RXBUF ;get the existence flag NFS05 0462 8924 v0E NFS05 0481 8946 ; BEQ CHA5FL ;.. object not found NFS05 0462 8924 v0E NFS05 0482 8946 NFS05 0462 8924 v0E NFS05 0483 8946 A0 0E LDYIM &0E NFS05 0462 8924 v0E NFS05 0484 8948 91 BB STAIY TEMPX ;set access byte NFS05 0462 8924 v0E NFS05 0485 894A 88 DEY NFS05 0462 8924 v0E NFS05 0486 894B A2 0C LDXIM &0C ;counter thru RXBUF NFS05 0462 8924 v0E NFS05 0487 894D BD 05 0F COPYFS LDAAX RXBUF ;copy from FS buffer to CB NFS05 0462 8924 v0E NFS05 0488 8950 91 BB STAIY TEMPX ;count on Y NFS05 0462 8924 v0E NFS05 0489 8952 88 DEY NFS05 0462 8924 v0E NFS05 0490 8953 CA DEX NFS05 0462 8924 v0E NFS05 0491 8954 D0 F7 BNE COPYFS NFS05 NFS05 NFS05 NFS05 Acorn macro assembler Page 22 NFS05 OSFILE - args 1->6 NFS05 NFS05 0462 8924 v0E NFS05 0492 8956 NFS05 0462 8924 v0E NFS05 0493 8956 E8 INX ;X=1 NFS05 0462 8924 v0E NFS05 0494 8957 E8 INX NFS05 0462 8924 v0E NFS05 0495 8958 A0 11 LDYIM &11 NFS05 0462 8924 v0E NFS05 0496 895A BD 12 0F CHA5LP LDAAX RXBUF +&0D ;copy the date NFS05 0462 8924 v0E NFS05 0497 895D 91 BB STAIY TEMPX ;write the attributes to the CB NFS05 0462 8924 v0E NFS05 0498 895F 88 DEY NFS05 0462 8924 v0E NFS05 0499 8960 CA DEX NFS05 0462 8924 v0E NFS05 0500 8961 10 F7 BPL CHA5LP NFS05 0462 8924 v0E NFS05 0501 8963 AD 05 0F LDA RXBUF ;get existence flag NFS05 0462 8924 v0E NFS05 0502 8966 ;CHA5FL NFS05 0462 8924 v0E NFS05 0503 8966 ; TXA NFS05 0462 8924 v0E NFS05 0504 8966 10 4D CHA5FY BPL GETXY ;restore X,Y and return NFS05 0462 8924 v0E NFS05 0505 8968 NFS05 0462 8924 v0E NFS05 0506 8968 TTL OSARGS NFS05 0462 8924 v0E NFS05 0507 8968 NFS05 0462 8924 v0E NFS05 0508 8968 ; *************************** NFS05 0462 8924 v0E NFS05 0509 8968 ; ***** OSARGS ***** NFS05 0462 8924 v0E NFS05 0510 8968 ; *************************** NFS05 0462 8924 v0E NFS05 0511 8968 NFS05 0462 8924 v0E NFS05 0512 8968 NFS05 0462 8924 v0E NFS05 0513 8968 ; A routine for reading/writing a file's attributes NFS05 0462 8924 v0E NFS05 0514 8968 ; when only the handle is known. X points to four NFS05 0462 8924 v0E NFS05 0515 8968 ; zero-page locations, Y = handle, A = op. type. NFS05 0462 8924 v0E NFS05 0516 8968 ; The data is read/copied via the zero page bytes. NFS05 0462 8924 v0E NFS05 0517 8968 NFS05 0462 8924 v0E NFS05 0518 8968 OSARGS ;general entry point NFS05 0462 8924 v0E NFS05 0519 8968 20 4D 86 JSR REGPUT ;save registers NFS05 0462 8924 v0E NFS05 0520 896B C9 03 CMPIM &03 NFS05 0462 8924 v0E NFS05 0521 896D B0 44 BCS REGGET ;exit if 'ensure' attempted NFS05 0462 8924 v0E NFS05 0522 896F C0 00 CPYIM ZERO NFS05 0462 8924 v0E NFS05 0523 8971 F0 47 BEQ OSARG0 ;Y=0, more calls for OSARGS NFS05 0462 8924 v0E NFS05 0524 8973 20 9B 86 JSR Y2FS ;convert handle NFS05 0462 8924 v0E NFS05 0525 8976 8C 05 0F STY TXBUF ;store handle NFS05 0462 8924 v0E NFS05 0526 8979 4A LSRA ;get operation NFS05 0462 8924 v0E NFS05 0527 897A 8D 06 0F STA TXBUF +&01 ;set the argument NFS05 0462 8924 v0E NFS05 0528 897D NFS05 0462 8924 v0E NFS05 0529 897D ;A=0 : read pointer NFS05 0462 8924 v0E NFS05 0530 897D ;A=1 : write pointer NFS05 0462 8924 v0E NFS05 0531 897D ;A=2 : read extent NFS05 0462 8924 v0E NFS05 0532 897D NFS05 0462 8924 v0E NFS05 0533 897D B0 1A BCS SETARG ;write the pointer NFS05 0462 8924 v0E NFS05 0534 897F NFS05 0462 8924 v0E NFS05 0535 897F A0 0C LDYIM FCGARG NFS05 0462 8924 v0E NFS05 0536 8981 A2 02 LDXIM TWO NFS05 0462 8924 v0E NFS05 0537 8983 20 C7 83 JSR DOFSOP ;do the reading NFS05 0462 8924 v0E NFS05 0538 8986 85 BD STA TEMPA ;indicate operation performed NFS05 0462 8924 v0E NFS05 0539 8988 A6 BB LDX TEMPX ;restore X value NFS05 0462 8924 v0E NFS05 0540 898A A0 02 LDYIM TWO ;Y=2 NFS05 0462 8924 v0E NFS05 0541 898C 95 03 STAAX THREE NFS05 0462 8924 v0E NFS05 0542 898E B9 05 0F SETLP1 LDAAY RXBUF ;copy data to zero page NFS05 0462 8924 v0E NFS05 0543 8991 95 02 STAAX TWO ;indexed by X NFS05 0462 8924 v0E NFS05 0544 8993 CA DEX NFS05 0462 8924 v0E NFS05 0545 8994 88 DEY NFS05 0462 8924 v0E NFS05 0546 8995 10 F7 BPL SETLP1 NFS05 0462 8924 v0E NFS05 0547 8997 90 1A CHA5FX BCC REGGET ;tidy up and return NFS05 0504 8966 v32 NFS05 0548 8999 NFS05 0504 8966 v32 NFS05 0549 8999 SETARG ;data in 0-page off X NFS05 0504 8966 v32 NFS05 0550 8999 98 TYA NFS05 0504 8966 v32 NFS05 0551 899A 48 PHA ;save handle NFS05 0504 8966 v32 NFS05 0552 899B A0 03 LDYIM THREE NFS05 0504 8966 v32 NFS05 0553 899D B5 03 SETLP2 LDAAX THREE NFS05 0504 8966 v32 NFS05 0554 899F 99 07 0F STAAY TXBUF +&02 NFS05 0504 8966 v32 NFS05 0555 89A2 CA DEX NFS05 0504 8966 v32 NFS05 0556 89A3 88 DEY NFS05 0504 8966 v32 NFS05 0557 89A4 10 F7 BPL SETLP2 ;copy three bytes NFS05 0504 8966 v32 NFS05 0558 89A6 A0 0D LDYIM FCSARG NFS05 0504 8966 v32 NFS05 0559 89A8 A2 05 LDXIM FIVE NFS05 0504 8966 v32 NFS05 0560 89AA 20 C7 83 JSR DOFSOP ;do the operation NFS05 0504 8966 v32 NFS05 0561 89AD 86 BD STX TEMPA ;return A=0 if operation performed NFS05 0504 8966 v32 NFS05 0562 89AF 68 PLA ;restore handle NFS05 0504 8966 v32 NFS05 0563 89B0 20 D0 86 JSR SETEOF ;and unset the hint NFS05 0504 8966 v32 NFS05 0564 89B3 REGGET ;recovery of regs from usual locations NFS05 0504 8966 v32 NFS05 0565 89B3 A5 BD LDA TEMPA NFS05 0663 8A2A ^07 NFS05 0566 89B5 A6 BB GETXY LDX TEMPX ;restore X,Y only NFS05 0663 8A2A ^07 NFS05 0567 89B7 A4 BC LDY TEMPY NFS05 0663 8A2A ^07 NFS05 0568 89B9 60 RTS NFS05 0663 8A2A ^07 NFS05 0569 89BA NFS05 0663 8A2A ^07 NFS05 0570 89BA OSARG0 ;come here when Y=0 NFS05 0663 8A2A ^07 NFS05 0571 89BA C9 02 CMPIM 2 NFS05 0663 8A2A ^07 NFS05 0572 89BC F0 07 BEQ OSARG3 NFS05 0663 8A2A ^07 NFS05 0573 89BE B0 14 BCS FINDEX NFS05 0663 8A2A ^07 NFS05 0574 89C0 A8 TAY ;A=0 or 1 NFS05 0663 8A2A ^07 NFS05 0575 89C1 D0 05 BNE OSARG1 ;return pointer to rest of command line NFS05 0663 8A2A ^07 NFS05 0576 89C3 A9 0A LDAIM 10 ;magic network number NFS05 0663 8A2A ^07 NFS05 0577 89C5 4A OSARG3 LSRA ;return A=a/2 here NFS05 0663 8A2A ^07 NFS05 0578 89C6 D0 ED BNE GETXY ;all done NFS05 0663 8A2A ^07 NFS05 0579 89C8 B9 0A 0E OSARG1 LDAAY JCMNDP NFS05 0663 8A2A ^07 NFS05 0580 89CB 91 BB STAIY TEMPX ;tricky, TEMPY=0 ! NFS05 0663 8A2A ^07 NFS05 0581 89CD 88 DEY NFS05 0663 8A2A ^07 NFS05 0582 89CE 10 F8 BPL OSARG1 ;copy the last command line residue NFS05 0663 8A2A ^07 NFS05 0583 89D0 94 02 STYZX &2 ;stuff top bytes with $FF ** 4/8/83 ** NFS05 0663 8A2A ^07 NFS05 0584 89D2 94 03 STYZX &3 NFS05 0663 8A2A ^07 NFS05 0585 89D4 A9 00 FINDEX LDAIM ZERO ;must return A=0 here NFS05 0663 8A2A ^07 NFS05 0586 89D6 10 DD OSEXIT BPL GETXY NFS05 0663 8A2A ^07 NFS05 0587 89D8 NFS05 0663 8A2A ^07 NFS05 0588 89D8 TTL OSFIND NFS05 0663 8A2A ^07 NFS05 0589 89D8 NFS05 0663 8A2A ^07 NFS05 0590 89D8 ; *********************** NFS05 0663 8A2A ^07 NFS05 0591 89D8 ; *************************** NFS05 0663 8A2A ^07 NFS05 0592 89D8 ; ****** OSFIND ***** NFS05 0663 8A2A ^07 NFS05 0593 89D8 ; *************************** NFS05 0663 8A2A ^07 NFS05 0594 89D8 ; *********************** NFS05 0663 8A2A ^07 NFS05 0595 89D8 NFS05 0663 8A2A ^07 NFS05 0596 89D8 NFS05 0663 8A2A ^07 NFS05 0597 89D8 ;OSFILE is the system call to open a file for read/ NFS05 0663 8A2A ^07 NFS05 0598 89D8 ;write/update. The operation is specified by A. NFS05 0663 8A2A ^07 NFS05 0599 89D8 ;A = 0 -> Close the file whose handle is given in Y. NFS05 0663 8A2A ^07 NFS05 0600 89D8 ;A <>0 -> Open file whose name is pointed at by X,Y. NFS05 0663 8A2A ^07 NFS05 0601 89D8 ;If A = &80 then writing and updating NFS05 0663 8A2A ^07 NFS05 0602 89D8 ;If A = &C0 then reading only NFS05 0663 8A2A ^07 NFS05 0603 89D8 NFS05 0663 8A2A ^07 NFS05 0604 89D8 NFS05 0663 8A2A ^07 NFS05 0605 89D8 ;The two flag bytes are set as follows : NFS05 0663 8A2A ^07 NFS05 0606 89D8 ;Flag 1 = 1 -> READ else WRITING/UPDATE NFS05 0663 8A2A ^07 NFS05 0607 89D8 ;Flag 2 = 1 -> EXISTS else WILL BE CREATED NFS05 0663 8A2A ^07 NFS05 0608 89D8 NFS05 0663 8A2A ^07 NFS05 0609 89D8 NFS05 0663 8A2A ^07 NFS05 0610 89D8 ;When a file is opened for reading then it must NFS05 0663 8A2A ^07 NFS05 0611 89D8 ;already exist, if opened for writing/update NFS05 0663 8A2A ^07 NFS05 0612 89D8 ;then it need NOT exist. NFS05 NFS05 NFS05 NFS05 Acorn macro assembler Page 23 NFS05 OSFIND NFS05 NFS05 0663 8A2A ^07 NFS05 0613 89D8 NFS05 0663 8A2A ^07 NFS05 0614 89D8 NFS05 0663 8A2A ^07 NFS05 0615 89D8 FINDOP NFS05 0663 8A2A ^07 NFS05 0616 89D8 20 49 86 JSR PUTREG NFS05 0663 8A2A ^07 NFS05 0617 89DB 38 SEC ;detect 0-handle exception NFS05 0663 8A2A ^07 NFS05 0618 89DC 20 9C 86 JSR Y2FSX ;convert Y NFS05 0663 8A2A ^07 NFS05 0619 89DF AA TAX ;check operation type NFS05 0663 8A2A ^07 NFS05 0620 89E0 F0 2E BEQ CLOSE ;A=0 so do close, handle in Y NFS05 0663 8A2A ^07 NFS05 0621 89E2 NFS05 0663 8A2A ^07 NFS05 0622 89E2 29 3F ANDIM &3F ;check top bits only NFS05 0663 8A2A ^07 NFS05 0623 89E4 D0 EE BNE FINDEX ;exit if invalid parameter NFS05 0663 8A2A ^07 NFS05 0624 89E6 8A TXA ;restore A NFS05 0663 8A2A ^07 NFS05 0625 89E7 NFS05 0663 8A2A ^07 NFS05 0626 89E7 49 80 EORIM &80 ;flip top bit only NFS05 0663 8A2A ^07 NFS05 0627 89E9 0A ASLA NFS05 0663 8A2A ^07 NFS05 0628 89EA 8D 05 0F STA RXBUF NFS05 0663 8A2A ^07 NFS05 0629 89ED 2A ROLA NFS05 0663 8A2A ^07 NFS05 0630 89EE 8D 06 0F STA RXBUF +&01 NFS05 0663 8A2A ^07 NFS05 0631 89F1 20 E8 86 JSR QUOTED ;strip quotes NFS05 0663 8A2A ^07 NFS05 0632 89F4 A2 02 LDXIM TWO NFS05 0663 8A2A ^07 NFS05 0633 89F6 20 84 8D JSR CATLP0 ;copy the filename NFS05 0663 8A2A ^07 NFS05 0634 89F9 NFS05 0663 8A2A ^07 NFS05 0635 89F9 A0 06 LDYIM FCFIND ;= 6 NFS05 0663 8A2A ^07 NFS05 0636 89FB 2C B3 83 BIT ALL1S ;set V NFS05 0663 8A2A ^07 NFS05 0637 89FE 20 C8 83 JSR DOFSER NFS05 0663 8A2A ^07 NFS05 0638 8A01 B0 B2 BCS GETXY ;skip if error found NFS05 0663 8A2A ^07 NFS05 0639 8A03 AD 05 0F OPEN1 LDA RXBUF ;get the handle returned NFS05 0663 8A2A ^07 NFS05 0640 8A06 AA TAX NFS05 0663 8A2A ^07 NFS05 0641 8A07 20 D0 86 JSR SETEOF ;can't be EOF yet NFS05 0663 8A2A ^07 NFS05 0642 8A0A 8A TXA ;restore handle NFS05 0663 8A2A ^07 NFS05 0643 8A0B [ &FF=0 NFS05 0663 8A2A ^07 NFS05 0647 8A0B ] NFS05 0663 8A2A ^07 NFS05 0648 8A0B 20 B7 86 JSR FS2A ;convert the handle to internal form NFS05 0663 8A2A ^07 NFS05 0649 8A0E D0 A5 OPENEX BNE GETXY ;restore X,Y and return NFS05 0663 8A2A ^07 NFS05 0650 8A10 NFS05 0663 8A2A ^07 NFS05 0651 8A10 CLOSE NFS05 0663 8A2A ^07 NFS05 0652 8A10 98 TYA ;detect CLOSE#0 NFS05 0663 8A2A ^07 NFS05 0653 8A11 D0 07 BNE CLOSE1 NFS05 0663 8A2A ^07 NFS05 0654 8A13 A9 77 LDAIM &77 NFS05 0663 8A2A ^07 NFS05 0655 8A15 20 F4 FF JSR OSBYTE NFS05 0663 8A2A ^07 NFS05 0656 8A18 A0 00 LDYIM ZERO NFS05 0663 8A2A ^07 NFS05 0657 8A1A 8C 05 0F CLOSE1 STY RXBUF NFS05 0663 8A2A ^07 NFS05 0658 8A1D A2 01 LDXIM ONE ;do not change this value NFS05 0663 8A2A ^07 NFS05 0659 8A1F A0 07 LDYIM FCSHUT NFS05 0663 8A2A ^07 NFS05 0660 8A21 20 C7 83 JSR DOFSOP NFS05 0663 8A2A ^07 NFS05 0661 8A24 AD 05 0F LDA RXBUF NFS05 0663 8A2A ^07 NFS05 0662 8A27 20 D0 86 JSR SETEOF ;so that next EOF goes to FS NFS05 0663 8A2A ^07 NFS05 0663 8A2A 90 87 CLOSEX BCC REGGET NFS05 0683 8A50 ^58 NFS05 0664 8A2C NFS05 0683 8A50 ^58 NFS05 0665 8A2C TTL OSFSCM - *OPT command NFS05 0683 8A50 ^58 NFS05 0666 8A2C NFS05 0683 8A50 ^58 NFS05 0667 8A2C F0 0B OPTION BEQ OPT0 ;** 22/8/83 ** NFS05 0683 8A50 ^58 NFS05 0668 8A2E E0 04 CPXIM FOUR NFS05 0683 8A50 ^58 NFS05 0669 8A30 D0 04 BNE OPTERR ;first parm must be 4 NFS05 0683 8A50 ^58 NFS05 0670 8A32 C0 04 CPYIM FOUR NFS05 0683 8A50 ^58 NFS05 0671 8A34 90 0D BCC OPTL1 ;second must be less than 4 NFS05 0683 8A50 ^58 NFS05 0672 8A36 CA OPTERR DEX ;look for message switch NFS05 0683 8A50 ^58 NFS05 0673 8A37 D0 05 BNE OPTER1 ;nb C=0 here NFS05 0683 8A50 ^58 NFS05 0674 8A39 8C 06 0E OPT0 STY MESS ;save flag NFS05 0683 8A50 ^58 NFS05 0675 8A3C 90 12 BCC OPT2 ;and exit NFS05 0683 8A50 ^58 NFS05 0676 8A3E A9 07 OPTER1 LDAIM &07 NFS05 0683 8A50 ^58 NFS05 0677 8A40 4C 12 85 JMP NLISNE ;error string NFS05 0683 8A50 ^58 NFS05 0678 8A43 8C 05 0F OPTL1 STY TXBUF NFS05 0683 8A50 ^58 NFS05 0679 8A46 A0 16 LDYIM FCOPT NFS05 0683 8A50 ^58 NFS05 0680 8A48 20 C7 83 JSR DOFSOP ;set this in the fileserver NFS05 0683 8A50 ^58 NFS05 0681 8A4B A4 BC LDY TEMPY NFS05 0683 8A50 ^58 NFS05 0682 8A4D 8C 05 0E STY OPT ;update the local copy NFS05 0683 8A50 ^58 NFS05 0683 8A50 90 D8 OPT2 BCC CLOSEX ;clean up -- NFS05 0684 8A52 -- NFS05 0685 8A52 TTL OSGBPB -- NFS05 0686 8A52 -- NFS05 0687 8A52 ; **************************** -- NFS05 0688 8A52 ; **** MULTIPLE BYTE **** -- NFS05 0689 8A52 ; *** RANDOM ACCESS *** -- NFS05 0690 8A52 ; ************************ -- NFS05 0691 8A52 -- NFS05 0692 8A52 ;That is to say, GETBYTES and PUTBYTES -- NFS05 0693 8A52 -- NFS05 0694 8A52 ;------------------ -- NFS05 0695 8A52 ;: Handle : (1) -- NFS05 0696 8A52 ;----------------- -- NFS05 0697 8A52 ;: Pointer to data : (4) -- NFS05 0698 8A52 ;----------------- -- NFS05 0699 8A52 ;: No. to transfer : (4) -- NFS05 0700 8A52 ;----------------- -- NFS05 0701 8A52 ;: Offset in file : (4) -- NFS05 0702 8A52 ;----------------- -- NFS05 0703 8A52 -- NFS05 0704 8A52 ;The control block is passed via X,Y as usual plus -- NFS05 0705 8A52 ;A indicating which operation is to be performed. -- NFS05 0706 8A52 ;A = 1 -> PB using supplied pointer -- NFS05 0707 8A52 ;A = 2 -> PB using file pointer -- NFS05 0708 8A52 ;A = 3 -> GB using supplied pointer -- NFS05 0709 8A52 ;A = 4 -> GB using file pointer -- NFS05 0710 8A52 -- NFS05 0711 8A52 ;C = 0 -> all ok, transfer complete -- NFS05 0712 8A52 ;C = 1 -> end-of-file encountered -- NFS05 0713 8A52 -- NFS05 0714 8A52 ;Due to spec. changes there now exist four more -- NFS05 0715 8A52 ;entry points to this routine. These are untidy -- NFS05 0716 8A52 ;but useful in theory. Unfortunately, they involve -- NFS05 0717 8A52 ;passing data across the TUBE, the only place in -- NFS05 0718 8A52 ;the entire document which needs this -- NFS05 0719 8A52 -- NFS05 0720 8A52 ;The new entry points are: -- NFS05 0721 8A52 ;A = 5 -> Read Disc title, cycle number, option -- NFS05 0722 8A52 ;A = 6 -> Read Current Directory -- NFS05 0723 8A52 ;A = 7 -> Read Current Library -- NFS05 0724 8A52 ;A = 8 -> Read filenames (specified by CB) -- NFS05 0725 8A52 -- NFS05 0726 8A52 ;The data format is as follows: -- NFS05 0727 8A52 ; -- NFS05 0728 8A52 ;A Null object name is denoted by a namelength of 0 chars. -- NFS05 0729 8A52 -- NFS05 0730 8A52 A0 09 GBPBXY LDYIM &09 -- NFS05 0731 8A54 20 59 8A JSR GBPBXZ -- NFS05 0732 8A57 A0 01 GBPBXU LDYIM &01 -- NFS05 0733 8A59 18 GBPBXZ CLC -- NFS05 0734 8A5A A2 FC GBPBXX LDXIM &FC ;count up to zero -- NFS05 0735 8A5C B1 BB GBPBXV LDAIY TEMPX NFS05 0744 8A6F ^6B NFS05 0736 8A5E 24 B2 BIT W1 ;test flag NFS05 NFS05 NFS05 NFS05 Acorn macro assembler Page 24 NFS05 OSGBPB NFS05 NFS05 0744 8A6F ^6B NFS05 0737 8A60 30 06 BMI GBPSUB ;if plus then sub NFS05 0744 8A6F ^6B NFS05 0738 8A62 7D 0A 0E ADCAX RXBUF - &FB NFS05 0744 8A6F ^6B NFS05 0739 8A65 4C 6B 8A JMP GBPBX NFS05 0744 8A6F ^6B NFS05 0740 8A68 FD 0A 0E GBPSUB SBCAX RXBUF -&FB NFS05 0744 8A6F ^6B NFS05 0741 8A6B 91 BB GBPBX STAIY TEMPX ;update the CB NFS05 0744 8A6F ^6B NFS05 0742 8A6D C8 INY NFS05 0744 8A6F ^6B NFS05 0743 8A6E E8 INX NFS05 0744 8A6F ^6B NFS05 0744 8A6F D0 EB BNE GBPBXV ;count four loops -- NFS05 0745 8A71 60 RTS -- NFS05 0746 8A72 -- NFS05 0747 8A72 20 4D 86 OSBGPB JSR REGPUT ;save registers -- NFS05 0748 8A75 AA TAX -- NFS05 0749 8A76 F0 05 BEQ GBPBX0 ;A=0 so exit NFS05 0749 8A76 v7A NFS05 0750 8A78 CA DEX NFS05 0749 8A76 v7A NFS05 0751 8A79 E0 08 CPXIM &08 ;A>8 in call ? NFS05 0749 8A76 v7A NFS05 0752 8A7B 90 03 BCC GBPBX1 ;No ? NFS05 0749 8A76 v7A NFS05 0753 8A7D 4C B3 89 GBPBX0 JMP REGGET ;else exit NFS05 0752 8A7B v7C NFS05 0754 8A80 8A GBPBX1 TXA ;set up codes 0,3 -- NFS05 0755 8A81 A0 00 LDYIM ZERO -- NFS05 0756 8A83 48 PHA -- NFS05 0757 8A84 C9 04 CMPIM FOUR ;look for the new codes -- NFS05 0758 8A86 90 03 BCC GBPBE1 NFS05 0758 8A86 v7C NFS05 0759 8A88 4C 31 8B JMP OSINFO NFS05 0758 8A86 v7C NFS05 0760 8A8B B1 BB GBPBE1 LDAIY TEMPX ;get the handle for file -- NFS05 0761 8A8D 20 9A 86 JSR Y2FSA ;convert the format -- NFS05 0762 8A90 8C 05 0F STY TXBUF -- NFS05 0763 8A93 A0 0B LDYIM &0B -- NFS05 0764 8A95 A2 06 LDXIM &06 -- NFS05 0765 8A97 B1 BB GBPBF1 LDAIY TEMPX NFS05 0772 8AA3 ^72 NFS05 0766 8A99 9D 06 0F STAAX RXBUF +&01 NFS05 0772 8AA3 ^72 NFS05 0767 8A9C 88 DEY NFS05 0772 8AA3 ^72 NFS05 0768 8A9D C0 08 CPYIM &08 NFS05 0772 8AA3 ^72 NFS05 0769 8A9F D0 01 BNE GBPBF2 NFS05 0772 8AA3 ^72 NFS05 0770 8AA1 88 DEY ;skip top byte NFS05 0772 8AA3 ^72 NFS05 0771 8AA2 CA GBPBF2 DEX NFS05 0772 8AA3 ^72 NFS05 0772 8AA3 D0 F2 BNE GBPBF1 ;copy six bytes only -- NFS05 0773 8AA5 68 PLA ;get operation flag -- NFS05 0774 8AA6 4A LSRA -- NFS05 0775 8AA7 48 PHA -- NFS05 0776 8AA8 90 01 BCC GBPBL1 ;skip if A=2 or 4 NFS05 0776 8AA8 v7E NFS05 0777 8AAA E8 INX ;X=0 or 1 NFS05 0776 8AA8 v7E NFS05 0778 8AAB 8E 06 0F GBPBL1 STX TXBUF +&01 ;save the flag byte -- NFS05 0779 8AAE -- NFS05 0780 8AAE ;zero = use passed pointer -- NFS05 0781 8AAE ;non-zero = use file pointer -- NFS05 0782 8AAE -- NFS05 0783 8AAE A0 0B LDYIM FCPBYS -- NFS05 0784 8AB0 A2 91 LDXIM PSAACK ;ack port for save -- NFS05 0785 8AB2 68 PLA ;restore code >> 1 -- NFS05 0786 8AB3 48 PHA ;save it again -- NFS05 0787 8AB4 F0 03 BEQ GBPBL2 ;so code must be GB NFS05 0787 8AB4 v7C NFS05 0788 8AB6 A2 92 LDXIM PLDATA NFS05 0787 8AB4 v7C NFS05 0789 8AB8 88 DEY ;and fn getbytes = fn putbytes + 1 NFS05 0787 8AB4 v7C NFS05 0790 8AB9 8E 02 0F GBPBL2 STX HDRURD ;hand over the requisite port -- NFS05 0791 8ABC 86 B8 STX WORK +&08 ;save ack port for pickup by SAVLP -- NFS05 0792 8ABE A2 08 LDXIM EIGHT -- NFS05 0793 8AC0 AD 05 0F LDA TXBUF ;get the handle -- NFS05 0794 8AC3 20 B9 83 JSR DOFSBX ;do bytestream, A=handle,Y=fn.code etc. -- NFS05 0795 8AC6 A5 B3 LDA W2 -- NFS05 0796 8AC8 8D 08 0E STA SEQNOS -- NFS05 0797 8ACB -- NFS05 0798 8ACB ; **** DEAL WITH THE TRANSFER **** -- NFS05 0799 8ACB -- NFS05 0800 8ACB A2 04 LDXIM FOUR -- NFS05 0801 8ACD ; LDYIM ONE -- NFS05 0802 8ACD ;C=0 on exit from DOFSBX -- NFS05 0803 8ACD B1 BB GBPBL3 LDAIY TEMPX NFS05 0811 8AE1 ^6A NFS05 0804 8ACF 99 AF 00 STAAY WORK -&01 ;set pointers for LODIN,SAVIN NFS05 0811 8AE1 ^6A NFS05 0805 8AD2 99 C7 00 STAAY RXCB + HPTR-&01 NFS05 0811 8AE1 ^6A NFS05 0806 8AD5 20 3C 88 JSR UP4 NFS05 0811 8AE1 ^6A NFS05 0807 8AD8 71 BB ADCIY TEMPX NFS05 0811 8AE1 ^6A NFS05 0808 8ADA 99 AF 00 STAAY WORK -&01 NFS05 0811 8AE1 ^6A NFS05 0809 8ADD 20 4F 88 JSR DOWN3 NFS05 0811 8AE1 ^6A NFS05 0810 8AE0 CA DEX NFS05 0811 8AE1 ^6A NFS05 0811 8AE1 D0 EA BNE GBPBL3 -- NFS05 0812 8AE3 E8 INX -- NFS05 0813 8AE4 BD 03 0F GBPBF3 LDAAX RXBUF -&02 NFS05 0816 8AEB ^77 NFS05 0814 8AE7 9D 06 0F STAAX RXBUF +&01 ;move buffer size NFS05 0816 8AEB ^77 NFS05 0815 8AEA CA DEX NFS05 0816 8AEB ^77 NFS05 0816 8AEB 10 F7 BPL GBPBF3 -- NFS05 0817 8AED -- NFS05 0818 8AED 68 PLA ;restore flag -- NFS05 0819 8AEE D0 08 BNE GBPBL4 ;**** NOTE CONDITION **** NFS05 0819 8AEE v77 NFS05 0820 8AF0 NFS05 0819 8AEE v77 NFS05 0821 8AF0 AD 02 0F LDA HDRURD ;get data port NFS05 0819 8AEE v77 NFS05 0822 8AF3 20 53 88 JSR SAVLP ;PUTBYTES so save the data NFS05 0819 8AEE v77 NFS05 0823 8AF6 B0 03 BCS GBPBL5 NFS05 0819 8AEE v77 NFS05 0824 8AF8 NFS05 0819 8AEE v77 NFS05 0825 8AF8 20 65 87 GBPBL4 JSR LODLP3 ;else load the data NFS05 0823 8AF6 v7C NFS05 0826 8AFB GBPBL5 NFS05 0823 8AF6 v7C NFS05 0827 8AFB ; **** TIDY UP **** NFS05 0823 8AF6 v7C NFS05 0828 8AFB 20 F3 83 JSR DOFSL8 -- NFS05 0829 8AFE A1 BB LDAIX TEMPX ;get the handle -- NFS05 0830 8B00 2C 05 0F BIT RXBUF ;bit7=1 -> EOF# -- NFS05 0831 8B03 30 03 BMI GBPBE NFS05 0831 8B03 v7C NFS05 0832 8B05 20 D5 86 JSR CLREOF ;clear the hint NFS05 0831 8B03 v7C NFS05 0833 8B08 20 D0 86 GBPBE JSR SETEOF ;fall thru is OK here -- NFS05 0834 8B0B 86 B2 STX W1 ;flag to indicate subtraction -- NFS05 0835 8B0D 20 52 8A JSR GBPBXY ;general add/sub routine -- NFS05 0836 8B10 C6 B2 DEC W1 ;flag to indicate addition -- NFS05 0837 8B12 38 SEC -- NFS05 0838 8B13 20 5A 8A JSR GBPBXX ;perform the operation -- NFS05 0839 8B16 -- NFS05 0840 8B16 ;all done now -- NFS05 0841 8B16 0E 05 0F ASL RXBUF ;get the flag byte for operation -- NFS05 0842 8B19 ; ASLA ;shift bit 7 into carry -- NFS05 0843 8B19 4C D4 89 JMP FINDEX -- NFS05 0844 8B1C -- NFS05 0845 8B1C LNK NFS06 -- NFS06 0001 8B1C -- NFS06 0002 8B1C ; NFS06 -- NFS06 0003 8B1C OPT PATCH NFS06 NFS06 NFS06 NFS06 Acorn macro assembler Page 25 NFS06 OSGBPB NFS06 -- NFS06 0004 8B1C -- NFS06 0005 8B1C ; This code is an add-on to allow the full MOS spec -- NFS06 0006 8B1C ; to be reached. The messy interface tacked onto -- NFS06 0007 8B1C ; OSBGPB is herein dealt with. -- NFS06 0008 8B1C -- NFS06 0009 8B1C INFO5 ;return disc type info -- NFS06 0010 8B1C A0 15 LDYIM FCUSER NFS06 0038 8B4C ^4E NFS06 0011 8B1E 20 C7 83 JSR DOFSOP NFS06 0038 8B4C ^4E NFS06 0012 8B21 AD 05 0E LDA OPT NFS06 0038 8B4C ^4E NFS06 0013 8B24 8D 16 0F STA RXBUF + &11 ;position 18 in the buffer NFS06 0038 8B4C ^4E NFS06 0014 8B27 86 B0 STX WORK ;start position in the buffer NFS06 0038 8B4C ^4E NFS06 0015 8B29 86 B1 STX WORK +&01 NFS06 0038 8B4C ^4E NFS06 0016 8B2B A9 12 LDAIM &12 NFS06 0038 8B4C ^4E NFS06 0017 8B2D 85 B2 STA WORK +&02 ;counter for data NFS06 0038 8B4C ^4E NFS06 0018 8B2F D0 4E INFO5X BNE INFOT1 NFS06 0018 8B2F v31 NFS06 0019 8B31 NFS06 0018 8B2F v31 NFS06 0020 8B31 A0 04 OSINFO LDYIM FOUR ;check TUBE addresses NFS06 0018 8B2F v31 NFS06 0021 8B33 AD 67 0D LDA TBFLAG NFS06 0018 8B2F v31 NFS06 0022 8B36 F0 07 BEQ INFOX NFS06 0018 8B2F v31 NFS06 0023 8B38 D1 BB CMPIY TEMPX NFS06 0018 8B2F v31 NFS06 0024 8B3A D0 03 BNE INFOX NFS06 0018 8B2F v31 NFS06 0025 8B3C 88 DEY NFS06 0018 8B2F v31 NFS06 0026 8B3D F1 BB SBCIY TEMPX NFS06 0018 8B2F v31 NFS06 0027 8B3F ;TBFLAG=0 for no tube present NFS06 0018 8B2F v31 NFS06 0028 8B3F 85 A9 INFOX STA ROMA ;save this for later use NFS06 0018 8B2F v31 NFS06 0029 8B41 ;ROMA=0 for no tube, <> 0 for TUBE NFS06 0018 8B2F v31 NFS06 0030 8B41 NFS06 0018 8B2F v31 NFS06 0031 8B41 B1 BB INFO2 LDAIY TEMPX ;set up POINTR anyway NFS06 0018 8B2F v31 NFS06 0032 8B43 99 BD 00 STAAY POINTR -&01 NFS06 0018 8B2F v31 NFS06 0033 8B46 88 DEY NFS06 0018 8B2F v31 NFS06 0034 8B47 D0 F8 BNE INFO2 ;set up POINTR NFS06 0018 8B2F v31 NFS06 0035 8B49 NFS06 0018 8B2F v31 NFS06 0036 8B49 68 PLA NFS06 0018 8B2F v31 NFS06 0037 8B4A 29 03 ANDIM &03 ;low two bits only NFS06 0018 8B2F v31 NFS06 0038 8B4C F0 CE BEQ INFO5 ;A was #0100 NFS06 0018 8B2F v31 NFS06 0039 8B4E 4A LSRA NFS06 0018 8B2F v31 NFS06 0040 8B4F F0 02 BEQ INFO6 ;A was #0101 here NFS06 0018 8B2F v31 NFS06 0041 8B51 B0 6B BCS INFO8 ;A was #0111 here NFS06 0041 8B51 v14 NFS06 0042 8B53 ;A was #0110 here NFS06 0041 8B51 v14 NFS06 0043 8B53 A8 INFO6 TAY ;A=0 or A=1 NFS06 0041 8B51 v14 NFS06 0044 8B54 B9 03 0E LDAAY CSD NFS06 0041 8B51 v14 NFS06 0045 8B57 8D 03 0F INFOC STA HDRCSD NFS06 0041 8B51 v14 NFS06 0046 8B5A AD 04 0E LDA LIB NFS06 0041 8B51 v14 NFS06 0047 8B5D 8D 04 0F STA HDRLIB NFS06 0041 8B51 v14 NFS06 0048 8B60 AD 02 0E LDA URD NFS06 0041 8B51 v14 NFS06 0049 8B63 8D 02 0F STA HDRURD NFS06 0041 8B51 v14 NFS06 0050 8B66 A2 12 LDXIM FCREAD ;must set function code as well NFS06 0041 8B51 v14 NFS06 0051 8B68 8E 01 0F STX HDRFN ;note carry should be clear NFS06 0041 8B51 v14 NFS06 0052 8B6B A9 0D LDAIM CR NFS06 0041 8B51 v14 NFS06 0053 8B6D 8D 06 0F STA RXBUF +&01 ;send null filename NFS06 0041 8B51 v14 NFS06 0054 8B70 85 B2 STA WORK +&02 ;counter NFS06 0041 8B51 v14 NFS06 0055 8B72 4A LSRA ;#1101 => #0110 !! NFS06 0041 8B51 v14 NFS06 0056 8B73 8D 05 0F STA RXBUF ;arg to examine function NFS06 0041 8B51 v14 NFS06 0057 8B76 18 CLC NFS06 0041 8B51 v14 NFS06 0058 8B77 NFS06 0041 8B51 v14 NFS06 0059 8B77 20 DD 83 JSR DOFS0 ;entry point which does not touch handles NFS06 0041 8B51 v14 NFS06 0060 8B7A NFS06 0041 8B51 v14 NFS06 0061 8B7A 86 B1 STX WORK +&01 NFS06 0041 8B51 v14 NFS06 0062 8B7C E8 INX NFS06 0041 8B51 v14 NFS06 0063 8B7D 86 B0 STX WORK NFS06 0041 8B51 v14 NFS06 0064 8B7F A5 A9 INFOT1 LDA ROMA ;test data area NFS06 0041 8B51 v14 NFS06 0065 8B81 ;over the TUBE here NFS06 0041 8B51 v14 NFS06 0066 8B81 D0 11 BNE TBCOPY NFS06 0041 8B51 v14 NFS06 0067 8B83 NFS06 0041 8B51 v14 NFS06 0068 8B83 A6 B0 LDX WORK NFS06 0041 8B51 v14 NFS06 0069 8B85 A4 B1 LDY WORK +&01 NFS06 0041 8B51 v14 NFS06 0070 8B87 BD 05 0F INFOH1 LDAAX RXBUF NFS06 0041 8B51 v14 NFS06 0071 8B8A 91 BE STAIY POINTR NFS06 0041 8B51 v14 NFS06 0072 8B8C E8 INX NFS06 0041 8B51 v14 NFS06 0073 8B8D C8 INY NFS06 0041 8B51 v14 NFS06 0074 8B8E C6 B2 DEC WORK +&02 NFS06 0041 8B51 v14 NFS06 0075 8B90 D0 F5 BNE INFOH1 NFS06 0041 8B51 v14 NFS06 0076 8B92 F0 27 BEQ TBEXIT ;copy data to the HOST NFS06 0041 8B51 v14 NFS06 0077 8B94 NFS06 0041 8B51 v14 NFS06 0078 8B94 TBCOPY NFS06 0041 8B51 v14 NFS06 0079 8B94 20 13 8C JSR TCLAIM ;claim the TUBE NFS06 0041 8B51 v14 NFS06 0080 8B97 A9 01 LDAIM ONE NFS06 0041 8B51 v14 NFS06 0081 8B99 A6 BB LDX TEMPX NFS06 0041 8B51 v14 NFS06 0082 8B9B A4 BC LDY TEMPY NFS06 0041 8B51 v14 NFS06 0083 8B9D E8 INX NFS06 0041 8B51 v14 NFS06 0084 8B9E D0 01 BNE TBL1 NFS06 0041 8B51 v14 NFS06 0085 8BA0 C8 INY NFS06 0041 8B51 v14 NFS06 0086 8BA1 20 06 04 TBL1 JSR TBINIT ;&0406 NFS06 0041 8B51 v14 NFS06 0087 8BA4 A6 B0 LDX WORK NFS06 0041 8B51 v14 NFS06 0088 8BA6 BD 05 0F TBCOP1 LDAAX RXBUF NFS06 0041 8B51 v14 NFS06 0089 8BA9 8D E5 FE STA REG3 ;&FEE5 NFS06 0041 8B51 v14 NFS06 0090 8BAC E8 INX NFS06 0041 8B51 v14 NFS06 0091 8BAD NFS06 0041 8B51 v14 NFS06 0092 8BAD A0 06 LDYIM 6 NFS06 0041 8B51 v14 NFS06 0093 8BAF 88 DELAY DEY ;** lousy 16032 ** NFS06 0041 8B51 v14 NFS06 0094 8BB0 D0 FD BNE DELAY NFS06 0041 8B51 v14 NFS06 0095 8BB2 NFS06 0041 8B51 v14 NFS06 0096 8BB2 C6 B2 DEC WORK +&02 NFS06 0041 8B51 v14 NFS06 0097 8BB4 D0 F0 BNE TBCOP1 NFS06 0041 8B51 v14 NFS06 0098 8BB6 A9 83 LDAIM TCSEMA NFS06 0041 8B51 v14 NFS06 0099 8BB8 20 06 04 JSR TBINIT ;release the TUBE NFS06 0041 8B51 v14 NFS06 0100 8BBB 4C D4 89 TBEXIT JMP FINDEX ;copy data over the TUBE NFS06 0041 8B51 v14 NFS06 0101 8BBE NFS06 0041 8B51 v14 NFS06 0102 8BBE A0 09 INFO8 LDYIM &09 NFS06 0147 8C11 ^28 NFS06 0103 8BC0 B1 BB LDAIY TEMPX NFS06 0147 8C11 ^28 NFS06 0104 8BC2 8D 06 0F STA TXBUF +&01 ;entry point to EXAMINE NFS06 0147 8C11 ^28 NFS06 0105 8BC5 A0 05 LDYIM &05 NFS06 0147 8C11 ^28 NFS06 0106 8BC7 B1 BB LDAIY TEMPX NFS06 0147 8C11 ^28 NFS06 0107 8BC9 8D 07 0F STA TXBUF +&02 ;entries to examine in call NFS06 0147 8C11 ^28 NFS06 0108 8BCC A2 0D LDXIM CR NFS06 0147 8C11 ^28 NFS06 0109 8BCE 8E 08 0F STX TXBUF +&03 NFS06 0147 8C11 ^28 NFS06 0110 8BD1 A0 02 LDYIM TWO NFS06 0147 8C11 ^28 NFS06 0111 8BD3 84 B0 STY WORK ;counter for TBCOPY NFS06 0147 8C11 ^28 NFS06 0112 8BD5 8C 05 0F STY TXBUF ;ARG to examine NFS06 0147 8C11 ^28 NFS06 0113 8BD8 NFS06 0147 8C11 ^28 NFS06 0114 8BD8 C8 INY ;X=13 here NFS06 0147 8C11 ^28 NFS06 0115 8BD9 20 C7 83 JSR DOFSOP ;C=0 on return NFS06 0147 8C11 ^28 NFS06 0116 8BDC NFS06 0147 8C11 ^28 NFS06 0117 8BDC 86 B1 STX WORK +&01 ;counter for Y in INFOT1 copy NFS06 0147 8C11 ^28 NFS06 0118 8BDE AD 06 0F LDA RXBUF +&01 ;update cycle number NFS06 0147 8C11 ^28 NFS06 0119 8BE1 81 BB STAIX TEMPX NFS06 0147 8C11 ^28 NFS06 0120 8BE3 NFS06 0147 8C11 ^28 NFS06 0121 8BE3 AD 05 0F LDA RXBUF NFS06 0147 8C11 ^28 NFS06 0122 8BE6 A0 09 LDYIM &09 NFS06 0147 8C11 ^28 NFS06 0123 8BE8 71 BB ADCIY TEMPX ;C=0 after DOFSOP NFS06 0147 8C11 ^28 NFS06 0124 8BEA 91 BB STAIY TEMPX ;update entry point NFS06 NFS06 NFS06 NFS06 Acorn macro assembler Page 26 NFS06 OSGBPB NFS06 NFS06 0147 8C11 ^28 NFS06 0125 8BEC NFS06 0147 8C11 ^28 NFS06 0126 8BEC A5 C8 LDA RXCB +&08 NFS06 0147 8C11 ^28 NFS06 0127 8BEE E9 07 SBCIM TXBUF +&02 ;calculate data received NFS06 0147 8C11 ^28 NFS06 0128 8BF0 8D 06 0F STA RXBUF +&01 ;ready for GBPB$$ routine NFS06 0147 8C11 ^28 NFS06 0129 8BF3 85 B2 STA WORK +&02 ;data counter for INFOT1 NFS06 0147 8C11 ^28 NFS06 0130 8BF5 F0 03 BEQ INSKIP ;********* zero data fudge ******** NFS06 0147 8C11 ^28 NFS06 0131 8BF7 20 7F 8B JSR INFOT1 ;perform data copying NFS06 0147 8C11 ^28 NFS06 0132 8BFA NFS06 0147 8C11 ^28 NFS06 0133 8BFA ; LDAIM $00 NFS06 0147 8C11 ^28 NFS06 0134 8BFA ; STA W1 NFS06 0147 8C11 ^28 NFS06 0135 8BFA A2 02 INSKIP LDXIM &02 NFS06 0147 8C11 ^28 NFS06 0136 8BFC 9D 07 0F INFO81 STAAX RXBUF +&02 NFS06 0147 8C11 ^28 NFS06 0137 8BFF CA DEX NFS06 0147 8C11 ^28 NFS06 0138 8C00 10 FA BPL INFO81 ;fudge for GBPB$$ NFS06 0147 8C11 ^28 NFS06 0139 8C02 NFS06 0147 8C11 ^28 NFS06 0140 8C02 20 57 8A JSR GBPBXU ;update CB[$01->$04] NFS06 0147 8C11 ^28 NFS06 0141 8C05 38 SEC NFS06 0147 8C11 ^28 NFS06 0142 8C06 C6 B2 DEC W1 ;alter flag for add/sub routine NFS06 0147 8C11 ^28 NFS06 0143 8C08 AD 05 0F LDA RXBUF NFS06 0147 8C11 ^28 NFS06 0144 8C0B 8D 06 0F STA RXBUF +&01 NFS06 0147 8C11 ^28 NFS06 0145 8C0E NFS06 0147 8C11 ^28 NFS06 0146 8C0E 20 5A 8A JSR GBPBXX ;update CB[$05->$08] NFS06 0147 8C11 ^28 NFS06 0147 8C11 F0 A8 BEQ TBEXIT ;exit the routine -- NFS06 0148 8C13 -- NFS06 0149 8C13 TCLAIM ;claim TUBE semaphore -- NFS06 0150 8C13 A9 C3 LDAIM TBSEMA ;individual number NFS06 0152 8C18 ^79 NFS06 0151 8C15 20 06 04 JSR TBINIT NFS06 0152 8C18 ^79 NFS06 0152 8C18 90 F9 BCC TCLAIM -- NFS06 0153 8C1A 60 RTS -- NFS06 0154 8C1B -- NFS06 0155 8C1B LNK NFS07 -- NFS07 0001 8C1B -- NFS07 0002 8C1B ; NFS07 -- NFS07 0003 8C1B TTL Command Line Decoding -- NFS07 0004 8C1B OPT VIII2 NFS07 NFS07 NFS07 NFS07 Acorn macro assembler Page 27 NFS07 Command Line Decoding NFS07 -- NFS07 0005 8C1B -- NFS07 0006 8C1B ; The command line interpreter is courtesy Roger Wilson -- NFS07 0007 8C1B ; but has the usual 'top bit set' bug removed for the -- NFS07 0008 8C1B ; purposes of development. The routine DECODE is passed -- NFS07 0009 8C1B ; a string via (X,Y) and this is decoded and the -- NFS07 0010 8C1B ; appropriate actions taken. Unrecognised command lines -- NFS07 0011 8C1B ; are dealt with by a routine COMERR placed at the -- NFS07 0012 8C1B ; end of the command table COMTAB. -- NFS07 0013 8C1B -- NFS07 0014 8C1B DECODE ;is passed a string via X and Y, and decodes -- NFS07 0015 8C1B ;the command to produce an address in WORK which -- NFS07 0016 8C1B ;is jumped to. The registers are saved as they -- NFS07 0017 8C1B ;will no doubt come in useful for something. -- NFS07 0018 8C1B -- NFS07 0019 8C1B 20 49 86 JSR PUTREG ;save pointer -- NFS07 0020 8C1E -- NFS07 0021 8C1E A2 FF LDXIM FILLER -- NFS07 0022 8C20 86 B9 STX CRFLAG ; inactive=$FF -- NFS07 0023 8C22 86 97 STX ESCAP ;** enable escape -- NFS07 0024 8C24 A0 FF DECLP1 LDYIM FILLER NFS07 0039 8C3F ^63 NFS07 0025 8C26 C8 DECFIR INY NFS07 0039 8C3F ^63 NFS07 0026 8C27 E8 INX NFS07 0039 8C3F ^63 NFS07 0027 8C28 BD 4B 8C DECMOR LDAAX COMTAB NFS07 0039 8C3F ^63 NFS07 0028 8C2B 30 18 BMI DECDON ;all done yet ? NFS07 0039 8C3F ^63 NFS07 0029 8C2D 51 BE EORIY POINTR NFS07 0039 8C3F ^63 NFS07 0030 8C2F 29 DF ANDIM &DF ;force UPPER case NFS07 0039 8C3F ^63 NFS07 0031 8C31 F0 F3 BEQ DECFIR NFS07 0039 8C3F ^63 NFS07 0032 8C33 CA DEX NFS07 0039 8C3F ^63 NFS07 0033 8C34 E8 DECMIN INX NFS07 0039 8C3F ^63 NFS07 0034 8C35 BD 4B 8C LDAAX COMTAB NFS07 0039 8C3F ^63 NFS07 0035 8C38 10 FA BPL DECMIN NFS07 0039 8C3F ^63 NFS07 0036 8C3A B1 BE LDAIY POINTR NFS07 0039 8C3F ^63 NFS07 0037 8C3C E8 INX NFS07 0039 8C3F ^63 NFS07 0038 8C3D C9 2E CMPIM "." ;look for abbrev's NFS07 0039 8C3F ^63 NFS07 0039 8C3F D0 E3 BNE DECLP1 ;else try the next one NFS07 0042 8C43 ^63 NFS07 0040 8C41 C8 INY NFS07 0042 8C43 ^63 NFS07 0041 8C42 CA DEX NFS07 0042 8C43 ^63 NFS07 0042 8C43 B0 E3 BCS DECMOR ;round again NFS07 0028 8C2B v67 NFS07 0043 8C45 48 DECDON PHA ;this bit circumvents the "top bit" bug -- NFS07 0044 8C46 BD 4C 8C LDAAX COMTAB +&01 -- NFS07 0045 8C49 48 PHA -- NFS07 0046 8C4A 60 RTS ;leap away at random -- NFS07 0047 8C4B -- NFS07 0048 8C4B COMTAB ;table of commands -- NFS07 0049 8C4B 49 2E = "I." ;fudge here -- NFS07 0050 8C4D 80 = !(/(COMERR - &01 ) ) -- NFS07 0051 8C4E C0 = COMERR - &01 -- NFS07 0052 8C4F 49 20 41 = "I AM" -- NFS07 0053 8C53 80 = !(/(LOGON -&01 ) ) -- NFS07 0054 8C54 81 = LOGON -&01 -- NFS07 0055 8C55 45 58 = "EX" -- NFS07 0056 8C57 8C = !(/(INFALL - &01 )) -- NFS07 0057 8C58 60 = INFALL - &01 -- NFS07 0058 8C59 42 59 45 = "BYE",CR -- NFS07 0059 8C5D 83 = !(/(BYE -&01 ) ) -- NFS07 0060 8C5E BF = BYE -&01 -- NFS07 0061 8C5F 80 = !(/(COMERR -&01 ) ) -- NFS07 0062 8C60 C0 = COMERR -&01 -- NFS07 0063 8C61 -- NFS07 0064 8C61 -- NFS07 0065 8C61 INFALL ;does the System/3 type of operation -- NFS07 0066 8C61 ;to fully examine all entries in the catalogue. -- NFS07 0067 8C61 -- NFS07 0068 8C61 A2 01 LDXIM ONE ;arg to examine -- NFS07 0069 8C63 A9 03 LDAIM 3 -- NFS07 0070 8C65 D0 0B BNE CAT0 NFS07 0070 8C65 v74 NFS07 0071 8C67 NFS07 0070 8C65 v74 NFS07 0072 8C67 CAT ;does the catalogue operation. This involves a header NFS07 0070 8C65 v74 NFS07 0073 8C67 ;request and repeated interrogation of examine until NFS07 0070 8C65 v74 NFS07 0074 8C67 ;a total of zero entries is examined. This indicates NFS07 0070 8C65 v74 NFS07 0075 8C67 ;the end of the catalogue. The data is received in pre- NFS07 0070 8C65 v74 NFS07 0076 8C67 ;formatted chunks, to a buffer which abuts the Examine NFS07 0070 8C65 v74 NFS07 0077 8C67 ;request buffer and ends at RXBUFE. On entry X,Y point to NFS07 0070 8C65 v74 NFS07 0078 8C67 ;the command line after "CAT" or "." . NFS07 0070 8C65 v74 NFS07 0079 8C67 NFS07 0070 8C65 v74 NFS07 0080 8C67 A2 03 LDXIM THREE NFS07 0070 8C65 v74 NFS07 0081 8C69 86 B9 STX CRFLAG ;active#$FF NFS07 0070 8C65 v74 NFS07 0082 8C6B A0 FF LDYIM &FF NFS07 0070 8C65 v74 NFS07 0083 8C6D 84 97 STY ESCAP ;** 9/12/83 ** NFS07 0070 8C65 v74 NFS07 0084 8C6F C8 INY NFS07 0070 8C65 v74 NFS07 0085 8C70 A9 0B LDAIM &0B NFS07 0070 8C65 v74 NFS07 0086 8C72 85 B5 CAT0 STA WORK +&05 ;number of entries to get -- NFS07 0087 8C74 86 B7 STX WORK +&07 ;arg to examine -- NFS07 0088 8C76 A9 06 LDAIM SIX -- NFS07 0089 8C78 8D 05 0F STA RXBUF ;argument for Read Object Info -- NFS07 0090 8C7B 20 EA 86 JSR QUOTER ;look for spaces,quoted strings etc -- NFS07 0091 8C7E A2 01 LDXIM ONE -- NFS07 0092 8C80 20 84 8D JSR CATLP0 ;copy the filetitle -- NFS07 0093 8C83 -- NFS07 0094 8C83 A0 12 LDYIM FCREAD ;get function code -- NFS07 0095 8C85 20 C7 83 JSR DOFSOP ;perform the transfer of info -- NFS07 0096 8C88 -- NFS07 0097 8C88 A2 03 LDXIM THREE -- NFS07 0098 8C8A 20 47 8D JSR STRING ;print the name of examined directory -- NFS07 0099 8C8D -- NFS07 0100 8C8D 20 5C 86 JSR VSTRNG -- NFS07 0101 8C90 28 = "(" -- NFS07 0102 8C91 AD 13 0F LDA RXBUF +&0E ;get the cycle number -- NFS07 0103 8C94 20 BD 8D JSR DECOUT ;****** should be decimal ******* -- NFS07 0104 8C97 20 5C 86 JSR VSTRNG -- NFS07 0105 8C9A 29 20 20 = ") " -- NFS07 0106 8CA0 -- NFS07 0107 8CA0 ; NOP -- NFS07 0108 8CA0 ; JSR FILL5 ;print seven spaces -- NFS07 0109 8CA0 -- NFS07 0110 8CA0 AC 12 0F LDY RXBUF +&0D ;inspect the access byte -- NFS07 0111 8CA3 D0 0B BNE CAT1 ;zero is offset of "Owner" NFS07 0111 8CA3 v74 NFS07 0112 8CA5 20 5C 86 JSR VSTRNG NFS07 0111 8CA3 v74 NFS07 0113 8CA8 4F 77 6E = "Owner",CR NFS07 0111 8CA3 v74 NFS07 0114 8CAE D0 0A BNE CAT2 NFS07 0111 8CA3 v74 NFS07 0115 8CB0 20 5C 86 CAT1 JSR VSTRNG NFS07 0114 8CAE v75 NFS07 0116 8CB3 50 75 62 = "Public",CR NFS07 0114 8CAE v75 NFS07 0117 8CBA NFS07 0114 8CAE v75 NFS07 0118 8CBA A0 15 CAT2 LDYIM FCUSER ;code for user environment -- NFS07 0119 8CBC 20 C7 83 JSR DOFSOP ;X undefined here, only sending TX hdr -- NFS07 0120 8CBF ;now have the CSD, DISC and LIB names -- NFS07 0121 8CBF ;also X=0 on exit -- NFS07 0122 8CBF -- NFS07 0123 8CBF E8 INX -- NFS07 0124 8CC0 A0 10 LDYIM &10 ;long name here -- NFS07 0125 8CC2 20 49 8D JSR STRIN1 ;print the disc name NFS07 NFS07 NFS07 NFS07 Acorn macro assembler Page 28 NFS07 Command Line Decoding NFS07 -- NFS07 0126 8CC5 20 5C 86 JSR VSTRNG -- NFS07 0127 8CC8 20 20 20 = " Option " -- NFS07 0128 8CD3 AD 05 0E LDA OPT -- NFS07 0129 8CD6 AA TAX -- NFS07 0130 8CD7 20 F0 BF JSR HEXOUT ;****** should be decimal ******* -- NFS07 0131 8CDA 20 5C 86 JSR VSTRNG -- NFS07 0132 8CDD 20 28 = " (" -- NFS07 0133 8CDF -- NFS07 0134 8CDF BC 54 8D LDYAX OPTTXT -- NFS07 0135 8CE2 B9 54 8D CATTXT LDAAY TEXTTB ;write the message NFS07 0139 8CEB ^75 NFS07 0136 8CE5 30 06 BMI CATOPT NFS07 0139 8CEB ^75 NFS07 0137 8CE7 20 E3 FF JSR OSASCI NFS07 0139 8CEB ^75 NFS07 0138 8CEA C8 INY NFS07 0139 8CEB ^75 NFS07 0139 8CEB D0 F5 BNE CATTXT NFS07 0136 8CE5 v79 NFS07 0140 8CED NFS07 0136 8CE5 v79 NFS07 0141 8CED 20 5C 86 CATOPT JSR VSTRNG -- NFS07 0142 8CF0 29 0D 44 = ")", CR,"Dir. " -- NFS07 0143 8CF7 A2 11 LDXIM &11 -- NFS07 0144 8CF9 20 47 8D JSR STRING ;print the CSD name -- NFS07 0145 8CFC ; JSR FILL5 ;more spaces -- NFS07 0146 8CFC -- NFS07 0147 8CFC 20 5C 86 JSR VSTRNG -- NFS07 0148 8CFF 20 20 20 = " Lib. " -- NFS07 0149 8D09 A2 1B LDXIM &1B -- NFS07 0150 8D0B 20 47 8D JSR STRING -- NFS07 0151 8D0E 20 E7 FF JSR OSCRLF -- NFS07 0152 8D11 -- NFS07 0153 8D11 8C 06 0F CATLP2 STY TXBUF +&01 ;entry point to examine NFS07 0183 8D45 ^4A NFS07 0154 8D14 84 B4 STY WORK +&04 NFS07 0183 8D45 ^4A NFS07 0155 8D16 A6 B5 LDX WORK +&05 NFS07 0183 8D45 ^4A NFS07 0156 8D18 8E 07 0F STX TXBUF +&02 ;entries to get NFS07 0183 8D45 ^4A NFS07 0157 8D1B NFS07 0183 8D45 ^4A NFS07 0158 8D1B A6 B7 LDX WORK +&07 NFS07 0183 8D45 ^4A NFS07 0159 8D1D 8E 05 0F STX TXBUF NFS07 0183 8D45 ^4A NFS07 0160 8D20 A2 03 LDXIM THREE NFS07 0183 8D45 ^4A NFS07 0161 8D22 20 84 8D JSR CATLP0 ;copy filename into TXBUF +04+ NFS07 0183 8D45 ^4A NFS07 0162 8D25 NFS07 0183 8D45 ^4A NFS07 0163 8D25 A0 03 LDYIM FCEXAM ;examine function code NFS07 0183 8D45 ^4A NFS07 0164 8D27 20 C7 83 JSR DOFSOP NFS07 0183 8D45 ^4A NFS07 0165 8D2A NFS07 0183 8D45 ^4A NFS07 0166 8D2A E8 INX NFS07 0183 8D45 ^4A NFS07 0167 8D2B AD 05 0F LDA RXBUF ;get entries examined NFS07 0183 8D45 ^4A NFS07 0168 8D2E D0 03 BNE CATJD1 NFS07 0183 8D45 ^4A NFS07 0169 8D30 4C E7 FF JMP OSNEWL ;Newline and return NFS07 0183 8D45 ^4A NFS07 0170 8D33 NFS07 0183 8D45 ^4A NFS07 0171 8D33 48 CATJD1 PHA ;save here NFS07 0183 8D45 ^4A NFS07 0172 8D34 NFS07 0183 8D45 ^4A NFS07 0173 8D34 C8 CATLP7 INY NFS07 0183 8D45 ^4A NFS07 0174 8D35 B9 05 0F LDAAY RXBUF ;look for delimiter NFS07 0183 8D45 ^4A NFS07 0175 8D38 10 FA BPL CATLP7 NFS07 0183 8D45 ^4A NFS07 0176 8D3A 99 04 0F STAAY RXBUF - 1 ;move it back one place NFS07 0183 8D45 ^4A NFS07 0177 8D3D NFS07 0183 8D45 ^4A NFS07 0178 8D3D 20 9F 8D JSR INFOL5 ;print the data from offset in X NFS07 0183 8D45 ^4A NFS07 0179 8D40 68 PLA NFS07 0183 8D45 ^4A NFS07 0180 8D41 18 CLC NFS07 0183 8D45 ^4A NFS07 0181 8D42 65 B4 ADC WORK +&04 ;update by number of entries examined NFS07 0183 8D45 ^4A NFS07 0182 8D44 A8 TAY NFS07 0183 8D45 ^4A NFS07 0183 8D45 D0 CA BNE CATLP2 -- NFS07 0184 8D47 -- NFS07 0185 8D47 A0 0A STRING LDYIM &0A ;print chars in RXBUF, from X -- NFS07 0186 8D49 BD 05 0F STRIN1 LDAAX RXBUF NFS07 0190 8D51 ^76 NFS07 0187 8D4C 20 E3 FF JSR OSASCI NFS07 0190 8D51 ^76 NFS07 0188 8D4F E8 INX NFS07 0190 8D51 ^76 NFS07 0189 8D50 88 DEY NFS07 0190 8D51 ^76 NFS07 0190 8D51 D0 F6 BNE STRIN1 ;count on Y -- NFS07 0191 8D53 60 RTS -- NFS07 0192 8D54 TEXTTB -- NFS07 0193 8D54 -- NFS07 0194 8D54 2B OPTTXT = OPTX0 - TEXTTB -- NFS07 0195 8D55 3E = OPTX1 - TEXTTB -- NFS07 0196 8D56 66 = OPTX2 - TEXTTB -- NFS07 0197 8D57 18 = OPTX3 - TEXTTB -- NFS07 0198 8D58 -- NFS07 0199 8D58 4C 2E LOAD = "L." -- NFS07 0200 8D5A 21 42 4F RUN = "!BOOT",CR -- NFS07 0201 8D60 45 2E 21 EXEC = "E.!BOOT" -- NFS07 0202 8D67 0D OFF = CR -- NFS07 0203 8D68 -- NFS07 0204 8D68 67 BOOTLO = OFF -- NFS07 0205 8D69 58 = LOAD -- NFS07 0206 8D6A 5A = RUN -- NFS07 0207 8D6B 60 = EXEC -- NFS07 0208 8D6C -- NFS07 0209 8D6C 008D BOOTH4 * OFF :SHR: &8 -- NFS07 0210 8D6C 008D BOOTH1 * LOAD :SHR: &8 -- NFS07 0211 8D6C 008D BOOTH2 * RUN :SHR: &8 -- NFS07 0212 8D6C 008D BOOTH3 * EXEC :SHR: &8 -- NFS07 0213 8D6C -- NFS07 0214 8D6C 45 78 65 OPTX3 = "Exec" -- NFS07 0215 8D70 -- NFS07 0216 8D70 [ OPTX3 - TEXTTB :SHR: 8=0 -- NFS07 0217 8D70 | -- NFS07 0219 8D70 ] -- NFS07 0220 8D70 -- NFS07 0221 8D70 A2 04 NUMOUT LDXIM &04 -- NFS07 0222 8D72 B1 BB NUM01 LDAIY TEMPX NFS07 0226 8D79 ^77 NFS07 0223 8D74 20 F0 BF JSR HEXOUT NFS07 0226 8D79 ^77 NFS07 0224 8D77 88 DEY NFS07 0226 8D79 ^77 NFS07 0225 8D78 CA DEX NFS07 0226 8D79 ^77 NFS07 0226 8D79 D0 F7 BNE NUM01 -- NFS07 0227 8D7B A9 20 NUMSP LDAIM SPACE -- NFS07 0228 8D7D D0 5A BNE DBWRL2 NFS07 0228 8D7D v25 NFS07 0229 8D7F NFS07 0228 8D7D v25 NFS07 0230 8D7F 4F 66 66 OPTX0 = "Off" NFS07 0228 8D7D v25 NFS07 0231 8D82 NFS07 0228 8D7D v25 NFS07 0232 8D82 [ OPTX0 - TEXTTB :SHR: 8=0 NFS07 0228 8D7D v25 NFS07 0233 8D82 | NFS07 0228 8D7D v25 NFS07 0235 8D82 ] NFS07 0228 8D7D v25 NFS07 0236 8D82 NFS07 0228 8D7D v25 NFS07 0237 8D82 NFS07 0228 8D7D v25 NFS07 0238 8D82 CATLP NFS07 0228 8D7D v25 NFS07 0239 8D82 COPYCL ;copy the command line pointed at by TEMPX NFS07 0228 8D7D v25 NFS07 0240 8D82 ;into the TXBUF. Nice routine, should get lots of use. NFS07 0228 8D7D v25 NFS07 0241 8D82 NFS07 0228 8D7D v25 NFS07 0242 8D82 A2 00 LDXIM ZERO ;useful for specific copying NFS07 0228 8D7D v25 NFS07 0243 8D84 COPYCX NFS07 0228 8D7D v25 NFS07 0244 8D84 CATLP0 NFS07 0228 8D7D v25 NFS07 0245 8D84 A0 00 LDYIM ZERO NFS07 0228 8D7D v25 NFS07 0246 8D86 B1 BE COPLP1 LDAIY POINTR ;get the command line NFS07 0228 8D7D v25 NFS07 0247 8D88 9D 05 0F STAAX TXBUF ;into the Txbuf, offset set by X NFS07 0228 8D7D v25 NFS07 0248 8D8B E8 INX NFS07 NFS07 NFS07 NFS07 Acorn macro assembler Page 29 NFS07 Command Line Decoding NFS07 NFS07 0228 8D7D v25 NFS07 0249 8D8C C8 INY NFS07 0228 8D7D v25 NFS07 0250 8D8D 49 0D EORIM CR ;carriage return ? NFS07 0228 8D7D v25 NFS07 0251 8D8F D0 F5 BNE COPLP1 NFS07 0228 8D7D v25 NFS07 0252 8D91 60 INFOEX RTS ;Y holds length+1 of command line NFS07 0228 8D7D v25 NFS07 0253 8D92 NFS07 0228 8D7D v25 NFS07 0254 8D92 4C 6F 61 OPTX1 = "Load" NFS07 0228 8D7D v25 NFS07 0255 8D96 NFS07 0228 8D7D v25 NFS07 0256 8D96 [ OPTX1 - TEXTTB :SHR: 8=0 NFS07 0228 8D7D v25 NFS07 0257 8D96 | NFS07 0228 8D7D v25 NFS07 0259 8D96 ] NFS07 0228 8D7D v25 NFS07 0260 8D96 NFS07 0228 8D7D v25 NFS07 0261 8D96 NFS07 0228 8D7D v25 NFS07 0262 8D96 INFO ;called from COMERR when the command code NFS07 0228 8D7D v25 NFS07 0263 8D96 ;is four. Command codes are looked up in CCTAB. NFS07 0228 8D7D v25 NFS07 0264 8D96 NFS07 0228 8D7D v25 NFS07 0265 8D96 A2 00 LDXIM ZERO NFS07 0228 8D7D v25 NFS07 0266 8D98 BD 05 0F INFOLP LDAAX RXBUF NFS07 0228 8D7D v25 NFS07 0267 8D9B 30 F4 BMI INFOEX NFS07 0228 8D7D v25 NFS07 0268 8D9D D0 15 BNE INFOL2 NFS07 0228 8D7D v25 NFS07 0269 8D9F NFS07 0228 8D7D v25 NFS07 0270 8D9F A4 B9 INFOL5 LDY CRFLAG NFS07 0228 8D7D v25 NFS07 0271 8DA1 30 0F BMI INFOL3 ;flag inactive NFS07 0228 8D7D v25 NFS07 0272 8DA3 C8 INY NFS07 0228 8D7D v25 NFS07 0273 8DA4 98 TYA NFS07 0228 8D7D v25 NFS07 0274 8DA5 29 03 ANDIM &03 ;2 bit counter NFS07 0228 8D7D v25 NFS07 0275 8DA7 85 B9 STA CRFLAG NFS07 0228 8D7D v25 NFS07 0276 8DA9 NFS07 0228 8D7D v25 NFS07 0277 8DA9 F0 07 BEQ INFOL3 NFS07 0228 8D7D v25 NFS07 0278 8DAB 20 5C 86 JSR VSTRNG NFS07 0228 8D7D v25 NFS07 0279 8DAE 20 20 = " " NFS07 0228 8D7D v25 NFS07 0280 8DB0 D0 05 BNE INFOL4 NFS07 0228 8D7D v25 NFS07 0281 8DB2 NFS07 0228 8D7D v25 NFS07 0282 8DB2 A9 0D INFOL3 LDAIM CR NFS07 0228 8D7D v25 NFS07 0283 8DB4 20 E3 FF INFOL2 JSR OSASCI ;deal with carriage return, line feed NFS07 0228 8D7D v25 NFS07 0284 8DB7 E8 INFOL4 INX NFS07 0228 8D7D v25 NFS07 0285 8DB8 D0 DE BNE INFOLP NFS07 0228 8D7D v25 NFS07 0286 8DBA NFS07 0228 8D7D v25 NFS07 0287 8DBA 52 75 6E OPTX2 = "Run" NFS07 0228 8D7D v25 NFS07 0288 8DBD NFS07 0228 8D7D v25 NFS07 0289 8DBD [ OPTX2 - TEXTTB :SHR: 8=0 NFS07 0228 8D7D v25 NFS07 0290 8DBD | NFS07 0228 8D7D v25 NFS07 0292 8DBD ] NFS07 0228 8D7D v25 NFS07 0293 8DBD NFS07 0228 8D7D v25 NFS07 0294 8DBD NFS07 0228 8D7D v25 NFS07 0295 8DBD A8 DECOUT TAY ;decimal output routine NFS07 0228 8D7D v25 NFS07 0296 8DBE A9 64 LDAIM &64 ;subtract hundred NFS07 0228 8D7D v25 NFS07 0297 8DC0 20 CA 8D JSR DEC1 ;get first digit NFS07 0228 8D7D v25 NFS07 0298 8DC3 A9 0A LDAIM &0A NFS07 0228 8D7D v25 NFS07 0299 8DC5 20 CA 8D JSR DEC1 ;and the second NFS07 0228 8D7D v25 NFS07 0300 8DC8 A9 01 LDAIM &01 NFS07 0228 8D7D v25 NFS07 0301 8DCA 85 B8 DEC1 STA JWORK NFS07 0228 8D7D v25 NFS07 0302 8DCC 98 TYA ;save value over call in Y NFS07 0228 8D7D v25 NFS07 0303 8DCD A2 2F LDXIM &2F ;ascii '0' NFS07 0228 8D7D v25 NFS07 0304 8DCF 38 SEC NFS07 0228 8D7D v25 NFS07 0305 8DD0 E8 DEC2 INX NFS07 0228 8D7D v25 NFS07 0306 8DD1 E5 B8 SBC JWORK NFS07 0228 8D7D v25 NFS07 0307 8DD3 B0 FB BCS DEC2 NFS07 0228 8D7D v25 NFS07 0308 8DD5 65 B8 ADC JWORK ;make positive again NFS07 0228 8D7D v25 NFS07 0309 8DD7 A8 TAY NFS07 0228 8D7D v25 NFS07 0310 8DD8 8A TXA NFS07 0228 8D7D v25 NFS07 0311 8DD9 DBWRL2 NFS07 0228 8D7D v25 NFS07 0312 8DD9 4C E3 FF DECCH JMP OSASCI -- NFS07 0313 8DDC -- NFS07 0314 8DDC [ &FF=0 -- NFS07 0329 8DDC ] -- NFS07 0330 8DDC -- NFS07 0331 8DDC [ &FF=0 -- NFS07 0337 8DDC ] -- NFS07 0338 8DDC -- NFS07 0339 8DDC 20 E8 86 CMNDR JSR QUOTED ;deal with quotes etc -- NFS07 0340 8DDF 20 82 8D JSR CATLP ;from *RUN commands -- NFS07 0341 8DE2 -- NFS07 0342 8DE2 CMND ;load as command, response is as for LOAD(3) -- NFS07 0343 8DE2 ;but jump to exec address at the end of transfer. -- NFS07 0344 8DE2 -- NFS07 0345 8DE2 A0 00 LDYIM 0 ;use MOS reading routines -- NFS07 0346 8DE4 18 CLC -- NFS07 0347 8DE5 20 C2 FF JSR GSINIT -- NFS07 0348 8DE8 20 C5 FF CMND3 JSR GSREAD NFS07 0349 8DEB ^7B NFS07 0349 8DEB 90 FB BCC CMND3 ;skip file name -- NFS07 0350 8DED -- NFS07 0351 8DED [ &FF=0 -- NFS07 0357 8DED | -- NFS07 0358 8DED 20 7E 83 JSR SKPSP ;** 9/8/83 ** -- NFS07 0359 8DF0 ] -- NFS07 0360 8DF0 -- NFS07 0361 8DF0 18 CLC -- NFS07 0362 8DF1 98 TYA -- NFS07 0363 8DF2 65 F2 ADC &F2 -- NFS07 0364 8DF4 8D 0A 0E STA JCMNDP -- NFS07 0365 8DF7 A5 F3 LDA &F3 -- NFS07 0366 8DF9 69 00 ADCIM 0 -- NFS07 0367 8DFB 8D 0B 0E STA JCMNDP + 1 -- NFS07 0368 8DFE -- NFS07 0369 8DFE A2 0E LDXIM /(CMNDP ) -- NFS07 0370 8E00 86 BC STX TEMPY ;X=$0F, dummy for buffer length -- NFS07 0371 8E02 A9 10 LDAIM CMNDP -- NFS07 0372 8E04 85 BB STA TEMPX ;point to CB -- NFS07 0373 8E06 8D 16 0E STA CMNDP + 6 -- NFS07 0374 8E09 -- NFS07 0375 8E09 A2 4A LDXIM &4A ;maximum buffer allowed -- NFS07 0376 8E0B A0 05 LDYIM FCCMND -- NFS07 0377 8E0D 20 22 87 JSR LODCMD ;perform load as command -- NFS07 0378 8E10 -- NFS07 0379 8E10 ; SEC ;update CMNDP -- NFS07 0380 8E10 -- NFS07 0381 8E10 AD 67 0D LDA TBFLAG ;get flag -- NFS07 0382 8E13 F0 14 BEQ CMNDX ;C=1 here NFS07 0382 8E13 v6B NFS07 0383 8E15 6D 0B 0F ADC RXBUF +&06 NFS07 0382 8E13 v6B NFS07 0384 8E18 6D 0C 0F ADC RXBUF +&07 NFS07 0382 8E13 v6B NFS07 0385 8E1B B0 0C BCS CMNDX ;skip if HOST-side of TUBE NFS07 0382 8E13 v6B NFS07 0386 8E1D NFS07 0382 8E13 v6B NFS07 0387 8E1D 20 13 8C JSR TCLAIM NFS07 0382 8E13 v6B NFS07 0388 8E20 A2 09 LDXIM RXBUF +&04 NFS07 0382 8E13 v6B NFS07 0389 8E22 A0 0F LDYIM /(RXBUF +&04 ) NFS07 0382 8E13 v6B NFS07 0390 8E24 A9 04 LDAIM &04 ;for JUMP NFS07 0382 8E13 v6B NFS07 0391 8E26 4C 06 04 JMP TBINIT ;leap over the TUBE NFS07 0382 8E13 v6B NFS07 0392 8E29 NFS07 0382 8E13 v6B NFS07 0393 8E29 2A CMNDX ROLA ;Set A=1 here ** 14/11/83 ** -- NFS07 0394 8E2A 6C 09 0F JMI RXBUF +&04 ;leap to exec address -- NFS07 0395 8E2D NFS07 NFS07 NFS07 NFS07 Acorn macro assembler Page 30 NFS07 Command Line Decoding NFS07 -- NFS07 0396 8E2D SLIB ;user change library environment. Call passed -- NFS07 0397 8E2D ;to FS, jump here on return when CC=9. Just store the handle in LIB. -- NFS07 0398 8E2D -- NFS07 0399 8E2D 8C 04 0E STY LIB ;correct handle -- NFS07 0400 8E30 90 03 BCC CATDON ;do return NFS07 0400 8E30 v7C NFS07 0401 8E32 NFS07 0400 8E30 v7C NFS07 0402 8E32 SDIR ;user change currently selected directory. NFS07 0400 8E30 v7C NFS07 0403 8E32 ;Jump here on return from COMERR when CC=7. Save handle in CSD. NFS07 0400 8E30 v7C NFS07 0404 8E32 NFS07 0400 8E30 v7C NFS07 0405 8E32 8C 03 0E STY CSD NFS07 0400 8E30 v7C NFS07 0406 8E35 RTSS NFS07 0400 8E30 v7C NFS07 0407 8E35 4C B3 89 CATDON JMP REGGET NFS07 0417 8E46 ^6D NFS07 0408 8E38 NFS07 0417 8E46 ^6D NFS07 0409 8E38 NFS07 0417 8E46 ^6D NFS07 0410 8E38 38 LOGIN SEC NFS07 0417 8E46 ^6D NFS07 0411 8E39 A2 03 SDISC LDXIM THREE ;come here on 'SDISC', X=2 NFS07 0417 8E46 ^6D NFS07 0412 8E3B 90 06 BCC LOGON3 NFS07 0417 8E46 ^6D NFS07 0413 8E3D BD 05 0F LOGON2 LDAAX RXBUF NFS07 0417 8E46 ^6D NFS07 0414 8E40 9D 02 0E STAAX URD NFS07 0417 8E46 ^6D NFS07 0415 8E43 CA LOGON3 DEX NFS07 0417 8E46 ^6D NFS07 0416 8E44 10 F7 BPL LOGON2 ;save the handles NFS07 0417 8E46 ^6D NFS07 0417 8E46 90 ED BCC CATDON ;do return -- NFS07 0418 8E48 -- NFS07 0419 8E48 AC 05 0E LDY OPT -- NFS07 0420 8E4B BE 68 8D LDXAY BOOTLO -- NFS07 0421 8E4E ;cheating way of saving code if addresses are identical -- NFS07 0422 8E4E [ BOOTH4 - BOOTH1 =0 -- NFS07 0423 8E4E A0 8D LDYIM BOOTH1 -- NFS07 0424 8E50 -- NFS07 0425 8E50 | -- NFS07 0435 8E50 ] -- NFS07 0436 8E50 4C F7 FF JMP OSCLI -- NFS07 0437 8E53 -- NFS07 0438 8E53 LNK NFS08 -- NFS08 0001 8E53 -- NFS08 0002 8E53 ; NFS08 -- NFS08 0003 8E53 TTL MOS interface -- NFS08 0004 8E53 OPT MOS NFS08 NFS08 NFS08 NFS08 Acorn macro assembler Page 31 NFS08 MOS interface NFS08 -- NFS08 0005 8E53 -- NFS08 0006 8E53 ;[*****************************] -- NFS08 0007 8E53 ;[ Net dedicated 0-page ] -- NFS08 0008 8E53 ;[ $9C,$9D - first page, Always] -- NFS08 0009 8E53 ;[ $9E,$9F - used by remote ] -- NFS08 0010 8E53 ;[*****************************] -- NFS08 0011 8E53 -- NFS08 0012 8E53 -- NFS08 0013 8E53 ; This section of the implementation concerns the -- NFS08 0014 8E53 ; interface of the ECONET (sic) with the MOS. -- NFS08 0015 8E53 ; This allows operations to be carried out as -- NFS08 0016 8E53 ; function calls and not by direct manipulation -- NFS08 0017 8E53 ; of the Net routines. -- NFS08 0018 8E53 -- NFS08 0019 8E53 ; The interface is defined in terms of OSbyte and -- NFS08 0020 8E53 ; OSword calls to handle the control blocks. -- NFS08 0021 8E53 ; The area of RAM allocated is in the second static -- NFS08 0022 8E53 ; workspace page. -- NFS08 0023 8E53 -- NFS08 0024 8E53 ; Calls are passed to the interface as follows: -- NFS08 0025 8E53 ; A=7 : OSBYTE, Y= call number, X= ROM number -- NFS08 0026 8E53 ; A=8 : OSWORD, Y= call number, X= ROM number -- NFS08 0027 8E53 ; In both cases, &F0,F1 hold the original values -- NFS08 0028 8E53 ; for X, Y. -- NFS08 0029 8E53 -- NFS08 0030 8E53 ; As these routines are called from within OSBYTE, -- NFS08 0031 8E53 ; OSWORD then MOS workspace can be claimed, provided -- NFS08 0032 8E53 ; that it is restored afterwards. -- NFS08 0033 8E53 -- NFS08 0034 8E53 -- NFS08 0035 8E53 TTL Static Workarea allocation -- NFS08 0036 8E53 OPT &01 -- NFS08 0037 8E53 -- NFS08 0038 8E53 ; PAGE 1 -- NFS08 0039 8E53 ; |----------------------| -- NFS08 0040 8E53 ; | (128) | -- NFS08 0041 8E53 ; 128 | JSR BUFFER | -- NFS08 0042 8E53 ; |----------------------| -- NFS08 0043 8E53 ; | (1) | -- NFS08 0044 8E53 ; 127 | BUFFER COUNTER | -- NFS08 0045 8E53 ; |----------------------| -- NFS08 0046 8E53 ; | (16) | -- NFS08 0047 8E53 ; 111 | Txcb/Imm. Op | -- NFS08 0048 8E53 ; |----------------------| -- NFS08 0049 8E53 ; | (80) | -- NFS08 0050 8E53 ; 31 | Printer Buffer | -- NFS08 0051 8E53 ; |----------------------| -- NFS08 0052 8E53 ; | ( 9) | -- NFS08 0053 8E53 ; 22 | High level State | -- NFS08 0054 8E53 ; |----------------------| -- NFS08 0055 8E53 ; | (16) | -- NFS08 0056 8E53 ; 6 | Low level State | -- NFS08 0057 8E53 ; |----------------------| -- NFS08 0058 8E53 ; | (2) | -- NFS08 0059 8E53 ; 4 | Counters & flags | -- NFS08 0060 8E53 ; |----------------------| -- NFS08 0061 8E53 ; | (4) | -- NFS08 0062 8E53 ; 0 | byte/word save | -- NFS08 0063 8E53 ; |----------------------| -- NFS08 0064 8E53 -- NFS08 0065 8E53 -- NFS08 0066 8E53 ; Static Page 2 -- NFS08 0067 8E53 ; ----------------------- -- NFS08 0068 8E53 ; 0 | Printer CB | -- NFS08 0069 8E53 ; ---------------------- -- NFS08 0070 8E53 ; 12 | Remote CB | -- NFS08 0071 8E53 ; ----------------------- -- NFS08 0072 8E53 ; ~ 16 Rxcb's ~ -- NFS08 0073 8E53 ; ----------------------- -- NFS08 0074 8E53 ; 217 | Zero | -- NFS08 0075 8E53 ; ----------------------- -- NFS08 0076 8E53 ; 218 | Printer work | -- NFS08 0077 8E53 ; ----------------------- -- NFS08 0078 8E53 ; ??? | Remote work | -- NFS08 0079 8E53 ; ----------------------- -- NFS08 0080 8E53 -- NFS08 0081 8E53 TTL OSBYTE calls -- NFS08 0082 8E53 OPT &01 -- NFS08 0083 8E53 A5 F0 OFFSEX LDA &F0 ;get the original parameter -- NFS08 0084 8E55 0A OFFSET ASLA ;passed A as Rxcb number -- NFS08 0085 8E56 0A ASLA -- NFS08 0086 8E57 48 PHA ;A *:= 4 -- NFS08 0087 8E58 0A ASLA ;nb carry=0 -- NFS08 0088 8E59 BA TSX -- NFS08 0089 8E5A 7D 01 01 ADCAX &0101 ;with previous result -- NFS08 0090 8E5D A8 TAY ;Y = A * 12 -- NFS08 0091 8E5E 68 PLA ;A = A * 4 -- NFS08 0092 8E5F C9 48 CMPIM RXCBS * &04 ;test the returned offset -- NFS08 0093 8E61 90 03 BCC OFF1 NFS08 0093 8E61 v7C NFS08 0094 8E63 A0 00 LDYIM &00 NFS08 0093 8E61 v7C NFS08 0095 8E65 98 TYA ;return error NFS08 0093 8E61 v7C NFS08 0096 8E66 60 OFF1 RTS ;X = undefined -- NFS08 0097 8E67 -- NFS08 0098 8E67 TXPOLL ;call to poll a Txcb -- NFS08 0099 8E67 A0 6F LDYIM UTXCB ;offset of user TXCB in first page -- NFS08 0100 8E69 B1 9C LDAIY PAGE1 ;dedicated pointer in 0-page -- NFS08 0101 8E6B 90 0D BCC RXPOL1 ;return value NFS08 0101 8E6B v72 NFS08 0102 8E6D NFS08 0101 8E6B v72 NFS08 0103 8E6D RXPOLL ;call to poll Rxcb given in $F0 NFS08 0101 8E6B v72 NFS08 0104 8E6D 20 53 8E JSR OFFSEX ;calculate the offset from pointer NFS08 0101 8E6B v72 NFS08 0105 8E70 B0 06 BCS RXPOL2 ;error condition NFS08 0101 8E6B v72 NFS08 0106 8E72 B1 9E LDAIY WORKP1 ;get the flag byte NFS08 0101 8E6B v72 NFS08 0107 8E74 C9 3F CMPIM &3F ;check CB valid NFS08 0101 8E6B v72 NFS08 0108 8E76 D0 02 BNE RXPOL1 NFS08 0101 8E6B v72 NFS08 0109 8E78 A9 00 RXPOL2 LDAIM &00 NFS08 0101 8E6B v72 NFS08 0110 8E7A 85 F0 RXPOL1 STA PARMX ;return value in X NFS08 0115 8E80 ^76 NFS08 0111 8E7C 60 RTS NFS08 0115 8E80 ^76 NFS08 0112 8E7D NFS08 0115 8E80 ^76 NFS08 0113 8E7D DELCB NFS08 0115 8E80 ^76 NFS08 0114 8E7D 20 53 8E JSR OFFSEX NFS08 0115 8E80 ^76 NFS08 0115 8E80 B0 F6 BCS RXPOL2 -- NFS08 0116 8E82 ; ROR LFLAG ;disable USER Rx -- NFS08 0117 8E82 A9 3F LDAIM &3F ;delete flag byte -- NFS08 0118 8E84 91 9E STAIY WORKP1 -- NFS08 0119 8E86 -- NFS08 0120 8E86 ; ROL LFLAG ;enable Rx and return -- NFS08 0121 8E86 60 RTS -- NFS08 0122 8E87 -- NFS08 0123 8E87 -- NFS08 0124 8E87 ;This code has been moved to ROM file -- NFS08 0125 8E87 ;7/3/83 NFS08 NFS08 NFS08 NFS08 Acorn macro assembler Page 32 NFS08 OSBYTE calls NFS08 -- NFS08 0126 8E87 -- NFS08 0127 8E87 ;ROFFF JSR NROFF -- NFS08 0128 8E87 ; BVC CLAIM -- NFS08 0129 8E87 -- NFS08 0130 8E87 TTL OSWORD calls -- NFS08 0131 8E87 OPT &01 -- NFS08 0132 8E87 -- NFS08 0133 8E87 A5 EF FSWORD LDA PARMA ;get call number -- NFS08 0134 8E89 E9 0F SBCIM &0F ;test bounds - C=0 on entry -- NFS08 0135 8E8B 30 2A BMI NOWORD NFS08 0135 8E8B v55 NFS08 0136 8E8D C9 05 CMPIM &05 NFS08 0135 8E8B v55 NFS08 0137 8E8F B0 26 BCS NOWORD NFS08 0135 8E8B v55 NFS08 0138 8E91 NFS08 0135 8E8B v55 NFS08 0139 8E91 20 9F 8E JSR GOWORD ;call the routine NFS08 0135 8E8B v55 NFS08 0140 8E94 NFS08 0135 8E8B v55 NFS08 0141 8E94 A0 02 CLAIMW LDYIM SAVEAR +&02 ;restore previous values NFS08 0135 8E8B v55 NFS08 0142 8E96 B1 9C REST1 LDAIY PAGE1 NFS08 0135 8E8B v55 NFS08 0143 8E98 99 AA 00 STAAY UTIL3 - SAVEAR -&01 NFS08 0135 8E8B v55 NFS08 0144 8E9B 88 DEY NFS08 0135 8E8B v55 NFS08 0145 8E9C 10 F8 BPL REST1 NFS08 0135 8E8B v55 NFS08 0146 8E9E 60 RTS NFS08 0135 8E8B v55 NFS08 0147 8E9F NFS08 0135 8E8B v55 NFS08 0148 8E9F AA GOWORD TAX NFS08 0135 8E8B v55 NFS08 0149 8EA0 BD BD 8E LDAAX WORDHI NFS08 0135 8E8B v55 NFS08 0150 8EA3 48 PHA NFS08 0135 8E8B v55 NFS08 0151 8EA4 BD B8 8E LDAAX WORDLO NFS08 0135 8E8B v55 NFS08 0152 8EA7 48 PHA NFS08 0135 8E8B v55 NFS08 0153 8EA8 NFS08 0135 8E8B v55 NFS08 0154 8EA8 A0 02 LDYIM SAVEAR +&02 ;offset in first static page NFS08 0135 8E8B v55 NFS08 0155 8EAA B9 AA 00 SAVE1 LDAAY UTIL3 - SAVEAR -&01 ;claim 0-page NFS08 0135 8E8B v55 NFS08 0156 8EAD 91 9C STAIY PAGE1 ;dedicated pointer NFS08 0135 8E8B v55 NFS08 0157 8EAF 88 DEY NFS08 0135 8E8B v55 NFS08 0158 8EB0 10 F8 BPL SAVE1 NFS08 0135 8E8B v55 NFS08 0159 8EB2 C8 INY ;Y=0 NFS08 0135 8E8B v55 NFS08 0160 8EB3 B1 F0 LDAIY PARMX ;call routine with parameter NFS08 0135 8E8B v55 NFS08 0161 8EB5 84 A9 STY ROMA ;claim the call here NFS08 0135 8E8B v55 NFS08 0162 8EB7 60 NOWORD RTS -- NFS08 0163 8EB8 -- NFS08 0164 8EB8 ; Table of OSWORD calls -- NFS08 0165 8EB8 ;&70 : Call TRANSMIT -- NFS08 0166 8EB8 ;&71 : 0 Open Rxcb -- NFS08 0167 8EB8 ; : n Read Rxcb(n) -- NFS08 0168 8EB8 ;&72 : Read Routine arguments -- NFS08 0169 8EB8 ;&73 : 0 Read File Server Id -- NFS08 0170 8EB8 ; : 1 Set File Server Id -- NFS08 0171 8EB8 ; : 2 Read Printer Server Id -- NFS08 0172 8EB8 ; : 3 Set Printer Server Id -- NFS08 0173 8EB8 ; : 4 Read protection masks -- NFS08 0174 8EB8 ; : 5 Set protection masks -- NFS08 0175 8EB8 ; : 6 Read context handles -- NFS08 0176 8EB8 ; : 7 Set context handles -- NFS08 0177 8EB8 ; : 8 Read local station number -- NFS08 0178 8EB8 ; : 9 Read Routine arguments buffer size -- NFS08 0179 8EB8 ;&74 : DOFSOP type call -- NFS08 0180 8EB8 -- NFS08 0181 8EB8 -- NFS08 0182 8EB8 C1 WORDLO = CALLTX-&01 -- NFS08 0183 8EB9 7B = OPENRX-&01 -- NFS08 0184 8EBA DB = READRA-&01 -- NFS08 0185 8EBB 00 = RS-&01 -- NFS08 0186 8EBC EF = DOFS -&01 -- NFS08 0187 8EBD -- NFS08 0188 8EBD 8E WORDHI = /(CALLTX -&01 ) -- NFS08 0189 8EBE 8F = /(OPENRX -&01 ) -- NFS08 0190 8EBF 8E = /(READRA -&01 ) -- NFS08 0191 8EC0 8F = /(RS -&01 ) -- NFS08 0192 8EC1 8F = /(DOFS -&01 ) -- NFS08 0193 8EC2 -- NFS08 0194 8EC2 CALLTX ;initiate Tx, $F0,$F1 point at TXCB -- NFS08 0195 8EC2 -- NFS08 0196 8EC2 ; check Tx not already in progress -- NFS08 0197 8EC2 -- NFS08 0198 8EC2 0E 62 0D ASL TXCLR -- NFS08 0199 8EC5 98 TYA ;return error in block -- NFS08 0200 8EC6 90 34 BCC READRY ;skip Tx if sema claimed NFS08 0200 8EC6 v4B NFS08 0201 8EC8 NFS08 0200 8EC6 v4B NFS08 0202 8EC8 ;claim work area NFS08 0200 8EC6 v4B NFS08 0203 8EC8 NFS08 0200 8EC6 v4B NFS08 0204 8EC8 A5 9D LDA PAGE1 +&01 ;get pointer NFS08 0200 8EC6 v4B NFS08 0205 8ECA 85 AC STA UTIL3 +&01 NFS08 0200 8EC6 v4B NFS08 0206 8ECC 85 A1 STA LTXCBP +&01 ;copy direct into the pointer NFS08 0200 8EC6 v4B NFS08 0207 8ECE A9 6F LDAIM UTXCB NFS08 0200 8EC6 v4B NFS08 0208 8ED0 85 AB STA UTIL3 NFS08 0200 8EC6 v4B NFS08 0209 8ED2 85 A0 STA LTXCBP NFS08 0200 8EC6 v4B NFS08 0210 8ED4 NFS08 0200 8EC6 v4B NFS08 0211 8ED4 A2 0F LDXIM &0F ;copy 16 bytes, maybe immediate operation NFS08 0200 8EC6 v4B NFS08 0212 8ED6 20 1C 8F JSR COPY2 ;copy the data across NFS08 0200 8EC6 v4B NFS08 0213 8ED9 4C 30 96 JMP BRIANX ;call Brian NFS08 0200 8EC6 v4B NFS08 0214 8EDC NFS08 0200 8EC6 v4B NFS08 0215 8EDC READRA ;read the JSR arguments NFS08 0200 8EC6 v4B NFS08 0216 8EDC A5 9D LDA PAGE1 +&01 NFS08 0200 8EC6 v4B NFS08 0217 8EDE 85 AC STA UTIL3 +&01 NFS08 0200 8EC6 v4B NFS08 0218 8EE0 A0 7F LDYIM JSRSIZ NFS08 0200 8EC6 v4B NFS08 0219 8EE2 B1 9C LDAIY PAGE1 ;get the size of the buffer NFS08 0200 8EC6 v4B NFS08 0220 8EE4 C8 INY NFS08 0200 8EC6 v4B NFS08 0221 8EE5 84 AB STY UTIL3 NFS08 0200 8EC6 v4B NFS08 0222 8EE7 AA TAX NFS08 0200 8EC6 v4B NFS08 0223 8EE8 CA DEX NFS08 0200 8EC6 v4B NFS08 0224 8EE9 A0 00 LDYIM ZERO NFS08 0200 8EC6 v4B NFS08 0225 8EEB 20 1C 8F JSR COPY2 ;carry clear on entry NFS08 0200 8EC6 v4B NFS08 0226 8EEE 4C F0 92 JMP CLRJSR ;reset the old LSTAT byte NFS08 0200 8EC6 v4B NFS08 0227 8EF1 NFS08 0200 8EC6 v4B NFS08 0228 8EF1 READRB ;read the args size and the buffer size NFS08 0200 8EC6 v4B NFS08 0229 8EF1 A0 7F LDYIM JSRSIZ NFS08 0287 8F4C ^23 NFS08 0230 8EF3 B1 9C LDAIY PAGE1 ;get the args size NFS08 0287 8F4C ^23 NFS08 0231 8EF5 A0 01 LDYIM ONE NFS08 0287 8F4C ^23 NFS08 0232 8EF7 91 F0 STAIY &F0 NFS08 0287 8F4C ^23 NFS08 0233 8EF9 C8 INY NFS08 0287 8F4C ^23 NFS08 0234 8EFA A9 80 LDAIM &80 ;buffer size NFS08 0287 8F4C ^23 NFS08 0235 8EFC 91 F0 READRY STAIY &F0 NFS08 0287 8F4C ^23 NFS08 0236 8EFE 60 READRX RTS ;return store NFS08 0287 8F4C ^23 NFS08 0237 8EFF NFS08 0287 8F4C ^23 NFS08 0238 8EFF FF LOWP = FSLOCN -&01 NFS08 0287 8F4C ^23 NFS08 0239 8F00 01 = PSLOCN - &01 NFS08 0287 8F4C ^23 NFS08 0240 8F01 NFS08 0287 8F4C ^23 NFS08 0241 8F01 RS ;call to read|set state information NFS08 0287 8F4C ^23 NFS08 0242 8F01 C9 06 CMPIM &06 NFS08 0287 8F4C ^23 NFS08 0243 8F03 B0 41 BCS RSL1 NFS08 0287 8F4C ^23 NFS08 0244 8F05 C9 04 CMPIM &04 NFS08 0287 8F4C ^23 NFS08 0245 8F07 B0 22 BCS RSSL1 ;status byte read|set NFS08 0287 8F4C ^23 NFS08 0246 8F09 4A LSRA ;get data direction flow NFS08 NFS08 NFS08 NFS08 Acorn macro assembler Page 33 NFS08 OSWORD calls NFS08 NFS08 0287 8F4C ^23 NFS08 0247 8F0A A2 0D LDXIM /(FSLOCN - &01 ) NFS08 0287 8F4C ^23 NFS08 0248 8F0C A8 TAY NFS08 0287 8F4C ^23 NFS08 0249 8F0D F0 02 BEQ RSL3 NFS08 0287 8F4C ^23 NFS08 0250 8F0F A6 9F RSL4 LDX WORKP1 +&01 NFS08 0287 8F4C ^23 NFS08 0251 8F11 86 AC RSL3 STX UTIL3 +&01 NFS08 0287 8F4C ^23 NFS08 0252 8F13 B9 FF 8E LDAAY LOWP NFS08 0287 8F4C ^23 NFS08 0253 8F16 85 AB STA UTIL3 ;set up copy pointr NFS08 0287 8F4C ^23 NFS08 0254 8F18 A2 01 LDXIM &01 NFS08 0287 8F4C ^23 NFS08 0255 8F1A A0 01 LDYIM &01 NFS08 0287 8F4C ^23 NFS08 0256 8F1C NFS08 0287 8F4C ^23 NFS08 0257 8F1C 90 04 COPY2 BCC COPYL2 NFS08 0287 8F4C ^23 NFS08 0258 8F1E B1 F0 COPYL1 LDAIY &F0 NFS08 0287 8F4C ^23 NFS08 0259 8F20 91 AB STAIY UTIL3 NFS08 0287 8F4C ^23 NFS08 0260 8F22 ; BCS COPYL3 NFS08 0287 8F4C ^23 NFS08 0261 8F22 B1 AB COPYL2 LDAIY UTIL3 NFS08 0287 8F4C ^23 NFS08 0262 8F24 91 F0 STAIY &F0 NFS08 0287 8F4C ^23 NFS08 0263 8F26 C8 COPYL3 INY NFS08 0287 8F4C ^23 NFS08 0264 8F27 CA DEX NFS08 0287 8F4C ^23 NFS08 0265 8F28 10 F2 BPL COPY2 ;count via X NFS08 0287 8F4C ^23 NFS08 0266 8F2A 60 RTS ;goto exit routine NFS08 0287 8F4C ^23 NFS08 0267 8F2B NFS08 0287 8F4C ^23 NFS08 0268 8F2B 4A RSSL1 LSRA NFS08 0287 8F4C ^23 NFS08 0269 8F2C C8 INY NFS08 0287 8F4C ^23 NFS08 0270 8F2D B1 F0 LDAIY PARMX ;get the data parameter NFS08 0287 8F4C ^23 NFS08 0271 8F2F B0 05 BCS RSSL2 ;skip if SET operation NFS08 0287 8F4C ^23 NFS08 0272 8F31 AD 63 0D LDA LSTAT NFS08 0287 8F4C ^23 NFS08 0273 8F34 91 F0 STAIY PARMX ;else READ the flags NFS08 0287 8F4C ^23 NFS08 0274 8F36 8D 63 0D RSSL2 STA LSTAT NFS08 0287 8F4C ^23 NFS08 0275 8F39 8D 65 0D STA OLDJSR ;ammend old copy just in case NFS08 0287 8F4C ^23 NFS08 0276 8F3C 60 RSL3X RTS NFS08 0287 8F4C ^23 NFS08 0277 8F3D NFS08 0287 8F4C ^23 NFS08 0278 8F3D A0 14 RSL8 LDYIM SAVEHI - 1 NFS08 0287 8F4C ^23 NFS08 0279 8F3F B1 9C LDAIY PAGE1 NFS08 0287 8F4C ^23 NFS08 0280 8F41 A0 01 LDYIM &01 NFS08 0287 8F4C ^23 NFS08 0281 8F43 91 F0 STAIY PARMX ;return @ XY+1 NFS08 0287 8F4C ^23 NFS08 0282 8F45 60 RTS NFS08 0287 8F4C ^23 NFS08 0283 8F46 NFS08 0287 8F4C ^23 NFS08 0284 8F46 C9 08 RSL1 CMPIM &08 NFS08 0287 8F4C ^23 NFS08 0285 8F48 F0 F3 BEQ RSL8 NFS08 0287 8F4C ^23 NFS08 0286 8F4A C9 09 CMPIM &09 NFS08 0287 8F4C ^23 NFS08 0287 8F4C F0 A3 BEQ READRB ;return buffersize and argssize for JSR -- NFS08 0288 8F4E 10 19 BPL RSL10 ;error handler NFS08 0288 8F4E v66 NFS08 0289 8F50 ;must be read|set context handles NFS08 0288 8F4E v66 NFS08 0290 8F50 A0 03 LDYIM THREE NFS08 0288 8F4E v66 NFS08 0291 8F52 4A LSRA ;carry will determine which operation NFS08 0288 8F4E v66 NFS08 0292 8F53 90 1B BCC READC1 NFS08 0292 8F53 v64 NFS08 0293 8F55 84 A8 STY ROMY NFS08 0292 8F53 v64 NFS08 0294 8F57 A4 A8 SETC1 LDY ROMY NFS08 0292 8F53 v64 NFS08 0295 8F59 B1 F0 LDAIY PARMX NFS08 0292 8F53 v64 NFS08 0296 8F5B 20 9A 86 JSR Y2FSA NFS08 0292 8F53 v64 NFS08 0297 8F5E 98 TYA NFS08 0292 8F53 v64 NFS08 0298 8F5F A4 A8 LDY ROMY NFS08 0292 8F53 v64 NFS08 0299 8F61 99 01 0E STAAY URD -&01 ;changed format NFS08 0292 8F53 v64 NFS08 0300 8F64 C6 A8 DEC ROMY NFS08 0292 8F53 v64 NFS08 0301 8F66 D0 EF BNE SETC1 NFS08 0292 8F53 v64 NFS08 0302 8F68 60 RTS NFS08 0292 8F53 v64 NFS08 0303 8F69 NFS08 0292 8F53 v64 NFS08 0304 8F69 C8 RSL10 INY NFS08 0292 8F53 v64 NFS08 0305 8F6A AD 09 0E LDA ERROR ;last error found NFS08 0292 8F53 v64 NFS08 0306 8F6D 91 F0 STAIY PARMX NFS08 0292 8F53 v64 NFS08 0307 8F6F 60 RTS NFS08 0292 8F53 v64 NFS08 0308 8F70 NFS08 0292 8F53 v64 NFS08 0309 8F70 B9 01 0E READC1 LDAAY URD -&01 NFS08 0313 8F79 ^75 NFS08 0310 8F73 20 B7 86 JSR FS2A NFS08 0313 8F79 ^75 NFS08 0311 8F76 91 F0 STAIY PARMX NFS08 0313 8F79 ^75 NFS08 0312 8F78 88 DEY NFS08 0313 8F79 ^75 NFS08 0313 8F79 D0 F5 BNE READC1 -- NFS08 0314 8F7B 60 RTS -- NFS08 0315 8F7C -- NFS08 0316 8F7C OPENRX -- NFS08 0317 8F7C ;call to OPEN or READ an Rxcb -- NFS08 0318 8F7C ;If the call is for READ then the first -- NFS08 0319 8F7C ;byte of the CB contains the number of the -- NFS08 0320 8F7C ;block to be read. Otherwise the byte is zero. -- NFS08 0321 8F7C -- NFS08 0322 8F7C ;If the CB is already deleted then ZERO -- NFS08 0323 8F7C ;is returned in this byte. -- NFS08 0324 8F7C -- NFS08 0325 8F7C ;If the call is to OPEN then the CB number -- NFS08 0326 8F7C ;is returned here; if no CB's are free then -- NFS08 0327 8F7C ;ZERO is returned. -- NFS08 0328 8F7C -- NFS08 0329 8F7C -- NFS08 0330 8F7C A6 9F SETPP LDX WORKP1 +&01 ;static pointer -- NFS08 0331 8F7E 86 AC STX UTIL3 +&01 -- NFS08 0332 8F80 84 AB STY UTIL3 -- NFS08 0333 8F82 6E 64 0D ROR LFLAG ;System is off, so ROR turns off USER too -- NFS08 0334 8F85 B1 F0 LDAIY PARMX ;get the CB flag -- NFS08 0335 8F87 85 AA STA UTIL3 -&01 -- NFS08 0336 8F89 D0 1B BNE OPENL1 ;skip if call is to READ NFS08 0336 8F89 v64 NFS08 0337 8F8B NFS08 0336 8F89 v64 NFS08 0338 8F8B A9 03 LDAIM &03 ;blocks 0,1,2 dedicated NFS08 0336 8F89 v64 NFS08 0339 8F8D ;assumes pointer to RXCBV is set up NFS08 0336 8F89 v64 NFS08 0340 8F8D 20 55 8E SCAN0 JSR OFFSET ;returns Y=A*12 NFS08 0336 8F89 v64 NFS08 0341 8F90 B0 3D BCS OPENL4 NFS08 0341 8F90 v42 NFS08 0342 8F92 4A LSRA NFS08 0341 8F90 v42 NFS08 0343 8F93 4A LSRA NFS08 0341 8F90 v42 NFS08 0344 8F94 AA TAX ;save index NFS08 0341 8F90 v42 NFS08 0345 8F95 B1 AB LDAIY UTIL3 ;get flag byte NFS08 0341 8F90 v42 NFS08 0346 8F97 F0 36 BEQ OPENL4 ;0 terminator NFS08 0341 8F90 v42 NFS08 0347 8F99 C9 3F CMPIM &3F NFS08 0341 8F90 v42 NFS08 0348 8F9B F0 04 BEQ SCAN1 NFS08 0341 8F90 v42 NFS08 0349 8F9D E8 INX NFS08 0341 8F90 v42 NFS08 0350 8F9E 8A TXA NFS08 0341 8F90 v42 NFS08 0351 8F9F D0 EC BNE SCAN0 NFS08 0341 8F90 v42 NFS08 0352 8FA1 8A SCAN1 TXA ;A returns number of RXCB NFS08 0341 8F90 v42 NFS08 0353 8FA2 ;Y=offset of first free NFS08 0341 8F90 v42 NFS08 0354 8FA2 ;else Y=0 if all full NFS08 0341 8F90 v42 NFS08 0355 8FA2 A2 00 LDXIM ZERO NFS08 0341 8F90 v42 NFS08 0356 8FA4 81 F0 STAIX PARMX ;returns the CB number NFS08 0341 8F90 v42 NFS08 0357 8FA6 NFS08 0341 8F90 v42 NFS08 0358 8FA6 20 55 8E OPENL1 JSR OFFSET NFS08 0341 8F90 v42 NFS08 0359 8FA9 B0 24 BCS OPENL4 ;skip if block number too big NFS08 0341 8F90 v42 NFS08 0360 8FAB 88 DEY NFS08 0341 8F90 v42 NFS08 0361 8FAC 84 AB STY UTIL3 ;adjust pointer to allow space for RESBYT NFS08 0341 8F90 v42 NFS08 0362 8FAE NFS08 0341 8F90 v42 NFS08 0363 8FAE NFS08 0341 8F90 v42 NFS08 0364 8FAE A9 C0 LDAIM &C0 NFS08 0341 8F90 v42 NFS08 0365 8FB0 A0 01 LDYIM &01 NFS08 0341 8F90 v42 NFS08 0366 8FB2 A2 0B LDXIM &0B NFS08 0341 8F90 v42 NFS08 0367 8FB4 NFS08 NFS08 NFS08 NFS08 Acorn macro assembler Page 34 NFS08 OSWORD calls NFS08 NFS08 0341 8F90 v42 NFS08 0368 8FB4 C4 AA CPY UTIL3 -&01 ;[C=1 for OPEN] NFS08 0341 8F90 v42 NFS08 0369 8FB6 71 AB ADCIY UTIL3 ;[ V=(READ|1|0)] NFS08 0341 8F90 v42 NFS08 0370 8FB8 F0 03 BEQ OPENL6 ;[Z=1 if OPEN CB] NFS08 0341 8F90 v42 NFS08 0371 8FBA 30 0E BMI OPENL7 ;skip if OPEN NFS08 0341 8F90 v42 NFS08 0372 8FBC 18 OPENL8 CLC NFS08 0341 8F90 v42 NFS08 0373 8FBD 20 1C 8F OPENL6 JSR COPY2 NFS08 0341 8F90 v42 NFS08 0374 8FC0 NFS08 0341 8F90 v42 NFS08 0375 8FC0 B0 0F BCS OPENL5 ;skip if OPENing CB NFS08 0341 8F90 v42 NFS08 0376 8FC2 A9 3F LDAIM &3F NFS08 0341 8F90 v42 NFS08 0377 8FC4 A0 01 LDYIM &01 NFS08 0341 8F90 v42 NFS08 0378 8FC6 91 AB STAIY UTIL3 ;delete the CB if READing NFS08 0341 8F90 v42 NFS08 0379 8FC8 D0 07 BNE OPENL5 NFS08 0341 8F90 v42 NFS08 0380 8FCA NFS08 0341 8F90 v42 NFS08 0381 8FCA 69 01 OPENL7 ADCIM ONE ;[C=0, A=&FF on error] NFS08 0341 8F90 v42 NFS08 0382 8FCC D0 EE BNE OPENL8 ;else READ anyway NFS08 0341 8F90 v42 NFS08 0383 8FCE 88 DEY NFS08 0341 8F90 v42 NFS08 0384 8FCF 91 F0 OPENL4 STAIY PARMX ;return ZERO, error here NFS08 0375 8FC0 v70 NFS08 0385 8FD1 NFS08 0375 8FC0 v70 NFS08 0386 8FD1 2E 64 0D OPENL5 ROL LFLAG ;restore flag byte -- NFS08 0387 8FD4 60 RTS -- NFS08 0388 8FD5 -- NFS08 0389 8FD5 SETPPP ;C=1 on entry -- NFS08 0390 8FD5 A0 1C LDYIM UFSCB + LPTR -- NFS08 0391 8FD7 A5 F0 LDA PARMX -- NFS08 0392 8FD9 69 01 ADCIM ONE -- NFS08 0393 8FDB 20 E6 8F JSR SETPP1 -- NFS08 0394 8FDE A0 01 LDYIM ONE -- NFS08 0395 8FE0 B1 F0 LDAIY PARMX ;add the size -- NFS08 0396 8FE2 A0 20 LDYIM UFSCB + HPTR -- NFS08 0397 8FE4 65 F0 ADC PARMX ;add on base address -- NFS08 0398 8FE6 91 9E SETPP1 STAIY WORKP1 -- NFS08 0399 8FE8 C8 INY -- NFS08 0400 8FE9 A5 F1 LDA PARMY -- NFS08 0401 8FEB 69 00 ADCIM ZERO -- NFS08 0402 8FED 91 9E STAIY WORKP1 -- NFS08 0403 8FEF 60 RTS -- NFS08 0404 8FF0 -- NFS08 0405 8FF0 C9 01 DOFS CMPIM ONE -- NFS08 0406 8FF2 B0 4A BCS SENDST NFS08 0406 8FF2 v35 NFS08 0407 8FF4 A0 23 LDYIM UFSCB +&0B NFS08 0406 8FF2 v35 NFS08 0408 8FF6 B9 95 83 DOFS01 LDAAY TXTAB - UFSCB NFS08 0406 8FF2 v35 NFS08 0409 8FF9 D0 03 BNE DOFS04 NFS08 0406 8FF2 v35 NFS08 0410 8FFB B9 E6 0D LDAAY FSLOCN - UFSCB-&02 ;fill in destination NFS08 0406 8FF2 v35 NFS08 0411 8FFE 91 9E DOFS04 STAIY WORKP1 ;set up control block number 2 NFS08 0406 8FF2 v35 NFS08 0412 9000 88 DEY NFS08 0406 8FF2 v35 NFS08 0413 9001 C0 17 CPYIM UFSCB -&01 NFS08 0406 8FF2 v35 NFS08 0414 9003 D0 F1 BNE DOFS01 NFS08 0406 8FF2 v35 NFS08 0415 9005 C8 INY NFS08 0406 8FF2 v35 NFS08 0416 9006 84 9A STY TXCBP ;need this later NFS08 0406 8FF2 v35 NFS08 0417 9008 NFS08 0406 8FF2 v35 NFS08 0418 9008 20 D5 8F JSR SETPPP NFS08 0406 8FF2 v35 NFS08 0419 900B NFS08 0406 8FF2 v35 NFS08 0420 900B ;**** control block now set up **** NFS08 0406 8FF2 v35 NFS08 0421 900B NFS08 0406 8FF2 v35 NFS08 0422 900B A0 02 LDYIM TWO NFS08 0406 8FF2 v35 NFS08 0423 900D A9 90 LDAIM PREPLY NFS08 0406 8FF2 v35 NFS08 0424 900F 85 97 STA ESCAP ;** 9/12/83 ** NFS08 0406 8FF2 v35 NFS08 0425 9011 91 F0 STAIY PARMX ;reply port NFS08 0406 8FF2 v35 NFS08 0426 9013 C8 INY NFS08 0406 8FF2 v35 NFS08 0427 9014 C8 INY NFS08 0406 8FF2 v35 NFS08 0428 9015 B9 FE 0D DOFS02 LDAAY URD - &04 ;Y=4 on entry NFS08 0406 8FF2 v35 NFS08 0429 9018 91 F0 STAIY PARMX ;fill in the handles NFS08 0406 8FF2 v35 NFS08 0430 901A C8 INY NFS08 0406 8FF2 v35 NFS08 0431 901B C0 07 CPYIM &07 NFS08 0406 8FF2 v35 NFS08 0432 901D D0 F6 BNE DOFS02 ;copy handles as well NFS08 0406 8FF2 v35 NFS08 0433 901F NFS08 0406 8FF2 v35 NFS08 0434 901F A5 9F LDA WORKP1 +&01 ;pointer to page NFS08 0406 8FF2 v35 NFS08 0435 9021 85 9B STA TXCBP +&01 ;should be around $10,$11 NFS08 0406 8FF2 v35 NFS08 0436 9023 58 CLI NFS08 0406 8FF2 v35 NFS08 0437 9024 20 FF 85 JSR XMITFS ;send the data NFS08 0406 8FF2 v35 NFS08 0438 9027 NFS08 0406 8FF2 v35 NFS08 0439 9027 A0 20 LDYIM UFSCB +&08 NFS08 0406 8FF2 v35 NFS08 0440 9029 A9 FF LDAIM FILLER NFS08 0406 8FF2 v35 NFS08 0441 902B 91 9E STAIY WORKP1 NFS08 0406 8FF2 v35 NFS08 0442 902D C8 INY NFS08 0406 8FF2 v35 NFS08 0443 902E 91 9E STAIY WORKP1 ;arbitrary top bound on the buffer NFS08 0406 8FF2 v35 NFS08 0444 9030 NFS08 0406 8FF2 v35 NFS08 0445 9030 A0 19 LDYIM UFSCB +&01 NFS08 0406 8FF2 v35 NFS08 0446 9032 A9 90 LDAIM PREPLY NFS08 0406 8FF2 v35 NFS08 0447 9034 91 9E STAIY WORKP1 NFS08 0406 8FF2 v35 NFS08 0448 9036 88 DEY NFS08 0406 8FF2 v35 NFS08 0449 9037 A9 7F LDAIM RXRDY NFS08 0406 8FF2 v35 NFS08 0450 9039 91 9E STAIY WORKP1 NFS08 0406 8FF2 v35 NFS08 0451 903B 4C 30 85 JMP WAITFS ;poll the control block NFS08 0406 8FF2 v35 NFS08 0452 903E NFS08 0406 8FF2 v35 NFS08 0453 903E ;return, all done when data returned NFS08 0406 8FF2 v35 NFS08 0454 903E NFS08 0406 8FF2 v35 NFS08 0455 903E SENDST ;routine to send a string to a remote m/c NFS08 0406 8FF2 v35 NFS08 0456 903E ;and put it into the command buffer, to allow poking NFS08 0406 8FF2 v35 NFS08 0457 903E ;of BASIC programs etc. NFS08 0406 8FF2 v35 NFS08 0458 903E NFS08 0406 8FF2 v35 NFS08 0459 903E 08 PHP ;save Zflag -- NFS08 0460 903F A0 01 LDYIM ONE ;index byte is one -- NFS08 0461 9041 B1 F0 LDAIY PARMX ;get destination -- NFS08 0462 9043 AA TAX -- NFS08 0463 9044 C8 INY -- NFS08 0464 9045 B1 F0 LDAIY PARMX ;and NET number -- NFS08 0465 9047 -- NFS08 0466 9047 C8 INY -- NFS08 0467 9048 84 AB STY UTIL3 ;saved area, string index -- NFS08 0468 904A -- NFS08 0469 904A A0 72 LDYIM UTXCB +&03 -- NFS08 0470 904C 91 9C STAIY PAGE1 -- NFS08 0471 904E 88 DEY -- NFS08 0472 904F 8A TXA ;old value -- NFS08 0473 9050 91 9C STAIY PAGE1 ;all done -- NFS08 0474 9052 28 PLP -- NFS08 0475 9053 D0 1C BNE DOFS2 NFS08 0475 9053 v63 NFS08 0476 9055 NFS08 0475 9053 v63 NFS08 0477 9055 A4 AB SENDS1 LDY UTIL3 NFS08 0475 9053 v63 NFS08 0478 9057 E6 AB INC UTIL3 NFS08 0475 9053 v63 NFS08 0479 9059 B1 F0 LDAIY PARMX NFS08 0475 9053 v63 NFS08 0480 905B F0 13 BEQ SENDS2 ;look for zero byte NFS08 0475 9053 v63 NFS08 0481 905D A0 7D LDYIM UTXCB +&0E ;buffer for char NFS08 0475 9053 v63 NFS08 0482 905F 91 9C STAIY PAGE1 ;move string to buffer char by char NFS08 0475 9053 v63 NFS08 0483 9061 48 PHA ;save this NFS08 0475 9053 v63 NFS08 0484 9062 20 7F 91 JSR CBSET ;JSR this char across to remote m/c NFS08 0475 9053 v63 NFS08 0485 9065 [ &FF=0 NFS08 0475 9053 v63 NFS08 0488 9065 | NFS08 0475 9053 v63 NFS08 0489 9065 20 7C 90 JSR DOFSXM NFS08 0475 9053 v63 NFS08 0490 9068 ] NFS08 NFS08 NFS08 NFS08 Acorn macro assembler Page 35 NFS08 OSWORD calls NFS08 NFS08 0475 9053 v63 NFS08 0491 9068 CA SENDXX DEX NFS08 0475 9053 v63 NFS08 0492 9069 D0 FD BNE SENDXX ;slight delay loop NFS08 0475 9053 v63 NFS08 0493 906B 68 PLA NFS08 0475 9053 v63 NFS08 0494 906C 49 0D EORIM CR ;look for CR NFS08 0475 9053 v63 NFS08 0495 906E D0 E5 BNE SENDS1 ;loop until done [ <256 chars ] NFS08 0475 9053 v63 NFS08 0496 9070 60 SENDS2 RTS NFS08 0475 9053 v63 NFS08 0497 9071 NFS08 0475 9053 v63 NFS08 0498 9071 20 7F 91 DOFS2 JSR CBSET ;set up the CB -- NFS08 0499 9074 A0 7B LDYIM UTXCB +&0C -- NFS08 0500 9076 B1 9C LDAIY PAGE1 ;ammend proc call -- NFS08 0501 9078 69 03 ADCIM &03 ;C=0 here -- NFS08 0502 907A 91 9C STAIY PAGE1 ;number = 3 -- NFS08 0503 907C 58 DOFSXM CLI -- NFS08 0504 907D 4C FF 85 JMP XMITFS -- NFS08 0505 9080 -- NFS08 0506 9080 LNK NFS09 -- NFS09 0001 9080 -- NFS09 0002 9080 ; > NFS09 -- NFS09 0003 9080 TTL Remote Control - Computer end -- NFS09 0004 9080 OPT NETZ NFS09 NFS09 NFS09 NFS09 Acorn macro assembler Page 36 NFS09 Remote Control - Computer end NFS09 -- NFS09 0005 9080 -- NFS09 0006 9080 -- NFS09 0007 9080 ;This code is indirected from the NETVEC -- NFS09 0008 9080 ;currently located at $0224. All regs and -- NFS09 0009 9080 ;flags are preserved except where essential. -- NFS09 0010 9080 -- NFS09 0011 9080 ;When a computer has control of a remote M/c -- NFS09 0012 9080 ;then it is said to be acting as a terminal. -- NFS09 0013 9080 ;The computer over which it has control is termed -- NFS09 0014 9080 ;the computer. All that the terminal does is -- NFS09 0015 9080 ;to poll its RRxcb like a dork until some -- NFS09 0016 9080 ;request from the computer is received.When this -- NFS09 0017 9080 ;occurs it is serviced and the RRxcb reopened. -- NFS09 0018 9080 -- NFS09 0019 9080 ENTRY -- NFS09 0020 9080 08 PHP -- NFS09 0021 9081 48 PHA -- NFS09 0022 9082 8A TXA -- NFS09 0023 9083 48 PHA -- NFS09 0024 9084 98 TYA -- NFS09 0025 9085 48 PHA ;save all registers -- NFS09 0026 9086 BA TSX ;get reason code -- NFS09 0027 9087 BD 03 01 LDAAX &0103 ;from the stack -- NFS09 0028 908A C9 09 CMPIM &09 -- NFS09 0029 908C B0 04 BCS ENTRY1 ;check inbounds NFS09 0029 908C v7B NFS09 0030 908E AA TAX NFS09 0029 908C v7B NFS09 0031 908F 20 99 90 JSR GO NFS09 0029 908C v7B NFS09 0032 9092 68 ENTRY1 PLA -- NFS09 0033 9093 A8 TAY -- NFS09 0034 9094 68 PLA ;get results from stack -- NFS09 0035 9095 AA TAX -- NFS09 0036 9096 68 PLA -- NFS09 0037 9097 28 PLP -- NFS09 0038 9098 60 RTS ;restore status -- NFS09 0039 9099 -- NFS09 0040 9099 BD AD 90 GO LDAAX TABHIZ -- NFS09 0041 909C 48 PHA -- NFS09 0042 909D BD A4 90 LDAAX TABLOZ -- NFS09 0043 90A0 48 PHA -- NFS09 0044 90A1 A5 EF LDA PARMA ;space saver -- NFS09 0045 90A3 60 RTS -- NFS09 0046 90A4 -- NFS09 0047 90A4 TABLOZ -- NFS09 0048 90A4 F5 = RTTS -&01 -- NFS09 0049 90A5 E9 = PRINT -&01 ;chars in printer buffer -- NFS09 0050 90A6 E9 = PRINT -&01 ;control-B -- NFS09 0051 90A7 E9 = PRINT -&01 ;control-C -- NFS09 0052 90A8 B5 = NWRCH -&01 ;net write char -- NFS09 0053 90A9 DA = SELECT -&01 ;printer selection changed -- NFS09 0054 90AA F5 = RTTS -&01 ;net read char -- NFS09 0055 90AB E7 = NBYTE -&01 ;net OSBYTE call -- NFS09 0056 90AC 53 = NWORD -&01 ;net OSWORD call -- NFS09 0057 90AD -- NFS09 0058 90AD TABHIZ -- NFS09 0059 90AD 80 = /(RTTS -&01 ) -- NFS09 0060 90AE 91 = /(PRINT -&01 ) -- NFS09 0061 90AF 91 = /(PRINT -&01 ) -- NFS09 0062 90B0 91 = /(PRINT -&01 ) -- NFS09 0063 90B1 90 = /(NWRCH -&01 ) -- NFS09 0064 90B2 91 = /(SELECT -&01 ) -- NFS09 0065 90B3 80 = /(RTTS -&01 ) -- NFS09 0066 90B4 90 = /(NBYTE -&01 ) -- NFS09 0067 90B5 91 = /(NWORD -&01 ) -- NFS09 0068 90B6 -- NFS09 0069 90B6 ;WORKP1 is a pointer to the dynamic work area -- NFS09 0070 90B6 ;above the Filing system. The 0-page is dedicated -- NFS09 0071 90B6 ;to ECONET use only, so the pointer will be -- NFS09 0072 90B6 ;set up at AUTOBOOT and remain constant. -- NFS09 0073 90B6 -- NFS09 0074 90B6 NWRCH -- NFS09 0075 90B6 ;write a char, passed in Y. -- NFS09 0076 90B6 BA TSX ;grab the stack pointer -- NFS09 0077 90B7 7E 06 01 RORAX &0106 -- NFS09 0078 90BA 1E 06 01 ASLAX &0106 ;zero carry in Pbyte -- NFS09 0079 90BD 98 TYA -- NFS09 0080 90BE A0 DA LDYIM DATA1 ;offset in work area -- NFS09 0081 90C0 91 9E STAIY WORKP1 ;buffer the char -- NFS09 0082 90C2 A9 00 LDAIM RWRITE ;tag the packet -- NFS09 0083 90C4 -- NFS09 0084 90C4 A0 D9 NTX LDYIM BUFFER ;store the tag byte -- NFS09 0085 90C6 91 9E STAIY WORKP1 ;A passed in the call -- NFS09 0086 90C8 A9 80 LDAIM &80 -- NFS09 0087 90CA A0 0C LDYIM RTXCB ;offset of Remote T/Rxcb. -- NFS09 0088 90CC 91 9E STAIY WORKP1 ;set flag byte -- NFS09 0089 90CE -- NFS09 0090 90CE [ 0=0 -- NFS09 0091 90CE A5 9A LDA TXCBP ;save work area over call -- NFS09 0092 90D0 48 PHA -- NFS09 0093 90D1 A5 9B LDA TXCBP +&01 -- NFS09 0094 90D3 48 PHA -- NFS09 0095 90D4 ] -- NFS09 0096 90D4 -- NFS09 0097 90D4 84 9A STY TXCBP ;restore after use [was zero] -- NFS09 0098 90D6 A6 9F LDX WORKP1 +&01 ;pointer to the pointer -- NFS09 0099 90D8 86 9B STX TXCBP +&01 -- NFS09 0100 90DA 20 FF 85 JSR XMITFS ;do Tx, return to ENTRY -- NFS09 0101 90DD -- NFS09 0102 90DD A9 3F LDAIM &3F -- NFS09 0103 90DF 81 9A STAIX TXCBP ;reset CB to deleted -- NFS09 0104 90E1 -- NFS09 0105 90E1 [ 0=0 -- NFS09 0106 90E1 68 PLA ;restore it again after call -- NFS09 0107 90E2 85 9B STA TXCBP +&01 -- NFS09 0108 90E4 68 PLA -- NFS09 0109 90E5 85 9A STA TXCBP -- NFS09 0110 90E7 ] -- NFS09 0111 90E7 -- NFS09 0112 90E7 60 RTS -- NFS09 0113 90E8 -- NFS09 0114 90E8 NBYTE -- NFS09 0115 90E8 ;When a M/c is remoted there may be occasion -- NFS09 0116 90E8 ;when the computer wishes to adjust the output -- NFS09 0117 90E8 ;it gives, eg change the flash rates, scan -- NFS09 0118 90E8 ;the KB etc. To do this OSBYTE and OSWORD calls -- NFS09 0119 90E8 ;should be used. These are indirected across -- NFS09 0120 90E8 ;the net to the terminal end. On reception -- NFS09 0121 90E8 ;the calls are dealt with and the results passed -- NFS09 0122 90E8 ;back across the net to the computer. Funky, huh! -- NFS09 0123 90E8 -- NFS09 0124 90E8 ;Three bytes are passed, A,X,Y and the results -- NFS09 0125 90E8 ;are returned in X,Y. NFS09 NFS09 NFS09 NFS09 Acorn macro assembler Page 37 NFS09 Remote Control - Computer end NFS09 -- NFS09 0126 90E8 -- NFS09 0127 90E8 ;The parms are passed in PARMA, PARMX, PARMY. -- NFS09 0128 90E8 ;Calls are claimed by V=1 on return. -- NFS09 0129 90E8 -- NFS09 0130 90E8 ;This code deals with the computer end of -- NFS09 0131 90E8 ;such a transaction. OSBYTE and OSWORD calls -- NFS09 0132 90E8 ;are indicated by Tag number -- NFS09 0133 90E8 -- NFS09 0134 90E8 ;[N.B. Vflag clear on entry] -- NFS09 0135 90E8 -- NFS09 0136 90E8 A4 F1 NCALL LDY PARMY -- NFS09 0137 90EA C9 81 CMPIM &81 -- NFS09 0138 90EC F0 13 BEQ NCAL2 ;look for INKEY NFS09 0138 90EC v6C NFS09 0139 90EE A0 01 LDYIM &01 NFS09 0138 90EC v6C NFS09 0140 90F0 A2 09 NCAL1 LDXIM NCTBPL -NCALTB ;those calls returning Y>0 NFS09 0138 90EC v6C NFS09 0141 90F2 20 3C 91 JSR NCALLP ;loop NFS09 0138 90EC v6C NFS09 0142 90F5 F0 0A BEQ NCAL2 NFS09 0138 90EC v6C NFS09 0143 90F7 88 DEY NFS09 0138 90EC v6C NFS09 0144 90F8 88 DEY NFS09 0138 90EC v6C NFS09 0145 90F9 A2 0E LDXIM NCTBMI -NCALTB ;those calls returning Y<0 NFS09 0138 90EC v6C NFS09 0146 90FB 20 3C 91 JSR NCALLP ;loop NFS09 0138 90EC v6C NFS09 0147 90FE F0 01 BEQ NCAL2 NFS09 0138 90EC v6C NFS09 0148 9100 C8 INY NFS09 0138 90EC v6C NFS09 0149 9101 A2 02 NCAL2 LDXIM RBYTE1 -- NFS09 0150 9103 98 TYA ;set flags -- NFS09 0151 9104 -- NFS09 0152 9104 ;[Y=0, call not taken] -- NFS09 0153 9104 ;[Y>0, just looking] -- NFS09 0154 9104 ;[Y<0. change and claim call] -- NFS09 0155 9104 -- NFS09 0156 9104 F0 35 NCAL3 BEQ NBYTEX ;if call not recognised NFS09 0156 9104 v4A NFS09 0157 9106 08 PHP NFS09 0156 9104 v4A NFS09 0158 9107 10 01 BPL NBYTE6 NFS09 0156 9104 v4A NFS09 0159 9109 E8 INX NFS09 0156 9104 v4A NFS09 0160 910A A0 DC NBYTE6 LDYIM DATA3 ;copy Y,X,A NFS09 0156 9104 v4A NFS09 0161 910C NFS09 0156 9104 v4A NFS09 0162 910C B9 15 00 NBYTE1 LDAAY PARMA - DATA1 ;position independent NFS09 0156 9104 v4A NFS09 0163 910F 91 9E STAIY WORKP1 NFS09 0156 9104 v4A NFS09 0164 9111 88 DEY NFS09 0156 9104 v4A NFS09 0165 9112 C0 DA CPYIM DATA1 ;copy parms Y,X,A DATA1-3 NFS09 0156 9104 v4A NFS09 0166 9114 10 F6 BPL NBYTE1 ;buffer area NFS09 0156 9104 v4A NFS09 0167 9116 NFS09 0156 9104 v4A NFS09 0168 9116 8A NBYTE2 TXA ;previously stored tag NFS09 0156 9104 v4A NFS09 0169 9117 NFS09 0156 9104 v4A NFS09 0170 9117 20 C4 90 JSR NTX NFS09 0156 9104 v4A NFS09 0171 911A 28 PLP NFS09 0156 9104 v4A NFS09 0172 911B 10 1E BPL NBYTEX ;call to be done in BOTH M/c's NFS09 0156 9104 v4A NFS09 0173 911D NFS09 0156 9104 v4A NFS09 0174 911D A9 7F LDAIM &7F ;Changed 2/2/84 - JD NFS09 0156 9104 v4A NFS09 0175 911F A0 0C LDYIM RTXCB NFS09 0156 9104 v4A NFS09 0176 9121 91 9E STAIY WORKP1 NFS09 0156 9104 v4A NFS09 0177 9123 NFS09 0156 9104 v4A NFS09 0178 9123 B1 9E NRDCH2 LDAIY WORKP1 NFS09 0156 9104 v4A NFS09 0179 9125 10 FC BPL NRDCH2 ;poll for char NFS09 0156 9104 v4A NFS09 0180 9127 NFS09 0156 9104 v4A NFS09 0181 9127 BA TSX ;get the stack pointer NFS09 0156 9104 v4A NFS09 0182 9128 A0 DD LDYIM DATA4 NFS09 0156 9104 v4A NFS09 0183 912A NFS09 0156 9104 v4A NFS09 0184 912A B1 9E LDAIY WORKP1 ;get the parms NFS09 0156 9104 v4A NFS09 0185 912C 09 44 ORAIM &44 ;set Vflag and Ibit NFS09 0156 9104 v4A NFS09 0186 912E D0 04 BNE NBYTE5 NFS09 0156 9104 v4A NFS09 0187 9130 NFS09 0156 9104 v4A NFS09 0188 9130 88 NBYTE4 DEY NFS09 0156 9104 v4A NFS09 0189 9131 CA DEX NFS09 0156 9104 v4A NFS09 0190 9132 B1 9E LDAIY WORKP1 ;get the parms NFS09 0156 9104 v4A NFS09 0191 9134 9D 06 01 NBYTE5 STAAX &0106 ;return the registers and status NFS09 0156 9104 v4A NFS09 0192 9137 C0 DA CPYIM DATA1 NFS09 0156 9104 v4A NFS09 0193 9139 D0 F5 BNE NBYTE4 NFS09 0156 9104 v4A NFS09 0194 913B NFS09 0156 9104 v4A NFS09 0195 913B 60 NBYTEX RTS ;all set up so return -- NFS09 0196 913C -- NFS09 0197 913C DD 45 91 NCALLP CMPAX NCALTB NFS09 0200 9142 ^78 NFS09 0198 913F F0 03 BEQ NCALPX NFS09 0200 9142 ^78 NFS09 0199 9141 CA DEX NFS09 0200 9142 ^78 NFS09 0200 9142 10 F8 BPL NCALLP ;returns Z=1 on success NFS09 0198 913F v7C NFS09 0201 9144 60 NCALPX RTS NFS09 0234 915C ^66 NFS09 0202 9145 NFS09 0234 915C ^66 NFS09 0203 9145 04 NCALTB = &04 NFS09 0234 915C ^66 NFS09 0204 9146 09 = &09 NFS09 0234 915C ^66 NFS09 0205 9147 0A = &0A NFS09 0234 915C ^66 NFS09 0206 9148 ; = $14 NFS09 0234 915C ^66 NFS09 0207 9148 15 = &15 ;** 6/6/83 ** NFS09 0234 915C ^66 NFS09 0208 9149 9A = &9A NFS09 0234 915C ^66 NFS09 0209 914A 9B = &9B NFS09 0234 915C ^66 NFS09 0210 914B E1 = &E1 ;** 7/2/84 ** NFS09 0234 915C ^66 NFS09 0211 914C E2 = &E2 NFS09 0234 915C ^66 NFS09 0212 914D E3 = &E3 NFS09 0234 915C ^66 NFS09 0213 914E E4 NCTBPL = &E4 NFS09 0234 915C ^66 NFS09 0214 914F NFS09 0234 915C ^66 NFS09 0215 914F 0B = &0B NFS09 0234 915C ^66 NFS09 0216 9150 0C = &0C NFS09 0234 915C ^66 NFS09 0217 9151 0F = &0F NFS09 0234 915C ^66 NFS09 0218 9152 79 = &79 NFS09 0234 915C ^66 NFS09 0219 9153 7A NCTBMI = &7A NFS09 0234 915C ^66 NFS09 0220 9154 NFS09 0234 915C ^66 NFS09 0221 9154 NWORD NFS09 0234 915C ^66 NFS09 0222 9154 ;OSWORD calls intercepted in this manner NFS09 0234 915C ^66 NFS09 0223 9154 ;are 'make a sound' and 'define an envelope'. NFS09 0234 915C ^66 NFS09 0224 9154 ;As it is unlikely that such calls (or any NFS09 0234 915C ^66 NFS09 0225 9154 ;others) will need a result returning, NFS09 0234 915C ^66 NFS09 0226 9154 ;no mechanism is designed for this case. NFS09 0234 915C ^66 NFS09 0227 9154 NFS09 0234 915C ^66 NFS09 0228 9154 ;Vflag clear on entry NFS09 0234 915C ^66 NFS09 0229 9154 ;recognise calls A=7 or 8 only NFS09 0234 915C ^66 NFS09 0230 9154 A0 0E LDYIM &0E NFS09 0234 915C ^66 NFS09 0231 9156 C9 07 CMPIM &07 NFS09 0234 915C ^66 NFS09 0232 9158 F0 04 BEQ WORD1 NFS09 0234 915C ^66 NFS09 0233 915A C9 08 CMPIM &08 NFS09 0234 915C ^66 NFS09 0234 915C D0 E6 BNE NCALPX NFS09 0232 9158 v7B NFS09 0235 915E NFS09 0232 9158 v7B NFS09 0236 915E ;If WORDOK returns Z=1 then Y is set NFS09 0232 9158 v7B NFS09 0237 915E ;to be the number of parameters used in NFS09 0232 9158 v7B NFS09 0238 915E ;the call +1. NFS09 0232 9158 v7B NFS09 0239 915E NFS09 0232 9158 v7B NFS09 0240 915E A2 DB WORD1 LDXIM DATA2 -- NFS09 0241 9160 86 9E STX WORKP1 ;ammend pointer -- NFS09 0242 9162 -- NFS09 0243 9162 B1 F0 NWORD1 LDAIY PARMX ;get the data NFS09 0246 9167 ^79 NFS09 0244 9164 91 9E STAIY WORKP1 ;save it in the data area NFS09 0246 9167 ^79 NFS09 0245 9166 88 DEY NFS09 0246 9167 ^79 NFS09 0246 9167 10 F9 BPL NWORD1 ;loop until all done NFS09 NFS09 NFS09 NFS09 Acorn macro assembler Page 38 NFS09 Remote Control - Computer end NFS09 -- NFS09 0247 9169 C8 INY -- NFS09 0248 916A C6 9E DEC WORKP1 ;point to DATA1 -- NFS09 0249 916C A5 EF LDA PARMA ;call number -- NFS09 0250 916E 91 9E STAIY WORKP1 ;@ DATA1 -- NFS09 0251 9170 84 9E STY WORKP1 ;restore pointer=0 -- NFS09 0252 9172 -- NFS09 0253 9172 A0 14 LDYIM RTXCB +&08 ;ammend pointer -- NFS09 0254 9174 A9 E9 LDAIM DATA2 +&0E ;new end pointer -- NFS09 0255 9176 91 9E STAIY WORKP1 -- NFS09 0256 9178 A9 01 LDAIM RWORD ;tag the message -- NFS09 0257 917A 20 C4 90 JSR NTX -- NFS09 0258 917D -- NFS09 0259 917D 86 9E STX WORKP1 ;restore pointer -- NFS09 0260 917F [ &FF=0 -- NFS09 0262 917F ] -- NFS09 0263 917F -- NFS09 0264 917F -- NFS09 0265 917F ;************************* -- NFS09 0266 917F ;** Initialisation code ** -- NFS09 0267 917F ;************************* -- NFS09 0268 917F -- NFS09 0269 917F CBSET ;set up control blocks from table -- NFS09 0270 917F A2 0D LDXIM CB1 - CB0 ;first control offset -- NFS09 0271 9181 A0 7C LDYIM UTXCB +&0D ;send to this offset -- NFS09 0272 9183 2C B3 83 BIT ALL1S ;set Vflag -- NFS09 0273 9186 70 05 BVS CBSET2 ;common code NFS09 0273 9186 v7A NFS09 0274 9188 A0 17 CBSET1 LDYIM RTXCB +&0B NFS09 0273 9186 v7A NFS09 0275 918A A2 1A LDXIM CB2 - CB0 ;second offset in table NFS09 0273 9186 v7A NFS09 0276 918C B8 CBSETP CLV ;discriminate on V flag NFS09 0273 9186 v7A NFS09 0277 918D BD B4 91 CBSET2 LDAAX CB0 ;get entry NFS09 0294 91AE ^5D NFS09 0278 9190 C9 FE CMPIM CBSTOP NFS09 0294 91AE ^5D NFS09 0279 9192 F0 1C BEQ CBEXIT ;spare RTS NFS09 0294 91AE ^5D NFS09 0280 9194 C9 FD CMPIM CBSKIP NFS09 0294 91AE ^5D NFS09 0281 9196 F0 14 BEQ CBSET5 NFS09 0294 91AE ^5D NFS09 0282 9198 C9 FC CMPIM CBFILL NFS09 0294 91AE ^5D NFS09 0283 919A D0 08 BNE CBSET3 ;not dynamic char NFS09 0294 91AE ^5D NFS09 0284 919C A5 9D LDA PAGE1 +&01 NFS09 0294 91AE ^5D NFS09 0285 919E 70 02 BVS CBSET6 NFS09 0294 91AE ^5D NFS09 0286 91A0 A5 9F LDA WORKP1 +&01 NFS09 0294 91AE ^5D NFS09 0287 91A2 85 9B CBSET6 STA TXCBP +&01 NFS09 0294 91AE ^5D NFS09 0288 91A4 70 04 CBSET3 BVS CBSET4 NFS09 0294 91AE ^5D NFS09 0289 91A6 91 9E STAIY WORKP1 NFS09 0294 91AE ^5D NFS09 0290 91A8 50 02 BVC CBSET5 NFS09 0294 91AE ^5D NFS09 0291 91AA 91 9C CBSET4 STAIY PAGE1 NFS09 0294 91AE ^5D NFS09 0292 91AC 88 CBSET5 DEY NFS09 0294 91AE ^5D NFS09 0293 91AD CA DEX NFS09 0294 91AE ^5D NFS09 0294 91AE 10 DD BPL CBSET2 ;continue until STOP char NFS09 0279 9192 v63 NFS09 0295 91B0 C8 CBEXIT INY -- NFS09 0296 91B1 84 9A STY TXCBP ;TXCBP setup in this routine -- NFS09 0297 91B3 60 RTS -- NFS09 0298 91B4 -- NFS09 0299 91B4 CB0 -- NFS09 0300 91B4 85 = &85 -- NFS09 0301 91B5 00 = &00 -- NFS09 0302 91B6 FD = CBSKIP ;destination -- NFS09 0303 91B7 FD = CBSKIP -- NFS09 0304 91B8 7D = UTXCB +&0E -- NFS09 0305 91B9 FC = CBFILL ;dynamic page (1) -- NFS09 0306 91BA FF = &FF -- NFS09 0307 91BB FF = &FF -- NFS09 0308 91BC 7E = UTXCB +&0F -- NFS09 0309 91BD FC = CBFILL ;dynamic page (1) -- NFS09 0310 91BE FF = &FF -- NFS09 0311 91BF FF = &FF -- NFS09 0312 91C0 00 = &00 ;CHARIN call -- NFS09 0313 91C1 00 CB1 = &00 -- NFS09 0314 91C2 -- NFS09 0315 91C2 FE = CBSTOP -- NFS09 0316 91C3 80 = &80 -- NFS09 0317 91C4 93 = PREMOT ;remote port -- NFS09 0318 91C5 FD = CBSKIP ;spare space -- NFS09 0319 91C6 FD = CBSKIP ;controlling station -- NFS09 0320 91C7 D9 = BUFFER ;start of buffer -- NFS09 0321 91C8 FC = CBFILL -- NFS09 0322 91C9 FF = &FF -- NFS09 0323 91CA FF = &FF -- NFS09 0324 91CB DE = DATA4+&01 ;allow room for long OSword call -- NFS09 0325 91CC FC = CBFILL -- NFS09 0326 91CD FF = &FF -- NFS09 0327 91CE FF CB2 = &FF -- NFS09 0328 91CF -- NFS09 0329 91CF FE = CBSTOP -- NFS09 0330 91D0 D1 = &D1 -- NFS09 0331 91D1 FD = CBSKIP -- NFS09 0332 91D2 FD = CBSKIP -- NFS09 0333 91D3 1F = PBUFF ;manifest start of print buffer -- NFS09 0334 91D4 FD = CBSKIP ;'wrong' page here -- NFS09 0335 91D5 FF = &FF -- NFS09 0336 91D6 FF = &FF -- NFS09 0337 91D7 FD = CBSKIP ;already setup -- NFS09 0338 91D8 FD = CBSKIP -- NFS09 0339 91D9 FF = &FF -- NFS09 0340 91DA FF CB3 = &FF -- NFS09 0341 91DB -- NFS09 0342 91DB TTL Network Print Routine -- NFS09 0343 91DB OPT &01 -- NFS09 0344 91DB -- NFS09 0345 91DB ; 27/5/82 -- NFS09 0346 91DB ; During the course of this implementation -- NFS09 0347 91DB ; lots of changes have been made to the spec. -- NFS09 0348 91DB ; The latest of these requires that the PRINTER -- NFS09 0349 91DB ; BUFFER be in a seperate page, adjacent to the -- NFS09 0350 91DB ; page holding the Tx/Rx CB's. Ah well.. -- NFS09 0351 91DB -- NFS09 0352 91DB ; The page holding the PRINTER BUFFER is located -- NFS09 0353 91DB ; in the first static page, the Tx/Rx CB's are -- NFS09 0354 91DB ; in the second. -- NFS09 0355 91DB -- NFS09 0356 91DB ; This code and the REMOTE facility share the same -- NFS09 0357 91DB ; page of DYNAMICALLY allocated STATIC workspace -- NFS09 0358 91DB ; and so can access it by the same pointer in 0-page. -- NFS09 0359 91DB ; As it cannot be guarenteed that these activities -- NFS09 0360 91DB ; will not interfere, care must be taken to ensure that -- NFS09 0361 91DB ; the pointer (WORKP1) is never left corrupted. -- NFS09 0362 91DB -- NFS09 0363 91DB SELECT ;come here when print selection changes -- NFS09 0364 91DB CA DEX ;X=4 now -- NFS09 0365 91DC E4 F0 CPX PARMX ;look at new print selection -- NFS09 0366 91DE D0 07 BNE SETUP1 ;A=6 here NFS09 0366 91DE v78 NFS09 0367 91E0 A9 1F SETOK LDAIM PBUFF NFS09 0366 91DE v78 NFS09 0368 91E2 8D 61 0D STA PBUFFP ;initial pointer NFS09 NFS09 NFS09 NFS09 Acorn macro assembler Page 39 NFS09 Network Print Routine NFS09 NFS09 0366 91DE v78 NFS09 0369 91E5 A9 41 LDAIM &41 ;initial flag byte NFS09 0366 91DE v78 NFS09 0370 91E7 85 99 SETUP1 STA PFLAGS -- NFS09 0371 91E9 60 SELEX RTS NFS09 0418 9200 ^67 NFS09 0372 91EA NFS09 0418 9200 ^67 NFS09 0373 91EA PRINT NFS09 0418 9200 ^67 NFS09 0374 91EA ; ENTRY : A=1 char in buffer NFS09 0418 9200 ^67 NFS09 0375 91EA ; : A=2 control-B NFS09 0418 9200 ^67 NFS09 0376 91EA ; : A=3 control-C NFS09 0418 9200 ^67 NFS09 0377 91EA ; : Y=buffer number NFS09 0418 9200 ^67 NFS09 0378 91EA NFS09 0418 9200 ^67 NFS09 0379 91EA ;PFLAGS is the print status byte NFS09 0418 9200 ^67 NFS09 0380 91EA ; Bit7 = Sequence number NFS09 0418 9200 ^67 NFS09 0381 91EA ; Bit6 = 1 always NFS09 0418 9200 ^67 NFS09 0382 91EA ; Bit0 = 0 => print active NFS09 0418 9200 ^67 NFS09 0383 91EA NFS09 0418 9200 ^67 NFS09 0384 91EA C0 04 CPYIM FOUR ;buffer number NFS09 0418 9200 ^67 NFS09 0385 91EC D0 FB BNE SELEX NFS09 0418 9200 ^67 NFS09 0386 91EE NFS09 0418 9200 ^67 NFS09 0387 91EE ;********************** NFS09 0418 9200 ^67 NFS09 0388 91EE ; ENTER MAIN ROUTINE NFS09 0418 9200 ^67 NFS09 0389 91EE ;********************** NFS09 0418 9200 ^67 NFS09 0390 91EE NFS09 0418 9200 ^67 NFS09 0391 91EE PRINT2 NFS09 0418 9200 ^67 NFS09 0392 91EE NFS09 0418 9200 ^67 NFS09 0393 91EE ;********************* NFS09 0418 9200 ^67 NFS09 0394 91EE ; DETERMINE ACTION NFS09 0418 9200 ^67 NFS09 0395 91EE ;********************* NFS09 0418 9200 ^67 NFS09 0396 91EE NFS09 0418 9200 ^67 NFS09 0397 91EE 8A TXA NFS09 0418 9200 ^67 NFS09 0398 91EF CA DEX ;look for control code NFS09 0418 9200 ^67 NFS09 0399 91F0 D0 26 BNE PRINCC ;save status NFS09 0399 91F0 v59 NFS09 0400 91F2 NFS09 0399 91F0 v59 NFS09 0401 91F2 NFS09 0399 91F0 v59 NFS09 0402 91F2 ;******************* NFS09 0399 91F0 v59 NFS09 0403 91F2 ; SET EXIT CARRY NFS09 0399 91F0 v59 NFS09 0404 91F2 ;******************* NFS09 0399 91F0 v59 NFS09 0405 91F2 NFS09 0399 91F0 v59 NFS09 0406 91F2 BA TSX ;A=1 NFS09 0399 91F0 v59 NFS09 0407 91F3 1D 06 01 ORAAX &0106 ;set C=1 NFS09 0399 91F0 v59 NFS09 0408 91F6 9D 06 01 STAAX &0106 NFS09 0399 91F0 v59 NFS09 0409 91F9 NFS09 0399 91F0 v59 NFS09 0410 91F9 ;******************** NFS09 0399 91F0 v59 NFS09 0411 91F9 ; EMPTY PRINT BUFFER NFS09 0399 91F0 v59 NFS09 0412 91F9 ;******************** NFS09 0399 91F0 v59 NFS09 0413 91F9 NFS09 0399 91F0 v59 NFS09 0414 91F9 A9 91 PRLP1 LDAIM &91 NFS09 0399 91F0 v59 NFS09 0415 91FB A2 03 LDXIM THREE ;buffer number NFS09 0399 91F0 v59 NFS09 0416 91FD 20 F4 FF JSR OSBYTE ;returns char in Y NFS09 0399 91F0 v59 NFS09 0417 9200 NFS09 0399 91F0 v59 NFS09 0418 9200 B0 E7 BCS SELEX ;carry set => buffer empty NFS09 0399 91F0 v59 NFS09 0419 9202 98 TYA NFS09 0399 91F0 v59 NFS09 0420 9203 20 0F 92 JSR PRBUFF NFS09 0399 91F0 v59 NFS09 0421 9206 C0 6E CPYIM PSIZE +PBUFF -&01 ;test buffer full NFS09 0399 91F0 v59 NFS09 0422 9208 90 EF BCC PRLP1 ;continue until all chars buffered NFS09 0399 91F0 v59 NFS09 0423 920A NFS09 0399 91F0 v59 NFS09 0424 920A 20 37 92 JSR PRSEND ;Tx the data NFS09 0399 91F0 v59 NFS09 0425 920D NFS09 0399 91F0 v59 NFS09 0426 920D 90 EA BCC PRLP1 ;continue, maybe more chars in buffer NFS09 0399 91F0 v59 NFS09 0427 920F NFS09 0399 91F0 v59 NFS09 0428 920F AC 61 0D PRBUFF LDY PBUFFP NFS09 0399 91F0 v59 NFS09 0429 9212 91 9C STAIY PAGE1 NFS09 0399 91F0 v59 NFS09 0430 9214 EE 61 0D INC PBUFFP NFS09 0399 91F0 v59 NFS09 0431 9217 60 RTS NFS09 0399 91F0 v59 NFS09 0432 9218 NFS09 0399 91F0 v59 NFS09 0433 9218 PRINCC NFS09 0399 91F0 v59 NFS09 0434 9218 ;************************ NFS09 0399 91F0 v59 NFS09 0435 9218 ; CONTROL CHAR HERE NFS09 0399 91F0 v59 NFS09 0436 9218 ;************************ NFS09 0399 91F0 v59 NFS09 0437 9218 NFS09 0399 91F0 v59 NFS09 0438 9218 48 PHA ;save control char -- NFS09 0439 9219 8A TXA ;X=1 or 2 -- NFS09 0440 921A 49 01 EORIM &01 ;A=0 or 3 here -- NFS09 0441 921C 20 0F 92 JSR PRBUFF -- NFS09 0442 921F -- NFS09 0443 921F 45 99 EOR PFLAGS ;update the flags -- NFS09 0444 9221 6A RORA ;bit0 => carry -- NFS09 0445 9222 90 06 BCC PRIL1 ;if print condition=0 then skip NFS09 0445 9222 v79 NFS09 0446 9224 NFS09 0445 9222 v79 NFS09 0447 9224 2A ROLA NFS09 0445 9222 v79 NFS09 0448 9225 85 99 STA PFLAGS ;adjust PFLAGS for terminator flag NFS09 0445 9222 v79 NFS09 0449 9227 20 37 92 JSR PRSEND NFS09 0445 9222 v79 NFS09 0450 922A NFS09 0445 9222 v79 NFS09 0451 922A A5 99 PRIL1 LDA PFLAGS -- NFS09 0452 922C 29 F0 ANDIM &F0 -- NFS09 0453 922E 6A RORA -- NFS09 0454 922F AA TAX ;save this -- NFS09 0455 9230 68 PLA -- NFS09 0456 9231 6A RORA ;set up carry -- NFS09 0457 9232 8A TXA -- NFS09 0458 9233 2A ROLA ;into bit0 -- NFS09 0459 9234 85 99 STA PFLAGS -- NFS09 0460 9236 60 RTS ;other values restored so exit, DORMANT -- NFS09 0461 9237 -- NFS09 0462 9237 PRSEND -- NFS09 0463 9237 ;************************* -- NFS09 0464 9237 ; SEND THE BUFFER -- NFS09 0465 9237 ;************************* -- NFS09 0466 9237 -- NFS09 0467 9237 A0 08 LDYIM PTXCB +&08 -- NFS09 0468 9239 AD 61 0D LDA PBUFFP -- NFS09 0469 923C 91 9E STAIY WORKP1 -- NFS09 0470 923E A5 9D LDA PAGE1 +&01 -- NFS09 0471 9240 C8 INY -- NFS09 0472 9241 91 9E STAIY WORKP1 -- NFS09 0473 9243 A0 05 LDYIM PTXCB +&05 -- NFS09 0474 9245 91 9E STAIY WORKP1 -- NFS09 0475 9247 A0 0B LDYIM PTXCB +&0B -- NFS09 0476 9249 A2 26 LDXIM CB3 - CB0 -- NFS09 0477 924B 20 8C 91 JSR CBSETP ;returns Y=PTXCB +1 -- NFS09 0478 924E 88 DEY -- NFS09 0479 924F -- NFS09 0480 924F ;************************ -- NFS09 0481 924F ; UPDATE PFLAGS -- NFS09 0482 924F ;************************ -- NFS09 0483 924F -- NFS09 0484 924F A5 99 LDA PFLAGS -- NFS09 0485 9251 48 PHA -- NFS09 0486 9252 2A ROLA ;setup carry -- NFS09 0487 9253 68 PLA -- NFS09 0488 9254 49 80 EORIM &80 ;EOR top bit only -- NFS09 0489 9256 85 99 STA PFLAGS NFS09 NFS09 NFS09 NFS09 Acorn macro assembler Page 40 NFS09 Network Print Routine NFS09 -- NFS09 0490 9258 2A ROLA ;get flag byte for TX -- NFS09 0491 9259 91 9E STAIY WORKP1 ;update flag byte -- NFS09 0492 925B -- NFS09 0493 925B ;************************ -- NFS09 0494 925B ; SEND THE PACKET -- NFS09 0495 925B ;************************ -- NFS09 0496 925B -- NFS09 0497 925B A0 1F LDYIM PBUFF ;reset Pbuffp -- NFS09 0498 925D 8C 61 0D STY PBUFFP -- NFS09 0499 9260 -- NFS09 0500 9260 A9 00 LDAIM &00 ;pseudo-handle -- NFS09 0501 9262 AA TAX -- NFS09 0502 9263 A4 9F LDY WORKP1 +&01 ;point to PTXCB -- NFS09 0503 9265 -- NFS09 0504 9265 58 CLI ;enable interrupts -- NFS09 0505 9266 -- NFS09 0506 9266 BSXMIT -- NFS09 0507 9266 ;entry conditions -- NFS09 0508 9266 ;A = Handle -- NFS09 0509 9266 ;X,Y point to the control block -- NFS09 0510 9266 -- NFS09 0511 9266 ;A handle of Zero indicates a Print Stream -- NFS09 0512 9266 ;transaction. This sidesteps the SEQNOS -- NFS09 0513 9266 ;manipulation. -- NFS09 0514 9266 -- NFS09 0515 9266 86 9A STX TXCBP -- NFS09 0516 9268 84 9B STY TXCBP +&01 -- NFS09 0517 926A 48 PHA ;save acc -- NFS09 0518 926B 2D 08 0E AND SEQNOS -- NFS09 0519 926E F0 02 BEQ BSXL1 NFS09 0519 926E v7D NFS09 0520 9270 A9 01 LDAIM ONE NFS09 0519 926E v7D NFS09 0521 9272 A0 00 BSXL1 LDYIM ZERO -- NFS09 0522 9274 11 9A ORAIY TXCBP ;setup the flag byte -- NFS09 0523 9276 48 PHA -- NFS09 0524 9277 91 9A STAIY TXCBP ;put the flag byte back -- NFS09 0525 9279 20 FF 85 JSR XMITFS ;do the transmit -- NFS09 0526 927C -- NFS09 0527 927C A9 FF LDAIM FILLER ;The BGET/PUT byte fix !!! -- NFS09 0528 927E A0 08 LDYIM HPTR ;offset of 8 in CB -- NFS09 0529 9280 91 9A STAIY TXCBP -- NFS09 0530 9282 C8 INY -- NFS09 0531 9283 91 9A STAIY TXCBP ;ready for anything here -- NFS09 0532 9285 -- NFS09 0533 9285 68 PLA -- NFS09 0534 9286 AA TAX ;save it over next instr. -- NFS09 0535 9287 A0 D1 LDYIM PBLOCK ;ready for zero handle -- NFS09 0536 9289 68 PLA ;check handle or printer -- NFS09 0537 928A 48 PHA -- NFS09 0538 928B F0 02 BEQ BSPSX NFS09 0538 928B v7D NFS09 0539 928D A0 90 LDYIM PREPLY NFS09 0538 928B v7D NFS09 0540 928F 98 BSPSX TYA -- NFS09 0541 9290 A0 01 LDYIM &01 -- NFS09 0542 9292 91 9A STAIY TXCBP ;set port -- NFS09 0543 9294 8A TXA -- NFS09 0544 9295 88 DEY -- NFS09 0545 9296 48 PHA ;save flag on stack -- NFS09 0546 9297 A9 7F BSXL0 LDAIM RXRDY NFS09 0553 92A3 ^72 NFS09 0547 9299 91 9A STAIY TXCBP NFS09 0553 92A3 ^72 NFS09 0548 929B 20 30 85 JSR WAITFS ;receive into the CB NFS09 0553 92A3 ^72 NFS09 0549 929E 68 PLA NFS09 0553 92A3 ^72 NFS09 0550 929F 48 PHA ;save old flag just in case NFS09 0553 92A3 ^72 NFS09 0551 92A0 51 9A EORIY TXCBP NFS09 0553 92A3 ^72 NFS09 0552 92A2 6A RORA ;look at the lsb NFS09 0553 92A3 ^72 NFS09 0553 92A3 B0 F2 BCS BSXL0 -- NFS09 0554 92A5 68 PLA ;adjust stack -- NFS09 0555 92A6 68 PLA -- NFS09 0556 92A7 ; TAX ;** 22/8/83 ** -- NFS09 0557 92A7 ; INX ;look for X=0 here -- NFS09 0558 92A7 ; BEQ BSRTS -- NFS09 0559 92A7 4D 08 0E EOR SEQNOS ;update sequence number -- NFS09 0560 92AA 60 BSRTS RTS ;return with new SEQNOS in A -- NFS09 0561 92AB -- NFS09 0562 92AB LNK NFS10 -- NFS10 0001 92AB -- NFS10 0002 92AB ; NFS10 -- NFS10 0003 92AB OPT VIEW NFS10 NFS10 NFS10 NFS10 Acorn macro assembler Page 41 NFS10 Network Print Routine NFS10 -- NFS10 0004 92AB TTL VIEW - computer end -- NFS10 0005 92AB -- NFS10 0006 92AB -- NFS10 0007 92AB ; Second iteration of VIEW facility, started 27/7/82 -- NFS10 0008 92AB ; This version uses dynamically allocated buffer store -- NFS10 0009 92AB ; and so is much longer than would otherwise be the case. -- NFS10 0010 92AB -- NFS10 0011 92AB ; The flag to indicate data ready is the dedicated -- NFS10 0012 92AB ; pointer ($9E,9F). This is set to non-zero value -- NFS10 0013 92AB ; on entry to this code, reset to zero on exit. -- NFS10 0014 92AB ; Polling on these bytes indicates data-ready and -- NFS10 0015 92AB ; also where the buffer is located. -- NFS10 0016 92AB -- NFS10 0017 92AB ;**** The Viewed end **** -- NFS10 0018 92AB -- NFS10 0019 92AB ; NB this end must be user-transparent as the NFS may -- NFS10 0020 92AB ; not be the dominant Filing-system. -- NFS10 0021 92AB -- NFS10 0022 92AB CVIEW ;prefix 'C' implies 'computer end' [cf REMOTE] -- NFS10 0023 92AB A5 AD LDA UTIL5 ;save this as work area -- NFS10 0024 92AD 48 PHA -- NFS10 0025 92AE -- NFS10 0026 92AE A9 E9 LDAIM VBUFF ;offset of VIEW buffer -- NFS10 0027 92B0 85 9E STA WORKP1 ;resurect this pointer after use -- NFS10 0028 92B2 -- NFS10 0029 92B2 ;***** Reading the Palette ***** -- NFS10 0030 92B2 -- NFS10 0031 92B2 ;Nb this code is in the wrong order at present -- NFS10 0032 92B2 -- NFS10 0033 92B2 A0 00 LDYIM ZERO -- NFS10 0034 92B4 84 AD STY UTIL5 -- NFS10 0035 92B6 AD 50 03 LDA &350 -- NFS10 0036 92B9 91 9E STAIY WORKP1 -- NFS10 0037 92BB E6 9E INC WORKP1 -- NFS10 0038 92BD AD 51 03 LDA &351 -- NFS10 0039 92C0 48 PHA -- NFS10 0040 92C1 98 TYA -- NFS10 0041 92C2 -- NFS10 0042 92C2 91 9E CREAD2 STAIY WORKP1 ;update the CB NFS10 0059 92E1 ^5F NFS10 0043 92C4 A6 9E LDX WORKP1 NFS10 0059 92E1 ^5F NFS10 0044 92C6 A4 9F LDY WORKP1 +&01 NFS10 0059 92E1 ^5F NFS10 0045 92C8 A9 0B LDAIM &0B NFS10 0059 92E1 ^5F NFS10 0046 92CA 20 F1 FF JSR OSWORD NFS10 0059 92E1 ^5F NFS10 0047 92CD 68 PLA NFS10 0059 92E1 ^5F NFS10 0048 92CE A0 00 LDYIM ZERO NFS10 0059 92E1 ^5F NFS10 0049 92D0 91 9E STAIY WORKP1 ;restore previous result NFS10 0059 92E1 ^5F NFS10 0050 92D2 C8 INY NFS10 0059 92E1 ^5F NFS10 0051 92D3 B1 9E LDAIY WORKP1 ;preserve current result over next call NFS10 0059 92E1 ^5F NFS10 0052 92D5 48 PHA NFS10 0059 92E1 ^5F NFS10 0053 92D6 A6 9E LDX WORKP1 NFS10 0059 92E1 ^5F NFS10 0054 92D8 E6 9E INC WORKP1 NFS10 0059 92E1 ^5F NFS10 0055 92DA E6 AD INC UTIL5 ;increment the index NFS10 0059 92E1 ^5F NFS10 0056 92DC 88 DEY NFS10 0059 92E1 ^5F NFS10 0057 92DD A5 AD LDA UTIL5 NFS10 0059 92E1 ^5F NFS10 0058 92DF E0 F9 CPXIM VBUFF +&10 NFS10 0059 92E1 ^5F NFS10 0059 92E1 D0 DF BNE CREAD2 ;loop until buffer full -- NFS10 0060 92E3 68 PLA ;clean up the stack -- NFS10 0061 92E4 -- NFS10 0062 92E4 84 AD STY UTIL5 ;counter for OSbyte index -- NFS10 0063 92E6 E6 9E INC WORKP1 ;update the data pointer -- NFS10 0064 92E8 20 F7 92 JSR CREADS ;get the screen data -- NFS10 0065 92EB E6 9E INC WORKP1 -- NFS10 0066 92ED 68 PLA -- NFS10 0067 92EE 85 AD STA UTIL5 ;restore work area -- NFS10 0068 92F0 AD 65 0D CLRJSR LDA OLDJSR ;reset the JSR `uffer protection bits -- NFS10 0069 92F3 8D 63 0D STA LSTAT ; ... with old mask byte -- NFS10 0070 92F6 ; ... enable JSR's etc. again -- NFS10 0071 92F6 60 RTS ;return from the whole routine -- NFS10 0072 92F7 -- NFS10 0073 92F7 ;***** Reading screen parameters ***** -- NFS10 0074 92F7 -- NFS10 0075 92F7 AD 55 03 CREADS LDA &355 -- NFS10 0076 92FA 91 9E STAIY WORKP1 -- NFS10 0077 92FC AA TAX -- NFS10 0078 92FD 20 0A 93 JSR DOCALX -- NFS10 0079 9300 E6 9E INC WORKP1 -- NFS10 0080 9302 98 TYA -- NFS10 0081 9303 81 9E STAIX WORKP1 -- NFS10 0082 9305 20 08 93 JSR DOCALL -- NFS10 0083 9308 A2 00 DOCALL LDXIM ZERO ;**** main routine **** -- NFS10 0084 930A A4 AD DOCALX LDY UTIL5 -- NFS10 0085 930C E6 AD INC UTIL5 -- NFS10 0086 930E E6 9E INC WORKP1 -- NFS10 0087 9310 B9 1E 93 LDAAY BYTETB ;get OSBYTE number -- NFS10 0088 9313 A0 FF LDYIM &FF ;for READ&SET operations -- NFS10 0089 9315 20 F4 FF JSR OSBYTE -- NFS10 0090 9318 8A TXA -- NFS10 0091 9319 A2 00 LDXIM ZERO -- NFS10 0092 931B 81 9E STAIX WORKP1 ;save the data -- NFS10 0093 931D 60 RTS ;return -- NFS10 0094 931E -- NFS10 0095 931E 85 BYTETB = &85 -- NFS10 0096 931F C2 = &C2 -- NFS10 0097 9320 C3 = &C3 ;three calls to do -- NFS10 0098 9321 -- NFS10 0099 9321 ;****** End of VIEWED part ****** -- NFS10 0100 9321 LNK NFS11 -- NFS11 0001 9321 ; NFS11 -- NFS11 0002 9321 TTL TUBE code -- NFS11 0003 9321 OPT UADE51 NFS11 NFS11 NFS11 NFS11 Acorn macro assembler Page 42 NFS11 TUBE code NFS11 -- NFS11 0004 9321 > 2 ;object code to drive two -- NFS11 0005 9321 9321 ORG51 * . -- NFS11 0006 9321 9321 ZCODE * ORG51 -- NFS11 0007 9321 ORG ZPTUBE -- NFS11 0008 0016 0016 S51 * . ;measure the length -- NFS11 0009 0016 A9 FF NEWBR LDAIM &FF -- NFS11 0010 0018 20 9E 06 JSR WRIFOR -- NFS11 0011 001B AD E3 FE LDA R2DATA -- NFS11 0012 001E A9 00 LDAIM &00 -- NFS11 0013 0020 20 95 06 JSR RDCHA -- NFS11 0014 0023 A8 TAY -- NFS11 0015 0024 B1 FD LDAIY REPTR -- NFS11 0016 0026 20 95 06 JSR RDCHA -- NFS11 0017 0029 C8 NEWBA INY -- NFS11 0018 002A B1 FD LDAIY REPTR -- NFS11 0019 002C 20 95 06 JSR RDCHA -- NFS11 0020 002F AA TAX -- NFS11 0021 0030 D0 F7 BNE NEWBA -- NFS11 0022 0032 A2 FF TSTART LDXIM &FF -- NFS11 0023 0034 9A TXS -- NFS11 0024 0035 58 CLI -- NFS11 0025 0036 2C E0 FE MAIN BIT R1STAT -- NFS11 0026 0039 10 06 BPL MAINA -- NFS11 0027 003B AD E1 FE MAINB LDA R1DATA -- NFS11 0028 003E 20 EE FF JSR OSWRCH -- NFS11 0029 0041 2C E2 FE MAINA BIT R2STAT -- NFS11 0030 0044 10 F0 BPL MAIN -- NFS11 0031 0046 2C E0 FE BIT R1STAT -- NFS11 0032 0049 30 F0 BMI MAINB -- NFS11 0033 004B AE E3 FE LDX R2DATA -- NFS11 0034 004E 0050 JRAM * . +&02 -- NFS11 0035 004E 86 51 STX JRAM +&01 -- NFS11 0036 0050 6C 00 05 JMI TASKS ;JRAM defined here -- NFS11 0037 0053 00 SADR = &00 -- NFS11 0038 0054 80 = &80 -- NFS11 0039 0055 00 = &00 -- NFS11 0040 0056 00 = &00 -- NFS11 0041 0057 -- NFS11 0042 0057 0057 E51 * . -- NFS11 0043 0057 0041 LEN51 * E51 - S51 -- NFS11 0044 0057 -- NFS11 0045 0057 LNK NFS12 -- NFS12 0001 0057 ; -> NFS12 -- NFS12 0002 0057 -- NFS12 0003 0057 9362 ORG52 * ORG51 +LEN51 -- NFS12 0004 0057 ORG RTUBE -- NFS12 0005 0400 0400 S52 * . -- NFS12 0006 0400 4C 84 04 JMP BEGIN -- NFS12 0007 0403 4C A7 06 JMP ESCAPE -- NFS12 0008 0406 C9 80 ADRR CMPIM &80 -- NFS12 0009 0408 90 2B BCC ADDROK -- NFS12 0010 040A C9 C0 CMPIM &C0 -- NFS12 0011 040C B0 1A BCS ADDRW -- NFS12 0012 040E 09 40 ORAIM &40 -- NFS12 0013 0410 C5 15 CMP CLAIMER -- NFS12 0014 0412 D0 20 BNE ADDRWZ ;don't release, someone else (may of course be already released) -- NFS12 0015 0414 ADRREL -- NFS12 0016 0414 08 PHP ; ************************************ Bruce 27/2/86 ************* -- NFS12 0017 0415 78 SEI ; ************************************ Bruce 27/2/86 ************* -- NFS12 0018 0416 A9 05 LDAIM &05 ;tell 2nd processor transfer has stopped -- NFS12 0019 0418 20 9E 06 JSR WRIFOR -- NFS12 0020 041B A5 15 LDA CLAIMER -- NFS12 0021 041D 20 9E 06 JSR WRIFOR -- NFS12 0022 0420 28 PLP ; ************************************ Bruce 27/2/86 ************* -- NFS12 0023 0421 A9 80 ADRRAL LDAIM &80 -- NFS12 0024 0423 85 15 STA CLAIMER ;** 18/1/84 ** 2's bug in FS -- NFS12 0025 0425 85 14 STA CLAIMT -- NFS12 0026 0427 60 RTS -- NFS12 0027 0428 06 14 ADDRW ASL CLAIMT -- NFS12 0028 042A B0 06 BCS ADDRWA ;got it -- NFS12 0029 042C C5 15 CMP CLAIMER -- NFS12 0030 042E F0 04 BEQ ADDRWZ ;same loony again so tell him ok -- NFS12 0031 0430 18 CLC -- NFS12 0032 0431 60 RTS -- NFS12 0033 0432 85 15 ADDRWA STA CLAIMER -- NFS12 0034 0434 60 ADDRWZ RTS -- NFS12 0035 0435 08 ADDROK PHP ;**** Jes -- NFS12 0036 0436 78 SEI ;**** critical region -- NFS12 0037 0437 84 13 STY QRAM +&01 -- NFS12 0038 0439 86 12 STX QRAM -- NFS12 0039 043B 20 9E 06 JSR WRIFOR -- NFS12 0040 043E AA TAX -- NFS12 0041 043F A0 03 LDYIM &03 -- NFS12 0042 0441 A5 15 LDA CLAIMER ;inform 2nd processor of user -- NFS12 0043 0443 20 9E 06 JSR WRIFOR -- NFS12 0044 0446 B1 12 ADRRB LDAIY QRAM -- NFS12 0045 0448 20 9E 06 JSR WRIFOR -- NFS12 0046 044B 88 DEY -- NFS12 0047 044C 10 F8 BPL ADRRB -- NFS12 0048 044E ; JSR WRIFOR ;** 10/1/84 ** -- NFS12 0049 044E A0 18 LDYIM &18 ;clear M and V flags -- NFS12 0050 0450 8C E0 FE STY R1STAT -- NFS12 0051 0453 BD 18 05 LDAAX VSTATE ;tube flags state -- NFS12 0052 0456 8D E0 FE STA R1STAT -- NFS12 0053 0459 4A LSRA -- NFS12 0054 045A 4A LSRA -- NFS12 0055 045B 90 06 BCC ADRRWP -- NFS12 0056 045D 2C E5 FE BIT R3DATA ;** 10/1/84 ** -- NFS12 0057 0460 2C E5 FE BIT R3DATA ;** 10/1/84 ** -- NFS12 0058 0463 20 9E 06 ADRRWP JSR WRIFOR ;** 10/1/84 ** -- NFS12 0059 0466 2C E6 FE ADRRWT BIT R4STAT ;synchronising byte -- NFS12 0060 0469 50 FB BVC ADRRWT -- NFS12 0061 046B B0 0D BCS ADRRP -- NFS12 0062 046D E0 04 CPXIM &04 -- NFS12 0063 046F D0 11 BNE ANRTS -- NFS12 0064 0471 20 14 04 ADRRGO JSR ADRREL ; implicit release -- NFS12 0065 0474 20 95 06 JSR RDCHA -- NFS12 0066 0477 4C 32 00 JMP TSTART -- NFS12 0067 047A ADRRP ; BIT R3DATA ** 10/1/84 ** -- NFS12 0068 047A ; BIT R3DATA ** 10/1/84 ** -- NFS12 0069 047A 4A LSRA -- NFS12 0070 047B 90 05 BCC ANRTS -- NFS12 0071 047D A0 88 LDYIM &88 -- NFS12 0072 047F 8C E0 FE STY R1STAT ;set M flag -- NFS12 0073 0482 28 ANRTS PLP ;restore interrupt status *** Jes -- NFS12 0074 0483 60 RTS -- NFS12 0075 0484 58 BEGIN CLI -- NFS12 0076 0485 B0 11 BCS BEGINR ;carry preserved from BEGIN -- NFS12 0077 0487 D0 03 BNE BEGINK -- NFS12 0078 0489 4C 9C 05 JMP QRPLY -- NFS12 0079 048C BEGINK NFS12 NFS12 NFS12 NFS12 Acorn macro assembler Page 43 NFS12 TUBE code NFS12 -- NFS12 0080 048C [ 1=1 ; ************************************ Bruce 27/2/86 ********** -- NFS12 0081 048C A2 00 LDXIM &00 -- NFS12 0082 048E A0 FF LDYIM &FF -- NFS12 0083 0490 A9 FD LDAIM &FD -- NFS12 0084 0492 20 F4 FF JSR OSBYTE -- NFS12 0085 0495 8A TXA -- NFS12 0086 0496 | -- NFS12 0088 0496 ] -- NFS12 0089 0496 F0 D9 BEQ ADRRGO -- NFS12 0090 0498 A9 FF BEGINR LDAIM &FF ;***** -- NFS12 0091 049A 20 06 04 JSR ADRR ;***** -- NFS12 0092 049D 90 F9 BCC BEGINR ;***** -- NFS12 0093 049F ; SEI ; ************************************ Bruce 27/2/86 ************* -- NFS12 0094 049F 20 D2 04 JSR SETADR -- NFS12 0095 04A2 SENDW -- NFS12 0096 04A2 ; PHP ; ************************************ Bruce 27/2/86 ************* -- NFS12 0097 04A2 ; SEI ; ************************************ Bruce 27/2/86 ************* -- NFS12 0098 04A2 A9 07 LDAIM &07 -- NFS12 0099 04A4 20 CB 04 JSR TADDR -- NFS12 0100 04A7 A0 00 LDYIM &00 -- NFS12 0101 04A9 84 00 STY ZRAM -- NFS12 0102 04AB B1 00 SENDL LDAIY ZRAM -- NFS12 0103 04AD 8D E5 FE STA R3DATA -- NFS12 0104 04B0 [ 1=1 ; ************************************ Bruce 27/2/86 ************* -- NFS12 0105 04B0 EA NOP -- NFS12 0106 04B1 EA NOP -- NFS12 0107 04B2 EA NOP -- NFS12 0108 04B3 | -- NFS12 0111 04B3 ] -- NFS12 0112 04B3 C8 INY -- NFS12 0113 04B4 D0 F5 BNE SENDL -- NFS12 0114 04B6 ; PLP ; ************************************ Bruce 27/2/86 ************* -- NFS12 0115 04B6 E6 54 INC SADR +&01 -- NFS12 0116 04B8 D0 06 BNE SENDT -- NFS12 0117 04BA E6 55 INC SADR +&02 -- NFS12 0118 04BC D0 02 BNE SENDT -- NFS12 0119 04BE E6 56 INC SADR +&03 -- NFS12 0120 04C0 E6 01 SENDT INC ZRAM +&01 -- NFS12 0121 04C2 24 01 BIT ZRAM +&01 -- NFS12 0122 04C4 50 DC BVC SENDW -- NFS12 0123 04C6 20 D2 04 JSR SETADR -- NFS12 0124 04C9 A9 04 LDAIM &04 -- NFS12 0125 04CB A0 00 TADDR LDYIM /(SADR ) -- NFS12 0126 04CD A2 53 LDXIM SADR -- NFS12 0127 04CF 4C 06 04 JMP ADRR -- NFS12 0128 04D2 A9 80 SETADR LDAIM &80 -- NFS12 0129 04D4 85 54 STA SADR +&01 -- NFS12 0130 04D6 85 01 STA ZRAM +&01 -- NFS12 0131 04D8 A9 20 LDAIM &20 -- NFS12 0132 04DA 2D 06 80 AND &8006 -- NFS12 0133 04DD A8 TAY ;**** Jes -- NFS12 0134 04DE 84 53 STY SADR -- NFS12 0135 04E0 F0 19 BEQ BEGINA -- NFS12 0136 04E2 AE 07 80 LDX &8007 -- NFS12 0137 04E5 E8 BEGINL INX -- NFS12 0138 04E6 BD 00 80 LDAAX &8000 -- NFS12 0139 04E9 D0 FA BNE BEGINL -- NFS12 0140 04EB BD 01 80 LDAAX &8001 -- NFS12 0141 04EE 85 53 STA SADR -- NFS12 0142 04F0 BD 02 80 LDAAX &8002 -- NFS12 0143 04F3 85 54 STA SADR +&01 -- NFS12 0144 04F5 BC 03 80 LDYAX &8003 -- NFS12 0145 04F8 BD 04 80 LDAAX &8004 -- NFS12 0146 04FB 85 56 BEGINA STA SADR +&03 -- NFS12 0147 04FD 84 55 STY SADR +&02 -- NFS12 0148 04FF 60 RTS -- NFS12 0149 0500 -- NFS12 0150 0500 0500 E52 * . -- NFS12 0151 0500 0100 LEN52 * E52 - S52 -- NFS12 0152 0500 -- NFS12 0153 0500 LNK NFS13 -- NFS13 0001 0500 ; > NFS13 -- NFS13 0002 0500 0480 Q * RTUBE +&80 -- NFS13 0003 0500 0500 QTUBE * RTUBE+&100 -- NFS13 0004 0500 9462 ORG53 * ORG52 +LEN52 -- NFS13 0005 0500 ORG QTUBE -- NFS13 0006 0500 0500 S53 * . -- NFS13 0007 0500 37 05 TASKS & RDCHZ -- NFS13 0008 0502 96 05 & CLI -- NFS13 0009 0504 F2 05 & SBYTE -- NFS13 0010 0506 07 06 & BYTE -- NFS13 0011 0508 27 06 & WORD -- NFS13 0012 050A 68 06 & RDLN -- NFS13 0013 050C 5E 05 & ARGS -- NFS13 0014 050E 2D 05 & BGET -- NFS13 0015 0510 20 05 & BPUT -- NFS13 0016 0512 42 05 & FIND -- NFS13 0017 0514 A9 05 & FILE -- NFS13 0018 0516 D1 05 & GBPB -- NFS13 0019 0518 86 VSTATE = &86 -- NFS13 0020 0519 88 = &88 -- NFS13 0021 051A 96 = &96 -- NFS13 0022 051B 98 = &98 -- NFS13 0023 051C 18 = &18 -- NFS13 0024 051D 18 = &18 -- NFS13 0025 051E 82 = &82 -- NFS13 0026 051F 18 = &18 -- NFS13 0027 0520 20 C5 06 BPUT JSR NEWRC -- NFS13 0028 0523 A8 TAY -- NFS13 0029 0524 20 C5 06 JSR NEWRC -- NFS13 0030 0527 20 D4 FF JSR OSBPUT -- NFS13 0031 052A 4C 9C 05 JMP QRPLY -- NFS13 0032 052D 20 C5 06 BGET JSR NEWRC -- NFS13 0033 0530 A8 TAY -- NFS13 0034 0531 20 D7 FF JSR OSBGET -- NFS13 0035 0534 4C 3A 05 JMP RDCHY -- NFS13 0036 0537 20 E0 FF RDCHZ JSR OSRDCH -- NFS13 0037 053A 6A RDCHY RORA ;send C and A and go back to MAIN -- NFS13 0038 053B 20 95 06 JSR RDCHA -- NFS13 0039 053E 2A ROLA -- NFS13 0040 053F 4C 9E 05 JMP RPLY -- NFS13 0041 0542 20 C5 06 FIND JSR NEWRC -- NFS13 0042 0545 F0 0B BEQ FINDA -- NFS13 0043 0547 48 PHA -- NFS13 0044 0548 20 82 05 JSR STRNG -- NFS13 0045 054B 68 PLA -- NFS13 0046 054C 20 CE FF JSR OSFIND -- NFS13 0047 054F 4C 9E 05 JMP RPLY -- NFS13 0048 0552 20 C5 06 FINDA JSR NEWRC -- NFS13 0049 0555 A8 TAY -- NFS13 0050 0556 A9 00 LDAIM &00 NFS13 NFS13 NFS13 NFS13 Acorn macro assembler Page 44 NFS13 TUBE code NFS13 -- NFS13 0051 0558 20 CE FF JSR OSFIND -- NFS13 0052 055B 4C 9C 05 JMP QRPLY -- NFS13 0053 055E 20 C5 06 ARGS JSR NEWRC -- NFS13 0054 0561 A8 TAY -- NFS13 0055 0562 A2 04 LDXIM &04 -- NFS13 0056 0564 20 C5 06 ARGSW JSR NEWRC -- NFS13 0057 0567 95 FF STAZX &FF ;ZRAM-%1 -- NFS13 0058 0569 CA DEX -- NFS13 0059 056A D0 F8 BNE ARGSW -- NFS13 0060 056C 20 C5 06 JSR NEWRC -- NFS13 0061 056F 20 DA FF JSR OSARGX -- NFS13 0062 0572 20 95 06 JSR RDCHA -- NFS13 0063 0575 A2 03 LDXIM &03 -- NFS13 0064 0577 B5 00 ARGSS LDAAX ZRAM -- NFS13 0065 0579 20 95 06 JSR RDCHA -- NFS13 0066 057C CA DEX -- NFS13 0067 057D 10 F8 BPL ARGSS -- NFS13 0068 057F 4C 36 00 JMP MAIN -- NFS13 0069 0582 A2 00 STRNG LDXIM SRAM -- NFS13 0070 0584 A0 00 LDYIM &00 -- NFS13 0071 0586 20 C5 06 STRNH JSR NEWRC -- NFS13 0072 0589 99 00 07 STAAY SRAM -- NFS13 0073 058C C8 INY -- NFS13 0074 058D F0 04 BEQ STRNJ -- NFS13 0075 058F C9 0D CMPIM &0D -- NFS13 0076 0591 D0 F3 BNE STRNH -- NFS13 0077 0593 A0 07 STRNJ LDYIM /(SRAM ) -- NFS13 0078 0595 60 RTS -- NFS13 0079 0596 20 82 05 CLI JSR STRNG -- NFS13 0080 0599 20 F7 FF JSR OSCLI -- NFS13 0081 059C A9 7F QRPLY LDAIM &7F -- NFS13 0082 059E 2C E2 FE RPLY BIT R2STAT -- NFS13 0083 05A1 50 FB BVC RPLY -- NFS13 0084 05A3 8D E3 FE STA R2DATA -- NFS13 0085 05A6 4C 36 00 MJ JMP MAIN -- NFS13 0086 05A9 A2 10 FILE LDXIM &10 -- NFS13 0087 05AB 20 C5 06 FILEA JSR NEWRC -- NFS13 0088 05AE 95 01 STAAX ZRAM +&01 -- NFS13 0089 05B0 CA DEX -- NFS13 0090 05B1 D0 F8 BNE FILEA -- NFS13 0091 05B3 20 82 05 JSR STRNG -- NFS13 0092 05B6 86 00 STX ZRAM -- NFS13 0093 05B8 84 01 STY ZRAM +&01 -- NFS13 0094 05BA A0 00 LDYIM /(ZRAM ) -- NFS13 0095 05BC 20 C5 06 JSR NEWRC -- NFS13 0096 05BF 20 DD FF JSR OSFILE -- NFS13 0097 05C2 20 95 06 JSR RDCHA -- NFS13 0098 05C5 A2 10 LDXIM &10 -- NFS13 0099 05C7 B5 01 FILEB LDAAX ZRAM +&01 -- NFS13 0100 05C9 20 95 06 JSR RDCHA -- NFS13 0101 05CC CA DEX -- NFS13 0102 05CD D0 F8 BNE FILEB -- NFS13 0103 05CF F0 D5 BEQ MJ -- NFS13 0104 05D1 A2 0D GBPB LDXIM &0D -- NFS13 0105 05D3 20 C5 06 GBPBA JSR NEWRC -- NFS13 0106 05D6 95 FF STAZX &FF ;ZRAM-%1 -- NFS13 0107 05D8 CA DEX -- NFS13 0108 05D9 D0 F8 BNE GBPBA -- NFS13 0109 05DB 20 C5 06 JSR NEWRC -- NFS13 0110 05DE A0 00 LDYIM &00 -- NFS13 0111 05E0 20 D1 FF JSR OSGBPB -- NFS13 0112 05E3 48 PHA -- NFS13 0113 05E4 A2 0C LDXIM &0C -- NFS13 0114 05E6 B5 00 GBPBB LDAAX ZRAM -- NFS13 0115 05E8 20 95 06 JSR RDCHA -- NFS13 0116 05EB CA DEX -- NFS13 0117 05EC 10 F8 BPL GBPBB -- NFS13 0118 05EE 68 PLA -- NFS13 0119 05EF 4C 3A 05 JMP RDCHY -- NFS13 0120 05F2 20 C5 06 SBYTE JSR NEWRC -- NFS13 0121 05F5 AA TAX -- NFS13 0122 05F6 20 C5 06 JSR NEWRC -- NFS13 0123 05F9 20 F4 FF JSR OSBYTE -- NFS13 0124 05FC 2C E2 FE SBYTC BIT R2STAT -- NFS13 0125 05FF 50 FB BVC SBYTC -- NFS13 0126 0601 8E E3 FE STX R2DATA -- NFS13 0127 0604 4C 36 00 BYTEX JMP MAIN -- NFS13 0128 0607 20 C5 06 BYTE JSR NEWRC -- NFS13 0129 060A AA TAX -- NFS13 0130 060B 20 C5 06 JSR NEWRC -- NFS13 0131 060E A8 TAY -- NFS13 0132 060F 20 C5 06 JSR NEWRC -- NFS13 0133 0612 20 F4 FF JSR OSBYTE -- NFS13 0134 0615 49 9D EORIM &9D -- NFS13 0135 0617 F0 EB BEQ BYTEX -- NFS13 0136 0619 6A RORA -- NFS13 0137 061A 20 95 06 JSR RDCHA -- NFS13 0138 061D 2C E2 FE BYTEC BIT R2STAT -- NFS13 0139 0620 50 FB BVC BYTEC -- NFS13 0140 0622 8C E3 FE STY R2DATA -- NFS13 0141 0625 70 D5 BVS SBYTC -- NFS13 0142 0627 20 C5 06 WORD JSR NEWRC -- NFS13 0143 062A A8 TAY ;***** -- NFS13 0144 062B 2C E2 FE WORDA BIT R2STAT -- NFS13 0145 062E 10 FB BPL WORDA -- NFS13 0146 0630 AE E3 FE LDX R2DATA -- NFS13 0147 0633 CA DEX -- NFS13 0148 0634 30 0F BMI WORDC -- NFS13 0149 0636 2C E2 FE WORDB BIT R2STAT -- NFS13 0150 0639 10 FB BPL WORDB -- NFS13 0151 063B AD E3 FE LDA R2DATA ;***** -- NFS13 0152 063E 9D 28 01 STAAX WRAM ;***** -- NFS13 0153 0641 CA DEX -- NFS13 0154 0642 10 F2 BPL WORDB -- NFS13 0155 0644 98 TYA ;***** -- NFS13 0156 0645 A2 28 WORDC LDXIM WRAM ;***** -- NFS13 0157 0647 A0 01 LDYIM /(WRAM ) ;***** -- NFS13 0158 0649 20 F1 FF JSR OSWORD -- NFS13 0159 064C 2C E2 FE WORDD BIT R2STAT -- NFS13 0160 064F 10 FB BPL WORDD -- NFS13 0161 0651 AE E3 FE LDX R2DATA -- NFS13 0162 0654 CA DEX -- NFS13 0163 0655 30 0E BMI WOREN -- NFS13 0164 0657 BC 28 01 WORDE LDYAX WRAM -- NFS13 0165 065A 2C E2 FE WORDF BIT R2STAT -- NFS13 0166 065D 50 FB BVC WORDF -- NFS13 0167 065F 8C E3 FE STY R2DATA -- NFS13 0168 0662 CA DEX -- NFS13 0169 0663 10 F2 BPL WORDE -- NFS13 0170 0665 4C 36 00 WOREN JMP MAIN -- NFS13 0171 0668 A2 04 RDLN LDXIM &04 NFS13 NFS13 NFS13 NFS13 Acorn macro assembler Page 45 NFS13 TUBE code NFS13 -- NFS13 0172 066A 20 C5 06 RDLNA JSR NEWRC -- NFS13 0173 066D 95 00 STAAX ZRAM -- NFS13 0174 066F CA DEX -- NFS13 0175 0670 10 F8 BPL RDLNA -- NFS13 0176 0672 E8 INX -- NFS13 0177 0673 A0 00 LDYIM /(ZRAM ) -- NFS13 0178 0675 8A TXA -- NFS13 0179 0676 20 F1 FF JSR OSWORD -- NFS13 0180 0679 90 05 BCC RDLNC -- NFS13 0181 067B A9 FF LDAIM &FF -- NFS13 0182 067D 4C 9E 05 JMP RPLY -- NFS13 0183 0680 A2 00 RDLNC LDXIM &00 -- NFS13 0184 0682 A9 7F LDAIM &7F -- NFS13 0185 0684 20 95 06 JSR RDCHA -- NFS13 0186 0687 BD 00 07 RDLND LDAAX SRAM -- NFS13 0187 068A 20 95 06 RDLNE JSR RDCHA -- NFS13 0188 068D E8 INX -- NFS13 0189 068E C9 0D CMPIM &0D -- NFS13 0190 0690 D0 F5 BNE RDLND -- NFS13 0191 0692 4C 36 00 JMP MAIN -- NFS13 0192 0695 2C E2 FE RDCHA BIT R2STAT -- NFS13 0193 0698 50 FB BVC RDCHA -- NFS13 0194 069A 8D E3 FE STA R2DATA -- NFS13 0195 069D 60 RTS -- NFS13 0196 069E 2C E6 FE WRIFOR BIT R4STAT -- NFS13 0197 06A1 50 FB BVC WRIFOR -- NFS13 0198 06A3 8D E7 FE STA R4DATA -- NFS13 0199 06A6 60 RTS -- NFS13 0200 06A7 A5 FF ESCAPE LDA ESCFLG -- NFS13 0201 06A9 38 SEC -- NFS13 0202 06AA 6A RORA -- NFS13 0203 06AB 30 0F BMI ESCA -- NFS13 0204 06AD 48 EVENT PHA -- NFS13 0205 06AE A9 00 LDAIM &00 -- NFS13 0206 06B0 20 BC 06 JSR ESCA -- NFS13 0207 06B3 98 TYA -- NFS13 0208 06B4 20 BC 06 JSR ESCA -- NFS13 0209 06B7 8A TXA -- NFS13 0210 06B8 20 BC 06 JSR ESCA -- NFS13 0211 06BB 68 PLA -- NFS13 0212 06BC 2C E0 FE ESCA BIT R1STAT -- NFS13 0213 06BF 50 FB BVC ESCA -- NFS13 0214 06C1 8D E1 FE STA R1DATA -- NFS13 0215 06C4 60 RTS -- NFS13 0216 06C5 2C E2 FE NEWRC BIT R2STAT -- NFS13 0217 06C8 10 FB BPL NEWRC -- NFS13 0218 06CA AD E3 FE LDA R2DATA -- NFS13 0219 06CD 60 RTS -- NFS13 0220 06CE -- NFS13 0221 06CE 06CE E53 * . -- NFS13 0222 06CE 4A 65 73 = "Jes" -- NFS13 0223 06D1 01CE LEN53 * E53 - S53 -- NFS13 0224 06D1 9630 ORG54 * ORG53 +LEN53 -- NFS13 0225 06D1 1630 THEEND * ORG54 -ORG -- NFS13 0226 06D1 -- NFS13 0227 06D1 FF FF FF = &FF,&FF,&FF,&FF,&FF,&FF,&FF,&FF,&FF,&FF -- NFS13 0228 06DB FF FF FF = &FF,&FF,&FF,&FF,&FF,&FF,&FF,&FF,&FF,&FF -- NFS13 0229 06E5 FF FF FF = &FF,&FF,&FF,&FF,&FF,&FF,&FF,&FF,&FF,&FF -- NFS13 0230 06EF FF FF FF = &FF,&FF,&FF,&FF,&FF,&FF,&FF,&FF,&FF,&FF -- NFS13 0231 06F9 FF FF FF = &FF,&FF,&FF,&FF,&FF,&FF,&FF,&FF,&FF,&FF -- NFS13 0232 0703 FF FF FF = &FF,&FF,&FF,&FF,&FF,&FF,&FF,&FF,&FF,&FF -- NFS13 0233 070D ;unused bytes set to $FF, (thanks Paul) -- NFS13 0234 070D -- NFS13 0235 070D END Assembly finished, no errors Action : ASM LOWROM LOWROM LOWROM Macro library : LOWROM LOWROM LOWROM LOWROM Acorn macro assembler Page 1 LOWROM LOWROM LOWROM Pass 1 LOWROM Pass 2 -- LOWROM 0001 0000 9630 LOWORG * &9630 -- LOWROM 0002 0000 0000 ZERO * 0 -- LOWROM 0003 0000 0001 ONE * 1 -- LOWROM 0004 0000 0002 TWO * 2 -- LOWROM 0005 0000 0003 THREE * 3 -- LOWROM 0006 0000 0004 FOUR * 4 -- LOWROM 0007 0000 0005 FIVE * 5 -- LOWROM 0008 0000 0007 SEVEN * 7 -- LOWROM 0009 0000 0008 EIGHT * 8 -- LOWROM 0010 0000 -- LOWROM 0011 0000 0000 TRUE * 0 -- LOWROM 0012 0000 FFFF FALSE * &FFFF -- LOWROM 0013 0000 0000 YES * TRUE -- LOWROM 0014 0000 FFFF NO * FALSE -- LOWROM 0015 0000 FFFF SECRET * NO -- LOWROM 0016 0000 -- LOWROM 0017 0000 ; Flags for fast code assembly -- LOWROM 0018 0000 -- LOWROM 0019 0000 -- LOWROM 0020 0000 0000 FAST1 * TRUE -- LOWROM 0021 0000 FFFF FAST2 * FALSE -- LOWROM 0022 0000 0000 FAST3 * TRUE -- LOWROM 0023 0000 0000 FAST4 * TRUE -- LOWROM 0024 0000 FFFF FAST5 * FALSE -- LOWROM 0025 0000 0000 FAST6 * TRUE -- LOWROM 0026 0000 0000 FAST7 * TRUE -- LOWROM 0027 0000 0000 FAST8 * TRUE -- LOWROM 0028 0000 FFFF FAST9 * FALSE -- LOWROM 0029 0000 FFFF FAST10 * FALSE -- LOWROM 0030 0000 0000 FAST11 * TRUE -- LOWROM 0031 0000 0000 FAST12 * TRUE -- LOWROM 0032 0000 0000 FAST13 * TRUE -- LOWROM 0033 0000 0000 FAST14 * TRUE -- LOWROM 0034 0000 -- LOWROM 0035 0000 -- LOWROM 0036 0000 0005 LLOLST * 5 -- LOWROM 0037 0000 0005 SWRTNS * 5 -- LOWROM 0038 0000 0005 RXRTNS * 5 -- LOWROM 0039 0000 0005 TXRTNS * 5 -- LOWROM 0040 0000 0005 NMILST * 5 -- LOWROM 0041 0000 0005 STATSL * 5 -- LOWROM 0042 0000 -- LOWROM 0043 0000 FFF4 OSBYTE * &FFF4 -- LOWROM 0044 0000 FFBF OSEVEN * &FFBF -- LOWROM 0045 0000 -- LOWROM 0046 0000 00C0 RXCB * &C0 -- LOWROM 0047 0000 007F RXRDY * &7F -- LOWROM 0048 0000 8000 USRPRC * &8000 -- LOWROM 0049 0000 FEE5 R3DATA * &FEE5 -- LOWROM 0050 0000 0098 TUBLOK * &98 -- LOWROM 0051 0000 8021 MCPEEK * &8021 -- LOWROM 0052 0000 -- LOWROM 0053 0000 009C DYNVC1 * &9C -- LOWROM 0054 0000 009E DYNVC2 * &9E -- LOWROM 0055 0000 -- LOWROM 0056 0000 0000 NFSORG * 0 -- LOWROM 0057 0000 0000 NFSEND * 0 -- LOWROM 0058 0000 0000 TUBORG * 0 -- LOWROM 0059 0000 0000 TUBEND * 0 -- LOWROM 0060 0000 -- LOWROM 0061 0000 -- LOWROM 0062 0000 LNK LOWL00 -- LOWL00 0001 0000 TTL Low level organization and constants File => LOWL00 -- LOWL00 0002 0000 OPT LLOLST LOWL00 LOWL00 LOWL00 LOWL00 Acorn macro assembler Page 2 LOWL00 Low level organization and constants File => LOWL00 LOWL00 -- LOWL00 0003 0000 ORG &9630 -- LOWL00 0004 9630 ;ECONET VERSION 3 : B.ROBERTSON 30:1:82 -- LOWL00 0005 9630 -- LOWL00 0006 9630 ;BBC MACHINE MANIFEST CONSTANTS. -- LOWL00 0007 9630 -- LOWL00 0008 9630 ;HARDWARE DEPENDANT CONSTANTS -- LOWL00 0009 9630 -- LOWL00 0010 9630 FEA0 ADLC * &FEA0 ;6854 SERIAL CONTROL CHIP LOCATION -- LOWL00 0011 9630 [ SECRET = NO -- LOWL00 0012 9630 FE18 STNID * &FE18 ;LOCATION OF STATION ID ADDRESS. -- LOWL00 0013 9630 FE20 INTON * &FE20 ;INTERUPT ENABLE ADDRESS -- LOWL00 0014 9630 FE18 INTOFF * &FE18 ;INTERUPT DISABLE ADDRESS -- LOWL00 0015 9630 | -- LOWL00 0019 9630 ] -- LOWL00 0020 9630 FE30 ROMSWW * &FE30 ;ROM SWITCH WRITE LOCATION -- LOWL00 0021 9630 FE40 VIA * &FE40 ;6522 LOCATION USED FOR GENERATING IRQ -- LOWL00 0022 9630 -- LOWL00 0023 9630 -- LOWL00 0024 9630 ;MOS DEPENDANT CONSTANTS -- LOWL00 0025 9630 00F4 ROMSWR * &00F4 ;ROM SWITCH READ LOCATION -- LOWL00 0026 9630 0406 tADDRl * &0406 ;ADDRESS OF TUBE SOFTWARE -- LOWL00 0027 9630 00A0 PAGEZ * &00A0 ;PAGE ZERO VARIABLE LOCATIONS -- LOWL00 0028 9630 0D00 RAMCDE * &0D00 ;ORIGIN OF RAM CODE -- LOWL00 0029 9630 0D38 VAR * &0D38 ;SCRATCH VARIABLE LOCATIONS.USED WHEN ACTIVE -- LOWL00 0030 9630 -- LOWL00 0031 9630 -- LOWL00 0032 9630 ;LOCATIONS USED IN THE NFS CODE, *******************FIX THIS -- LOWL00 0033 9630 -- LOWL00 0034 9630 8000 JEZZ * &8000 ;JUMP FOR REMOTE PROC CALLS -- LOWL00 0035 9630 0D64 SSTATE * &D64 ;STATION STATE CONTROL BLOCKS EXIST -- LOWL00 0036 9630 0D63 IMASK * &D63 ;IMMEDIATE OPERATION MASK PERMIT IMMEDIATE OPERATIONS -- LOWL00 0037 9630 0D67 TUBEFL * &D67 ;FLAGS WHETHER TUBE PRESENT -- LOWL00 0038 9630 0D62 TXCLRl * &D62 ;FLAGS WHETHER CLEAR FOR USER TO TX -- LOWL00 0039 9630 0D65 MASKST * &D65 ;STORES VALUE OF IM PROT MASK WHEN JSR -- LOWL00 0040 9630 0004 MSIZE * &04 ;MACHINE AREA FOUR BYTES TO PEEK -- LOWL00 0041 9630 -- LOWL00 0042 9630 ;STATIC PAGE OFFSET CONSTANTS -- LOWL00 0043 9630 007F BUFCNT * &7F ;NUMBER OF PARAMETERS IN BUFFER -- LOWL00 0044 9630 0080 STNNO * &80 ;CALLING IM OP STATION -- LOWL00 0045 9630 0082 PROBUF * &82 ;PROCEDURE PARAMETER BUFFER -- LOWL00 0046 9630 0008 LLEVST * &08 ;LOW LEVEL STATE -- LOWL00 0047 9630 -- LOWL00 0048 9630 ;USEFUL CONSTANTS -- LOWL00 0049 9630 0000 DONTC * &00 ;DONT CARE CONSTANT -- LOWL00 0050 9630 -- LOWL00 0051 9630 ;6854 LOCATIONS -- LOWL00 0052 9630 FEA0 CReg1 * ADLC +&00 ;CONTROL REGISTER 1 C1B0=X -- LOWL00 0053 9630 FEA1 CReg2 * ADLC +&01 ;CONTROL REGISTER 2 C1B0=0 -- LOWL00 0054 9630 FEA1 CReg3 * ADLC +&01 ;CONTROL REGISTER 3 C1B0=1 -- LOWL00 0055 9630 FEA3 CReg4 * ADLC +&03 ;CONTROL REGISTER 4 C1B0=1 -- LOWL00 0056 9630 FEA2 RXBYTE * ADLC +&02 ;RECEIVE BYTE C1B0=X -- LOWL00 0057 9630 FEA0 SReg1 * ADLC +&00 ;STATUS REGISTER 1 C1B0=X -- LOWL00 0058 9630 FEA1 SReg2 * ADLC +&01 ;STATUS REGISTER 2 C1B0=X -- LOWL00 0059 9630 FEA2 TXBYTE * ADLC +&02 ;TRANSMIT NEXT BYTE C1B0=X -- LOWL00 0060 9630 FEA3 TXLAST * ADLC +&03 ;TRANSMIT LAST BYTE C1B0=0 -- LOWL00 0061 9630 -- LOWL00 0062 9630 ;ADLC STATUS REGISTER A EVENT CONSTANTS -- LOWL00 0063 9630 0002 S2RQ * &02 ;STATUS REGISTER 2 REQUEST -- LOWL00 0064 9630 0010 CTS * &10 ;CLEAR TO SEND -- LOWL00 0065 9630 0008 FD * &08 ;FLAG DETECT -- LOWL00 0066 9630 0040 TDRA * &40 ;TRANSMIT DATA REGISTER AVAILABLE -- LOWL00 0067 9630 -- LOWL00 0068 9630 ;STATUS REGISTER B EVENT CONSTANTS -- LOWL00 0069 9630 0020 DCD * &20 ;DATA CARRIER DETECT -- LOWL00 0070 9630 0004 RXIDLE * &04 ;INACTIVE IDLE RECEIVED -- LOWL00 0071 9630 0002 FV * &02 ;FRAME VALID -- LOWL00 0072 9630 0080 RDA * &80 ;RECEIVE DATA AVAILABLE -- LOWL00 0073 9630 0010 CRC * &10 ;FRAME CHECKSUM ERROR -- LOWL00 0074 9630 0001 AP * &01 ;ADDRESS PRESENT. -- LOWL00 0075 9630 -- LOWL00 0076 9630 -- LOWL00 0077 9630 ;SCOUT BUFFER FORMAT -- LOWL00 0078 9630 0000 SRLO * &00 -- LOWL00 0079 9630 0001 SRHI * &01 -- LOWL00 0080 9630 0002 CNTL * &02 ;ZERO FOR IMMEDIATE OPERATIONS -- LOWL00 0081 9630 0003 PORTn * &03 -- LOWL00 0082 9630 0004 ADTO1 * &04 -- LOWL00 0083 9630 0005 ADTO2 * &05 -- LOWL00 0084 9630 0006 ADTO3 * &06 -- LOWL00 0085 9630 0007 ADTO4 * &07 -- LOWL00 0086 9630 0008 ADFR1 * &08 -- LOWL00 0087 9630 0009 ADFR2 * &09 -- LOWL00 0088 9630 000A ADFR3 * &0A -- LOWL00 0089 9630 000B ADFR4 * &0B -- LOWL00 0090 9630 000C SBSIZE * &0C ;SIZE OF SCOUT BUFFER -- LOWL00 0091 9630 -- LOWL00 0092 9630 ;CONTROL BLOCK FORMAT - LOCATED ANYWHERE IN MEMORY -- LOWL00 0093 9630 0000 CBCNTL * &00 ;N.B. SEE CONTROL BYTE VALUES VALID CONTROL BLOCK -- LOWL00 0094 9630 0001 CBPORT * &01 -- LOWL00 0095 9630 0002 CBSRLO * &02 ;N.B. SEE STATION ID VALUES CONTROL BLOCK SOURCE LO -- LOWL00 0096 9630 0003 CBSRHI * &03 -- LOWL00 0097 9630 0004 CBSALO * &04 ;CONTROL BLOCK DATA START ADDRESS LO -- LOWL00 0098 9630 0005 CBSAHI * &05 -- LOWL00 0099 9630 0006 CBSAH1 * &06 -- LOWL00 0100 9630 0007 CBSAH2 * &07 -- LOWL00 0101 9630 0008 CBEALO * &08 ;CONTROL BLOCK DATA END ADDRESS LO -- LOWL00 0102 9630 0009 CBEAHI * &09 -- LOWL00 0103 9630 000A CBEAH1 * &0A -- LOWL00 0104 9630 000B CBEAH2 * &0B -- LOWL00 0105 9630 000C XTRA1L * &0C -- LOWL00 0106 9630 000D XTRA1H * &0D -- LOWL00 0107 9630 000E XTRA2L * &0E -- LOWL00 0108 9630 000F XTRA2H * &0F -- LOWL00 0109 9630 -- LOWL00 0110 9630 -- LOWL00 0111 9630 ;CONTROL BYTE VALUE IMMEDIATE CONSTANTS. -- LOWL00 0112 9630 0081 IPEEK * &81 ;REMOTE PEEK N.B. MUST BE LOWEST NUMBER -- LOWL00 0113 9630 0082 IPOKE * &82 ;REMOTE POKE -- LOWL00 0114 9630 0083 IRTN * &83 ;REMOTE ROUTINE CALL -- LOWL00 0115 9630 0084 IPROCE * &84 ;REMOTE EVENT PROCEDURE CALL -- LOWL00 0116 9630 0085 IPROCH * &85 ;REMOTE HIGH LEVEL PROCEDURE CALL -- LOWL00 0117 9630 0086 ISTOP * &86 ;REMOTE STOP -- LOWL00 0118 9630 0087 ISTRT * &87 ;REMOTE RESTART -- LOWL00 0119 9630 0088 IMACH * &88 ;MACHINE TYPE PEEK. -- LOWL00 0120 9630 -- LOWL00 0121 9630 ;PORT BYTE VALUE CONSTANTS. -- LOWL00 0122 9630 0000 ANYPRT * &00 ;ANY PORT ACCEPTED -- LOWL00 0123 9630 -- LOWL00 0124 9630 ;STATION ID RESERVED CONSTANTS -- LOWL00 0125 9630 00FF BDCAST * &FF ;BROADCAST ADDRESS -- LOWL00 0126 9630 00F0 PRIVID * &F0 ;N.B STATIONS 240-254 NOT SUBJECT TO REMOTE IMMED OP CONTROL MASK LOWL00 LOWL00 LOWL00 LOWL00 Acorn macro assembler Page 3 LOWL00 Low level organization and constants File => LOWL00 LOWL00 -- LOWL00 0127 9630 0000 NETnum * &00 ;NETWORK ID CONSTANT -- LOWL00 0128 9630 -- LOWL00 0129 9630 ;STATION STATE CONSTANTS EXIST UNTIL CHANGED -- LOWL00 0130 9630 0080 JEZZEX * &80 ;JEZZ RX CONTROL BLOCK EXISTS -- LOWL00 0131 9630 0040 RXCBEX * &40 ;RXCBLOCK EXISTS N.B. MUST BE $80 FOR MINUS TEST -- LOWL00 0132 9630 0004 STOP * &04 ;FLAGS A STOPPED STATE -- LOWL00 0133 9630 -- LOWL00 0134 9630 -- LOWL00 0135 9630 ;NET STATE FLAG BITS RESET EVERY MESSAGE -- LOWL00 0136 9630 0080 DACK * &80 ;FLAGS A DATA ACK PACKET -- LOWL00 0137 9630 0040 BCAST * &40 ;SIGNALS A BROADCAST MESSAGE HAS BEEN RECEIVED -- LOWL00 0138 9630 0020 ONEBYT * &20 ;FLAGS ONE BYTE LEFT FOR THE TUBE -- LOWL00 0139 9630 0002 TUBEf * &02 ;FLAGS THAT DATA IS FOR SECOND PROCESSOR -- LOWL00 0140 9630 0001 SHORT * &01 ;2 WAY HANDSHAKE -- LOWL00 0141 9630 -- LOWL00 0142 9630 ;STATE1 CONSTANTS INDICATE INFO IN SCOUT PACKET -- LOWL00 0143 9630 0080 X4BYT * &80 ;XTRA 4 BYTES TO BE TRANSMITTED -- LOWL00 0144 9630 0040 X8BYT * &40 ;XTRA 8 BYTES TO BE TRANSMITTED -- LOWL00 0145 9630 -- LOWL00 0146 9630 ;N.B. TXDAPT,RXYOFF,TXPAGE ARE SHARED WITH RX VARS -- LOWL00 0147 9630 ;TRANSMITTER STATION NETWORK VARIABLE LOCATIONS -- LOWL00 0148 9630 00A0 TXCBPT * PAGEZ +&00 ;TX CNTRL BLOCK POINTER. ONE BLOCK ONLY -- LOWL00 0149 9630 00A4 TXDAPT * PAGEZ +&04 ;16 BIT POINTER OF DATA TO TX -- LOWL00 0150 9630 0D4B TXLINK * VAR +&13 ;TRANSMIT SUBROUTINE LINKAGE -- LOWL00 0151 9630 00A3 TXPAGE * PAGEZ +&03 ;NUMBER OF PAGES TO TX -- LOWL00 0152 9630 00A2 TXYOFF * PAGEZ +&02 ;Y INDEX OF DATA TO TX -- LOWL00 0153 9630 0D4F TXCNT * VAR +&17 ;COUNT FOR TX SCOUT PACKET -- LOWL00 0154 9630 0D50 ENTXCT * VAR +&18 ;END COUNT OF TX PACKET -- LOWL00 0155 9630 0D53 XTRADR * VAR +&1B ;USED FOR IM OP XTRA ADDR STORE 4 BYTES -- LOWL00 0156 9630 0D20 TXBUFl * &0D20 ;SCOUT TRANSMIT BUFFER -- LOWL00 0157 9630 0D20 TXDELO * TXBUFl +&00 -- LOWL00 0158 9630 0D21 TXDEHI * TXBUFl +&01 -- LOWL00 0159 9630 0D22 TXSRLO * TXBUFl +&02 -- LOWL00 0160 9630 0D23 TXSRHI * TXBUFl +&03 -- LOWL00 0161 9630 0D24 TXCNTL * TXBUFl +&04 -- LOWL00 0162 9630 0D25 TXPORT * TXBUFl +&05 -- LOWL00 0163 9630 0D26 TXADRT * TXBUFl +&06 -- LOWL00 0164 9630 0D2A TXADRF * TXBUFl +&0A -- LOWL00 0165 9630 -- LOWL00 0166 9630 -- LOWL00 0167 9630 ;RECEIVER STATION NETWORK VARIABLE LOCATIONS -- LOWL00 0168 9630 00A6 RXCBPT * PAGEZ +&06 ;RX CNTRL BLOCK POINTER. POINTS TO ARRAY OF CNTRL BLOCKS -- LOWL00 0169 9630 00A4 RXDAPT * PAGEZ +&04 ;16 BIT POINTER OF DATA TO RX -- LOWL00 0170 9630 0D3D SCOUTB * VAR +&05 ;SCOUT BUFFER LOCATION -- LOWL00 0171 9630 0D3D SBSRLO * SCOUTB +SRLO -- LOWL00 0172 9630 0D3E SBSRHI * SCOUTB +SRHI -- LOWL00 0173 9630 0D3F SBCNTL * SCOUTB +CNTL ;ZERO FOR IMMEDIATE OPERATIONS -- LOWL00 0174 9630 0D40 SBPORT * SCOUTB +PORTn -- LOWL00 0175 9630 0D41 SBADT1 * SCOUTB +ADTO1 -- LOWL00 0176 9630 0D42 SBADT2 * SCOUTB +ADTO2 -- LOWL00 0177 9630 0D43 SBADT3 * SCOUTB +ADTO3 -- LOWL00 0178 9630 0D44 SBADT4 * SCOUTB +ADTO4 -- LOWL00 0179 9630 0D45 SBADF1 * SCOUTB +ADFR1 -- LOWL00 0180 9630 0D46 SBADF2 * SCOUTB +ADFR2 -- LOWL00 0181 9630 0D47 SBADF3 * SCOUTB +ADFR3 -- LOWL00 0182 9630 0D48 SBADF4 * SCOUTB +ADFR4 -- LOWL00 0183 9630 00A3 RXPAGE * PAGEZ +&03 ;NUMBER OF PAGES TO RX -- LOWL00 0184 9630 00A2 RXYOFF * PAGEZ +&02 ;Y INDEX OF DATA TO RX -- LOWL00 0185 9630 0D4A NSTATE * VAR +&12 ;NETWORK STATUS BITS INDICATE STATE -- LOWL00 0186 9630 0D51 STORE * VAR +&19 ;IRQ STORE OF SHIFT REG BITS -- LOWL00 0187 9630 0D57 IRQSTR * VAR +&1F ;IRQ STORE FOR VARIABLES COS ITS SLOW. 5 BYTES -- LOWL00 0188 9630 0D5C TDIR * VAR +&24 ;TUBE DIRECTION -- LOWL00 0189 9630 0D5D LSTBYT * VAR +&25 ;VALUE OF THE LAST BYTE FOR TUBE -- LOWL00 0190 9630 0D66 ACTIVE * &D66 ;INDICATES IF NMI CODE IS ACTIVE -- LOWL00 0191 9630 -- LOWL00 0192 9630 [ 1=0 -- LOWL00 0205 9630 ] -- LOWL00 0206 9630 LNK LOWL01 -- LOWL01 0001 9630 TTL Net initialization and sideways routines. File > LOWL01 -- LOWL01 0002 9630 OPT SWRTNS LOWL01 LOWL01 LOWL01 LOWL01 Acorn macro assembler Page 4 LOWL01 Net initialization and sideways routines. File > LOWL01 LOWL01 -- LOWL01 0003 9630 -- LOWL01 0004 9630 4C 6E 9B JMP LOTRAN -- LOWL01 0005 9633 4C 7A 96 JMP LOCNMI -- LOWL01 0006 9636 4C 57 9F JMP LOQNMI -- LOWL01 0007 9639 4C 98 96 JMP LORNMI -- LOWL01 0008 963C ;JMP LOWINT -- LOWL01 0009 963C -- LOWL01 0010 963C ;RECEIVE IRQ -- LOWL01 0011 963C LOWINT -- LOWL01 0012 963C IRQ -- LOWL01 0013 963C A9 04 LDAIM FOUR -- LOWL01 0014 963E 2C 4D FE BIT VIA +&D ;TEST FOR IRQ FLAGED,IFR REG -- LOWL01 0015 9641 D0 03 BNE ISVIA LOWL01 0015 9641 v7C LOWL01 0016 9643 A9 05 LDAIM &05 ;REASON CODE IS 5 LOWL01 0015 9641 v7C LOWL01 0017 9645 60 RTS ;RETURN IF NOT REQUIRED INT LOWL01 0015 9641 v7C LOWL01 0018 9646 ISVIA LOWL01 0015 9641 v7C LOWL01 0019 9646 8A TXA -- LOWL01 0020 9647 48 PHA -- LOWL01 0021 9648 98 TYA -- LOWL01 0022 9649 48 PHA -- LOWL01 0023 964A AD 4B FE LDA VIA +&B ;ACR REG -- LOWL01 0024 964D 29 E3 ANDIM &E3 -- LOWL01 0025 964F 0D 51 0D ORA STORE -- LOWL01 0026 9652 8D 4B FE STA VIA +&B ;RESTORE BITS 2,3,4,ACR REG -- LOWL01 0027 9655 AD 4A FE LDA VIA +&A ;CLEAR INT,SR REG -- LOWL01 0028 9658 A9 04 LDAIM &04 -- LOWL01 0029 965A 8D 4D FE STA VIA +&D ;CLEAR INT,SR REG -- LOWL01 0030 965D 8D 4E FE STA VIA +&E ;DISABLE IRQ,IER REG -- LOWL01 0031 9660 -- LOWL01 0032 9660 AC 57 0D LDY IRQSTR -- LOWL01 0033 9663 C0 86 CPYIM ISTOP -- LOWL01 0034 9665 B0 0B BCS NOMASK LOWL01 0034 9665 v74 LOWL01 0035 9667 AD 63 0D LDA IMASK LOWL01 0034 9665 v74 LOWL01 0036 966A 8D 65 0D STA MASKST ;STORE MASK VALUE LOWL01 0034 9665 v74 LOWL01 0037 966D 09 1C ORAIM &1C ;KNOCK OUT PROTECTION BITS LOWL01 0034 9665 v74 LOWL01 0038 966F 8D 63 0D STA IMASK LOWL01 0034 9665 v74 LOWL01 0039 9672 NOMASK LOWL01 0034 9665 v74 LOWL01 0040 9672 ; LDAAY JMPI2H -IRTN ;NIFTY CASE INSTUCTION LOWL01 0034 9665 v74 LOWL01 0041 9672 A9 9B LDAIM JMPI2H -- LOWL01 0042 9674 48 PHA -- LOWL01 0043 9675 B9 9D 9A LDAAY JMPI2L -IRTN -- LOWL01 0044 9678 48 PHA -- LOWL01 0045 9679 60 RTS -- LOWL01 0046 967A -- LOWL01 0047 967A ; -- LOWL01 0048 967A ; ****** NEVER fall through here ************ -- LOWL01 0049 967A ; -- LOWL01 0050 967A -- LOWL01 0051 967A -- LOWL01 0052 967A ;CLAIM NMI FIRST TIME ROUND -- LOWL01 0053 967A BOOK -- LOWL01 0054 967A LOCNMI -- LOWL01 0055 967A 2C 18 FE BIT INTOFF ;DISABLES NMI -- LOWL01 0056 967D 20 3D 9F JSR CPINIT ;INITIALISE ADLC CHIP -- LOWL01 0057 9680 A9 EA LDAIM &EA ;OSBYTE TUBE TEST -- LOWL01 0058 9682 A2 00 LDXIM ZERO -- LOWL01 0059 9684 8E 66 0D STX ACTIVE ;MAKE MYSELF INACTIVE -- LOWL01 0060 9687 A0 FF LDYIM &FF -- LOWL01 0061 9689 20 F4 FF JSR OSBYTE ;TEST FOR TUBE -- LOWL01 0062 968C 8E 67 0D STX TUBEFL -- LOWL01 0063 968F A9 8F LDAIM &8F ;OSBYTE NMI CLAIM -- LOWL01 0064 9691 A2 0C LDXIM &0C -- LOWL01 0065 9693 A0 FF LDYIM &FF -- LOWL01 0066 9695 20 F4 FF JSR OSBYTE ;CLAIM NMI -- LOWL01 0067 9698 -- LOWL01 0068 9698 RCLM ;RECLAIM NMI AND ALL L.L. FUNCTIONS SIDEWAYS CALL -- LOWL01 0069 9698 RDCDE -- LOWL01 0070 9698 LORNMI -- LOWL01 0071 9698 ;READS NMI CODE INTO D00 RAM AREA -- LOWL01 0072 9698 A0 20 LDYIM CDELEN ;LOAD NMI CODE LENGTH -- LOWL01 0073 969A MORECD -- LOWL01 0074 969A B9 7C 9F LDAAY NMICDE - ONE LOWL01 0077 96A1 ^77 LOWL01 0075 969D 99 FF 0C STAAY RAMCDE - ONE LOWL01 0077 96A1 ^77 LOWL01 0076 96A0 88 DEY LOWL01 0077 96A1 ^77 LOWL01 0077 96A1 D0 F7 BNE MORECD -- LOWL01 0078 96A3 -- LOWL01 0079 96A3 ;SSTATE SET UP BY JEZZ.STATION LONG TERM STATE E.G. RXCB EXISTS, STOPPED ETC -- LOWL01 0080 96A3 A5 F4 LDA ROMSWR ;READ WHICH ROM WE ARE -- LOWL01 0081 96A5 8D 07 0D STA ROMSTR + ONE ;STORE IT IN D00 CODE -- LOWL01 0082 96A8 A9 80 LDAIM &80 -- LOWL01 0083 96AA 8D 62 0D STA TXCLRl ;FLAG CLEAR TO TRANSMIT -- LOWL01 0084 96AD 8D 66 0D STA ACTIVE -- LOWL01 0085 96B0 AD 18 FE LDA STNID -- LOWL01 0086 96B3 8D 22 0D STA TXSRLO ;STORE MY ADDRESS IN TX SCOUT BUFF AREA -- LOWL01 0087 96B6 8C 23 0D STY TXSRHI ;ASSUMES Y IS ZERO -- LOWL01 0088 96B9 84 98 STY TUBLOK ;TUBE LOCK FLAG -- LOWL01 0089 96BB 2C 20 FE BIT INTON ;ENABLES NMI INTERUPTS BY CLEARING NMI FLIP FLOP -- LOWL01 0090 96BE 60 RTS -- LOWL01 0091 96BF ; "LOQNMI" MOVED TO LOWL04 !!!!!!!!! -- LOWL01 0092 96BF -- LOWL01 0093 96BF LNK LOWL02 -- LOWL02 0001 96BF TTL Receive routines. File > LOWL02 -- LOWL02 0002 96BF OPT RXRTNS LOWL02 LOWL02 LOWL02 LOWL02 Acorn macro assembler Page 5 LOWL02 Receive routines. File > LOWL02 LOWL02 -- LOWL02 0003 96BF -- LOWL02 0004 96BF ;RECEIVE ROUTINES -- LOWL02 0005 96BF ;THIS IS THE CODE NEEDED TO RECEIVE AN ECONET MESSAGE -- LOWL02 0006 96BF ;A SCOUT MESSAGE IS RECEIVED -- LOWL02 0007 96BF ;IF THIS IS CORRECT AN ACKNOWLEDGE IS TRANSMITED -- LOWL02 0008 96BF ;A DATA PACKET IS AWAITED -- LOWL02 0009 96BF ;THE DATA PACKET IS LOADED INTO MEMORY -- LOWL02 0010 96BF ;THE DATA PACKET IS ACKNOWLEDGED. -- LOWL02 0011 96BF ; -- LOWL02 0012 96BF ; ****** NEVER fall through here ************ -- LOWL02 0013 96BF ; -- LOWL02 0014 96BF -- LOWL02 0015 96BF REC -- LOWL02 0016 96BF A9 01 LDAIM AP -- LOWL02 0017 96C1 2C A1 FE BIT SReg2 ;CHECK FOR ADDRESS PRESENT -- LOWL02 0018 96C4 F0 38 BEQ RXSERR ;AP EXPECTED LOWL02 0018 96C4 v47 LOWL02 0019 96C6 AD A2 FE LDA RXBYTE LOWL02 0018 96C4 v47 LOWL02 0020 96C9 CD 18 FE CMP STNID ;TEST DESTLO FOR STATION MATCH LOWL02 0018 96C4 v47 LOWL02 0021 96CC F0 09 BEQ TESTHI LOWL02 0018 96C4 v47 LOWL02 0022 96CE C9 FF CMPIM BDCAST ;TEST DESTLO FOR BRCAST MATCH LOWL02 0018 96C4 v47 LOWL02 0023 96D0 D0 18 BNE FRDISC LOWL02 0018 96C4 v47 LOWL02 0024 96D2 A9 40 LDAIM BCAST LOWL02 0018 96C4 v47 LOWL02 0025 96D4 8D 4A 0D STA NSTATE ;FLAG BROADCAST MESSAGE LOWL02 0018 96C4 v47 LOWL02 0026 96D7 LOWL02 0018 96C4 v47 LOWL02 0027 96D7 TESTHI LOWL02 0018 96C4 v47 LOWL02 0028 96D7 A9 DC LDAIM :LSB: RXDEHI LOWL02 0018 96C4 v47 LOWL02 0029 96D9 [ FAST1 <> TRUE LOWL02 0018 96C4 v47 LOWL02 0032 96D9 | LOWL02 0018 96C4 v47 LOWL02 0033 96D9 4C 11 0D JMP WRXNTF ; New fast code ! LOWL02 0018 96C4 v47 LOWL02 0034 96DC ] LOWL02 0018 96C4 v47 LOWL02 0035 96DC LOWL02 0018 96C4 v47 LOWL02 0036 96DC RXDEHI LOWL02 0018 96C4 v47 LOWL02 0037 96DC 2C A1 FE BIT SReg2 LOWL02 0018 96C4 v47 LOWL02 0038 96DF 10 1D BPL RXSERR ;RXDA EXPECTED N.B IN 2BYTE MODE LOWL02 0018 96C4 v47 LOWL02 0039 96E1 AD A2 FE LDA RXBYTE LOWL02 0018 96C4 v47 LOWL02 0040 96E4 F0 0C BEQ FORUS ;NET NUMBER MUST BE ZERO LOWL02 0018 96C4 v47 LOWL02 0041 96E6 49 FF EORIM BDCAST ;TEST DESTHI FOR NETWORK BROADCAST LOWL02 0018 96C4 v47 LOWL02 0042 96E8 F0 0B BEQ FORUSB LOWL02 0018 96C4 v47 LOWL02 0043 96EA LOWL02 0018 96C4 v47 LOWL02 0044 96EA FRDISC ;FRAME DISCONTINUE LOWL02 0018 96C4 v47 LOWL02 0045 96EA A9 A2 LDAIM &A2 ;+TXRS -RXRS +FRDSC -TDSR -RDSR -TIE +RIE CR2 LOWL02 0018 96C4 v47 LOWL02 0046 96EC 8D A0 FE STA CReg1 LOWL02 0018 96C4 v47 LOWL02 0047 96EF 4C EB 99 JMP NOUPD3 ;WAIT FOR ANOTHER RXINT LOWL02 0018 96C4 v47 LOWL02 0048 96F2 LOWL02 0018 96C4 v47 LOWL02 0049 96F2 FORUS ;NOT BROADCAST FOR US LOWL02 0018 96C4 v47 LOWL02 0050 96F2 8D 4A 0D STA NSTATE LOWL02 0018 96C4 v47 LOWL02 0051 96F5 FORUSB ;BROADCAST FOR US LOWL02 0018 96C4 v47 LOWL02 0052 96F5 85 A2 STA RXYOFF LOWL02 0018 96C4 v47 LOWL02 0053 96F7 A9 0E LDAIM :LSB: RXHEAD LOWL02 0018 96C4 v47 LOWL02 0054 96F9 [ FAST2 <> TRUE LOWL02 0018 96C4 v47 LOWL02 0055 96F9 A0 97 LDYIM :MSB: RXHEAD LOWL02 0018 96C4 v47 LOWL02 0056 96FB 4C 0E 0D JMP WRXINT LOWL02 0018 96C4 v47 LOWL02 0057 96FE | LOWL02 0018 96C4 v47 LOWL02 0059 96FE ] LOWL02 0018 96C4 v47 LOWL02 0060 96FE LOWL02 0018 96C4 v47 LOWL02 0061 96FE ;RESET RECEIVER FOR MORE PACKETS LOWL02 0018 96C4 v47 LOWL02 0062 96FE RXSERR LOWL02 0018 96C4 v47 LOWL02 0063 96FE AD A1 FE LDA SReg2 LOWL02 0109 9749 ^33 LOWL02 0064 9701 29 81 ANDIM &81 LOWL02 0109 9749 ^33 LOWL02 0065 9703 F0 06 BEQ NORST LOWL02 0109 9749 ^33 LOWL02 0066 9705 20 3D 9F JSR CPINIT ;REINIT THE CHIP LOWL02 0109 9749 ^33 LOWL02 0067 9708 4C EB 99 JMP NOUPD3 LOWL02 0109 9749 ^33 LOWL02 0068 970B NORST LOWL02 0109 9749 ^33 LOWL02 0069 970B 4C E8 99 JMP NOUPD2 ;RESET CHIP AND WAIT FOR ANOTHER RXINIT LOWL02 0109 9749 ^33 LOWL02 0070 970E LOWL02 0109 9749 ^33 LOWL02 0071 970E ;THIS LOOP BUFFERS THE SCOUT PACKET IN THE SCOUT BUFFER LOWL02 0109 9749 ^33 LOWL02 0072 970E RXHEAD ;RECEIVE PACKET: CNTRL,PORT,2DEST LOWL02 0109 9749 ^33 LOWL02 0073 970E A4 A2 LDY RXYOFF ;LOAD COUNT LOWL02 0109 9749 ^33 LOWL02 0074 9710 AD A1 FE LDA SReg2 LOWL02 0109 9749 ^33 LOWL02 0075 9713 RXHED2 LOWL02 0109 9749 ^33 LOWL02 0076 9713 10 E9 BPL RXSERR ;RXDA EXPECTED N.B. IN 2 BYTE MODE.SCOUT IS EVEN LOWL02 0109 9749 ^33 LOWL02 0077 9715 AD A2 FE LDA RXBYTE LOWL02 0109 9749 ^33 LOWL02 0078 9718 99 3D 0D STAAY SCOUTB LOWL02 0109 9749 ^33 LOWL02 0079 971B C8 INY LOWL02 0109 9749 ^33 LOWL02 0080 971C AD A1 FE LDA SReg2 LOWL02 0109 9749 ^33 LOWL02 0081 971F 30 02 BMI PASS3 ;2BYTES STILL AVAILABLE LOWL02 0109 9749 ^33 LOWL02 0082 9721 D0 15 BNE SBUFEN ;END OF SCOUT PACKET E.G. FV CONDITION LOWL02 0109 9749 ^33 LOWL02 0083 9723 PASS3 LOWL02 0109 9749 ^33 LOWL02 0084 9723 AD A2 FE LDA RXBYTE LOWL02 0109 9749 ^33 LOWL02 0085 9726 99 3D 0D STAAY SCOUTB LOWL02 0109 9749 ^33 LOWL02 0086 9729 C8 INY ;INCREMENT COUNT LOWL02 0109 9749 ^33 LOWL02 0087 972A C0 0C CPYIM SBSIZE ;TEST COUNT LOWL02 0109 9749 ^33 LOWL02 0088 972C F0 0A BEQ SBUFEN LOWL02 0109 9749 ^33 LOWL02 0089 972E 84 A2 STY RXYOFF ;STORE COUNT LOWL02 0109 9749 ^33 LOWL02 0090 9730 AD A1 FE LDA SReg2 LOWL02 0109 9749 ^33 LOWL02 0091 9733 D0 DE BNE RXHED2 LOWL02 0109 9749 ^33 LOWL02 0092 9735 4C 14 0D JMP WRXIN2 ;WE HAVE ALREADY STORED JUMP VECTOR LOWL02 0109 9749 ^33 LOWL02 0093 9738 LOWL02 0109 9749 ^33 LOWL02 0094 9738 LOWL02 0109 9749 ^33 LOWL02 0095 9738 LOWL02 0109 9749 ^33 LOWL02 0096 9738 ;CLAIM LINE WITH FLAGS LOWL02 0109 9749 ^33 LOWL02 0097 9738 SBUFEN LOWL02 0109 9749 ^33 LOWL02 0098 9738 A9 00 LDAIM ZERO ;-TXRST -RXRST -RXDISC -TDSR -RDSR -TIE -RIE SCR2 LOWL02 0109 9749 ^33 LOWL02 0099 973A 8D A0 FE STA CReg1 LOWL02 0109 9749 ^33 LOWL02 0100 973D A9 84 LDAIM &84 ;+RTS -CTXST -CRXST -TXLAST TDRA FLAG 1-BYT -PSE LOWL02 0109 9749 ^33 LOWL02 0101 973F 8D A1 FE STA CReg2 ;SWITCH TO 1-BYTE MODE PAD WITH FLAGS LOWL02 0109 9749 ^33 LOWL02 0102 9742 LOWL02 0109 9749 ^33 LOWL02 0103 9742 ;CHECK FOR OK CRC LOWL02 0109 9749 ^33 LOWL02 0104 9742 A9 02 LDAIM FV LOWL02 0109 9749 ^33 LOWL02 0105 9744 2C A1 FE BIT SReg2 LOWL02 0109 9749 ^33 LOWL02 0106 9747 F0 B5 BEQ RXSERR ;BAD CRC LOWL02 0109 9749 ^33 LOWL02 0107 9749 LOWL02 0109 9749 ^33 LOWL02 0108 9749 ;CHECK FOR UNREAD DATA BYTE LOWL02 0109 9749 ^33 LOWL02 0109 9749 10 B3 BPL RXSERR ;NOT ONE MORE EXTRA BYTE -- LOWL02 0110 974B AD A2 FE LDA RXBYTE -- LOWL02 0111 974E 99 3D 0D STAAY SCOUTB ;STORE LAST BYTE OF SCOUT BUFFER -- LOWL02 0112 9751 A9 44 LDAIM &44 ;-TXRST +RXRST -RXDISC -TDSR -RDSR +TIE -RIE SCR2 -- LOWL02 0113 9753 8D A0 FE STA CReg1 -- LOWL02 0114 9756 -- LOWL02 0115 9756 ;CHECK FOR IMMEDIATE OPERATION -- LOWL02 0116 9756 38 SEC -- LOWL02 0117 9757 66 98 ROR TUBLOK ;SET TUBE LOCK FLAG -- LOWL02 0118 9759 AD 40 0D LDA SBPORT -- LOWL02 0119 975C D0 03 BNE NOIMED LOWL02 0119 975C v7C LOWL02 0120 975E 4C 46 9A JMP RXIMED ;PROCESS IMMEDIATE OPERATION LOWL02 0119 975C v7C LOWL02 0121 9761 LOWL02 0119 975C v7C LOWL02 0122 9761 LOWL02 0119 975C v7C LOWL02 0123 9761 NOIMED LOWL02 0119 975C v7C LOWL02 0124 9761 ;SWITCH OFF TX IF BROADCAST LOWL02 0119 975C v7C LOWL02 0125 9761 2C 4A 0D BIT NSTATE -- LOWL02 0126 9764 50 05 BVC NOBRD LOWL02 LOWL02 LOWL02 LOWL02 Acorn macro assembler Page 6 LOWL02 Receive routines. File > LOWL02 LOWL02 LOWL02 0126 9764 v7A LOWL02 0127 9766 A9 07 LDAIM SEVEN ; -RTS -CTXST -CRXST -TXLAST TDRA FLAG 2-BYT +PSE LOWL02 0126 9764 v7A LOWL02 0128 9768 8D A1 FE STA CReg2 ;TURN OFF TX LOWL02 0126 9764 v7A LOWL02 0129 976B NOBRD LOWL02 0126 9764 v7A LOWL02 0130 976B ;CHECK WHETHER AN RX CONTROL BLOCK EXISTS LOWL02 0126 9764 v7A LOWL02 0131 976B 2C 64 0D BIT SSTATE -- LOWL02 0132 976E 10 3E BPL USERCB ;NO NFS RXCB,TEST FOR USER CONTROL BLOCKS LOWL02 0132 976E v41 LOWL02 0133 9770 LOWL02 0132 976E v41 LOWL02 0134 9770 ;FIND A MATCHING RXCBLOCK LOWL02 0132 976E v41 LOWL02 0135 9770 A9 C0 LDAIM :LSB: RXCB LOWL02 0132 976E v41 LOWL02 0136 9772 A0 00 LDYIM :MSB: RXCB LOWL02 0132 976E v41 LOWL02 0137 9774 FNDLP1 LOWL02 0132 976E v41 LOWL02 0138 9774 85 A6 STA RXCBPT LOWL02 0179 97B7 ^3B LOWL02 0139 9776 84 A7 STY RXCBPT + ONE ;LOAD UP TO POINT TO NFS CONTROL BLOCKS LOWL02 0179 97B7 ^3B LOWL02 0140 9778 FINDLP LOWL02 0179 97B7 ^3B LOWL02 0141 9778 A0 00 LDYIM ZERO LOWL02 0179 97B7 ^3B LOWL02 0142 977A B1 A6 LDAIY RXCBPT LOWL02 0179 97B7 ^3B LOWL02 0143 977C F0 2D BEQ RXSCER ;TERMINATOR FOUND IN USER CBLOCKS LOWL02 0179 97B7 ^3B LOWL02 0144 977E C9 7F CMPIM RXRDY ;VALID RECEIVE CONTROL BYTE LOWL02 0179 97B7 ^3B LOWL02 0145 9780 D0 1C BNE NOMACH LOWL02 0179 97B7 ^3B LOWL02 0146 9782 C8 INY ;INCREMENT TO PORT LOWL02 0179 97B7 ^3B LOWL02 0147 9783 B1 A6 LDAIY RXCBPT LOWL02 0179 97B7 ^3B LOWL02 0148 9785 F0 05 BEQ PMATCH ;WILDCARD ZERO PORT ID LOWL02 0179 97B7 ^3B LOWL02 0149 9787 CD 40 0D CMP SBPORT LOWL02 0179 97B7 ^3B LOWL02 0150 978A D0 12 BNE NOMACH ;NO PORT MATCH LOWL02 0179 97B7 ^3B LOWL02 0151 978C PMATCH LOWL02 0179 97B7 ^3B LOWL02 0152 978C C8 INY ;INCR TO STATION LO LOWL02 0179 97B7 ^3B LOWL02 0153 978D B1 A6 LDAIY RXCBPT LOWL02 0179 97B7 ^3B LOWL02 0154 978F F0 28 BEQ MATCHl ; ****** Bruce 27/2/86 ******* SLOMAT ;WILDCARD ZERO STATION ID LOWL02 0179 97B7 ^3B LOWL02 0155 9791 CD 3D 0D CMP SBSRLO LOWL02 0179 97B7 ^3B LOWL02 0156 9794 D0 08 BNE NOMACH ;NO STATION LO MATCH LOWL02 0179 97B7 ^3B LOWL02 0157 9796 SLOMAT LOWL02 0179 97B7 ^3B LOWL02 0158 9796 C8 INY LOWL02 0179 97B7 ^3B LOWL02 0159 9797 B1 A6 LDAIY RXCBPT LOWL02 0179 97B7 ^3B LOWL02 0160 9799 CD 3E 0D CMP SBSRHI LOWL02 0179 97B7 ^3B LOWL02 0161 979C F0 1B BEQ MATCHl ;NO STATION HI MATCH LOWL02 0179 97B7 ^3B LOWL02 0162 979E NOMACH ; Get past pointer locations LOWL02 0179 97B7 ^3B LOWL02 0163 979E A5 A7 LDA RXCBPT + ONE ; Test to see if USER or NFS LOWL02 0179 97B7 ^3B LOWL02 0164 97A0 F0 0C BEQ USERCB ; Was in zero page so it was NFS LOWL02 0179 97B7 ^3B LOWL02 0165 97A2 A5 A6 LDA RXCBPT LOWL02 0179 97B7 ^3B LOWL02 0166 97A4 18 CLC LOWL02 0179 97B7 ^3B LOWL02 0167 97A5 69 0C ADCIM &0C ;POINT TO NEXT RXCB LOWL02 0179 97B7 ^3B LOWL02 0168 97A7 85 A6 STA RXCBPT LOWL02 0179 97B7 ^3B LOWL02 0169 97A9 90 CD BCC FINDLP ;RXCB SPACE EXHAUSTED AND NO MATCH LOWL02 0179 97B7 ^3B LOWL02 0170 97AB LOWL02 0179 97B7 ^3B LOWL02 0171 97AB RXSCER ;ERROR IN SCOUT PACKET LOWL02 0179 97B7 ^3B LOWL02 0172 97AB 4C 35 98 JMP RXDERR LOWL02 0179 97B7 ^3B LOWL02 0173 97AE LOWL02 0179 97B7 ^3B LOWL02 0174 97AE USERCB LOWL02 0179 97B7 ^3B LOWL02 0175 97AE 2C 64 0D BIT SSTATE ;CHECK BIT 4 LOWL02 0179 97B7 ^3B LOWL02 0176 97B1 50 F8 BVC RXSCER LOWL02 0179 97B7 ^3B LOWL02 0177 97B3 A9 00 LDAIM ZERO LOWL02 0179 97B7 ^3B LOWL02 0178 97B5 A4 9F LDY DYNVC2 + ONE ;POINT TO 2ND PAGE DYNAMIC WORKSPACE LOWL02 0179 97B7 ^3B LOWL02 0179 97B7 D0 BB BNE FNDLP1 LOWL02 0154 978F v57 LOWL02 0180 97B9 LOWL02 0154 978F v57 LOWL02 0181 97B9 MATCHl LOWL02 0154 978F v57 LOWL02 0182 97B9 ;CALCULATE DATA POINTERS I.E. TRANSLATION LOWL02 0154 978F v57 LOWL02 0183 97B9 ; BIT NSTATE ;CHECK FOR BROADCAST LOWL02 0154 978F v57 LOWL02 0184 97B9 ; BVC NOBRDC LOWL02 0154 978F v57 LOWL02 0185 97B9 ; JMP BRDUP LOWL02 0154 978F v57 LOWL02 0186 97B9 NOBRDC LOWL02 0154 978F v57 LOWL02 0187 97B9 LOWL02 0154 978F v57 LOWL02 0188 97B9 A9 03 LDAIM THREE ;REG A INDICATES DOUBLE BYTE WRITE OPERATION -- LOWL02 0189 97BB 8D 5C 0D STA TDIR ;INDICATE A WRITE TO TUBE -- LOWL02 0190 97BE 20 CA 9E JSR ADCALC -- LOWL02 0191 97C1 ; BCS CLMOKK ;NO TUBE CLAIM ERROR -- LOWL02 0192 97C1 90 72 BCC RXDERR ; There was a TUBE claim error ! LOWL02 0192 97C1 v0D LOWL02 0193 97C3 LOWL02 0192 97C1 v0D LOWL02 0194 97C3 2C 4A 0D BIT NSTATE ; Check for broadcast RX LOWL02 0192 97C1 v0D LOWL02 0195 97C6 50 03 BVC CLMOKK ; If not then as normal LOWL02 0192 97C1 v0D LOWL02 0196 97C8 4C F2 99 JMP BRDRX ; Recieve a broadcast LOWL02 0192 97C1 v0D LOWL02 0197 97CB LOWL02 0192 97C1 v0D LOWL02 0198 97CB CLMOKK LOWL02 0192 97C1 v0D LOWL02 0199 97CB LOWL02 0192 97C1 v0D LOWL02 0200 97CB ;ACKNOWLEDGE SCOUT PACKET N.B. DONT HAVE TO CLAIM LOWL02 0192 97C1 v0D LOWL02 0201 97CB ACKSCO LOWL02 0192 97C1 v0D LOWL02 0202 97CB A9 44 LDAIM &44 ;-TXRST +RXRST -RXDISC -TDSR -RDSR +TIE -RIE SCR2 LOWL02 0192 97C1 v0D LOWL02 0203 97CD 8D A0 FE STA CReg1 LOWL02 0192 97C1 v0D LOWL02 0204 97D0 A9 A7 LDAIM &A7 ;+RTS -CTXST +CRXST -TLAST TDRA FLAG 2-BYT +PSE LOWL02 0192 97C1 v0D LOWL02 0205 97D2 8D A1 FE STA CReg2 LOWL02 0192 97C1 v0D LOWL02 0206 97D5 A9 DC LDAIM :LSB: NOACK LOWL02 0192 97C1 v0D LOWL02 0207 97D7 A0 97 LDYIM :MSB: NOACK LOWL02 0192 97C1 v0D LOWL02 0208 97D9 4C 07 99 JMP TXACK LOWL02 0192 97C1 v0D LOWL02 0209 97DC LOWL02 0192 97C1 v0D LOWL02 0210 97DC NOACK LOWL02 0192 97C1 v0D LOWL02 0211 97DC A9 82 LDAIM &82 ;+TXRST -RXRST -RXDISC -TDSR -RDSR -RDSR -TIE +RIE SCR2 LOWL02 0192 97C1 v0D LOWL02 0212 97DE 8D A0 FE STA CReg1 LOWL02 0192 97C1 v0D LOWL02 0213 97E1 LOWL02 0192 97C1 v0D LOWL02 0214 97E1 A9 E6 LDAIM :LSB: RXDAST LOWL02 0192 97C1 v0D LOWL02 0215 97E3 [ FAST3 <> TRUE LOWL02 0192 97C1 v0D LOWL02 0218 97E3 | LOWL02 0192 97C1 v0D LOWL02 0219 97E3 4C 11 0D JMP WRXNTF ; New fast code ! LOWL02 0192 97C1 v0D LOWL02 0220 97E6 ] LOWL02 0192 97C1 v0D LOWL02 0221 97E6 LOWL02 0192 97C1 v0D LOWL02 0222 97E6 ;RECEIVE DATA PACKET LOWL02 0192 97C1 v0D LOWL02 0223 97E6 RXDAST LOWL02 0192 97C1 v0D LOWL02 0224 97E6 A9 01 LDAIM AP LOWL02 0192 97C1 v0D LOWL02 0225 97E8 2C A1 FE BIT SReg2 ;CHECK FOR ADDRESS PRESENT LOWL02 0192 97C1 v0D LOWL02 0226 97EB F0 48 BEQ RXDERR ;ADDR PRESENT EXPECTED LOWL02 0192 97C1 v0D LOWL02 0227 97ED AD A2 FE LDA RXBYTE LOWL02 0192 97C1 v0D LOWL02 0228 97F0 CD 18 FE CMP STNID ;TEST DESTLO FOR STATION MATCH LOWL02 0192 97C1 v0D LOWL02 0229 97F3 D0 40 BNE RXDERR ;DATA PACKET NOT FOR US. DISC PACKET LOWL02 0192 97C1 v0D LOWL02 0230 97F5 ;TSTHI LOWL02 0192 97C1 v0D LOWL02 0231 97F5 A9 FA LDAIM :LSB: WSOUR LOWL02 0192 97C1 v0D LOWL02 0232 97F7 [ FAST4 <> TRUE LOWL02 0192 97C1 v0D LOWL02 0235 97F7 | LOWL02 0192 97C1 v0D LOWL02 0236 97F7 4C 11 0D JMP WRXNTF ; New fast code ! LOWL02 0192 97C1 v0D LOWL02 0237 97FA ] LOWL02 0192 97C1 v0D LOWL02 0238 97FA LOWL02 0192 97C1 v0D LOWL02 0239 97FA WSOUR LOWL02 0192 97C1 v0D LOWL02 0240 97FA 2C A1 FE BIT SReg2 LOWL02 0192 97C1 v0D LOWL02 0241 97FD 10 36 BPL RXDERR ;RXDA EXPECTED N.B IN 2BYTE MODE LOWL02 0192 97C1 v0D LOWL02 0242 97FF AD A2 FE LDA RXBYTE ;NET NUMBER MUST BE ZERO LOWL02 0192 97C1 v0D LOWL02 0243 9802 D0 31 BNE RXDERR ;DATA PACKET NOT FOR US LOWL02 0192 97C1 v0D LOWL02 0244 9804 A9 10 LDAIM :LSB: WDEST LOWL02 0192 97C1 v0D LOWL02 0245 9806 A0 98 LDYIM :MSB: WDEST LOWL02 0192 97C1 v0D LOWL02 0246 9808 2C A0 FE BIT SReg1 ;QUICK IRQ POLL LOWL02 0192 97C1 v0D LOWL02 0247 980B 30 03 BMI WDEST LOWL02 0192 97C1 v0D LOWL02 0248 980D 4C 0E 0D JMP WRXINT LOWL02 0192 97C1 v0D LOWL02 0249 9810 LOWL02 0192 97C1 v0D LOWL02 0250 9810 WDEST LOWL02 0192 97C1 v0D LOWL02 0251 9810 2C A1 FE BIT SReg2 LOWL02 LOWL02 LOWL02 LOWL02 Acorn macro assembler Page 7 LOWL02 Receive routines. File > LOWL02 LOWL02 LOWL02 0192 97C1 v0D LOWL02 0252 9813 10 20 BPL RXDERR ;RXDA EXPECTED LOWL02 0192 97C1 v0D LOWL02 0253 9815 AD A2 FE LDA RXBYTE ;READ 2 DEST BYTES LOWL02 0192 97C1 v0D LOWL02 0254 9818 AD A2 FE LDA RXBYTE ;CHECK AGAINST SCOUT BUFF IF SECURITY NEEDED LOWL02 0192 97C1 v0D LOWL02 0255 981B RXINF LOWL02 0192 97C1 v0D LOWL02 0256 981B A9 02 LDAIM TUBEf LOWL02 0192 97C1 v0D LOWL02 0257 981D 2C 4A 0D BIT NSTATE LOWL02 0192 97C1 v0D LOWL02 0258 9820 D0 0C BNE ISTUBE LOWL02 0192 97C1 v0D LOWL02 0259 9822 A9 43 LDAIM :LSB: AGAIN LOWL02 0192 97C1 v0D LOWL02 0260 9824 A0 98 LDYIM :MSB: AGAIN LOWL02 0192 97C1 v0D LOWL02 0261 9826 2C A0 FE BIT SReg1 ;QUICK IRQ POLL LOWL02 0192 97C1 v0D LOWL02 0262 9829 30 18 BMI AGAIN LOWL02 0192 97C1 v0D LOWL02 0263 982B 4C 0E 0D JMP WRXINT LOWL02 0192 97C1 v0D LOWL02 0264 982E ISTUBE LOWL02 0192 97C1 v0D LOWL02 0265 982E A9 A0 LDAIM :LSB: AGAIN2 LOWL02 0192 97C1 v0D LOWL02 0266 9830 A0 98 LDYIM :MSB: AGAIN2 LOWL02 0192 97C1 v0D LOWL02 0267 9832 4C 0E 0D JMP WRXINT LOWL02 0192 97C1 v0D LOWL02 0268 9835 LOWL02 0192 97C1 v0D LOWL02 0269 9835 ;RECEIVE DATA PACKET ERROR LOWL02 0192 97C1 v0D LOWL02 0270 9835 RXDERR LOWL02 0192 97C1 v0D LOWL02 0271 9835 ;RESET RECEIVER FOR MORE PACKETS LOWL02 0192 97C1 v0D LOWL02 0272 9835 AD 4A 0D LDA NSTATE LOWL02 0325 988E ^25 LOWL02 0273 9838 10 03 BPL NLACK ;BRANCH IF NO LONG ACK LOWL02 0325 988E ^25 LOWL02 0274 983A 4C AC 9E JMP TXBER1 ;REPORT TRANSMIT ERROR LOWL02 0325 988E ^25 LOWL02 0275 983D NLACK LOWL02 0325 988E ^25 LOWL02 0276 983D 20 3D 9F JSR CPINIT ;FLUSH OUT ANY REMAINING BYTES LOWL02 0325 988E ^25 LOWL02 0277 9840 4C DB 99 JMP NOUPDA LOWL02 0325 988E ^25 LOWL02 0278 9843 LOWL02 0325 988E ^25 LOWL02 0279 9843 AGAIN LOWL02 0325 988E ^25 LOWL02 0280 9843 A4 A2 LDY RXYOFF ;LOAD COUNT LOWL02 0325 988E ^25 LOWL02 0281 9845 AD A1 FE LDA SReg2 LOWL02 0325 988E ^25 LOWL02 0282 9848 AGAIN4 LOWL02 0325 988E ^25 LOWL02 0283 9848 10 2D BPL RXEND ;RDA EXPECTED N.B IN 2-BYTE MODE LOWL02 0325 988E ^25 LOWL02 0284 984A AD A2 FE LDA RXBYTE LOWL02 0325 988E ^25 LOWL02 0285 984D 91 A4 STAIY RXDAPT LOWL02 0325 988E ^25 LOWL02 0286 984F C8 INY LOWL02 0325 988E ^25 LOWL02 0287 9850 D0 06 BNE PASS LOWL02 0325 988E ^25 LOWL02 0288 9852 E6 A5 INC RXDAPT + ONE LOWL02 0325 988E ^25 LOWL02 0289 9854 C6 A3 DEC RXPAGE LOWL02 0325 988E ^25 LOWL02 0290 9856 F0 DD BEQ RXDERR ;ERROR BUFFER FULL BUT ONE MORE BYTE LOWL02 0325 988E ^25 LOWL02 0291 9858 PASS LOWL02 0325 988E ^25 LOWL02 0292 9858 AD A1 FE LDA SReg2 LOWL02 0325 988E ^25 LOWL02 0293 985B 30 02 BMI PASS8 LOWL02 0325 988E ^25 LOWL02 0294 985D D0 18 BNE RXEND LOWL02 0325 988E ^25 LOWL02 0295 985F PASS8 LOWL02 0325 988E ^25 LOWL02 0296 985F AD A2 FE LDA RXBYTE LOWL02 0325 988E ^25 LOWL02 0297 9862 91 A4 STAIY RXDAPT LOWL02 0325 988E ^25 LOWL02 0298 9864 C8 INY LOWL02 0325 988E ^25 LOWL02 0299 9865 84 A2 STY RXYOFF LOWL02 0325 988E ^25 LOWL02 0300 9867 D0 06 BNE OUTK LOWL02 0325 988E ^25 LOWL02 0301 9869 LOWL02 0325 988E ^25 LOWL02 0302 9869 UPCONT LOWL02 0325 988E ^25 LOWL02 0303 9869 E6 A5 INC RXDAPT + ONE LOWL02 0325 988E ^25 LOWL02 0304 986B C6 A3 DEC RXPAGE LOWL02 0325 988E ^25 LOWL02 0305 986D F0 08 BEQ RXEND ;IS THIS AN ERROR? LOWL02 0325 988E ^25 LOWL02 0306 986F OUTK LOWL02 0325 988E ^25 LOWL02 0307 986F AD A1 FE LDA SReg2 ;QUICK IRQ POLL LOWL02 0325 988E ^25 LOWL02 0308 9872 D0 D4 BNE AGAIN4 LOWL02 0325 988E ^25 LOWL02 0309 9874 4C 14 0D JMP WRXIN2 LOWL02 0325 988E ^25 LOWL02 0310 9877 LOWL02 0325 988E ^25 LOWL02 0311 9877 LOWL02 0325 988E ^25 LOWL02 0312 9877 ;CHECK UNREAD DATA BYTE,CRC ETC. LOWL02 0325 988E ^25 LOWL02 0313 9877 RXEND LOWL02 0325 988E ^25 LOWL02 0314 9877 A9 84 LDAIM &84 ;+RTS -CTXST -CRXST -TLAST TDRA FLAG 1BYTE -PSE LOWL02 0325 988E ^25 LOWL02 0315 9879 8D A1 FE STA CReg2 ;SWITCH TO 1-BYTE FOR LATER 1 BYTE TEST LOWL02 0325 988E ^25 LOWL02 0316 987C A9 00 LDAIM ZERO ;-TXRS -RXRS -FDISC -TDSR -RDSR -TIE -RIE SCR2 LOWL02 0325 988E ^25 LOWL02 0317 987E 8D A0 FE STA CReg1 LOWL02 0325 988E ^25 LOWL02 0318 9881 84 A2 STY RXYOFF LOWL02 0325 988E ^25 LOWL02 0319 9883 A9 02 LDAIM FV ;CHECK CRC LOWL02 0325 988E ^25 LOWL02 0320 9885 2C A1 FE BIT SReg2 LOWL02 0325 988E ^25 LOWL02 0321 9888 F0 AB BEQ RXDERR ;PACKET CRC BAD LOWL02 0325 988E ^25 LOWL02 0322 988A LOWL02 0325 988E ^25 LOWL02 0323 988A 10 11 BPL NOBYT ;CHECK UNREAD BYTE LOWL02 0325 988E ^25 LOWL02 0324 988C A5 A3 LDA RXPAGE LOWL02 0325 988E ^25 LOWL02 0325 988E F0 A5 BCXXX1 BEQ RXDERR ;FRAME TOO LONG, NOW BEING BRANCHED THROUGH LOWL02 0374 98DE ^2E LOWL02 0326 9890 AD A2 FE LDA RXBYTE ;READ EXTRA BYTE LOWL02 0374 98DE ^2E LOWL02 0327 9893 A4 A2 LDY RXYOFF LOWL02 0374 98DE ^2E LOWL02 0328 9895 91 A4 STAIY RXDAPT LOWL02 0374 98DE ^2E LOWL02 0329 9897 E6 A2 INC RXYOFF ;UPDATE POINTERS LOWL02 0374 98DE ^2E LOWL02 0330 9899 D0 02 BNE NOBYT LOWL02 0374 98DE ^2E LOWL02 0331 989B E6 A5 INC RXDAPT + ONE LOWL02 0374 98DE ^2E LOWL02 0332 989D NOBYT LOWL02 0374 98DE ^2E LOWL02 0333 989D 4C EE 98 JMP NOBYT2 LOWL02 0374 98DE ^2E LOWL02 0334 98A0 LOWL02 0374 98DE ^2E LOWL02 0335 98A0 LOWL02 0374 98DE ^2E LOWL02 0336 98A0 LOWL02 0374 98DE ^2E LOWL02 0337 98A0 AGAIN2 LOWL02 0374 98DE ^2E LOWL02 0338 98A0 AD A1 FE LDA SReg2 LOWL02 0374 98DE ^2E LOWL02 0339 98A3 AGAIN3 LOWL02 0374 98DE ^2E LOWL02 0340 98A3 10 1E BPL RXEND2 ;RXDA EXPECTED LOWL02 0374 98DE ^2E LOWL02 0341 98A5 AD A2 FE LDA RXBYTE LOWL02 0374 98DE ^2E LOWL02 0342 98A8 20 37 9A JSR INCRXP LOWL02 0374 98DE ^2E LOWL02 0343 98AB F0 E1 BEQ BCXXX1 ; RXDER2, RXDERR is the real destination LOWL02 0374 98DE ^2E LOWL02 0344 98AD 8D E5 FE STA R3DATA LOWL02 0374 98DE ^2E LOWL02 0345 98B0 LOWL02 0374 98DE ^2E LOWL02 0346 98B0 CONTIN LOWL02 0374 98DE ^2E LOWL02 0347 98B0 AD A2 FE LDA RXBYTE LOWL02 0374 98DE ^2E LOWL02 0348 98B3 8D E5 FE STA R3DATA LOWL02 0374 98DE ^2E LOWL02 0349 98B6 20 37 9A JSR INCRXP LOWL02 0374 98DE ^2E LOWL02 0350 98B9 F0 08 BEQ RXEND2 LOWL02 0374 98DE ^2E LOWL02 0351 98BB OUTT LOWL02 0374 98DE ^2E LOWL02 0352 98BB AD A1 FE LDA SReg2 ;QUICK IRQ POLL TO SAVE STACK WORK LOWL02 0374 98DE ^2E LOWL02 0353 98BE D0 E3 BNE AGAIN3 LOWL02 0374 98DE ^2E LOWL02 0354 98C0 4C 14 0D JMP WRXIN2 LOWL02 0374 98DE ^2E LOWL02 0355 98C3 LOWL02 0374 98DE ^2E LOWL02 0356 98C3 ;RXDER2 LOWL02 0374 98DE ^2E LOWL02 0357 98C3 ; JMP RXDERR LOWL02 0374 98DE ^2E LOWL02 0358 98C3 LOWL02 0374 98DE ^2E LOWL02 0359 98C3 RXEND2 LOWL02 0374 98DE ^2E LOWL02 0360 98C3 ;CHECK UNREAD DATA BYTE,CRC ETC. LOWL02 0374 98DE ^2E LOWL02 0361 98C3 A9 00 LDAIM ZERO ;-TXRS -RXRS -FDISC -TDSR -RDSR -TIE -RIE SCR2 LOWL02 0374 98DE ^2E LOWL02 0362 98C5 8D A0 FE STA CReg1 LOWL02 0374 98DE ^2E LOWL02 0363 98C8 A9 84 LDAIM &84 ;+RTS -CTXST -CRXST -TLAST TDRA FLAG 1BYTE -PSE LOWL02 0374 98DE ^2E LOWL02 0364 98CA 8D A1 FE STA CReg2 ;SWITCH TO 1-BYTE FOR LATER 1 BYTE TEST LOWL02 0374 98DE ^2E LOWL02 0365 98CD A9 02 LDAIM FV ;CHECK CRC LOWL02 0374 98DE ^2E LOWL02 0366 98CF 2C A1 FE BIT SReg2 LOWL02 0374 98DE ^2E LOWL02 0367 98D2 F0 BA BEQ BCXXX1 ; RXDER2 ;PACKET CRC BAD, RXDERR is destination LOWL02 0374 98DE ^2E LOWL02 0368 98D4 LOWL02 0374 98DE ^2E LOWL02 0369 98D4 10 18 BPL NOBYT2 ;CHECK UNREAD BYTE LOWL02 0374 98DE ^2E LOWL02 0370 98D6 A5 A2 LDA RXYOFF ;CHECK IF FRAME TOO LONG LOWL02 0374 98DE ^2E LOWL02 0371 98D8 05 A3 ORA RXPAGE LOWL02 0374 98DE ^2E LOWL02 0372 98DA 05 A4 ORA RXDAPT LOWL02 LOWL02 LOWL02 LOWL02 Acorn macro assembler Page 8 LOWL02 Receive routines. File > LOWL02 LOWL02 LOWL02 0374 98DE ^2E LOWL02 0373 98DC 05 A5 ORA RXDAPT + ONE LOWL02 0374 98DE ^2E LOWL02 0374 98DE F0 AE BEQ BCXXX1 ; RXDER2 ;TUBE FRAME TOO LONG, RXDERR is destination LOWL02 0369 98D4 v67 LOWL02 0375 98E0 AD A2 FE LDA RXBYTE ;N.B. CHECK COUNTERS!!!!! LOWL02 0369 98D4 v67 LOWL02 0376 98E3 8D 5D 0D STA LSTBYT LOWL02 0369 98D4 v67 LOWL02 0377 98E6 A9 20 LDAIM ONEBYT LOWL02 0369 98D4 v67 LOWL02 0378 98E8 0D 4A 0D ORA NSTATE LOWL02 0369 98D4 v67 LOWL02 0379 98EB 8D 4A 0D STA NSTATE LOWL02 0369 98D4 v67 LOWL02 0380 98EE LOWL02 0369 98D4 v67 LOWL02 0381 98EE NOBYT2 ;UPDATE RXDAPT TO POINT TO DATA END LOWL02 0369 98D4 v67 LOWL02 0382 98EE NOPAGE LOWL02 0369 98D4 v67 LOWL02 0383 98EE AD 4A 0D LDA NSTATE ;CHECK FOR LONG ACK PACKET -- LOWL02 0384 98F1 10 06 BPL TXAK LOWL02 0384 98F1 v79 LOWL02 0385 98F3 20 4E 99 JSR LASTBY ;PUT LAST BYTE UP TUBE IF ANY LOWL02 0384 98F1 v79 LOWL02 0386 98F6 4C A8 9E JMP UPTXCB ;UPDATE TXCBLOCK LOWL02 0384 98F1 v79 LOWL02 0387 98F9 LOWL02 0384 98F1 v79 LOWL02 0388 98F9 TXAK LOWL02 0384 98F1 v79 LOWL02 0389 98F9 ;ACKNOWLEDGE DATA PACKET LOWL02 0384 98F1 v79 LOWL02 0390 98F9 A9 44 LDAIM &44 ;-TXRST +RXRST -RXDISC -TDSR -RDSR -RDSR +TIE -RIE SCR2 -- LOWL02 0391 98FB 8D A0 FE STA CReg1 -- LOWL02 0392 98FE A9 A7 LDAIM &A7 ;+RTS -CTXST +CRXST -TLAST TDRA MARK 2-BYT +PSE -- LOWL02 0393 9900 8D A1 FE STA CReg2 -- LOWL02 0394 9903 A9 95 LDAIM :LSB: UPDATE -- LOWL02 0395 9905 A0 99 LDYIM :MSB: UPDATE -- LOWL02 0396 9907 -- LOWL02 0397 9907 ;TRANSMIT AN ACKNOWLEDGEMENT PACKET -- LOWL02 0398 9907 TXACK -- LOWL02 0399 9907 8D 4B 0D STA TXLINK -- LOWL02 0400 990A 8C 4C 0D STY TXLINK + ONE ;SAVE SUBROUTINE LINKAGE -- LOWL02 0401 990D ;TX 2BYTES DESTINATION -- LOWL02 0402 990D AD 3D 0D LDA SBSRLO -- LOWL02 0403 9910 2C A0 FE BIT SReg1 -- LOWL02 0404 9913 50 36 BVC RXAERR ;TDRA EXPECTED N.B. IN 2 BYTE MODE LOWL02 0404 9913 v49 LOWL02 0405 9915 8D A2 FE STA TXBYTE ;TRANSMIT SOURCE LO LOWL02 0404 9913 v49 LOWL02 0406 9918 AD 3E 0D LDA SBSRHI LOWL02 0404 9913 v49 LOWL02 0407 991B 8D A2 FE STA TXBYTE ;TRANSMIT SOURCE HI LOWL02 0404 9913 v49 LOWL02 0408 991E A9 25 LDAIM :LSB: TXACKS LOWL02 0404 9913 v49 LOWL02 0409 9920 A0 99 LDYIM :MSB: TXACKS LOWL02 0404 9913 v49 LOWL02 0410 9922 4C 0E 0D JMP WTXINT ;WAIT FOR TX INTERUPT LOWL02 0404 9913 v49 LOWL02 0411 9925 LOWL02 0404 9913 v49 LOWL02 0412 9925 TXACKS ;TX 2BYTES SOURCE LOWL02 0404 9913 v49 LOWL02 0413 9925 AD 18 FE LDA STNID LOWL02 0404 9913 v49 LOWL02 0414 9928 2C A0 FE BIT SReg1 LOWL02 0404 9913 v49 LOWL02 0415 992B 50 1E BVC RXAERR ;TDRA EXPECTED N.B. IN 2-BYTE MODE LOWL02 0404 9913 v49 LOWL02 0416 992D 8D A2 FE STA TXBYTE LOWL02 0404 9913 v49 LOWL02 0417 9930 A9 00 LDAIM NETnum LOWL02 0404 9913 v49 LOWL02 0418 9932 8D A2 FE STA TXBYTE LOWL02 0404 9913 v49 LOWL02 0419 9935 AD 4A 0D LDA NSTATE LOWL02 0404 9913 v49 LOWL02 0420 9938 30 0E BMI NOEND LOWL02 0404 9913 v49 LOWL02 0421 993A ;END PACKET TRANSMISSION LOWL02 0404 9913 v49 LOWL02 0422 993A A9 3F LDAIM &3F ;-RTS -CTXST +CRXST +TXLST FC FLAG 2-BYT +PSE LOWL02 0404 9913 v49 LOWL02 0423 993C 8D A1 FE STA CReg2 LOWL02 0404 9913 v49 LOWL02 0424 993F AD 4B 0D LDA TXLINK LOWL02 0404 9913 v49 LOWL02 0425 9942 AC 4C 0D LDY TXLINK + ONE LOWL02 0404 9913 v49 LOWL02 0426 9945 4C 0E 0D JMP WTXINT ;WAIT FOR TX INTERUPT FC EVENT AND RETURN TO CALLER LOWL02 0404 9913 v49 LOWL02 0427 9948 NOEND LOWL02 0404 9913 v49 LOWL02 0428 9948 4C B3 9D JMP TXINF ;FOR LONG ACK LOWL02 0404 9913 v49 LOWL02 0429 994B LOWL02 0404 9913 v49 LOWL02 0430 994B ;ERROR IN TRANSMITTING AN ACK PACKET LOWL02 0404 9913 v49 LOWL02 0431 994B RXAERR LOWL02 0404 9913 v49 LOWL02 0432 994B ;RESET RECEIVER FOR MORE PACKETS LOWL02 0404 9913 v49 LOWL02 0433 994B 4C 35 98 JMP RXDERR -- LOWL02 0434 994E -- LOWL02 0435 994E LASTBY -- LOWL02 0436 994E A9 02 LDAIM TUBEf ;IF TUBE TERMINATE CHANNEL -- LOWL02 0437 9950 2C 4A 0D BIT NSTATE -- LOWL02 0438 9953 F0 3F BEQ TOUT2 ;EXIT AND FLAG T.UPDATE NOT DONE LOWL02 0438 9953 v40 LOWL02 0439 9955 ; .N.B. DO 32 BIT UPDATE LOWL02 0438 9953 v40 LOWL02 0440 9955 18 CLC LOWL02 0438 9953 v40 LOWL02 0441 9956 08 PHP LOWL02 0438 9953 v40 LOWL02 0442 9957 A0 08 LDYIM CBEALO LOWL02 0438 9953 v40 LOWL02 0443 9959 LOOPIN LOWL02 0438 9953 v40 LOWL02 0444 9959 B1 A6 LDAIY RXCBPT LOWL02 0438 9953 v40 LOWL02 0445 995B 28 PLP LOWL02 0438 9953 v40 LOWL02 0446 995C 79 9A 00 ADCAY RXYOFF -CBEALO LOWL02 0438 9953 v40 LOWL02 0447 995F 91 A6 STAIY RXCBPT LOWL02 0438 9953 v40 LOWL02 0448 9961 C8 INY LOWL02 0438 9953 v40 LOWL02 0449 9962 08 PHP LOWL02 0438 9953 v40 LOWL02 0450 9963 C0 0C CPYIM XTRA1L LOWL02 0438 9953 v40 LOWL02 0451 9965 90 F2 BCC LOOPIN LOWL02 0438 9953 v40 LOWL02 0452 9967 28 PLP LOWL02 0438 9953 v40 LOWL02 0453 9968 LOWL02 0438 9953 v40 LOWL02 0454 9968 A9 20 LDAIM ONEBYT LOWL02 0438 9953 v40 LOWL02 0455 996A 2C 4A 0D BIT NSTATE LOWL02 0438 9953 v40 LOWL02 0456 996D F0 23 BEQ TOUT1 LOWL02 0438 9953 v40 LOWL02 0457 996F LOWL02 0438 9953 v40 LOWL02 0458 996F 8A TXA LOWL02 0438 9953 v40 LOWL02 0459 9970 48 PHA LOWL02 0438 9953 v40 LOWL02 0460 9971 A9 08 LDAIM CBEALO LOWL02 0438 9953 v40 LOWL02 0461 9973 18 CLC LOWL02 0438 9953 v40 LOWL02 0462 9974 65 A6 ADC RXCBPT LOWL02 0438 9953 v40 LOWL02 0463 9976 AA TAX LOWL02 0438 9953 v40 LOWL02 0464 9977 A4 A7 LDY RXCBPT + ONE LOWL02 0438 9953 v40 LOWL02 0465 9979 A9 01 LDAIM ONE ; ONE BYTE WRITE LOWL02 0438 9953 v40 LOWL02 0466 997B 20 06 04 JSR tADDRl LOWL02 0438 9953 v40 LOWL02 0467 997E AD 5D 0D LDA LSTBYT LOWL02 0438 9953 v40 LOWL02 0468 9981 8D E5 FE STA R3DATA LOWL02 0438 9953 v40 LOWL02 0469 9984 38 SEC LOWL02 0438 9953 v40 LOWL02 0470 9985 A0 08 LDYIM CBEALO LOWL02 0438 9953 v40 LOWL02 0471 9987 TINC4 LOWL02 0438 9953 v40 LOWL02 0472 9987 A9 00 LDAIM ZERO LOWL02 0438 9953 v40 LOWL02 0473 9989 71 A6 ADCIY RXCBPT LOWL02 0438 9953 v40 LOWL02 0474 998B 91 A6 STAIY RXCBPT LOWL02 0438 9953 v40 LOWL02 0475 998D C8 INY LOWL02 0438 9953 v40 LOWL02 0476 998E B0 F7 BCS TINC4 LOWL02 0438 9953 v40 LOWL02 0477 9990 LOWL02 0438 9953 v40 LOWL02 0478 9990 LOWL02 0438 9953 v40 LOWL02 0479 9990 68 PLA LOWL02 0438 9953 v40 LOWL02 0480 9991 AA TAX LOWL02 0438 9953 v40 LOWL02 0481 9992 TOUT1 LOWL02 0438 9953 v40 LOWL02 0482 9992 A9 FF LDAIM &FF LOWL02 0438 9953 v40 LOWL02 0483 9994 TOUT2 LOWL02 0438 9953 v40 LOWL02 0484 9994 60 RTS -- LOWL02 0485 9995 -- LOWL02 0486 9995 -- LOWL02 0487 9995 -- LOWL02 0488 9995 ;UPDATE RECEIVE CONTROL BLOCK -- LOWL02 0489 9995 UPDATE -- LOWL02 0490 9995 AD 40 0D LDA SBPORT -- LOWL02 0491 9998 D0 0A BNE NOTIMM ;DONT UPDATE RXCB IF IMMED OPERATION LOWL02 0491 9998 v75 LOWL02 0492 999A AC 3F 0D LDY SBCNTL LOWL02 0491 9998 v75 LOWL02 0493 999D C0 82 CPYIM IPOKE LOWL02 LOWL02 LOWL02 LOWL02 Acorn macro assembler Page 9 LOWL02 Receive routines. File > LOWL02 LOWL02 LOWL02 0491 9998 v75 LOWL02 0494 999F F0 03 BEQ NOTIMM LOWL02 0491 9998 v75 LOWL02 0495 99A1 4C E7 9A JMP ENDIM LOWL02 0491 9998 v75 LOWL02 0496 99A4 LOWL02 0491 9998 v75 LOWL02 0497 99A4 NOTIMM LOWL02 0491 9998 v75 LOWL02 0498 99A4 20 4E 99 JSR LASTBY ;LAST BYTE TUBE WRITE -- LOWL02 0499 99A7 D0 12 BNE CBUUPD ;BRANCH IF UPDATE DONE ALREADY LOWL02 0499 99A7 v6D LOWL02 0500 99A9 NOTTUB LOWL02 0499 99A7 v6D LOWL02 0501 99A9 A5 A2 LDA RXYOFF LOWL02 0499 99A7 v6D LOWL02 0502 99AB 18 CLC ;CALC BUFFER END LOWL02 0499 99A7 v6D LOWL02 0503 99AC 65 A4 ADC RXDAPT LOWL02 0499 99A7 v6D LOWL02 0504 99AE 90 02 BCC NOPGE LOWL02 0499 99A7 v6D LOWL02 0505 99B0 E6 A5 INC RXDAPT + ONE LOWL02 0499 99A7 v6D LOWL02 0506 99B2 LOWL02 0499 99A7 v6D LOWL02 0507 99B2 NOPGE LOWL02 0499 99A7 v6D LOWL02 0508 99B2 A0 08 LDYIM CBEALO LOWL02 0499 99A7 v6D LOWL02 0509 99B4 91 A6 STAIY RXCBPT ;UPDATE BUFFER END LO LOWL02 0499 99A7 v6D LOWL02 0510 99B6 C8 INY LOWL02 0499 99A7 v6D LOWL02 0511 99B7 A5 A5 LDA RXDAPT + ONE ;UPDATE BUFFER END HI LOWL02 0499 99A7 v6D LOWL02 0512 99B9 91 A6 STAIY RXCBPT LOWL02 0499 99A7 v6D LOWL02 0513 99BB LOWL02 0499 99A7 v6D LOWL02 0514 99BB CBUUPD LOWL02 0499 99A7 v6D LOWL02 0515 99BB AD 40 0D LDA SBPORT -- LOWL02 0516 99BE F0 1B BEQ NOUPDA ;IM PEEK OPERATION CHECK LOWL02 0516 99BE v64 LOWL02 0517 99C0 AD 3E 0D LDA SBSRHI ;UPDATE SOURCE HI LOWL02 0516 99BE v64 LOWL02 0518 99C3 A0 03 LDYIM CBSRHI LOWL02 0516 99BE v64 LOWL02 0519 99C5 91 A6 STAIY RXCBPT LOWL02 0516 99BE v64 LOWL02 0520 99C7 88 DEY LOWL02 0516 99BE v64 LOWL02 0521 99C8 LOWL02 0516 99BE v64 LOWL02 0522 99C8 AD 3D 0D LDA SBSRLO ;UPDATE SOURCE LO LOWL02 0516 99BE v64 LOWL02 0523 99CB 91 A6 STAIY RXCBPT LOWL02 0516 99BE v64 LOWL02 0524 99CD 88 DEY LOWL02 0516 99BE v64 LOWL02 0525 99CE LOWL02 0516 99BE v64 LOWL02 0526 99CE AD 40 0D LDA SBPORT ;UPDATE PORT LOWL02 0516 99BE v64 LOWL02 0527 99D1 91 A6 STAIY RXCBPT LOWL02 0516 99BE v64 LOWL02 0528 99D3 88 DEY LOWL02 0516 99BE v64 LOWL02 0529 99D4 LOWL02 0516 99BE v64 LOWL02 0530 99D4 AD 3F 0D LDA SBCNTL ;UPDATE CONTROL BYTE LOWL02 0516 99BE v64 LOWL02 0531 99D7 09 80 ORAIM &80 ;SET TOP BIT LOWL02 0516 99BE v64 LOWL02 0532 99D9 91 A6 STAIY RXCBPT LOWL02 0516 99BE v64 LOWL02 0533 99DB LOWL02 0516 99BE v64 LOWL02 0534 99DB LOWL02 0516 99BE v64 LOWL02 0535 99DB NOUPDA LOWL02 0516 99BE v64 LOWL02 0536 99DB A9 02 LDAIM TUBEf ;TEST IF WE HAVE BEEN TUBING -- LOWL02 0537 99DD 2D 67 0D AND TUBEFL ;MAKE FUCKING SURE THERE IS A TUBE -- LOWL02 0538 99E0 2C 4A 0D BIT NSTATE -- LOWL02 0539 99E3 F0 03 BEQ NOUPD2 LOWL02 0539 99E3 v7C LOWL02 0540 99E5 20 2B 9A JSR TUBREL LOWL02 0539 99E3 v7C LOWL02 0541 99E8 NOUPD2 LOWL02 0539 99E3 v7C LOWL02 0542 99E8 20 4C 9F JSR CPRST LOWL02 0637 9A61 ^05 LOWL02 0543 99EB NOUPD3 LOWL02 0637 9A61 ^05 LOWL02 0544 99EB A9 BF LDAIM :LSB: REC LOWL02 0637 9A61 ^05 LOWL02 0545 99ED A0 96 LDYIM :MSB: REC LOWL02 0637 9A61 ^05 LOWL02 0546 99EF 4C 0E 0D JMP WRXINT LOWL02 0637 9A61 ^05 LOWL02 0547 99F2 LOWL02 0637 9A61 ^05 LOWL02 0548 99F2 ;BRDUP ; The original broadcast RX LOWL02 0637 9A61 ^05 LOWL02 0549 99F2 ; LDYIM CBSALO LOWL02 0637 9A61 ^05 LOWL02 0550 99F2 ;BRDLP LOWL02 0637 9A61 ^05 LOWL02 0551 99F2 ; LDAAY SCOUTB LOWL02 0637 9A61 ^05 LOWL02 0552 99F2 ; STAIY RXCBPT LOWL02 0637 9A61 ^05 LOWL02 0553 99F2 ; INY LOWL02 0637 9A61 ^05 LOWL02 0554 99F2 ; CPYIM &0C ;COMPARE TO END OF CONTROL BLOCK LOWL02 0637 9A61 ^05 LOWL02 0555 99F2 ; BNE BRDLP LOWL02 0637 9A61 ^05 LOWL02 0556 99F2 ; JMP CBUUPD LOWL02 0637 9A61 ^05 LOWL02 0557 99F2 LOWL02 0637 9A61 ^05 LOWL02 0558 99F2 BRDRX ; The new broadcast reception LOWL02 0637 9A61 ^05 LOWL02 0559 99F2 8A TXA LOWL02 0637 9A61 ^05 LOWL02 0560 99F3 48 PHA LOWL02 0637 9A61 ^05 LOWL02 0561 99F4 A2 04 LDXIM CBSALO LOWL02 0637 9A61 ^05 LOWL02 0562 99F6 A9 02 LDAIM TUBEf ; Also set Z flag on Tube state LOWL02 0637 9A61 ^05 LOWL02 0563 99F8 2C 4A 0D BIT NSTATE ; Do the check LOWL02 0637 9A61 ^05 LOWL02 0564 99FB D0 1C BNE TUBRDC LOWL02 0637 9A61 ^05 LOWL02 0565 99FD IOBRDC LOWL02 0637 9A61 ^05 LOWL02 0566 99FD A4 A2 LDY RXYOFF LOWL02 0637 9A61 ^05 LOWL02 0567 99FF LOWL02 0637 9A61 ^05 LOWL02 0568 99FF IOBRC1 LOWL02 0637 9A61 ^05 LOWL02 0569 99FF BD 3D 0D LDAAX SCOUTB LOWL02 0637 9A61 ^05 LOWL02 0570 9A02 91 A4 STAIY RXDAPT LOWL02 0637 9A61 ^05 LOWL02 0571 9A04 C8 INY LOWL02 0637 9A61 ^05 LOWL02 0572 9A05 D0 06 BNE IOBRC2 LOWL02 0637 9A61 ^05 LOWL02 0573 9A07 E6 A5 INC RXDAPT + ONE LOWL02 0637 9A61 ^05 LOWL02 0574 9A09 C6 A3 DEC RXPAGE LOWL02 0637 9A61 ^05 LOWL02 0575 9A0B F0 61 BEQ BRCER1 ; Remember to pull X first LOWL02 0637 9A61 ^05 LOWL02 0576 9A0D IOBRC2 LOWL02 0637 9A61 ^05 LOWL02 0577 9A0D E8 INX LOWL02 0637 9A61 ^05 LOWL02 0578 9A0E 84 A2 STY RXYOFF LOWL02 0637 9A61 ^05 LOWL02 0579 9A10 E0 0C CPXIM CBSALO + EIGHT LOWL02 0637 9A61 ^05 LOWL02 0580 9A12 D0 EB BNE IOBRC1 LOWL02 0637 9A61 ^05 LOWL02 0581 9A14 BRDCT1 LOWL02 0637 9A61 ^05 LOWL02 0582 9A14 68 PLA LOWL02 0637 9A61 ^05 LOWL02 0583 9A15 AA TAX LOWL02 0637 9A61 ^05 LOWL02 0584 9A16 4C A4 99 JMP NOTIMM LOWL02 0637 9A61 ^05 LOWL02 0585 9A19 LOWL02 0637 9A61 ^05 LOWL02 0586 9A19 TUBRDC LOWL02 0637 9A61 ^05 LOWL02 0587 9A19 BD 3D 0D LDAAX SCOUTB LOWL02 0637 9A61 ^05 LOWL02 0588 9A1C 8D E5 FE STA R3DATA LOWL02 0637 9A61 ^05 LOWL02 0589 9A1F 20 37 9A JSR INCRXP LOWL02 0637 9A61 ^05 LOWL02 0590 9A22 F0 4C BEQ BRCERR LOWL02 0637 9A61 ^05 LOWL02 0591 9A24 TUBRC2 LOWL02 0637 9A61 ^05 LOWL02 0592 9A24 E8 INX LOWL02 0637 9A61 ^05 LOWL02 0593 9A25 E0 0C CPXIM CBSALO + EIGHT LOWL02 0637 9A61 ^05 LOWL02 0594 9A27 D0 F0 BNE TUBRDC LOWL02 0637 9A61 ^05 LOWL02 0595 9A29 F0 E9 BEQ BRDCT1 LOWL02 0637 9A61 ^05 LOWL02 0596 9A2B LOWL02 0637 9A61 ^05 LOWL02 0597 9A2B TUBREL LOWL02 0637 9A61 ^05 LOWL02 0598 9A2B 24 98 BIT TUBLOK LOWL02 0637 9A61 ^05 LOWL02 0599 9A2D 30 05 BMI NOREL LOWL02 0637 9A61 ^05 LOWL02 0600 9A2F A9 82 LDAIM &82 ;RELEASE TUBE LOWL02 0637 9A61 ^05 LOWL02 0601 9A31 20 06 04 JSR tADDRl LOWL02 0637 9A61 ^05 LOWL02 0602 9A34 NOREL LOWL02 0637 9A61 ^05 LOWL02 0603 9A34 46 98 LSR TUBLOK LOWL02 0637 9A61 ^05 LOWL02 0604 9A36 60 RTS LOWL02 0637 9A61 ^05 LOWL02 0605 9A37 LOWL02 0637 9A61 ^05 LOWL02 0606 9A37 INCRXP LOWL02 0637 9A61 ^05 LOWL02 0607 9A37 E6 A2 INC RXYOFF ; Increment the 4 byte pointer LOWL02 0637 9A61 ^05 LOWL02 0608 9A39 D0 0A BNE INCRXX LOWL02 0637 9A61 ^05 LOWL02 0609 9A3B E6 A3 INC RXPAGE LOWL02 0637 9A61 ^05 LOWL02 0610 9A3D D0 06 BNE INCRXX LOWL02 0637 9A61 ^05 LOWL02 0611 9A3F E6 A4 INC RXDAPT LOWL02 0637 9A61 ^05 LOWL02 0612 9A41 D0 02 BNE INCRXX LOWL02 0637 9A61 ^05 LOWL02 0613 9A43 E6 A5 INC RXDAPT + ONE LOWL02 0637 9A61 ^05 LOWL02 0614 9A45 INCRXX LOWL02 LOWL02 LOWL02 LOWL02 Acorn macro assembler Page 10 LOWL02 Receive routines. File > LOWL02 LOWL02 LOWL02 0637 9A61 ^05 LOWL02 0615 9A45 60 RTS LOWL02 0637 9A61 ^05 LOWL02 0616 9A46 LOWL02 0637 9A61 ^05 LOWL02 0617 9A46 LOWL02 0637 9A61 ^05 LOWL02 0618 9A46 ;PROCESS IMMEDIATE OPERATION LOWL02 0637 9A61 ^05 LOWL02 0619 9A46 RXIMED LOWL02 0637 9A61 ^05 LOWL02 0620 9A46 AC 3F 0D LDY SBCNTL LOWL02 0637 9A61 ^05 LOWL02 0621 9A49 C0 81 CPYIM IPEEK LOWL02 0637 9A61 ^05 LOWL02 0622 9A4B 90 29 BCC IMERR LOWL02 0637 9A61 ^05 LOWL02 0623 9A4D C0 89 CPYIM IMACH + ONE LOWL02 0637 9A61 ^05 LOWL02 0624 9A4F B0 25 BCS IMERR ;RANGE CHECK LOWL02 0637 9A61 ^05 LOWL02 0625 9A51 C0 87 CPYIM ISTRT LOWL02 0637 9A61 ^05 LOWL02 0626 9A53 B0 0E BCS PRIVST ;NO PROTECTION FOR LAST TWO IM OPS LOWL02 0637 9A61 ^05 LOWL02 0627 9A55 LOWL02 0637 9A61 ^05 LOWL02 0628 9A55 98 TYA LOWL02 0637 9A61 ^05 LOWL02 0629 9A56 38 SEC LOWL02 0637 9A61 ^05 LOWL02 0630 9A57 E9 81 SBCIM IPEEK LOWL02 0637 9A61 ^05 LOWL02 0631 9A59 A8 TAY LOWL02 0637 9A61 ^05 LOWL02 0632 9A5A AD 63 0D LDA IMASK LOWL02 0637 9A61 ^05 LOWL02 0633 9A5D FINDIM LOWL02 0637 9A61 ^05 LOWL02 0634 9A5D 6A RORA LOWL02 0637 9A61 ^05 LOWL02 0635 9A5E 88 DEY LOWL02 0637 9A61 ^05 LOWL02 0636 9A5F 10 FC BPL FINDIM LOWL02 0637 9A61 ^05 LOWL02 0637 9A61 B0 85 BCS NOUPD2 ;PROTECTED FROM IM OPERATION LOWL02 0575 9A0B v1E LOWL02 0638 9A63 LOWL02 0575 9A0B v1E LOWL02 0639 9A63 PRIVST LOWL02 0575 9A0B v1E LOWL02 0640 9A63 AC 3F 0D LDY SBCNTL LOWL02 0575 9A0B v1E LOWL02 0641 9A66 ;LDAAY JMPIMH -IPEEK ;NIFTY CASE INSTUCTION LOWL02 0575 9A0B v1E LOWL02 0642 9A66 A9 9A LDAIM JMPIMH LOWL02 0575 9A0B v1E LOWL02 0643 9A68 48 PHA LOWL02 0575 9A0B v1E LOWL02 0644 9A69 B9 F8 99 LDAAY JMPIML -IPEEK LOWL02 0575 9A0B v1E LOWL02 0645 9A6C 48 PHA LOWL02 0575 9A0B v1E LOWL02 0646 9A6D 60 RTS LOWL02 0575 9A0B v1E LOWL02 0647 9A6E LOWL02 0575 9A0B v1E LOWL02 0648 9A6E BRCER1 LOWL02 0575 9A0B v1E LOWL02 0649 9A6E E6 A2 INC RXYOFF LOWL02 0652 9A72 ^20 LOWL02 0650 9A70 BRCERR ; The error in broadcast LOWL02 0652 9A72 ^20 LOWL02 0651 9A70 E0 0B CPXIM CBSALO + SEVEN LOWL02 0652 9A72 ^20 LOWL02 0652 9A72 F0 A0 BEQ BRDCT1 LOWL02 0622 9A4B v56 LOWL02 0653 9A74 68 PLA LOWL02 0622 9A4B v56 LOWL02 0654 9A75 AA TAX LOWL02 0622 9A4B v56 LOWL02 0655 9A76 LOWL02 0622 9A4B v56 LOWL02 0656 9A76 IMERR LOWL02 0622 9A4B v56 LOWL02 0657 9A76 4C 35 98 JMP RXDERR -- LOWL02 0658 9A79 -- LOWL02 0659 9A79 JMPIML ;IMMED OP JUMP TABLE -- LOWL02 0660 9A79 BB = RXPEEK - ONE -- LOWL02 0661 9A7A 9E = RXPOKE - ONE -- LOWL02 0662 9A7B 80 = RXRTN - ONE -- LOWL02 0663 9A7C 80 = RXPROE - ONE -- LOWL02 0664 9A7D 80 = RXPROH - ONE -- LOWL02 0665 9A7E D5 = RXSTOP - ONE -- LOWL02 0666 9A7F D5 = RXSTRT - ONE -- LOWL02 0667 9A80 A9 = RXMACH - ONE -- LOWL02 0668 9A81 -- LOWL02 0669 9A81 RXRTN -- LOWL02 0670 9A81 RXPROE -- LOWL02 0671 9A81 RXPROH -- LOWL02 0672 9A81 A9 00 LDAIM ZERO -- LOWL02 0673 9A83 85 A4 STA RXDAPT -- LOWL02 0674 9A85 A9 82 LDAIM PROBUF -- LOWL02 0675 9A87 85 A2 STA RXYOFF -- LOWL02 0676 9A89 A9 01 LDAIM ONE -- LOWL02 0677 9A8B 85 A3 STA RXPAGE -- LOWL02 0678 9A8D A5 9D LDA DYNVC1 + ONE ;POINT TO DYNAMIC WORKSPACE -- LOWL02 0679 9A8F 85 A5 STA RXDAPT + ONE -- LOWL02 0680 9A91 A0 03 LDYIM THREE ;LOAD COUNTER -- LOWL02 0681 9A93 MORSTR -- LOWL02 0682 9A93 B9 41 0D LDAAY SBADT1 LOWL02 0685 9A9A ^77 LOWL02 0683 9A96 99 58 0D STAAY IRQSTR + ONE LOWL02 0685 9A9A ^77 LOWL02 0684 9A99 88 DEY LOWL02 0685 9A9A ^77 LOWL02 0685 9A9A 10 F7 BPL MORSTR ;SAVE SCOUT BUFF VARIABLES COS IRQ IS VERY VERY SLOW -- LOWL02 0686 9A9C 4C CB 97 JMP ACKSCO -- LOWL02 0687 9A9F -- LOWL02 0688 9A9F RXPOKE -- LOWL02 0689 9A9F A9 3D LDAIM :LSB: SCOUTB -- LOWL02 0690 9AA1 85 A6 STA RXCBPT -- LOWL02 0691 9AA3 A9 0D LDAIM :MSB: SCOUTB ;MAKE RXCBPT POINT TO SCOUT BUFFER -- LOWL02 0692 9AA5 85 A7 STA RXCBPT + ONE -- LOWL02 0693 9AA7 4C B9 97 JMP NOBRDC -- LOWL02 0694 9AAA RXMACH -- LOWL02 0695 9AAA A9 01 LDAIM ONE ;ONE PAGE -- LOWL02 0696 9AAC 85 A3 STA RXPAGE -- LOWL02 0697 9AAE A9 FC LDAIM &100 - MSIZE ;POINT TO MACHINE PEEK AREA -- LOWL02 0698 9AB0 85 A2 STA RXYOFF -- LOWL02 0699 9AB2 A9 25 LDAIM :LSB: (MCPEEK + MSIZE - &100) -- LOWL02 0700 9AB4 85 A4 STA RXDAPT -- LOWL02 0701 9AB6 A9 7F LDAIM :MSB: (MCPEEK + MSIZE - &100) -- LOWL02 0702 9AB8 85 A5 STA RXDAPT + ONE -- LOWL02 0703 9ABA [ ZERO = :MSB: (MCPEEK + MSIZE - &100) -- LOWL02 0705 9ABA | -- LOWL02 0706 9ABA D0 12 BNE SENDIT LOWL02 0706 9ABA v6D LOWL02 0707 9ABC ] LOWL02 0706 9ABA v6D LOWL02 0708 9ABC LOWL02 0706 9ABA v6D LOWL02 0709 9ABC LOWL02 0706 9ABA v6D LOWL02 0710 9ABC RXPEEK LOWL02 0706 9ABA v6D LOWL02 0711 9ABC ;CALCULATE RXDAPT RXYOFF RXPAGE LOWL02 0706 9ABA v6D LOWL02 0712 9ABC A9 3D LDAIM :LSB: SCOUTB ;MAKE RXCBPT POINT TO SCOUT BUFFER LOWL02 0706 9ABA v6D LOWL02 0713 9ABE 85 A6 STA RXCBPT LOWL02 0706 9ABA v6D LOWL02 0714 9AC0 A9 0D LDAIM :MSB: SCOUTB LOWL02 0706 9ABA v6D LOWL02 0715 9AC2 85 A7 STA RXCBPT + ONE LOWL02 0706 9ABA v6D LOWL02 0716 9AC4 A9 02 LDAIM TWO ;DOUBLE BYTE WRITE LOWL02 0706 9ABA v6D LOWL02 0717 9AC6 8D 5C 0D STA TDIR LOWL02 0706 9ABA v6D LOWL02 0718 9AC9 20 CA 9E JSR ADCALC LOWL02 0706 9ABA v6D LOWL02 0719 9ACC 90 4F BCC EXITIM ;TUBE CLAIM FAILED LOWL02 0719 9ACC v30 LOWL02 0720 9ACE SENDIT LOWL02 0719 9ACC v30 LOWL02 0721 9ACE AD 4A 0D LDA NSTATE ;SET LONG ACK FLAG LOWL02 0719 9ACC v30 LOWL02 0722 9AD1 09 80 ORAIM &80 LOWL02 0719 9ACC v30 LOWL02 0723 9AD3 8D 4A 0D STA NSTATE ;NOTE AFTER TXACK THE JUMP BACK IS DIRECT LOWL02 0719 9ACC v30 LOWL02 0724 9AD6 LOWL02 0719 9ACC v30 LOWL02 0725 9AD6 RXSTOP LOWL02 0719 9ACC v30 LOWL02 0726 9AD6 RXSTRT LOWL02 0719 9ACC v30 LOWL02 0727 9AD6 A9 44 LDAIM &44 ;-TXRST +RXRST -FDISC -TDSR -RDSR +TIE -RIE SCR2 LOWL02 0719 9ACC v30 LOWL02 0728 9AD8 8D A0 FE STA CReg1 LOWL02 0719 9ACC v30 LOWL02 0729 9ADB A9 A7 LDAIM &A7 ;+RTS -CTXST +CRXST -TXLD TDRA FLAG 2BYT +PSE LOWL02 0719 9ACC v30 LOWL02 0730 9ADD 8D A1 FE STA CReg2 ;ENABLE TRANSMIT LOWL02 0719 9ACC v30 LOWL02 0731 9AE0 A9 FD LDAIM :LSB: CIRQ LOWL02 0719 9ACC v30 LOWL02 0732 9AE2 A0 9A LDYIM :MSB: CIRQ LOWL02 0719 9ACC v30 LOWL02 0733 9AE4 4C 07 99 JMP TXACK LOWL02 0719 9ACC v30 LOWL02 0734 9AE7 LOWL02 0719 9ACC v30 LOWL02 0735 9AE7 ENDIM LOWL02 0719 9ACC v30 LOWL02 0736 9AE7 ;RESTORE RXDAPT TO POINT TO PROCEDURE BUFFER LOWL02 LOWL02 LOWL02 LOWL02 Acorn macro assembler Page 11 LOWL02 Receive routines. File > LOWL02 LOWL02 LOWL02 0719 9ACC v30 LOWL02 0737 9AE7 LOWL02 0719 9ACC v30 LOWL02 0738 9AE7 A5 A2 LDA RXYOFF ;CALC PARAMETER SIZE LOWL02 0719 9ACC v30 LOWL02 0739 9AE9 18 CLC LOWL02 0719 9ACC v30 LOWL02 0740 9AEA 69 80 ADCIM &100 -PROBUF +&02 ;TWO ALLOWS FOR STATION NUMBER LOWL02 0719 9ACC v30 LOWL02 0741 9AEC A0 7F LDYIM BUFCNT LOWL02 0719 9ACC v30 LOWL02 0742 9AEE 91 9C STAIY DYNVC1 ;UPDATE BUFFER COUNT LOWL02 0719 9ACC v30 LOWL02 0743 9AF0 LOWL02 0719 9ACC v30 LOWL02 0744 9AF0 A0 80 LDYIM STNNO LOWL02 0719 9ACC v30 LOWL02 0745 9AF2 AD 3D 0D LDA SBSRLO LOWL02 0719 9ACC v30 LOWL02 0746 9AF5 91 9C STAIY DYNVC1 LOWL02 0719 9ACC v30 LOWL02 0747 9AF7 C8 INY LOWL02 0719 9ACC v30 LOWL02 0748 9AF8 AD 3E 0D LDA SBSRHI LOWL02 0719 9ACC v30 LOWL02 0749 9AFB 91 9C STAIY DYNVC1 ;STORE CALLING STATION NUMBER LOWL02 0719 9ACC v30 LOWL02 0750 9AFD LOWL02 0719 9ACC v30 LOWL02 0751 9AFD ;CAUSE IRQ LOWL02 0719 9ACC v30 LOWL02 0752 9AFD CIRQ LOWL02 0719 9ACC v30 LOWL02 0753 9AFD AD 3F 0D LDA SBCNTL LOWL02 0719 9ACC v30 LOWL02 0754 9B00 8D 57 0D STA IRQSTR ;SAVE SCOUT BUF VARIABLES COS IRQ SLOW LOWL02 0719 9ACC v30 LOWL02 0755 9B03 A9 84 LDAIM &84 LOWL02 0719 9ACC v30 LOWL02 0756 9B05 8D 4E FE STA VIA +&E ;ENABLE SHIFT INT,IER REG LOWL02 0719 9ACC v30 LOWL02 0757 9B08 AD 4B FE LDA VIA +&B ;SHIFT CONTROL BY SYSTEM CLOCK,ACR REG LOWL02 0719 9ACC v30 LOWL02 0758 9B0B 29 1C ANDIM &1C LOWL02 0719 9ACC v30 LOWL02 0759 9B0D 8D 51 0D STA STORE ;SAVE BITS 2,3,4 LOWL02 0719 9ACC v30 LOWL02 0760 9B10 AD 4B FE LDA VIA +&B ;ACR REG LOWL02 0719 9ACC v30 LOWL02 0761 9B13 29 E3 ANDIM &E3 LOWL02 0719 9ACC v30 LOWL02 0762 9B15 09 08 ORAIM EIGHT LOWL02 0719 9ACC v30 LOWL02 0763 9B17 8D 4B FE STA VIA +&B ;ACR REG LOWL02 0719 9ACC v30 LOWL02 0764 9B1A 2C 4A FE BIT VIA +&A ;READ TRIGGERS SHIFT OPERATION,SR REG LOWL02 0719 9ACC v30 LOWL02 0765 9B1D EXITIM LOWL02 0719 9ACC v30 LOWL02 0766 9B1D 4C E8 99 JMP NOUPD2 ;GOBACK TO NORMAL RECEIVE MODE -- LOWL02 0767 9B20 -- LOWL02 0768 9B20 ; The "LOWINT" routine has been moved to LOWL01 !!!!!!! -- LOWL02 0769 9B20 -- LOWL02 0770 9B20 JMPI2L ;IMMED OP LO BYTE JUMP TABLE -- LOWL02 0771 9B20 24 = RXRTN2 - ONE -- LOWL02 0772 9B21 2D = RXPRE2 - ONE -- LOWL02 0773 9B22 3B = RXPRH2 - ONE -- LOWL02 0774 9B23 47 = RXSTP2 - ONE -- LOWL02 0775 9B24 5E = RXSTR2 - ONE -- LOWL02 0776 9B25 -- LOWL02 0777 9B25 RXRTN2 -- LOWL02 0778 9B25 A9 9B LDAIM :MSB: (OUT - ONE) -- LOWL02 0779 9B27 48 PHA -- LOWL02 0780 9B28 A9 66 LDAIM :LSB: (OUT - ONE) ;NOTE TUBE JSR IS NOT ALLOWED -- LOWL02 0781 9B2A 48 PHA -- LOWL02 0782 9B2B 6C 58 0D JMI IRQSTR + ONE ;NON TUBE TYPE ROUTINE CALL -- LOWL02 0783 9B2E -- LOWL02 0784 9B2E RXPRE2 -- LOWL02 0785 9B2E A0 08 LDYIM EIGHT -- LOWL02 0786 9B30 AE 58 0D LDX IRQSTR + ONE -- LOWL02 0787 9B33 AD 59 0D LDA IRQSTR + TWO -- LOWL02 0788 9B36 20 BF FF JSR OSEVEN ;CAUSE EVENT, ON EVENT X,Y HAS PROCEDURE NUMBER -- LOWL02 0789 9B39 4C 67 9B JMP OUT -- LOWL02 0790 9B3C -- LOWL02 0791 9B3C RXPRH2 ;JUMP TO NFS -- LOWL02 0792 9B3C AE 58 0D LDX IRQSTR + ONE -- LOWL02 0793 9B3F AC 59 0D LDY IRQSTR + TWO ;LOAD X AND Y WITH PROC NUMBER -- LOWL02 0794 9B42 20 00 80 JSR USRPRC -- LOWL02 0795 9B45 4C 67 9B JMP OUT -- LOWL02 0796 9B48 -- LOWL02 0797 9B48 RXSTP2 -- LOWL02 0798 9B48 A9 04 LDAIM STOP -- LOWL02 0799 9B4A 2C 64 0D BIT SSTATE -- LOWL02 0800 9B4D D0 18 BNE OUT LOWL02 0800 9B4D v67 LOWL02 0801 9B4F 0D 64 0D ORA SSTATE ;FLAG PROCESSOR IS STOPPED LOWL02 0800 9B4D v67 LOWL02 0802 9B52 8D 64 0D STA SSTATE LOWL02 0800 9B4D v67 LOWL02 0803 9B55 A9 04 LDAIM STOP LOWL02 0800 9B4D v67 LOWL02 0804 9B57 58 CLI ;ENABLE INTERUPT LOWL02 0800 9B4D v67 LOWL02 0805 9B58 TSTSTP LOWL02 0800 9B4D v67 LOWL02 0806 9B58 2C 64 0D BIT SSTATE LOWL02 0800 9B4D v67 LOWL02 0807 9B5B D0 FB BNE TSTSTP ;LOOP UNTIL BIT RESET LOWL02 0800 9B4D v67 LOWL02 0808 9B5D F0 08 BEQ OUT LOWL02 0800 9B4D v67 LOWL02 0809 9B5F LOWL02 0800 9B4D v67 LOWL02 0810 9B5F RXSTR2 LOWL02 0800 9B4D v67 LOWL02 0811 9B5F AD 64 0D LDA SSTATE LOWL02 0800 9B4D v67 LOWL02 0812 9B62 29 FB ANDIM &FF -STOP LOWL02 0800 9B4D v67 LOWL02 0813 9B64 8D 64 0D STA SSTATE ;CLEAR STOPPED STATE LOWL02 0800 9B4D v67 LOWL02 0814 9B67 LOWL02 0800 9B4D v67 LOWL02 0815 9B67 OUT LOWL02 0800 9B4D v67 LOWL02 0816 9B67 68 PLA -- LOWL02 0817 9B68 A8 TAY -- LOWL02 0818 9B69 68 PLA -- LOWL02 0819 9B6A AA TAX -- LOWL02 0820 9B6B OUT2 -- LOWL02 0821 9B6B A9 00 LDAIM ZERO ;CLAIM IRQ -- LOWL02 0822 9B6D 60 RTS -- LOWL02 0823 9B6E -- LOWL02 0824 9B6E LNK LOWL03 -- LOWL03 0001 9B6E TTL Transmit routines. File > LOWL03 -- LOWL03 0002 9B6E OPT TXRTNS LOWL03 LOWL03 LOWL03 LOWL03 Acorn macro assembler Page 12 LOWL03 Transmit routines. File > LOWL03 LOWL03 -- LOWL03 0003 9B6E -- LOWL03 0004 9B6E -- LOWL03 0005 9B6E ;TRANSMIT ROUTINES -- LOWL03 0006 9B6E ;A MESSAGE IS TRANSMITTED WITH A FOUR WAY PACKET HANDSHAKE: -- LOWL03 0007 9B6E ;A SCOUT PACKET IS TRANSMITTED -- LOWL03 0008 9B6E ;AN ACKNOWLEGE PACKET IS AWAITED -- LOWL03 0009 9B6E ;UPON ACKNOWLEDGE A DATA PACKET IS TRANSMITTED -- LOWL03 0010 9B6E ;AN ACKNOWEGE PACKET IS AWAITED -- LOWL03 0011 9B6E -- LOWL03 0012 9B6E -- LOWL03 0013 9B6E ;TRANSMIT NMI SHOULD BE CLAIMED ALREADY -- LOWL03 0014 9B6E TRANSM -- LOWL03 0015 9B6E LOTRAN -- LOWL03 0016 9B6E 8A TXA -- LOWL03 0017 9B6F 48 PHA ;SAVE X REG -- LOWL03 0018 9B70 -- LOWL03 0019 9B70 ;COPY TXCBLOCK TO TX SCOUT AREA -- LOWL03 0020 9B70 A0 02 LDYIM CBSRLO -- LOWL03 0021 9B72 B1 A0 LDAIY TXCBPT -- LOWL03 0022 9B74 8D 20 0D STA TXDELO ;DEST LO -- LOWL03 0023 9B77 C8 INY -- LOWL03 0024 9B78 B1 A0 LDAIY TXCBPT -- LOWL03 0025 9B7A 8D 21 0D STA TXDEHI ;DEST HI -- LOWL03 0026 9B7D A0 00 LDYIM CBCNTL -- LOWL03 0027 9B7F B1 A0 LDAIY TXCBPT -- LOWL03 0028 9B81 30 03 BMI CBLOK ;CHECK VALID CONTROL BYTE TOP BIT SET LOWL03 0028 9B81 v7C LOWL03 0029 9B83 4C 11 9C JMP TXCER4 ;CHECK VALID CONTROL BYTE TOP BIT SET LOWL03 0028 9B81 v7C LOWL03 0030 9B86 CBLOK LOWL03 0028 9B81 v7C LOWL03 0031 9B86 8D 24 0D STA TXCNTL ;CONTROL BYTE -- LOWL03 0032 9B89 AA TAX -- LOWL03 0033 9B8A C8 INY -- LOWL03 0034 9B8B B1 A0 LDAIY TXCBPT -- LOWL03 0035 9B8D 8D 25 0D STA TXPORT ;PORT BYTE -- LOWL03 0036 9B90 D0 33 BNE NOTIM LOWL03 0036 9B90 v4C LOWL03 0037 9B92 LOWL03 0036 9B90 v4C LOWL03 0038 9B92 E0 83 CPXIM IRTN ;CHECK IF PEEK OR POKE LOWL03 0036 9B90 v4C LOWL03 0039 9B94 B0 1B BCS NOCALC LOWL03 0036 9B90 v4C LOWL03 0040 9B96 ;CALCULATE IMMEDIATE VARIABLES N.B. CHECK GOOD CONTROL BYTE LOWL03 0036 9B90 v4C LOWL03 0041 9B96 38 SEC ;CALC PART OF ADDRESS FOR PEEK AND POKE LOWL03 0036 9B90 v4C LOWL03 0042 9B97 08 PHP LOWL03 0036 9B90 v4C LOWL03 0043 9B98 A0 08 LDYIM CBEALO ;SUBTRACTION LOWL03 0036 9B90 v4C LOWL03 0044 9B9A LOOPP LOWL03 0036 9B90 v4C LOWL03 0045 9B9A B1 A0 LDAIY TXCBPT LOWL03 0036 9B90 v4C LOWL03 0046 9B9C 88 DEY LOWL03 0036 9B90 v4C LOWL03 0047 9B9D 88 DEY ;DOWN FOUR POINT TO START ADDRESS LOWL03 0036 9B90 v4C LOWL03 0048 9B9E 88 DEY LOWL03 0036 9B90 v4C LOWL03 0049 9B9F 88 DEY LOWL03 0036 9B90 v4C LOWL03 0050 9BA0 28 PLP LOWL03 0036 9B90 v4C LOWL03 0051 9BA1 F1 A0 SBCIY TXCBPT LOWL03 0036 9B90 v4C LOWL03 0052 9BA3 99 26 0D STAAY TXADRF -CBSALO ;CALC EXTRA REMOTE ADDRESS LOWL03 0036 9B90 v4C LOWL03 0053 9BA6 C8 INY LOWL03 0036 9B90 v4C LOWL03 0054 9BA7 C8 INY LOWL03 0036 9B90 v4C LOWL03 0055 9BA8 C8 INY ;UP FIVE TO END ADDRESS LOWL03 0036 9B90 v4C LOWL03 0056 9BA9 C8 INY LOWL03 0036 9B90 v4C LOWL03 0057 9BAA C8 INY LOWL03 0036 9B90 v4C LOWL03 0058 9BAB 08 PHP LOWL03 0036 9B90 v4C LOWL03 0059 9BAC C0 0C CPYIM XTRA1L LOWL03 0036 9B90 v4C LOWL03 0060 9BAE 90 EA BCC LOOPP LOWL03 0036 9B90 v4C LOWL03 0061 9BB0 28 PLP LOWL03 0036 9B90 v4C LOWL03 0062 9BB1 LOWL03 0036 9B90 v4C LOWL03 0063 9BB1 NOCALC LOWL03 0036 9B90 v4C LOWL03 0064 9BB1 E0 81 CPXIM IPEEK ;CHECK FOR LESS THAN PEEK LOWL03 0036 9B90 v4C LOWL03 0065 9BB3 90 5C BCC TXCER4 LOWL03 0065 9BB3 v23 LOWL03 0066 9BB5 E0 89 CPXIM IMACH + ONE ;COMPARE CONTROL BYTE LOWL03 0065 9BB3 v23 LOWL03 0067 9BB7 B0 58 BCS TXCER4 ;NOT VALID IM OP CONTROL BYTE LOWL03 0065 9BB3 v23 LOWL03 0068 9BB9 A0 0C LDYIM XTRA1L ;POINT TO CB REMOTE FROM LOWL03 0065 9BB3 v23 LOWL03 0069 9BBB LP LOWL03 0065 9BB3 v23 LOWL03 0070 9BBB B1 A0 LDAIY TXCBPT LOWL03 0065 9BB3 v23 LOWL03 0071 9BBD 99 1A 0D STAAY TXADRT -XTRA1L ;STORE IN TX SCOUT AREA LOWL03 0065 9BB3 v23 LOWL03 0072 9BC0 C8 INY LOWL03 0065 9BB3 v23 LOWL03 0073 9BC1 C0 10 CPYIM XTRA2H + ONE ;COPY REMOTE FROM LOWL03 0065 9BB3 v23 LOWL03 0074 9BC3 90 F6 BCC LP LOWL03 0065 9BB3 v23 LOWL03 0075 9BC5 LOWL03 0065 9BB3 v23 LOWL03 0076 9BC5 LOWL03 0065 9BB3 v23 LOWL03 0077 9BC5 LOWL03 0065 9BB3 v23 LOWL03 0078 9BC5 ;CALCULATE DATA BUFFER VARIABLES LOWL03 0065 9BB3 v23 LOWL03 0079 9BC5 NOTIM LOWL03 0065 9BB3 v23 LOWL03 0080 9BC5 A9 20 LDAIM DCD ;CHECK FOR CLOCK LOWL03 0065 9BB3 v23 LOWL03 0081 9BC7 2C A1 FE BIT SReg2 LOWL03 0065 9BB3 v23 LOWL03 0082 9BCA D0 55 BNE TXCER3 ;NO ECONET CLOCK LOWL03 0065 9BB3 v23 LOWL03 0083 9BCC LOWL03 0065 9BB3 v23 LOWL03 0084 9BCC ;INIT CLAIM VARIABLES LOWL03 0065 9BB3 v23 LOWL03 0085 9BCC A9 FD LDAIM &FD LOWL03 0065 9BB3 v23 LOWL03 0086 9BCE 48 PHA LOWL03 0065 9BB3 v23 LOWL03 0087 9BCF A9 06 LDAIM TXADRT -TXDELO LOWL03 0065 9BB3 v23 LOWL03 0088 9BD1 8D 50 0D STA ENTXCT ;STORE END COUNTER LOWL03 0065 9BB3 v23 LOWL03 0089 9BD4 A9 00 LDAIM ZERO LOWL03 0065 9BB3 v23 LOWL03 0090 9BD6 8D 4F 0D STA TXCNT ;STORE SCOUT BUFFER COUNTER LOWL03 0065 9BB3 v23 LOWL03 0091 9BD9 48 PHA ;STORE DELAY COUNT LOWL03 0065 9BB3 v23 LOWL03 0092 9BDA 48 PHA LOWL03 0065 9BB3 v23 LOWL03 0093 9BDB A0 E7 LDYIM &E7 ;+RTS +CTXS +CRXS -TXLA TDRA FLAG 2BYT +PSE LOWL03 0065 9BB3 v23 LOWL03 0094 9BDD LOWL03 0065 9BB3 v23 LOWL03 0095 9BDD ;POLL THE ECONET BUS FOR LINE FREE LOWL03 0065 9BB3 v23 LOWL03 0096 9BDD POLBUS ;N.B. COULD BE RECEIVING A PACKET,TX MUST DETECT THIS LOWL03 0065 9BB3 v23 LOWL03 0097 9BDD A9 04 LDAIM RXIDLE LOWL03 0065 9BB3 v23 LOWL03 0098 9BDF 08 PHP ;SAVE INT STATE ON STACK LOWL03 0065 9BB3 v23 LOWL03 0099 9BE0 78 SEI ;DISABLE IRQ INTERUPT LOWL03 0065 9BB3 v23 LOWL03 0100 9BE1 2C 18 FE BIT INTOFF ;DISABLE NMI INTERUPT LOWL03 0065 9BB3 v23 LOWL03 0101 9BE4 2C 18 FE BIT INTOFF ;MAKE SURE NMI OFF COS IT NIPS IN AFTER JUST ONE LOWL03 0065 9BB3 v23 LOWL03 0102 9BE7 2C A1 FE BIT SReg2 LOWL03 0065 9BB3 v23 LOWL03 0103 9BEA F0 0F BEQ SKIP ;BUS IS NOT IDLE LOWL03 0065 9BB3 v23 LOWL03 0104 9BEC AD A0 FE LDA SReg1 ;READ STATUS FIRST LOWL03 0065 9BB3 v23 LOWL03 0105 9BEF A9 67 LDAIM &67 ;-RTS +CTXS +CRXS -TXL TDRA FLAG 2BYT +PSE LOWL03 0065 9BB3 v23 LOWL03 0106 9BF1 8D A1 FE STA CReg2 ;CLEAR TX AND RX STATUS LOWL03 0065 9BB3 v23 LOWL03 0107 9BF4 A9 10 LDAIM CTS LOWL03 0065 9BB3 v23 LOWL03 0108 9BF6 2C A0 FE BIT SReg1 LOWL03 0065 9BB3 v23 LOWL03 0109 9BF9 D0 34 BNE CLAIM ;BUS UNDRIVEN I.E.FREE LOWL03 0065 9BB3 v23 LOWL03 0110 9BFB LOWL03 0065 9BB3 v23 LOWL03 0111 9BFB SKIP LOWL03 0065 9BB3 v23 LOWL03 0112 9BFB 2C 20 FE BIT INTON ;ENABLE NMI INTERUPT LOWL03 0065 9BB3 v23 LOWL03 0113 9BFE 28 PLP ;ENABLE IRQ INTERUPT LOWL03 0065 9BB3 v23 LOWL03 0114 9BFF BA TSX LOWL03 0065 9BB3 v23 LOWL03 0115 9C00 FE 01 01 INCAX &0101 LOWL03 0065 9BB3 v23 LOWL03 0116 9C03 D0 D8 BNE POLBUS ;APPROX 10 SEC TIMEOUT LOOP LOWL03 0065 9BB3 v23 LOWL03 0117 9C05 FE 02 01 INCAX &0102 LOWL03 0065 9BB3 v23 LOWL03 0118 9C08 D0 D3 BNE POLBUS LOWL03 0065 9BB3 v23 LOWL03 0119 9C0A FE 03 01 INCAX &0103 LOWL03 0065 9BB3 v23 LOWL03 0120 9C0D D0 CE BNE POLBUS LOWL03 0065 9BB3 v23 LOWL03 0121 9C0F F0 04 BEQ TXCER0 ;LINE JAMMED OR HW FAULT LOWL03 0065 9BB3 v23 LOWL03 0122 9C11 LOWL03 0065 9BB3 v23 LOWL03 0123 9C11 TXCER4 LOWL03 LOWL03 LOWL03 LOWL03 Acorn macro assembler Page 13 LOWL03 Transmit routines. File > LOWL03 LOWL03 LOWL03 0065 9BB3 v23 LOWL03 0124 9C11 A9 44 LDAIM &44 ;NOT VALID CONTROL BYTE LOWL03 0082 9BCA v2A LOWL03 0125 9C13 D0 0E BNE TXCERR LOWL03 0082 9BCA v2A LOWL03 0126 9C15 ;ERROR IN CLAIMING THE ECONET LOWL03 0082 9BCA v2A LOWL03 0127 9C15 TXCER0 ;LINE JAMMED LOWL03 0082 9BCA v2A LOWL03 0128 9C15 A9 07 LDAIM SEVEN ;-RTS -CTXS -CRXS -TXLA TDRA FLAG 2BYT +PSE LOWL03 0082 9BCA v2A LOWL03 0129 9C17 8D A1 FE STA CReg2 ;TURN OFF TX IN CASE ITS ME JAMMING LOWL03 0082 9BCA v2A LOWL03 0130 9C1A 68 PLA LOWL03 0082 9BCA v2A LOWL03 0131 9C1B 68 PLA LOWL03 0082 9BCA v2A LOWL03 0132 9C1C 68 PLA ;GET RID OF 3BYTE COUNT VARIABLE LOWL03 0082 9BCA v2A LOWL03 0133 9C1D A9 40 LDAIM &40 LOWL03 0082 9BCA v2A LOWL03 0134 9C1F D0 02 BNE TXCERR LOWL03 0082 9BCA v2A LOWL03 0135 9C21 TXCER3 LOWL03 0082 9BCA v2A LOWL03 0136 9C21 A9 43 LDAIM &43 ;NO CLOCK LOWL03 0109 9BF9 v4B LOWL03 0137 9C23 TXCERR LOWL03 0109 9BF9 v4B LOWL03 0138 9C23 A0 00 LDYIM CBCNTL LOWL03 0109 9BF9 v4B LOWL03 0139 9C25 91 A0 STAIY TXCBPT LOWL03 0109 9BF9 v4B LOWL03 0140 9C27 A9 80 LDAIM &80 ;SIGNAL CLEAR FOR USER TX LOWL03 0109 9BF9 v4B LOWL03 0141 9C29 8D 62 0D STA TXCLRl LOWL03 0109 9BF9 v4B LOWL03 0142 9C2C 68 PLA LOWL03 0109 9BF9 v4B LOWL03 0143 9C2D AA TAX ;RESTORE X LOWL03 0109 9BF9 v4B LOWL03 0144 9C2E 60 RTS LOWL03 0109 9BF9 v4B LOWL03 0145 9C2F LOWL03 0109 9BF9 v4B LOWL03 0146 9C2F ;CLAIM THE ECONET LOWL03 0109 9BF9 v4B LOWL03 0147 9C2F CLAIM LOWL03 0109 9BF9 v4B LOWL03 0148 9C2F 8C A1 FE STY CReg2 ;+RTS +CTXS +CRXS -TXLA TDRA FLAG 2BYT +PSE -- LOWL03 0149 9C32 A2 44 LDXIM &44 ;-TXRS +RXRS -FRDI -TDRA -RDSR +TIE -RIE SCR2 -- LOWL03 0150 9C34 8E A0 FE STX CReg1 ;-TXRS +RXRS -FRDI -TDRA -RDSR +TIE -RIE SCR2 -- LOWL03 0151 9C37 A2 CC LDXIM :LSB: WCLM -- LOWL03 0152 9C39 A0 9C LDYIM :MSB: WCLM -- LOWL03 0153 9C3B 8E 0C 0D STX TXJUMP + ONE -- LOWL03 0154 9C3E 8C 0D 0D STY TXJUMP + TWO ;SAVE TX JUMP ADDRESS -- LOWL03 0155 9C41 38 SEC -- LOWL03 0156 9C42 66 98 ROR TUBLOK ;SET TUBE LOCK -- LOWL03 0157 9C44 2C 20 FE BIT INTON ;ENABLE NMI INTERUPT -- LOWL03 0158 9C47 -- LOWL03 0159 9C47 AD 25 0D LDA TXPORT ;POINT TO PORT -- LOWL03 0160 9C4A D0 42 BNE NTIMM ;NOT IMMED OPERATION LOWL03 0160 9C4A v3D LOWL03 0161 9C4C LOWL03 0160 9C4A v3D LOWL03 0162 9C4C AC 24 0D LDY TXCNTL LOWL03 0160 9C4A v3D LOWL03 0163 9C4F B9 41 9E LDAAY NSTAT1 -IPEEK LOWL03 0160 9C4A v3D LOWL03 0164 9C52 8D 4A 0D STA NSTATE ;STORE NSTATE LOWL03 0160 9C4A v3D LOWL03 0165 9C55 B9 39 9E LDAAY ENCT2 -IPEEK LOWL03 0160 9C4A v3D LOWL03 0166 9C58 8D 50 0D STA ENTXCT ;STORE END COUNT LOWL03 0160 9C4A v3D LOWL03 0167 9C5B LOWL03 0160 9C4A v3D LOWL03 0168 9C5B ; LDAAY TXIMH -IPEEK ;NIFTY CASE INSTUCTION LOWL03 0160 9C4A v3D LOWL03 0169 9C5B A9 9C LDAIM TXIMH LOWL03 0160 9C4A v3D LOWL03 0170 9C5D 48 PHA LOWL03 0160 9C4A v3D LOWL03 0171 9C5E B9 E2 9B LDAAY TXIML -IPEEK LOWL03 0160 9C4A v3D LOWL03 0172 9C61 48 PHA LOWL03 0160 9C4A v3D LOWL03 0173 9C62 60 RTS LOWL03 0160 9C4A v3D LOWL03 0174 9C63 LOWL03 0160 9C4A v3D LOWL03 0175 9C63 LOWL03 0160 9C4A v3D LOWL03 0176 9C63 TXIML LOWL03 0160 9C4A v3D LOWL03 0177 9C63 6E = PEEKIT - ONE LOWL03 0160 9C4A v3D LOWL03 0178 9C64 72 = POKEIT - ONE LOWL03 0160 9C4A v3D LOWL03 0179 9C65 B4 = RTNIT - ONE LOWL03 0160 9C4A v3D LOWL03 0180 9C66 B4 = PROEIT - ONE LOWL03 0160 9C4A v3D LOWL03 0181 9C67 B4 = PROHIT - ONE LOWL03 0160 9C4A v3D LOWL03 0182 9C68 C4 = STOPIT - ONE LOWL03 0160 9C4A v3D LOWL03 0183 9C69 C4 = STRTIT - ONE LOWL03 0160 9C4A v3D LOWL03 0184 9C6A 6A = MACHIT - ONE LOWL03 0160 9C4A v3D LOWL03 0185 9C6B LOWL03 0160 9C4A v3D LOWL03 0186 9C6B MACHIT LOWL03 0160 9C4A v3D LOWL03 0187 9C6B A9 03 LDAIM THREE ;TUBE WRITE LOWL03 0160 9C4A v3D LOWL03 0188 9C6D D0 48 BNE SKIP8 LOWL03 0188 9C6D v37 LOWL03 0189 9C6F PEEKIT LOWL03 0188 9C6D v37 LOWL03 0190 9C6F A9 03 LDAIM THREE ;TUBE WRITE LOWL03 0188 9C6D v37 LOWL03 0191 9C71 D0 02 BNE SKIP7 LOWL03 0188 9C6D v37 LOWL03 0192 9C73 LOWL03 0188 9C6D v37 LOWL03 0193 9C73 POKEIT LOWL03 0188 9C6D v37 LOWL03 0194 9C73 A9 02 LDAIM TWO ;TUBE READ LOWL03 0188 9C6D v37 LOWL03 0195 9C75 SKIP7 LOWL03 0188 9C6D v37 LOWL03 0196 9C75 8D 5C 0D STA TDIR LOWL03 0188 9C6D v37 LOWL03 0197 9C78 18 CLC LOWL03 0188 9C6D v37 LOWL03 0198 9C79 08 PHP LOWL03 0188 9C6D v37 LOWL03 0199 9C7A A0 0C LDYIM XTRA1L LOWL03 0188 9C6D v37 LOWL03 0200 9C7C MRCOPY LOWL03 0188 9C6D v37 LOWL03 0201 9C7C B9 1E 0D LDAAY TXADRF -XTRA1L ;ADDITION LOWL03 0188 9C6D v37 LOWL03 0202 9C7F 28 PLP LOWL03 0188 9C6D v37 LOWL03 0203 9C80 71 A0 ADCIY TXCBPT LOWL03 0188 9C6D v37 LOWL03 0204 9C82 99 1E 0D STAAY TXADRF -XTRA1L ;CALCULATE EXTRA REMOTE ADDRESS LO LOWL03 0188 9C6D v37 LOWL03 0205 9C85 C8 INY LOWL03 0188 9C6D v37 LOWL03 0206 9C86 08 PHP LOWL03 0188 9C6D v37 LOWL03 0207 9C87 C0 10 CPYIM XTRA1L + FOUR LOWL03 0188 9C6D v37 LOWL03 0208 9C89 90 F1 BCC MRCOPY ; Exit condition is Y = XTRA1L + FOUR ( Y <> 0) LOWL03 0188 9C6D v37 LOWL03 0209 9C8B 28 PLP LOWL03 0188 9C6D v37 LOWL03 0210 9C8C D0 2C BNE CALCAD ;CALCULATE ADDRESSES, Hence a BNE here not JMP LOWL03 0188 9C6D v37 LOWL03 0211 9C8E LOWL03 0188 9C6D v37 LOWL03 0212 9C8E NTIMM LOWL03 0188 9C6D v37 LOWL03 0213 9C8E AD 20 0D LDA TXDELO ;LOAD SOURCE ADDRESS LOWL03 0188 9C6D v37 LOWL03 0214 9C91 2D 21 0D AND TXDEHI LOWL03 0188 9C6D v37 LOWL03 0215 9C94 C9 FF CMPIM &FF LOWL03 0188 9C6D v37 LOWL03 0216 9C96 D0 18 BNE NOBR LOWL03 0188 9C6D v37 LOWL03 0217 9C98 A9 0E LDAIM &0E ;LENGTH OF BROADCAST SCOUT PACKET LOWL03 0188 9C6D v37 LOWL03 0218 9C9A 8D 50 0D STA ENTXCT LOWL03 0188 9C6D v37 LOWL03 0219 9C9D A9 40 LDAIM BCAST ;FLAG BROADCAST LOWL03 0188 9C6D v37 LOWL03 0220 9C9F 8D 4A 0D STA NSTATE LOWL03 0188 9C6D v37 LOWL03 0221 9CA2 A0 04 LDYIM CBSALO ;POINT TO CB REMOTE FROM LOWL03 0188 9C6D v37 LOWL03 0222 9CA4 LPP LOWL03 0188 9C6D v37 LOWL03 0223 9CA4 B1 A0 LDAIY TXCBPT ;COPY BROADCAST PARAMETERS LOWL03 0188 9C6D v37 LOWL03 0224 9CA6 99 22 0D STAAY TXBUFl + TWO ;STORE IN TX SCOUT AREA LOWL03 0188 9C6D v37 LOWL03 0225 9CA9 C8 INY LOWL03 0188 9C6D v37 LOWL03 0226 9CAA C0 0C CPYIM XTRA1L LOWL03 0188 9C6D v37 LOWL03 0227 9CAC 90 F6 BCC LPP LOWL03 0188 9C6D v37 LOWL03 0228 9CAE B0 15 BCS OUT3 LOWL03 0188 9C6D v37 LOWL03 0229 9CB0 LOWL03 0188 9C6D v37 LOWL03 0230 9CB0 NOBR LOWL03 0188 9C6D v37 LOWL03 0231 9CB0 A9 00 LDAIM ZERO LOWL03 0188 9C6D v37 LOWL03 0232 9CB2 8D 4A 0D STA NSTATE ;STORE STATE TO END SCOUT PACKET LOWL03 0188 9C6D v37 LOWL03 0233 9CB5 LOWL03 0188 9C6D v37 LOWL03 0234 9CB5 RTNIT LOWL03 0188 9C6D v37 LOWL03 0235 9CB5 PROEIT LOWL03 0188 9C6D v37 LOWL03 0236 9CB5 PROHIT LOWL03 0188 9C6D v37 LOWL03 0237 9CB5 A9 02 LDAIM TWO ;DOUBLE BYTE TUBE READ LOWL03 0188 9C6D v37 LOWL03 0238 9CB7 SKIP8 LOWL03 0188 9C6D v37 LOWL03 0239 9CB7 8D 5C 0D STA TDIR LOWL03 0210 9C8C v53 LOWL03 0240 9CBA CALCAD LOWL03 0210 9C8C v53 LOWL03 0241 9CBA A5 A0 LDA TXCBPT LOWL03 0228 9CAE v6A LOWL03 0242 9CBC 85 A6 STA RXCBPT LOWL03 0228 9CAE v6A LOWL03 0243 9CBE A5 A1 LDA TXCBPT + ONE LOWL03 0228 9CAE v6A LOWL03 0244 9CC0 85 A7 STA RXCBPT + ONE LOWL03 LOWL03 LOWL03 LOWL03 Acorn macro assembler Page 14 LOWL03 Transmit routines. File > LOWL03 LOWL03 LOWL03 0228 9CAE v6A LOWL03 0245 9CC2 20 CA 9E JSR ADCALC ;AND RETURN LOWL03 0228 9CAE v6A LOWL03 0246 9CC5 LOWL03 0228 9CAE v6A LOWL03 0247 9CC5 STOPIT LOWL03 0228 9CAE v6A LOWL03 0248 9CC5 STRTIT LOWL03 0228 9CAE v6A LOWL03 0249 9CC5 OUT3 LOWL03 0228 9CAE v6A LOWL03 0250 9CC5 28 PLP ;ENABLE IRQ INTERUPT -- LOWL03 0251 9CC6 68 PLA -- LOWL03 0252 9CC7 68 PLA -- LOWL03 0253 9CC8 68 PLA ;GET RID OF 3 BYTE COUNTER -- LOWL03 0254 9CC9 68 PLA -- LOWL03 0255 9CCA AA TAX ;RESTORE X -- LOWL03 0256 9CCB 60 RTS ;RETURN TO CALLER OF TX ROUTINE. CALLER NOW POLLS. -- LOWL03 0257 9CCC ;TX OCCURS UNDER NMI INTERUPTS -- LOWL03 0258 9CCC -- LOWL03 0259 9CCC -- LOWL03 0260 9CCC ;SEND SCOUT -- LOWL03 0261 9CCC WCLM -- LOWL03 0262 9CCC AC 4F 0D LDY TXCNT ;LOAD COUNTER -- LOWL03 0263 9CCF 2C A0 FE BIT SReg1 -- LOWL03 0264 9CD2 WCLM2 -- LOWL03 0265 9CD2 50 22 BVC TXSER1 ;TDRA EXPECTED N.B. IN 2 BYTE MODE LOWL03 0265 9CD2 v5D LOWL03 0266 9CD4 B9 20 0D LDAAY TXDELO LOWL03 0265 9CD2 v5D LOWL03 0267 9CD7 8D A2 FE STA TXBYTE LOWL03 0265 9CD2 v5D LOWL03 0268 9CDA C8 INY LOWL03 0265 9CD2 v5D LOWL03 0269 9CDB B9 20 0D LDAAY TXDELO LOWL03 0265 9CD2 v5D LOWL03 0270 9CDE C8 INY LOWL03 0265 9CD2 v5D LOWL03 0271 9CDF 8C 4F 0D STY TXCNT LOWL03 0265 9CD2 v5D LOWL03 0272 9CE2 8D A2 FE STA TXBYTE LOWL03 0265 9CD2 v5D LOWL03 0273 9CE5 CC 50 0D CPY ENTXCT LOWL03 0265 9CD2 v5D LOWL03 0274 9CE8 B0 1E BCS ENDSCT LOWL03 0265 9CD2 v5D LOWL03 0275 9CEA 2C A0 FE BIT SReg1 ;QUICK IRQ POLL LOWL03 0265 9CD2 v5D LOWL03 0276 9CED 30 E3 BMI WCLM2 LOWL03 0265 9CD2 v5D LOWL03 0277 9CEF 4C 14 0D JMP WTXIN2 ;WAIT FOR TX INTERUPT LOWL03 0265 9CD2 v5D LOWL03 0278 9CF2 LOWL03 0265 9CD2 v5D LOWL03 0279 9CF2 LOWL03 0265 9CD2 v5D LOWL03 0280 9CF2 ;ERROR IN TXSCOUT PACKET LOWL03 0265 9CD2 v5D LOWL03 0281 9CF2 TXSER2 LOWL03 0265 9CD2 v5D LOWL03 0282 9CF2 A9 42 LDAIM &42 ;AP EXPECTED ERROR IN SCOUT ACK PACKET LOWL03 0335 9D35 ^3B LOWL03 0283 9CF4 D0 07 BNE SKIPIT LOWL03 0335 9D35 ^3B LOWL03 0284 9CF6 TXSER1 LOWL03 0335 9D35 ^3B LOWL03 0285 9CF6 A9 67 LDAIM &67 ;-RTS +CTXST +CRXST -TXLST TDRA FLAG 2-BYT +PSE LOWL03 0335 9D35 ^3B LOWL03 0286 9CF8 8D A1 FE STA CReg2 LOWL03 0335 9D35 ^3B LOWL03 0287 9CFB A9 41 LDAIM &41 ;TDRA EXPECTED DUE TO COLLISION OR LINE NOISE LOWL03 0335 9D35 ^3B LOWL03 0288 9CFD SKIPIT LOWL03 0335 9D35 ^3B LOWL03 0289 9CFD AC 18 FE LDY STNID LOWL03 0335 9D35 ^3B LOWL03 0290 9D00 COLARB ;THE NOTORIOUS COLLISION ARBITRATION LOWL03 0335 9D35 ^3B LOWL03 0291 9D00 48 PHA LOWL03 0335 9D35 ^3B LOWL03 0292 9D01 68 PLA ;DELAY A BIT LOWL03 0335 9D35 ^3B LOWL03 0293 9D02 C8 INY LOWL03 0335 9D35 ^3B LOWL03 0294 9D03 D0 FB BNE COLARB LOWL03 0335 9D35 ^3B LOWL03 0295 9D05 4C AE 9E JMP TXERRE ;JUMP TO ERROR REPORT LOWL03 0335 9D35 ^3B LOWL03 0296 9D08 LOWL03 0335 9D35 ^3B LOWL03 0297 9D08 ENDSCT LOWL03 0335 9D35 ^3B LOWL03 0298 9D08 A9 3F LDAIM &3F ;-RTS -CTXST +CRXST +TXLST FC FLAG 2-BYT +PSE LOWL03 0335 9D35 ^3B LOWL03 0299 9D0A 8D A1 FE STA CReg2 LOWL03 0335 9D35 ^3B LOWL03 0300 9D0D A9 14 LDAIM :LSB: ENPAK LOWL03 0335 9D35 ^3B LOWL03 0301 9D0F [ FAST5 <> TRUE LOWL03 0335 9D35 ^3B LOWL03 0302 9D0F A0 9D LDYIM :MSB: ENPAK LOWL03 0335 9D35 ^3B LOWL03 0303 9D11 4C 0E 0D JMP WTXINT ;WAIT FOR PACKET TO COMPLETE LOWL03 0335 9D35 ^3B LOWL03 0304 9D14 | LOWL03 0335 9D35 ^3B LOWL03 0306 9D14 ] LOWL03 0335 9D35 ^3B LOWL03 0307 9D14 LOWL03 0335 9D35 ^3B LOWL03 0308 9D14 ;SCOUT TRANSMITTED LOWL03 0335 9D35 ^3B LOWL03 0309 9D14 ENPAK LOWL03 0335 9D35 ^3B LOWL03 0310 9D14 A9 82 LDAIM &82 ;+TXRST -RXRST -RXDISC -TDSR -RDSR -TIE +RIE SCR2 LOWL03 0335 9D35 ^3B LOWL03 0311 9D16 8D A0 FE STA CReg1 LOWL03 0335 9D35 ^3B LOWL03 0312 9D19 2C 4A 0D BIT NSTATE LOWL03 0335 9D35 ^3B LOWL03 0313 9D1C 50 03 BVC NOOBRD LOWL03 0335 9D35 ^3B LOWL03 0314 9D1E 4C A8 9E JMP UPTXCB LOWL03 0335 9D35 ^3B LOWL03 0315 9D21 NOOBRD LOWL03 0335 9D35 ^3B LOWL03 0316 9D21 A9 01 LDAIM SHORT LOWL03 0335 9D35 ^3B LOWL03 0317 9D23 2C 4A 0D BIT NSTATE LOWL03 0335 9D35 ^3B LOWL03 0318 9D26 F0 03 BEQ SCTAKK LOWL03 0335 9D35 ^3B LOWL03 0319 9D28 4C 50 9E JMP DATAK ;WAIT FOR DATA PACKET OR WAIT FOR LAST ACK PACKET LOWL03 0335 9D35 ^3B LOWL03 0320 9D2B LOWL03 0335 9D35 ^3B LOWL03 0321 9D2B SCTAKK LOWL03 0335 9D35 ^3B LOWL03 0322 9D2B A9 30 LDAIM :LSB: WSCACK LOWL03 0335 9D35 ^3B LOWL03 0323 9D2D [ FAST6 <> TRUE LOWL03 0335 9D35 ^3B LOWL03 0326 9D2D | LOWL03 0335 9D35 ^3B LOWL03 0327 9D2D 4C 11 0D JMP WRXNTF ; New fast code ! LOWL03 0335 9D35 ^3B LOWL03 0328 9D30 ] LOWL03 0335 9D35 ^3B LOWL03 0329 9D30 LOWL03 0335 9D35 ^3B LOWL03 0330 9D30 LOWL03 0335 9D35 ^3B LOWL03 0331 9D30 ;RECEIVE SCOUTACK PACKET LOWL03 0335 9D35 ^3B LOWL03 0332 9D30 WSCACK LOWL03 0335 9D35 ^3B LOWL03 0333 9D30 A9 01 LDAIM AP LOWL03 0335 9D35 ^3B LOWL03 0334 9D32 2C A1 FE BIT SReg2 LOWL03 0335 9D35 ^3B LOWL03 0335 9D35 F0 BB BEQ TXSER2 ;AP EXPECTED I.E IF NOT LISTENING -- LOWL03 0336 9D37 AD A2 FE LDA RXBYTE -- LOWL03 0337 9D3A CD 18 FE CMP STNID -- LOWL03 0338 9D3D D0 19 BNE TXAER1 ;NO SOURCE ADDRESS MATCH LOWL03 0338 9D3D v66 LOWL03 0339 9D3F A9 44 LDAIM :LSB: WSCAKS LOWL03 0338 9D3D v66 LOWL03 0340 9D41 [ FAST7 <> TRUE LOWL03 0338 9D3D v66 LOWL03 0343 9D41 | LOWL03 0338 9D3D v66 LOWL03 0344 9D41 4C 11 0D JMP WRXNTF ; New fast code ! LOWL03 0338 9D3D v66 LOWL03 0345 9D44 ] LOWL03 0338 9D3D v66 LOWL03 0346 9D44 LOWL03 0338 9D3D v66 LOWL03 0347 9D44 WSCAKS ;WAIT FOR SCOUT ACK SOURCE ADDRESS LOWL03 0338 9D3D v66 LOWL03 0348 9D44 2C A1 FE BIT SReg2 LOWL03 0338 9D3D v66 LOWL03 0349 9D47 10 0F BPL TXAER1 ;RXDA EXPECTED LOWL03 0338 9D3D v66 LOWL03 0350 9D49 AD A2 FE LDA RXBYTE ;NET NUMBER MUST BE ZERO LOWL03 0338 9D3D v66 LOWL03 0351 9D4C D0 0A BNE TXAER1 ;NO SOURCE ADDRESS MATCH LOWL03 0338 9D3D v66 LOWL03 0352 9D4E A9 5B LDAIM :LSB: WSCAKD LOWL03 0338 9D3D v66 LOWL03 0353 9D50 [ FAST8 <> TRUE LOWL03 0338 9D3D v66 LOWL03 0355 9D50 ] LOWL03 0338 9D3D v66 LOWL03 0356 9D50 2C A0 FE BIT SReg1 ;QUICK IRQ POLL TO SAVE TIME LOWL03 0338 9D3D v66 LOWL03 0357 9D53 30 06 BMI WSCAKD LOWL03 0338 9D3D v66 LOWL03 0358 9D55 [ FAST8 <> TRUE LOWL03 0338 9D3D v66 LOWL03 0360 9D55 | LOWL03 0338 9D3D v66 LOWL03 0361 9D55 4C 11 0D JMP WRXNTF ; New fast code ! LOWL03 0338 9D3D v66 LOWL03 0362 9D58 ] LOWL03 0338 9D3D v66 LOWL03 0363 9D58 LOWL03 0338 9D3D v66 LOWL03 0364 9D58 ;ERROR IN RECEIVED ACK PACKET LOWL03 0338 9D3D v66 LOWL03 0365 9D58 TXAER1 ;RXDA EXPECTED.NO MATCH ON SOUR/DEST ACK ADDR. BAD CRC LOWL03 0338 9D3D v66 LOWL03 0366 9D58 4C AC 9E JMP TXBER1 ;JUMP TO ERROR REPORT LOWL03 0380 9D75 ^61 LOWL03 0367 9D5B LOWL03 0380 9D75 ^61 LOWL03 0368 9D5B WSCAKD ;WAIT FOR SCOUT ACK DESTINATION LOWL03 0380 9D75 ^61 LOWL03 0369 9D5B 2C A1 FE BIT SReg2 LOWL03 0380 9D75 ^61 LOWL03 0370 9D5E 10 F8 BPL TXAER1 ;RXDA EXPECTED LOWL03 0380 9D75 ^61 LOWL03 0371 9D60 AD A2 FE LDA RXBYTE LOWL03 0380 9D75 ^61 LOWL03 0372 9D63 CD 20 0D CMP TXDELO LOWL03 LOWL03 LOWL03 LOWL03 Acorn macro assembler Page 15 LOWL03 Transmit routines. File > LOWL03 LOWL03 LOWL03 0380 9D75 ^61 LOWL03 0373 9D66 D0 F0 BNE TXAER1 ;NOT FROM STATION SCOUT WAS SENT TO LOWL03 0380 9D75 ^61 LOWL03 0374 9D68 AD A2 FE LDA RXBYTE LOWL03 0380 9D75 ^61 LOWL03 0375 9D6B CD 21 0D CMP TXDEHI LOWL03 0380 9D75 ^61 LOWL03 0376 9D6E D0 E8 BNE TXAER1 ;NOT FROM NET SCOUT WAS SENT TO LOWL03 0380 9D75 ^61 LOWL03 0377 9D70 LOWL03 0380 9D75 ^61 LOWL03 0378 9D70 A9 02 LDAIM FV ;SCOUT ACK END LOWL03 0380 9D75 ^61 LOWL03 0379 9D72 2C A1 FE BIT SReg2 LOWL03 0380 9D75 ^61 LOWL03 0380 9D75 F0 E1 BEQ TXAER1 ;NOT FRAME VALID PACKET -- LOWL03 0381 9D77 -- LOWL03 0382 9D77 -- LOWL03 0383 9D77 ;SEND DATA -- LOWL03 0384 9D77 A9 A7 LDAIM &A7 ;+RTS -CTXST +CRXST -TXLD TDRA FLAG 2BYT +PSE -- LOWL03 0385 9D79 8D A1 FE STA CReg2 ;ENABLE TRANSMIT -- LOWL03 0386 9D7C A9 44 LDAIM &44 ;-TXRST +RXRST -RXDISC -TDSR -RDSR +TIE -RIE SCR2 -- LOWL03 0387 9D7E 8D A0 FE STA CReg1 -- LOWL03 0388 9D81 A9 50 LDAIM :LSB: DATAK -- LOWL03 0389 9D83 A0 9E LDYIM :MSB: DATAK -- LOWL03 0390 9D85 ;TX 2BYTES DESTINATION -- LOWL03 0391 9D85 TXDATA -- LOWL03 0392 9D85 8D 4B 0D STA TXLINK -- LOWL03 0393 9D88 8C 4C 0D STY TXLINK + ONE -- LOWL03 0394 9D8B AD 20 0D LDA TXDELO -- LOWL03 0395 9D8E 2C A0 FE BIT SReg1 ;MAY NEED DELAY HERE IF S/W TOO FAST -- LOWL03 0396 9D91 50 3A BVC BCXXX2 ; TXDER1 ;TDRA EXPECTED N.B. IN 2 BYTE MODE LOWL03 0396 9D91 v45 LOWL03 0397 9D93 8D A2 FE STA TXBYTE ;TRANSMIT SOURCE LO LOWL03 0396 9D91 v45 LOWL03 0398 9D96 AD 21 0D LDA TXDEHI LOWL03 0396 9D91 v45 LOWL03 0399 9D99 8D A2 FE STA TXBYTE ;TRANSMIT SOURCE HI LOWL03 0396 9D91 v45 LOWL03 0400 9D9C A9 A3 LDAIM :LSB: TXSR LOWL03 0396 9D91 v45 LOWL03 0401 9D9E A0 9D LDYIM :MSB: TXSR LOWL03 0396 9D91 v45 LOWL03 0402 9DA0 4C 0E 0D JMP WTXINT ;WAIT FOR TX INTERUPT LOWL03 0396 9D91 v45 LOWL03 0403 9DA3 LOWL03 0396 9D91 v45 LOWL03 0404 9DA3 TXSR ;TX 2BYTES SOURCE LOWL03 0396 9D91 v45 LOWL03 0405 9DA3 AD 18 FE LDA STNID LOWL03 0396 9D91 v45 LOWL03 0406 9DA6 2C A0 FE BIT SReg1 LOWL03 0396 9D91 v45 LOWL03 0407 9DA9 50 22 BVC BCXXX2 ; TXDER1 ;TDRA EXPECTED N.B. IN 2-BYTE MODE LOWL03 0396 9D91 v45 LOWL03 0408 9DAB 8D A2 FE STA TXBYTE ;TX STATION ID LOWL03 0396 9D91 v45 LOWL03 0409 9DAE A9 00 LDAIM NETnum LOWL03 0396 9D91 v45 LOWL03 0410 9DB0 8D A2 FE STA TXBYTE ;TX NET ID LOWL03 0396 9D91 v45 LOWL03 0411 9DB3 TXINF LOWL03 0396 9D91 v45 LOWL03 0412 9DB3 A9 02 LDAIM TUBEf LOWL03 0396 9D91 v45 LOWL03 0413 9DB5 2C 4A 0D BIT NSTATE ;TEST IF DATA IS FROM TUBE LOWL03 0396 9D91 v45 LOWL03 0414 9DB8 D0 07 BNE ISSTUB LOWL03 0396 9D91 v45 LOWL03 0415 9DBA A9 C8 LDAIM :LSB: TXINFO LOWL03 0396 9D91 v45 LOWL03 0416 9DBC A0 9D LDYIM :MSB: TXINFO LOWL03 0396 9D91 v45 LOWL03 0417 9DBE 4C 0E 0D JMP WTXINT ;WAIT FOR TX INTERUPT LOWL03 0396 9D91 v45 LOWL03 0418 9DC1 ISSTUB LOWL03 0396 9D91 v45 LOWL03 0419 9DC1 A9 0F LDAIM :LSB: TXINF2 LOWL03 0396 9D91 v45 LOWL03 0420 9DC3 A0 9E LDYIM :MSB: TXINF2 LOWL03 0396 9D91 v45 LOWL03 0421 9DC5 4C 0E 0D JMP WTXINT LOWL03 0396 9D91 v45 LOWL03 0422 9DC8 LOWL03 0396 9D91 v45 LOWL03 0423 9DC8 ;TRANSMIT DATA BYTES LOWL03 0396 9D91 v45 LOWL03 0424 9DC8 TXINFO LOWL03 0396 9D91 v45 LOWL03 0425 9DC8 A4 A2 LDY TXYOFF LOWL03 0396 9D91 v45 LOWL03 0426 9DCA 2C A0 FE BIT SReg1 LOWL03 0396 9D91 v45 LOWL03 0427 9DCD TXINF3 LOWL03 0396 9D91 v45 LOWL03 0428 9DCD 50 79 BCXXX2 BVC TXDER1 ;TDRA EXPECTED N.B. IN 2-BYTE MODE, BRANCH THROUGH LOWL03 0428 9DCD v06 LOWL03 0429 9DCF B1 A4 LDAIY TXDAPT LOWL03 0428 9DCD v06 LOWL03 0430 9DD1 8D A2 FE STA TXBYTE LOWL03 0428 9DCD v06 LOWL03 0431 9DD4 C8 INY LOWL03 0428 9DCD v06 LOWL03 0432 9DD5 D0 06 BNE PASSX LOWL03 0428 9DCD v06 LOWL03 0433 9DD7 C6 A3 DEC TXPAGE LOWL03 0428 9DCD v06 LOWL03 0434 9DD9 F0 1A BEQ TXEND2 LOWL03 0428 9DCD v06 LOWL03 0435 9DDB E6 A5 INC TXDAPT + ONE LOWL03 0428 9DCD v06 LOWL03 0436 9DDD PASSX LOWL03 0428 9DCD v06 LOWL03 0437 9DDD B1 A4 LDAIY TXDAPT LOWL03 0428 9DCD v06 LOWL03 0438 9DDF 8D A2 FE STA TXBYTE LOWL03 0428 9DCD v06 LOWL03 0439 9DE2 C8 INY LOWL03 0428 9DCD v06 LOWL03 0440 9DE3 84 A2 STY TXYOFF LOWL03 0428 9DCD v06 LOWL03 0441 9DE5 D0 06 BNE OUTX LOWL03 0428 9DCD v06 LOWL03 0442 9DE7 UPCNT LOWL03 0428 9DCD v06 LOWL03 0443 9DE7 C6 A3 DEC TXPAGE LOWL03 0428 9DCD v06 LOWL03 0444 9DE9 F0 0A BEQ TXEND2 LOWL03 0428 9DCD v06 LOWL03 0445 9DEB E6 A5 INC TXDAPT + ONE LOWL03 0428 9DCD v06 LOWL03 0446 9DED OUTX LOWL03 0428 9DCD v06 LOWL03 0447 9DED 2C A0 FE BIT SReg1 LOWL03 0428 9DCD v06 LOWL03 0448 9DF0 30 DB BMI TXINF3 ;QUICK IRQ POLL LOWL03 0428 9DCD v06 LOWL03 0449 9DF2 4C 14 0D JMP WTXIN2 LOWL03 0428 9DCD v06 LOWL03 0450 9DF5 LOWL03 0428 9DCD v06 LOWL03 0451 9DF5 TXEND2 LOWL03 0428 9DCD v06 LOWL03 0452 9DF5 A9 3F LDAIM &3F ;-RTS -CTXST +CRXST +TXLST FC FLAG 2-BYT +PSE LOWL03 0428 9DCD v06 LOWL03 0453 9DF7 8D A1 FE STA CReg2 LOWL03 0428 9DCD v06 LOWL03 0454 9DFA AD 4A 0D LDA NSTATE LOWL03 0428 9DCD v06 LOWL03 0455 9DFD 10 07 BPL NOIM LOWL03 0428 9DCD v06 LOWL03 0456 9DFF A9 DB LDAIM :LSB: NOUPDA LOWL03 0428 9DCD v06 LOWL03 0457 9E01 [ FAST9 <> TRUE LOWL03 0428 9DCD v06 LOWL03 0458 9E01 A0 99 LDYIM :MSB: NOUPDA LOWL03 0428 9DCD v06 LOWL03 0459 9E03 4C 0E 0D JMP WTXINT ;WAIT FOR IMMEDIATE DATA TO COMPLETE LOWL03 0428 9DCD v06 LOWL03 0460 9E06 | LOWL03 0428 9DCD v06 LOWL03 0462 9E06 ] LOWL03 0428 9DCD v06 LOWL03 0463 9E06 LOWL03 0428 9DCD v06 LOWL03 0464 9E06 NOIM LOWL03 0428 9DCD v06 LOWL03 0465 9E06 AD 4B 0D LDA TXLINK LOWL03 0428 9DCD v06 LOWL03 0466 9E09 AC 4C 0D LDY TXLINK + ONE LOWL03 0428 9DCD v06 LOWL03 0467 9E0C 4C 0E 0D JMP WTXINT ;WAIT FOR PACKET TO COMPLETE LOWL03 0428 9DCD v06 LOWL03 0468 9E0F LOWL03 0428 9DCD v06 LOWL03 0469 9E0F LOWL03 0428 9DCD v06 LOWL03 0470 9E0F ;TRANSMIT DATA BYTES OF TUBE LOWL03 0428 9DCD v06 LOWL03 0471 9E0F TXINF2 LOWL03 0428 9DCD v06 LOWL03 0472 9E0F 2C A0 FE BIT SReg1 LOWL03 0428 9DCD v06 LOWL03 0473 9E12 TXINF4 LOWL03 0428 9DCD v06 LOWL03 0474 9E12 50 34 BVC TXDER1 ;TDRA EXPECTED N.B. IN 2-BYTE MODE LOWL03 0428 9DCD v06 LOWL03 0475 9E14 AD E5 FE LDA R3DATA LOWL03 0428 9DCD v06 LOWL03 0476 9E17 8D A2 FE STA TXBYTE LOWL03 0428 9DCD v06 LOWL03 0477 9E1A E6 A2 INC TXYOFF LOWL03 0428 9DCD v06 LOWL03 0478 9E1C D0 0C BNE CONTT2 LOWL03 0428 9DCD v06 LOWL03 0479 9E1E E6 A3 INC TXPAGE LOWL03 0428 9DCD v06 LOWL03 0480 9E20 D0 08 BNE CONTT2 LOWL03 0428 9DCD v06 LOWL03 0481 9E22 E6 A4 INC TXDAPT LOWL03 0428 9DCD v06 LOWL03 0482 9E24 D0 04 BNE CONTT2 LOWL03 0428 9DCD v06 LOWL03 0483 9E26 E6 A5 INC TXDAPT + ONE LOWL03 0428 9DCD v06 LOWL03 0484 9E28 F0 CB BEQ TXEND2 LOWL03 0428 9DCD v06 LOWL03 0485 9E2A CONTT2 LOWL03 0428 9DCD v06 LOWL03 0486 9E2A AD E5 FE LDA R3DATA LOWL03 0428 9DCD v06 LOWL03 0487 9E2D 8D A2 FE STA TXBYTE LOWL03 0428 9DCD v06 LOWL03 0488 9E30 E6 A2 INC TXYOFF LOWL03 0428 9DCD v06 LOWL03 0489 9E32 D0 0C BNE OUTTT LOWL03 0428 9DCD v06 LOWL03 0490 9E34 UPCN2 LOWL03 0428 9DCD v06 LOWL03 0491 9E34 E6 A3 INC TXPAGE LOWL03 0428 9DCD v06 LOWL03 0492 9E36 D0 08 BNE OUTTT LOWL03 0428 9DCD v06 LOWL03 0493 9E38 E6 A4 INC TXDAPT LOWL03 0428 9DCD v06 LOWL03 0494 9E3A D0 04 BNE OUTTT LOWL03 LOWL03 LOWL03 LOWL03 Acorn macro assembler Page 16 LOWL03 Transmit routines. File > LOWL03 LOWL03 LOWL03 0428 9DCD v06 LOWL03 0495 9E3C E6 A5 INC TXDAPT + ONE LOWL03 0428 9DCD v06 LOWL03 0496 9E3E F0 B5 BEQ TXEND2 LOWL03 0428 9DCD v06 LOWL03 0497 9E40 OUTTT LOWL03 0428 9DCD v06 LOWL03 0498 9E40 2C A0 FE BIT SReg1 ;QUICK IRQ POLL LOWL03 0428 9DCD v06 LOWL03 0499 9E43 30 CD BMI TXINF4 LOWL03 0428 9DCD v06 LOWL03 0500 9E45 4C 14 0D JMP WTXIN2 LOWL03 0428 9DCD v06 LOWL03 0501 9E48 LOWL03 0428 9DCD v06 LOWL03 0502 9E48 ;ERROR IN TXDATA PACKET LOWL03 0428 9DCD v06 LOWL03 0503 9E48 TXDER1 LOWL03 0428 9DCD v06 LOWL03 0504 9E48 AD 4A 0D LDA NSTATE -- LOWL03 0505 9E4B 10 5F BPL TXBER1 ; NOIMM ;NO LONG ACK PACKET LOWL03 0505 9E4B v20 LOWL03 0506 9E4D 4C DB 99 JMP NOUPDA LOWL03 0505 9E4B v20 LOWL03 0507 9E50 ;NOIMM ;ERROR IN TXDATA PACKET LOWL03 0505 9E4B v20 LOWL03 0508 9E50 ; JMP TXBER1 ;JUMP TO ERROR REPORT LOWL03 0505 9E4B v20 LOWL03 0509 9E50 LOWL03 0505 9E4B v20 LOWL03 0510 9E50 ;TXEN2 LOWL03 0505 9E4B v20 LOWL03 0511 9E50 DATAK LOWL03 0505 9E4B v20 LOWL03 0512 9E50 A9 82 LDAIM &82 ;+TXRST -RXRST -RXDISC -TDSR -RDSR -TIE +RIE SCR2 LOWL03 0505 9E4B v20 LOWL03 0513 9E52 8D A0 FE STA CReg1 LOWL03 0505 9E4B v20 LOWL03 0514 9E55 A9 5C LDAIM :LSB: DATACK LOWL03 0505 9E4B v20 LOWL03 0515 9E57 [ FAST10 <> TRUE LOWL03 0505 9E4B v20 LOWL03 0516 9E57 A0 9E LDYIM :MSB: DATACK LOWL03 0505 9E4B v20 LOWL03 0517 9E59 4C 0E 0D JMP WRXINT ;WAIT DATA ACK PACKET LOWL03 0505 9E4B v20 LOWL03 0518 9E5C | LOWL03 0505 9E4B v20 LOWL03 0520 9E5C ] LOWL03 0505 9E4B v20 LOWL03 0521 9E5C LOWL03 0505 9E4B v20 LOWL03 0522 9E5C DATACK LOWL03 0505 9E4B v20 LOWL03 0523 9E5C A9 01 LDAIM AP LOWL03 0505 9E4B v20 LOWL03 0524 9E5E 2C A1 FE BIT SReg2 LOWL03 0505 9E4B v20 LOWL03 0525 9E61 F0 49 BEQ TXBER1 ;AP EXPECTED LOWL03 0505 9E4B v20 LOWL03 0526 9E63 AD A2 FE LDA RXBYTE LOWL03 0505 9E4B v20 LOWL03 0527 9E66 CD 18 FE CMP STNID LOWL03 0505 9E4B v20 LOWL03 0528 9E69 D0 41 BNE TXBER1 ;NO SOURCE ADDRESS MATCH LOWL03 0505 9E4B v20 LOWL03 0529 9E6B A9 70 LDAIM :LSB: WDAAKS LOWL03 0505 9E4B v20 LOWL03 0530 9E6D [ FAST11 <> TRUE LOWL03 0505 9E4B v20 LOWL03 0533 9E6D | LOWL03 0505 9E4B v20 LOWL03 0534 9E6D 4C 11 0D JMP WRXNTF ; New fast code ! LOWL03 0505 9E4B v20 LOWL03 0535 9E70 ] LOWL03 0505 9E4B v20 LOWL03 0536 9E70 LOWL03 0505 9E4B v20 LOWL03 0537 9E70 WDAAKS ;WAIT FOR SCOUT ACK SOURCE ADDRESS LOWL03 0505 9E4B v20 LOWL03 0538 9E70 2C A1 FE BIT SReg2 LOWL03 0505 9E4B v20 LOWL03 0539 9E73 10 37 BPL TXBER1 ;RXDA EXPECTED LOWL03 0505 9E4B v20 LOWL03 0540 9E75 AD A2 FE LDA RXBYTE ;NET NUMBER MUST BE ZERO LOWL03 0505 9E4B v20 LOWL03 0541 9E78 D0 32 BNE TXBER1 ;NO SOURCE ADDRESS MATCH LOWL03 0505 9E4B v20 LOWL03 0542 9E7A A9 84 LDAIM :LSB: WDAAKD LOWL03 0505 9E4B v20 LOWL03 0543 9E7C [ FAST12 <> TRUE LOWL03 0505 9E4B v20 LOWL03 0545 9E7C ] LOWL03 0505 9E4B v20 LOWL03 0546 9E7C 2C A0 FE BIT SReg1 ;QUICK IRQ POLL TO SAVE TIME LOWL03 0505 9E4B v20 LOWL03 0547 9E7F 30 03 BMI WDAAKD LOWL03 0505 9E4B v20 LOWL03 0548 9E81 [ FAST12 <> TRUE LOWL03 0505 9E4B v20 LOWL03 0550 9E81 | LOWL03 0505 9E4B v20 LOWL03 0551 9E81 4C 11 0D JMP WRXNTF ; New fast code ! LOWL03 0505 9E4B v20 LOWL03 0552 9E84 ] LOWL03 0505 9E4B v20 LOWL03 0553 9E84 LOWL03 0505 9E4B v20 LOWL03 0554 9E84 WDAAKD ;WAIT FOR SCOUT ACK DESTINATION LOWL03 0505 9E4B v20 LOWL03 0555 9E84 2C A1 FE BIT SReg2 LOWL03 0505 9E4B v20 LOWL03 0556 9E87 10 23 BPL TXBER1 ;RXDA EXPECTED LOWL03 0505 9E4B v20 LOWL03 0557 9E89 AD A2 FE LDA RXBYTE LOWL03 0505 9E4B v20 LOWL03 0558 9E8C CD 20 0D CMP TXDELO LOWL03 0505 9E4B v20 LOWL03 0559 9E8F D0 1B BNE TXBER1 ;NOT FROM STATION SCOUT WAS SENT TO LOWL03 0505 9E4B v20 LOWL03 0560 9E91 AD A2 FE LDA RXBYTE LOWL03 0505 9E4B v20 LOWL03 0561 9E94 CD 21 0D CMP TXDEHI LOWL03 0505 9E4B v20 LOWL03 0562 9E97 D0 13 BNE TXBER1 ;NOT FROM NET SCOUT WAS SENT TO LOWL03 0505 9E4B v20 LOWL03 0563 9E99 LOWL03 0505 9E4B v20 LOWL03 0564 9E99 AD 4A 0D LDA NSTATE LOWL03 0505 9E4B v20 LOWL03 0565 9E9C 10 03 BPL NODATA LOWL03 0505 9E4B v20 LOWL03 0566 9E9E 4C 1B 98 JMP RXINF LOWL03 0505 9E4B v20 LOWL03 0567 9EA1 NODATA LOWL03 0505 9E4B v20 LOWL03 0568 9EA1 A9 02 LDAIM FV ;TEST FOR SCOUT ACK END LOWL03 0505 9E4B v20 LOWL03 0569 9EA3 2C A1 FE BIT SReg2 LOWL03 0505 9E4B v20 LOWL03 0570 9EA6 F0 04 BEQ TXBER1 ;NOT FRAME VALID PACKET LOWL03 0505 9E4B v20 LOWL03 0571 9EA8 LOWL03 0505 9E4B v20 LOWL03 0572 9EA8 UPTXCB LOWL03 0505 9E4B v20 LOWL03 0573 9EA8 A9 00 LDAIM ZERO ;GOOD UPDATE OF TX CONTROL BYTE LOWL03 0505 9E4B v20 LOWL03 0574 9EAA F0 02 BEQ TXERRE LOWL03 0505 9E4B v20 LOWL03 0575 9EAC LOWL03 0505 9E4B v20 LOWL03 0576 9EAC ;ERROR IN RECEIVED DATA ACK PACKET LOWL03 0505 9E4B v20 LOWL03 0577 9EAC TXBER1 LOWL03 0505 9E4B v20 LOWL03 0578 9EAC A9 41 LDAIM &41 ;AP/RXDA EXPECTED.NO MATCH ON DATA ACK SOUR/DEST ADDR.BAD CRC LOWL03 0574 9EAA v7D LOWL03 0579 9EAE TXERRE LOWL03 0574 9EAA v7D LOWL03 0580 9EAE A0 00 LDYIM CBCNTL -- LOWL03 0581 9EB0 91 A0 STAIY TXCBPT ;STORE ERROR INDICATOR IN CNTRL BYTE -- LOWL03 0582 9EB2 A9 80 LDAIM &80 -- LOWL03 0583 9EB4 8D 62 0D STA TXCLRl ;SIGNAL THAT USER CAN TX AGAIN -- LOWL03 0584 9EB7 4C DB 99 JMP NOUPDA ;WAIT TO RECEIVE A NEW PACKET -- LOWL03 0585 9EBA -- LOWL03 0586 9EBA ENCT2 ;LENGTH OF IMMED SCOUT BUFFERS -- LOWL03 0587 9EBA 0E = &0E ;PEEK SCOUT LENGTH -- LOWL03 0588 9EBB 0E = &0E ;POKE SCOUT LENGTH -- LOWL03 0589 9EBC 0A = &0A ;ROUTINE SCOUT LENGTH -- LOWL03 0590 9EBD 0A = &0A ;PROCEDURE EVENT SCOUT LENGTH -- LOWL03 0591 9EBE 0A = &0A ;PROCEDURE HIGH LEVEL SCOUT LENGTH -- LOWL03 0592 9EBF 06 = &06 ;STOP SCOUT LENGTH -- LOWL03 0593 9EC0 06 = &06 ;START SCOUT LENGTH -- LOWL03 0594 9EC1 0A = &0A ;MACHINE TYPE SCOUT LENGTH -- LOWL03 0595 9EC2 -- LOWL03 0596 9EC2 NSTAT1 ;NET STATE OF IM OPS -- LOWL03 0597 9EC2 81 = &81 -- LOWL03 0598 9EC3 00 = &00 -- LOWL03 0599 9EC4 00 = &00 -- LOWL03 0600 9EC5 00 = &00 -- LOWL03 0601 9EC6 00 = &00 -- LOWL03 0602 9EC7 01 = &01 -- LOWL03 0603 9EC8 01 = &01 -- LOWL03 0604 9EC9 81 = &81 -- LOWL03 0605 9ECA -- LOWL03 0606 9ECA -- LOWL03 0607 9ECA ADCALC -- LOWL03 0608 9ECA A0 06 LDYIM CBSAH1 -- LOWL03 0609 9ECC B1 A6 LDAIY RXCBPT -- LOWL03 0610 9ECE C8 INY -- LOWL03 0611 9ECF 31 A6 ANDIY RXCBPT -- LOWL03 0612 9ED1 C9 FF CMPIM &FF ;TEST FOR TUBE ADDRESS -- LOWL03 0613 9ED3 F0 44 BEQ NOTUB LOWL03 0613 9ED3 v3B LOWL03 0614 9ED5 AD 67 0D LDA TUBEFL ;TEST IF TUBE IS PRESENT LOWL03 0613 9ED3 v3B LOWL03 0615 9ED8 F0 3F BEQ NOTUB LOWL03 0613 9ED3 v3B LOWL03 0616 9EDA LOWL03 0613 9ED3 v3B LOWL03 0617 9EDA AD 4A 0D LDA NSTATE ;FLAG DATA IS FOR TUBE LOWL03 0613 9ED3 v3B LOWL03 0618 9EDD 09 02 ORAIM TUBEf LOWL03 0613 9ED3 v3B LOWL03 0619 9EDF 8D 4A 0D STA NSTATE LOWL03 0613 9ED3 v3B LOWL03 0620 9EE2 LOWL03 LOWL03 LOWL03 LOWL03 Acorn macro assembler Page 17 LOWL03 Transmit routines. File > LOWL03 LOWL03 LOWL03 0613 9ED3 v3B LOWL03 0621 9EE2 38 SEC LOWL03 0613 9ED3 v3B LOWL03 0622 9EE3 08 PHP LOWL03 0613 9ED3 v3B LOWL03 0623 9EE4 A0 04 LDYIM CBSALO ;SET UP ADDRESSES LOWL03 0613 9ED3 v3B LOWL03 0624 9EE6 LOOPIT LOWL03 0613 9ED3 v3B LOWL03 0625 9EE6 B1 A6 LDAIY RXCBPT LOWL03 0613 9ED3 v3B LOWL03 0626 9EE8 C8 INY LOWL03 0613 9ED3 v3B LOWL03 0627 9EE9 C8 INY LOWL03 0613 9ED3 v3B LOWL03 0628 9EEA C8 INY ;UP FOUR LOWL03 0613 9ED3 v3B LOWL03 0629 9EEB C8 INY LOWL03 0613 9ED3 v3B LOWL03 0630 9EEC 28 PLP LOWL03 0613 9ED3 v3B LOWL03 0631 9EED F1 A6 SBCIY RXCBPT LOWL03 0613 9ED3 v3B LOWL03 0632 9EEF 99 9A 00 STAAY TXYOFF -CBEALO LOWL03 0613 9ED3 v3B LOWL03 0633 9EF2 88 DEY LOWL03 0613 9ED3 v3B LOWL03 0634 9EF3 88 DEY ;DOWN THREE LOWL03 0613 9ED3 v3B LOWL03 0635 9EF4 88 DEY LOWL03 0613 9ED3 v3B LOWL03 0636 9EF5 08 PHP LOWL03 0613 9ED3 v3B LOWL03 0637 9EF6 C0 08 CPYIM CBEALO LOWL03 0613 9ED3 v3B LOWL03 0638 9EF8 90 EC BCC LOOPIT LOWL03 0613 9ED3 v3B LOWL03 0639 9EFA 28 PLP LOWL03 0613 9ED3 v3B LOWL03 0640 9EFB LOWL03 0613 9ED3 v3B LOWL03 0641 9EFB 8A TXA LOWL03 0613 9ED3 v3B LOWL03 0642 9EFC 48 PHA ;SAVE XREG LOWL03 0613 9ED3 v3B LOWL03 0643 9EFD A9 04 LDAIM CBSALO LOWL03 0613 9ED3 v3B LOWL03 0644 9EFF 18 CLC LOWL03 0613 9ED3 v3B LOWL03 0645 9F00 65 A6 ADC RXCBPT LOWL03 0613 9ED3 v3B LOWL03 0646 9F02 AA TAX LOWL03 0613 9ED3 v3B LOWL03 0647 9F03 A4 A7 LDY RXCBPT + ONE LOWL03 0613 9ED3 v3B LOWL03 0648 9F05 A9 C2 LDAIM &C2 LOWL03 0613 9ED3 v3B LOWL03 0649 9F07 20 06 04 JSR tADDRl ;CLAIM TUBE LOWL03 0613 9ED3 v3B LOWL03 0650 9F0A 90 0A BCC CLBAD LOWL03 0613 9ED3 v3B LOWL03 0651 9F0C AD 5C 0D LDA TDIR LOWL03 0613 9ED3 v3B LOWL03 0652 9F0F 20 06 04 JSR tADDRl LOWL03 0613 9ED3 v3B LOWL03 0653 9F12 20 2B 9A JSR TUBREL ;RELEASE TUBE LOWL03 0613 9ED3 v3B LOWL03 0654 9F15 38 SEC ;TUBE CLAIM OK LOWL03 0613 9ED3 v3B LOWL03 0655 9F16 CLBAD LOWL03 0613 9ED3 v3B LOWL03 0656 9F16 68 PLA LOWL03 0613 9ED3 v3B LOWL03 0657 9F17 AA TAX LOWL03 0613 9ED3 v3B LOWL03 0658 9F18 60 RTS LOWL03 0613 9ED3 v3B LOWL03 0659 9F19 LOWL03 0613 9ED3 v3B LOWL03 0660 9F19 NOTUB LOWL03 0613 9ED3 v3B LOWL03 0661 9F19 A0 04 LDYIM CBSALO -- LOWL03 0662 9F1B B1 A6 LDAIY RXCBPT -- LOWL03 0663 9F1D A0 08 LDYIM CBEALO -- LOWL03 0664 9F1F 38 SEC -- LOWL03 0665 9F20 F1 A6 SBCIY RXCBPT -- LOWL03 0666 9F22 85 A2 STA TXYOFF -- LOWL03 0667 9F24 -- LOWL03 0668 9F24 A0 05 LDYIM CBSAHI -- LOWL03 0669 9F26 B1 A6 LDAIY RXCBPT -- LOWL03 0670 9F28 E9 00 SBCIM ZERO -- LOWL03 0671 9F2A 85 A5 STA TXDAPT + ONE -- LOWL03 0672 9F2C -- LOWL03 0673 9F2C A0 08 LDYIM CBEALO -- LOWL03 0674 9F2E B1 A6 LDAIY RXCBPT -- LOWL03 0675 9F30 85 A4 STA TXDAPT -- LOWL03 0676 9F32 -- LOWL03 0677 9F32 A0 09 LDYIM CBEAHI -- LOWL03 0678 9F34 B1 A6 LDAIY RXCBPT -- LOWL03 0679 9F36 38 SEC -- LOWL03 0680 9F37 E5 A5 SBC TXDAPT + ONE -- LOWL03 0681 9F39 85 A3 STA TXPAGE -- LOWL03 0682 9F3B 38 SEC ;DUMMY TUBE CLAIM OK -- LOWL03 0683 9F3C 60 RTS -- LOWL03 0684 9F3D -- LOWL03 0685 9F3D -- LOWL03 0686 9F3D LNK LOWL04 -- LOWL04 0001 9F3D TTL Net initialization and sideways routines. File => LOWL04 -- LOWL04 0002 9F3D OPT SWRTNS LOWL04 LOWL04 LOWL04 LOWL04 Acorn macro assembler Page 18 LOWL04 Net initialization and sideways routines. File => LOWL04 LOWL04 -- LOWL04 0003 9F3D -- LOWL04 0004 9F3D ; -- LOWL04 0005 9F3D ; ****** NEVER fall through here ************ -- LOWL04 0006 9F3D ; -- LOWL04 0007 9F3D -- LOWL04 0008 9F3D -- LOWL04 0009 9F3D ;INITS ADLC CHIP -- LOWL04 0010 9F3D CPINIT -- LOWL04 0011 9F3D A9 C1 LDAIM &C1 ;+TXRS +RXRS -FRDIS -TDSR -RDSR -TIE -RIE SELCR3 -- LOWL04 0012 9F3F 8D A0 FE STA CReg1 -- LOWL04 0013 9F42 A9 1E LDAIM &1E ;NRZ -ABTEX -ABT 8TX 8RX 8RX F -- LOWL04 0014 9F44 8D A3 FE STA CReg4 -- LOWL04 0015 9F47 A9 00 LDAIM ZERO ;-DTR -- LOWL04 0016 9F49 8D A1 FE STA CReg3 -- LOWL04 0017 9F4C CPRST -- LOWL04 0018 9F4C A9 82 LDAIM &82 ;+TXRS -RXRS -FRDISC -TDSR -RDSR -TIE +RIE SELCR2 -- LOWL04 0019 9F4E 8D A0 FE STA CReg1 -- LOWL04 0020 9F51 A9 67 LDAIM &67 ;-RTS +CTXST +CRXST -TXLAST TDRA FLAG 2BYTE +PSE -- LOWL04 0021 9F53 8D A1 FE STA CReg2 -- LOWL04 0022 9F56 60 RTS -- LOWL04 0023 9F57 -- LOWL04 0024 9F57 ; -- LOWL04 0025 9F57 ; ****** NEVER fall through here ************ -- LOWL04 0026 9F57 ; -- LOWL04 0027 9F57 -- LOWL04 0028 9F57 ;RELINQUISH NMI AND ALL L.L. NET FUNCTIONS -- LOWL04 0029 9F57 SAVE -- LOWL04 0030 9F57 LOQNMI -- LOWL04 0031 9F57 ;SAVE VARS IN FIRST PAGE DYN/STATIC WORKSPACE -- LOWL04 0032 9F57 2C 66 0D BIT ACTIVE -- LOWL04 0033 9F5A 10 1E BPL NOTACT LOWL04 0033 9F5A v61 LOWL04 0034 9F5C WAITCL LOWL04 0033 9F5A v61 LOWL04 0035 9F5C AD 0C 0D LDA TXJUMP + ONE ;WAIT FOR JUMP VECTOR TO GO TO BASE LEVEL LOWL04 0033 9F5A v61 LOWL04 0036 9F5F C9 BF CMPIM REC LOWL04 0033 9F5A v61 LOWL04 0037 9F61 D0 F9 BNE WAITCL LOWL04 0033 9F5A v61 LOWL04 0038 9F63 AD 0D 0D LDA TXJUMP + TWO LOWL04 0033 9F5A v61 LOWL04 0039 9F66 C9 96 CMPIM :MSB: REC LOWL04 0033 9F5A v61 LOWL04 0040 9F68 D0 F2 BNE WAITCL LOWL04 0033 9F5A v61 LOWL04 0041 9F6A LOWL04 0033 9F5A v61 LOWL04 0042 9F6A 2C 18 FE BIT INTOFF ;DISABLES NMI LOWL04 0033 9F5A v61 LOWL04 0043 9F6D 2C 18 FE BIT INTOFF ;DISABLES NMI LOWL04 0033 9F5A v61 LOWL04 0044 9F70 A9 00 LDAIM ZERO LOWL04 0033 9F5A v61 LOWL04 0045 9F72 8D 62 0D STA TXCLRl ;PREVENT FURTHER TRANSMISSIONS LOWL04 0033 9F5A v61 LOWL04 0046 9F75 8D 66 0D STA ACTIVE LOWL04 0033 9F5A v61 LOWL04 0047 9F78 A0 05 LDYIM FIVE ;NET NMI ID CLAIM NUMBER LOWL04 0033 9F5A v61 LOWL04 0048 9F7A NOTACT LOWL04 0033 9F5A v61 LOWL04 0049 9F7A 4C 4C 9F JMP CPRST ;MAKE SURE ALL CURRENT TX ARE ENDED -- LOWL04 0050 9F7D -- LOWL04 0051 9F7D LNK LOWL05 -- LOWL05 0001 9F7D TTL Non maskable interupt routines. File => LOWL05 -- LOWL05 0002 9F7D OPT NMILST LOWL05 LOWL05 LOWL05 LOWL05 Acorn macro assembler Page 19 LOWL05 Non maskable interupt routines. File => LOWL05 LOWL05 -- LOWL05 0003 9F7D -- LOWL05 0004 9F7D NMICDE ; NMI code is stored here -- LOWL05 0005 9F7D -- LOWL05 0006 9F7D ; Main interupt handling -- LOWL05 0007 9F7D -- LOWL05 0008 9F7D ORG RAMCDE -- LOWL05 0009 0D00 -- LOWL05 0010 0D00 ; Main interupt handler -- LOWL05 0011 0D00 INT ; NMI ints enter here program routed via rx/tx jump vector -- LOWL05 0012 0D00 2C 18 FE BIT INTOFF ; Disable NMI interupt -- LOWL05 0013 0D03 48 PHA ; Save acumulator -- LOWL05 0014 0D04 98 TYA -- LOWL05 0015 0D05 48 PHA ; Save Y register -- LOWL05 0016 0D06 ROMSTR -- LOWL05 0017 0D06 A9 00 LDAIM ZERO ; !!!!!!!Self modifying code -- LOWL05 0018 0D08 8D 30 FE STA ROMSWW ; Change over to Econet ROM -- LOWL05 0019 0D0B TXJUMP -- LOWL05 0020 0D0B RXJUMP ; !!!!!!Self modifying code n.b. must be in RAM -- LOWL05 0021 0D0B 4C BF 96 JMP REC ; Jump to receive or transmit wait address -- LOWL05 0022 0D0E -- LOWL05 0023 0D0E -- LOWL05 0024 0D0E ; Main routine that waits for tx interupt -- LOWL05 0025 0D0E ; Returns from one int waits for another tx interupt -- LOWL05 0026 0D0E WRXINT ; Saves rx jump address -- LOWL05 0027 0D0E WTXINT ; Saves tx jump address -- LOWL05 0028 0D0E 8C 0D 0D STY TXJUMP + TWO ; Store jump label -- LOWL05 0029 0D11 WRXNTF ; The fast version only stores the LOW byte -- LOWL05 0030 0D11 WTXNTF -- LOWL05 0031 0D11 8D 0C 0D STA TXJUMP + ONE -- LOWL05 0032 0D14 WRXIN2 ; Use same jump address as last time -- LOWL05 0033 0D14 WTXIN2 ; Use same jump address as last time -- LOWL05 0034 0D14 A5 F4 LDA ROMSWR ; Read old sideways ROM -- LOWL05 0035 0D16 8D 30 FE STA ROMSWW ; Restore old sideways ROM -- LOWL05 0036 0D19 68 PLA -- LOWL05 0037 0D1A A8 TAY ; Restore Y register -- LOWL05 0038 0D1B 68 PLA ; Restore accumulator -- LOWL05 0039 0D1C 2C 20 FE BIT INTON ; Enable NMI -- LOWL05 0040 0D1F 40 RTI ; Return to user process -- LOWL05 0041 0D20 -- LOWL05 0042 0D20 -- LOWL05 0043 0D20 0020 CDELEN * . - INT -- LOWL05 0044 0D20 -- LOWL05 0045 0D20 9F9D LOWEND * CDELEN + NMICDE -- LOWL05 0046 0D20 -- LOWL05 0047 0D20 TTL Paging error check code File => LOWL05 -- LOWL05 0048 0D20 -- LOWL05 0049 0D20 ; Do the conditional assemblys here to check for -- LOWL05 0050 0D20 ; paging errors generated in earlier files. -- LOWL05 0051 0D20 -- LOWL05 0052 0D20 -- LOWL05 0053 0D20 009A JMPIMH * :MSB: (RXPEEK - ONE) ; This is the one -- LOWL05 0054 0D20 [ JMPIMH <> :MSB: (RXPOKE - ONE) -- LOWL05 0056 0D20 ] -- LOWL05 0057 0D20 [ JMPIMH <> :MSB: (RXRTN - ONE) -- LOWL05 0059 0D20 ] -- LOWL05 0060 0D20 [ JMPIMH <> :MSB: (RXPROE - ONE) -- LOWL05 0062 0D20 ] -- LOWL05 0063 0D20 [ JMPIMH <> :MSB: (RXPROH - ONE) -- LOWL05 0065 0D20 ] -- LOWL05 0066 0D20 [ JMPIMH <> :MSB: (RXSTOP - ONE) -- LOWL05 0068 0D20 ] -- LOWL05 0069 0D20 [ JMPIMH <> :MSB: (RXSTRT - ONE) -- LOWL05 0071 0D20 ] -- LOWL05 0072 0D20 [ JMPIMH <> :MSB: (RXMACH - ONE) -- LOWL05 0074 0D20 ] -- LOWL05 0075 0D20 -- LOWL05 0076 0D20 -- LOWL05 0077 0D20 -- LOWL05 0078 0D20 009B JMPI2H * :MSB: (RXRTN2 - ONE) -- LOWL05 0079 0D20 [ JMPI2H <> :MSB: (RXPRE2 - ONE) -- LOWL05 0081 0D20 ] -- LOWL05 0082 0D20 [ JMPI2H <> :MSB: (RXPRH2 - ONE) -- LOWL05 0084 0D20 ] -- LOWL05 0085 0D20 [ JMPI2H <> :MSB: (RXSTP2 - ONE) -- LOWL05 0087 0D20 ] -- LOWL05 0088 0D20 [ JMPI2H <> :MSB: (RXSTR2 - ONE) -- LOWL05 0090 0D20 ] -- LOWL05 0091 0D20 -- LOWL05 0092 0D20 -- LOWL05 0093 0D20 -- LOWL05 0094 0D20 009C TXIMH * :MSB: (PEEKIT - ONE) -- LOWL05 0095 0D20 [ TXIMH <> :MSB: (POKEIT - ONE) -- LOWL05 0097 0D20 ] -- LOWL05 0098 0D20 [ TXIMH <> :MSB: (RTNIT - ONE) -- LOWL05 0100 0D20 ] -- LOWL05 0101 0D20 [ TXIMH <> :MSB: (PROEIT - ONE) -- LOWL05 0103 0D20 ] -- LOWL05 0104 0D20 [ TXIMH <> :MSB: (PROHIT - ONE) -- LOWL05 0106 0D20 ] -- LOWL05 0107 0D20 [ TXIMH <> :MSB: (STOPIT - ONE) -- LOWL05 0109 0D20 ] -- LOWL05 0110 0D20 [ TXIMH <> :MSB: (STRTIT - ONE) -- LOWL05 0112 0D20 ] -- LOWL05 0113 0D20 [ TXIMH <> :MSB: (MACHIT - ONE) -- LOWL05 0115 0D20 ] -- LOWL05 0116 0D20 -- LOWL05 0117 0D20 ; ******** -- LOWL05 0118 0D20 -- LOWL05 0119 0D20 [ :MSB: RXDEHI <> :MSB: REC -- LOWL05 0123 0D20 | -- LOWL05 0124 0D20 [ FAST1 <> TRUE -- LOWL05 0126 0D20 ] -- LOWL05 0127 0D20 ] -- LOWL05 0128 0D20 -- LOWL05 0129 0D20 ; ******** -- LOWL05 0130 0D20 -- LOWL05 0131 0D20 [ :MSB: RXHEAD <> :MSB: RXDEHI -- LOWL05 0132 0D20 [ FAST2 = TRUE -- LOWL05 0134 0D20 ] -- LOWL05 0135 0D20 | -- LOWL05 0139 0D20 ] -- LOWL05 0140 0D20 -- LOWL05 0141 0D20 ; ******** -- LOWL05 0142 0D20 -- LOWL05 0143 0D20 [ :MSB: RXDAST <> :MSB: NOACK -- LOWL05 0147 0D20 | -- LOWL05 0148 0D20 [ FAST3 <> TRUE -- LOWL05 0150 0D20 ] -- LOWL05 0151 0D20 ] -- LOWL05 0152 0D20 -- LOWL05 0153 0D20 ; ******** LOWL05 LOWL05 LOWL05 LOWL05 Acorn macro assembler Page 20 LOWL05 Paging error check code File => LOWL05 LOWL05 -- LOWL05 0154 0D20 -- LOWL05 0155 0D20 [ :MSB: WSOUR <> :MSB: RXDAST -- LOWL05 0159 0D20 | -- LOWL05 0160 0D20 [ FAST4 <> TRUE -- LOWL05 0162 0D20 ] -- LOWL05 0163 0D20 ] -- LOWL05 0164 0D20 -- LOWL05 0165 0D20 ; ******** -- LOWL05 0166 0D20 -- LOWL05 0167 0D20 [ :MSB: ENPAK <> :MSB: WCLM -- LOWL05 0168 0D20 [ FAST5 = TRUE -- LOWL05 0170 0D20 ] -- LOWL05 0171 0D20 | -- LOWL05 0175 0D20 ] -- LOWL05 0176 0D20 -- LOWL05 0177 0D20 ; ******** -- LOWL05 0178 0D20 -- LOWL05 0179 0D20 [ :MSB: WSCACK <> :MSB: ENPAK -- LOWL05 0183 0D20 | -- LOWL05 0184 0D20 [ FAST6 <> TRUE -- LOWL05 0186 0D20 ] -- LOWL05 0187 0D20 ] -- LOWL05 0188 0D20 -- LOWL05 0189 0D20 ; ******** -- LOWL05 0190 0D20 -- LOWL05 0191 0D20 [ :MSB: WSCAKS <> :MSB: WSCACK -- LOWL05 0195 0D20 | -- LOWL05 0196 0D20 [ FAST7 <> TRUE -- LOWL05 0198 0D20 ] -- LOWL05 0199 0D20 ] -- LOWL05 0200 0D20 -- LOWL05 0201 0D20 ; ******** -- LOWL05 0202 0D20 -- LOWL05 0203 0D20 [ :MSB: WSCAKD <> :MSB: WSCAKS -- LOWL05 0207 0D20 | -- LOWL05 0208 0D20 [ FAST8 <> TRUE -- LOWL05 0210 0D20 ] -- LOWL05 0211 0D20 ] -- LOWL05 0212 0D20 -- LOWL05 0213 0D20 ; ******** -- LOWL05 0214 0D20 -- LOWL05 0215 0D20 [ FAST9 = TRUE -- LOWL05 0222 0D20 | -- LOWL05 0223 0D20 [ :MSB: NOUPDA = :MSB: TXINF2 -- LOWL05 0228 0D20 ] -- LOWL05 0229 0D20 ] -- LOWL05 0230 0D20 -- LOWL05 0231 0D20 ; ******** -- LOWL05 0232 0D20 -- LOWL05 0233 0D20 [ :MSB: DATACK <> :MSB: ENPAK -- LOWL05 0234 0D20 [ FAST10 = TRUE -- LOWL05 0236 0D20 ] -- LOWL05 0237 0D20 | -- LOWL05 0241 0D20 ] -- LOWL05 0242 0D20 -- LOWL05 0243 0D20 ; ******** -- LOWL05 0244 0D20 -- LOWL05 0245 0D20 [ :MSB: WDAAKS <> :MSB: DATACK -- LOWL05 0249 0D20 | -- LOWL05 0250 0D20 [ FAST11 <> TRUE -- LOWL05 0252 0D20 ] -- LOWL05 0253 0D20 ] -- LOWL05 0254 0D20 -- LOWL05 0255 0D20 ; ******** -- LOWL05 0256 0D20 -- LOWL05 0257 0D20 [ :MSB: WDAAKD <> :MSB: WDAAKS -- LOWL05 0261 0D20 | -- LOWL05 0262 0D20 [ FAST12 <> TRUE -- LOWL05 0264 0D20 ] -- LOWL05 0265 0D20 ] -- LOWL05 0266 0D20 -- LOWL05 0267 0D20 TTL ROM statistics File => LOWL05 -- LOWL05 0268 0D20 OPT STATSL LOWL05 LOWL05 LOWL05 LOWL05 Acorn macro assembler Page 21 LOWL05 ROM statistics File => LOWL05 LOWL05 -- LOWL05 0269 0D20 -- LOWL05 0270 0D20 ; Calculate some ROM stats -- LOWL05 0271 0D20 -- LOWL05 0272 0D20 0000 NFSLEN * NFSEND - NFSORG ; The length of the NFS -- LOWL05 0273 0D20 0000 TUBLEN * TUBEND - TUBORG ; The length of the TUBE code -- LOWL05 0274 0D20 096D LOWLEN * LOWEND - LOWORG ; The length of the low level code -- LOWL05 0275 0D20 -- LOWL05 0276 0D20 096D ZZZZZZ * NFSLEN + TUBLEN + LOWLEN ; The total size -- LOWL05 0277 0D20 0000 ROMORG * NFSORG ; For saving on to disc -- LOWL05 0278 0D20 4000 ROMEND * NFSORG + &4000 -- LOWL05 0279 0D20 -- LOWL05 0280 0D20 END Assembly finished, no errors Action : ASM DOS01 DOS01 DOS01 Macro library : DOS01 DOS01 DOS01 DOS01 Acorn macro assembler Page 1 DOS01 DOS01 DOS01 Pass 1 DOS01 Pass 2 -- DOS01 0001 0000 ;*** File One *** > DOS01 -- DOS01 0002 0000 -- DOS01 0003 0000 TTL - DOS01 - Storage Allocation -- DOS01 0004 0000 OPT &01 -- DOS01 0005 0000 -- DOS01 0006 0000 0000 DRIVEC * &00 -- DOS01 0007 0000 < &00 -- DOS01 0008 0000 > &02 -- DOS01 0009 0000 GBLL $emu -- DOS01 0010 0000 $emu SETL 1=0 -- DOS01 0011 0000 -- DOS01 0012 0000 00FF RAMVER * &FF -- DOS01 0013 0000 00FF RAMGO * &FF -- DOS01 0014 0000 00FF NOENAB * &FF -- DOS01 0015 0000 0001 VERH * &01 -- DOS01 0016 0000 0002 VERM * "2"-"0" -- DOS01 0017 0000 0000 VERL * "0"-"0" -- DOS01 0018 0000 -- DOS01 0019 0000 0001 TUBEID * &01 ; My number for claiming/releasing Tube (c) -- DOS01 0020 0000 ; V n, |? = delete in strings trapped -- DOS01 0021 0000 -- DOS01 0022 0000 ; V m -- DOS01 0023 0000 ; CLI in OSWORD $7F for typeahead -- DOS01 0024 0000 ; Delay in CMDDRV for write Ops -- DOS01 0025 0000 -- DOS01 0026 0000 ; V l -- DOS01 0027 0000 ; Locked in OSFILE 1,2,3 removed -- DOS01 0028 0000 -- DOS01 0029 0000 ; V j/k -- DOS01 0030 0000 ; Has semaphores in (BIT) QSTORE to say : -- DOS01 0031 0000 ; PL => FDC reinit. JSR ZTRKSC in next DRVSEL 0 -- DOS01 0032 0000 ; VC => ditto. JSR ZTRKSC in next DRVSEL 1 -- DOS01 0033 0000 -- DOS01 0034 0000 ; Version i -- DOS01 0035 0000 ; *DIR $,*SAVE Q.ZOB,*DIR :2 -- DOS01 0036 0000 ; leaving you in :2.Q is fixed -- DOS01 0037 0000 0009 VERBIN * &09 ;Version number (binary) -- DOS01 0038 0000 9F9D ROMLOC * &9F9D ; **$9FC8-$0054+$0011 ;ORG of double ROM version (16k) -- DOS01 0039 0000 -- DOS01 0040 0000 [ RAMVER=0 -- DOS01 0045 0000 | -- DOS01 0046 0000 DOS -- DOS01 0047 0000 ORG ROMLOC -- DOS01 0048 9F9D ; = $00,$00,$00 -- DOS01 0049 9F9D 4C 94 B4 JMP CALLED -- DOS01 0050 9FA0 ; = $82,COFF,VERBIN,"DFS",$00 -- DOS01 0051 9FA0 ; = VERH + '0' -- DOS01 0052 9FA0 ; = '.' -- DOS01 0053 9FA0 ; = VERM + '0' -- DOS01 0054 9FA0 ; = VERL + '0' -- DOS01 0055 9FA0 ;COFF = $00,"(C)",$00 -- DOS01 0056 9FA0 ] -- DOS01 0057 9FA0 -- DOS01 0058 9FA0 ;* Zero Page - takes up $20 bytes * -- DOS01 0059 9FA0 -- DOS01 0060 9FA0 ^ &00A0 ;NMI allocation (8) -- DOS01 0061 9FA0 -- DOS01 0062 9FA0 00A0 PRENMI # &01 ;Store for previous owner -- DOS01 0063 9FA0 00A1 SAVCOM # &01 ;Disk controller cmd -- DOS01 0064 9FA0 00A2 CNTA # &01 ;Error count -- DOS01 0065 9FA0 00A3 READNO # &03 ;Total bytes to read -- DOS01 0066 9FA0 00A6 RAMADR # &02 ;Indirection for NMI -- DOS01 0067 9FA0 -- DOS01 0068 9FA0 -- DOS01 0069 9FA0 ^ &00A8 ;Utility allocation (8) -- DOS01 0070 9FA0 -- DOS01 0071 9FA0 00A8 LINNO # &02 ;BCD line number -- DOS01 0072 9FA0 00AA UTEMP # &01 ;Temp store -- DOS01 0073 9FA0 00AB LTEMP # &01 ;Temp utility store -- DOS01 0074 9FA0 00AC BLDTBL # &02 ;Misc table -- DOS01 0075 9FA0 00AE PTEMP # &02 ;Used by VSTRNG -- DOS01 0076 9FA0 -- DOS01 0077 9FA0 ^ &00B0 ;High level allocation (20) -- DOS01 0078 9FA0 -- DOS01 0079 9FA0 ;1st $10 bytes can withstand being -- DOS01 0080 9FA0 ;overwritten between calls. -- DOS01 0081 9FA0 00B0 TEMP # &02 ;Temporary zero page -- DOS01 0082 9FA0 00B2 XTEMP # &01 -- DOS01 0083 9FA0 00B3 ITEMP # &01 -- DOS01 0084 9FA0 00B4 ATEMP # &01 -- DOS01 0085 9FA0 00B5 YTEMP # &01 -- DOS01 0086 9FA0 00B6 VTEMP # &02 -- DOS01 0087 9FA0 00B8 ZTEMP # &01 -- DOS01 0088 9FA0 00B9 ETEMP # &01 -- DOS01 0089 9FA0 00BA WORK # &12 -- DOS01 0090 9FA0 00CC QUALIF # &01 -- DOS01 0091 9FA0 00CD FDRIVE # &01 ;Drive to use. -- DOS01 0092 9FA0 00CE TRACK # &01 -- DOS01 0093 9FA0 00CF SECTOR # &01 -- DOS01 0094 9FA0 -- DOS01 0095 9FA0 00BC COMTXT * WORK + &02 ;Pointer for HELP & SYNTAX -- DOS01 0096 9FA0 -- DOS01 0097 9FA0 ;* NMI address and base for all other -- DOS01 0098 9FA0 ; memory allocation * -- DOS01 0099 9FA0 -- DOS01 0100 9FA0 0D00 INTNMI * &0D00 -- DOS01 0101 9FA0 -- DOS01 0102 9FA0 -- DOS01 0103 9FA0 ;* Non-zero page storage >$20 bytes ! * -- DOS01 0104 9FA0 ;Memory that does not require saving -- DOS01 0105 9FA0 -- DOS01 0106 9FA0 ^ INTNMI + &0340 -- DOS01 0107 9FA0 -- DOS01 0108 9FA0 1040 SAVPAR # &05 ;Temp save of NMI prms -- DOS01 0109 9FA0 1045 TMPCIN # &0B -- DOS01 0110 9FA0 1050 NAMTRA # &08 -- DOS01 0111 9FA0 1058 TMPNAM # &08 -- DOS01 0112 9FA0 1060 DOSRAM # &12 -- DOS01 0113 9FA0 1072 LDLOW # &02 ;Low bytes of load -- DOS01 0114 9FA0 1074 HIWORK # &08 -- DOS01 0115 9FA0 107C SECNO # &01 ;Sectors left on track -- DOS01 0116 9FA0 107D BTEMP # &02 ;Used in BGBP -- DOS01 0117 9FA0 107F CTEMP # &01 ;Used in BGBP -- DOS01 0118 9FA0 1080 TUBCOM # &01 ;Direction of tube -- DOS01 0119 9FA0 1081 TUMFLG # &01 ;A tube flag -- DOS01 0120 9FA0 1082 CATDRV # &01 ;Catalog drive -- DOS01 0121 9FA0 1083 OLDDRV # &01 ;Currently selected drive -- DOS01 0122 9FA0 1084 XSTORE # &01 -- DOS01 0123 9FA0 1085 QSTORE # &01 DOS01 DOS01 DOS01 DOS01 Acorn macro assembler Page 2 DOS01 - DOS01 - Storage Allocation DOS01 -- DOS01 0124 9FA0 1086 DUFFLG # &01 ; DUF flag - distinguishes closing/ensuring files -- DOS01 0125 9FA0 -- DOS01 0126 9FA0 ;Memory that does require saving -- DOS01 0127 9FA0 -- DOS01 0128 9FA0 ^ INTNMI + &03C0 -- DOS01 0129 9FA0 -- DOS01 0130 9FA0 10C0 DCBMAP # &01 -- DOS01 0131 9FA0 10C1 DCBBIT # &01 -- DOS01 0132 9FA0 10C2 DCBY # &01 -- DOS01 0133 9FA0 ; *******SEQWA # $01 -- DOS01 0134 9FA0 10C3 SEQWB # &01 -- DOS01 0135 9FA0 10C4 SEQWC # &01 -- DOS01 0136 9FA0 10C5 SEQWX # &01 -- DOS01 0137 9FA0 10C6 MONFLG # &01 ;Monitor flag -- DOS01 0138 9FA0 10C7 ENAFLG # &01 ;Command enable flag -- DOS01 0139 9FA0 10C8 NMIFLG # &01 ;Got NMI Flag -- DOS01 0140 9FA0 10C9 DEFQUA # &01 ;Default qualifier -- DOS01 0141 9FA0 10CA DEFDSK # &01 ;Default disk -- DOS01 0142 9FA0 10CB LIBQUA # &01 ;Library qualifier -- DOS01 0143 9FA0 10CC LIBDSK # &01 ;Library disk -- DOS01 0144 9FA0 10CD WILDCH # &01 ;Wild char ($FF => no wild) -- DOS01 0145 9FA0 10CE DASHOP # &01 ;Dash operator ($FF => no dash) -- DOS01 0146 9FA0 10CF FRPAGE # &01 ;First free page -- DOS01 0147 9FA0 10D0 FRSIZE # &01 ;No. of free pages -- DOS01 0148 9FA0 10D1 FDRIV # &01 ;Source drive (MVDKDA) -- DOS01 0149 9FA0 10D2 TDRIV # &01 ;Destination drive (MVDKDA) -- DOS01 0150 9FA0 10D3 COLDS # &01 ;Cold start flag -- DOS01 0151 9FA0 10D4 MEMFLG # &01 ;Got memory -- DOS01 0152 9FA0 10D5 TUBFLG # &01 ;Tube flag -- DOS01 0153 9FA0 10D6 NOTUBE # &01 ;No tube flag -- DOS01 0154 9FA0 10D7 QTEMP # &02 -- DOS01 0155 9FA0 10D9 LINADR # &02 -- DOS01 0156 9FA0 10DB FCBADR # &02 -- DOS01 0157 9FA0 10DD SEQSEM # &01 -- DOS01 0158 9FA0 -- DOS01 0159 9FA0 -- DOS01 0160 9FA0 ;* Tempory buffer -- DOS01 0161 9FA0 1000 BUFFER * INTNMI + &0300 ;GP Buffer -- DOS01 0162 9FA0 0100 ERRBUF * &0100 ;Error buffer -- DOS01 0163 9FA0 -- DOS01 0164 9FA0 ;** Equates ** -- DOS01 0165 9FA0 ;* Error numbers * -- DOS01 0166 9FA0 ^ &CF ;Error base -- DOS01 0167 9FA0 00CF ATTNUM # &00 - &01 ;Bad attribute -- DOS01 0168 9FA0 00CE DIRNUM # &00 - &01 ;Bad directory -- DOS01 0169 9FA0 00CD DRVNUM # &00 - &01 ;Bad drive -- DOS01 0170 9FA0 00CC FNANUM # &00 - &01 ;Bad filename -- DOS01 0171 9FA0 00CB OPTNUM # &00 - &01 ;Bad option -- DOS01 0172 9FA0 00CA # &00 - &01 ;Bad sum (unused) -- DOS01 0173 9FA0 00C9 DKPNUM # &00 - &01 ;Disk read only -- DOS01 0174 9FA0 00C8 DKCNUM # &00 - &01 ;Disk changed -- DOS01 0175 9FA0 00C7 DERNUM # &00 - &01 ;Disk fault -- DOS01 0176 9FA0 00C6 NORNUM # &00 - &01 ;Disk full -- DOS01 0177 9FA0 00C5 DFANUM # &00 - &01 ;Drive fault -- DOS01 0178 9FA0 00C4 FAXNUM # &00 - &01 ;File exists -- DOS01 0179 9FA0 00C3 LOKNUM # &00 - &01 ;File locked -- DOS01 0180 9FA0 00C2 FOPNUM # &00 - &01 ;File open -- DOS01 0181 9FA0 00C1 RDONUM # &00 - &01 ;File read only -- DOS01 0182 9FA0 00C0 TMFNUM # &00 - &01 ;Too many open files -- DOS01 0183 9FA0 00BF CNXNUM # &00 - &01 ;Can't extend -- DOS01 0184 9FA0 00BE DRFNUM # &00 - &01 ;Directory full -- DOS01 0185 9FA0 00BD CNENUM # &00 - &01 ;Not enabled -- DOS01 0186 9FA0 -- DOS01 0187 9FA0 ;Special errors (in CFS) -- DOS01 0188 9FA0 00FE COMNUM * &FE ;Bad command -- DOS01 0189 9FA0 00DF EOFNUM * &DF ;EOF -- DOS01 0190 9FA0 00DE CHNNUM * &DE ;Channel -- DOS01 0191 9FA0 00DC SYNNUM * &DC ;Syntax errors -- DOS01 0192 9FA0 00D6 NOFNUM * &D6 ;File not found -- DOS01 0193 9FA0 0011 ESCNUM * &11 ;Escape -- DOS01 0194 9FA0 -- DOS01 0195 9FA0 -- DOS01 0196 9FA0 ;* System equates * -- DOS01 0197 9FA0 0000 MASDSK * &00 ;Start disk -- DOS01 0198 9FA0 0024 MASQUA * "$" ;Start qualifier -- DOS01 0199 9FA0 0023 MASWLD * "#" ;Wild char -- DOS01 0200 9FA0 002A MASDSH * "*" ;Dash char -- DOS01 0201 9FA0 [ DRIVEC=0 -- DOS01 0202 9FA0 000E COMNO * &0E ;Number of commands -- DOS01 0203 9FA0 | -- DOS01 0205 9FA0 ] -- DOS01 0206 9FA0 0005 UTLNO * &05 ;Number of utilities -- DOS01 0207 9FA0 0002 HLPNO * &02 ;Number of help commands -- DOS01 0208 9FA0 000A TRIES * &0A ;Retries at loading -- DOS01 0209 9FA0 000A SECTRK * &0A ;Sectors per track -- DOS01 0210 9FA0 0004 FSYSNO * &04 ;Filing system number -- DOS01 0211 9FA0 -- DOS01 0212 9FA0 -- DOS01 0213 9FA0 ;Reason code for claim NMI -- DOS01 0214 9FA0 ^ &00 -- DOS01 0215 9FA0 0000 WRMCLA # &01 ;Write from memory -- DOS01 0216 9FA0 0001 RDMCLA # &01 ;Read into memory -- DOS01 0217 9FA0 0002 NOPCLA # &01 ;Check error & return -- DOS01 0218 9FA0 0003 WTFCLA # &01 ;Write from tube -- DOS01 0219 9FA0 0004 WMFCLA # &01 ;Write from memory -- DOS01 0220 9FA0 0005 RTFCLA # &01 ;Read to tube -- DOS01 0221 9FA0 0006 RMFCLA # &01 ;Read to memory -- DOS01 0222 9FA0 -- DOS01 0223 9FA0 -- DOS01 0224 9FA0 ;* MOS RAM locations * -- DOS01 0225 9FA0 00EF WORDA * &00EF ;A of OSWORD call -- DOS01 0226 9FA0 00F0 WORDX * &00F0 ;X in OSWORD call -- DOS01 0227 9FA0 00F1 WORDY * &00F1 ;Y in OSWORD call -- DOS01 0228 9FA0 00F4 ROMID * &00F4 ;ID of current ROM -- DOS01 0229 9FA0 00F2 LINPTR * &00F2 ;Pointer to line -- DOS01 0230 9FA0 00FF ESCFLG * &00FF ;Escape flag -- DOS01 0231 9FA0 0212 VTAB2 * &0212 ;Start of vectors to zap -- DOS01 0232 9FA0 0DF0 PRIPTR * &0DF0 ;Pointer to private pages -- DOS01 0233 9FA0 -- DOS01 0234 9FA0 -- DOS01 0235 9FA0 ;* Pseudo-legal MOS entries * -- DOS01 0236 9FA0 0406 TUBADR * &0406 ;Set up address for tube -- DOS01 0237 9FA0 FFC2 RDINIT * &FFC2 ;Initialise read -- DOS01 0238 9FA0 ; ************RDCHR * $FFC5 ;Read char ; ********** HMT -- DOS01 0239 9FA0 -- DOS01 0240 9FA0 ;* Legal MOS entries * -- DOS01 0241 9FA0 FFE0 OSRDCH * &FFE0 ;Read char from kbd -- DOS01 0242 9FA0 FFEE OSWRCH * &FFEE ;Write char to screen -- DOS01 0243 9FA0 FFE7 OSCRLF * &FFE7 ;Print CR LF -- DOS01 0244 9FA0 FFE3 OSASCI * &FFE3 ;OSWRCH + CR]CRLF -- DOS01 0245 9FA0 FFF4 OSBYTE * &FFF4 ;Misc OS calls DOS01 DOS01 DOS01 DOS01 Acorn macro assembler Page 3 DOS01 - DOS01 - Storage Allocation DOS01 -- DOS01 0246 9FA0 FFF1 OSWORD * &FFF1 ;More misc OS calls -- DOS01 0247 9FA0 FFD4 OSBPUT * &FFD4 ;Put bytes to file -- DOS01 0248 9FA0 FFD7 OSBGET * &FFD7 ;Get bytes from file -- DOS01 0249 9FA0 FFCE OSFIND * &FFCE ;Open file -- DOS01 0250 9FA0 FFF7 OSCLI * &FFF7 ;Execute command line -- DOS01 0251 9FA0 -- DOS01 0252 9FA0 ;* OSBYTE call numbers * -- DOS01 0253 9FA0 0003 BYTESD * &03 ;Set OSWRCH destination -- DOS01 0254 9FA0 000F BYTECB * &0F ;Clear buffer -- DOS01 0255 9FA0 0077 BYTECS * &77 ;Close spool & exec files -- DOS01 0256 9FA0 0078 BYTECK * &78 ;Kill key -- DOS01 0257 9FA0 007A BYTEKS * &7A ;Keyboard scan -- DOS01 0258 9FA0 007E BYTEAE * &7E ;Acknowledge escape -- DOS01 0259 9FA0 0083 BYTEPA * &83 ;Get current page -- DOS01 0260 9FA0 0084 BYTETM * &84 ;Get top of memory -- DOS01 0261 9FA0 008E BYTESR * &8E ;Start language -- DOS01 0262 9FA0 008F BYTESC * &8F ;Do sideways call -- DOS01 0263 9FA0 00A8 BYTESV * &A8 ;Get address of sideways vectors -- DOS01 0264 9FA0 00BA BYTELR * &BA ;Find lang ROM ID -- DOS01 0265 9FA0 00C7 BYTESH * &C7 ;Get spool handle -- DOS01 0266 9FA0 00EA BYTETB * &EA ;Tube ? -- DOS01 0267 9FA0 00EC BYTEWD * &EC ;get Write Destination -- DOS01 0268 9FA0 00FF BYTESW * &FF ;Read switches -- DOS01 0269 9FA0 -- DOS01 0270 9FA0 ;* Sideways reason codes * -- DOS01 0271 9FA0 0001 SWCIN1 * &01 ;Init 1st pass (claim static) -- DOS01 0272 9FA0 0002 SWCIN2 * &02 ;Init 2nd pass (claim dynamic) -- DOS01 0273 9FA0 0003 SWCIN3 * &03 ;Init 3rd pass (auto-boot) -- DOS01 0274 9FA0 0004 SWCLIN * &04 ;*Command passed -- DOS01 0275 9FA0 0008 SWCWRD * &08 ;Unknown OSWORD call -- DOS01 0276 9FA0 0009 SWCHLP * &09 ;HELP !! -- DOS01 0277 9FA0 000A SWCCME * &0A ;Claim memory -- DOS01 0278 9FA0 000B SWCRNM * &0B ;Release NMI -- DOS01 0279 9FA0 000C SWCCNM * &0C ;Claim NMI -- DOS01 0280 9FA0 000F SWCVCL * &0F ;I've claimed vectors -- DOS01 0281 9FA0 0012 SWCIFS * &12 ;Init filing system Y -- DOS01 0282 9FA0 -- DOS01 0283 9FA0 ;* Device control addresses * -- DOS01 0284 9FA0 FE84 FDCD * &FE84 ;Data register (disk) -- DOS01 0285 9FA0 FE82 FDCRES * &FE82 ;Reset register -- DOS01 0286 9FA0 FE81 FDCR * &FE81 -- DOS01 0287 9FA0 FE81 FDCP * &FE81 -- DOS01 0288 9FA0 FE80 FDCC * &FE80 -- DOS01 0289 9FA0 FE80 FDCS * &FE80 ;Status register (disk) -- DOS01 0290 9FA0 FEE5 TUBE * &FEE5 ;1 byte FIFO in tube -- DOS01 0291 9FA0 FE30 ROMSW * &FE30 ;ROM switching port -- DOS01 0292 9FA0 -- DOS01 0293 9FA0 ;* Disk directory loaded in store from -- DOS01 0294 9FA0 ; $0E00 to $1000 * -- DOS01 0295 9FA0 ; -- DOS01 0296 9FA0 ;Directory info:- -- DOS01 0297 9FA0 ;DIRLOW + $00 ] $07: 1st 8 bytes title -- DOS01 0298 9FA0 ; + $08 ] $0F: 1st filename -- DOS01 0299 9FA0 ; + $10 ] $17: 2nd filename -- DOS01 0300 9FA0 ; + ... ] ...: n th filename -- DOS01 0301 9FA0 ; -- DOS01 0302 9FA0 ;DIRHIG + $00 ] $04: Last 5 bytes title -- DOS01 0303 9FA0 ; + $05 : No entries * 8 -- DOS01 0304 9FA0 ; + $06 (0,1): Disk length (H) -- DOS01 0305 9FA0 ; (4,5): Boot option -- DOS01 0306 9FA0 ; + $07 : Disk length (L) -- DOS01 0307 9FA0 ; -- DOS01 0308 9FA0 ;CATHIG + $00 : Start addr (M) -- DOS01 0309 9FA0 ; + $01 : Start addr (L) -- DOS01 0310 9FA0 ; + $02 : Exec addr (M) -- DOS01 0311 9FA0 ; + $03 : (L) -- DOS01 0312 9FA0 ; + $04 : Length (M) -- DOS01 0313 9FA0 ; + $05 : Length (L) -- DOS01 0314 9FA0 ; + $06 (0,1): Start Sector (H) -- DOS01 0315 9FA0 ; (2,3): Start Addr (H) -- DOS01 0316 9FA0 ; (4,5): Length (H) -- DOS01 0317 9FA0 ; (6,7): Exec addr (H) -- DOS01 0318 9FA0 ; + $07 : Start sector (L) -- DOS01 0319 9FA0 -- DOS01 0320 9FA0 -- DOS01 0321 9FA0 0E00 DIRLOW * INTNMI + &0100 -- DOS01 0322 9FA0 0E08 CATLOW * DIRLOW + &08 -- DOS01 0323 9FA0 0E0F MODIFY * CATLOW + &07 -- DOS01 0324 9FA0 0F00 DIRHIG * INTNMI + &0200 -- DOS01 0325 9FA0 0F04 CYCNO * DIRHIG + &04 ;Directory cycle number -- DOS01 0326 9FA0 0F05 DIRLEN * DIRHIG + &05 -- DOS01 0327 9FA0 0F06 OPTION * DIRHIG + &06 -- DOS01 0328 9FA0 0F08 CATHIG * DIRHIG + &08 -- DOS01 0329 9FA0 -- DOS01 0330 9FA0 -- DOS01 0331 9FA0 ;* Sequential file system workspace * -- DOS01 0332 9FA0 -- DOS01 0333 9FA0 1100 SEQMAP * INTNMI + &0400 -- DOS01 0334 9FA0 1109 SEQLL * SEQMAP + &09 ;Length (L) -- DOS01 0335 9FA0 110B SEQLM * SEQMAP + &0B ;Length (M) -- DOS01 0336 9FA0 110C SEQRDO * SEQMAP + &0C ;File read only bit -- DOS01 0337 9FA0 110D SEQLH * SEQMAP + &0D ;Length (H) Addr (H) -- DOS01 0338 9FA0 110E SEQLOK * SEQMAP + &0E ;Locked bit -- DOS01 0339 9FA0 110F SEQLOC * SEQMAP + &0F ;Disc addr (L) -- DOS01 0340 9FA0 1110 SEQPL * SEQMAP + &10 ;Seq pointer (L) -- DOS01 0341 9FA0 1111 SEQPM * SEQMAP + &11 ;Seq pointer (M) -- DOS01 0342 9FA0 1112 SEQPH * SEQMAP + &12 ;Seq pointer (H) -- DOS01 0343 9FA0 1113 SEQBUF * SEQMAP + &13 ;Buffer (H) -- DOS01 0344 9FA0 1114 SEQLLA * SEQMAP + &14 ;Length (L) -- DOS01 0345 9FA0 1115 SEQLMA * SEQMAP + &15 ;Length (M) -- DOS01 0346 9FA0 1116 SEQLHA * SEQMAP + &16 ;Length (H) -- DOS01 0347 9FA0 1117 SEQFLG * SEQMAP + &17 ;Flags & drive -- DOS01 0348 9FA0 1118 SEQEL * SEQMAP + &18 ;Always zero -- DOS01 0349 9FA0 1119 SEQEM * SEQMAP + &19 ;Extent (M) -- DOS01 0350 9FA0 111A SEQEH * SEQMAP + &1A ;Extent (H) -- DOS01 0351 9FA0 111B SEQBIT * SEQMAP + &1B ;DCBMAP bit -- DOS01 0352 9FA0 111C SEQDAL * SEQMAP + &1C ;Disc addr (L) -- DOS01 0353 9FA0 111D SEQDAH * SEQMAP + &1D ;Disc addr (H) -- DOS01 0354 9FA0 111E SEQUAL * SEQMAP + &1E ;Qualifer -- DOS01 0355 9FA0 111F SEQCHK * SEQMAP + &1F ;Checksum -- DOS01 0356 9FA0 -- DOS01 0357 9FA0 0040 DFSIZE * &40 ;by default, files will be 64 sectors, 16Kbytes -- DOS01 0358 9FA0 000D CR * &0D -- DOS01 0359 9FA0 000A LF * &0A -- DOS01 0360 9FA0 -- DOS01 0361 9FA0 ; ********************** -- DOS01 0362 9FA0 ; * END OF STORAGE MAP * -- DOS01 0363 9FA0 ; ********************** -- DOS01 0364 9FA0 -- DOS01 0365 9FA0 TTL - DOS01 - Useful Subroutines -- DOS01 0366 9FA0 OPT &01 DOS01 DOS01 DOS01 DOS01 Acorn macro assembler Page 4 DOS01 - DOS01 - Useful Subroutines DOS01 -- DOS01 0367 9FA0 -- DOS01 0368 9FA0 6C 1E 02 OSFSCM JMI &021E -- DOS01 0369 9FA3 -- DOS01 0370 9FA3 20 B8 9F DSKMSG JSR ESTRNG -- DOS01 0371 9FA6 00 44 69 = &00,"Disk " -- DOS01 0372 9FAC 90 21 BCC GSTRNG DOS01 0372 9FAC v5E DOS01 0373 9FAE DOS01 0372 9FAC v5E DOS01 0374 9FAE 20 B8 9F ILLMSG JSR ESTRNG DOS01 0372 9FAC v5E DOS01 0375 9FB1 00 42 61 = &00,"Bad " DOS01 0372 9FAC v5E DOS01 0376 9FB6 90 17 BCC GSTRNG DOS01 0372 9FAC v5E DOS01 0377 9FB8 DOS01 0372 9FAC v5E DOS01 0378 9FB8 ;**********FILMSG JSR ESTRNG DOS01 0372 9FAC v5E DOS01 0379 9FB8 ;********** = $00,"File " DOS01 0372 9FAC v5E DOS01 0380 9FB8 ;********** BCC GSTRNG ;********** HMT DOS01 0372 9FAC v5E DOS01 0381 9FB8 DOS01 0372 9FAC v5E DOS01 0382 9FB8 ;Print string for error handling DOS01 0372 9FAC v5E DOS01 0383 9FB8 ;Inserts error number DOS01 0372 9FAC v5E DOS01 0384 9FB8 AD DD 10 ESTRNG LDA SEQSEM DOS01 0372 9FAC v5E DOS01 0385 9FBB D0 03 BNE ESTRN1 DOS01 0372 9FAC v5E DOS01 0386 9FBD 20 C8 B0 JSR HMTSPE DOS01 0372 9FAC v5E DOS01 0387 9FC0 A9 FF ESTRN1 LDAIM &FF DOS01 0372 9FAC v5E DOS01 0388 9FC2 8D 82 10 STA CATDRV ; Invalidate old catalog for DFS0.9W DOS01 0372 9FAC v5E DOS01 0389 9FC5 8D DD 10 STA SEQSEM DOS01 0372 9FAC v5E DOS01 0390 9FC8 ; Alternate entry for if I'm not the current FS DOS01 0372 9FAC v5E DOS01 0391 9FC8 A2 02 FSTRNG LDXIM &02 DOS01 0372 9FAC v5E DOS01 0392 9FCA A9 00 LDAIM &00 DOS01 0372 9FAC v5E DOS01 0393 9FCC 8D 00 01 STA ERRBUF DOS01 0372 9FAC v5E DOS01 0394 9FCF 85 B3 GSTRNG STA ITEMP -- DOS01 0395 9FD1 68 PLA ;Get return address -- DOS01 0396 9FD2 85 AE STA PTEMP -- DOS01 0397 9FD4 68 PLA -- DOS01 0398 9FD5 85 AF STA PTEMP + &01 -- DOS01 0399 9FD7 A5 B3 LDA ITEMP -- DOS01 0400 9FD9 A0 00 LDYIM &00 -- DOS01 0401 9FDB 20 20 A3 JSR TMPINC -- DOS01 0402 9FDE B1 AE LDAIY PTEMP -- DOS01 0403 9FE0 8D 01 01 STA ERRBUF + &01 -- DOS01 0404 9FE3 CA DEX -- DOS01 0405 9FE4 20 20 A3 ESTRN0 JSR TMPINC DOS01 0410 9FEF ^73 DOS01 0406 9FE7 E8 INX DOS01 0410 9FEF ^73 DOS01 0407 9FE8 B1 AE LDAIY PTEMP DOS01 0410 9FEF ^73 DOS01 0408 9FEA 9D 00 01 STAAX ERRBUF DOS01 0410 9FEF ^73 DOS01 0409 9FED 30 27 BMI VSTRNR DOS01 0409 9FED v58 DOS01 0410 9FEF D0 F3 BNE ESTRN0 DOS01 0409 9FED v58 DOS01 0411 9FF1 20 FF A6 JSR RELTUB ;Release tube DOS01 0409 9FED v58 DOS01 0412 9FF4 4C 00 01 JMP ERRBUF DOS01 0409 9FED v58 DOS01 0413 9FF7 DOS01 0409 9FED v58 DOS01 0414 9FF7 ;General purpose print string DOS01 0409 9FED v58 DOS01 0415 9FF7 85 B3 VSTRNG STA ITEMP DOS01 0409 9FED v58 DOS01 0416 9FF9 68 PLA ;Get return address DOS01 0409 9FED v58 DOS01 0417 9FFA 85 AE STA PTEMP DOS01 0409 9FED v58 DOS01 0418 9FFC 68 PLA DOS01 0409 9FED v58 DOS01 0419 9FFD 85 AF STA PTEMP + &01 DOS01 0409 9FED v58 DOS01 0420 9FFF A5 B3 LDA ITEMP DOS01 0409 9FED v58 DOS01 0421 A001 48 PHA DOS01 0409 9FED v58 DOS01 0422 A002 98 TYA DOS01 0409 9FED v58 DOS01 0423 A003 48 PHA DOS01 0409 9FED v58 DOS01 0424 A004 A0 00 LDYIM &00 DOS01 0409 9FED v58 DOS01 0425 A006 20 20 A3 VSTRLP JSR TMPINC DOS01 0409 9FED v58 DOS01 0426 A009 B1 AE LDAIY PTEMP DOS01 0409 9FED v58 DOS01 0427 A00B 30 06 BMI VSTRNX DOS01 0409 9FED v58 DOS01 0428 A00D 20 1F A0 JSR PCHR DOS01 0409 9FED v58 DOS01 0429 A010 4C 06 A0 JMP VSTRLP DOS01 0409 9FED v58 DOS01 0430 A013 68 VSTRNX PLA DOS01 0409 9FED v58 DOS01 0431 A014 A8 TAY DOS01 0409 9FED v58 DOS01 0432 A015 68 PLA DOS01 0409 9FED v58 DOS01 0433 A016 18 VSTRNR CLC -- DOS01 0434 A017 6C AE 00 JMI PTEMP -- DOS01 0435 A01A -- DOS01 0436 A01A ;Print digit and dot -- DOS01 0437 A01A 20 40 A0 DPDOT JSR DIGOUT -- DOS01 0438 A01D -- DOS01 0439 A01D ;Print dot -- DOS01 0440 A01D A9 2E PDOT LDAIM "." -- DOS01 0441 A01F -- DOS01 0442 A01F ;Print char but not to spool -- DOS01 0443 A01F 20 27 A3 PCHR JSR SAVITA DOS01 0466 A043 ^5A DOS01 0444 A022 48 PHA DOS01 0466 A043 ^5A DOS01 0445 A023 A9 EC LDAIM BYTEWD DOS01 0466 A043 ^5A DOS01 0446 A025 20 A6 B9 JSR READBY DOS01 0466 A043 ^5A DOS01 0447 A028 8A TXA DOS01 0466 A043 ^5A DOS01 0448 A029 48 PHA DOS01 0466 A043 ^5A DOS01 0449 A02A 09 10 ORAIM &10 DOS01 0466 A043 ^5A DOS01 0450 A02C 20 94 B9 JSR WRIWDE DOS01 0466 A043 ^5A DOS01 0451 A02F 68 PLA DOS01 0466 A043 ^5A DOS01 0452 A030 AA TAX DOS01 0466 A043 ^5A DOS01 0453 A031 68 PLA DOS01 0466 A043 ^5A DOS01 0454 A032 20 E3 FF JSR OSASCI DOS01 0466 A043 ^5A DOS01 0455 A035 4C 95 B9 JMP WRIWDX DOS01 0466 A043 ^5A DOS01 0456 A038 DOS01 0466 A043 ^5A DOS01 0457 A038 ; BYTOUT PRINTS 2 HEX DIGITS DOS01 0466 A043 ^5A DOS01 0458 A038 ; TO GIVE THE VALUE OF A. DOS01 0466 A043 ^5A DOS01 0459 A038 48 BYTOUT PHA DOS01 0466 A043 ^5A DOS01 0460 A039 20 38 A1 JSR SFOUR DOS01 0466 A043 ^5A DOS01 0461 A03C 20 40 A0 JSR DIGOUT DOS01 0466 A043 ^5A DOS01 0462 A03F 68 PLA DOS01 0466 A043 ^5A DOS01 0463 A040 ; DIGOUT PRINTS LOWER 4 BITS OF DOS01 0466 A043 ^5A DOS01 0464 A040 ; A AS A HEX DIGIT. DOS01 0466 A043 ^5A DOS01 0465 A040 20 45 A0 DIGOUT JSR DIGUT1 DOS01 0466 A043 ^5A DOS01 0466 A043 D0 DA BNE PCHR ;********** Always ********* HMT -- DOS01 0467 A045 -- DOS01 0468 A045 29 0F DIGUT1 ANDIM &0F -- DOS01 0469 A047 C9 0A CMPIM &0A -- DOS01 0470 A049 90 02 BCC DIGOT0 DOS01 0470 A049 v7D DOS01 0471 A04B 69 06 ADCIM &06 DOS01 0470 A049 v7D DOS01 0472 A04D 69 30 DIGOT0 ADCIM &30 -- DOS01 0473 A04F 60 RTS -- DOS01 0474 A050 -- DOS01 0475 A050 ;Shift both high and low bytes -- DOS01 0476 A050 20 60 A0 SHFTBO JSR SHFTTW -- DOS01 0477 A053 CA DEX -- DOS01 0478 A054 CA DEX -- DOS01 0479 A055 -- DOS01 0480 A055 ;Shift two high bytes -- DOS01 0481 A055 20 58 A0 JSR SHFTT0 -- DOS01 0482 A058 B1 B0 SHFTT0 LDAIY TEMP -- DOS01 0483 A05A 9D 72 10 STAAX HIWORK - &02 -- DOS01 0484 A05D E8 INX -- DOS01 0485 A05E C8 INY -- DOS01 0486 A05F 60 RTS -- DOS01 0487 A060 DOS01 DOS01 DOS01 DOS01 Acorn macro assembler Page 5 DOS01 - DOS01 - Useful Subroutines DOS01 -- DOS01 0488 A060 ;Shift two bytes from old FCB to WORK -- DOS01 0489 A060 20 63 A0 SHFTTW JSR SHFTON -- DOS01 0490 A063 B1 B0 SHFTON LDAIY TEMP -- DOS01 0491 A065 95 BA STAZX WORK -- DOS01 0492 A067 E8 INX -- DOS01 0493 A068 C8 INY -- DOS01 0494 A069 60 RTS -- DOS01 0495 A06A -- DOS01 0496 A06A 20 C3 A9 GETNAM JSR SETDEF -- DOS01 0497 A06D 4C 80 A0 JMP GETNM0 -- DOS01 0498 A070 -- DOS01 0499 A070 20 C3 A9 FRMNAM JSR SETDEF -- DOS01 0500 A073 A5 BA FRMNM1 LDA WORK -- DOS01 0501 A075 85 F2 STA LINPTR -- DOS01 0502 A077 A5 BB LDA WORK + &01 -- DOS01 0503 A079 85 F3 STA LINPTR + &01 -- DOS01 0504 A07B A0 00 LDYIM &00 -- DOS01 0505 A07D 20 F1 A5 JSR SETUPR -- DOS01 0506 A080 A2 20 GETNM0 LDXIM " " DOS01 0522 A0A3 ^5B DOS01 0507 A082 20 C9 A0 JSR RDCHR DOS01 0522 A0A3 ^5B DOS01 0508 A085 B0 1E BCS NAMERR DOS01 0522 A0A3 ^5B DOS01 0509 A087 8D 00 10 STA BUFFER DOS01 0522 A0A3 ^5B DOS01 0510 A08A C9 2E CMPIM "." DOS01 0522 A0A3 ^5B DOS01 0511 A08C D0 04 BNE GETNM1 DOS01 0522 A0A3 ^5B DOS01 0512 A08E 86 CC GETNM2 STX QUALIF DOS01 0530 A0B6 ^56 DOS01 0513 A090 F0 EE BEQ GETNM0 ;-Always- DOS01 0530 A0B6 ^56 DOS01 0514 A092 C9 3A GETNM1 CMPIM ":" DOS01 0530 A0B6 ^56 DOS01 0515 A094 D0 18 BNE GETNM3 DOS01 0530 A0B6 ^56 DOS01 0516 A096 20 D3 A9 JSR GETDRV DOS01 0530 A0B6 ^56 DOS01 0517 A099 20 99 A6 JSR DODRIV DOS01 0530 A0B6 ^56 DOS01 0518 A09C 20 C9 A0 JSR RDCHR DOS01 0530 A0B6 ^56 DOS01 0519 A09F B0 04 BCS NAMERR DOS01 0530 A0B6 ^56 DOS01 0520 A0A1 ;*********** LDXIM MASQUA ; HMT DOS01 0530 A0B6 ^56 DOS01 0521 A0A1 C9 2E CMPIM "." DOS01 0530 A0B6 ^56 DOS01 0522 A0A3 F0 DB BEQ GETNM0 ; If just :0.filename leave the Qual HMT DOS01 0530 A0B6 ^56 DOS01 0523 A0A5 DOS01 0530 A0B6 ^56 DOS01 0524 A0A5 20 AE 9F NAMERR JSR ILLMSG DOS01 0555 A0D9 ^4A DOS01 0525 A0A8 CC 6E 61 = FNANUM,"name",&00 DOS01 0555 A0D9 ^4A DOS01 0526 A0AE AA GETNM3 TAX ; Good qualifier in X DOS01 0555 A0D9 ^4A DOS01 0527 A0AF 20 C9 A0 JSR RDCHR DOS01 0555 A0D9 ^4A DOS01 0528 A0B2 B0 29 BCS GETNM4 DOS01 0555 A0D9 ^4A DOS01 0529 A0B4 C9 2E CMPIM "." DOS01 0555 A0D9 ^4A DOS01 0530 A0B6 F0 D6 BEQ GETNM2 DOS01 0555 A0D9 ^4A DOS01 0531 A0B8 A2 01 LDXIM &01 DOS01 0555 A0D9 ^4A DOS01 0532 A0BA 9D 00 10 GETNM5 STAAX BUFFER DOS01 0555 A0D9 ^4A DOS01 0533 A0BD E8 INX DOS01 0555 A0D9 ^4A DOS01 0534 A0BE 20 C9 A0 JSR RDCHR DOS01 0555 A0D9 ^4A DOS01 0535 A0C1 B0 1C BCS GETNM6 DOS01 0555 A0D9 ^4A DOS01 0536 A0C3 E0 07 CPXIM &07 ; **** trap long names ****** HMT DOS01 0555 A0D9 ^4A DOS01 0537 A0C5 D0 F3 BNE GETNM5 DOS01 0555 A0D9 ^4A DOS01 0538 A0C7 F0 DC BEQ NAMERR ;-Always- DOS01 0555 A0D9 ^4A DOS01 0539 A0C9 DOS01 0555 A0D9 ^4A DOS01 0540 A0C9 DOS01 0555 A0D9 ^4A DOS01 0541 A0C9 ;************************************ DOS01 0555 A0D9 ^4A DOS01 0542 A0C9 ; Modified RDCHR to check for control character DOS01 0555 A0D9 ^4A DOS01 0543 A0C9 ;************************************ HMT DOS01 0555 A0D9 ^4A DOS01 0544 A0C9 DOS01 0555 A0D9 ^4A DOS01 0545 A0C9 20 C5 FF RDCHR JSR &FFC5 ; The pseudo legal MOS entry DOS01 0555 A0D9 ^4A DOS01 0546 A0CC 08 PHP DOS01 0555 A0D9 ^4A DOS01 0547 A0CD 29 7F ANDIM &7F DOS01 0555 A0D9 ^4A DOS01 0548 A0CF C9 0D CMPIM &0D ;** Char $8D is specified as legal char in filenames DOS01 0555 A0D9 ^4A DOS01 0549 A0D1 F0 08 BEQ RDCHOK ;** Jes 8/2/84 ** DOS01 0555 A0D9 ^4A DOS01 0550 A0D3 DOS01 0555 A0D9 ^4A DOS01 0551 A0D3 C9 20 CMPIM &20 DOS01 0555 A0D9 ^4A DOS01 0552 A0D5 90 CE BCC NAMERR DOS01 0555 A0D9 ^4A DOS01 0553 A0D7 DOS01 0555 A0D9 ^4A DOS01 0554 A0D7 C9 7F CMPIM &7F DOS01 0555 A0D9 ^4A DOS01 0555 A0D9 F0 CA BEQ NAMERR DOS01 0528 A0B2 v56 DOS01 0556 A0DB DOS01 0528 A0B2 v56 DOS01 0557 A0DB 28 RDCHOK PLP DOS01 0528 A0B2 v56 DOS01 0558 A0DC 60 RTS DOS01 0528 A0B2 v56 DOS01 0559 A0DD DOS01 0528 A0B2 v56 DOS01 0560 A0DD ;************************************ DOS01 0528 A0B2 v56 DOS01 0561 A0DD DOS01 0528 A0B2 v56 DOS01 0562 A0DD A2 01 GETNM4 LDXIM &01 DOS01 0535 A0C1 v63 DOS01 0563 A0DF A9 20 GETNM6 LDAIM " " -- DOS01 0564 A0E1 9D 00 10 GETNM7 STAAX BUFFER DOS01 0567 A0E7 ^78 DOS01 0565 A0E4 E8 INX DOS01 0567 A0E7 ^78 DOS01 0566 A0E5 E0 40 CPXIM &40 DOS01 0567 A0E7 ^78 DOS01 0567 A0E7 D0 F8 BNE GETNM7 -- DOS01 0568 A0E9 -- DOS01 0569 A0E9 ;Copy filename into WORK + $0B -- DOS01 0570 A0E9 A2 06 COPNAM LDXIM &06 -- DOS01 0571 A0EB BD 00 10 CLRNM0 LDAAX BUFFER DOS01 0574 A0F1 ^78 DOS01 0572 A0EE 95 C5 STAZX WORK + &0B DOS01 0574 A0F1 ^78 DOS01 0573 A0F0 CA DEX DOS01 0574 A0F1 ^78 DOS01 0574 A0F1 10 F8 BPL CLRNM0 -- DOS01 0575 A0F3 60 CLRNM1 RTS -- DOS01 0576 A0F4 -- DOS01 0577 A0F4 ;Print name of file for things with -- DOS01 0578 A0F4 ; queries. -- DOS01 0579 A0F4 20 27 A3 PRTNAM JSR SAVITA -- DOS01 0580 A0F7 B9 0F 0E LDAAY MODIFY -- DOS01 0581 A0FA 08 PHP -- DOS01 0582 A0FB 29 7F ANDIM &7F -- DOS01 0583 A0FD D0 05 BNE PTNAM2 DOS01 0583 A0FD v7A DOS01 0584 A0FF 20 A6 BF JSR PDSPC DOS01 0583 A0FD v7A DOS01 0585 A102 F0 06 BEQ PTNAM3 DOS01 0585 A102 v79 DOS01 0586 A104 20 1F A0 PTNAM2 JSR PCHR DOS01 0585 A102 v79 DOS01 0587 A107 20 1D A0 JSR PDOT DOS01 0585 A102 v79 DOS01 0588 A10A A2 06 PTNAM3 LDXIM &06 -- DOS01 0589 A10C B9 08 0E PTNAM0 LDAAY CATLOW DOS01 0594 A116 ^74 DOS01 0590 A10F 29 7F ANDIM &7F DOS01 0594 A116 ^74 DOS01 0591 A111 20 1F A0 JSR PCHR DOS01 0594 A116 ^74 DOS01 0592 A114 C8 INY DOS01 0594 A116 ^74 DOS01 0593 A115 CA DEX DOS01 0594 A116 ^74 DOS01 0594 A116 10 F4 BPL PTNAM0 -- DOS01 0595 A118 20 A6 BF JSR PDSPC -- DOS01 0596 A11B A9 20 LDAIM " " -- DOS01 0597 A11D 28 PLP -- DOS01 0598 A11E 10 02 BPL PTNAM1 DOS01 0598 A11E v7D DOS01 0599 A120 A9 4C LDAIM "L" DOS01 0598 A11E v7D DOS01 0600 A122 20 1F A0 PTNAM1 JSR PCHR -- DOS01 0601 A125 A0 01 LDYIM &01 ;Print 1 space -- DOS01 0602 A127 -- DOS01 0603 A127 ;Prints Y spaces -- DOS01 0604 A127 20 A9 BF YSPACE JSR PSPACE DOS01 0606 A12B ^7A DOS01 0605 A12A 88 DEY DOS01 0606 A12B ^7A DOS01 0606 A12B D0 FA BNE YSPACE -- DOS01 0607 A12D 60 RTS -- DOS01 0608 A12E DOS01 DOS01 DOS01 DOS01 Acorn macro assembler Page 6 DOS01 - DOS01 - Useful Subroutines DOS01 -- DOS01 0609 A12E 4A ISOEXE LSRA ;Isolate exec addr -- DOS01 0610 A12F 4A LSRA -- DOS01 0611 A130 4A ISOLEN LSRA ;Isolate length addr -- DOS01 0612 A131 4A LSRA -- DOS01 0613 A132 4A ISOLOD LSRA ;Isolate load addr -- DOS01 0614 A133 4A LSRA -- DOS01 0615 A134 29 03 ANDIM &03 -- DOS01 0616 A136 60 RTS -- DOS01 0617 A137 -- DOS01 0618 A137 ;Shift right A four or five times -- DOS01 0619 A137 4A SFIVE LSRA -- DOS01 0620 A138 4A SFOUR LSRA -- DOS01 0621 A139 4A LSRA -- DOS01 0622 A13A 4A LSRA -- DOS01 0623 A13B 4A LSRA -- DOS01 0624 A13C 60 RTS -- DOS01 0625 A13D -- DOS01 0626 A13D ;Shift left A four or five times -- DOS01 0627 A13D 0A LFIVE ASLA -- DOS01 0628 A13E 0A LFOUR ASLA -- DOS01 0629 A13F 0A ASLA -- DOS01 0630 A140 0A ASLA -- DOS01 0631 A141 0A ASLA -- DOS01 0632 A142 60 RTS -- DOS01 0633 A143 -- DOS01 0634 A143 -- DOS01 0635 A143 -- DOS01 0636 A143 A5 BC ATOT LDA WORK + &02 -- DOS01 0637 A145 85 A6 STA RAMADR -- DOS01 0638 A147 A5 BD LDA WORK + &03 -- DOS01 0639 A149 85 A7 STA RAMADR + &01 -- DOS01 0640 A14B A9 FF LDAIM &FF -- DOS01 0641 A14D 85 CE STA TRACK -- DOS01 0642 A14F A6 C1 LDX WORK + &07 -- DOS01 0643 A151 E8 INX -- DOS01 0644 A152 86 A4 STX READNO + &01 -- DOS01 0645 A154 A5 C2 LDA WORK + &08 -- DOS01 0646 A156 20 30 A1 JSR ISOLEN -- DOS01 0647 A159 85 A5 STA READNO + &02 -- DOS01 0648 A15B E6 A5 INC READNO + &02 -- DOS01 0649 A15D A5 C0 LDA WORK + &06 -- DOS01 0650 A15F 85 A3 STA READNO -- DOS01 0651 A161 D0 06 BNE ATOT0 DOS01 0651 A161 v79 DOS01 0652 A163 C6 A4 DEC READNO + &01 DOS01 0651 A161 v79 DOS01 0653 A165 D0 02 BNE ATOT0 DOS01 0651 A161 v79 DOS01 0654 A167 C6 A5 DEC READNO + &02 DOS01 0651 A161 v79 DOS01 0655 A169 A5 C2 ATOT0 LDA WORK + &08 -- DOS01 0656 A16B 29 03 ANDIM &03 -- DOS01 0657 A16D AA TAX -- DOS01 0658 A16E A5 C3 LDA WORK + &09 -- DOS01 0659 A170 38 TRSCA SEC DOS01 0664 A178 ^76 DOS01 0660 A171 E6 CE TRSCB INC TRACK DOS01 0664 A178 ^76 DOS01 0661 A173 E9 0A SBCIM &0A DOS01 0664 A178 ^76 DOS01 0662 A175 B0 FA BCS TRSCB DOS01 0664 A178 ^76 DOS01 0663 A177 CA DEX DOS01 0664 A178 ^76 DOS01 0664 A178 10 F6 BPL TRSCA -- DOS01 0665 A17A 69 0A ADCIM &0A -- DOS01 0666 A17C 85 CF STA SECTOR -- DOS01 0667 A17E 60 LOKSUC RTS DOS01 0674 A18A ^72 DOS01 0668 A17F DOS01 0674 A18A ^72 DOS01 0669 A17F 20 6A A0 GETLOK JSR GETNAM DOS01 0674 A18A ^72 DOS01 0670 A182 30 03 BMI ERRLOK ;-Always- DOS01 0674 A18A ^72 DOS01 0671 A184 DOS01 0674 A18A ^72 DOS01 0672 A184 20 70 A0 FRMLOK JSR FRMNAM DOS01 0674 A18A ^72 DOS01 0673 A187 20 C3 A1 ERRLOK JSR LOOKUP DOS01 0674 A18A ^72 DOS01 0674 A18A B0 F2 BCS LOKSUC -- DOS01 0675 A18C -- DOS01 0676 A18C 20 C8 9F NOFIL JSR FSTRNG -- DOS01 0677 A18F D6 4E 6F = NOFNUM,"Not found",&00 -- DOS01 0678 A19A -- DOS01 0679 A19A 20 04 B8 INFO JSR SETWLD -- DOS01 0680 A19D 20 61 BA JSR CHKSYN -- DOS01 0681 A1A0 20 7F A1 JSR GETLOK -- DOS01 0682 A1A3 20 79 A2 INFO0 JSR PRTINF DOS01 0684 A1A9 ^78 DOS01 0683 A1A6 20 BF A1 JSR NEXT DOS01 0684 A1A9 ^78 DOS01 0684 A1A9 B0 F8 BCS INFO0 -- DOS01 0685 A1AB 60 RTS -- DOS01 0686 A1AC -- DOS01 0687 A1AC A2 06 LOOKW LDXIM &06 -- DOS01 0688 A1AE B5 C5 LOOKW0 LDAAX WORK + &0B DOS01 0691 A1B4 ^78 DOS01 0689 A1B0 9D 58 10 STAAX TMPNAM DOS01 0691 A1B4 ^78 DOS01 0690 A1B3 CA DEX DOS01 0691 A1B4 ^78 DOS01 0691 A1B4 10 F8 BPL LOOKW0 -- DOS01 0692 A1B6 A9 20 LDAIM " " -- DOS01 0693 A1B8 8D 5F 10 STA TMPNAM + &07 -- DOS01 0694 A1BB A9 58 LDAIM TMPNAM -- DOS01 0695 A1BD D0 06 BNE LOOKUX ;-Always- DOS01 0695 A1BD v79 DOS01 0696 A1BF DOS01 0695 A1BD v79 DOS01 0697 A1BF A2 00 NEXT LDXIM &00 DOS01 0695 A1BD v79 DOS01 0698 A1C1 F0 10 BEQ NEXT0 ; Always DOS01 0698 A1C1 v6F DOS01 0699 A1C3 DOS01 0698 A1C1 v6F DOS01 0700 A1C3 A9 00 LOOKUP LDAIM &00 DOS01 0698 A1C1 v6F DOS01 0701 A1C5 48 LOOKUX PHA DOS01 0698 A1C1 v6F DOS01 0702 A1C6 20 5F AA JSR DIRLD DOS01 0698 A1C1 v6F DOS01 0703 A1C9 68 PLA DOS01 0698 A1C1 v6F DOS01 0704 A1CA AA TAX DOS01 0698 A1C1 v6F DOS01 0705 A1CB A9 0E LDAIM /(DIRLOW ) DOS01 0698 A1C1 v6F DOS01 0706 A1CD 85 B7 STA VTEMP + &01 DOS01 0698 A1C1 v6F DOS01 0707 A1CF A9 00 LDAIM &00 DOS01 0698 A1C1 v6F DOS01 0708 A1D1 85 B6 STA VTEMP DOS01 0698 A1C1 v6F DOS01 0709 A1D3 A0 00 NEXT0 LDYIM &00 DOS01 0720 A1EC ^65 DOS01 0710 A1D5 A5 B6 LDA VTEMP DOS01 0720 A1EC ^65 DOS01 0711 A1D7 CD 05 0F CMP DIRLEN DOS01 0720 A1EC ^65 DOS01 0712 A1DA B0 49 BCS MATCHF DOS01 0712 A1DA v36 DOS01 0713 A1DC 69 08 ADCIM &08 DOS01 0712 A1DA v36 DOS01 0714 A1DE 85 B6 STA VTEMP DOS01 0712 A1DA v36 DOS01 0715 A1E0 20 FA A1 JSR MATCHS DOS01 0712 A1DA v36 DOS01 0716 A1E3 90 EE BCC NEXT0 DOS01 0712 A1DA v36 DOS01 0717 A1E5 A5 CC LDA QUALIF ;Check qualifier DOS01 0712 A1DA v36 DOS01 0718 A1E7 A0 07 LDYIM &07 DOS01 0712 A1DA v36 DOS01 0719 A1E9 20 27 A2 JSR CPCHAR DOS01 0712 A1DA v36 DOS01 0720 A1EC D0 E5 BNE NEXT0 DOS01 0712 A1DA v36 DOS01 0721 A1EE A4 B6 LDY VTEMP DOS01 0712 A1DA v36 DOS01 0722 A1F0 38 SEC DOS01 0712 A1DA v36 DOS01 0723 A1F1 DOS01 0712 A1DA v36 DOS01 0724 A1F1 ; UNSTEP DECREMENTS Y BY 8. DOS01 0712 A1DA v36 DOS01 0725 A1F1 ; INVERSE OF STEP DOS01 0712 A1DA v36 DOS01 0726 A1F1 DOS01 0712 A1DA v36 DOS01 0727 A1F1 88 UNSTEP DEY DOS01 0712 A1DA v36 DOS01 0728 A1F2 88 DEY DOS01 0712 A1DA v36 DOS01 0729 A1F3 88 DEY DOS01 DOS01 DOS01 DOS01 Acorn macro assembler Page 7 DOS01 - DOS01 - Useful Subroutines DOS01 DOS01 0712 A1DA v36 DOS01 0730 A1F4 88 DEY DOS01 0712 A1DA v36 DOS01 0731 A1F5 88 DEY DOS01 0712 A1DA v36 DOS01 0732 A1F6 88 DEY DOS01 0712 A1DA v36 DOS01 0733 A1F7 88 DEY DOS01 0712 A1DA v36 DOS01 0734 A1F8 88 DEY DOS01 0712 A1DA v36 DOS01 0735 A1F9 60 RTS DOS01 0712 A1DA v36 DOS01 0736 A1FA DOS01 0712 A1DA v36 DOS01 0737 A1FA 20 27 A3 MATCHS JSR SAVITA DOS01 0712 A1DA v36 DOS01 0738 A1FD BD 00 10 MATCH1 LDAAX BUFFER DOS01 0712 A1DA v36 DOS01 0739 A200 DOS01 0712 A1DA v36 DOS01 0740 A200 CD CE 10 CMP DASHOP DOS01 0712 A1DA v36 DOS01 0741 A203 D0 13 BNE MATCH4 DOS01 0712 A1DA v36 DOS01 0742 A205 E8 INX DOS01 0712 A1DA v36 DOS01 0743 A206 20 FA A1 MATCH6 JSR MATCHS DOS01 0712 A1DA v36 DOS01 0744 A209 B0 1B BCS MATCHR DOS01 0712 A1DA v36 DOS01 0745 A20B C8 INY DOS01 0712 A1DA v36 DOS01 0746 A20C C0 07 CPYIM &07 DOS01 0712 A1DA v36 DOS01 0747 A20E 90 F6 BCC MATCH6 DOS01 0712 A1DA v36 DOS01 0748 A210 DOS01 0712 A1DA v36 DOS01 0749 A210 ;*************** so *XABC doesnt match RSTUVWX DOS01 0712 A1DA v36 DOS01 0750 A210 BD 00 10 MATHMT LDAAX BUFFER DOS01 0712 A1DA v36 DOS01 0751 A213 C9 20 CMPIM " " DOS01 0712 A1DA v36 DOS01 0752 A215 D0 0E BNE MATCHF DOS01 0712 A1DA v36 DOS01 0753 A217 60 RTS DOS01 0712 A1DA v36 DOS01 0754 A218 C0 07 MATCH4 CPYIM &07 DOS01 0712 A1DA v36 DOS01 0755 A21A B0 F4 BCS MATHMT DOS01 0712 A1DA v36 DOS01 0756 A21C 20 27 A2 JSR CPCHAR DOS01 0712 A1DA v36 DOS01 0757 A21F ; *************** HMT DOS01 0712 A1DA v36 DOS01 0758 A21F D0 04 BNE MATCHF DOS01 0712 A1DA v36 DOS01 0759 A221 DOS01 0712 A1DA v36 DOS01 0760 A221 E8 MATCH5 INX DOS01 0712 A1DA v36 DOS01 0761 A222 C8 INY DOS01 0712 A1DA v36 DOS01 0762 A223 D0 D8 BNE MATCH1 DOS01 0712 A1DA v36 DOS01 0763 A225 ; *************** HMT DOS01 0712 A1DA v36 DOS01 0764 A225 DOS01 0712 A1DA v36 DOS01 0765 A225 18 MATCHF CLC DOS01 0744 A209 v64 DOS01 0766 A226 60 MATCHR RTS -- DOS01 0767 A227 -- DOS01 0768 A227 ;Compare A with (VTEMP),Y -- DOS01 0769 A227 CD CE 10 CPCHAR CMP DASHOP -- DOS01 0770 A22A F0 10 BEQ CPRET DOS01 0770 A22A v6F DOS01 0771 A22C CD CD 10 CMP WILDCH DOS01 0770 A22A v6F DOS01 0772 A22F F0 0B BEQ CPRET DOS01 0770 A22A v6F DOS01 0773 A231 20 66 A2 JSR CAPS DOS01 0770 A22A v6F DOS01 0774 A234 51 B6 EORIY VTEMP DOS01 0770 A22A v6F DOS01 0775 A236 B0 02 BCS CPCHR0 DOS01 0770 A22A v6F DOS01 0776 A238 29 5F ANDIM &5F DOS01 0770 A22A v6F DOS01 0777 A23A 29 7F CPCHR0 ANDIM &7F DOS01 0770 A22A v6F DOS01 0778 A23C 60 CPRET RTS -- DOS01 0779 A23D -- DOS01 0780 A23D ;Set A to capitals -- DOS01 0781 A23D 08 SETCAP PHP -- DOS01 0782 A23E 20 66 A2 JSR CAPS -- DOS01 0783 A241 B0 02 BCS SCAP0 DOS01 0783 A241 v7D DOS01 0784 A243 29 5F ANDIM &5F DOS01 0783 A241 v7D DOS01 0785 A245 29 7F SCAP0 ANDIM &7F -- DOS01 0786 A247 28 PLP -- DOS01 0787 A248 60 RTS -- DOS01 0788 A249 -- DOS01 0789 A249 -- DOS01 0790 A249 ;Delete file from directory -- DOS01 0791 A249 20 B8 B8 DELFIL JSR CHKOPL -- DOS01 0792 A24C B9 10 0E DELLOP LDAAY CATLOW + &08 DOS01 0798 A25C ^6E DOS01 0793 A24F 99 08 0E STAAY CATLOW DOS01 0798 A25C ^6E DOS01 0794 A252 B9 10 0F LDAAY CATHIG + &08 DOS01 0798 A25C ^6E DOS01 0795 A255 99 08 0F STAAY CATHIG DOS01 0798 A25C ^6E DOS01 0796 A258 C8 INY DOS01 0798 A25C ^6E DOS01 0797 A259 CC 05 0F CPY DIRLEN DOS01 0798 A25C ^6E DOS01 0798 A25C 90 EE BCC DELLOP -- DOS01 0799 A25E 98 TYA -- DOS01 0800 A25F E9 08 SBCIM &08 -- DOS01 0801 A261 8D 05 0F STA DIRLEN -- DOS01 0802 A264 18 LOOKX CLC -- DOS01 0803 A265 60 INFRTS RTS DOS01 0820 A277 ^6C DOS01 0804 A266 DOS01 0820 A277 ^6C DOS01 0805 A266 ;Is it a letter ? DOS01 0820 A277 ^6C DOS01 0806 A266 ; C = 0 => letter DOS01 0820 A277 ^6C DOS01 0807 A266 ; C = 1 => NOT letter DOS01 0820 A277 ^6C DOS01 0808 A266 48 CAPS PHA DOS01 0820 A277 ^6C DOS01 0809 A267 29 5F ANDIM &5F DOS01 0820 A277 ^6C DOS01 0810 A269 C9 41 CMPIM "A" DOS01 0820 A277 ^6C DOS01 0811 A26B 90 04 BCC CAPS0 DOS01 0820 A277 ^6C DOS01 0812 A26D C9 5B CMPIM "Z" + &01 DOS01 0820 A277 ^6C DOS01 0813 A26F 90 01 BCC CAPS1 DOS01 0820 A277 ^6C DOS01 0814 A271 38 CAPS0 SEC DOS01 0820 A277 ^6C DOS01 0815 A272 68 CAPS1 PLA DOS01 0820 A277 ^6C DOS01 0816 A273 60 RTS DOS01 0820 A277 ^6C DOS01 0817 A274 DOS01 0820 A277 ^6C DOS01 0818 A274 ;Print info if MONFLG is set DOS01 0820 A277 ^6C DOS01 0819 A274 2C C6 10 INFORM BIT MONFLG DOS01 0820 A277 ^6C DOS01 0820 A277 30 EC BMI INFRTS -- DOS01 0821 A279 -- DOS01 0822 A279 ;Print catalog info about file -- DOS01 0823 A279 20 27 A3 PRTINF JSR SAVITA -- DOS01 0824 A27C 20 F4 A0 JSR PRTNAM ;Print name -- DOS01 0825 A27F 98 TYA -- DOS01 0826 A280 48 PHA -- DOS01 0827 A281 A9 60 LDAIM DOSRAM ;Set up tempory space -- DOS01 0828 A283 85 B0 STA TEMP -- DOS01 0829 A285 A9 10 LDAIM /(DOSRAM ) -- DOS01 0830 A287 85 B1 STA TEMP + &01 -- DOS01 0831 A289 20 C8 A2 JSR CHUKBK ;Read cat info -- DOS01 0832 A28C A0 02 LDYIM &02 -- DOS01 0833 A28E 20 A9 BF JSR PSPACE -- DOS01 0834 A291 20 B0 A2 JSR PRTIN0 ;Print start addr -- DOS01 0835 A294 20 B0 A2 JSR PRTIN0 ;Print exec addr -- DOS01 0836 A297 20 B0 A2 JSR PRTIN0 ;Print length -- DOS01 0837 A29A 68 PLA -- DOS01 0838 A29B A8 TAY -- DOS01 0839 A29C B9 0E 0F LDAAY CATHIG + &06 ;Print start sec -- DOS01 0840 A29F 29 03 ANDIM &03 -- DOS01 0841 A2A1 20 40 A0 JSR DIGOUT -- DOS01 0842 A2A4 B9 0F 0F LDAAY CATHIG + &07 -- DOS01 0843 A2A7 20 38 A0 JSR BYTOUT -- DOS01 0844 A2AA 20 B6 BC JSR PCRLF -- DOS01 0845 A2AD 4C 31 AB JMP DRVSEL ; In case the drive has stopped due to CTRL-N -- DOS01 0846 A2B0 ;*****************************HMT -- DOS01 0847 A2B0 -- DOS01 0848 A2B0 ;Prints 3 bytes from TMPCIN + Y -- DOS01 0849 A2B0 A2 03 PRTIN0 LDXIM &03 -- DOS01 0850 A2B2 B9 62 10 PRTIN1 LDAAY DOSRAM + &02 DOS01 DOS01 DOS01 DOS01 Acorn macro assembler Page 8 DOS01 - DOS01 - Useful Subroutines DOS01 DOS01 0854 A2BA ^76 DOS01 0851 A2B5 20 38 A0 JSR BYTOUT DOS01 0854 A2BA ^76 DOS01 0852 A2B8 88 DEY DOS01 0854 A2BA ^76 DOS01 0853 A2B9 CA DEX DOS01 0854 A2BA ^76 DOS01 0854 A2BA D0 F6 BNE PRTIN1 -- DOS01 0855 A2BC 20 7D A6 JSR STEP7 -- DOS01 0856 A2BF 4C A9 BF JMP PSPACE -- DOS01 0857 A2C2 -- DOS01 0858 A2C2 ;Get directory from disk -- DOS01 0859 A2C2 20 27 A3 GETDIR JSR SAVITA -- DOS01 0860 A2C5 4C 6B AA JMP DIRLDY -- DOS01 0861 A2C8 -- DOS01 0862 A2C8 ;Chucks directory info back into a FCB -- DOS01 0863 A2C8 ;whose address is in TEMP - and a pain -- DOS01 0864 A2C8 ;it is too. -- DOS01 0865 A2C8 20 27 A3 CHUKBK JSR SAVITA -- DOS01 0866 A2CB 98 TYA ;Move Y to X as I need -- DOS01 0867 A2CC 48 PHA ;Y for IYing -- DOS01 0868 A2CD AA TAX -- DOS01 0869 A2CE A0 12 LDYIM &12 ;Clear FCB to start with -- DOS01 0870 A2D0 A9 00 LDAIM &00 -- DOS01 0871 A2D2 88 CHUKB7 DEY DOS01 0874 A2D7 ^79 DOS01 0872 A2D3 91 B0 STAIY TEMP DOS01 0874 A2D7 ^79 DOS01 0873 A2D5 C0 02 CPYIM &02 DOS01 0874 A2D7 ^79 DOS01 0874 A2D7 D0 F9 BNE CHUKB7 -- DOS01 0875 A2D9 20 15 A3 CHUKB5 JSR CHUKB4 ;Move in obvious bits DOS01 0879 A2E0 ^77 DOS01 0876 A2DC C8 INY DOS01 0879 A2E0 ^77 DOS01 0877 A2DD C8 INY DOS01 0879 A2E0 ^77 DOS01 0878 A2DE C0 0E CPYIM &0E DOS01 0879 A2E0 ^77 DOS01 0879 A2E0 D0 F7 BNE CHUKB5 -- DOS01 0880 A2E2 68 PLA -- DOS01 0881 A2E3 AA TAX ;Move in attribute (L) -- DOS01 0882 A2E4 BD 0F 0E LDAAX CATLOW + &07 -- DOS01 0883 A2E7 10 04 BPL CHUKB3 DOS01 0883 A2E7 v7B DOS01 0884 A2E9 A9 08 LDAIM &08 ;Locked DOS01 0883 A2E7 v7B DOS01 0885 A2EB 91 B0 STAIY TEMP ;Y=$0E already DOS01 0883 A2E7 v7B DOS01 0886 A2ED BD 0E 0F CHUKB3 LDAAX CATHIG + &06 -- DOS01 0887 A2F0 A0 04 LDYIM &04 ;Move in high bytes -- DOS01 0888 A2F2 20 01 A3 JSR CHUKB1 ; Start addr -- DOS01 0889 A2F5 A0 0C LDYIM &0C -- DOS01 0890 A2F7 4A LSRA ;Length -- DOS01 0891 A2F8 4A LSRA -- DOS01 0892 A2F9 48 PHA -- DOS01 0893 A2FA 29 03 ANDIM &03 -- DOS01 0894 A2FC 91 B0 STAIY TEMP -- DOS01 0895 A2FE 68 PLA -- DOS01 0896 A2FF A0 08 LDYIM &08 ;Exec address -- DOS01 0897 A301 -- DOS01 0898 A301 ;Moves and fills in $FFs if required -- DOS01 0899 A301 4A CHUKB1 LSRA -- DOS01 0900 A302 4A LSRA -- DOS01 0901 A303 48 PHA -- DOS01 0902 A304 29 03 ANDIM &03 -- DOS01 0903 A306 91 B0 STAIY TEMP -- DOS01 0904 A308 C9 03 CMPIM &03 ;If 3 assume means $FFFF -- DOS01 0905 A30A D0 07 BNE CHUKB2 DOS01 0905 A30A v78 DOS01 0906 A30C A9 FF LDAIM &FF DOS01 0905 A30A v78 DOS01 0907 A30E 91 B0 STAIY TEMP DOS01 0905 A30A v78 DOS01 0908 A310 C8 INY DOS01 0905 A30A v78 DOS01 0909 A311 91 B0 STAIY TEMP DOS01 0905 A30A v78 DOS01 0910 A313 68 CHUKB2 PLA -- DOS01 0911 A314 60 RTS -- DOS01 0912 A315 -- DOS01 0913 A315 ;Moves 2 bytes from dir to FCB -- DOS01 0914 A315 20 18 A3 CHUKB4 JSR CHUKB6 -- DOS01 0915 A318 BD 08 0F CHUKB6 LDAAX CATHIG -- DOS01 0916 A31B 91 B0 STAIY TEMP -- DOS01 0917 A31D E8 INX -- DOS01 0918 A31E C8 INY -- DOS01 0919 A31F 60 RTS -- DOS01 0920 A320 -- DOS01 0921 A320 ;Increment TEMP -- DOS01 0922 A320 E6 AE TMPINC INC PTEMP -- DOS01 0923 A322 D0 02 BNE TMPIN0 DOS01 0923 A322 v7D DOS01 0924 A324 E6 AF INC PTEMP + &01 DOS01 0923 A322 v7D DOS01 0925 A326 60 TMPIN0 RTS -- DOS01 0926 A327 -- DOS01 0927 A327 ;Save A,X,Y so that on a RET they get -- DOS01 0928 A327 ; restored. -- DOS01 0929 A327 48 SAVITA PHA -- DOS01 0930 A328 8A TXA -- DOS01 0931 A329 48 PHA -- DOS01 0932 A32A 98 TYA -- DOS01 0933 A32B 48 PHA -- DOS01 0934 A32C A9 A3 LDAIM /(SAVRTA - &01 ) -- DOS01 0935 A32E 48 PHA -- DOS01 0936 A32F A9 49 LDAIM SAVRTA - &01 -- DOS01 0937 A331 48 PHA -- DOS01 0938 A332 A0 05 SAVIT0 LDYIM &05 ;Copy the RetAddr,A,X,Y block -- DOS01 0939 A334 BA SAVIT1 TSX DOS01 0943 A33A ^78 DOS01 0940 A335 BD 07 01 LDAAX &107 DOS01 0943 A33A ^78 DOS01 0941 A338 48 PHA DOS01 0943 A33A ^78 DOS01 0942 A339 88 DEY DOS01 0943 A33A ^78 DOS01 0943 A33A D0 F8 BNE SAVIT1 -- DOS01 0944 A33C A0 0A LDYIM &0A ;Shift all down two -- DOS01 0945 A33E BD 09 01 SAVIT2 LDAAX &109 DOS01 0949 A346 ^76 DOS01 0946 A341 9D 0B 01 STAAX &10B DOS01 0949 A346 ^76 DOS01 0947 A344 CA DEX DOS01 0949 A346 ^76 DOS01 0948 A345 88 DEY DOS01 0949 A346 ^76 DOS01 0949 A346 D0 F6 BNE SAVIT2 -- DOS01 0950 A348 68 PLA ;Knock off two excess layers -- DOS01 0951 A349 68 PLA ;And drop thro' -- DOS01 0952 A34A -- DOS01 0953 A34A ;Return which restores A -- DOS01 0954 A34A 68 SAVRTA PLA -- DOS01 0955 A34B A8 TAY -- DOS01 0956 A34C 68 PLA -- DOS01 0957 A34D AA TAX -- DOS01 0958 A34E 68 PLA -- DOS01 0959 A34F 60 RTS -- DOS01 0960 A350 -- DOS01 0961 A350 ;Saves X and Y only -- DOS01 0962 A350 48 SAVIT PHA -- DOS01 0963 A351 8A TXA -- DOS01 0964 A352 48 PHA -- DOS01 0965 A353 98 TYA -- DOS01 0966 A354 48 PHA -- DOS01 0967 A355 20 32 A3 JSR SAVIT0 -- DOS01 0968 A358 -- DOS01 0969 A358 ;Keep A -- DOS01 0970 A358 BA TSX -- DOS01 0971 A359 9D 03 01 STAAX &103 DOS01 DOS01 DOS01 DOS01 Acorn macro assembler Page 9 DOS01 - DOS01 - Useful Subroutines DOS01 -- DOS01 0972 A35C 4C 4A A3 JMP SAVRTA -- DOS01 0973 A35F -- DOS01 0974 A35F -- DOS01 0975 A35F -- DOS01 0976 A35F LNK DOS02 -- DOS02 0001 A35F ;*** File Two *** > DOS02 -- DOS02 0002 A35F TTL - DOS02 - Command Line Interpreter -- DOS02 0003 A35F OPT &01 -- DOS02 0004 A35F ;* CLI * -- DOS02 0005 A35F -- DOS02 0006 A35F 20 EA A5 WDCAT JSR STXYLP -- DOS02 0007 A362 20 5C AA JSR DIR -- DOS02 0008 A365 A0 FF LDYIM &FF -- DOS02 0009 A367 84 A8 STY LINNO -- DOS02 0010 A369 C8 INY -- DOS02 0011 A36A 84 AA STY UTEMP ;Qualifier -- DOS02 0012 A36C -- DOS02 0013 A36C ;Print title -- DOS02 0014 A36C B9 00 0E CAT8 LDAAY DIRLOW DOS02 0021 A37C ^6E DOS02 0015 A36F C0 08 CPYIM &08 DOS02 0021 A37C ^6E DOS02 0016 A371 90 03 BCC CAT9 DOS02 0021 A37C ^6E DOS02 0017 A373 B9 F8 0E LDAAY DIRHIG - &08 DOS02 0021 A37C ^6E DOS02 0018 A376 20 1F A0 CAT9 JSR PCHR DOS02 0021 A37C ^6E DOS02 0019 A379 C8 INY DOS02 0021 A37C ^6E DOS02 0020 A37A C0 0C CPYIM &0C DOS02 0021 A37C ^6E DOS02 0021 A37C D0 EE BNE CAT8 -- DOS02 0022 A37E -- DOS02 0023 A37E ;Print cycle number -- DOS02 0024 A37E 20 F7 9F JSR VSTRNG -- DOS02 0025 A381 20 28 = " (" -- DOS02 0026 A383 AD 04 0F LDA CYCNO -- DOS02 0027 A386 20 38 A0 JSR BYTOUT -- DOS02 0028 A389 -- DOS02 0029 A389 ;Print drive number -- DOS02 0030 A389 20 F7 9F JSR VSTRNG -- DOS02 0031 A38C 29 0D = ")",CR -- DOS02 0032 A38E 44 72 69 = "Drive " -- DOS02 0033 A394 A5 CD LDA FDRIVE -- DOS02 0034 A396 20 40 A0 JSR DIGOUT -- DOS02 0035 A399 -- DOS02 0036 A399 ;Print option -- DOS02 0037 A399 A0 0D LDYIM &0D -- DOS02 0038 A39B 20 27 A1 JSR YSPACE -- DOS02 0039 A39E 20 F7 9F JSR VSTRNG -- DOS02 0040 A3A1 4F 70 74 = "Option " -- DOS02 0041 A3A8 AD 06 0F LDA OPTION -- DOS02 0042 A3AB 20 38 A1 JSR SFOUR -- DOS02 0043 A3AE 48 PHA ;**************** HMT -- DOS02 0044 A3AF 20 40 A0 JSR DIGOUT ;Print number -- DOS02 0045 A3B2 20 F7 9F JSR VSTRNG -- DOS02 0046 A3B5 20 28 = " (" -- DOS02 0047 A3B7 A0 03 LDYIM &03 -- DOS02 0048 A3B9 68 PLA ;**************** HMT -- DOS02 0049 A3BA 0A ASLA ;Get offset in text -- DOS02 0050 A3BB 0A ASLA -- DOS02 0051 A3BC AA TAX -- DOS02 0052 A3BD BD A9 A4 CAT5 LDAAX OPTTBL DOS02 0056 A3C5 ^76 DOS02 0053 A3C0 20 1F A0 JSR PCHR ;Print text DOS02 0056 A3C5 ^76 DOS02 0054 A3C3 E8 INX DOS02 0056 A3C5 ^76 DOS02 0055 A3C4 88 DEY DOS02 0056 A3C5 ^76 DOS02 0056 A3C5 10 F6 BPL CAT5 -- DOS02 0057 A3C7 -- DOS02 0058 A3C7 ;Print directory -- DOS02 0059 A3C7 20 F7 9F JSR VSTRNG -- DOS02 0060 A3CA 29 0D 44 = ")",CR,"Dir. :" -- DOS02 0061 A3D2 AD CA 10 LDA DEFDSK -- DOS02 0062 A3D5 20 1A A0 JSR DPDOT -- DOS02 0063 A3D8 AD C9 10 LDA DEFQUA -- DOS02 0064 A3DB 20 1F A0 JSR PCHR -- DOS02 0065 A3DE -- DOS02 0066 A3DE ;Print library -- DOS02 0067 A3DE A0 0B LDYIM &06+&05 -- DOS02 0068 A3E0 20 27 A1 JSR YSPACE -- DOS02 0069 A3E3 20 F7 9F JSR VSTRNG -- DOS02 0070 A3E6 4C 69 62 = "Lib. :" -- DOS02 0071 A3EC AD CC 10 LDA LIBDSK -- DOS02 0072 A3EF 20 1A A0 JSR DPDOT -- DOS02 0073 A3F2 AD CB 10 LDA LIBQUA -- DOS02 0074 A3F5 20 1F A0 JSR PCHR -- DOS02 0075 A3F8 20 B6 BC JSR PCRLF -- DOS02 0076 A3FB -- DOS02 0077 A3FB A0 00 LDYIM &00 -- DOS02 0078 A3FD CC 05 0F CAT0 CPY DIRLEN DOS02 0092 A417 ^64 DOS02 0079 A400 B0 17 BCS CATSCN DOS02 0092 A417 ^64 DOS02 0080 A402 B9 0F 0E LDAAY MODIFY DOS02 0092 A417 ^64 DOS02 0081 A405 4D C9 10 EOR DEFQUA DOS02 0092 A417 ^64 DOS02 0082 A408 ;************************************** DOS02 0092 A417 ^64 DOS02 0083 A408 ; Is this the fix for LC quals? HMT DOS02 0092 A417 ^64 DOS02 0084 A408 29 5F ANDIM &5F DOS02 0092 A417 ^64 DOS02 0085 A40A ; However it must still be ANDIM $7F (?) so no saving DOS02 0092 A417 ^64 DOS02 0086 A40A ;************************************** DOS02 0092 A417 ^64 DOS02 0087 A40A D0 08 BNE CAT1 DOS02 0092 A417 ^64 DOS02 0088 A40C B9 0F 0E LDAAY MODIFY DOS02 0092 A417 ^64 DOS02 0089 A40F 29 80 ANDIM &80 DOS02 0092 A417 ^64 DOS02 0090 A411 99 0F 0E STAAY MODIFY DOS02 0092 A417 ^64 DOS02 0091 A414 20 7C A6 CAT1 JSR STEP DOS02 0092 A417 ^64 DOS02 0092 A417 90 E4 BCC CAT0 ;Carry IS clear !! DOS02 0079 A400 v68 DOS02 0093 A419 A0 00 CATSCN LDYIM &00 -- DOS02 0094 A41B 20 2B A4 JSR FINDIR ; FIND DIR ENTRY THAT -- DOS02 0095 A41E ; HAS NOT BEEN MARKED -- DOS02 0096 A41E 90 16 BCC NEWBST ; NEW BEST ENTRY DOS02 0096 A41E v69 DOS02 0097 A420 A9 FF LDAIM &FF ;Force catalogue read next DOS02 0096 A41E v69 DOS02 0098 A422 8D 82 10 STA CATDRV DOS02 0096 A41E v69 DOS02 0099 A425 4C B6 BC JMP PCRLF DOS02 0096 A41E v69 DOS02 0100 A428 DOS02 0096 A41E v69 DOS02 0101 A428 ;FINDIR FINDS AN ENTRY IN THE DOS02 0096 A41E v69 DOS02 0102 A428 ;CATALOG THAT HAS NOT BEEN DOS02 0096 A41E v69 DOS02 0103 A428 ;MARKED NEGATIVE IN ITS 1ST DOS02 0096 A41E v69 DOS02 0104 A428 ;BYTE DOS02 0096 A41E v69 DOS02 0105 A428 20 7C A6 NXTCAT JSR STEP DOS02 0096 A41E v69 DOS02 0106 A42B CC 05 0F FINDIR CPY DIRLEN DOS02 0096 A41E v69 DOS02 0107 A42E B0 05 BCS FINDX DOS02 0096 A41E v69 DOS02 0108 A430 B9 08 0E LDAAY CATLOW DOS02 0096 A41E v69 DOS02 0109 A433 30 F3 BMI NXTCAT DOS02 0096 A41E v69 DOS02 0110 A435 60 FINDX RTS ; C=0 IF OK DOS02 0096 A41E v69 DOS02 0111 A436 DOS02 0096 A41E v69 DOS02 0112 A436 84 AB NEWBST STY LTEMP DOS02 0136 A46A ^4A DOS02 0113 A438 A2 00 LDXIM &00 DOS02 0136 A46A ^4A DOS02 0114 A43A B9 08 0E CATLOP LDAAY CATLOW DOS02 0136 A46A ^4A DOS02 0115 A43D 20 3D A2 JSR SETCAP DOS02 0136 A46A ^4A DOS02 0116 A440 9D 60 10 STAAX DOSRAM DOS02 DOS02 DOS02 DOS02 Acorn macro assembler Page 10 DOS02 - DOS02 - Command Line Interpreter DOS02 DOS02 0136 A46A ^4A DOS02 0117 A443 C8 INY DOS02 0136 A46A ^4A DOS02 0118 A444 E8 INX DOS02 0136 A46A ^4A DOS02 0119 A445 E0 08 CPXIM &08 DOS02 0136 A46A ^4A DOS02 0120 A447 D0 F1 BNE CATLOP DOS02 0136 A46A ^4A DOS02 0121 A449 20 2B A4 CATTRY JSR FINDIR DOS02 0136 A46A ^4A DOS02 0122 A44C B0 23 BCS SCAND ; ONE SCAN COMPLETE DOS02 0136 A46A ^4A DOS02 0123 A44E 38 SEC DOS02 0136 A46A ^4A DOS02 0124 A44F A2 06 LDXIM &06 DOS02 0136 A46A ^4A DOS02 0125 A451 B9 0E 0E CATSBC LDAAY CATLOW + &06 DOS02 0136 A46A ^4A DOS02 0126 A454 20 3D A2 JSR SETCAP DOS02 0136 A46A ^4A DOS02 0127 A457 FD 60 10 SBCAX DOSRAM DOS02 0136 A46A ^4A DOS02 0128 A45A 88 DEY DOS02 0136 A46A ^4A DOS02 0129 A45B CA DEX DOS02 0136 A46A ^4A DOS02 0130 A45C 10 F3 BPL CATSBC DOS02 0136 A46A ^4A DOS02 0131 A45E 20 7D A6 JSR STEP7 ;Restore Y DOS02 0136 A46A ^4A DOS02 0132 A461 B9 0F 0E LDAAY MODIFY ;Get qualifier DOS02 0136 A46A ^4A DOS02 0133 A464 20 3D A2 JSR SETCAP DOS02 0136 A46A ^4A DOS02 0134 A467 ED 67 10 SBC DOSRAM + &07 DOS02 0136 A46A ^4A DOS02 0135 A46A ;NOW C=1 IF NEW ENTRY >= OLD DOS02 0136 A46A ^4A DOS02 0136 A46A 90 CA BCC NEWBST DOS02 0138 A46F ^58 DOS02 0137 A46C 20 7C A6 JSR STEP DOS02 0138 A46F ^58 DOS02 0138 A46F B0 D8 BCS CATTRY DOS02 0122 A44C v5C DOS02 0139 A471 DOS02 0122 A44C v5C DOS02 0140 A471 A4 AB SCAND LDY LTEMP -- DOS02 0141 A473 B9 08 0E LDAAY CATLOW -- DOS02 0142 A476 09 80 ORAIM &80 -- DOS02 0143 A478 99 08 0E STAAY CATLOW ;Mark it as used -- DOS02 0144 A47B AD 67 10 LDA DOSRAM + &07 ;Qualifier -- DOS02 0145 A47E C5 AA CMP UTEMP -- DOS02 0146 A480 F0 10 BEQ SAMEQ DOS02 0146 A480 v6F DOS02 0147 A482 A6 AA LDX UTEMP DOS02 0146 A480 v6F DOS02 0148 A484 85 AA STA UTEMP DOS02 0146 A480 v6F DOS02 0149 A486 D0 0A BNE SAMEQ DOS02 0146 A480 v6F DOS02 0150 A488 20 B6 BC JSR PCRLF DOS02 0146 A480 v6F DOS02 0151 A48B 20 B6 BC CAT3 JSR PCRLF DOS02 0146 A480 v6F DOS02 0152 A48E A0 FF LDYIM &FF DOS02 0146 A480 v6F DOS02 0153 A490 D0 09 BNE FIRSTC DOS02 0146 A480 v6F DOS02 0154 A492 A4 A8 SAMEQ LDY LINNO ;Line used once flag DOS02 0155 A494 ^75 DOS02 0155 A494 D0 F5 BNE CAT3 ;Line empty so far DOS02 0153 A490 v76 DOS02 0156 A496 A0 05 LDYIM &05 DOS02 0153 A490 v76 DOS02 0157 A498 20 27 A1 JSR YSPACE ;Leaves Y=0 DOS02 0153 A490 v76 DOS02 0158 A49B C8 FIRSTC INY -- DOS02 0159 A49C 84 A8 STY LINNO -- DOS02 0160 A49E A4 AB LDY LTEMP -- DOS02 0161 A4A0 20 A6 BF JSR PDSPC -- DOS02 0162 A4A3 20 F4 A0 JSR PRTNAM -- DOS02 0163 A4A6 4C 19 A4 JMP CATSCN -- DOS02 0164 A4A9 -- DOS02 0165 A4A9 ;Table of boot options -- DOS02 0166 A4A9 6F 66 66 OPTTBL = "off",&00,"LOADRUN",&00,"EXEC" -- DOS02 0167 A4B9 -- DOS02 0168 A4B9 B9 0E 0F DSKADR LDAAY CATHIG + &06 -- DOS02 0169 A4BC 20 30 A1 JSR ISOLEN -- DOS02 0170 A4BF 85 C2 STA WORK + &08 -- DOS02 0171 A4C1 18 CLC -- DOS02 0172 A4C2 A9 FF LDAIM &FF -- DOS02 0173 A4C4 79 0C 0F ADCAY CATHIG + &04 -- DOS02 0174 A4C7 B9 0F 0F LDAAY CATHIG + &07 -- DOS02 0175 A4CA 79 0D 0F ADCAY CATHIG + &05 -- DOS02 0176 A4CD 85 C3 STA WORK + &09 -- DOS02 0177 A4CF B9 0E 0F LDAAY CATHIG + &06 -- DOS02 0178 A4D2 29 03 ANDIM &03 -- DOS02 0179 A4D4 65 C2 ADC WORK + &08 -- DOS02 0180 A4D6 85 C2 STA WORK + &08 -- DOS02 0181 A4D8 38 DSKSPC SEC -- DOS02 0182 A4D9 B9 07 0F LDAAY DIRHIG + &07 -- DOS02 0183 A4DC E5 C3 SBC WORK + &09 -- DOS02 0184 A4DE 48 PHA -- DOS02 0185 A4DF B9 06 0F LDAAY DIRHIG + &06 -- DOS02 0186 A4E2 29 03 ANDIM &03 -- DOS02 0187 A4E4 E5 C2 SBC WORK + &08 -- DOS02 0188 A4E6 AA TAX -- DOS02 0189 A4E7 A9 00 LDAIM &00 -- DOS02 0190 A4E9 C5 C0 CMP WORK + &06 -- DOS02 0191 A4EB 68 PLA -- DOS02 0192 A4EC E5 C1 SBC WORK + &07 -- DOS02 0193 A4EE 8A TXA -- DOS02 0194 A4EF E5 C4 SBC WORK + &0A -- DOS02 0195 A4F1 60 RETURN RTS -- DOS02 0196 A4F2 -- DOS02 0197 A4F2 ;Command table - at FS stage -- DOS02 0198 A4F2 41 43 43 COMTAB = "ACCESS" -- DOS02 0199 A4F8 A8 = !(/(ACCESS - &01 )) -- DOS02 0200 A4F9 2D = ACCESS - &01 -- DOS02 0201 A4FA 32 = &32 -- DOS02 0202 A4FB 42 41 43 = "BACKUP" -- DOS02 0203 A501 BC = !(/(CPYDSK - &01 )) -- DOS02 0204 A502 E8 = CPYDSK - &01 -- DOS02 0205 A503 04 = &04 -- DOS02 0206 A504 43 4F 4D = "COMPACT" -- DOS02 0207 A50B BB = !(/(COMPCT - &01 )) -- DOS02 0208 A50C 1D = COMPCT - &01 -- DOS02 0209 A50D 07 = &07 -- DOS02 0210 A50E 43 4F 50 = "COPY" -- DOS02 0211 A512 BD = !(/(CPYFIL - &01 )) -- DOS02 0212 A513 34 = CPYFIL - &01 -- DOS02 0213 A514 24 = &24 -- DOS02 0214 A515 44 45 4C = "DELETE" -- DOS02 0215 A51B A6 = !(/(DELETE - &01 )) -- DOS02 0216 A51C 23 = DELETE - &01 -- DOS02 0217 A51D 01 = &01 -- DOS02 0218 A51E 44 45 53 = "DESTROY" -- DOS02 0219 A525 A6 = !(/(DESTRY - &01 )) -- DOS02 0220 A526 35 = DESTRY - &01 -- DOS02 0221 A527 02 = &02 -- DOS02 0222 A528 44 49 52 = "DIR" -- DOS02 0223 A52B A7 = !(/(SET - &01 )) -- DOS02 0224 A52C 88 = SET - &01 -- DOS02 0225 A52D 06 = &06 -- DOS02 0226 A52E -- DOS02 0227 A52E [ DRIVEC=0 -- DOS02 0228 A52E 44 52 49 = "DRIVE" -- DOS02 0229 A533 A6 = !(/(DRIVE - &01 )) -- DOS02 0230 A534 8F = DRIVE - &01 -- DOS02 0231 A535 09 = &09 -- DOS02 0232 A536 | -- DOS02 0233 A536 ] -- DOS02 0234 A536 -- DOS02 0235 A536 45 4E 41 = "ENABLE" -- DOS02 0236 A53C A9 = !(/(ENABLE - &01 )) -- DOS02 0237 A53D 8E = ENABLE - &01 DOS02 DOS02 DOS02 DOS02 Acorn macro assembler Page 11 DOS02 - DOS02 - Command Line Interpreter DOS02 -- DOS02 0238 A53E 00 = &00 -- DOS02 0239 A53F 49 4E 46 = "INFO" -- DOS02 0240 A543 A1 = !(/(INFO - &01 )) -- DOS02 0241 A544 99 = INFO - &01 -- DOS02 0242 A545 02 = &02 -- DOS02 0243 A546 4C 49 42 = "LIB" -- DOS02 0244 A549 A7 = !(/(SLIB - &01 )) -- DOS02 0245 A54A 8C = SLIB - &01 -- DOS02 0246 A54B 06 = &06 -- DOS02 0247 A54C 52 45 4E = "RENAME" -- DOS02 0248 A552 A9 = !(/(RENAME - &01 )) -- DOS02 0249 A553 F3 = RENAME - &01 -- DOS02 0250 A554 05 = &05 -- DOS02 0251 A555 54 49 54 = "TITLE" -- DOS02 0252 A55A A7 = !(/(TITLE - &01 )) -- DOS02 0253 A55B FE = TITLE - &01 -- DOS02 0254 A55C 08 = &08 -- DOS02 0255 A55D 57 49 50 = "WIPE" -- DOS02 0256 A561 A5 = !(/(QDEL - &01 )) -- DOS02 0257 A562 F4 = QDEL - &01 -- DOS02 0258 A563 02 = &02 -- DOS02 0259 A564 A7 = !(/(DEFCOM - &01 )) -- DOS02 0260 A565 0C = DEFCOM - &01 -- DOS02 0261 A566 -- DOS02 0262 A566 ;1st pass table - i.e. on a SWC -- DOS02 0263 A566 42 55 49 INITBL = "BUILD" -- DOS02 0264 A56B BF = !(/(BUILD - &01 )) -- DOS02 0265 A56C 5E = BUILD - &01 -- DOS02 0266 A56D 01 = &01 -- DOS02 0267 A56E 44 49 53 = "DISC" -- DOS02 0268 A572 B3 = !(/(INIT - &01 )) -- DOS02 0269 A573 C0 = INIT - &01 -- DOS02 0270 A574 00 = &00 -- DOS02 0271 A575 44 55 4D = "DUMP" -- DOS02 0272 A579 BE = !(/(DUMP - &01 )) -- DOS02 0273 A57A DE = DUMP - &01 -- DOS02 0274 A57B 01 = &01 -- DOS02 0275 A57C 4C 49 53 = "LIST" -- DOS02 0276 A580 BE = !(/(LIST - &01 )) -- DOS02 0277 A581 9C = LIST - &01 -- DOS02 0278 A582 01 = &01 -- DOS02 0279 A583 54 59 50 = "TYPE" -- DOS02 0280 A587 BE = !(/(TYPE - &01 )) -- DOS02 0281 A588 95 = TYPE - &01 -- DOS02 0282 A589 01 = &01 -- DOS02 0283 A58A 44 49 53 = "DISK" -- DOS02 0284 A58E B3 = !(/(INIT - &01 )) -- DOS02 0285 A58F C0 = INIT - &01 -- DOS02 0286 A590 00 = &00 -- DOS02 0287 A591 A4 = !(/(RETURN - &01 )) -- DOS02 0288 A592 F0 = RETURN - &01 -- DOS02 0289 A593 -- DOS02 0290 A593 ;Help lookup table -- DOS02 0291 A593 44 46 53 HLPTAB = "DFS" -- DOS02 0292 A596 BA = !(/(HELP - &01 )) -- DOS02 0293 A597 21 = HELP - &01 -- DOS02 0294 A598 00 = &00 -- DOS02 0295 A599 55 54 49 = "UTILS" -- DOS02 0296 A59E BA = !(/(PMHELP - &01 )) -- DOS02 0297 A59F 4D = PMHELP - &01 -- DOS02 0298 A5A0 00 = &00 -- DOS02 0299 A5A1 BA = !(/(NOHELP - &01 )) -- DOS02 0300 A5A2 54 = NOHELP - &01 -- DOS02 0301 A5A3 -- DOS02 0302 A5A3 20 EA A5 WNAME JSR STXYLP -- DOS02 0303 A5A6 A2 FD LDXIM &FD -- DOS02 0304 A5A8 98 WNAME0 TYA -- DOS02 0305 A5A9 48 PHA -- DOS02 0306 A5AA E8 THUNK INX DOS02 0336 A5DE ^4A DOS02 0307 A5AB E8 INX DOS02 0336 A5DE ^4A DOS02 0308 A5AC 68 PLA DOS02 0336 A5DE ^4A DOS02 0309 A5AD 48 PHA DOS02 0336 A5DE ^4A DOS02 0310 A5AE A8 TAY DOS02 0336 A5DE ^4A DOS02 0311 A5AF 20 F1 A5 JSR SETUPR DOS02 0336 A5DE ^4A DOS02 0312 A5B2 E8 INX DOS02 0336 A5DE ^4A DOS02 0313 A5B3 BD F2 A4 LDAAX COMTAB ;Check for EOT DOS02 0336 A5DE ^4A DOS02 0314 A5B6 30 28 BMI FINISH DOS02 0336 A5DE ^4A DOS02 0315 A5B8 CA DEX DOS02 0336 A5DE ^4A DOS02 0316 A5B9 88 DEY DOS02 0336 A5DE ^4A DOS02 0317 A5BA 86 BC STX COMTXT DOS02 0336 A5DE ^4A DOS02 0318 A5BC E8 FIRCH INX DOS02 0336 A5DE ^4A DOS02 0319 A5BD C8 INY DOS02 0336 A5DE ^4A DOS02 0320 A5BE BD F2 A4 COMMMM LDAAX COMTAB ;Compare loop DOS02 0336 A5DE ^4A DOS02 0321 A5C1 30 16 BMI CHKLST DOS02 0336 A5DE ^4A DOS02 0322 A5C3 51 F2 EORIY LINPTR DOS02 0336 A5DE ^4A DOS02 0323 A5C5 29 5F ANDIM &5F ;Zap lower case DOS02 0336 A5DE ^4A DOS02 0324 A5C7 F0 F3 BEQ FIRCH DOS02 0336 A5DE ^4A DOS02 0325 A5C9 CA DEX DOS02 0336 A5DE ^4A DOS02 0326 A5CA E8 MINUS INX DOS02 0336 A5DE ^4A DOS02 0327 A5CB BD F2 A4 LDAAX COMTAB DOS02 0336 A5DE ^4A DOS02 0328 A5CE 10 FA BPL MINUS DOS02 0336 A5DE ^4A DOS02 0329 A5D0 B1 F2 LDAIY LINPTR DOS02 0336 A5DE ^4A DOS02 0330 A5D2 C9 2E CMPIM "." ;'.'s finish off commands DOS02 0336 A5DE ^4A DOS02 0331 A5D4 D0 D4 BNE THUNK DOS02 0336 A5DE ^4A DOS02 0332 A5D6 C8 INY ;Point to next char DOS02 0336 A5DE ^4A DOS02 0333 A5D7 B0 07 BCS FINISH ;Always DOS02 0336 A5DE ^4A DOS02 0334 A5D9 B1 F2 CHKLST LDAIY LINPTR ;Check last char non alpha DOS02 0336 A5DE ^4A DOS02 0335 A5DB 20 66 A2 JSR CAPS DOS02 0336 A5DE ^4A DOS02 0336 A5DE 90 CA BCC THUNK DOS02 0314 A5B6 v57 DOS02 0337 A5E0 68 FINISH PLA ;Get rid of stack -- DOS02 0338 A5E1 BD F2 A4 LDAAX COMTAB -- DOS02 0339 A5E4 48 PHA -- DOS02 0340 A5E5 BD F3 A4 LDAAX COMTAB + &01 -- DOS02 0341 A5E8 48 PHA -- DOS02 0342 A5E9 60 RTS -- DOS02 0343 A5EA -- DOS02 0344 A5EA 86 F2 STXYLP STX LINPTR -- DOS02 0345 A5EC 84 F3 STY LINPTR + &01 -- DOS02 0346 A5EE A0 00 LDYIM &00 -- DOS02 0347 A5F0 60 RTS -- DOS02 0348 A5F1 -- DOS02 0349 A5F1 18 SETUPR CLC -- DOS02 0350 A5F2 4C C2 FF JMP RDINIT -- DOS02 0351 A5F5 -- DOS02 0352 A5F5 20 04 B8 QDEL JSR SETWLD -- DOS02 0353 A5F8 20 61 BA JSR CHKSYN -- DOS02 0354 A5FB 20 7F A1 JSR GETLOK -- DOS02 0355 A5FE B9 0F 0E QDEL0 LDAAY MODIFY DOS02 0367 A621 ^5B DOS02 0356 A601 30 1B BMI QDEL4 DOS02 0367 A621 ^5B DOS02 0357 A603 20 F4 A0 JSR PRTNAM DOS02 0367 A621 ^5B DOS02 0358 A606 20 F7 9F JSR VSTRNG DOS02 DOS02 DOS02 DOS02 Acorn macro assembler Page 12 DOS02 - DOS02 - Command Line Interpreter DOS02 DOS02 0367 A621 ^5B DOS02 0359 A609 20 3A 20 = " : ",&EA DOS02 0367 A621 ^5B DOS02 0360 A60D 20 CD BC JSR GETYN DOS02 0367 A621 ^5B DOS02 0361 A610 D0 09 BNE QDEL2 DOS02 0367 A621 ^5B DOS02 0362 A612 20 94 AE JSR CHKSAM DOS02 0367 A621 ^5B DOS02 0363 A615 20 85 A6 JSR DELDEC DOS02 0367 A621 ^5B DOS02 0364 A618 20 3B AA JSR DIROUT DOS02 0367 A621 ^5B DOS02 0365 A61B 20 B6 BC QDEL2 JSR PCRLF DOS02 0367 A621 ^5B DOS02 0366 A61E 20 BF A1 QDEL4 JSR NEXT DOS02 0367 A621 ^5B DOS02 0367 A621 B0 DB BCS QDEL0 -- DOS02 0368 A623 60 RTS -- DOS02 0369 A624 -- DOS02 0370 A624 20 FB B7 DELETE JSR CLRWLD -- DOS02 0371 A627 20 61 BA JSR CHKSYN -- DOS02 0372 A62A 20 7F A1 JSR GETLOK -- DOS02 0373 A62D 20 74 A2 JSR INFORM -- DOS02 0374 A630 20 49 A2 JSR DELFIL -- DOS02 0375 A633 4C 3B AA JMP DIROUT -- DOS02 0376 A636 -- DOS02 0377 A636 [ NOENAB=0 -- DOS02 0379 A636 | -- DOS02 0380 A636 20 EF BB DESTRY JSR CHKENA -- DOS02 0381 A639 ] -- DOS02 0382 A639 20 04 B8 JSR SETWLD -- DOS02 0383 A63C 20 61 BA JSR CHKSYN -- DOS02 0384 A63F 20 7F A1 JSR GETLOK -- DOS02 0385 A642 B9 0F 0E DESTR1 LDAAY MODIFY DOS02 0390 A650 ^70 DOS02 0386 A645 30 06 BMI DESTR5 DOS02 0390 A650 ^70 DOS02 0387 A647 20 F4 A0 JSR PRTNAM DOS02 0390 A650 ^70 DOS02 0388 A64A 20 B6 BC JSR PCRLF DOS02 0390 A650 ^70 DOS02 0389 A64D 20 BF A1 DESTR5 JSR NEXT DOS02 0390 A650 ^70 DOS02 0390 A650 B0 F0 BCS DESTR1 -- DOS02 0391 A652 ; JSR VSTRNG -- DOS02 0392 A652 ; = CR,"Delete (Y/N) ? ",$EA -- DOS02 0393 A652 ; JSR GETYN -- DOS02 0394 A652 20 BE BC JSR SURE -- DOS02 0395 A655 -- DOS02 0396 A655 F0 03 BEQ DESTR2 DOS02 0396 A655 v7C DOS02 0397 A657 4C B6 BC JMP PCRLF DOS02 0396 A655 v7C DOS02 0398 A65A 20 94 AE DESTR2 JSR CHKSAM -- DOS02 0399 A65D 20 C3 A1 JSR LOOKUP -- DOS02 0400 A660 B9 0F 0E DESTR3 LDAAY MODIFY DOS02 0404 A66B ^73 DOS02 0401 A663 30 03 BMI DESTR4 DOS02 0404 A66B ^73 DOS02 0402 A665 20 85 A6 JSR DELDEC DOS02 0404 A66B ^73 DOS02 0403 A668 20 BF A1 DESTR4 JSR NEXT DOS02 0404 A66B ^73 DOS02 0404 A66B B0 F3 BCS DESTR3 -- DOS02 0405 A66D 20 3B AA JSR DIROUT -- DOS02 0406 A670 20 F7 9F JSR VSTRNG -- DOS02 0407 A673 0D 44 65 = CR,"Deleted",CR -- DOS02 0408 A67C -- DOS02 0409 A67C ;Increment Y by 8 -- DOS02 0410 A67C C8 STEP INY -- DOS02 0411 A67D C8 STEP7 INY -- DOS02 0412 A67E C8 INY -- DOS02 0413 A67F C8 INY -- DOS02 0414 A680 C8 INY -- DOS02 0415 A681 C8 INY -- DOS02 0416 A682 C8 INY -- DOS02 0417 A683 C8 INY -- DOS02 0418 A684 60 RTS -- DOS02 0419 A685 -- DOS02 0420 A685 -- DOS02 0421 A685 20 49 A2 DELDEC JSR DELFIL -- DOS02 0422 A688 A4 B6 LDY VTEMP -- DOS02 0423 A68A 20 F1 A1 JSR UNSTEP -- DOS02 0424 A68D 84 B6 STY VTEMP -- DOS02 0425 A68F 60 RTS -- DOS02 0426 A690 -- DOS02 0427 A690 [ DRIVEC=0 -- DOS02 0428 A690 20 61 BA DRIVE JSR CHKSYN -- DOS02 0429 A693 20 D3 A9 JSR GETDRV -- DOS02 0430 A696 8D CA 10 STA DEFDSK -- DOS02 0431 A699 | -- DOS02 0432 A699 ] -- DOS02 0433 A699 -- DOS02 0434 A699 20 AE AC DODRIV JSR DSKWAI -- DOS02 0435 A69C 29 03 ANDIM &03 -- DOS02 0436 A69E 85 CD STA FDRIVE -- DOS02 0437 A6A0 60 RTS -- DOS02 0438 A6A1 -- DOS02 0439 A6A1 ;Load file with block at X and wait -- DOS02 0440 A6A1 20 84 A1 LOADER JSR FRMLOK -- DOS02 0441 A6A4 20 DA B8 JSR TRYFL0 -- DOS02 0442 A6A7 20 C8 A2 JSR CHUKBK -- DOS02 0443 A6AA -- DOS02 0444 A6AA ;Load file set up in WORK -- DOS02 0445 A6AA 84 BA LOADT STY WORK -- DOS02 0446 A6AC A2 00 LDXIM &00 -- DOS02 0447 A6AE A5 BE LDA WORK + &04 -- DOS02 0448 A6B0 D0 06 BNE RELOC DOS02 0448 A6B0 v79 DOS02 0449 A6B2 C8 INY DOS02 0448 A6B0 v79 DOS02 0450 A6B3 C8 INY DOS02 0448 A6B0 v79 DOS02 0451 A6B4 A2 02 LDXIM &02 DOS02 0448 A6B0 v79 DOS02 0452 A6B6 D0 08 BNE LOADT0 DOS02 0452 A6B6 v77 DOS02 0453 A6B8 B9 0E 0F RELOC LDAAY CATHIG + &06 DOS02 0452 A6B6 v77 DOS02 0454 A6BB 85 C2 STA WORK + &08 DOS02 0452 A6B6 v77 DOS02 0455 A6BD 20 95 A9 JSR DECODL DOS02 0452 A6B6 v77 DOS02 0456 A6C0 B9 08 0F LOADT0 LDAAY CATHIG DOS02 0461 A6C9 ^75 DOS02 0457 A6C3 95 BC STAZX WORK + &02 DOS02 0461 A6C9 ^75 DOS02 0458 A6C5 C8 INY DOS02 0461 A6C9 ^75 DOS02 0459 A6C6 E8 INX DOS02 0461 A6C9 ^75 DOS02 0460 A6C7 E0 08 CPXIM &08 DOS02 0461 A6C9 ^75 DOS02 0461 A6C9 D0 F5 BNE LOADT0 -- DOS02 0462 A6CB 20 AC A9 JSR DECODE -- DOS02 0463 A6CE A4 BA LDY WORK -- DOS02 0464 A6D0 20 74 A2 JSR INFORM -- DOS02 0465 A6D3 -- DOS02 0466 A6D3 ;Read block -- DOS02 0467 A6D3 20 A3 AB BLKRD JSR RDINT -- DOS02 0468 A6D6 D0 0C BNE BLKXX DOS02 0468 A6D6 v73 DOS02 0469 A6D8 DOS02 0468 A6D6 v73 DOS02 0470 A6D8 ;Save memory into file set up in WORK DOS02 0468 A6D6 v73 DOS02 0471 A6D8 20 BF A8 SAVER JSR DIRDO DOS02 0468 A6D6 v73 DOS02 0472 A6DB 20 DA B8 JSR TRYFL0 DOS02 0468 A6D6 v73 DOS02 0473 A6DE 20 C8 A2 JSR CHUKBK DOS02 0468 A6D6 v73 DOS02 0474 A6E1 DOS02 0468 A6D6 v73 DOS02 0475 A6E1 ;Write block DOS02 0468 A6D6 v73 DOS02 0476 A6E1 20 B1 AB BLKWR JSR WTINT DOS02 0468 A6D6 v73 DOS02 0477 A6E4 20 43 A1 BLKXX JSR ATOT -- DOS02 0478 A6E7 20 4B AC JSR GETTS -- DOS02 0479 A6EA A9 01 LDAIM &01 -- DOS02 0480 A6EC 20 6A B9 JSR DSKFIN DOS02 DOS02 DOS02 DOS02 Acorn macro assembler Page 13 DOS02 - DOS02 - Command Line Interpreter DOS02 -- DOS02 0481 A6EF -- DOS02 0482 A6EF ;Release tube conditional on whether -- DOS02 0483 A6EF ; you used it -- DOS02 0484 A6EF 48 PHA -- DOS02 0485 A6F0 AD D5 10 LDA TUBFLG -- DOS02 0486 A6F3 F0 13 BEQ RELTB0 DOS02 0486 A6F3 v6C DOS02 0487 A6F5 A9 81 RELTB1 LDAIM &80 + TUBEID DOS02 0486 A6F3 v6C DOS02 0488 A6F7 20 06 04 JSR TUBADR DOS02 0486 A6F3 v6C DOS02 0489 A6FA 68 PLA DOS02 0486 A6F3 v6C DOS02 0490 A6FB 60 RTS DOS02 0486 A6F3 v6C DOS02 0491 A6FC DOS02 0486 A6F3 v6C DOS02 0492 A6FC ;Release NMI and tube DOS02 0486 A6F3 v6C DOS02 0493 A6FC 20 6D B9 NMTREL JSR NMIREL DOS02 0486 A6F3 v6C DOS02 0494 A6FF DOS02 0486 A6F3 v6C DOS02 0495 A6FF ;Release tube if tube exists DOS02 0486 A6F3 v6C DOS02 0496 A6FF 48 RELTUB PHA DOS02 0486 A6F3 v6C DOS02 0497 A700 A9 EA LDAIM BYTETB DOS02 0486 A6F3 v6C DOS02 0498 A702 20 A6 B9 JSR READBY DOS02 0486 A6F3 v6C DOS02 0499 A705 8A TXA DOS02 0486 A6F3 v6C DOS02 0500 A706 D0 ED BNE RELTB1 DOS02 0486 A6F3 v6C DOS02 0501 A708 68 RELTB0 PLA -- DOS02 0502 A709 60 RTS -- DOS02 0503 A70A -- DOS02 0504 A70A ;RUN filename as if a utility -- DOS02 0505 A70A 20 EA A5 WNOTA JSR STXYLP -- DOS02 0506 A70D -- DOS02 0507 A70D ;Unrecognised command - try disk for -- DOS02 0508 A70D ;a utility. -- DOS02 0509 A70D 20 7C A7 DEFCOM JSR SUPLD -- DOS02 0510 A710 8C DA 10 STY LINADR + &01 -- DOS02 0511 A713 20 70 A0 JSR FRMNAM -- DOS02 0512 A716 8C D9 10 STY LINADR -- DOS02 0513 A719 20 C3 A1 JSR LOOKUP -- DOS02 0514 A71C B0 22 BCS DEFSUC DOS02 0514 A71C v5D DOS02 0515 A71E AC DA 10 LDY LINADR + &01 DOS02 0514 A71C v5D DOS02 0516 A721 AD CB 10 LDA LIBQUA DOS02 0514 A71C v5D DOS02 0517 A724 85 CC STA QUALIF DOS02 0514 A71C v5D DOS02 0518 A726 AD CC 10 LDA LIBDSK DOS02 0514 A71C v5D DOS02 0519 A729 20 99 A6 JSR DODRIV DOS02 0514 A71C v5D DOS02 0520 A72C 20 73 A0 JSR FRMNM1 DOS02 0514 A71C v5D DOS02 0521 A72F 20 C3 A1 JSR LOOKUP DOS02 0514 A71C v5D DOS02 0522 A732 B0 0C BCS DEFSUC DOS02 0514 A71C v5D DOS02 0523 A734 20 AE 9F JSR ILLMSG DOS02 0514 A71C v5D DOS02 0524 A737 FE 63 6F = COMNUM,"command",&00 DOS02 0514 A71C v5D DOS02 0525 A740 DOS02 0514 A71C v5D DOS02 0526 A740 20 AA A6 DEFSUC JSR LOADT -- DOS02 0527 A743 18 CLC ;Work out address of line -- DOS02 0528 A744 AD D9 10 LDA LINADR -- DOS02 0529 A747 A8 TAY -- DOS02 0530 A748 65 F2 ADC LINPTR -- DOS02 0531 A74A 8D D9 10 STA LINADR -- DOS02 0532 A74D A5 F3 LDA LINPTR + &01 -- DOS02 0533 A74F 69 00 ADCIM &00 -- DOS02 0534 A751 8D DA 10 STA LINADR + &01 -- DOS02 0535 A754 AD 76 10 LDA HIWORK + &02 ;Find where to run -- DOS02 0536 A757 2D 77 10 AND HIWORK + &03 -- DOS02 0537 A75A 0D D6 10 ORA NOTUBE -- DOS02 0538 A75D C9 FF CMPIM &FF -- DOS02 0539 A75F F0 16 BEQ RUNHO DOS02 0539 A75F v69 DOS02 0540 A761 A5 BE LDA WORK + &04 ;Run that side DOS02 0539 A75F v69 DOS02 0541 A763 8D 74 10 STA HIWORK DOS02 0539 A75F v69 DOS02 0542 A766 A5 BF LDA WORK + &05 DOS02 0539 A75F v69 DOS02 0543 A768 8D 75 10 STA HIWORK + &01 DOS02 0539 A75F v69 DOS02 0544 A76B 20 04 AC JSR CLATUB DOS02 0539 A75F v69 DOS02 0545 A76E A2 74 LDXIM HIWORK DOS02 0539 A75F v69 DOS02 0546 A770 A0 10 LDYIM /(HIWORK ) DOS02 0539 A75F v69 DOS02 0547 A772 A9 04 LDAIM &04 DOS02 0539 A75F v69 DOS02 0548 A774 4C 06 04 JMP TUBADR DOS02 0539 A75F v69 DOS02 0549 A777 A9 01 RUNHO LDAIM &01 -- DOS02 0550 A779 6C BE 00 JMI WORK + &04 ;Run this side -- DOS02 0551 A77C -- DOS02 0552 A77C A9 FF SUPLD LDAIM &FF ;Set up load -- DOS02 0553 A77E 85 BE STA WORK + &04 -- DOS02 0554 A780 A5 F2 LDA LINPTR -- DOS02 0555 A782 85 BA STA WORK -- DOS02 0556 A784 A5 F3 LDA LINPTR + &01 -- DOS02 0557 A786 85 BB STA WORK + &01 -- DOS02 0558 A788 60 RTS -- DOS02 0559 A789 -- DOS02 0560 A789 ;Set default directory and disk -- DOS02 0561 A789 A2 00 SET LDXIM &00 -- DOS02 0562 A78B F0 02 BEQ SLIB1 DOS02 0562 A78B v7D DOS02 0563 A78D DOS02 0562 A78B v7D DOS02 0564 A78D ;Set library directory and disk DOS02 0562 A78B v7D DOS02 0565 A78D A2 02 SLIB LDXIM LIBDSK - DEFDSK DOS02 0562 A78B v7D DOS02 0566 A78F 20 C1 A7 SLIB1 JSR READDF -- DOS02 0567 A792 9D CA 10 STAAX DEFDSK -- DOS02 0568 A795 A5 CC LDA QUALIF -- DOS02 0569 A797 9D C9 10 STAAX DEFQUA -- DOS02 0570 A79A 60 RTS -- DOS02 0571 A79B -- DOS02 0572 A79B ;***** HMT -- DOS02 0573 A79B ; Save in private memory -- DOS02 0574 A79B 20 27 A3 SAVMEM JSR SAVITA ; Save A,X,Y -- DOS02 0575 A79E A5 B0 LDA TEMP -- DOS02 0576 A7A0 48 PHA -- DOS02 0577 A7A1 A5 B1 LDA TEMP+&01 -- DOS02 0578 A7A3 48 PHA -- DOS02 0579 A7A4 -- DOS02 0580 A7A4 20 10 B9 JSR SUSPRI ; Set up the pointer -- DOS02 0581 A7A7 -- DOS02 0582 A7A7 A0 00 LDYIM &00 ;Save useful things -- DOS02 0583 A7A9 C0 C0 RELME1 CPYIM &C0 DOS02 0590 A7B8 ^6F DOS02 0584 A7AB 90 05 BCC RELME2 DOS02 0590 A7B8 ^6F DOS02 0585 A7AD B9 00 10 LDAAY BUFFER DOS02 0590 A7B8 ^6F DOS02 0586 A7B0 B0 03 BCS RELME3 DOS02 0590 A7B8 ^6F DOS02 0587 A7B2 B9 00 11 RELME2 LDAAY SEQMAP DOS02 0590 A7B8 ^6F DOS02 0588 A7B5 91 B0 RELME3 STAIY TEMP DOS02 0590 A7B8 ^6F DOS02 0589 A7B7 88 DEY DOS02 0590 A7B8 ^6F DOS02 0590 A7B8 D0 EF BNE RELME1 -- DOS02 0591 A7BA ;************* Y=0 -- DOS02 0592 A7BA ; Exit Y=0 always -- DOS02 0593 A7BA -- DOS02 0594 A7BA 68 PLA -- DOS02 0595 A7BB 85 B1 STA TEMP+&01 -- DOS02 0596 A7BD 68 PLA -- DOS02 0597 A7BE 85 B0 STA TEMP -- DOS02 0598 A7C0 -- DOS02 0599 A7C0 60 RTS -- DOS02 0600 A7C1 -- DOS02 0601 A7C1 DOS02 DOS02 DOS02 DOS02 Acorn macro assembler Page 14 DOS02 - DOS02 - Command Line Interpreter DOS02 -- DOS02 0602 A7C1 -- DOS02 0603 A7C1 ;Read directory - if none default to -- DOS02 0604 A7C1 ;MASDSK and MASQUA -- DOS02 0605 A7C1 AD C9 10 READDF LDA DEFQUA ; ********** HMT -- DOS02 0606 A7C4 85 CC STA QUALIF ; ********** HMT -- DOS02 0607 A7C6 ; To preserve the Qual Correctly over *DIR :0 -- DOS02 0608 A7C6 20 F1 A5 JSR SETUPR -- DOS02 0609 A7C9 D0 07 BNE READD0 DOS02 0609 A7C9 v78 DOS02 0610 A7CB A9 00 LDAIM MASDSK DOS02 0609 A7C9 v78 DOS02 0611 A7CD 20 99 A6 JSR DODRIV DOS02 0609 A7C9 v78 DOS02 0612 A7D0 [ MASDSK=0 DOS02 0609 A7C9 v78 DOS02 0613 A7D0 F0 2A BEQ SET3 DOS02 0613 A7D0 v55 DOS02 0614 A7D2 | DOS02 0613 A7D0 v55 DOS02 0616 A7D2 ] DOS02 0613 A7D0 v55 DOS02 0617 A7D2 AD CA 10 READD0 LDA DEFDSK DOS02 0613 A7D0 v55 DOS02 0618 A7D5 20 99 A6 JSR DODRIV DOS02 0613 A7D0 v55 DOS02 0619 A7D8 20 C9 A0 SET4 JSR RDCHR DOS02 0613 A7D0 v55 DOS02 0620 A7DB B0 10 BCS ILLDIR DOS02 0613 A7D0 v55 DOS02 0621 A7DD C9 3A CMPIM ":" DOS02 0613 A7D0 v55 DOS02 0622 A7DF D0 14 BNE SET0 DOS02 0613 A7D0 v55 DOS02 0623 A7E1 20 D3 A9 JSR GETDRV DOS02 0613 A7D0 v55 DOS02 0624 A7E4 20 C9 A0 JSR RDCHR DOS02 0613 A7D0 v55 DOS02 0625 A7E7 B0 13 BCS SET3 DOS02 0613 A7D0 v55 DOS02 0626 A7E9 C9 2E CMPIM "." DOS02 0613 A7D0 v55 DOS02 0627 A7EB F0 EB BEQ SET4 DOS02 0613 A7D0 v55 DOS02 0628 A7ED 20 AE 9F ILLDIR JSR ILLMSG DOS02 0613 A7D0 v55 DOS02 0629 A7F0 CE 64 69 = DIRNUM,"dir",&00 DOS02 0613 A7D0 v55 DOS02 0630 A7F5 85 CC SET0 STA QUALIF DOS02 0613 A7D0 v55 DOS02 0631 A7F7 20 C9 A0 JSR RDCHR DOS02 0613 A7D0 v55 DOS02 0632 A7FA 90 F1 BCC ILLDIR DOS02 0613 A7D0 v55 DOS02 0633 A7FC A5 CD SET3 LDA FDRIVE -- DOS02 0634 A7FE 60 RTS -- DOS02 0635 A7FF -- DOS02 0636 A7FF 20 61 BA TITLE JSR CHKSYN -- DOS02 0637 A802 20 C3 A9 JSR SETDEF -- DOS02 0638 A805 20 C2 A2 JSR GETDIR -- DOS02 0639 A808 -- DOS02 0640 A808 A2 0B LDXIM &0B ;12 Chars in title -- DOS02 0641 A80A A9 20 LDAIM &20 ;Pad with nulls -- DOS02 0642 A80C 20 22 A8 CLRTI0 JSR TITWIT DOS02 0644 A810 ^7A DOS02 0643 A80F CA DEX DOS02 0644 A810 ^7A DOS02 0644 A810 10 FA BPL CLRTI0 -- DOS02 0645 A812 -- DOS02 0646 A812 E8 TITSET INX DOS02 0652 A81D ^73 DOS02 0647 A813 20 C9 A0 JSR RDCHR ;Read in title DOS02 0652 A81D ^73 DOS02 0648 A816 B0 07 BCS TITEND DOS02 0652 A81D ^73 DOS02 0649 A818 DOS02 0652 A81D ^73 DOS02 0650 A818 20 22 A8 JSR TITWIT DOS02 0652 A81D ^73 DOS02 0651 A81B E0 0B CPXIM &0B DOS02 0652 A81D ^73 DOS02 0652 A81D 90 F3 BCC TITSET DOS02 0648 A816 v78 DOS02 0653 A81F 4C 3B AA TITEND JMP DIROUT DOS02 0682 A85D ^40 DOS02 0654 A822 DOS02 0682 A85D ^40 DOS02 0655 A822 ;Put char in title DOS02 0682 A85D ^40 DOS02 0656 A822 E0 08 TITWIT CPXIM &08 DOS02 0682 A85D ^40 DOS02 0657 A824 90 04 BCC TITLLW DOS02 0682 A85D ^40 DOS02 0658 A826 9D F8 0E STAAX DIRHIG - &08 DOS02 0682 A85D ^40 DOS02 0659 A829 60 RTS DOS02 0682 A85D ^40 DOS02 0660 A82A 9D 00 0E TITLLW STAAX DIRLOW DOS02 0682 A85D ^40 DOS02 0661 A82D 60 RTS DOS02 0682 A85D ^40 DOS02 0662 A82E DOS02 0682 A85D ^40 DOS02 0663 A82E ;Lock or unlock file DOS02 0682 A85D ^40 DOS02 0664 A82E 20 04 B8 ACCESS JSR SETWLD DOS02 0682 A85D ^40 DOS02 0665 A831 20 61 BA JSR CHKSYN DOS02 0682 A85D ^40 DOS02 0666 A834 20 6A A0 JSR GETNAM DOS02 0682 A85D ^40 DOS02 0667 A837 A2 00 LDXIM &00 DOS02 0682 A85D ^40 DOS02 0668 A839 20 F1 A5 JSR SETUPR DOS02 0682 A85D ^40 DOS02 0669 A83C D0 23 BNE ACCES5 DOS02 0682 A85D ^40 DOS02 0670 A83E 86 AA ACCES0 STX UTEMP DOS02 0682 A85D ^40 DOS02 0671 A840 20 C3 A1 JSR LOOKUP DOS02 0682 A85D ^40 DOS02 0672 A843 B0 03 BCS ACCES1 DOS02 0682 A85D ^40 DOS02 0673 A845 4C 8C A1 JMP NOFIL DOS02 0682 A85D ^40 DOS02 0674 A848 20 BB B8 ACCES1 JSR CHKOPN DOS02 0682 A85D ^40 DOS02 0675 A84B B9 0F 0E LDAAY MODIFY DOS02 0682 A85D ^40 DOS02 0676 A84E 29 7F ANDIM &7F DOS02 0682 A85D ^40 DOS02 0677 A850 05 AA ORA UTEMP DOS02 0682 A85D ^40 DOS02 0678 A852 99 0F 0E STAAY MODIFY DOS02 0682 A85D ^40 DOS02 0679 A855 20 74 A2 JSR INFORM DOS02 0682 A85D ^40 DOS02 0680 A858 20 BF A1 JSR NEXT DOS02 0682 A85D ^40 DOS02 0681 A85B B0 EB BCS ACCES1 DOS02 0682 A85D ^40 DOS02 0682 A85D 90 C0 BCC TITEND DOS02 0685 A864 ^58 DOS02 0683 A85F A2 80 ACCES6 LDXIM &80 DOS02 0685 A864 ^58 DOS02 0684 A861 20 C9 A0 ACCES5 JSR RDCHR DOS02 0685 A864 ^58 DOS02 0685 A864 B0 D8 BCS ACCES0 DOS02 0688 A86A ^73 DOS02 0686 A866 29 5F ANDIM &5F DOS02 0688 A86A ^73 DOS02 0687 A868 C9 4C CMPIM "L" DOS02 0688 A86A ^73 DOS02 0688 A86A F0 F3 BEQ ACCES6 -- DOS02 0689 A86C 20 AE 9F JSR ILLMSG -- DOS02 0690 A86F CF 61 74 = ATTNUM,"attribute",&00 -- DOS02 0691 A87A -- DOS02 0692 A87A 20 27 A3 WFOPT JSR SAVITA -- DOS02 0693 A87D 8A TXA -- DOS02 0694 A87E C9 04 CMPIM &04 -- DOS02 0695 A880 F0 1A BEQ BOOTO DOS02 0695 A880 v65 DOS02 0696 A882 C9 02 CMPIM &02 DOS02 0695 A880 v65 DOS02 0697 A884 90 0B BCC SETMON DOS02 0695 A880 v65 DOS02 0698 A886 20 AE 9F JSR ILLMSG DOS02 0695 A880 v65 DOS02 0699 A889 CB 6F 70 = OPTNUM,"option",&00 DOS02 0695 A880 v65 DOS02 0700 A891 DOS02 0695 A880 v65 DOS02 0701 A891 A2 FF SETMON LDXIM &FF DOS02 0695 A880 v65 DOS02 0702 A893 98 TYA DOS02 0695 A880 v65 DOS02 0703 A894 F0 02 BEQ STMON0 DOS02 0695 A880 v65 DOS02 0704 A896 A2 00 LDXIM &00 DOS02 0695 A880 v65 DOS02 0705 A898 8E C6 10 STMON0 STX MONFLG DOS02 0695 A880 v65 DOS02 0706 A89B 60 RTS DOS02 0695 A880 v65 DOS02 0707 A89C DOS02 0695 A880 v65 DOS02 0708 A89C 98 BOOTO TYA -- DOS02 0709 A89D 48 PHA -- DOS02 0710 A89E 20 C3 A9 JSR SETDEF -- DOS02 0711 A8A1 20 6B AA JSR DIRLDY -- DOS02 0712 A8A4 68 PLA -- DOS02 0713 A8A5 20 3E A1 JSR LFOUR -- DOS02 0714 A8A8 4D 06 0F EOR DIRHIG + &06 -- DOS02 0715 A8AB 29 30 ANDIM &30 -- DOS02 0716 A8AD 4D 06 0F EOR DIRHIG + &06 -- DOS02 0717 A8B0 8D 06 0F STA DIRHIG + &06 -- DOS02 0718 A8B3 4C 3B AA JMP DIROUT -- DOS02 0719 A8B6 -- DOS02 0720 A8B6 20 A3 9F NOROOM JSR DSKMSG DOS02 0762 A910 ^24 DOS02 0721 A8B9 C6 66 75 = NORNUM,"full",&00 DOS02 0762 A910 ^24 DOS02 0722 A8BF DOS02 0762 A910 ^24 DOS02 0723 A8BF ;Generate file in directory DOS02 DOS02 DOS02 DOS02 Acorn macro assembler Page 15 DOS02 - DOS02 - Command Line Interpreter DOS02 DOS02 0762 A910 ^24 DOS02 0724 A8BF 20 70 A0 DIRDO JSR FRMNAM DOS02 0762 A910 ^24 DOS02 0725 A8C2 20 C3 A1 JSR LOOKUP DOS02 0762 A910 ^24 DOS02 0726 A8C5 90 03 BCC FILELS DOS02 0762 A910 ^24 DOS02 0727 A8C7 20 49 A2 JSR DELFIL DOS02 0762 A910 ^24 DOS02 0728 A8CA A5 C0 FILELS LDA WORK + &06 DOS02 0762 A910 ^24 DOS02 0729 A8CC 48 PHA DOS02 0762 A910 ^24 DOS02 0730 A8CD A5 C1 LDA WORK + &07 DOS02 0762 A910 ^24 DOS02 0731 A8CF 48 PHA DOS02 0762 A910 ^24 DOS02 0732 A8D0 38 SEC DOS02 0762 A910 ^24 DOS02 0733 A8D1 A5 C2 LDA WORK + &08 DOS02 0762 A910 ^24 DOS02 0734 A8D3 E5 C0 SBC WORK + &06 DOS02 0762 A910 ^24 DOS02 0735 A8D5 85 C0 STA WORK + &06 DOS02 0762 A910 ^24 DOS02 0736 A8D7 A5 C3 LDA WORK + &09 DOS02 0762 A910 ^24 DOS02 0737 A8D9 E5 C1 SBC WORK + &07 DOS02 0762 A910 ^24 DOS02 0738 A8DB 85 C1 STA WORK + &07 DOS02 0762 A910 ^24 DOS02 0739 A8DD AD 7A 10 LDA HIWORK + &06 DOS02 0762 A910 ^24 DOS02 0740 A8E0 ED 78 10 SBC HIWORK + &04 DOS02 0762 A910 ^24 DOS02 0741 A8E3 85 C4 STA WORK + &0A DOS02 0762 A910 ^24 DOS02 0742 A8E5 20 FB A8 JSR GENFIL DOS02 0762 A910 ^24 DOS02 0743 A8E8 AD 79 10 LDA HIWORK + &05 ;Move load address DOS02 0762 A910 ^24 DOS02 0744 A8EB 8D 75 10 STA HIWORK + &01 DOS02 0762 A910 ^24 DOS02 0745 A8EE AD 78 10 LDA HIWORK + &04 DOS02 0762 A910 ^24 DOS02 0746 A8F1 8D 74 10 STA HIWORK DOS02 0762 A910 ^24 DOS02 0747 A8F4 68 PLA DOS02 0762 A910 ^24 DOS02 0748 A8F5 85 BD STA WORK + &03 DOS02 0762 A910 ^24 DOS02 0749 A8F7 68 PLA DOS02 0762 A910 ^24 DOS02 0750 A8F8 85 BC STA WORK + &02 DOS02 0762 A910 ^24 DOS02 0751 A8FA 60 RTS DOS02 0762 A910 ^24 DOS02 0752 A8FB DOS02 0762 A910 ^24 DOS02 0753 A8FB A9 00 GENFIL LDAIM &00 DOS02 0762 A910 ^24 DOS02 0754 A8FD 85 C2 STA WORK + &08 DOS02 0762 A910 ^24 DOS02 0755 A8FF A9 02 LDAIM &02 DOS02 0762 A910 ^24 DOS02 0756 A901 85 C3 STA WORK + &09 DOS02 0762 A910 ^24 DOS02 0757 A903 AC 05 0F LDY DIRLEN DOS02 0762 A910 ^24 DOS02 0758 A906 C0 F8 CPYIM &F8 DOS02 0762 A910 ^24 DOS02 0759 A908 B0 56 BCS DIRFUL DOS02 0762 A910 ^24 DOS02 0760 A90A 20 D8 A4 JSR DSKSPC DOS02 0762 A910 ^24 DOS02 0761 A90D 4C 18 A9 JMP SPACHK DOS02 0762 A910 ^24 DOS02 0762 A910 F0 A4 SPALOP BEQ NOROOM DOS02 0759 A908 v29 DOS02 0763 A912 20 F1 A1 JSR UNSTEP DOS02 0759 A908 v29 DOS02 0764 A915 20 B9 A4 JSR DSKADR DOS02 0759 A908 v29 DOS02 0765 A918 98 SPACHK TYA DOS02 0759 A908 v29 DOS02 0766 A919 90 F5 BCC SPALOP DOS02 0759 A908 v29 DOS02 0767 A91B 84 B0 STY TEMP DOS02 0759 A908 v29 DOS02 0768 A91D AC 05 0F LDY DIRLEN DOS02 0759 A908 v29 DOS02 0769 A920 C4 B0 MOVEUP CPY TEMP DOS02 0759 A908 v29 DOS02 0770 A922 F0 0F BEQ INSNAM DOS02 0759 A908 v29 DOS02 0771 A924 B9 07 0E LDAAY CATLOW - &01 DOS02 0759 A908 v29 DOS02 0772 A927 99 0F 0E STAAY CATLOW + &07 DOS02 0759 A908 v29 DOS02 0773 A92A B9 07 0F LDAAY CATHIG - &01 DOS02 0759 A908 v29 DOS02 0774 A92D 99 0F 0F STAAY CATHIG + &07 DOS02 0759 A908 v29 DOS02 0775 A930 88 DEY DOS02 0759 A908 v29 DOS02 0776 A931 B0 ED BCS MOVEUP ; Y > TEMP ? DOS02 0759 A908 v29 DOS02 0777 A933 A2 00 INSNAM LDXIM &00 DOS02 0759 A908 v29 DOS02 0778 A935 20 6D A9 JSR ENCODE DOS02 0759 A908 v29 DOS02 0779 A938 B5 C5 NAMIN LDAZX WORK + &0B DOS02 0759 A908 v29 DOS02 0780 A93A 99 08 0E STAAY CATLOW DOS02 0759 A908 v29 DOS02 0781 A93D C8 INY DOS02 0759 A908 v29 DOS02 0782 A93E E8 INX DOS02 0759 A908 v29 DOS02 0783 A93F E0 08 CPXIM &08 DOS02 0759 A908 v29 DOS02 0784 A941 D0 F5 BNE NAMIN DOS02 0759 A908 v29 DOS02 0785 A943 B5 BB VARIN LDAZX WORK + &01 DOS02 0759 A908 v29 DOS02 0786 A945 88 DEY DOS02 0759 A908 v29 DOS02 0787 A946 99 08 0F STAAY CATHIG DOS02 0759 A908 v29 DOS02 0788 A949 CA DEX DOS02 0759 A908 v29 DOS02 0789 A94A D0 F7 BNE VARIN DOS02 0759 A908 v29 DOS02 0790 A94C 20 74 A2 JSR INFORM DOS02 0759 A908 v29 DOS02 0791 A94F 98 TYA DOS02 0759 A908 v29 DOS02 0792 A950 48 PHA DOS02 0759 A908 v29 DOS02 0793 A951 AC 05 0F LDY DIRLEN DOS02 0759 A908 v29 DOS02 0794 A954 20 7C A6 JSR STEP DOS02 0759 A908 v29 DOS02 0795 A957 8C 05 0F STY DIRLEN DOS02 0759 A908 v29 DOS02 0796 A95A 20 3B AA JSR DIROUT DOS02 0759 A908 v29 DOS02 0797 A95D 68 PLA DOS02 0759 A908 v29 DOS02 0798 A95E A8 TAY DOS02 0759 A908 v29 DOS02 0799 A95F 60 RTS DOS02 0759 A908 v29 DOS02 0800 A960 DOS02 0759 A908 v29 DOS02 0801 A960 20 B8 9F DIRFUL JSR ESTRNG -- DOS02 0802 A963 BE 43 61 = DRFNUM,"Cat full",&00 -- DOS02 0803 A96D -- DOS02 0804 A96D AD 76 10 ENCODE LDA HIWORK + &02 ;Inserts half nibbles in reverse order -- DOS02 0805 A970 29 03 ANDIM &03 ;Starting with exec addr -- DOS02 0806 A972 0A ASLA -- DOS02 0807 A973 0A ASLA -- DOS02 0808 A974 45 C4 EOR WORK + &0A ;Length -- DOS02 0809 A976 29 FC ANDIM &FC -- DOS02 0810 A978 45 C4 EOR WORK + &0A -- DOS02 0811 A97A 0A ASLA -- DOS02 0812 A97B 0A ASLA -- DOS02 0813 A97C 4D 74 10 EOR HIWORK ;Load addr -- DOS02 0814 A97F 29 FC ANDIM &FC -- DOS02 0815 A981 4D 74 10 EOR HIWORK -- DOS02 0816 A984 0A ASLA -- DOS02 0817 A985 0A ASLA -- DOS02 0818 A986 45 C2 EOR WORK + &08 ;Start sec -- DOS02 0819 A988 29 FC ANDIM &FC -- DOS02 0820 A98A 45 C2 EOR WORK + &08 -- DOS02 0821 A98C 85 C2 STA WORK + &08 ;Finally store -- DOS02 0822 A98E 60 RTS -- DOS02 0823 A98F -- DOS02 0824 A98F ;Enable misc commands -- DOS02 0825 A98F A9 01 ENABLE LDAIM &01 -- DOS02 0826 A991 8D C7 10 STA ENAFLG -- DOS02 0827 A994 60 RTS -- DOS02 0828 A995 -- DOS02 0829 A995 A9 00 DECODL LDAIM &00 -- DOS02 0830 A997 8D 75 10 STA HIWORK + &01 -- DOS02 0831 A99A A5 C2 LDA WORK + &08 -- DOS02 0832 A99C 20 32 A1 JSR ISOLOD -- DOS02 0833 A99F C9 03 CMPIM &03 -- DOS02 0834 A9A1 D0 05 BNE DECDL0 DOS02 0834 A9A1 v7A DOS02 0835 A9A3 A9 FF LDAIM &FF DOS02 0834 A9A1 v7A DOS02 0836 A9A5 8D 75 10 STA HIWORK + &01 DOS02 0834 A9A1 v7A DOS02 0837 A9A8 8D 74 10 DECDL0 STA HIWORK -- DOS02 0838 A9AB 60 RTS -- DOS02 0839 A9AC -- DOS02 0840 A9AC A9 00 DECODE LDAIM &00 -- DOS02 0841 A9AE 8D 77 10 STA HIWORK + &03 -- DOS02 0842 A9B1 A5 C2 LDA WORK + &08 -- DOS02 0843 A9B3 20 2E A1 JSR ISOEXE -- DOS02 0844 A9B6 C9 03 CMPIM &03 DOS02 DOS02 DOS02 DOS02 Acorn macro assembler Page 16 DOS02 - DOS02 - Command Line Interpreter DOS02 -- DOS02 0845 A9B8 D0 05 BNE DECDE0 DOS02 0845 A9B8 v7A DOS02 0846 A9BA A9 FF LDAIM &FF DOS02 0845 A9B8 v7A DOS02 0847 A9BC 8D 77 10 STA HIWORK + &03 DOS02 0845 A9B8 v7A DOS02 0848 A9BF 8D 76 10 DECDE0 STA HIWORK + &02 -- DOS02 0849 A9C2 60 RTS -- DOS02 0850 A9C3 -- DOS02 0851 A9C3 ;Set up default qualifier and disk -- DOS02 0852 A9C3 AD C9 10 SETDEF LDA DEFQUA -- DOS02 0853 A9C6 85 CC STA QUALIF -- DOS02 0854 A9C8 AD CA 10 SETDDR LDA DEFDSK DOS02 0860 A9D1 ^75 DOS02 0855 A9CB 4C 99 A6 JMP DODRIV DOS02 0860 A9D1 ^75 DOS02 0856 A9CE DOS02 0860 A9D1 ^75 DOS02 0857 A9CE ;Read drive - if nothing on line sets DOS02 0860 A9D1 ^75 DOS02 0858 A9CE ; to default DOS02 0860 A9D1 ^75 DOS02 0859 A9CE 20 F1 A5 READRV JSR SETUPR DOS02 0860 A9D1 ^75 DOS02 0860 A9D1 F0 F5 BEQ SETDDR -- DOS02 0861 A9D3 -- DOS02 0862 A9D3 ;Get drive from input string -- DOS02 0863 A9D3 ;Produces error on invalid drive -- DOS02 0864 A9D3 20 C9 A0 GETDRV JSR RDCHR DOS02 0867 A9DA ^77 DOS02 0865 A9D6 B0 12 BCS DRVERR DOS02 0865 A9D6 v6D DOS02 0866 A9D8 C9 3A CMPIM ":" DOS02 0865 A9D6 v6D DOS02 0867 A9DA F0 F7 BEQ GETDRV DOS02 0865 A9D6 v6D DOS02 0868 A9DC 38 SEC DOS02 0865 A9D6 v6D DOS02 0869 A9DD E9 30 SBCIM "0" DOS02 0865 A9D6 v6D DOS02 0870 A9DF 90 09 BCC DRVERR DOS02 0865 A9D6 v6D DOS02 0871 A9E1 C9 04 CMPIM &04 DOS02 0865 A9D6 v6D DOS02 0872 A9E3 B0 05 BCS DRVERR DOS02 0865 A9D6 v6D DOS02 0873 A9E5 20 99 A6 JSR DODRIV DOS02 0865 A9D6 v6D DOS02 0874 A9E8 18 CLC DOS02 0865 A9D6 v6D DOS02 0875 A9E9 60 RTS DOS02 0865 A9D6 v6D DOS02 0876 A9EA 20 AE 9F DRVERR JSR ILLMSG DOS02 0895 AA15 ^53 DOS02 0877 A9ED CD 64 72 = DRVNUM,"drive",&00 DOS02 0895 AA15 ^53 DOS02 0878 A9F4 DOS02 0895 AA15 ^53 DOS02 0879 A9F4 20 FB B7 RENAME JSR CLRWLD DOS02 0895 AA15 ^53 DOS02 0880 A9F7 20 61 BA JSR CHKSYN DOS02 0895 AA15 ^53 DOS02 0881 A9FA 20 6A A0 JSR GETNAM DOS02 0895 AA15 ^53 DOS02 0882 A9FD 98 TYA DOS02 0895 AA15 ^53 DOS02 0883 A9FE 48 PHA DOS02 0895 AA15 ^53 DOS02 0884 A9FF 20 87 A1 JSR ERRLOK DOS02 0895 AA15 ^53 DOS02 0885 AA02 20 B8 B8 JSR CHKOPL DOS02 0895 AA15 ^53 DOS02 0886 AA05 84 B3 STY ITEMP DOS02 0895 AA15 ^53 DOS02 0887 AA07 68 PLA DOS02 0895 AA15 ^53 DOS02 0888 AA08 A8 TAY DOS02 0895 AA15 ^53 DOS02 0889 AA09 20 61 BA JSR CHKSYN DOS02 0895 AA15 ^53 DOS02 0890 AA0C A5 CD LDA FDRIVE ;Save 1st filename drive DOS02 0895 AA15 ^53 DOS02 0891 AA0E 48 PHA DOS02 0895 AA15 ^53 DOS02 0892 AA0F 20 6A A0 JSR GETNAM DOS02 0895 AA15 ^53 DOS02 0893 AA12 68 PLA DOS02 0895 AA15 ^53 DOS02 0894 AA13 C5 CD CMP FDRIVE ;Check same drive DOS02 0895 AA15 ^53 DOS02 0895 AA15 D0 D3 BNE DRVERR ;'Bad drive' error if not -- DOS02 0896 AA17 20 C3 A1 JSR LOOKUP -- DOS02 0897 AA1A 90 0F BCC REN4 DOS02 0897 AA1A v70 DOS02 0898 AA1C ;************************ So REN. A a works!!!! DOS02 0897 AA1A v70 DOS02 0899 AA1C C4 B3 CPY ITEMP ; This is the cat entry of the extant file DOS02 0897 AA1A v70 DOS02 0900 AA1E F0 0B BEQ REN4 ; If we're about to save in the same place DOS02 0897 AA1A v70 DOS02 0901 AA20 ;************************ DOS02 0897 AA1A v70 DOS02 0902 AA20 20 B8 9F JSR ESTRNG DOS02 0897 AA1A v70 DOS02 0903 AA23 C4 45 78 = FAXNUM,"Exists",&00 DOS02 0897 AA1A v70 DOS02 0904 AA2B A4 B3 REN4 LDY ITEMP -- DOS02 0905 AA2D 20 7C A6 JSR STEP -- DOS02 0906 AA30 A2 07 LDXIM &07 -- DOS02 0907 AA32 B5 C5 REN5 LDAZX WORK + &0B DOS02 0911 AA39 ^77 DOS02 0908 AA34 99 07 0E STAAY CATLOW - &01 DOS02 0911 AA39 ^77 DOS02 0909 AA37 88 DEY DOS02 0911 AA39 ^77 DOS02 0910 AA38 CA DEX DOS02 0911 AA39 ^77 DOS02 0911 AA39 10 F7 BPL REN5 -- DOS02 0912 AA3B -- DOS02 0913 AA3B ; -- DOS02 0914 AA3B ; And drop through to DIROUT -- DOS02 0915 AA3B ; -- DOS02 0916 AA3B AA3B EDOS02 * . -- DOS02 0917 AA3B -- DOS02 0918 AA3B LNK DOS03 -- DOS03 0001 AA3B ;*** File Three *** -> DOS03 -- DOS03 0002 AA3B TTL - DOS03 - Disk Primitives -- DOS03 0003 AA3B OPT &01 -- DOS03 0004 AA3B ;FILE 03. DISC HANDLER ETC -- DOS03 0005 AA3B -- DOS03 0006 AA3B ;Output directory to disc -- DOS03 0007 AA3B 18 DIROUT CLC ;Cycle number in BCD -- DOS03 0008 AA3C F8 SED -- DOS03 0009 AA3D AD 04 0F LDA CYCNO -- DOS03 0010 AA40 69 01 ADCIM &01 -- DOS03 0011 AA42 D8 CLD -- DOS03 0012 AA43 8D 04 0F STA CYCNO -- DOS03 0013 AA46 -- DOS03 0014 AA46 ;*********************** HMT -- DOS03 0015 AA46 ; Maybe we should select the drive first ? -- DOS03 0016 AA46 20 AA AA JSR DRVSSK -- DOS03 0017 AA49 ;*********************** HMT -- DOS03 0018 AA49 -- DOS03 0019 AA49 20 C7 AB JSR LDTRYS -- DOS03 0020 AA4C A0 2B DIROT0 LDYIM CHKSPD - CMDTAB DOS03 0024 AA55 ^75 DOS03 0021 AA4E C6 A2 DEC CNTA DOS03 0024 AA55 ^75 DOS03 0022 AA50 30 75 BMI DKNERN DOS03 0022 AA50 v0A DOS03 0023 AA52 20 A4 AC JSR CMDRES DOS03 0022 AA50 v0A DOS03 0024 AA55 D0 F5 BNE DIROT0 DOS03 0022 AA50 v0A DOS03 0025 AA57 20 B6 AB JSR WRINT0 ;Returns NZ DOS03 0022 AA50 v0A DOS03 0026 AA5A D0 15 BNE DIROT1 ;Always DOS03 0022 AA50 v0A DOS03 0027 AA5C DOS03 0022 AA50 v0A DOS03 0028 AA5C ;Get directory from command line and DOS03 0022 AA50 v0A DOS03 0029 AA5C ; read it DOS03 0022 AA50 v0A DOS03 0030 AA5C 20 CE A9 DIR JSR READRV DOS03 0022 AA50 v0A DOS03 0031 AA5F DOS03 0022 AA50 v0A DOS03 0032 AA5F 20 84 AA DIRLD JSR DSKRDY DOS03 0022 AA50 v0A DOS03 0033 AA62 F0 07 BEQ DIRLDY DOS03 0022 AA50 v0A DOS03 0034 AA64 AD 82 10 LDA CATDRV DOS03 0022 AA50 v0A DOS03 0035 AA67 C5 CD CMP FDRIVE DOS03 0022 AA50 v0A DOS03 0036 AA69 F0 29 BEQ DRVSE0 DOS03 0022 AA50 v0A DOS03 0037 AA6B DOS03 0022 AA50 v0A DOS03 0038 AA6B ;Read directory always DOS03 0022 AA50 v0A DOS03 0039 AA6B 20 AA AA DIRLDY JSR DRVSSK DOS03 0022 AA50 v0A DOS03 0040 AA6E 20 A8 AB JSR RDINT0 DOS03 0022 AA50 v0A DOS03 0041 AA71 A9 00 DIROT1 LDAIM &00 ;Detube DOS03 0022 AA50 v0A DOS03 0042 AA73 8D 73 10 STA LDLOW + &01 DOS03 0022 AA50 v0A DOS03 0043 AA76 8D D5 10 STA TUBFLG DOS03 0022 AA50 v0A DOS03 0044 AA79 20 4B AC JSR GETTS DOS03 0022 AA50 v0A DOS03 0045 AA7C A5 CD LDA FDRIVE DOS03 0022 AA50 v0A DOS03 0046 AA7E 8D 82 10 STA CATDRV DOS03 0022 AA50 v0A DOS03 0047 AA81 4C 6A B9 JMP DSKFIN DOS03 DOS03 DOS03 DOS03 Acorn macro assembler Page 17 DOS03 - DOS03 - Disk Primitives DOS03 DOS03 0022 AA50 v0A DOS03 0048 AA84 DOS03 0022 AA50 v0A DOS03 0049 AA84 ;Check disk ready - returns DOS03 0022 AA50 v0A DOS03 0050 AA84 ; zero if not ready DOS03 0022 AA50 v0A DOS03 0051 AA84 A9 6C DSKRDY LDAIM &6C DOS03 0022 AA50 v0A DOS03 0052 AA86 20 92 AC JSR CMDDRV DOS03 0022 AA50 v0A DOS03 0053 AA89 20 A7 AC JSR DSKRES DOS03 0022 AA50 v0A DOS03 0054 AA8C 90 04 BCC DSKRDX ; C = Drive no. in CMDDRV DOS03 0022 AA50 v0A DOS03 0055 AA8E 20 38 A1 JSR SFOUR DOS03 0022 AA50 v0A DOS03 0056 AA91 38 SEC ; So C still = drive DOS03 0022 AA50 v0A DOS03 0057 AA92 29 04 DSKRDX ANDIM &04 DOS03 0022 AA50 v0A DOS03 0058 AA94 60 DRVSE0 RTS DOS03 0022 AA50 v0A DOS03 0059 AA95 DOS03 0022 AA50 v0A DOS03 0060 AA95 ;Output string of commands to controler DOS03 0022 AA50 v0A DOS03 0061 AA95 B9 D8 AC CMDPAR LDAAY CMDTAB DOS03 0022 AA50 v0A DOS03 0062 AA98 20 92 AC JSR CMDDRV DOS03 0022 AA50 v0A DOS03 0063 AA9B C8 INY DOS03 0022 AA50 v0A DOS03 0064 AA9C B9 D8 AC CMDPRA LDAAY CMDTAB DOS03 0022 AA50 v0A DOS03 0065 AA9F C8 INY DOS03 0022 AA50 v0A DOS03 0066 AAA0 C9 EA CMPIM &EA DOS03 0022 AA50 v0A DOS03 0067 AAA2 F0 F0 BEQ DRVSE0 DOS03 0022 AA50 v0A DOS03 0068 AAA4 20 85 AC JSR DSKPAR DOS03 0022 AA50 v0A DOS03 0069 AAA7 4C 9C AA JMP CMDPRA DOS03 0022 AA50 v0A DOS03 0070 AAAA DOS03 0022 AA50 v0A DOS03 0071 AAAA 20 31 AB DRVSSK JSR DRVSEL DOS03 0022 AA50 v0A DOS03 0072 AAAD ;Seek track zero DOS03 0022 AA50 v0A DOS03 0073 AAAD A9 02 ZTRKSC LDAIM NOPCLA DOS03 0022 AA50 v0A DOS03 0074 AAAF 20 20 B9 JSR NMICLA DOS03 0022 AA50 v0A DOS03 0075 AAB2 A0 00 LDYIM &00 DOS03 0022 AA50 v0A DOS03 0076 AAB4 84 CE STY TRACK ;Zero track sector DOS03 0022 AA50 v0A DOS03 0077 AAB6 84 CF STY SECTOR DOS03 0022 AA50 v0A DOS03 0078 AAB8 84 A3 STY READNO DOS03 0022 AA50 v0A DOS03 0079 AABA C8 INY DOS03 0022 AA50 v0A DOS03 0080 AABB 84 A5 STY READNO + &02 DOS03 0022 AA50 v0A DOS03 0081 AABD C8 INY DOS03 0022 AA50 v0A DOS03 0082 AABE 84 A4 STY READNO + &01 DOS03 0022 AA50 v0A DOS03 0083 AAC0 A0 28 LDYIM DSKQRZ - CMDTAB DOS03 0022 AA50 v0A DOS03 0084 AAC2 20 A4 AC JSR CMDRES DOS03 0022 AA50 v0A DOS03 0085 AAC5 F0 CD BEQ DRVSE0 DOS03 0022 AA50 v0A DOS03 0086 AAC7 20 FC A6 DKNERN JSR NMTREL DOS03 0123 AB1E ^0D DOS03 0087 AACA C9 12 CMPIM &12 DOS03 0123 AB1E ^0D DOS03 0088 AACC D0 0E BNE DKERR0 DOS03 0123 AB1E ^0D DOS03 0089 AACE 20 A3 9F JSR DSKMSG DOS03 0123 AB1E ^0D DOS03 0090 AAD1 C9 72 65 = DKPNUM,"read only",&00 DOS03 0123 AB1E ^0D DOS03 0091 AADC DOS03 0123 AB1E ^0D DOS03 0092 AADC 48 DKERR0 PHA ; Save for printing DOS03 0123 AB1E ^0D DOS03 0093 AADD C9 0A CMPIM &0A DOS03 0123 AB1E ^0D DOS03 0094 AADF F0 0C BEQ DRVFLT DOS03 0123 AB1E ^0D DOS03 0095 AAE1 29 0F ANDIM &0F DOS03 0123 AB1E ^0D DOS03 0096 AAE3 C9 08 CMPIM &08 DOS03 0123 AB1E ^0D DOS03 0097 AAE5 90 06 BCC DRVFLT DOS03 0123 AB1E ^0D DOS03 0098 AAE7 DOS03 0123 AB1E ^0D DOS03 0099 AAE7 20 A3 9F JSR DSKMSG DOS03 0123 AB1E ^0D DOS03 0100 AAEA 00 = &00 DOS03 0123 AB1E ^0D DOS03 0101 AAEB 90 0E BCC DSKFLT ; Always DOS03 0123 AB1E ^0D DOS03 0102 AAED DOS03 0123 AB1E ^0D DOS03 0103 AAED 20 84 AB DRVFLT JSR RESFDC DOS03 0123 AB1E ^0D DOS03 0104 AAF0 20 B8 9F JSR ESTRNG DOS03 0123 AB1E ^0D DOS03 0105 AAF3 00 44 72 = &00,"Drive " DOS03 0123 AB1E ^0D DOS03 0106 AAFA EA NOP DOS03 0123 AB1E ^0D DOS03 0107 AAFB DOS03 0123 AB1E ^0D DOS03 0108 AAFB 20 CF 9F DSKFLT JSR GSTRNG DOS03 0123 AB1E ^0D DOS03 0109 AAFE C7 66 61 = DERNUM,"fault " DOS03 0123 AB1E ^0D DOS03 0110 AB05 EA NOP DOS03 0123 AB1E ^0D DOS03 0111 AB06 68 PLA DOS03 0123 AB1E ^0D DOS03 0112 AB07 20 C5 AD JSR TTSSER DOS03 0123 AB1E ^0D DOS03 0113 AB0A 20 CF 9F JSR GSTRNG DOS03 0123 AB1E ^0D DOS03 0114 AB0D C7 00 = DERNUM,&00 DOS03 0123 AB1E ^0D DOS03 0115 AB0F DOS03 0123 AB1E ^0D DOS03 0116 AB0F ; Check the restore semaphore and do as necc. DOS03 0123 AB1E ^0D DOS03 0117 AB0F A9 80 DSKZSK LDAIM &80 DOS03 0123 AB1E ^0D DOS03 0118 AB11 2C 85 10 BIT QSTORE DOS03 0123 AB1E ^0D DOS03 0119 AB14 B0 0A BCS CHKDR1 DOS03 0123 AB1E ^0D DOS03 0120 AB16 30 0D BMI DELAY ; If Dr.0 OK, an RTS DOS03 0123 AB1E ^0D DOS03 0121 AB18 0D 85 10 CHKDR2 ORA QSTORE DOS03 0123 AB1E ^0D DOS03 0122 AB1B 8D 85 10 STA QSTORE DOS03 0123 AB1E ^0D DOS03 0123 AB1E D0 8D BNE ZTRKSC ; Always Restore DOS03 0170 AB6A ^23 DOS03 0124 AB20 70 03 CHKDR1 BVS DELAY ; If Dr.1 OK, an RTS DOS03 0170 AB6A ^23 DOS03 0125 AB22 4A LSRA ; A:= $40, bit 6, .. C:= 0 DOS03 0170 AB6A ^23 DOS03 0126 AB23 90 F3 BCC CHKDR2 ; Always DOS03 0170 AB6A ^23 DOS03 0127 AB25 DOS03 0170 AB6A ^23 DOS03 0128 AB25 ; Now the Delay on write operations to cure Disc Fault 18, I hope DOS03 0170 AB6A ^23 DOS03 0129 AB25 20 27 A3 DELAY JSR SAVITA ; Preserve Y is necc. DOS03 0170 AB6A ^23 DOS03 0130 AB28 DOS03 0170 AB6A ^23 DOS03 0131 AB28 A0 46 LDYIM 70 DOS03 0170 AB6A ^23 DOS03 0132 AB2A CA DELAY1 DEX DOS03 0170 AB6A ^23 DOS03 0133 AB2B D0 FD BNE DELAY1 DOS03 0170 AB6A ^23 DOS03 0134 AB2D 88 DEY DOS03 0170 AB6A ^23 DOS03 0135 AB2E D0 FA BNE DELAY1 DOS03 0170 AB6A ^23 DOS03 0136 AB30 DOS03 0170 AB6A ^23 DOS03 0137 AB30 60 RTS DOS03 0170 AB6A ^23 DOS03 0138 AB31 DOS03 0170 AB6A ^23 DOS03 0139 AB31 ;Select drive DOS03 0170 AB6A ^23 DOS03 0140 AB31 20 27 A3 DRVSEL JSR SAVITA DOS03 0170 AB6A ^23 DOS03 0141 AB34 DOS03 0170 AB6A ^23 DOS03 0142 AB34 A5 CD LDA FDRIVE ;If preselected ignore DOS03 0170 AB6A ^23 DOS03 0143 AB36 A8 TAY DOS03 0170 AB6A ^23 DOS03 0144 AB37 CD 83 10 CMP OLDDRV DOS03 0170 AB6A ^23 DOS03 0145 AB3A D0 05 BNE DRVSL0 DOS03 0170 AB6A ^23 DOS03 0146 AB3C 20 84 AA JSR DSKRDY DOS03 0170 AB6A ^23 DOS03 0147 AB3F D0 61 BNE DSKSEX ; another RTS in the wall DOS03 0147 AB3F v1E DOS03 0148 AB41 8C 83 10 DRVSL0 STY OLDDRV DOS03 0147 AB3F v1E DOS03 0149 AB44 A9 3A LDAIM &3A DOS03 0147 AB3F v1E DOS03 0150 AB46 20 9B AC JSR DSKCMD DOS03 0147 AB3F v1E DOS03 0151 AB49 A9 23 LDAIM &23 DOS03 0147 AB3F v1E DOS03 0152 AB4B 20 85 AC JSR DSKPAR DOS03 0147 AB3F v1E DOS03 0153 AB4E B9 94 AB LDAAY SELPAR DOS03 0147 AB3F v1E DOS03 0154 AB51 20 85 AC JSR DSKPAR DOS03 0147 AB3F v1E DOS03 0155 AB54 ;***************************************** A Fix ???? DOS03 0147 AB3F v1E DOS03 0156 AB54 98 TYA DOS03 0147 AB3F v1E DOS03 0157 AB55 6A RORA ; Set the carry for ... DOS03 0147 AB3F v1E DOS03 0158 AB56 A0 33 LDYIM RSROP - CMDTAB DOS03 0147 AB3F v1E DOS03 0159 AB58 20 A4 AC JSR CMDRES ; Keeping the drive select bits, I hope DOS03 0147 AB3F v1E DOS03 0160 AB5B AC 83 10 LDY OLDDRV DOS03 0147 AB3F v1E DOS03 0161 AB5E 29 08 ANDIM &08 DOS03 0147 AB3F v1E DOS03 0162 AB60 F0 DF BEQ DRVSL0 ; If it hasn't loaded yet, tell it again DOS03 0147 AB3F v1E DOS03 0163 AB62 DOS03 0147 AB3F v1E DOS03 0164 AB62 ;*********** Invalidate old catalog ************ HMT DOS03 0147 AB3F v1E DOS03 0165 AB62 A9 FF LDAIM &FF DOS03 0147 AB3F v1E DOS03 0166 AB64 8D 82 10 STA CATDRV DOS03 0147 AB3F v1E DOS03 0167 AB67 ;*********************************************** HMT DOS03 0147 AB3F v1E DOS03 0168 AB67 DOS03 DOS03 DOS03 DOS03 Acorn macro assembler Page 18 DOS03 - DOS03 - Disk Primitives DOS03 DOS03 0147 AB3F v1E DOS03 0169 AB67 20 84 AA STARTW JSR DSKRDY DOS03 0147 AB3F v1E DOS03 0170 AB6A D0 A3 BNE DSKZSK ; Check for Restore sema DOS03 0147 AB3F v1E DOS03 0171 AB6C ;************************ DOS03 0147 AB3F v1E DOS03 0172 AB6C 08 PHP DOS03 0147 AB3F v1E DOS03 0173 AB6D 58 CLI DOS03 0147 AB3F v1E DOS03 0174 AB6E 28 PLP DOS03 0147 AB3F v1E DOS03 0175 AB6F ;************************ for Escape DOS03 0147 AB3F v1E DOS03 0176 AB6F 24 FF BIT ESCFLG DOS03 0147 AB3F v1E DOS03 0177 AB71 10 F4 BPL STARTW DOS03 0147 AB3F v1E DOS03 0178 AB73 DOS03 0147 AB3F v1E DOS03 0179 AB73 20 84 AB JSR RESFDC ;************* HMT DOS03 0147 AB3F v1E DOS03 0180 AB76 DOS03 0147 AB3F v1E DOS03 0181 AB76 20 99 B9 ESCAPE JSR ACKESC ;Cancel escape flag DOS03 0147 AB3F v1E DOS03 0182 AB79 20 C8 9F JSR FSTRNG DOS03 0147 AB3F v1E DOS03 0183 AB7C 11 45 73 = ESCNUM,"Escape",&00 DOS03 0147 AB3F v1E DOS03 0184 AB84 DOS03 0147 AB3F v1E DOS03 0185 AB84 ;Reset the FDC - this requires a reset DOS03 0147 AB3F v1E DOS03 0186 AB84 ;pulse of at least 2.5uS DOS03 0147 AB3F v1E DOS03 0187 AB84 A9 01 RESFDC LDAIM &01 ;Put it high... DOS03 0147 AB3F v1E DOS03 0188 AB86 8D 82 FE STA FDCRES DOS03 0147 AB3F v1E DOS03 0189 AB89 AA TAX ; X:= 1 (2) Waste time (6 cycles) DOS03 0147 AB3F v1E DOS03 0190 AB8A CA DEX ; X:= 0 (2) DOS03 0147 AB3F v1E DOS03 0191 AB8B 8E 82 FE STX FDCRES ; (3) ...and low again DOS03 0147 AB3F v1E DOS03 0192 AB8E 20 B9 AC JSR INIFDC ;Re-initialise FDC DOS03 0147 AB3F v1E DOS03 0193 AB91 4C FC A6 JMP NMTREL ;No more need for NMI or tube DOS03 0147 AB3F v1E DOS03 0194 AB94 DOS03 0147 AB3F v1E DOS03 0195 AB94 48 88 68 SELPAR = &48,&88,&68,&A8 DOS03 0147 AB3F v1E DOS03 0196 AB98 DOS03 0147 AB3F v1E DOS03 0197 AB98 ;Ignore tube if present DOS03 0147 AB3F v1E DOS03 0198 AB98 48 DETUBE PHA DOS03 0147 AB3F v1E DOS03 0199 AB99 A9 FF LDAIM &FF DOS03 0147 AB3F v1E DOS03 0200 AB9B 8D 74 10 STA HIWORK DOS03 0147 AB3F v1E DOS03 0201 AB9E 8D 75 10 STA HIWORK + &01 DOS03 0147 AB3F v1E DOS03 0202 ABA1 68 PLA DOS03 0147 AB3F v1E DOS03 0203 ABA2 60 DSKSEX RTS -- DOS03 0204 ABA3 -- DOS03 0205 ABA3 ;Init for read -- DOS03 0206 ABA3 A9 01 RDINT LDAIM RDMCLA -- DOS03 0207 ABA5 20 D6 AB JSR CHKTUB -- DOS03 0208 ABA8 A9 01 RDINT0 LDAIM RDMCLA -- DOS03 0209 ABAA 20 20 B9 JSR NMICLA -- DOS03 0210 ABAD A9 53 LDAIM &53 -- DOS03 0211 ABAF D0 0C BNE INTJMP DOS03 0211 ABAF v73 DOS03 0212 ABB1 DOS03 0211 ABAF v73 DOS03 0213 ABB1 ;Init for write DOS03 0211 ABAF v73 DOS03 0214 ABB1 A9 00 WTINT LDAIM WRMCLA DOS03 0211 ABAF v73 DOS03 0215 ABB3 20 D6 AB JSR CHKTUB DOS03 0211 ABAF v73 DOS03 0216 ABB6 A9 00 WRINT0 LDAIM WRMCLA DOS03 0211 ABAF v73 DOS03 0217 ABB8 20 20 B9 JSR NMICLA DOS03 0211 ABAF v73 DOS03 0218 ABBB A9 4B LDAIM &4B DOS03 0211 ABAF v73 DOS03 0219 ABBD 85 A1 INTJMP STA SAVCOM -- DOS03 0220 ABBF A9 00 LDAIM DIRLOW ;Load into dir space -- DOS03 0221 ABC1 85 A6 STA RAMADR -- DOS03 0222 ABC3 A9 0E LDAIM /(DIRLOW ) -- DOS03 0223 ABC5 85 A7 STA RAMADR + &01 -- DOS03 0224 ABC7 A9 0A LDTRYS LDAIM TRIES -- DOS03 0225 ABC9 85 A2 STA CNTA -- DOS03 0226 ABCB 60 RTS -- DOS03 0227 ABCC -- DOS03 0228 ABCC ;Check whether tube should be used -- DOS03 0229 ABCC ;Returns: -- DOS03 0230 ABCC ; Tubed => C clear,TUBFLG=$FF -- DOS03 0231 ABCC ; Untubed => C set,TUBFLG=$00 -- DOS03 0232 ABCC AD 80 10 DOADDR LDA TUBCOM -- DOS03 0233 ABCF 48 PHA ;Just takes address at LDLOW -- DOS03 0234 ABD0 AD D5 10 LDA TUBFLG -- DOS03 0235 ABD3 4C F2 AB JMP DOADD0 -- DOS03 0236 ABD6 -- DOS03 0237 ABD6 48 CHKTUB PHA ;Stores in LDLOW -- DOS03 0238 ABD7 8D 80 10 STA TUBCOM -- DOS03 0239 ABDA A5 BC LDA WORK + &02 -- DOS03 0240 ABDC 8D 72 10 STA LDLOW -- DOS03 0241 ABDF A5 BD LDA WORK + &03 -- DOS03 0242 ABE1 8D 73 10 STA LDLOW + &01 -- DOS03 0243 ABE4 AD 74 10 LDA HIWORK -- DOS03 0244 ABE7 2D 75 10 AND HIWORK + &01 -- DOS03 0245 ABEA 0D D6 10 ORA NOTUBE -- DOS03 0246 ABED 49 FF EORIM &FF -- DOS03 0247 ABEF 8D D5 10 STA TUBFLG ;Store current tube status -- DOS03 0248 ABF2 38 DOADD0 SEC -- DOS03 0249 ABF3 F0 0D BEQ CKTUB1 DOS03 0249 ABF3 v72 DOS03 0250 ABF5 20 04 AC JSR CLATUB DOS03 0249 ABF3 v72 DOS03 0251 ABF8 A2 72 LDXIM LDLOW DOS03 0249 ABF3 v72 DOS03 0252 ABFA A0 10 LDYIM /(LDLOW ) DOS03 0249 ABF3 v72 DOS03 0253 ABFC 68 PLA DOS03 0249 ABF3 v72 DOS03 0254 ABFD 48 PHA DOS03 0249 ABF3 v72 DOS03 0255 ABFE 20 06 04 JSR TUBADR DOS03 0249 ABF3 v72 DOS03 0256 AC01 18 CLC DOS03 0249 ABF3 v72 DOS03 0257 AC02 68 CKTUB1 PLA -- DOS03 0258 AC03 60 RTS -- DOS03 0259 AC04 -- DOS03 0260 AC04 ;Claim tube - if not ready hang until -- DOS03 0261 AC04 ; it is ready -- DOS03 0262 AC04 48 CLATUB PHA -- DOS03 0263 AC05 A9 C1 CLATB0 LDAIM &C0 + TUBEID ;Magic number for claim DOS03 0265 AC0A ^79 DOS03 0264 AC07 20 06 04 JSR TUBADR DOS03 0265 AC0A ^79 DOS03 0265 AC0A 90 F9 BCC CLATB0 -- DOS03 0266 AC0C 68 PLA -- DOS03 0267 AC0D 60 RTS -- DOS03 0268 AC0E -- DOS03 0269 AC0E ;Check for errors - retry if required -- DOS03 0270 AC0E ;and go onto next track if OK -- DOS03 0271 AC0E 20 A7 AC CHKGET JSR DSKRES -- DOS03 0272 AC11 D0 1F BNE CHKER1 DOS03 0272 AC11 v60 DOS03 0273 AC13 20 C7 AB JSR LDTRYS ;Reset tries counter DOS03 0272 AC11 v60 DOS03 0274 AC16 E6 CE INC TRACK DOS03 0272 AC11 v60 DOS03 0275 AC18 A9 00 LDAIM &00 DOS03 0272 AC11 v60 DOS03 0276 AC1A 85 CF STA SECTOR DOS03 0272 AC11 v60 DOS03 0277 AC1C AD 7C 10 LDA SECNO ;Update address for tube DOS03 0272 AC11 v60 DOS03 0278 AC1F 18 CLC DOS03 0272 AC11 v60 DOS03 0279 AC20 6D 73 10 ADC LDLOW + &01 DOS03 0272 AC11 v60 DOS03 0280 AC23 8D 73 10 STA LDLOW + &01 DOS03 0272 AC11 v60 DOS03 0281 AC26 90 23 BCC GETTS DOS03 0281 AC26 v5C DOS03 0282 AC28 EE 74 10 INC LDLOW + &02 DOS03 0281 AC26 v5C DOS03 0283 AC2B D0 1E BNE GETTS DOS03 0281 AC26 v5C DOS03 0284 AC2D EE 75 10 INC LDLOW + &03 DOS03 0281 AC26 v5C DOS03 0285 AC30 B0 19 BCS GETTS ;Always DOS03 0281 AC26 v5C DOS03 0286 AC32 C6 A2 CHKER1 DEC CNTA ;Too many errors ? DOS03 0281 AC26 v5C DOS03 0287 AC34 10 03 BPL CHKER4 DOS03 0281 AC26 v5C DOS03 0288 AC36 4C C7 AA JMP DKNERN DOS03 0281 AC26 v5C DOS03 0289 AC39 A0 04 CHKER4 LDYIM &04 ;Restore params DOS03 DOS03 DOS03 DOS03 Acorn macro assembler Page 19 DOS03 - DOS03 - Disk Primitives DOS03 DOS03 0281 AC26 v5C DOS03 0290 AC3B B9 40 10 CHKER2 LDAAY SAVPAR DOS03 0281 AC26 v5C DOS03 0291 AC3E 99 A3 00 STAAY READNO DOS03 0281 AC26 v5C DOS03 0292 AC41 88 DEY DOS03 0281 AC26 v5C DOS03 0293 AC42 10 F7 BPL CHKER2 DOS03 0281 AC26 v5C DOS03 0294 AC44 8A TXA ;Restore address if required DOS03 0281 AC26 v5C DOS03 0295 AC45 48 PHA DOS03 0281 AC26 v5C DOS03 0296 AC46 20 CC AB JSR DOADDR DOS03 0281 AC26 v5C DOS03 0297 AC49 68 PLA DOS03 0281 AC26 v5C DOS03 0298 AC4A AA TAX DOS03 0281 AC26 v5C DOS03 0299 AC4B DOS03 0281 AC26 v5C DOS03 0300 AC4B ;Get track and sectors DOS03 0281 AC26 v5C DOS03 0301 AC4B A5 A5 GETTS LDA READNO + &02 ;Finished ?? -- DOS03 0302 AC4D F0 42 BEQ GETTS2 DOS03 0302 AC4D v3D DOS03 0303 AC4F A0 04 LDYIM &04 ;Backup params DOS03 0302 AC4D v3D DOS03 0304 AC51 B9 A3 00 GETTS3 LDAAY READNO DOS03 0302 AC4D v3D DOS03 0305 AC54 99 40 10 STAAY SAVPAR DOS03 0302 AC4D v3D DOS03 0306 AC57 88 DEY DOS03 0302 AC4D v3D DOS03 0307 AC58 10 F7 BPL GETTS3 DOS03 0302 AC4D v3D DOS03 0308 AC5A A5 A1 LDA SAVCOM ;No - start new R/W DOS03 0302 AC4D v3D DOS03 0309 AC5C 20 92 AC JSR CMDDRV DOS03 0302 AC4D v3D DOS03 0310 AC5F A5 CE LDA TRACK DOS03 0302 AC4D v3D DOS03 0311 AC61 20 85 AC JSR DSKPAR DOS03 0302 AC4D v3D DOS03 0312 AC64 A5 CF LDA SECTOR DOS03 0302 AC4D v3D DOS03 0313 AC66 20 85 AC JSR DSKPAR DOS03 0302 AC4D v3D DOS03 0314 AC69 A9 0A LDAIM SECTRK ;Get sectors left DOS03 0302 AC4D v3D DOS03 0315 AC6B 38 SEC DOS03 0302 AC4D v3D DOS03 0316 AC6C E5 CF SBC SECTOR DOS03 0302 AC4D v3D DOS03 0317 AC6E 8D 7C 10 STA SECNO DOS03 0302 AC4D v3D DOS03 0318 AC71 A5 A5 LDA READNO + &02 DOS03 0302 AC4D v3D DOS03 0319 AC73 C9 01 CMPIM &01 ;Lots left ?? DOS03 0302 AC4D v3D DOS03 0320 AC75 D0 09 BNE GETTS0 DOS03 0302 AC4D v3D DOS03 0321 AC77 A5 A4 LDA READNO + &01 DOS03 0302 AC4D v3D DOS03 0322 AC79 F0 05 BEQ GETTS0 ;************************** DOS03 0302 AC4D v3D DOS03 0323 AC7B CD 7C 10 CMP SECNO DOS03 0302 AC4D v3D DOS03 0324 AC7E 90 03 BCC GETTS1 DOS03 0302 AC4D v3D DOS03 0325 AC80 AD 7C 10 GETTS0 LDA SECNO DOS03 0302 AC4D v3D DOS03 0326 AC83 09 20 GETTS1 ORAIM &20 ;256 Byte sectors DOS03 0302 AC4D v3D DOS03 0327 AC85 DOS03 0302 AC4D v3D DOS03 0328 AC85 ;Chuck data at disk parameter register DOS03 0302 AC4D v3D DOS03 0329 AC85 48 DSKPAR PHA DOS03 0302 AC4D v3D DOS03 0330 AC86 AD 80 FE DSKPRL LDA FDCS DOS03 0302 AC4D v3D DOS03 0331 AC89 29 20 ANDIM &20 DOS03 0302 AC4D v3D DOS03 0332 AC8B [ $emu DOS03 0302 AC4D v3D DOS03 0335 AC8B | DOS03 0302 AC4D v3D DOS03 0336 AC8B D0 F9 BNE DSKPRL DOS03 0302 AC4D v3D DOS03 0337 AC8D ] DOS03 0302 AC4D v3D DOS03 0338 AC8D 68 PLA DOS03 0302 AC4D v3D DOS03 0339 AC8E 8D 81 FE STA FDCP DOS03 0302 AC4D v3D DOS03 0340 AC91 60 GETTS2 RTS -- DOS03 0341 AC92 -- DOS03 0342 AC92 ;Send command to disk controller -- DOS03 0343 AC92 ; setting the drive bits -- DOS03 0344 AC92 48 CMDDRV PHA -- DOS03 0345 AC93 A5 CD LDA FDRIVE -- DOS03 0346 AC95 6A RORA -- DOS03 0347 AC96 68 PLA -- DOS03 0348 AC97 90 02 BCC DSKCMD DOS03 0348 AC97 v7D DOS03 0349 AC99 49 C0 EORIM &C0 DOS03 0348 AC97 v7D DOS03 0350 AC9B DOS03 0348 AC97 v7D DOS03 0351 AC9B ;Bung command at Disc Controller DOS03 0348 AC97 v7D DOS03 0352 AC9B ; commmand register DOS03 0348 AC97 v7D DOS03 0353 AC9B 2C 80 FE DSKCMD BIT FDCC DOS03 0358 AC9E ^7B DOS03 0354 AC9E [ $emu DOS03 0358 AC9E ^7B DOS03 0357 AC9E | DOS03 0358 AC9E ^7B DOS03 0358 AC9E 30 FB BMI DSKCMD -- DOS03 0359 ACA0 ] -- DOS03 0360 ACA0 8D 80 FE STA FDCC -- DOS03 0361 ACA3 60 RTS -- DOS03 0362 ACA4 -- DOS03 0363 ACA4 ; Put a sequence of commands and get a result -- DOS03 0364 ACA4 20 95 AA CMDRES JSR CMDPAR -- DOS03 0365 ACA7 ;Get result from Disc Controller result -- DOS03 0366 ACA7 ; register -- DOS03 0367 ACA7 20 AE AC DSKRES JSR DSKWAI -- DOS03 0368 ACAA AD 81 FE LDA FDCR -- DOS03 0369 ACAD 60 RTS -- DOS03 0370 ACAE -- DOS03 0371 ACAE ;Wait for disk to finish -- DOS03 0372 ACAE DSKWAI -- DOS03 0373 ACAE 2C 80 FE DSKWA0 BIT FDCS DOS03 0385 ACB6 ^76 DOS03 0374 ACB1 [ $emu DOS03 0385 ACB6 ^76 DOS03 0377 ACB1 | DOS03 0385 ACB6 ^76 DOS03 0378 ACB1 30 FB BMI DSKWA0 DOS03 0385 ACB6 ^76 DOS03 0379 ACB3 ] DOS03 0385 ACB6 ^76 DOS03 0380 ACB3 2C 80 FE BIT FDCS DOS03 0385 ACB6 ^76 DOS03 0381 ACB6 [ $emu DOS03 0385 ACB6 ^76 DOS03 0384 ACB6 | DOS03 0385 ACB6 ^76 DOS03 0385 ACB6 30 F6 BMI DSKWA0 -- DOS03 0386 ACB8 ] -- DOS03 0387 ACB8 60 RTS -- DOS03 0388 ACB9 -- DOS03 0389 ACB9 -- DOS03 0390 ACB9 ;Init FDC chip. -- DOS03 0391 ACB9 20 A4 B9 INIFDC JSR READSW ;Work out D Drives from switches -- DOS03 0392 ACBC 8A TXA -- DOS03 0393 ACBD 29 30 ANDIM &30 -- DOS03 0394 ACBF 4A LSRA -- DOS03 0395 ACC0 4A LSRA -- DOS03 0396 ACC1 85 B0 STA TEMP -- DOS03 0397 ACC3 4A LSRA -- DOS03 0398 ACC4 65 B0 ADC TEMP -- DOS03 0399 ACC6 A8 TAY -- DOS03 0400 ACC7 20 95 AA JSR CMDPAR -- DOS03 0401 ACCA A0 18 LDYIM INIDKZ - CMDTAB -- DOS03 0402 ACCC A2 03 LDXIM &03 -- DOS03 0403 ACCE 20 95 AA DSKINL JSR CMDPAR ;Init drives DOS03 0405 ACD2 ^7A DOS03 0404 ACD1 CA DEX DOS03 0405 ACD2 ^7A DOS03 0405 ACD2 D0 FA BNE DSKINL -- DOS03 0406 ACD4 ; and set the restore semaphore -- DOS03 0407 ACD4 8E 85 10 STX QSTORE ; to 0 -- DOS03 0408 ACD7 60 RTS -- DOS03 0409 ACD8 -- DOS03 0410 ACD8 -- DOS03 0411 ACD8 35 0D 02 CMDTAB = &35,&0D,&02,&08,&C0,&EA ;Tandon (pushing it) -- DOS03 0412 ACDE 35 0D 03 = &35,&0D,&03,&08,&C0,&EA ;Shugart + Tandon (easy) -- DOS03 0413 ACE4 -- DOS03 0414 ACE4 35 0D 03 = &35,&0D,&03,&08,&C7,&EA ;Teac FD55 ************ HMT -- DOS03 0415 ACEA -- DOS03 0416 ACEA 35 0D 0C = &35,&0D,&0C,&0A,&C8,&EA ;Olivetti -- DOS03 0417 ACF0 35 10 FF INIDKZ = &35,&10,&FF,&FF,&00,&EA ;Bad tracks surface 0 -- DOS03 0418 ACF6 35 18 FF = &35,&18,&FF,&FF,&00,&EA ;Bad tracks surface 1 DOS03 DOS03 DOS03 DOS03 Acorn macro assembler Page 20 DOS03 - DOS03 - Disk Primitives DOS03 -- DOS03 0419 ACFC 3A 17 C1 = &3A,&17,&C1,&EA ;Mode register setup -- DOS03 0420 AD00 69 00 EA DSKQRZ = &69,&00,&EA ;Seek track zero -- DOS03 0421 AD03 5F 00 08 CHKSPD = &5F,&00,&08,&22,&EA ;Verify secs 8,9 track 0 -- DOS03 0422 AD08 ; ******RSRTK0 = $3D,$12,$EA ; Read special register - Track # on drive 0 -- DOS03 0423 AD08 ; ******RSRTK1 = $3D,$1A,$EA ; Read special register - Track # on drive 1 -- DOS03 0424 AD08 3D 06 EA RSRSEC = &3D,&06,&EA ; Read special register - Sector number -- DOS03 0425 AD0B 7D 23 EA RSROP = &7D,&23,&EA ; Read Special Reg. - Output port -- DOS03 0426 AD0E -- DOS03 0427 AD0E -- DOS03 0428 AD0E ;Code to catch NMIs ends up here with -- DOS03 0429 AD0E ;read code inserted by default - and -- DOS03 0430 AD0E ;a write modification overlayed on top -- DOS03 0431 AD0E ;for writing - surprisingly both are -- DOS03 0432 AD0E ;the same length -- DOS03 0433 AD0E -- DOS03 0434 AD0E -- DOS03 0435 AD0E ;++++++++++++ -- DOS03 0436 AD0E ;Write to disk overlay -- DOS03 0437 AD0E AC D5 10 WRIOVR LDY TUBFLG -- DOS03 0438 AD11 F0 09 BEQ WMEBYT DOS03 0438 AD11 v76 DOS03 0439 AD13 DOS03 0438 AD11 v76 DOS03 0440 AD13 ;Load from tube to disk DOS03 0438 AD11 v76 DOS03 0441 AD13 AD E5 FE LDA TUBE DOS03 0438 AD11 v76 DOS03 0442 AD16 8D 84 FE STA FDCD DOS03 0438 AD11 v76 DOS03 0443 AD19 4C 23 0D JMP MENMI0 - RDMNMI + INTNMI DOS03 0438 AD11 v76 DOS03 0444 AD1C DOS03 0438 AD11 v76 DOS03 0445 AD1C B1 A6 WMEBYT LDAIY RAMADR ;Get data from memory -- DOS03 0446 AD1E 8D 84 FE STA FDCD ;Store to disk -- DOS03 0447 AD21 ;++++++++++++ -- DOS03 0448 AD21 -- DOS03 0449 AD21 -- DOS03 0450 AD21 ;Read from disk -- DOS03 0451 AD21 48 RDMNMI PHA ;Save A and Y -- DOS03 0452 AD22 98 TYA -- DOS03 0453 AD23 48 PHA -- DOS03 0454 AD24 AD 80 FE LDA FDCC ;Check for data ready -- DOS03 0455 AD27 29 04 ANDIM &04 -- DOS03 0456 AD29 F0 27 BEQ NMIB ;Not data DOS03 0456 AD29 v58 DOS03 0457 AD2B ;------------ DOS03 0456 AD29 v58 DOS03 0458 AD2B ;This bit gets overlayed if writing DOS03 0456 AD29 v58 DOS03 0459 AD2B NMIOVR DOS03 0456 AD29 v58 DOS03 0460 AD2B AD 84 FE LDA FDCD ;Read data off disk DOS03 0456 AD29 v58 DOS03 0461 AD2E A4 A5 LDY READNO + &02 DOS03 0456 AD29 v58 DOS03 0462 AD30 F0 1C BEQ MENMI2 DOS03 0456 AD29 v58 DOS03 0463 AD32 AC D5 10 LDY TUBFLG DOS03 0456 AD29 v58 DOS03 0464 AD35 F0 05 BEQ RMEBYT DOS03 0456 AD29 v58 DOS03 0465 AD37 DOS03 0456 AD29 v58 DOS03 0466 AD37 ;Store across tube DOS03 0456 AD29 v58 DOS03 0467 AD37 8D E5 FE STA TUBE DOS03 0456 AD29 v58 DOS03 0468 AD3A D0 08 BNE MENMI0 ;Always DOS03 0456 AD29 v58 DOS03 0469 AD3C DOS03 0456 AD29 v58 DOS03 0470 AD3C 91 A6 RMEBYT STAIY RAMADR ;Store in memory DOS03 0456 AD29 v58 DOS03 0471 AD3E ;------------ DOS03 0456 AD29 v58 DOS03 0472 AD3E E6 A6 MENMI1 INC RAMADR ;Increment address DOS03 0456 AD29 v58 DOS03 0473 AD40 D0 02 BNE MENMI0 DOS03 0456 AD29 v58 DOS03 0474 AD42 E6 A7 INC RAMADR + &01 DOS03 0456 AD29 v58 DOS03 0475 AD44 C6 A3 MENMI0 DEC READNO DOS03 0456 AD29 v58 DOS03 0476 AD46 D0 06 BNE MENMI2 DOS03 0456 AD29 v58 DOS03 0477 AD48 C6 A4 DEC READNO + &01 DOS03 0456 AD29 v58 DOS03 0478 AD4A D0 02 BNE MENMI2 DOS03 0456 AD29 v58 DOS03 0479 AD4C C6 A5 DEC READNO + &02 DOS03 0456 AD29 v58 DOS03 0480 AD4E 68 MENMI2 PLA ;Return restoring Y and A DOS03 0456 AD29 v58 DOS03 0481 AD4F A8 TAY DOS03 0456 AD29 v58 DOS03 0482 AD50 68 PLA DOS03 0456 AD29 v58 DOS03 0483 AD51 40 NOPNMI RTI DOS03 0456 AD29 v58 DOS03 0484 AD52 DOS03 0456 AD29 v58 DOS03 0485 AD52 ;Not a byte moved interupt DOS03 0456 AD29 v58 DOS03 0486 AD52 AD 80 FE NMIB LDA FDCS DOS03 0501 AD6D ^5F DOS03 0487 AD55 29 08 ANDIM &08 DOS03 0501 AD6D ^5F DOS03 0488 AD57 F0 F5 BEQ MENMI2 ;Unknown - ignore DOS03 0501 AD6D ^5F DOS03 0489 AD59 DOS03 0501 AD6D ^5F DOS03 0490 AD59 ;End of sectors - look for more DOS03 0501 AD6D ^5F DOS03 0491 AD59 A5 F4 LDA ROMID DOS03 0501 AD6D ^5F DOS03 0492 AD5B 48 PHA DOS03 0501 AD6D ^5F DOS03 0493 AD5C A9 00 MYID LDAIM &00 ;Switch ROMS DOS03 0501 AD6D ^5F DOS03 0494 AD5E 85 F4 STA ROMID DOS03 0501 AD6D ^5F DOS03 0495 AD60 8D 30 FE STA ROMSW DOS03 0501 AD6D ^5F DOS03 0496 AD63 20 0E AC JSR CHKGET DOS03 0501 AD6D ^5F DOS03 0497 AD66 68 PLA DOS03 0501 AD6D ^5F DOS03 0498 AD67 85 F4 STA ROMID DOS03 0501 AD6D ^5F DOS03 0499 AD69 8D 30 FE STA ROMSW DOS03 0501 AD6D ^5F DOS03 0500 AD6C 38 SEC DOS03 0501 AD6D ^5F DOS03 0501 AD6D B0 DF BCS MENMI2 -- DOS03 0502 AD6F -- DOS03 0503 AD6F 48 RMFNMI PHA -- DOS03 0504 AD70 98 TYA -- DOS03 0505 AD71 48 PHA -- DOS03 0506 AD72 AD 80 FE LDA FDCC -- DOS03 0507 AD75 29 04 ANDIM &04 -- DOS03 0508 AD77 F0 0D BEQ RMFNM0 DOS03 0508 AD77 v72 DOS03 0509 AD79 AD 84 FE LDA FDCD DOS03 0508 AD77 v72 DOS03 0510 AD7C A0 00 LDYIM &00 DOS03 0508 AD77 v72 DOS03 0511 AD7E 91 A6 STAIY RAMADR DOS03 0508 AD77 v72 DOS03 0512 AD80 E6 A6 INC RAMADR DOS03 0508 AD77 v72 DOS03 0513 AD82 D0 02 BNE RMFNM0 DOS03 0508 AD77 v72 DOS03 0514 AD84 E6 A7 INC RAMADR + &01 DOS03 0508 AD77 v72 DOS03 0515 AD86 68 RMFNM0 PLA -- DOS03 0516 AD87 A8 TAY -- DOS03 0517 AD88 68 PLA -- DOS03 0518 AD89 40 RTI -- DOS03 0519 AD8A -- DOS03 0520 AD8A 48 WMFNMI PHA -- DOS03 0521 AD8B 98 TYA -- DOS03 0522 AD8C 48 PHA -- DOS03 0523 AD8D AD 80 FE LDA FDCC -- DOS03 0524 AD90 29 04 ANDIM &04 -- DOS03 0525 AD92 F0 0D BEQ WMFNM0 DOS03 0525 AD92 v72 DOS03 0526 AD94 A0 00 LDYIM &00 DOS03 0525 AD92 v72 DOS03 0527 AD96 B1 A6 LDAIY RAMADR DOS03 0525 AD92 v72 DOS03 0528 AD98 8D 84 FE STA FDCD DOS03 0525 AD92 v72 DOS03 0529 AD9B E6 A6 INC RAMADR DOS03 0525 AD92 v72 DOS03 0530 AD9D D0 02 BNE WMFNM0 DOS03 0525 AD92 v72 DOS03 0531 AD9F E6 A7 INC RAMADR + &01 DOS03 0525 AD92 v72 DOS03 0532 ADA1 68 WMFNM0 PLA -- DOS03 0533 ADA2 A8 TAY -- DOS03 0534 ADA3 68 PLA -- DOS03 0535 ADA4 40 RTI -- DOS03 0536 ADA5 -- DOS03 0537 ADA5 48 RTFNMI PHA -- DOS03 0538 ADA6 AD 80 FE LDA FDCC -- DOS03 0539 ADA9 29 04 ANDIM &04 DOS03 DOS03 DOS03 DOS03 Acorn macro assembler Page 21 DOS03 - DOS03 - Disk Primitives DOS03 -- DOS03 0540 ADAB F0 06 BEQ RTFNM0 DOS03 0540 ADAB v79 DOS03 0541 ADAD AD 84 FE LDA FDCD DOS03 0540 ADAB v79 DOS03 0542 ADB0 8D E5 FE STA TUBE DOS03 0540 ADAB v79 DOS03 0543 ADB3 68 RTFNM0 PLA -- DOS03 0544 ADB4 40 RTI -- DOS03 0545 ADB5 -- DOS03 0546 ADB5 48 WTFNMI PHA -- DOS03 0547 ADB6 AD 80 FE LDA FDCC -- DOS03 0548 ADB9 29 04 ANDIM &04 -- DOS03 0549 ADBB F0 06 BEQ FNMIY DOS03 0549 ADBB v79 DOS03 0550 ADBD AD E5 FE LDA TUBE DOS03 0549 ADBB v79 DOS03 0551 ADC0 8D 84 FE STA FDCD DOS03 0549 ADBB v79 DOS03 0552 ADC3 68 FNMIY PLA -- DOS03 0553 ADC4 40 RTI -- DOS03 0554 ADC5 -- DOS03 0555 ADC5 NMIEND -- DOS03 0556 ADC5 20 DF AD TTSSER JSR DIGER1 -- DOS03 0557 ADC8 20 CF 9F JSR GSTRNG -- DOS03 0558 ADCB 00 20 61 = &00," at " -- DOS03 0559 ADD0 A5 CE LDA TRACK -- DOS03 0560 ADD2 20 DF AD JSR DIGER1 -- DOS03 0561 ADD5 20 CF 9F JSR GSTRNG -- DOS03 0562 ADD8 00 2F = &00,"/" -- DOS03 0563 ADDA A0 30 LDYIM RSRSEC-CMDTAB -- DOS03 0564 ADDC 20 A4 AC JSR CMDRES -- DOS03 0565 ADDF ; Put 2 hex digits from A at $0100,X -- DOS03 0566 ADDF 48 DIGER1 PHA -- DOS03 0567 ADE0 20 38 A1 JSR SFOUR -- DOS03 0568 ADE3 20 45 A0 JSR DIGUT1 -- DOS03 0569 ADE6 9D 00 01 STAAX &0100 -- DOS03 0570 ADE9 E8 INX -- DOS03 0571 ADEA 68 PLA -- DOS03 0572 ADEB 20 45 A0 JSR DIGUT1 -- DOS03 0573 ADEE 9D 00 01 STAAX &0100 -- DOS03 0574 ADF1 E8 INX -- DOS03 0575 ADF2 60 RTS -- DOS03 0576 ADF3 -- DOS03 0577 ADF3 -- DOS03 0578 ADF3 -- DOS03 0579 ADF3 LNK DOS04 -- DOS04 0001 ADF3 ;*** File Four *** > DOS04 -- DOS04 0002 ADF3 TTL - DOS04 - Sequential File System -- DOS04 0003 ADF3 OPT &01 -- DOS04 0004 ADF3 ;FILE 04. SEQUENTIAL FILES. -- DOS04 0005 ADF3 ;FIND,SHUT,RADR. CHECKSUMS -- DOS04 0006 ADF3 -- DOS04 0007 ADF3 ;A.C. NORMAN. DEC 79/JAN 80. -- DOS04 0008 ADF3 -- DOS04 0009 ADF3 -- DOS04 0010 ADF3 ;$ THE AFL CODE GIVEN HERE -- DOS04 0011 ADF3 ; IS AN INFORMAL GUIDE TO -- DOS04 0012 ADF3 ; HOW THE ROUTINES ARE CODED, -- DOS04 0013 ADF3 ; AND MISS OUT SOME FINE BIT- -- DOS04 0014 ADF3 ; ADJUSTING DETAILS $ -- DOS04 0015 ADF3 ;DCL VSHUT(A): -- DOS04 0016 ADF3 ; IF A=0 THEN -- DOS04 0017 ADF3 ; FOR AA FROM #20 TO #100 -- DOS04 0018 ADF3 ; STEP #20 DO VSHUT(AA) OD -- DOS04 0019 ADF3 ; ELIF SEQFLG&(CBU OR DUF)=0 -- DOS04 0020 ADF3 ; THEN CLEAR BIT IN DCBMAP -- DOS04 0021 ADF3 ; ELSE -- DOS04 0022 ADF3 ; LOOKUP(FILENAME(A)); -- DOS04 0023 ADF3 ; IF NOTFOUND THEN BRK() FI; -- DOS04 0024 ADF3 ; IF SEQFLG&DUF THEN -- DOS04 0025 ADF3 ; UPDATEDIRECTORY(); -- DOS04 0026 ADF3 ; DIROUT() FI; -- DOS04 0027 ADF3 ; FLUSHIFCBU(); -- DOS04 0028 ADF3 ; CLEAR BIT IN DCBMAP -- DOS04 0029 ADF3 ; FI; -- DOS04 0030 ADF3 -- DOS04 0031 ADF3 ;Handle limits -- DOS04 0032 ADF3 A2 11 WHLIM LDXIM &11 ;Get low handle limit -- DOS04 0033 ADF5 A0 15 LDYIM &15 ;High handle limit -- DOS04 0034 ADF7 60 SHTAL1 RTS DOS04 0045 AE08 ^6D DOS04 0035 ADF8 DOS04 0045 AE08 ^6D DOS04 0036 ADF8 ;Die my FS => close spool & exec DOS04 0045 AE08 ^6D DOS04 0037 ADF8 20 27 A3 WFDIE JSR SAVITA DOS04 0045 AE08 ^6D DOS04 0038 ADFB A9 77 LDAIM BYTECS DOS04 0045 AE08 ^6D DOS04 0039 ADFD 4C F4 FF JMP OSBYTE DOS04 0045 AE08 ^6D DOS04 0040 AE00 DOS04 0045 AE08 ^6D DOS04 0041 AE00 20 F8 AD CLOSE2 JSR WFDIE ;Kill off exec & spool DOS04 0054 AE16 ^68 DOS04 0042 AE03 A9 00 SHTALL LDAIM &00 DOS04 0054 AE16 ^68 DOS04 0043 AE05 18 SHTAL0 CLC DOS04 0054 AE16 ^68 DOS04 0044 AE06 69 20 ADCIM &20 DOS04 0054 AE16 ^68 DOS04 0045 AE08 F0 ED BEQ SHTAL1 DOS04 0054 AE16 ^68 DOS04 0046 AE0A A8 TAY DOS04 0054 AE16 ^68 DOS04 0047 AE0B 20 1B AE JSR VSHUT DOS04 0054 AE16 ^68 DOS04 0048 AE0E D0 F5 BNE SHTAL0 ;Always DOS04 0054 AE16 ^68 DOS04 0049 AE10 DOS04 0054 AE16 ^68 DOS04 0050 AE10 A9 20 WSHUT LDAIM &20 DOS04 0054 AE16 ^68 DOS04 0051 AE12 8D 86 10 STA DUFFLG ; Default value of DUFFLG DOS04 0054 AE16 ^68 DOS04 0052 AE15 DOS04 0054 AE16 ^68 DOS04 0053 AE15 98 TYA DOS04 0054 AE16 ^68 DOS04 0054 AE16 F0 E8 BEQ CLOSE2 ;Close all files -- DOS04 0055 AE18 20 0D B1 JSR DCRYCH ;Decrypt handle & check -- DOS04 0056 AE1B -- DOS04 0057 AE1B 48 VSHUT PHA -- DOS04 0058 AE1C 20 8C B0 JSR CHEEKY ;Check handle -- DOS04 0059 AE1F B0 46 BCS VSHUTQ ;Not open DOS04 0059 AE1F v39 DOS04 0060 AE21 B9 1B 11 LDAAY SEQBIT ;Close it for me DOS04 0059 AE1F v39 DOS04 0061 AE24 49 FF EORIM &FF DOS04 0059 AE1F v39 DOS04 0062 AE26 2D C0 10 AND DCBMAP DOS04 0059 AE1F v39 DOS04 0063 AE29 8D C0 10 STA DCBMAP DOS04 0059 AE1F v39 DOS04 0064 AE2C B9 17 11 LDAAY SEQFLG DOS04 0059 AE1F v39 DOS04 0065 AE2F 29 60 ANDIM &60 ; CBU+DUF DOS04 0059 AE1F v39 DOS04 0066 AE31 F0 34 BEQ VSHUTQ ;Input ] that's all folks! DOS04 0059 AE1F v39 DOS04 0067 AE33 20 6C AE JSR VLOOK DOS04 0059 AE1F v39 DOS04 0068 AE36 B9 17 11 LDAAY SEQFLG DOS04 0059 AE1F v39 DOS04 0069 AE39 2D 86 10 AND DUFFLG ; $20 for normal close, 0 for just ensure DOS04 0059 AE1F v39 DOS04 0070 AE3C F0 26 BEQ VSHDD DOS04 0059 AE1F v39 DOS04 0071 AE3E AE C3 10 LDX SEQWB ;Write back length to dir DOS04 0059 AE1F v39 DOS04 0072 AE41 B9 14 11 LDAAY SEQLLA DOS04 0059 AE1F v39 DOS04 0073 AE44 9D 0C 0F STAAX CATHIG + &04 DOS04 0059 AE1F v39 DOS04 0074 AE47 B9 15 11 LDAAY SEQLMA DOS04 0059 AE1F v39 DOS04 0075 AE4A 9D 0D 0F STAAX CATHIG + &05 DOS04 0059 AE1F v39 DOS04 0076 AE4D B9 16 11 LDAAY SEQLHA DOS04 0059 AE1F v39 DOS04 0077 AE50 20 3E A1 JSR LFOUR DOS04 0059 AE1F v39 DOS04 0078 AE53 5D 0E 0F EORAX CATHIG + &06 DOS04 0059 AE1F v39 DOS04 0079 AE56 29 30 ANDIM &30 DOS04 0059 AE1F v39 DOS04 0080 AE58 5D 0E 0F EORAX CATHIG + &06 ; 2-XOR'S DOS04 0059 AE1F v39 DOS04 0081 AE5B 9D 0E 0F STAAX CATHIG + &06 DOS04 DOS04 DOS04 DOS04 Acorn macro assembler Page 22 DOS04 - DOS04 - Sequential File System DOS04 DOS04 0059 AE1F v39 DOS04 0082 AE5E 20 3B AA JSR DIROUT ;Put dir back on disc DOS04 0059 AE1F v39 DOS04 0083 AE61 AC C2 10 LDY DCBY DOS04 0059 AE1F v39 DOS04 0084 AE64 20 B6 B1 VSHDD JSR BFLUSH ;Write buffer to disc DOS04 0059 AE1F v39 DOS04 0085 AE67 AE C5 10 VSHUTQ LDX SEQWX -- DOS04 0086 AE6A 68 PLA -- DOS04 0087 AE6B 60 RTS -- DOS04 0088 AE6C -- DOS04 0089 AE6C 20 87 AE VLOOK JSR SETQ ;Set qualif/drive -- DOS04 0090 AE6F A2 06 VLOOK3 LDXIM &06 -- DOS04 0091 AE71 B9 0C 11 VSHUTL LDAAY SEQLOK - &02 DOS04 0096 AE79 ^76 DOS04 0092 AE74 95 C5 STAAX WORK + &0B DOS04 0096 AE79 ^76 DOS04 0093 AE76 88 DEY DOS04 0096 AE79 ^76 DOS04 0094 AE77 88 DEY DOS04 0096 AE79 ^76 DOS04 0095 AE78 CA DEX DOS04 0096 AE79 ^76 DOS04 0096 AE79 10 F6 BPL VSHUTL -- DOS04 0097 AE7B 20 AC A1 JSR LOOKW ;Y:=DIRECTORY ENTRY -- DOS04 0098 AE7E 90 22 BCC DSKCHN ; DISASTER! NOT THERE DOS04 0098 AE7E v5D DOS04 0099 AE80 8C C3 10 STY SEQWB ; POINTER TO DIRECTORY DOS04 0098 AE7E v5D DOS04 0100 AE83 AC C2 10 LDY DCBY DOS04 0098 AE7E v5D DOS04 0101 AE86 60 CKSAM0 RTS DOS04 0098 AE7E v5D DOS04 0102 AE87 DOS04 0098 AE7E v5D DOS04 0103 AE87 ;Set qualifier and drive DOS04 0098 AE7E v5D DOS04 0104 AE87 B9 0E 11 SETQ LDAAY SEQLOK DOS04 0098 AE7E v5D DOS04 0105 AE8A 29 7F ANDIM &7F DOS04 0098 AE7E v5D DOS04 0106 AE8C 85 CC STA QUALIF DOS04 0098 AE7E v5D DOS04 0107 AE8E B9 17 11 LDAAY SEQFLG DOS04 0098 AE7E v5D DOS04 0108 AE91 4C 99 A6 JMP DODRIV ; may wait if transfer still going DOS04 0098 AE7E v5D DOS04 0109 AE94 DOS04 0098 AE7E v5D DOS04 0110 AE94 ;Check disk same - otherwise throw up DOS04 0098 AE7E v5D DOS04 0111 AE94 20 27 A3 CHKSAM JSR SAVITA DOS04 0098 AE7E v5D DOS04 0112 AE97 AD 04 0F LDA CYCNO DOS04 0098 AE7E v5D DOS04 0113 AE9A 20 C2 A2 JSR GETDIR DOS04 0098 AE7E v5D DOS04 0114 AE9D CD 04 0F CMP CYCNO DOS04 0098 AE7E v5D DOS04 0115 AEA0 F0 E4 BEQ CKSAM0 DOS04 0098 AE7E v5D DOS04 0116 AEA2 20 A3 9F DSKCHN JSR DSKMSG -- DOS04 0117 AEA5 C8 63 68 = DKCNUM,"changed",&00 -- DOS04 0118 AEAE -- DOS04 0119 AEAE ;VFIND OPENS A SEQUENTIAL -- DOS04 0120 AEAE ;FILE. -- DOS04 0121 AEAE ;IF C IS SET THE FILE MUST -- DOS04 0122 AEAE ;ALREADY EXIST, AND IT WILL BE -- DOS04 0123 AEAE ;SET UP FOR INPUT OR UPDATING. -- DOS04 0124 AEAE ;IF C IS CLEAR IT WILL BE SET -- DOS04 0125 AEAE ;UP FOR OUTPUT. -- DOS04 0126 AEAE ;N.B. IF FIND HAS TO CREATE A -- DOS04 0127 AEAE ;NEW FILE IT CLOBBERS THE WORK -- DOS04 0128 AEAE ;VECTOR IN SUCH A WAY THAT ITS -- DOS04 0129 AEAE ;ARG MUST NOT HAVE BEEN IN THAT -- DOS04 0130 AEAE ;AREA. -- DOS04 0131 AEAE -- DOS04 0132 AEAE -- DOS04 0133 AEAE 29 C0 WFIND ANDIM &C0 ; Top 2 bits only -- DOS04 0134 AEB0 D0 06 BNE WFIND0 DOS04 0134 AEB0 v79 DOS04 0135 AEB2 20 27 A3 JSR SAVITA DOS04 0134 AEB0 v79 DOS04 0136 AEB5 4C 10 AE JMP WSHUT DOS04 0134 AEB0 v79 DOS04 0137 AEB8 20 50 A3 WFIND0 JSR SAVIT -- DOS04 0138 AEBB 86 BA STX WORK -- DOS04 0139 AEBD 84 BB STY WORK + &01 -- DOS04 0140 AEBF 85 B4 STA ATEMP -- DOS04 0141 AEC1 24 B4 BIT ATEMP -- DOS04 0142 AEC3 08 PHP ;V flag indicates I/O -- DOS04 0143 AEC4 20 70 A0 JSR FRMNAM ; COPY NAME TO WORK VEC -- DOS04 0144 AEC7 20 FB B7 JSR CLRWLD -- DOS04 0145 AECA 20 C3 A1 JSR LOOKUP ; FIND IN DIRECTORY -- DOS04 0146 AECD B0 1A BCS NEWDCB ;File exists DOS04 0146 AECD v65 DOS04 0147 AECF 28 PLP ;File does not exist DOS04 0146 AECD v65 DOS04 0148 AED0 50 03 BVC VNEWO ;OPENOUT ] make a new one DOS04 0146 AECD v65 DOS04 0149 AED2 A9 00 LDAIM &00 ;OPENIN ] return A=0 DOS04 0146 AECD v65 DOS04 0150 AED4 60 RTS DOS04 0146 AECD v65 DOS04 0151 AED5 DOS04 0146 AECD v65 DOS04 0152 AED5 08 VNEWO PHP ;Generate new file DOS04 0146 AECD v65 DOS04 0153 AED6 A9 00 LDAIM &00 ;Clear FCB DOS04 0146 AECD v65 DOS04 0154 AED8 A2 07 LDXIM &07 DOS04 0146 AECD v65 DOS04 0155 AEDA 95 BC VNEWL STAZX WORK + &02 ;Leave name DOS04 0146 AECD v65 DOS04 0156 AEDC 9D 74 10 STAAX HIWORK DOS04 0146 AECD v65 DOS04 0157 AEDF CA DEX DOS04 0146 AECD v65 DOS04 0158 AEE0 10 F8 BPL VNEWL DOS04 0146 AECD v65 DOS04 0159 AEE2 A9 40 LDAIM DFSIZE ;Default file size(secs) DOS04 0146 AECD v65 DOS04 0160 AEE4 85 C3 STA WORK + &09 DOS04 0146 AECD v65 DOS04 0161 AEE6 20 BF A8 JSR DIRDO ;Create file DOS04 0146 AECD v65 DOS04 0162 AEE9 DOS04 0146 AECD v65 DOS04 0163 AEE9 ;Find a free DCB to use - Y points to DOS04 0146 AECD v65 DOS04 0164 AEE9 ;file in catalogue DOS04 0146 AECD v65 DOS04 0165 AEE9 28 NEWDCB PLP -- DOS04 0166 AEEA 08 PHP -- DOS04 0167 AEEB 70 03 BVS FIND3 DOS04 0167 AEEB v7C DOS04 0168 AEED 20 A8 B8 JSR CHKLOK ;Check locked if OPENOUT DOS04 0167 AEEB v7C DOS04 0169 AEF0 20 B6 AF FIND3 JSR CMPFIL ;Look for file open -- DOS04 0170 AEF3 90 0E BCC FIND1 DOS04 0170 AEF3 v71 DOS04 0171 AEF5 B9 0C 11 FIND2 LDAAY SEQRDO ;Check R/O DOS04 0170 AEF3 v71 DOS04 0172 AEF8 10 20 BPL FILOPN DOS04 0172 AEF8 v5F DOS04 0173 AEFA 24 B4 BIT ATEMP ;Check request R/O DOS04 0172 AEF8 v5F DOS04 0174 AEFC 30 1C BMI FILOPN DOS04 0172 AEF8 v5F DOS04 0175 AEFE 20 B1 AF JSR NXTFIL ;Carry on search DOS04 0172 AEF8 v5F DOS04 0176 AF01 B0 F2 BCS FIND2 DOS04 0172 AEF8 v5F DOS04 0177 AF03 AC C2 10 FIND1 LDY DCBY ;Free DCB found ?? DOS04 0172 AEF8 v5F DOS04 0178 AF06 D0 1B BNE SEQNUL DOS04 0172 AEF8 v5F DOS04 0179 AF08 DOS04 0172 AEF8 v5F DOS04 0180 AF08 20 B8 9F JSR ESTRNG DOS04 0172 AEF8 v5F DOS04 0181 AF0B C0 54 6F = TMFNUM,"Too many open",&00 DOS04 0172 AEF8 v5F DOS04 0182 AF1A 20 B8 9F FILOPN JSR ESTRNG DOS04 0178 AF06 v64 DOS04 0183 AF1D C2 4F 70 = FOPNUM,"Open",&00 DOS04 0178 AF06 v64 DOS04 0184 AF23 DOS04 0178 AF06 v64 DOS04 0185 AF23 A9 08 SEQNUL LDAIM &08 ;Copy from dir to FCB -- DOS04 0186 AF25 8D C4 10 STA SEQWC ;Counter -- DOS04 0187 AF28 BD 08 0E FILLDA LDAAX CATLOW DOS04 0195 AF3A ^6C DOS04 0188 AF2B 99 00 11 STAAY SEQMAP DOS04 0195 AF3A ^6C DOS04 0189 AF2E C8 INY DOS04 0195 AF3A ^6C DOS04 0190 AF2F BD 08 0F LDAAX CATHIG DOS04 0195 AF3A ^6C DOS04 0191 AF32 99 00 11 STAAY SEQMAP DOS04 0195 AF3A ^6C DOS04 0192 AF35 C8 INY DOS04 0195 AF3A ^6C DOS04 0193 AF36 E8 INX DOS04 0195 AF3A ^6C DOS04 0194 AF37 CE C4 10 DEC SEQWC DOS04 0195 AF3A ^6C DOS04 0195 AF3A D0 EC BNE FILLDA -- DOS04 0196 AF3C A2 10 LDXIM &10 -- DOS04 0197 AF3E A9 00 LDAIM &00 -- DOS04 0198 AF40 99 00 11 FILLDB STAAY SEQMAP DOS04 0201 AF45 ^79 DOS04 0199 AF43 C8 INY DOS04 0201 AF45 ^79 DOS04 0200 AF44 CA DEX DOS04 0201 AF45 ^79 DOS04 0201 AF45 D0 F9 BNE FILLDB ; ZERO TO 2ND HALF. -- DOS04 0202 AF47 AD C2 10 LDA DCBY DOS04 DOS04 DOS04 DOS04 Acorn macro assembler Page 23 DOS04 - DOS04 - Sequential File System DOS04 -- DOS04 0203 AF4A A8 TAY -- DOS04 0204 AF4B 20 37 A1 JSR SFIVE -- DOS04 0205 AF4E 69 11 ADCIM /(SEQMAP ) ; BUFFER ADDRESS -- DOS04 0206 AF50 99 13 11 STAAY SEQBUF -- DOS04 0207 AF53 AD C1 10 LDA DCBBIT -- DOS04 0208 AF56 99 1B 11 STAAY SEQBIT -- DOS04 0209 AF59 0D C0 10 ORA DCBMAP -- DOS04 0210 AF5C 8D C0 10 STA DCBMAP -- DOS04 0211 AF5F B9 09 11 LDAAY SEQLL -- DOS04 0212 AF62 69 FF ADCIM &FF ; carry clear because of preceeding add -- DOS04 0213 AF64 B9 0B 11 LDAAY SEQLM -- DOS04 0214 AF67 69 00 ADCIM &00 -- DOS04 0215 AF69 99 19 11 STAAY SEQEM -- DOS04 0216 AF6C B9 0D 11 LDAAY SEQLH -- DOS04 0217 AF6F 09 0F ORAIM &0F -- DOS04 0218 AF71 69 00 ADCIM &00 -- DOS04 0219 AF73 20 30 A1 JSR ISOLEN -- DOS04 0220 AF76 99 1A 11 STAAY SEQEH ; EXTENT -- DOS04 0221 AF79 28 PLP ;Get R/W status -- DOS04 0222 AF7A 50 2E BVC VFINDO ;Was new file DOS04 0222 AF7A v51 DOS04 0223 AF7C 30 08 BMI VFIND1 ;R/W DOS04 0222 AF7A v51 DOS04 0224 AF7E A9 80 LDAIM &80 ;Set R/O bit DOS04 0222 AF7A v51 DOS04 0225 AF80 19 0C 11 ORAAY SEQRDO DOS04 0222 AF7A v51 DOS04 0226 AF83 99 0C 11 STAAY SEQRDO DOS04 0222 AF7A v51 DOS04 0227 AF86 B9 09 11 VFIND1 LDAAY SEQLL ;Move length DOS04 0222 AF7A v51 DOS04 0228 AF89 99 14 11 STAAY SEQLLA DOS04 0222 AF7A v51 DOS04 0229 AF8C B9 0B 11 LDAAY SEQLM DOS04 0222 AF7A v51 DOS04 0230 AF8F 99 15 11 STAAY SEQLMA DOS04 0222 AF7A v51 DOS04 0231 AF92 B9 0D 11 LDAAY SEQLH DOS04 0222 AF7A v51 DOS04 0232 AF95 20 30 A1 JSR ISOLEN DOS04 0222 AF7A v51 DOS04 0233 AF98 99 16 11 STAAY SEQLHA DOS04 0222 AF7A v51 DOS04 0234 AF9B A5 CD VFINXX LDA FDRIVE DOS04 0222 AF7A v51 DOS04 0235 AF9D 19 17 11 ORAAY SEQFLG DOS04 0222 AF7A v51 DOS04 0236 AFA0 99 17 11 STAAY SEQFLG DOS04 0222 AF7A v51 DOS04 0237 AFA3 98 TYA DOS04 0222 AF7A v51 DOS04 0238 AFA4 20 37 A1 JSR SFIVE ;Encrypt handle DOS04 0222 AF7A v51 DOS04 0239 AFA7 09 10 ORAIM &10 DOS04 0222 AF7A v51 DOS04 0240 AFA9 60 RTS DOS04 0222 AF7A v51 DOS04 0241 AFAA DOS04 0222 AF7A v51 DOS04 0242 AFAA A9 20 VFINDO LDAIM &20 DOS04 0244 AFAF ^6A DOS04 0243 AFAC 99 17 11 STAAY SEQFLG DOS04 0244 AFAF ^6A DOS04 0244 AFAF D0 EA BNE VFINXX ;Always -- DOS04 0245 AFB1 -- DOS04 0246 AFB1 ;Find next file open -- DOS04 0247 AFB1 8A NXTFIL TXA -- DOS04 0248 AFB2 48 PHA -- DOS04 0249 AFB3 4C F5 AF JMP CMPFL1 -- DOS04 0250 AFB6 -- DOS04 0251 AFB6 ;Look for file open -- DOS04 0252 AFB6 A9 00 CMPFIL LDAIM &00 ;No free DCBs found yet -- DOS04 0253 AFB8 8D C2 10 STA DCBY -- DOS04 0254 AFBB A9 08 LDAIM &08 ;Fifth bit -- DOS04 0255 AFBD 85 B5 STA YTEMP -- DOS04 0256 AFBF 98 TYA -- DOS04 0257 AFC0 AA TAX -- DOS04 0258 AFC1 A0 A0 LDYIM &A0 ;Fifth DCB -- DOS04 0259 AFC3 84 B3 CMPFL4 STY ITEMP DOS04 0295 B007 ^3A DOS04 0260 AFC5 8A TXA DOS04 0295 B007 ^3A DOS04 0261 AFC6 48 PHA DOS04 0295 B007 ^3A DOS04 0262 AFC7 A9 08 LDAIM &08 DOS04 0295 B007 ^3A DOS04 0263 AFC9 85 B2 STA XTEMP DOS04 0295 B007 ^3A DOS04 0264 AFCB A5 B5 LDA YTEMP ;Is it alive anyway ?? DOS04 0295 B007 ^3A DOS04 0265 AFCD 2C C0 10 BIT DCBMAP DOS04 0295 B007 ^3A DOS04 0266 AFD0 F0 1D BEQ CMPFL5 ;No !! DOS04 0295 B007 ^3A DOS04 0267 AFD2 B9 17 11 LDAAY SEQFLG ;Check same drive DOS04 0295 B007 ^3A DOS04 0268 AFD5 45 CD EOR FDRIVE DOS04 0295 B007 ^3A DOS04 0269 AFD7 29 03 ANDIM &03 DOS04 0295 B007 ^3A DOS04 0270 AFD9 D0 1A BNE CMPFL1 DOS04 0295 B007 ^3A DOS04 0271 AFDB BD 08 0E CMPFL0 LDAAX CATLOW DOS04 0295 B007 ^3A DOS04 0272 AFDE 59 00 11 EORAY SEQMAP DOS04 0295 B007 ^3A DOS04 0273 AFE1 29 7F ANDIM &7F ;Knock off top bit DOS04 0295 B007 ^3A DOS04 0274 AFE3 D0 10 BNE CMPFL1 DOS04 0295 B007 ^3A DOS04 0275 AFE5 E8 INX DOS04 0295 B007 ^3A DOS04 0276 AFE6 C8 INY DOS04 0295 B007 ^3A DOS04 0277 AFE7 C8 INY DOS04 0295 B007 ^3A DOS04 0278 AFE8 C6 B2 DEC XTEMP DOS04 0295 B007 ^3A DOS04 0279 AFEA D0 EF BNE CMPFL0 DOS04 0295 B007 ^3A DOS04 0280 AFEC 38 SEC ;We have a match !! DOS04 0295 B007 ^3A DOS04 0281 AFED B0 10 BCS CMPFL2 DOS04 0295 B007 ^3A DOS04 0282 AFEF 8C C2 10 CMPFL5 STY DCBY ;Free DCB found - save for later use DOS04 0295 B007 ^3A DOS04 0283 AFF2 8D C1 10 STA DCBBIT DOS04 0295 B007 ^3A DOS04 0284 AFF5 38 CMPFL1 SEC ;Go onto next DCB DOS04 0295 B007 ^3A DOS04 0285 AFF6 A5 B3 LDA ITEMP DOS04 0295 B007 ^3A DOS04 0286 AFF8 E9 20 SBCIM &20 DOS04 0295 B007 ^3A DOS04 0287 AFFA 85 B3 STA ITEMP DOS04 0295 B007 ^3A DOS04 0288 AFFC 06 B5 ASL YTEMP DOS04 0295 B007 ^3A DOS04 0289 AFFE 18 CLC DOS04 0295 B007 ^3A DOS04 0290 AFFF 68 CMPFL2 PLA DOS04 0295 B007 ^3A DOS04 0291 B000 AA TAX DOS04 0295 B007 ^3A DOS04 0292 B001 A4 B3 LDY ITEMP DOS04 0295 B007 ^3A DOS04 0293 B003 A5 B5 LDA YTEMP DOS04 0295 B007 ^3A DOS04 0294 B005 B0 02 BCS CMPFL3 DOS04 0295 B007 ^3A DOS04 0295 B007 D0 BA BNE CMPFL4 DOS04 0294 B005 v7D DOS04 0296 B009 60 CMPFL3 RTS -- DOS04 0297 B00A -- DOS04 0298 B00A ;Ensure file/files depending on Y -- DOS04 0299 B00A 20 26 B0 ENSUR JSR WOPA DOS04 0329 B038 ^50 DOS04 0300 B00D AD C0 10 NSRNOW LDA DCBMAP ;********** HMT DOS04 0329 B038 ^50 DOS04 0301 B010 48 PHA DOS04 0329 B038 ^50 DOS04 0302 B011 DOS04 0329 B038 ^50 DOS04 0303 B011 A9 00 LDAIM &00 DOS04 0329 B038 ^50 DOS04 0304 B013 8D 86 10 STA DUFFLG ; Dont update the cat DOS04 0329 B038 ^50 DOS04 0305 B016 DOS04 0329 B038 ^50 DOS04 0306 B016 98 TYA DOS04 0329 B038 ^50 DOS04 0307 B017 D0 05 BNE ENSUR1 DOS04 0329 B038 ^50 DOS04 0308 B019 20 03 AE JSR SHTALL DOS04 0329 B038 ^50 DOS04 0309 B01C F0 03 BEQ ENSUR0 ;Always DOS04 0329 B038 ^50 DOS04 0310 B01E 20 10 AE ENSUR1 JSR WSHUT DOS04 0329 B038 ^50 DOS04 0311 B021 68 ENSUR0 PLA DOS04 0329 B038 ^50 DOS04 0312 B022 8D C0 10 STA DCBMAP DOS04 0329 B038 ^50 DOS04 0313 B025 60 RTS DOS04 0329 B038 ^50 DOS04 0314 B026 DOS04 0329 B038 ^50 DOS04 0315 B026 48 WOPA PHA DOS04 0329 B038 ^50 DOS04 0316 B027 8A TXA DOS04 0329 B038 ^50 DOS04 0317 B028 48 PHA DOS04 0329 B038 ^50 DOS04 0318 B029 A9 00 LDAIM &00 DOS04 0329 B038 ^50 DOS04 0319 B02B BA TSX DOS04 0329 B038 ^50 DOS04 0320 B02C 9D 09 01 STAAX &109 DOS04 0329 B038 ^50 DOS04 0321 B02F 68 PLA DOS04 0329 B038 ^50 DOS04 0322 B030 AA TAX DOS04 0329 B038 ^50 DOS04 0323 B031 68 PLA DOS04 DOS04 DOS04 DOS04 Acorn macro assembler Page 24 DOS04 - DOS04 - Sequential File System DOS04 DOS04 0329 B038 ^50 DOS04 0324 B032 60 RTS DOS04 0329 B038 ^50 DOS04 0325 B033 DOS04 0329 B038 ^50 DOS04 0326 B033 ;OSARGS called - only A = 0-2 supported DOS04 0329 B038 ^50 DOS04 0327 B033 20 27 A3 WARGS JSR SAVITA DOS04 0329 B038 ^50 DOS04 0328 B036 C9 FF CMPIM &FF DOS04 0329 B038 ^50 DOS04 0329 B038 F0 D0 BEQ ENSUR -- DOS04 0330 B03A C0 00 CPYIM &00 -- DOS04 0331 B03C F0 0E BEQ WARGS1 DOS04 0331 B03C v71 DOS04 0332 B03E C9 03 CMPIM &03 DOS04 0331 B03C v71 DOS04 0333 B040 B0 23 BCS WARGSR DOS04 0333 B040 v5C DOS04 0334 B042 20 26 B0 JSR WOPA DOS04 0333 B040 v5C DOS04 0335 B045 C9 01 CMPIM &01 DOS04 0333 B040 v5C DOS04 0336 B047 D0 24 BNE VRADR DOS04 0336 B047 v5B DOS04 0337 B049 4C 05 B3 JMP VSTAR DOS04 0336 B047 v5B DOS04 0338 B04C C9 02 WARGS1 CMPIM &02 DOS04 0336 B047 v5B DOS04 0339 B04E B0 15 BCS WARGSR DOS04 0336 B047 v5B DOS04 0340 B050 20 26 B0 JSR WOPA DOS04 0336 B047 v5B DOS04 0341 B053 F0 11 BEQ RDFSNO DOS04 0336 B047 v5B DOS04 0342 B055 DOS04 0336 B047 v5B DOS04 0343 B055 ;Return address of rest of command line DOS04 0336 B047 v5B DOS04 0344 B055 A9 FF LDAIM &FF DOS04 0336 B047 v5B DOS04 0345 B057 95 02 STAZX &02 DOS04 0336 B047 v5B DOS04 0346 B059 95 03 STAZX &03 DOS04 0336 B047 v5B DOS04 0347 B05B AD D9 10 LDA LINADR DOS04 0336 B047 v5B DOS04 0348 B05E 95 00 STAZX &00 DOS04 0336 B047 v5B DOS04 0349 B060 AD DA 10 LDA LINADR + &01 DOS04 0336 B047 v5B DOS04 0350 B063 95 01 STAZX &01 DOS04 0336 B047 v5B DOS04 0351 B065 60 WARGSR RTS DOS04 0336 B047 v5B DOS04 0352 B066 DOS04 0336 B047 v5B DOS04 0353 B066 ;Read filing system number DOS04 0336 B047 v5B DOS04 0354 B066 A9 04 RDFSNO LDAIM FSYSNO DOS04 0336 B047 v5B DOS04 0355 B068 BA TSX DOS04 0336 B047 v5B DOS04 0356 B069 9D 05 01 STAAX &105 DOS04 0336 B047 v5B DOS04 0357 B06C 60 RTS DOS04 0336 B047 v5B DOS04 0358 B06D DOS04 0336 B047 v5B DOS04 0359 B06D ;Read pointer and length DOS04 0336 B047 v5B DOS04 0360 B06D ; A = 0 : Read pointer DOS04 0336 B047 v5B DOS04 0361 B06D ; A = 2 : Read length DOS04 0336 B047 v5B DOS04 0362 B06D 20 0D B1 VRADR JSR DCRYCH -- DOS04 0363 B070 8C C2 10 STY DCBY -- DOS04 0364 B073 0A ASLA -- DOS04 0365 B074 6D C2 10 ADC DCBY ;C=0 FOR VALID A! -- DOS04 0366 B077 A8 TAY ; POINTS AT LOW BYTE OF DATA -- DOS04 0367 B078 B9 10 11 LDAAY SEQPL -- DOS04 0368 B07B 95 00 STAZX &00 -- DOS04 0369 B07D B9 11 11 LDAAY SEQPM -- DOS04 0370 B080 95 01 STAZX &01 -- DOS04 0371 B082 B9 12 11 LDAAY SEQPH -- DOS04 0372 B085 95 02 STAZX &02 -- DOS04 0373 B087 A9 00 LDAIM &00 ;File only 3 bytes long -- DOS04 0374 B089 95 03 STAZX &03 -- DOS04 0375 B08B 60 RTS -- DOS04 0376 B08C -- DOS04 0377 B08C -- DOS04 0378 B08C ;SAVE X,Y. VERIFY Y VALID. -- DOS04 0379 B08C 48 CHEEKY PHA -- DOS04 0380 B08D 8E C5 10 STX SEQWX -- DOS04 0381 B090 98 TYA -- DOS04 0382 B091 29 E0 ANDIM &E0 ; LOW 5 BITS MUST BE 0 -- DOS04 0383 B093 8D C2 10 STA DCBY ; FORCE THEM SO, SAVE Y -- DOS04 0384 B096 F0 13 BEQ CHEKYZ ; FAILURE DOS04 0384 B096 v6C DOS04 0385 B098 20 37 A1 JSR SFIVE DOS04 0384 B096 v6C DOS04 0386 B09B A8 TAY ; NUMBER 1 TO 7 DOS04 0384 B096 v6C DOS04 0387 B09C A9 00 LDAIM &00 DOS04 0384 B096 v6C DOS04 0388 B09E 38 SEC DOS04 0384 B096 v6C DOS04 0389 B09F 6A CHEKYA RORA DOS04 0384 B096 v6C DOS04 0390 B0A0 88 DEY DOS04 0384 B096 v6C DOS04 0391 B0A1 D0 FC BNE CHEKYA DOS04 0384 B096 v6C DOS04 0392 B0A3 ;THERE IS ONE BIT FOR EACH DOS04 0384 B096 v6C DOS04 0393 B0A3 ;POSSIBLE HANDLE. DOS04 0384 B096 v6C DOS04 0394 B0A3 AC C2 10 LDY DCBY DOS04 0384 B096 v6C DOS04 0395 B0A6 2C C0 10 BIT DCBMAP DOS04 0384 B096 v6C DOS04 0396 B0A9 D0 03 BNE CHEKYB ; OK DOS04 0384 B096 v6C DOS04 0397 B0AB 68 CHEKYZ PLA DOS04 0396 B0A9 v7C DOS04 0398 B0AC 38 SEC ; CARRY BIT INDICATES FAILURE DOS04 0396 B0A9 v7C DOS04 0399 B0AD 60 RTS DOS04 0396 B0A9 v7C DOS04 0400 B0AE 68 CHEKYB PLA -- DOS04 0401 B0AF 18 CLC ; SUCCESS -- DOS04 0402 B0B0 60 RTS -- DOS04 0403 B0B1 -- DOS04 0404 B0B1 ;Decrypt handle in X -- DOS04 0405 B0B1 48 DCRYPX PHA -- DOS04 0406 B0B2 8A TXA -- DOS04 0407 B0B3 4C B8 B0 JMP DCRYP2 -- DOS04 0408 B0B6 -- DOS04 0409 B0B6 ;Decrypt handle -- DOS04 0410 B0B6 ;Returns carry clear if OK -- DOS04 0411 B0B6 48 DCRYPT PHA -- DOS04 0412 B0B7 98 TYA -- DOS04 0413 B0B8 C9 10 DCRYP2 CMPIM &10 -- DOS04 0414 B0BA 90 04 BCC DCRYP0 DOS04 0414 B0BA v7B DOS04 0415 B0BC C9 18 CMPIM &18 DOS04 0414 B0BA v7B DOS04 0416 B0BE 90 02 BCC DCRYP1 DOS04 0414 B0BA v7B DOS04 0417 B0C0 A9 08 DCRYP0 LDAIM &08 ;Will set C and A=0 DOS04 0416 B0BE v7D DOS04 0418 B0C2 20 3D A1 DCRYP1 JSR LFIVE ;C = bit 3 -- DOS04 0419 B0C5 A8 TAY -- DOS04 0420 B0C6 68 PLA -- DOS04 0421 B0C7 60 RTS -- DOS04 0422 B0C8 -- DOS04 0423 B0C8 -- DOS04 0424 B0C8 ;END OF FILE 04. -- DOS04 0425 B0C8 -- DOS04 0426 B0C8 LNK DOS05 -- DOS05 0001 B0C8 ;*** File Five *** > DOS05 -- DOS05 0002 B0C8 TTL - DOS05 - Sequential filing system -- DOS05 0003 B0C8 ;FILE 05. SEQUENTIAL FILES. -- DOS05 0004 B0C8 -- DOS05 0005 B0C8 -- DOS05 0006 B0C8 ; HMTSPE -- DOS05 0007 B0C8 ; Closes spool/Exec file if necc. -- DOS05 0008 B0C8 ; Expects DCRYPTed handle in DCBY -- DOS05 0009 B0C8 A9 C6 HMTSPE LDAIM &C6 ; Read EXEC handle -- DOS05 0010 B0CA 20 A6 B9 JSR READBY ; Into X -- DOS05 0011 B0CD -- DOS05 0012 B0CD 8A TXA -- DOS05 0013 B0CE F0 09 BEQ HMTSP1 ; If not EXECing anyway DOS05 0013 B0CE v76 DOS05 0014 B0D0 DOS05 0013 B0CE v76 DOS05 0015 B0D0 20 EC B0 JSR HMTCMP DOS05 0013 B0CE v76 DOS05 0016 B0D3 D0 04 BNE HMTSP1 DOS05 0013 B0CE v76 DOS05 0017 B0D5 DOS05 0013 B0CE v76 DOS05 0018 B0D5 A9 C6 LDAIM &C6 ; Set the EXEC handle to 0 DOS05 DOS05 DOS05 DOS05 Acorn macro assembler Page 25 DOS05 - DOS05 - Sequential filing system DOS05 DOS05 0013 B0CE v76 DOS05 0019 B0D7 D0 0C BNE HMTBYT DOS05 0019 B0D7 v73 DOS05 0020 B0D9 DOS05 0019 B0D7 v73 DOS05 0021 B0D9 A9 C7 HMTSP1 LDAIM &C7 ; Read SPOOL handle DOS05 0019 B0D7 v73 DOS05 0022 B0DB 20 A6 B9 JSR READBY ; Into X DOS05 0019 B0D7 v73 DOS05 0023 B0DE 20 EC B0 JSR HMTCMP DOS05 0019 B0D7 v73 DOS05 0024 B0E1 D0 11 BNE HMTSP2 DOS05 0024 B0E1 v6E DOS05 0025 B0E3 DOS05 0024 B0E1 v6E DOS05 0026 B0E3 A9 C7 LDAIM &C7 ; Set the SPOOL handle to 0 DOS05 0024 B0E1 v6E DOS05 0027 B0E5 DOS05 0024 B0E1 v6E DOS05 0028 B0E5 A2 00 HMTBYT LDXIM &00 DOS05 0024 B0E1 v6E DOS05 0029 B0E7 A0 00 LDYIM &00 DOS05 0024 B0E1 v6E DOS05 0030 B0E9 4C F4 FF JMP OSBYTE DOS05 0024 B0E1 v6E DOS05 0031 B0EC DOS05 0024 B0E1 v6E DOS05 0032 B0EC 8A HMTCMP TXA DOS05 0024 B0E1 v6E DOS05 0033 B0ED A8 TAY ; Handle in Y DOS05 0024 B0E1 v6E DOS05 0034 B0EE 20 B6 B0 JSR DCRYPT DOS05 0024 B0E1 v6E DOS05 0035 B0F1 CC C2 10 CPY DCBY ; See if the same DOS05 0024 B0E1 v6E DOS05 0036 B0F4 60 HMTSP2 RTS -- DOS05 0037 B0F5 -- DOS05 0038 B0F5 -- DOS05 0039 B0F5 ;VBGET READS A CHARACTER FROM -- DOS05 0040 B0F5 ;THE SEQUENTIAL FILE INDICATED -- DOS05 0041 B0F5 ;BY Y. RETURNS WITH C SET AT -- DOS05 0042 B0F5 ;END OF FILE. FAILS IF Y WAS -- DOS05 0043 B0F5 ;BAD IN ANY WAY. -- DOS05 0044 B0F5 -- DOS05 0045 B0F5 -- DOS05 0046 B0F5 48 WFEOF PHA -- DOS05 0047 B0F6 98 TYA -- DOS05 0048 B0F7 48 PHA -- DOS05 0049 B0F8 8A TXA -- DOS05 0050 B0F9 A8 TAY -- DOS05 0051 B0FA 20 0D B1 JSR DCRYCH -- DOS05 0052 B0FD 98 TYA -- DOS05 0053 B0FE 20 77 B3 JSR PCMP -- DOS05 0054 B101 D0 04 BNE WFEOF0 DOS05 0054 B101 v7B DOS05 0055 B103 A2 FF LDXIM &FF DOS05 0054 B101 v7B DOS05 0056 B105 D0 02 BNE WFEOF2 DOS05 0054 B101 v7B DOS05 0057 B107 A2 00 WFEOF0 LDXIM &00 DOS05 0056 B105 v7D DOS05 0058 B109 68 WFEOF2 PLA -- DOS05 0059 B10A A8 TAY -- DOS05 0060 B10B 68 PLA -- DOS05 0061 B10C 60 DCRYC0 RTS DOS05 0066 B113 ^77 DOS05 0062 B10D DOS05 0066 B113 ^77 DOS05 0063 B10D ;Decrypt and check valid handle DOS05 0066 B113 ^77 DOS05 0064 B10D 20 B6 B0 DCRYCH JSR DCRYPT DOS05 0066 B113 ^77 DOS05 0065 B110 20 8C B0 JSR CHEEKY DOS05 0066 B113 ^77 DOS05 0066 B113 90 F7 BCC DCRYC0 -- DOS05 0067 B115 -- DOS05 0068 B115 20 C8 B0 WFEOF1 JSR HMTSPE ; ********* Close SPOOL | EXEC file.... HMT -- DOS05 0069 B118 20 B8 9F JSR ESTRNG -- DOS05 0070 B11B DE 43 68 = CHNNUM,"Channel",&00 -- DOS05 0071 B124 -- DOS05 0072 B124 20 B8 9F ILLEOF JSR ESTRNG DOS05 0082 B13D ^65 DOS05 0073 B127 DF 45 4F = EOFNUM,"EOF",&00 DOS05 0082 B13D ^65 DOS05 0074 B12C DOS05 0082 B13D ^65 DOS05 0075 B12C 20 50 A3 WBGET JSR SAVIT DOS05 0082 B13D ^65 DOS05 0076 B12F 20 0D B1 JSR DCRYCH ;Check handle DOS05 0082 B13D ^65 DOS05 0077 B132 98 TYA DOS05 0082 B13D ^65 DOS05 0078 B133 20 77 B3 JSR PCMP ; COMPARE P,L DOS05 0082 B13D ^65 DOS05 0079 B136 D0 13 BNE NOTEOF DOS05 0082 B13D ^65 DOS05 0080 B138 B9 17 11 LDAAY SEQFLG DOS05 0082 B13D ^65 DOS05 0081 B13B 29 10 ANDIM &10 DOS05 0082 B13D ^65 DOS05 0082 B13D D0 E5 BNE ILLEOF ; BRK ON 2ND EOF DOS05 0079 B136 v6C DOS05 0083 B13F A9 10 LDAIM &10 DOS05 0079 B136 v6C DOS05 0084 B141 20 A7 B1 JSR SETBIT DOS05 0079 B136 v6C DOS05 0085 B144 AE C5 10 LDX SEQWX DOS05 0079 B136 v6C DOS05 0086 B147 A9 FE LDAIM &FE ;Return EOF DOS05 0079 B136 v6C DOS05 0087 B149 38 SEC DOS05 0079 B136 v6C DOS05 0088 B14A 60 RTS ; RETURN WITH C=1 DOS05 0079 B136 v6C DOS05 0089 B14B B9 17 11 NOTEOF LDAAY SEQFLG -- DOS05 0090 B14E 30 0A BMI VBGETB ; BUFFER OK DOS05 0090 B14E v75 DOS05 0091 B150 20 87 AE JSR SETQ ;Set qualif/drive DOS05 0090 B14E v75 DOS05 0092 B153 20 B6 B1 JSR BFLUSH DOS05 0090 B14E v75 DOS05 0093 B156 38 SEC DOS05 0090 B14E v75 DOS05 0094 B157 20 BE B1 JSR XBLOCK ; READ NEXT BLOCK DOS05 0090 B14E v75 DOS05 0095 B15A B9 10 11 VBGETB LDAAY SEQPL ; BUFFER OFFSET -- DOS05 0096 B15D 85 BA STA WORK -- DOS05 0097 B15F B9 13 11 LDAAY SEQBUF -- DOS05 0098 B162 85 BB STA WORK + &01 ; ADDRESS IN BUFFER -- DOS05 0099 B164 A0 00 LDYIM &00 -- DOS05 0100 B166 B1 BA LDAIY WORK ; NEXT CHARACTER -- DOS05 0101 B168 48 PHA ;Save read char -- DOS05 0102 B169 AC C2 10 LDY DCBY -- DOS05 0103 B16C A6 BA LDX WORK -- DOS05 0104 B16E E8 INX -- DOS05 0105 B16F 8A TXA -- DOS05 0106 B170 99 10 11 STAAY SEQPL -- DOS05 0107 B173 D0 14 BNE VBGETX ; NO CARRY. EXIT DOS05 0107 B173 v6B DOS05 0108 B175 18 CLC DOS05 0107 B173 v6B DOS05 0109 B176 B9 11 11 LDAAY SEQPM DOS05 0107 B173 v6B DOS05 0110 B179 69 01 ADCIM &0001 DOS05 0107 B173 v6B DOS05 0111 B17B 99 11 11 STAAY SEQPM DOS05 0107 B173 v6B DOS05 0112 B17E B9 12 11 LDAAY SEQPH DOS05 0107 B173 v6B DOS05 0113 B181 69 00 ADCIM &00 DOS05 0107 B173 v6B DOS05 0114 B183 99 12 11 STAAY SEQPH DOS05 0107 B173 v6B DOS05 0115 B186 20 AC B1 JSR CLRCBF DOS05 0107 B173 v6B DOS05 0116 B189 18 VBGETX CLC -- DOS05 0117 B18A 68 PLA -- DOS05 0118 B18B 60 RTS -- DOS05 0119 B18C -- DOS05 0120 B18C 18 SETDA CLC -- DOS05 0121 B18D B9 0F 11 LDAAY SEQLOC -- DOS05 0122 B190 79 11 11 ADCAY SEQPM -- DOS05 0123 B193 85 C3 STA WORK + &09 -- DOS05 0124 B195 99 1C 11 STAAY SEQDAL ; BLOCK ADDRESS (L) -- DOS05 0125 B198 B9 0D 11 LDAAY SEQLH -- DOS05 0126 B19B 29 03 ANDIM &03 -- DOS05 0127 B19D 79 12 11 ADCAY SEQPH -- DOS05 0128 B1A0 85 C2 STA WORK + &08 -- DOS05 0129 B1A2 99 1D 11 STAAY SEQDAH ; BLOCK ADDRESS (H) -- DOS05 0130 B1A5 -- DOS05 0131 B1A5 A9 80 SETCBF LDAIM &80 -- DOS05 0132 B1A7 19 17 11 SETBIT ORAAY SEQFLG -- DOS05 0133 B1AA D0 05 BNE CLRBT3 ;Always DOS05 0133 B1AA v7A DOS05 0134 B1AC A9 7F CLRCBF LDAIM &7F DOS05 0133 B1AA v7A DOS05 0135 B1AE 39 17 11 CLRBIT ANDAY SEQFLG DOS05 0133 B1AA v7A DOS05 0136 B1B1 99 17 11 CLRBT3 STAAY SEQFLG -- DOS05 0137 B1B4 18 CLC -- DOS05 0138 B1B5 60 RTS -- DOS05 0139 B1B6 DOS05 DOS05 DOS05 DOS05 Acorn macro assembler Page 26 DOS05 - DOS05 - Sequential filing system DOS05 -- DOS05 0140 B1B6 B9 17 11 BFLUSH LDAAY SEQFLG -- DOS05 0141 B1B9 29 40 ANDIM &40 ; CBU -- DOS05 0142 B1BB F0 43 BEQ BFLX ; NOTHING TO DO DOS05 0142 B1BB v3C DOS05 0143 B1BD ;BFLUSH SHOULD ONLY BE CALLED DOS05 0142 B1BB v3C DOS05 0144 B1BD ;WHEN THE DCB IS CHECKSUM-SAFE DOS05 0142 B1BB v3C DOS05 0145 B1BD 18 CLC DOS05 0142 B1BB v3C DOS05 0146 B1BE DOS05 0142 B1BB v3C DOS05 0147 B1BE ;XBLOCK READS OR WRITES DOS05 0142 B1BB v3C DOS05 0148 B1BE ;ONE BLOCK (READ IF C=1) DOS05 0142 B1BB v3C DOS05 0149 B1BE ;BETWEEN DISC AND THE BUFFER DOS05 0142 B1BB v3C DOS05 0150 B1BE ;ASSOCIATED WITH A SEQUENTIAL DOS05 0142 B1BB v3C DOS05 0151 B1BE ;FILE. THE DISC ADDRESS IS DOS05 0142 B1BB v3C DOS05 0152 B1BE ;DERIVED FROM THE FILE'S DOS05 0142 B1BB v3C DOS05 0153 B1BE ;SEQUENTIAL POINTER FOR READS DOS05 0142 B1BB v3C DOS05 0154 B1BE ;AND FOR SEQDA FOR WRITES. DOS05 0142 B1BB v3C DOS05 0155 B1BE ;Y IDENTIFIES THE DCB. DOS05 0142 B1BB v3C DOS05 0156 B1BE 08 XBLOCK PHP ; CONTAINS R/W BIT DOS05 0142 B1BB v3C DOS05 0157 B1BF EE DD 10 INC SEQSEM ; := 0 DOS05 0142 B1BB v3C DOS05 0158 B1C2 20 31 AB JSR DRVSEL DOS05 0142 B1BB v3C DOS05 0159 B1C5 AC C2 10 LDY DCBY DOS05 0142 B1BB v3C DOS05 0160 B1C8 B9 13 11 LDAAY SEQBUF DOS05 0142 B1BB v3C DOS05 0161 B1CB 85 BD STA WORK + &03 DOS05 0142 B1BB v3C DOS05 0162 B1CD 20 98 AB JSR DETUBE ;Buffers this side of tube DOS05 0142 B1BB v3C DOS05 0163 B1D0 A9 00 LDAIM &00 DOS05 0142 B1BB v3C DOS05 0164 B1D2 85 BC STA WORK + &02 DOS05 0142 B1BB v3C DOS05 0165 B1D4 85 C0 STA WORK + &06 DOS05 0142 B1BB v3C DOS05 0166 B1D6 A9 01 LDAIM &01 DOS05 0142 B1BB v3C DOS05 0167 B1D8 85 C1 STA WORK + &07 ; LENGTH = 1 SECTOR DOS05 0142 B1BB v3C DOS05 0168 B1DA ;NOW A FAKE DIRECTORY ENTRY DOS05 0142 B1BB v3C DOS05 0169 B1DA ;HAS BEEN CREATED. USE IT TO DOS05 0142 B1BB v3C DOS05 0170 B1DA ;READ A BLOCK.... DOS05 0142 B1BB v3C DOS05 0171 B1DA 28 PLP ; ... OR WRITE ONE DOS05 0142 B1BB v3C DOS05 0172 B1DB B0 17 BCS XBLRD DOS05 0142 B1BB v3C DOS05 0173 B1DD B9 1C 11 LDAAY SEQDAL DOS05 0142 B1BB v3C DOS05 0174 B1E0 85 C3 STA WORK + &09 DOS05 0142 B1BB v3C DOS05 0175 B1E2 B9 1D 11 LDAAY SEQDAH DOS05 0142 B1BB v3C DOS05 0176 B1E5 85 C2 STA WORK + &08 DOS05 0142 B1BB v3C DOS05 0177 B1E7 20 E1 A6 JSR BLKWR ; DISC DRIVER ENTRYPOINT DOS05 0142 B1BB v3C DOS05 0178 B1EA AC C2 10 LDY DCBY DOS05 0142 B1BB v3C DOS05 0179 B1ED A9 BF LDAIM &BF DOS05 0142 B1BB v3C DOS05 0180 B1EF 20 AE B1 JSR CLRBIT DOS05 0142 B1BB v3C DOS05 0181 B1F2 90 06 BCC XBLFIN DOS05 0142 B1BB v3C DOS05 0182 B1F4 DOS05 0142 B1BB v3C DOS05 0183 B1F4 20 8C B1 XBLRD JSR SETDA ; GET DISC ADDRESS DOS05 0142 B1BB v3C DOS05 0184 B1F7 20 D3 A6 JSR BLKRD ; DISC DRIVER ENTRY DOS05 0142 B1BB v3C DOS05 0185 B1FA CE DD 10 XBLFIN DEC SEQSEM ; := FF DOS05 0142 B1BB v3C DOS05 0186 B1FD AC C2 10 LDY DCBY ;RESTORE Y BEFORE EXIT DOS05 0142 B1BB v3C DOS05 0187 B200 60 BFLX RTS -- DOS05 0188 B201 -- DOS05 0189 B201 -- DOS05 0190 B201 4C AD B8 VBPUT1 JMP DELPRT DOS05 0203 B227 ^58 DOS05 0191 B204 20 B8 9F VBPUT2 JSR ESTRNG DOS05 0203 B227 ^58 DOS05 0192 B207 C1 52 65 = RDONUM,"Read only",&00 DOS05 0203 B227 ^58 DOS05 0193 B212 DOS05 0203 B227 ^58 DOS05 0194 B212 20 27 A3 VBPUT JSR SAVITA DOS05 0203 B227 ^58 DOS05 0195 B215 4C 1E B2 JMP WBPUT1 DOS05 0203 B227 ^58 DOS05 0196 B218 DOS05 0203 B227 ^58 DOS05 0197 B218 20 27 A3 WBPUT JSR SAVITA DOS05 0203 B227 ^58 DOS05 0198 B21B 20 0D B1 JSR DCRYCH DOS05 0203 B227 ^58 DOS05 0199 B21E 48 WBPUT1 PHA DOS05 0203 B227 ^58 DOS05 0200 B21F B9 0C 11 LDAAY SEQRDO DOS05 0203 B227 ^58 DOS05 0201 B222 30 E0 BMI VBPUT2 DOS05 0203 B227 ^58 DOS05 0202 B224 B9 0E 11 LDAAY SEQLOK DOS05 0203 B227 ^58 DOS05 0203 B227 30 D8 BMI VBPUT1 ;File is locked -- DOS05 0204 B229 20 87 AE JSR SETQ -- DOS05 0205 B22C 98 TYA -- DOS05 0206 B22D 18 CLC -- DOS05 0207 B22E 69 04 ADCIM &04 -- DOS05 0208 B230 20 77 B3 JSR PCMP -- DOS05 0209 B233 D0 69 BNE NOTFUL DOS05 0209 B233 v16 DOS05 0210 B235 20 6F AE JSR VLOOK3 ;Try to extend.. DOS05 0209 B233 v16 DOS05 0211 B238 AE C3 10 LDX SEQWB DOS05 0209 B233 v16 DOS05 0212 B23B 38 SEC ;Get length of space DOS05 0209 B233 v16 DOS05 0213 B23C BD 07 0F LDAAX DIRHIG + &07 ; Low order Disc address DOS05 0209 B233 v16 DOS05 0214 B23F FD 0F 0F SBCAX CATHIG + &07 ; Low order Disc Size/Address of next file DOS05 0209 B233 v16 DOS05 0215 B242 48 PHA DOS05 0209 B233 v16 DOS05 0216 B243 BD 06 0F LDAAX DIRHIG + &06 ; Hi order length DOS05 0209 B233 v16 DOS05 0217 B246 FD 0E 0F SBCAX CATHIG + &06 ; Hi order Disc size/Address of next file DOS05 0209 B233 v16 DOS05 0218 B249 29 03 ANDIM &03 DOS05 0209 B233 v16 DOS05 0219 B24B D9 1A 11 CMPAY SEQEH DOS05 0209 B233 v16 DOS05 0220 B24E D0 1F BNE VOK ;Yes - so I can extend DOS05 0209 B233 v16 DOS05 0221 B250 68 PLA DOS05 0209 B233 v16 DOS05 0222 B251 D9 19 11 CMPAY SEQEM DOS05 0209 B233 v16 DOS05 0223 B254 D0 34 BNE VOKSPL DOS05 0209 B233 v16 DOS05 0224 B256 84 B4 STY ATEMP DOS05 0209 B233 v16 DOS05 0225 B258 ; LDAIM BYTESH ; (Dont) close SPOOL file HMT DOS05 0209 B233 v16 DOS05 0226 B258 ; JSR READBY DOS05 0209 B233 v16 DOS05 0227 B258 ; JSR DCRYPX DOS05 0209 B233 v16 DOS05 0228 B258 ; CPY ATEMP DOS05 0209 B233 v16 DOS05 0229 B258 ; BNE BPUT1 DOS05 0209 B233 v16 DOS05 0230 B258 ; JSR ZERSPH ;Tell it it doesnt exist DOS05 0209 B233 v16 DOS05 0231 B258 ; BPUT1 ; ************** LDY ATEMP ; ************** HMT DOS05 0209 B233 v16 DOS05 0232 B258 ; ************** JSR VSHUT ;No - close up and scream DOS05 0209 B233 v16 DOS05 0233 B258 ; LDA ATEMP DOS05 0209 B233 v16 DOS05 0234 B258 8C C2 10 STY DCBY DOS05 0209 B233 v16 DOS05 0235 B25B 20 C8 B0 JSR HMTSPE ; ********* Close SPOOL & EXEC files.... HMT DOS05 0209 B233 v16 DOS05 0236 B25E 20 B8 9F JSR ESTRNG DOS05 0209 B233 v16 DOS05 0237 B261 BF 43 61 = CNXNUM,"Can't extend",&00 DOS05 0209 B233 v16 DOS05 0238 B26F B9 1A 11 VOK LDAAY SEQEH ; Old Hi order length DOS05 0209 B233 v16 DOS05 0239 B272 18 CLC DOS05 0209 B233 v16 DOS05 0240 B273 69 01 ADCIM &01 ; Round up to 64k only DOS05 0209 B233 v16 DOS05 0241 B275 99 1A 11 STAAY SEQEH DOS05 0209 B233 v16 DOS05 0242 B278 0A ASLA DOS05 0209 B233 v16 DOS05 0243 B279 0A ASLA DOS05 0209 B233 v16 DOS05 0244 B27A 0A ASLA DOS05 0209 B233 v16 DOS05 0245 B27B 0A ASLA DOS05 0209 B233 v16 DOS05 0246 B27C 5D 0E 0F EORAX CATHIG + &06 DOS05 0209 B233 v16 DOS05 0247 B27F 29 30 ANDIM &30 DOS05 0209 B233 v16 DOS05 0248 B281 5D 0E 0F EORAX CATHIG + &06 DOS05 0209 B233 v16 DOS05 0249 B284 9D 0E 0F STAAX CATHIG + &06 ; Into Hi order length in catalogue DOS05 0209 B233 v16 DOS05 0250 B287 68 PLA DOS05 0209 B233 v16 DOS05 0251 B288 A9 00 LDAIM &00 ; Lo order = 0 DOS05 0209 B233 v16 DOS05 0252 B28A 9D 0D 0F VOKSPL STAAX CATHIG + &05 DOS05 0209 B233 v16 DOS05 0253 B28D 99 19 11 STAAY SEQEM DOS05 0209 B233 v16 DOS05 0254 B290 A9 00 LDAIM &00 DOS05 0209 B233 v16 DOS05 0255 B292 9D 0C 0F STAAX CATHIG + &04 DOS05 0209 B233 v16 DOS05 0256 B295 20 3B AA JSR DIROUT DOS05 0209 B233 v16 DOS05 0257 B298 20 6A B9 JSR DSKFIN DOS05 0209 B233 v16 DOS05 0258 B29B AC C2 10 LDY DCBY DOS05 0209 B233 v16 DOS05 0259 B29E B9 17 11 NOTFUL LDAAY SEQFLG -- DOS05 0260 B2A1 30 17 BMI VBPUTB ; BUFFER ALLOCATED DOS05 DOS05 DOS05 DOS05 Acorn macro assembler Page 27 DOS05 - DOS05 - Sequential filing system DOS05 DOS05 0260 B2A1 v68 DOS05 0261 B2A3 20 B6 B1 JSR BFLUSH DOS05 0260 B2A1 v68 DOS05 0262 B2A6 B9 14 11 LDAAY SEQLLA DOS05 0260 B2A1 v68 DOS05 0263 B2A9 D0 0B BNE NOTEND ; LOW(L) NE 0 DOS05 0260 B2A1 v68 DOS05 0264 B2AB 98 TYA DOS05 0260 B2A1 v68 DOS05 0265 B2AC 20 77 B3 JSR PCMP DOS05 0260 B2A1 v68 DOS05 0266 B2AF D0 05 BNE NOTEND DOS05 0260 B2A1 v68 DOS05 0267 B2B1 ; AT THE END I DO NOT HAVE DOS05 0260 B2A1 v68 DOS05 0268 B2B1 ; TO READ A SECTOR. DOS05 0260 B2A1 v68 DOS05 0269 B2B1 20 8C B1 JSR SETDA DOS05 0260 B2A1 v68 DOS05 0270 B2B4 D0 04 BNE VBPUTB DOS05 0260 B2A1 v68 DOS05 0271 B2B6 38 NOTEND SEC DOS05 0260 B2A1 v68 DOS05 0272 B2B7 20 BE B1 JSR XBLOCK ; READ BLOCK DOS05 0260 B2A1 v68 DOS05 0273 B2BA ; (EVEN THOUGH FILE BEING DOS05 0260 B2A1 v68 DOS05 0274 B2BA ;USED FOR OUTPUT) DOS05 0260 B2A1 v68 DOS05 0275 B2BA B9 10 11 VBPUTB LDAAY SEQPL -- DOS05 0276 B2BD 85 BA STA WORK -- DOS05 0277 B2BF B9 13 11 LDAAY SEQBUF -- DOS05 0278 B2C2 85 BB STA WORK + &01 -- DOS05 0279 B2C4 68 PLA -- DOS05 0280 B2C5 A0 00 LDYIM &00 -- DOS05 0281 B2C7 91 BA STAIY WORK ; CHAR -> FILE -- DOS05 0282 B2C9 AC C2 10 LDY DCBY -- DOS05 0283 B2CC A9 40 LDAIM &40 -- DOS05 0284 B2CE 20 A7 B1 JSR SETBIT ; CBU -- DOS05 0285 B2D1 E6 BA INC WORK -- DOS05 0286 B2D3 A5 BA LDA WORK -- DOS05 0287 B2D5 99 10 11 STAAY SEQPL -- DOS05 0288 B2D8 D0 13 BNE NCARRY DOS05 0288 B2D8 v6C DOS05 0289 B2DA ; HERE I HAVE CARRY FROM LOW(P) DOS05 0288 B2D8 v6C DOS05 0290 B2DA 20 AC B1 JSR CLRCBF ; SEQFLG&:=#7F DOS05 0288 B2D8 v6C DOS05 0291 B2DD B9 11 11 LDAAY SEQPM DOS05 0288 B2D8 v6C DOS05 0292 B2E0 69 01 ADCIM &0001 DOS05 0288 B2D8 v6C DOS05 0293 B2E2 99 11 11 STAAY SEQPM DOS05 0288 B2D8 v6C DOS05 0294 B2E5 B9 12 11 LDAAY SEQPH DOS05 0288 B2D8 v6C DOS05 0295 B2E8 69 00 ADCIM &00 DOS05 0288 B2D8 v6C DOS05 0296 B2EA 99 12 11 STAAY SEQPH ; P INCREMENTED DOS05 0288 B2D8 v6C DOS05 0297 B2ED 98 NCARRY TYA -- DOS05 0298 B2EE 20 77 B3 JSR PCMP -- DOS05 0299 B2F1 90 11 BCC VBPUTX ; NOT EXTENDING DOS05 0299 B2F1 v6E DOS05 0300 B2F3 A9 20 LDAIM &20 ; DUF DOS05 0299 B2F1 v6E DOS05 0301 B2F5 20 A7 B1 JSR SETBIT DOS05 0299 B2F1 v6E DOS05 0302 B2F8 A2 02 LDXIM &02 DOS05 0299 B2F1 v6E DOS05 0303 B2FA B9 10 11 VBPUT3 LDAAY SEQPL DOS05 0299 B2F1 v6E DOS05 0304 B2FD 99 14 11 STAAY SEQLLA DOS05 0299 B2F1 v6E DOS05 0305 B300 C8 INY DOS05 0299 B2F1 v6E DOS05 0306 B301 CA DEX DOS05 0299 B2F1 v6E DOS05 0307 B302 10 F6 BPL VBPUT3 DOS05 0299 B2F1 v6E DOS05 0308 B304 60 VBPUTX RTS DOS05 0367 B372 ^10 DOS05 0309 B305 DOS05 0367 B372 ^10 DOS05 0310 B305 20 27 A3 VSTAR JSR SAVITA DOS05 0367 B372 ^10 DOS05 0311 B308 20 0D B1 JSR DCRYCH DOS05 0367 B372 ^10 DOS05 0312 B30B ;NOTE THAT THE NEXT TWO DOS05 0367 B372 ^10 DOS05 0313 B30B ;COMPARISONS TREAT THINGS DOS05 0367 B372 ^10 DOS05 0314 B30B ;AS UNSIGNED INTEGERS. DOS05 0367 B372 ^10 DOS05 0315 B30B DOS05 0367 B372 ^10 DOS05 0316 B30B ;*********** JSR STEP + $04 DOS05 0367 B372 ^10 DOS05 0317 B30B ;*********** HMT, This is superflous DOS05 0367 B372 ^10 DOS05 0318 B30B DOS05 0367 B372 ^10 DOS05 0319 B30B AC C2 10 LDY DCBY DOS05 0367 B372 ^10 DOS05 0320 B30E 20 8F B3 VSTARA JSR SCMP DOS05 0367 B372 ^10 DOS05 0321 B311 B0 2F BCS VSTARB ; 0<=ARG<=LENGTH DOS05 0367 B372 ^10 DOS05 0322 B313 B9 14 11 LDAAY SEQLLA ;Set pointer to length DOS05 0367 B372 ^10 DOS05 0323 B316 99 10 11 STAAY SEQPL DOS05 0367 B372 ^10 DOS05 0324 B319 B9 15 11 LDAAY SEQLMA DOS05 0367 B372 ^10 DOS05 0325 B31C 99 11 11 STAAY SEQPM DOS05 0367 B372 ^10 DOS05 0326 B31F B9 16 11 LDAAY SEQLHA DOS05 0367 B372 ^10 DOS05 0327 B322 99 12 11 STAAY SEQPH DOS05 0367 B372 ^10 DOS05 0328 B325 20 51 B3 JSR VSTARC DOS05 0367 B372 ^10 DOS05 0329 B328 ;************************* HMT DOS05 0367 B372 ^10 DOS05 0330 B328 ; Preserve VTEMP so that BGBP works DOS05 0367 B372 ^10 DOS05 0331 B328 A5 B6 LDA VTEMP DOS05 0367 B372 ^10 DOS05 0332 B32A 48 PHA DOS05 0367 B372 ^10 DOS05 0333 B32B A5 B7 LDA VTEMP+&01 DOS05 0367 B372 ^10 DOS05 0334 B32D 48 PHA DOS05 0367 B372 ^10 DOS05 0335 B32E A5 B8 LDA VTEMP+&02 DOS05 0367 B372 ^10 DOS05 0336 B330 48 PHA DOS05 0367 B372 ^10 DOS05 0337 B331 ;************************* HMT DOS05 0367 B372 ^10 DOS05 0338 B331 A9 00 LDAIM &00 DOS05 0367 B372 ^10 DOS05 0339 B333 20 12 B2 JSR VBPUT ;Pad the file with nulls DOS05 0367 B372 ^10 DOS05 0340 B336 ;************************* HMT DOS05 0367 B372 ^10 DOS05 0341 B336 68 PLA DOS05 0367 B372 ^10 DOS05 0342 B337 85 B8 STA VTEMP+&02 DOS05 0367 B372 ^10 DOS05 0343 B339 68 PLA DOS05 0367 B372 ^10 DOS05 0344 B33A 85 B7 STA VTEMP+&01 DOS05 0367 B372 ^10 DOS05 0345 B33C 68 PLA DOS05 0367 B372 ^10 DOS05 0346 B33D 85 B6 STA VTEMP DOS05 0367 B372 ^10 DOS05 0347 B33F ;************************ HMT DOS05 0367 B372 ^10 DOS05 0348 B33F 4C 0E B3 JMP VSTARA DOS05 0367 B372 ^10 DOS05 0349 B342 B5 00 VSTARB LDAZX &00 DOS05 0367 B372 ^10 DOS05 0350 B344 99 10 11 STAAY SEQPL DOS05 0367 B372 ^10 DOS05 0351 B347 B5 01 LDAZX &01 DOS05 0367 B372 ^10 DOS05 0352 B349 99 11 11 STAAY SEQPM DOS05 0367 B372 ^10 DOS05 0353 B34C B5 02 LDAZX &02 DOS05 0367 B372 ^10 DOS05 0354 B34E 99 12 11 STAAY SEQPH ; SET P DOS05 0367 B372 ^10 DOS05 0355 B351 A9 6F VSTARC LDAIM &6F DOS05 0367 B372 ^10 DOS05 0356 B353 20 AE B1 JSR CLRBIT ; CLEAR EOF, BUFFER DOS05 0367 B372 ^10 DOS05 0357 B356 B9 0F 11 LDAAY SEQLOC DOS05 0367 B372 ^10 DOS05 0358 B359 79 11 11 ADCAY SEQPM DOS05 0367 B372 ^10 DOS05 0359 B35C 8D C4 10 STA SEQWC ; DISC ADDRESS LOW DOS05 0367 B372 ^10 DOS05 0360 B35F B9 0D 11 LDAAY SEQLH DOS05 0367 B372 ^10 DOS05 0361 B362 29 03 ANDIM &03 DOS05 0367 B372 ^10 DOS05 0362 B364 79 12 11 ADCAY SEQPH DOS05 0367 B372 ^10 DOS05 0363 B367 D9 1D 11 CMPAY SEQDAH DOS05 0367 B372 ^10 DOS05 0364 B36A D0 98 BNE VBPUTX ; DIFFERENT SECTOR DOS05 0367 B372 ^10 DOS05 0365 B36C AD C4 10 LDA SEQWC DOS05 0367 B372 ^10 DOS05 0366 B36F D9 1C 11 CMPAY SEQDAL DOS05 0367 B372 ^10 DOS05 0367 B372 D0 90 BNE VBPUTX -- DOS05 0368 B374 4C A5 B1 JMP SETCBF -- DOS05 0369 B377 -- DOS05 0370 B377 ;PCMP SETS THE COND CODES -- DOS05 0371 B377 ;ON THE BASIS OF P COMPARED -- DOS05 0372 B377 ;WITH L (IF A=Y) OR E -- DOS05 0373 B377 ;(IF A=Y+4). -- DOS05 0374 B377 AA PCMP TAX -- DOS05 0375 B378 B9 12 11 LDAAY SEQPH -- DOS05 0376 B37B DD 16 11 CMPAX SEQLHA -- DOS05 0377 B37E D0 0E BNE PCMPX DOS05 0377 B37E v71 DOS05 0378 B380 B9 11 11 LDAAY SEQPM DOS05 0377 B37E v71 DOS05 0379 B383 DD 15 11 CMPAX SEQLMA DOS05 0377 B37E v71 DOS05 0380 B386 D0 06 BNE PCMPX DOS05 0377 B37E v71 DOS05 0381 B388 B9 10 11 LDAAY SEQPL DOS05 DOS05 DOS05 DOS05 Acorn macro assembler Page 28 DOS05 - DOS05 - Sequential filing system DOS05 DOS05 0377 B37E v71 DOS05 0382 B38B DD 14 11 CMPAX SEQLLA DOS05 0377 B37E v71 DOS05 0383 B38E 60 PCMPX RTS -- DOS05 0384 B38F -- DOS05 0385 B38F ;SCMP COMPARES THE 3 BYTE -- DOS05 0386 B38F ;ARG IN PAGE 0 (POINTED AT -- DOS05 0387 B38F ;BY X) WITH L, OR WITH E -- DOS05 0388 B38F ;IF Y HAS BEEN DISPLACED BY -- DOS05 0389 B38F ;4. -- DOS05 0390 B38F B9 14 11 SCMP LDAAY SEQLLA -- DOS05 0391 B392 D5 00 CMPZX &00 -- DOS05 0392 B394 B9 15 11 LDAAY SEQLMA -- DOS05 0393 B397 F5 01 SBCZX &0001 -- DOS05 0394 B399 B9 16 11 LDAAY SEQLHA -- DOS05 0395 B39C F5 02 SBCZX &0002 -- DOS05 0396 B39E 60 RTS -- DOS05 0397 B39F -- DOS05 0398 B39F ;END OF SEQ FILE PACKAGE -- DOS05 0399 B39F -- DOS05 0400 B39F -- DOS05 0401 B39F LNK DOS06 -- DOS06 0001 B39F ;*** File Six *** > DOS06 -- DOS06 0002 B39F TTL - DOS06 - Init & Sideways interface -- DOS06 0003 B39F OPT &01 -- DOS06 0004 B39F 4C 2E 21 BOOTLD = "L.!BOOT",CR -- DOS06 0005 B3A7 -- DOS06 0006 B3A7 45 2E BOOTEX = "E." -- DOS06 0007 B3A9 21 42 4F BOOTN = "!BOOT",CR -- DOS06 0008 B3AF -- DOS06 0009 B3AF -- DOS06 0010 B3AF A5 B3 SINIT LDA ITEMP -- DOS06 0011 B3B1 20 F7 9F JSR VSTRNG -- DOS06 0012 B3B4 41 63 6F = "Acorn DFS" -- DOS06 0013 B3BD [ RAMVER * NOENAB=0 -- DOS06 0015 B3BD ] -- DOS06 0016 B3BD 0D 0D = CR,CR -- DOS06 0017 B3BF 90 02 BCC SINIT0 DOS06 0017 B3BF v7D DOS06 0018 B3C1 DOS06 0017 B3BF v7D DOS06 0019 B3C1 A9 FF INIT LDAIM &FF DOS06 0017 B3BF v7D DOS06 0020 B3C3 20 26 B0 SINIT0 JSR WOPA ;A=0 on return -- DOS06 0021 B3C6 48 PHA -- DOS06 0022 B3C7 -- DOS06 0023 B3C7 A9 06 LDAIM &06 ;Die previous FS -- DOS06 0024 B3C9 20 A0 9F JSR OSFSCM -- DOS06 0025 B3CC A2 0D LDXIM &0D ;Zap vectors @$0200 -- DOS06 0026 B3CE BD AD B9 INIT0 LDAAX VTABB DOS06 0029 B3D5 ^77 DOS06 0027 B3D1 9D 12 02 STAAX VTAB2 DOS06 0029 B3D5 ^77 DOS06 0028 B3D4 CA DEX DOS06 0029 B3D5 ^77 DOS06 0029 B3D5 10 F7 BPL INIT0 -- DOS06 0030 B3D7 A9 A8 LDAIM BYTESV -- DOS06 0031 B3D9 20 A6 B9 JSR READBY ;Get address 3 byte vectors -- DOS06 0032 B3DC 84 B1 STY TEMP + &01 -- DOS06 0033 B3DE 86 B0 STX TEMP -- DOS06 0034 B3E0 A2 07 LDXIM &0007 ;Zap them -- DOS06 0035 B3E2 A0 1B LDYIM &1B -- DOS06 0036 B3E4 B9 A0 B9 INIT1 LDAAY VTABF - &1B DOS06 0046 B3F6 ^6C DOS06 0037 B3E7 91 B0 STAIY TEMP DOS06 0046 B3F6 ^6C DOS06 0038 B3E9 C8 INY DOS06 0046 B3F6 ^6C DOS06 0039 B3EA B9 A0 B9 LDAAY VTABF - &1B DOS06 0046 B3F6 ^6C DOS06 0040 B3ED 91 B0 STAIY TEMP DOS06 0046 B3F6 ^6C DOS06 0041 B3EF C8 INY DOS06 0046 B3F6 ^6C DOS06 0042 B3F0 A5 F4 LDA ROMID DOS06 0046 B3F6 ^6C DOS06 0043 B3F2 91 B0 STAIY TEMP DOS06 0046 B3F6 ^6C DOS06 0044 B3F4 C8 INY DOS06 0046 B3F6 ^6C DOS06 0045 B3F5 CA DEX DOS06 0046 B3F6 ^6C DOS06 0046 B3F6 D0 EC BNE INIT1 -- DOS06 0047 B3F8 86 CD STX FDRIVE ;Make safe -- DOS06 0048 B3FA 8C 82 10 STY CATDRV -- DOS06 0049 B3FD 8C 83 10 STY OLDDRV -- DOS06 0050 B400 A2 0F LDXIM SWCVCL -- DOS06 0051 B402 20 A0 B9 JSR DOSWCL -- DOS06 0052 B405 20 10 B9 JSR SUSPRI ;Set up private ptr in TEMP -- DOS06 0053 B408 A0 D3 LDYIM COLDS -- DOS06 0054 B40A B1 B0 LDAIY TEMP ;Cold start ?? -- DOS06 0055 B40C 10 33 BPL INITCL DOS06 0055 B40C v4C DOS06 0056 B40E ;********************* HMT DOS06 0055 B40C v4C DOS06 0057 B40E ; Shift-Break does a cold start DOS06 0055 B40C v4C DOS06 0058 B40E 68 PLA ; Get auto boot flag DOS06 0055 B40C v4C DOS06 0059 B40F 48 PHA DOS06 0055 B40C v4C DOS06 0060 B410 F0 2F BEQ INITCL DOS06 0055 B40C v4C DOS06 0061 B412 ;******************** HMT DOS06 0055 B40C v4C DOS06 0062 B412 DOS06 0055 B40C v4C DOS06 0063 B412 ;Warm start DOS06 0055 B40C v4C DOS06 0064 B412 A0 D4 LDYIM MEMFLG ;Got memory already ? DOS06 0055 B40C v4C DOS06 0065 B414 B1 B0 LDAIY TEMP DOS06 0055 B40C v4C DOS06 0066 B416 30 4F BMI BOOTIT ;************ HMT DOS06 0066 B416 v30 DOS06 0067 B418 20 FB B8 JSR GETMEM DOS06 0066 B416 v30 DOS06 0068 B41B A0 00 LDYIM &00 ;Restore FCBs and VARS DOS06 0066 B416 v30 DOS06 0069 B41D B1 B0 INIT2 LDAIY TEMP DOS06 0066 B416 v30 DOS06 0070 B41F C0 C0 CPYIM &C0 DOS06 0066 B416 v30 DOS06 0071 B421 90 05 BCC INIT3 DOS06 0066 B416 v30 DOS06 0072 B423 99 00 10 STAAY BUFFER DOS06 0066 B416 v30 DOS06 0073 B426 B0 03 BCS INIT4 DOS06 0066 B416 v30 DOS06 0074 B428 99 00 11 INIT3 STAAY SEQMAP DOS06 0066 B416 v30 DOS06 0075 B42B 88 INIT4 DEY DOS06 0066 B416 v30 DOS06 0076 B42C D0 EF BNE INIT2 DOS06 0066 B416 v30 DOS06 0077 B42E A9 A0 LDAIM &A0 ;Make the seq files read new secs DOS06 0066 B416 v30 DOS06 0078 B430 A8 INIT6 TAY DOS06 0066 B416 v30 DOS06 0079 B431 48 PHA DOS06 0066 B416 v30 DOS06 0080 B432 A9 3F LDAIM &3F DOS06 0066 B416 v30 DOS06 0081 B434 20 AE B1 JSR CLRBIT ;Returns C clear DOS06 0066 B416 v30 DOS06 0082 B437 68 PLA DOS06 0066 B416 v30 DOS06 0083 B438 99 1D 11 STAAY SEQDAH ;Insert rubbish DOS06 0066 B416 v30 DOS06 0084 B43B E9 1F SBCIM &1F DOS06 0066 B416 v30 DOS06 0085 B43D D0 F1 BNE INIT6 DOS06 0066 B416 v30 DOS06 0086 B43F F0 26 BEQ BOOTIT ;************ HMT DOS06 0066 B416 v30 DOS06 0087 B441 ; PLA ;Remove auto-boot from stack DOS06 0066 B416 v30 DOS06 0088 B441 ; RTS DOS06 0066 B416 v30 DOS06 0089 B441 DOS06 0066 B416 v30 DOS06 0090 B441 ;Cold start DOS06 0066 B416 v30 DOS06 0091 B441 20 FB B8 INITCL JSR GETMEM ;Claim your memory DOS06 0066 B416 v30 DOS06 0092 B444 A9 24 LDAIM MASQUA ;Set up qualifiers DOS06 0066 B416 v30 DOS06 0093 B446 8D C9 10 STA DEFQUA DOS06 0066 B416 v30 DOS06 0094 B449 8D CB 10 STA LIBQUA DOS06 0066 B416 v30 DOS06 0095 B44C A0 00 LDYIM MASDSK ;Set up disks DOS06 0066 B416 v30 DOS06 0096 B44E 8C CA 10 STY DEFDSK DOS06 0066 B416 v30 DOS06 0097 B451 8C CC 10 STY LIBDSK DOS06 0066 B416 v30 DOS06 0098 B454 A0 00 LDYIM &00 DOS06 0066 B416 v30 DOS06 0099 B456 8C C0 10 STY DCBMAP ;No files at start DOS06 0066 B416 v30 DOS06 0100 B459 8C C8 10 STY NMIFLG ;Havent got NMI DOS06 0066 B416 v30 DOS06 0101 B45C DOS06 0066 B416 v30 DOS06 0102 B45C A0 FF LDYIM &FF DOS06 DOS06 DOS06 DOS06 Acorn macro assembler Page 29 DOS06 - DOS06 - Init & Sideways interface DOS06 DOS06 0066 B416 v30 DOS06 0103 B45E 8C C7 10 STY ENAFLG ;Disable ENABLE DOS06 0066 B416 v30 DOS06 0104 B461 8C C6 10 STY MONFLG ;Monitor OFF DOS06 0066 B416 v30 DOS06 0105 B464 8C DD 10 STY SEQSEM ; := FF DOS06 0066 B416 v30 DOS06 0106 B467 INIT5 DOS06 0066 B416 v30 DOS06 0107 B467 DOS06 0066 B416 v30 DOS06 0108 B467 ; Look for a tube at Warm start too DOS06 0066 B416 v30 DOS06 0109 B467 ; for the whinging swine in the 16032 grope. DOS06 0066 B416 v30 DOS06 0110 B467 ; Takes us up to 0.9h DOS06 0066 B416 v30 DOS06 0111 B467 A9 EA BOOTIT LDAIM BYTETB -- DOS06 0112 B469 20 A6 B9 JSR READBY ;Tube ?? -- DOS06 0113 B46C 8A TXA -- DOS06 0114 B46D 49 FF EORIM &FF -- DOS06 0115 B46F 8D D6 10 STA NOTUBE ;Complement of tube flag -- DOS06 0116 B472 -- DOS06 0117 B472 -- DOS06 0118 B472 ;Check for auto boot -- DOS06 0119 B472 68 PLA ;Auto-boot flag (MOS provided) -- DOS06 0120 B473 D0 0B BNE NOAUTO DOS06 0120 B473 v74 DOS06 0121 B475 20 6B AA JSR DIRLDY DOS06 0120 B473 v74 DOS06 0122 B478 DOS06 0120 B473 v74 DOS06 0123 B478 ; LDYIM $00 DOS06 0120 B473 v74 DOS06 0124 B478 ; LDXIM $00 DOS06 0120 B473 v74 DOS06 0125 B478 DOS06 0120 B473 v74 DOS06 0126 B478 AD 06 0F LDA DIRHIG + &06 ;What sort of A-Boot ? DOS06 0120 B473 v74 DOS06 0127 B47B 20 38 A1 JSR SFOUR DOS06 0120 B473 v74 DOS06 0128 B47E D0 01 BNE ABOOT2 ; ********* HMT DOS06 0120 B473 v74 DOS06 0129 B480 DOS06 0120 B473 v74 DOS06 0130 B480 ; PHA DOS06 0120 B473 v74 DOS06 0131 B480 ; LDXIM BOOTN DOS06 0120 B473 v74 DOS06 0132 B480 ; LDYIM BOOTN / DOS06 0120 B473 v74 DOS06 0133 B480 ; JSR STXYLP DOS06 0120 B473 v74 DOS06 0134 B480 ; JSR GETNAM DOS06 0120 B473 v74 DOS06 0135 B480 ; JSR LOOKUP DOS06 0120 B473 v74 DOS06 0136 B480 ; PLA DOS06 0120 B473 v74 DOS06 0137 B480 ; BCS ABOOT2 DOS06 0120 B473 v74 DOS06 0138 B480 ; JSR VSTRNG DOS06 0120 B473 v74 DOS06 0139 B480 ; = "File not found",CR,CR,$EA DOS06 0120 B473 v74 DOS06 0140 B480 DOS06 0120 B473 v74 DOS06 0141 B480 60 NOAUTO RTS DOS06 0128 B47E v7E DOS06 0142 B481 A0 B3 ABOOT2 LDYIM /(BOOTLD ) -- DOS06 0143 B483 A2 9F LDXIM BOOTLD -- DOS06 0144 B485 C9 02 CMPIM &02 -- DOS06 0145 B487 90 08 BCC ABOOT3 DOS06 0145 B487 v77 DOS06 0146 B489 F0 04 BEQ ARUN DOS06 0145 B487 v77 DOS06 0147 B48B [ BOOTEX - BOOTLD :SHR: 8=0 DOS06 0145 B487 v77 DOS06 0148 B48B | DOS06 0145 B487 v77 DOS06 0150 B48B ] DOS06 0145 B487 v77 DOS06 0151 B48B A2 A7 LDXIM BOOTEX ;EXEC !BOOT DOS06 0145 B487 v77 DOS06 0152 B48D [ BOOTEX :SHL: 8=0 DOS06 0145 B487 v77 DOS06 0154 B48D | DOS06 0145 B487 v77 DOS06 0155 B48D D0 02 BNE ABOOT3 DOS06 0145 B487 v77 DOS06 0156 B48F ] DOS06 0145 B487 v77 DOS06 0157 B48F ARUN DOS06 0145 B487 v77 DOS06 0158 B48F [ BOOTN - BOOTLD :SHR: 8=0 DOS06 0145 B487 v77 DOS06 0159 B48F | DOS06 0145 B487 v77 DOS06 0161 B48F ] DOS06 0145 B487 v77 DOS06 0162 B48F A2 A9 LDXIM BOOTN ;RUN !BOOT DOS06 0145 B487 v77 DOS06 0163 B491 4C F7 FF ABOOT3 JMP OSCLI -- DOS06 0164 B494 -- DOS06 0165 B494 ;Called from MOS as a sways ROM -- DOS06 0166 B494 CALLED -- DOS06 0167 B494 [ RAMGO=0 -- DOS06 0175 B494 ] -- DOS06 0176 B494 ;*************************************************** -- DOS06 0177 B494 ; FRUGALITY -- DOS06 0178 B494 ; Now the mod for frugal ROMs -- DOS06 0179 B494 48 PHA -- DOS06 0180 B495 -- DOS06 0181 B495 AD 80 FE LDA FDCS -- DOS06 0182 B498 29 03 ANDIM &03 ; These should be 0 if there's an 8271 -- DOS06 0183 B49A [ $emu -- DOS06 0186 B49A | -- DOS06 0187 B49A D0 4D BNE FRUGAL ; If no 8271 DOS06 0187 B49A v32 DOS06 0188 B49C ] DOS06 0187 B49A v32 DOS06 0189 B49C DOS06 0187 B49A v32 DOS06 0190 B49C BD F0 0D LDAAX PRIPTR ; Get the private ptr DOS06 0187 B49A v32 DOS06 0191 B49F 0A ASLA ;using bit6 in table DOS06 0187 B49A v32 DOS06 0192 B4A0 30 47 BMI FRUGAL ; a PLA : RTS DOS06 0187 B49A v32 DOS06 0193 B4A2 DOS06 0187 B49A v32 DOS06 0194 B4A2 68 PLA DOS06 0187 B49A v32 DOS06 0195 B4A3 ;************************************************** DOS06 0187 B49A v32 DOS06 0196 B4A3 C9 01 CMPIM SWCIN1 ;1st pass memory alloc. DOS06 0187 B49A v32 DOS06 0197 B4A5 D0 07 BNE SAVPRI DOS06 0187 B49A v32 DOS06 0198 B4A7 DOS06 0187 B49A v32 DOS06 0199 B4A7 ;Power up - grab memory DOS06 0187 B49A v32 DOS06 0200 B4A7 C0 17 CPYIM &17 ;I take up to page $17 DOS06 0187 B49A v32 DOS06 0201 B4A9 B0 02 BCS SAVSP0 DOS06 0187 B49A v32 DOS06 0202 B4AB A0 17 LDYIM &17 DOS06 0187 B49A v32 DOS06 0203 B4AD 60 SAVSP0 RTS DOS06 0187 B49A v32 DOS06 0204 B4AE DOS06 0187 B49A v32 DOS06 0205 B4AE ;Save private memory DOS06 0187 B49A v32 DOS06 0206 B4AE C9 02 SAVPRI CMPIM SWCIN2 DOS06 0187 B49A v32 DOS06 0207 B4B0 D0 39 BNE PMSG DOS06 0187 B49A v32 DOS06 0208 B4B2 48 PHA DOS06 0187 B49A v32 DOS06 0209 B4B3 98 TYA DOS06 0187 B49A v32 DOS06 0210 B4B4 48 PHA ; Old Y on the stack DOS06 0187 B49A v32 DOS06 0211 B4B5 DOS06 0187 B49A v32 DOS06 0212 B4B5 85 B1 STA TEMP + &01 DOS06 0187 B49A v32 DOS06 0213 B4B7 DOS06 0187 B49A v32 DOS06 0214 B4B7 ; In storing my private pointer, I must preserve the top bit DOS06 0187 B49A v32 DOS06 0215 B4B7 ; as it refers to the NFS' frugalization DOS06 0187 B49A v32 DOS06 0216 B4B7 0A ASLA ; Remove top bit DOS06 0187 B49A v32 DOS06 0217 B4B8 1E F0 0D ASLAX PRIPTR ; Old Top bit -> C DOS06 0187 B49A v32 DOS06 0218 B4BB 6A RORA ; Insert old top bit DOS06 0187 B49A v32 DOS06 0219 B4BC 9D F0 0D STAAX PRIPTR DOS06 0187 B49A v32 DOS06 0220 B4BF DOS06 0187 B49A v32 DOS06 0221 B4BF A9 00 LDAIM &00 ;Indicate cold start next DOS06 0187 B49A v32 DOS06 0222 B4C1 85 B0 STA TEMP DOS06 0187 B49A v32 DOS06 0223 B4C3 DOS06 0187 B49A v32 DOS06 0224 B4C3 ;***************** HMT DOS06 0187 B49A v32 DOS06 0225 B4C3 ; Preserve status over Soft-Break DOS06 0187 B49A v32 DOS06 0226 B4C3 A9 FD LDAIM &FD ; Read reset type DOS06 0187 B49A v32 DOS06 0227 B4C5 20 A6 B9 JSR READBY DOS06 0187 B49A v32 DOS06 0228 B4C8 CA DEX DOS06 0187 B49A v32 DOS06 0229 B4C9 ; X was 0 => A = FF, X 1 => A = 0, X 2 => A = 1 DOS06 0187 B49A v32 DOS06 0230 B4C9 ; So X=0 => Soft reset => A is MI, else A is PL DOS06 0187 B49A v32 DOS06 0231 B4C9 DOS06 0187 B49A v32 DOS06 0232 B4C9 8A TXA DOS06 0187 B49A v32 DOS06 0233 B4CA A0 D3 LDYIM COLDS ;Cold start DOS06 0187 B49A v32 DOS06 0234 B4CC 31 B0 ANDIY TEMP DOS06 0187 B49A v32 DOS06 0235 B4CE ; So if it was cold it stays cold DOS06 DOS06 DOS06 DOS06 Acorn macro assembler Page 30 DOS06 - DOS06 - Init & Sideways interface DOS06 DOS06 0187 B49A v32 DOS06 0236 B4CE ; If it was warm it is altered maybe DOS06 0187 B49A v32 DOS06 0237 B4CE DOS06 0187 B49A v32 DOS06 0238 B4CE 91 B0 STAIY TEMP DOS06 0187 B49A v32 DOS06 0239 B4D0 08 PHP DOS06 0187 B49A v32 DOS06 0240 B4D1 C8 INY ; So Y -> MEMFLG DOS06 0187 B49A v32 DOS06 0241 B4D2 28 PLP DOS06 0187 B49A v32 DOS06 0242 B4D3 10 07 BPL NOTGOT ; If a cold start, don't save anything DOS06 0187 B49A v32 DOS06 0243 B4D5 DOS06 0187 B49A v32 DOS06 0244 B4D5 B1 B0 LDAIY TEMP ; Get MEMFLG, MI if we've got Memory DOS06 0187 B49A v32 DOS06 0245 B4D7 10 03 BPL NOTGOT ; If we've not got it! DOS06 0187 B49A v32 DOS06 0246 B4D9 DOS06 0187 B49A v32 DOS06 0247 B4D9 ; We've got RAM, so save the contents DOS06 0187 B49A v32 DOS06 0248 B4D9 20 9B A7 JSR SAVMEM DOS06 0187 B49A v32 DOS06 0249 B4DC DOS06 0187 B49A v32 DOS06 0250 B4DC A9 00 NOTGOT LDAIM &00 ; So we dont have memory.... DOS06 0187 B49A v32 DOS06 0251 B4DE 91 B0 STAIY TEMP DOS06 0187 B49A v32 DOS06 0252 B4E0 DOS06 0187 B49A v32 DOS06 0253 B4E0 [ &00=0 DOS06 0187 B49A v32 DOS06 0254 B4E0 20 B9 AC JSR INIFDC ;************* HMT DOS06 0187 B49A v32 DOS06 0255 B4E3 ; Very dubious doing this here! DOS06 0187 B49A v32 DOS06 0256 B4E3 ] DOS06 0187 B49A v32 DOS06 0257 B4E3 DOS06 0187 B49A v32 DOS06 0258 B4E3 A6 F4 LDX ROMID ; Recover X ; ************* HMT DOS06 0187 B49A v32 DOS06 0259 B4E5 68 PLA DOS06 0187 B49A v32 DOS06 0260 B4E6 A8 TAY DOS06 0187 B49A v32 DOS06 0261 B4E7 C8 INY DOS06 0187 B49A v32 DOS06 0262 B4E8 C8 INY ; 2 private pages ***** HMT DOS06 0187 B49A v32 DOS06 0263 B4E9 68 FRUGAL PLA DOS06 0207 B4B0 v46 DOS06 0264 B4EA 60 ABOOT1 RTS DOS06 0207 B4B0 v46 DOS06 0265 B4EB DOS06 0207 B4B0 v46 DOS06 0266 B4EB ;From here on nothing is returned in DOS06 0207 B4B0 v46 DOS06 0267 B4EB ; X or Y so do a SAVITA now - calls DOS06 0207 B4B0 v46 DOS06 0268 B4EB ;that need to set A=0 use WOPA DOS06 0207 B4B0 v46 DOS06 0269 B4EB DOS06 0207 B4B0 v46 DOS06 0270 B4EB 20 27 A3 PMSG JSR SAVITA DOS06 0281 B4FE ^6A DOS06 0271 B4EE C9 03 CMPIM SWCIN3 DOS06 0281 B4FE ^6A DOS06 0272 B4F0 D0 16 BNE CHKCOM DOS06 0272 B4F0 v69 DOS06 0273 B4F2 DOS06 0272 B4F0 v69 DOS06 0274 B4F2 ;Auto boot ? - Check & do if required DOS06 0272 B4F0 v69 DOS06 0275 B4F2 84 B3 STY ITEMP DOS06 0272 B4F0 v69 DOS06 0276 B4F4 A9 7A LDAIM BYTEKS ;Magic number (kbd scan) DOS06 0272 B4F0 v69 DOS06 0277 B4F6 20 F4 FF JSR OSBYTE DOS06 0272 B4F0 v69 DOS06 0278 B4F9 8A TXA DOS06 0272 B4F0 v69 DOS06 0279 B4FA 30 09 BMI ABOOT0 DOS06 0272 B4F0 v69 DOS06 0280 B4FC C9 32 CMPIM &32 ;'D' would you believe? DOS06 0272 B4F0 v69 DOS06 0281 B4FE D0 EA BNE ABOOT1 DOS06 0272 B4F0 v69 DOS06 0282 B500 A9 78 LDAIM BYTECK ;Cancel the D DOS06 0272 B4F0 v69 DOS06 0283 B502 20 F4 FF JSR OSBYTE DOS06 0272 B4F0 v69 DOS06 0284 B505 4C AF B3 ABOOT0 JMP SINIT DOS06 0272 B4F0 v69 DOS06 0285 B508 DOS06 0272 B4F0 v69 DOS06 0286 B508 ;Check for '*DISC' or '*DISK' DOS06 0272 B4F0 v69 DOS06 0287 B508 C9 04 CHKCOM CMPIM SWCLIN -- DOS06 0288 B50A D0 05 BNE INIFSY DOS06 0288 B50A v7A DOS06 0289 B50C A2 71 LDXIM INITBL - COMTAB - &03 DOS06 0288 B50A v7A DOS06 0290 B50E 4C A8 A5 DHELP0 JMP WNAME0 DOS06 0305 B526 ^66 DOS06 0291 B511 DOS06 0305 B526 ^66 DOS06 0292 B511 ;Init filing system Y DOS06 0305 B526 ^66 DOS06 0293 B511 C9 12 INIFSY CMPIM SWCIFS DOS06 0305 B526 ^66 DOS06 0294 B513 D0 07 BNE DOHELP DOS06 0305 B526 ^66 DOS06 0295 B515 C0 04 CPYIM FSYSNO DOS06 0305 B526 ^66 DOS06 0296 B517 D0 3C BNE INIFSR DOS06 0296 B517 v43 DOS06 0297 B519 4C C1 B3 JMP INIT DOS06 0296 B517 v43 DOS06 0298 B51C DOS06 0296 B517 v43 DOS06 0299 B51C ;Do help DOS06 0296 B517 v43 DOS06 0300 B51C C9 09 DOHELP CMPIM SWCHLP DOS06 0296 B517 v43 DOS06 0301 B51E D0 10 BNE RELMEM DOS06 0296 B517 v43 DOS06 0302 B520 B1 F2 LDAIY LINPTR DOS06 0296 B517 v43 DOS06 0303 B522 A2 9E LDXIM HLPTAB - COMTAB - &03 DOS06 0296 B517 v43 DOS06 0304 B524 C9 0D CMPIM CR DOS06 0296 B517 v43 DOS06 0305 B526 D0 E6 BNE DHELP0 ;Something on command line ? DOS06 0296 B517 v43 DOS06 0306 B528 98 TYA DOS06 0296 B517 v43 DOS06 0307 B529 E8 INX DOS06 0296 B517 v43 DOS06 0308 B52A E8 INX DOS06 0296 B517 v43 DOS06 0309 B52B A0 02 LDYIM HLPNO DOS06 0296 B517 v43 DOS06 0310 B52D 4C 27 BA JMP HELP1 DOS06 0296 B517 v43 DOS06 0311 B530 DOS06 0296 B517 v43 DOS06 0312 B530 ;Release memory DOS06 0296 B517 v43 DOS06 0313 B530 20 26 B0 RELMEM JSR WOPA ;Here on A=0 if responded to DOS06 0296 B517 v43 DOS06 0314 B533 C9 0A CMPIM SWCCME DOS06 0296 B517 v43 DOS06 0315 B535 D0 1F BNE UNKWRD DOS06 0296 B517 v43 DOS06 0316 B537 DOS06 0296 B517 v43 DOS06 0317 B537 20 10 B9 JSR SUSPRI ;Have I got mem anyway DOS06 0296 B517 v43 DOS06 0318 B53A A0 D4 LDYIM MEMFLG DOS06 0296 B517 v43 DOS06 0319 B53C B1 B0 LDAIY TEMP DOS06 0296 B517 v43 DOS06 0320 B53E 10 0F BPL UNKSWA ;De wop A DOS06 0296 B517 v43 DOS06 0321 B540 DOS06 0296 B517 v43 DOS06 0322 B540 A0 00 LDYIM &00 DOS06 0296 B517 v43 DOS06 0323 B542 20 0D B0 JSR NSRNOW ;Write files to disk (Y=0) ;*********** HMT DOS06 0296 B517 v43 DOS06 0324 B545 ; Preserves (TEMP) DOS06 0296 B517 v43 DOS06 0325 B545 DOS06 0296 B517 v43 DOS06 0326 B545 20 9B A7 JSR SAVMEM ; Save the private store DOS06 0296 B517 v43 DOS06 0327 B548 ; Preserves (TEMP) DOS06 0296 B517 v43 DOS06 0328 B548 DOS06 0296 B517 v43 DOS06 0329 B548 A0 D4 LDYIM MEMFLG ;Tell me I don't have it DOS06 0296 B517 v43 DOS06 0330 B54A A9 00 LDAIM &00 DOS06 0296 B517 v43 DOS06 0331 B54C 91 B0 STAIY TEMP DOS06 0296 B517 v43 DOS06 0332 B54E 60 RTS DOS06 0296 B517 v43 DOS06 0333 B54F DOS06 0296 B517 v43 DOS06 0334 B54F DOS06 0296 B517 v43 DOS06 0335 B54F A9 0A UNKSWA LDAIM &0A ; For RC= $0A to DeWop OK! *********** HMT DOS06 0296 B517 v43 DOS06 0336 B551 DOS06 0296 B517 v43 DOS06 0337 B551 ;Patent de woping rountine DOS06 0296 B517 v43 DOS06 0338 B551 BA UNKSWZ TSX DOS06 0296 B517 v43 DOS06 0339 B552 9D 05 01 STAAX &105 DOS06 0296 B517 v43 DOS06 0340 B555 60 INIFSR RTS DOS06 0315 B535 v60 DOS06 0341 B556 DOS06 0315 B535 v60 DOS06 0342 B556 ;Unknown OSWORD call DOS06 0315 B535 v60 DOS06 0343 B556 C9 08 UNKWRD CMPIM SWCWRD DOS06 0349 B560 ^6F DOS06 0344 B558 D0 F7 BNE UNKSWZ DOS06 0349 B560 ^6F DOS06 0345 B55A DOS06 0349 B560 ^6F DOS06 0346 B55A A4 EF LDY WORDA DOS06 0349 B560 ^6F DOS06 0347 B55C 30 F3 BMI UNKSWZ DOS06 0349 B560 ^6F DOS06 0348 B55E C0 7D CPYIM &7D DOS06 0349 B560 ^6F DOS06 0349 B560 90 EF BCC UNKSWZ ; Reject other than my calls now -- DOS06 0350 B562 -- DOS06 0351 B562 A6 F0 LDX WORDX ;Copy WORDX Y into TEMP -- DOS06 0352 B564 86 B0 STX TEMP -- DOS06 0353 B566 A6 F1 LDX WORDY -- DOS06 0354 B568 86 B1 STX TEMP + &01 -- DOS06 0355 B56A -- DOS06 0356 B56A C8 INY ;Disk size DOS06 DOS06 DOS06 DOS06 Acorn macro assembler Page 31 DOS06 - DOS06 - Init & Sideways interface DOS06 -- DOS06 0357 B56B 10 4B BPL GTDSKS ; If $7E or $7D DOS06 0357 B56B v34 DOS06 0358 B56D DOS06 0357 B56B v34 DOS06 0359 B56D ; $7F Send command to disk controller DOS06 0357 B56B v34 DOS06 0360 B56D ; DOS06 0357 B56B v34 DOS06 0361 B56D ;XY Points to DOS06 0357 B56B v34 DOS06 0362 B56D ; + $00 : Disk (if required) DOS06 0357 B56B v34 DOS06 0363 B56D ; + $01 : Address DOS06 0357 B56B v34 DOS06 0364 B56D ; + $05 : Number of params DOS06 0357 B56B v34 DOS06 0365 B56D ; + $06 : Command DOS06 0357 B56B v34 DOS06 0366 B56D ; + $07]: Parameters DOS06 0357 B56B v34 DOS06 0367 B56D ; DOS06 0357 B56B v34 DOS06 0368 B56D ;Result returned at end of params DOS06 0357 B56B v34 DOS06 0369 B56D 58 RWTS CLI DOS06 0357 B56B v34 DOS06 0370 B56E ; This to allow type ahead while in the OSWORD e.g. for CPM wallies DOS06 0357 B56B v34 DOS06 0371 B56E ; Its OK here as I've finished with WORDA,X and Y DOS06 0357 B56B v34 DOS06 0372 B56E A0 00 LDYIM &00 DOS06 0357 B56B v34 DOS06 0373 B570 B1 B0 LDAIY TEMP DOS06 0357 B56B v34 DOS06 0374 B572 30 03 BMI RWTS2 ;If top bit of disk set - skip DOS06 0357 B56B v34 DOS06 0375 B574 20 99 A6 JSR DODRIV DOS06 0357 B56B v34 DOS06 0376 B577 20 31 AB RWTS2 JSR DRVSEL DOS06 0357 B56B v34 DOS06 0377 B57A C8 INY DOS06 0357 B56B v34 DOS06 0378 B57B A2 02 LDXIM &02 DOS06 0357 B56B v34 DOS06 0379 B57D 20 50 A0 JSR SHFTBO DOS06 0357 B56B v34 DOS06 0380 B580 B1 B0 LDAIY TEMP ;Get number of pars DOS06 0357 B56B v34 DOS06 0381 B582 C8 INY DOS06 0357 B56B v34 DOS06 0382 B583 48 PHA DOS06 0357 B56B v34 DOS06 0383 B584 B1 B0 LDAIY TEMP ;Get command DOS06 0357 B56B v34 DOS06 0384 B586 48 PHA DOS06 0357 B56B v34 DOS06 0385 B587 20 92 AC JSR CMDDRV DOS06 0357 B56B v34 DOS06 0386 B58A 68 PLA DOS06 0357 B56B v34 DOS06 0387 B58B 20 38 A1 JSR SFOUR ;Bit 4 determines R/W on NMI DOS06 0357 B56B v34 DOS06 0388 B58E 29 01 ANDIM &01 DOS06 0357 B56B v34 DOS06 0389 B590 20 D6 AB JSR CHKTUB DOS06 0357 B56B v34 DOS06 0390 B593 2A ROLA ;Work out what to do on NMI DOS06 0357 B56B v34 DOS06 0391 B594 69 03 ADCIM WTFCLA DOS06 0357 B56B v34 DOS06 0392 B596 20 20 B9 JSR NMICLA DOS06 0357 B56B v34 DOS06 0393 B599 A5 BC LDA WORK + &02 DOS06 0357 B56B v34 DOS06 0394 B59B 85 A6 STA RAMADR DOS06 0357 B56B v34 DOS06 0395 B59D A5 BD LDA WORK + &03 DOS06 0357 B56B v34 DOS06 0396 B59F 85 A7 STA RAMADR + &01 DOS06 0357 B56B v34 DOS06 0397 B5A1 A0 07 LDYIM &07 DOS06 0357 B56B v34 DOS06 0398 B5A3 68 PLA ;Get number of params DOS06 0357 B56B v34 DOS06 0399 B5A4 AA TAX DOS06 0357 B56B v34 DOS06 0400 B5A5 F0 09 BEQ RWTS1 DOS06 0357 B56B v34 DOS06 0401 B5A7 B1 B0 RWTS0 LDAIY TEMP DOS06 0357 B56B v34 DOS06 0402 B5A9 20 85 AC JSR DSKPAR DOS06 0357 B56B v34 DOS06 0403 B5AC C8 INY DOS06 0357 B56B v34 DOS06 0404 B5AD CA DEX DOS06 0357 B56B v34 DOS06 0405 B5AE D0 F7 BNE RWTS0 DOS06 0357 B56B v34 DOS06 0406 B5B0 20 A7 AC RWTS1 JSR DSKRES ;Get result DOS06 0357 B56B v34 DOS06 0407 B5B3 91 B0 STAIY TEMP DOS06 0357 B56B v34 DOS06 0408 B5B5 4C FC A6 JMP NMTREL DOS06 0357 B56B v34 DOS06 0409 B5B8 DOS06 0357 B56B v34 DOS06 0410 B5B8 20 C3 A9 GTDSKS JSR SETDEF -- DOS06 0411 B5BB 20 C2 A2 JSR GETDIR -- DOS06 0412 B5BE C8 INY -- DOS06 0413 B5BF 30 08 BMI GETDSZ ; If it was $7E DOS06 0413 B5BF v77 DOS06 0414 B5C1 DOS06 0413 B5BF v77 DOS06 0415 B5C1 ; $7D Get cycle number DOS06 0413 B5BF v77 DOS06 0416 B5C1 ; DOS06 0413 B5BF v77 DOS06 0417 B5C1 ;Result returned at XY DOS06 0413 B5BF v77 DOS06 0418 B5C1 A0 00 LDYIM &00 DOS06 0413 B5BF v77 DOS06 0419 B5C3 AD 04 0F LDA CYCNO DOS06 0413 B5BF v77 DOS06 0420 B5C6 91 B0 STAIY TEMP DOS06 0413 B5BF v77 DOS06 0421 B5C8 60 RTS DOS06 0413 B5BF v77 DOS06 0422 B5C9 DOS06 0413 B5BF v77 DOS06 0423 B5C9 ; $7E Get disk size DOS06 0413 B5BF v77 DOS06 0424 B5C9 ; DOS06 0413 B5BF v77 DOS06 0425 B5C9 ;4 Byte result returned at XY DOS06 0413 B5BF v77 DOS06 0426 B5C9 A9 00 GETDSZ LDAIM &00 ;No units -- DOS06 0427 B5CB A8 TAY -- DOS06 0428 B5CC 91 B0 STAIY TEMP -- DOS06 0429 B5CE C8 INY -- DOS06 0430 B5CF AD 07 0F LDA DIRHIG + &07 -- DOS06 0431 B5D2 91 B0 STAIY TEMP -- DOS06 0432 B5D4 C8 INY -- DOS06 0433 B5D5 AD 06 0F LDA DIRHIG + &06 -- DOS06 0434 B5D8 29 03 ANDIM &03 -- DOS06 0435 B5DA 91 B0 STAIY TEMP -- DOS06 0436 B5DC C8 INY -- DOS06 0437 B5DD A9 00 LDAIM &00 ;I claimed it -- DOS06 0438 B5DF 91 B0 STAIY TEMP ;High order zero too -- DOS06 0439 B5E1 60 GTLDR0 RTS -- DOS06 0440 B5E2 -- DOS06 0441 B5E2 ;OSFILE call -- DOS06 0442 B5E2 20 50 A3 WFILE JSR SAVIT -- DOS06 0443 B5E5 48 PHA -- DOS06 0444 B5E6 20 FB B7 JSR CLRWLD -- DOS06 0445 B5E9 86 B0 STX TEMP -- DOS06 0446 B5EB 8E DB 10 STX FCBADR -- DOS06 0447 B5EE 84 B1 STY TEMP + &01 -- DOS06 0448 B5F0 8C DC 10 STY FCBADR + &01 -- DOS06 0449 B5F3 A2 00 LDXIM &00 -- DOS06 0450 B5F5 A0 00 LDYIM &00 -- DOS06 0451 B5F7 20 60 A0 JSR SHFTTW -- DOS06 0452 B5FA 20 50 A0 WFILE4 JSR SHFTBO DOS06 0454 B5FF ^79 DOS06 0453 B5FD C0 12 CPYIM &12 DOS06 0454 B5FF ^79 DOS06 0454 B5FF D0 F9 BNE WFILE4 -- DOS06 0455 B601 68 PLA -- DOS06 0456 B602 AA TAX -- DOS06 0457 B603 E8 INX -- DOS06 0458 B604 E0 08 CPXIM FILJPH - FILJPL -- DOS06 0459 B606 B0 08 BCS WFILE3 DOS06 0459 B606 v77 DOS06 0460 B608 BD EA B9 LDAAX FILJPH DOS06 0459 B606 v77 DOS06 0461 B60B 48 PHA DOS06 0459 B606 v77 DOS06 0462 B60C BD E2 B9 LDAAX FILJPL DOS06 0459 B606 v77 DOS06 0463 B60F 48 PHA DOS06 0459 B606 v77 DOS06 0464 B610 A9 00 WFILE3 LDAIM &00 ; A NOP for bad commands ********** HMT DOS06 0469 B615 ^79 DOS06 0465 B612 60 RTS DOS06 0469 B615 ^79 DOS06 0466 B613 DOS06 0469 B615 ^79 DOS06 0467 B613 ;File handler call - check & jump out DOS06 0469 B615 ^79 DOS06 0468 B613 C9 09 WFSCM CMPIM FSCHTB - FSCLTB DOS06 0469 B615 ^79 DOS06 0469 B615 B0 F9 BCS WFILE3 -- DOS06 0470 B617 86 B5 STX YTEMP -- DOS06 0471 B619 AA TAX -- DOS06 0472 B61A BD D9 B9 LDAAX FSCHTB -- DOS06 0473 B61D 48 PHA -- DOS06 0474 B61E BD D0 B9 LDAAX FSCLTB -- DOS06 0475 B621 48 PHA -- DOS06 0476 B622 8A TXA -- DOS06 0477 B623 A6 B5 LDX YTEMP DOS06 DOS06 DOS06 DOS06 Acorn macro assembler Page 32 DOS06 - DOS06 - Init & Sideways interface DOS06 -- DOS06 0478 B625 60 WBGPBR RTS DOS06 0496 B628 ^7B DOS06 0479 B626 DOS06 0496 B628 ^7B DOS06 0480 B626 ;Multiple BGET or BPUT - total fudge DOS06 0496 B628 ^7B DOS06 0481 B626 ;XY points to: DOS06 0496 B628 ^7B DOS06 0482 B626 ; + $00 Handle DOS06 0496 B628 ^7B DOS06 0483 B626 ; + $01 Address to put to/get from DOS06 0496 B628 ^7B DOS06 0484 B626 ; + $05 No bytes to do DOS06 0496 B628 ^7B DOS06 0485 B626 ; + $09 Optional pointer DOS06 0496 B628 ^7B DOS06 0486 B626 ; DOS06 0496 B628 ^7B DOS06 0487 B626 ;A = 1 Put using pointer DOS06 0496 B628 ^7B DOS06 0488 B626 ;A = 2 Put ignoring pointer DOS06 0496 B628 ^7B DOS06 0489 B626 ;A = 3 Get using pointer DOS06 0496 B628 ^7B DOS06 0490 B626 ;A = 4 Get ignoring pointer DOS06 0496 B628 ^7B DOS06 0491 B626 ;A = 5 Read drive,title,cyc,opt DOS06 0496 B628 ^7B DOS06 0492 B626 ;A = 6 Read dir DOS06 0496 B628 ^7B DOS06 0493 B626 ;A = 7 Read lib DOS06 0496 B628 ^7B DOS06 0494 B626 ;A = 8 Read file names DOS06 0496 B628 ^7B DOS06 0495 B626 C9 09 WBGPB CMPIM WGPTBH - WGPTBL DOS06 0496 B628 ^7B DOS06 0496 B628 B0 FB BCS WBGPBR -- DOS06 0497 B62A 20 27 A3 JSR SAVITA -- DOS06 0498 B62D 20 26 B0 JSR WOPA ;Zero A on return -- DOS06 0499 B630 8E 7D 10 STX BTEMP -- DOS06 0500 B633 8C 7E 10 STY BTEMP + &01 -- DOS06 0501 B636 A8 TAY -- DOS06 0502 B637 20 40 B6 JSR WBREST -- DOS06 0503 B63A 08 PHP -- DOS06 0504 B63B 20 FF A6 JSR RELTUB -- DOS06 0505 B63E 28 PLP -- DOS06 0506 B63F 60 RTS -- DOS06 0507 B640 -- DOS06 0508 B640 B9 07 BA WBREST LDAAY WGPTBL -- DOS06 0509 B643 8D D7 10 STA QTEMP -- DOS06 0510 B646 B9 10 BA LDAAY WGPTBH -- DOS06 0511 B649 8D D8 10 STA QTEMP + &01 -- DOS06 0512 B64C B9 19 BA LDAAY WBRWTB -- DOS06 0513 B64F 4A LSRA -- DOS06 0514 B650 08 PHP -- DOS06 0515 B651 4A LSRA -- DOS06 0516 B652 08 PHP ;Pointer flag in C -- DOS06 0517 B653 8D 7F 10 STA CTEMP -- DOS06 0518 B656 20 B2 B7 JSR MAKATP -- DOS06 0519 B659 A0 0C LDYIM &0C ;Move into work -- DOS06 0520 B65B B1 B4 WBGPB0 LDAIY ATEMP DOS06 0523 B661 ^78 DOS06 0521 B65D 99 60 10 STAAY DOSRAM DOS06 0523 B661 ^78 DOS06 0522 B660 88 DEY DOS06 0523 B661 ^78 DOS06 0523 B661 10 F8 BPL WBGPB0 -- DOS06 0524 B663 AD 63 10 LDA DOSRAM + &03 -- DOS06 0525 B666 2D 64 10 AND DOSRAM + &04 -- DOS06 0526 B669 0D D6 10 ORA NOTUBE -- DOS06 0527 B66C 18 CLC -- DOS06 0528 B66D 69 01 ADCIM &01 -- DOS06 0529 B66F F0 06 BEQ WBGPBA DOS06 0529 B66F v79 DOS06 0530 B671 ; Now claim the tube so it works with the net DOS06 0529 B66F v79 DOS06 0531 B671 20 04 AC JSR CLATUB DOS06 0529 B66F v79 DOS06 0532 B674 18 CLC ; Carry must be clear DOS06 0529 B66F v79 DOS06 0533 B675 DOS06 0529 B66F v79 DOS06 0534 B675 A9 FF LDAIM &FF DOS06 0529 B66F v79 DOS06 0535 B677 8D 81 10 WBGPBA STA TUMFLG -- DOS06 0536 B67A AD 7F 10 LDA CTEMP -- DOS06 0537 B67D B0 07 BCS WBGPB9 DOS06 0537 B67D v78 DOS06 0538 B67F A2 61 LDXIM DOSRAM + &01 DOS06 0537 B67D v78 DOS06 0539 B681 A0 10 LDYIM /(DOSRAM + &01 ) DOS06 0537 B67D v78 DOS06 0540 B683 20 06 04 JSR TUBADR DOS06 0537 B67D v78 DOS06 0541 B686 28 WBGPB9 PLP -- DOS06 0542 B687 B0 04 BCS WBGPBB DOS06 0542 B687 v7B DOS06 0543 B689 28 PLP DOS06 0542 B687 v7B DOS06 0544 B68A 6C D7 10 QJMI JMI QTEMP ;Indirect jump @QTEMP DOS06 0542 B687 v7B DOS06 0545 B68D A2 03 WBGPBB LDXIM &03 -- DOS06 0546 B68F BD 69 10 WBGPB8 LDAAX DOSRAM + &09 DOS06 0549 B695 ^78 DOS06 0547 B692 95 B6 STAAX VTEMP DOS06 0549 B695 ^78 DOS06 0548 B694 CA DEX DOS06 0549 B695 ^78 DOS06 0549 B695 10 F8 BPL WBGPB8 -- DOS06 0550 B697 A2 B6 LDXIM VTEMP -- DOS06 0551 B699 AC 60 10 LDY DOSRAM -- DOS06 0552 B69C A9 00 LDAIM &00 -- DOS06 0553 B69E 28 PLP -- DOS06 0554 B69F B0 03 BCS WBGPB1 DOS06 0554 B69F v7C DOS06 0555 B6A1 20 05 B3 JSR VSTAR ;Set pointer DOS06 0554 B69F v7C DOS06 0556 B6A4 20 6D B0 WBGPB1 JSR VRADR ;Read pointer -- DOS06 0557 B6A7 A2 03 LDXIM &03 -- DOS06 0558 B6A9 B5 B6 WBGPB7 LDAAX VTEMP DOS06 0561 B6AF ^78 DOS06 0559 B6AB 9D 69 10 STAAX DOSRAM + &09 DOS06 0561 B6AF ^78 DOS06 0560 B6AE CA DEX DOS06 0561 B6AF ^78 DOS06 0561 B6AF 10 F8 BPL WBGPB7 -- DOS06 0562 B6B1 20 A4 B7 WCBAT0 JSR COMWRK DOS06 0601 B6F3 ^3C DOS06 0563 B6B4 30 0D BMI WBGPB4 DOS06 0601 B6F3 ^3C DOS06 0564 B6B6 AC 60 10 WBGPB3 LDY DOSRAM DOS06 0601 B6F3 ^3C DOS06 0565 B6B9 20 8A B6 JSR QJMI DOS06 0601 B6F3 ^3C DOS06 0566 B6BC B0 0D BCS WBGPB6 DOS06 0601 B6F3 ^3C DOS06 0567 B6BE A2 09 LDXIM &09 ;Increment pointer DOS06 0601 B6F3 ^3C DOS06 0568 B6C0 20 98 B7 JSR ZERINC DOS06 0601 B6F3 ^3C DOS06 0569 B6C3 A2 05 WBGPB4 LDXIM &05 ;Increment counter DOS06 0601 B6F3 ^3C DOS06 0570 B6C5 20 98 B7 JSR ZERINC DOS06 0601 B6F3 ^3C DOS06 0571 B6C8 D0 EC BNE WBGPB3 DOS06 0601 B6F3 ^3C DOS06 0572 B6CA 18 CLC ;Legal exit - clear C DOS06 0601 B6F3 ^3C DOS06 0573 B6CB 08 WBGPB6 PHP DOS06 0601 B6F3 ^3C DOS06 0574 B6CC 20 A4 B7 JSR COMWRK ;Make sense of counter DOS06 0601 B6F3 ^3C DOS06 0575 B6CF A2 05 LDXIM &05 DOS06 0601 B6F3 ^3C DOS06 0576 B6D1 20 98 B7 JSR ZERINC DOS06 0601 B6F3 ^3C DOS06 0577 B6D4 A0 0C LDYIM &0C ;Move back DOS06 0601 B6F3 ^3C DOS06 0578 B6D6 20 B2 B7 JSR MAKATP DOS06 0601 B6F3 ^3C DOS06 0579 B6D9 B9 60 10 WBGPB5 LDAAY DOSRAM DOS06 0601 B6F3 ^3C DOS06 0580 B6DC 91 B4 STAIY ATEMP DOS06 0601 B6F3 ^3C DOS06 0581 B6DE 88 DEY DOS06 0601 B6F3 ^3C DOS06 0582 B6DF 10 F8 BPL WBGPB5 DOS06 0601 B6F3 ^3C DOS06 0583 B6E1 28 PLP DOS06 0601 B6F3 ^3C DOS06 0584 B6E2 60 RTS DOS06 0601 B6F3 ^3C DOS06 0585 B6E3 DOS06 0601 B6F3 ^3C DOS06 0586 B6E3 ;Read catalogue entries DOS06 0601 B6F3 ^3C DOS06 0587 B6E3 ; + $00 Cycle number DOS06 0601 B6F3 ^3C DOS06 0588 B6E3 ; + $01 Address DOS06 0601 B6F3 ^3C DOS06 0589 B6E3 ; + $05 Number to move DOS06 0601 B6F3 ^3C DOS06 0590 B6E3 ; + $09 Last handle (00 to start) DOS06 0601 B6F3 ^3C DOS06 0591 B6E3 ; DOS06 0601 B6F3 ^3C DOS06 0592 B6E3 ;Returns DOS06 0601 B6F3 ^3C DOS06 0593 B6E3 ; DOS06 0601 B6F3 ^3C DOS06 0594 B6E3 DOS06 0601 B6F3 ^3C DOS06 0595 B6E3 20 C3 A9 WCBAT JSR SETDEF ;Read directory DOS06 0601 B6F3 ^3C DOS06 0596 B6E6 20 5F AA JSR DIRLD DOS06 0601 B6F3 ^3C DOS06 0597 B6E9 A9 F5 LDAIM WCBATR ;Set up loop vector DOS06 0601 B6F3 ^3C DOS06 0598 B6EB 8D D7 10 STA QTEMP DOS06 DOS06 DOS06 DOS06 Acorn macro assembler Page 33 DOS06 - DOS06 - Init & Sideways interface DOS06 DOS06 0601 B6F3 ^3C DOS06 0599 B6EE A9 B6 LDAIM /(WCBATR ) DOS06 0601 B6F3 ^3C DOS06 0600 B6F0 8D D8 10 STA QTEMP + &01 DOS06 0601 B6F3 ^3C DOS06 0601 B6F3 D0 BC BNE WCBAT0 -- DOS06 0602 B6F5 -- DOS06 0603 B6F5 AC 69 10 WCBATR LDY DOSRAM + &09 ;Get previous number -- DOS06 0604 B6F8 CC 05 0F WCBAT4 CPY DIRLEN ;End of cat ? DOS06 0614 B710 ^66 DOS06 0605 B6FB B0 28 BCS WCBAT2 DOS06 0605 B6FB v57 DOS06 0606 B6FD B9 0F 0E LDAAY MODIFY ;Check qual same DOS06 0605 B6FB v57 DOS06 0607 B700 20 66 A2 JSR CAPS DOS06 0605 B6FB v57 DOS06 0608 B703 45 CC EOR QUALIF DOS06 0605 B6FB v57 DOS06 0609 B705 B0 02 BCS WCBAT5 DOS06 0605 B6FB v57 DOS06 0610 B707 29 DF ANDIM &DF DOS06 0605 B6FB v57 DOS06 0611 B709 29 7F WCBAT5 ANDIM &7F DOS06 0605 B6FB v57 DOS06 0612 B70B F0 05 BEQ WCBAT3 DOS06 0605 B6FB v57 DOS06 0613 B70D 20 7C A6 JSR STEP ;Get next DOS06 0605 B6FB v57 DOS06 0614 B710 D0 E6 BNE WCBAT4 DOS06 0605 B6FB v57 DOS06 0615 B712 A9 07 WCBAT3 LDAIM &07 ;Filename seven long DOS06 0605 B6FB v57 DOS06 0616 B714 20 C6 B7 JSR WBWRIT DOS06 0605 B6FB v57 DOS06 0617 B717 85 B0 STA TEMP ;Copy filename DOS06 0605 B6FB v57 DOS06 0618 B719 B9 08 0E WCBAT1 LDAAY CATLOW DOS06 0605 B6FB v57 DOS06 0619 B71C 20 C6 B7 JSR WBWRIT DOS06 0605 B6FB v57 DOS06 0620 B71F C8 INY DOS06 0605 B6FB v57 DOS06 0621 B720 C6 B0 DEC TEMP DOS06 0605 B6FB v57 DOS06 0622 B722 D0 F5 BNE WCBAT1 DOS06 0605 B6FB v57 DOS06 0623 B724 18 CLC ;DOSRAM + $09 will be INCed auto DOS06 0605 B6FB v57 DOS06 0624 B725 8C 69 10 WCBAT2 STY DOSRAM + &09 -- DOS06 0625 B728 AD 04 0F LDA CYCNO ;Store cycle number -- DOS06 0626 B72B 8D 60 10 STA DOSRAM -- DOS06 0627 B72E 60 RTS -- DOS06 0628 B72F -- DOS06 0629 B72F -- DOS06 0630 B72F ;Read title,option,drive -- DOS06 0631 B72F ;Returns:- -- DOS06 0632 B72F ; <title> -- DOS06 0633 B72F ; <option (bin)> -- DOS06 0634 B72F ; <drive (bin)> -- DOS06 0635 B72F 20 C3 A9 RDTCO JSR SETDEF -- DOS06 0636 B732 20 5F AA JSR DIRLD -- DOS06 0637 B735 A9 0C LDAIM &0C ;Length of title -- DOS06 0638 B737 20 C6 B7 JSR WBWRIT -- DOS06 0639 B73A A0 00 LDYIM &00 ;Write title -- DOS06 0640 B73C C0 08 RDTC0 CPYIM &08 ;********** HMT DOS06 0650 B74E ^6C DOS06 0641 B73E B0 05 BCS RDTC1 DOS06 0650 B74E ^6C DOS06 0642 B740 DOS06 0650 B74E ^6C DOS06 0643 B740 B9 00 0E LDAAY DIRLOW DOS06 0650 B74E ^6C DOS06 0644 B743 90 03 BCC RDTC2 DOS06 0650 B74E ^6C DOS06 0645 B745 DOS06 0650 B74E ^6C DOS06 0646 B745 B9 F8 0E RDTC1 LDAAY DIRHIG - &08 DOS06 0650 B74E ^6C DOS06 0647 B748 20 C6 B7 RDTC2 JSR WBWRIT DOS06 0650 B74E ^6C DOS06 0648 B74B C8 INY DOS06 0650 B74E ^6C DOS06 0649 B74C C0 0C CPYIM &0C ;Stop before cycle number DOS06 0650 B74E ^6C DOS06 0650 B74E D0 EC BNE RDTC0 -- DOS06 0651 B750 -- DOS06 0652 B750 AD 06 0F LDA DIRHIG + &06 ;Option -- DOS06 0653 B753 20 38 A1 JSR SFOUR -- DOS06 0654 B756 20 C6 B7 JSR WBWRIT -- DOS06 0655 B759 A5 CD LDA FDRIVE -- DOS06 0656 B75B 4C C6 B7 JMP WBWRIT -- DOS06 0657 B75E -- DOS06 0658 B75E ;Read directory -- DOS06 0659 B75E ;<length disk> <disk> -- DOS06 0660 B75E ;<length directory> <directory> -- DOS06 0661 B75E 20 BD B7 RDBIR JSR WOWRIT -- DOS06 0662 B761 AD CA 10 LDA DEFDSK -- DOS06 0663 B764 09 30 ORAIM "0" -- DOS06 0664 B766 20 C6 B7 JSR WBWRIT -- DOS06 0665 B769 20 BD B7 JSR WOWRIT -- DOS06 0666 B76C AD C9 10 LDA DEFQUA -- DOS06 0667 B76F D0 55 BNE WBWRIT ;********** HMT DOS06 0667 B76F v2A DOS06 0668 B771 DOS06 0667 B76F v2A DOS06 0669 B771 ;Read library DOS06 0667 B76F v2A DOS06 0670 B771 ;<length disk> <disk> DOS06 0667 B76F v2A DOS06 0671 B771 ;<length directory> <directory> DOS06 0667 B76F v2A DOS06 0672 B771 20 BD B7 RLBIB JSR WOWRIT DOS06 0667 B76F v2A DOS06 0673 B774 AD CC 10 LDA LIBDSK DOS06 0667 B76F v2A DOS06 0674 B777 09 30 ORAIM "0" DOS06 0667 B76F v2A DOS06 0675 B779 20 C6 B7 JSR WBWRIT DOS06 0667 B76F v2A DOS06 0676 B77C 20 BD B7 JSR WOWRIT DOS06 0667 B76F v2A DOS06 0677 B77F AD CB 10 LDA LIBQUA DOS06 0667 B76F v2A DOS06 0678 B782 D0 42 BNE WBWRIT ;********** HMT DOS06 0667 B76F v2A DOS06 0679 B784 DOS06 0667 B76F v2A DOS06 0680 B784 48 ADRLD PHA DOS06 0667 B76F v2A DOS06 0681 B785 AD 61 10 LDA DOSRAM + &01 DOS06 0667 B76F v2A DOS06 0682 B788 85 B8 STA ZTEMP DOS06 0667 B76F v2A DOS06 0683 B78A AD 62 10 LDA DOSRAM + &02 DOS06 0667 B76F v2A DOS06 0684 B78D 85 B9 STA ZTEMP + &01 DOS06 0667 B76F v2A DOS06 0685 B78F A2 00 LDXIM &00 DOS06 0667 B76F v2A DOS06 0686 B791 68 PLA DOS06 0667 B76F v2A DOS06 0687 B792 60 RTS DOS06 0667 B76F v2A DOS06 0688 B793 DOS06 0667 B76F v2A DOS06 0689 B793 20 27 A3 ADRINC JSR SAVITA DOS06 0667 B76F v2A DOS06 0690 B796 A2 01 LDXIM &01 DOS06 0667 B76F v2A DOS06 0691 B798 DOS06 0667 B76F v2A DOS06 0692 B798 ;Increment 4 bytes of WORK DOS06 0667 B76F v2A DOS06 0693 B798 A0 04 ZERINC LDYIM &04 DOS06 0667 B76F v2A DOS06 0694 B79A FE 60 10 ZERIN0 INCAX DOSRAM DOS06 0667 B76F v2A DOS06 0695 B79D D0 04 BNE ZERIN1 DOS06 0667 B76F v2A DOS06 0696 B79F E8 INX DOS06 0667 B76F v2A DOS06 0697 B7A0 88 DEY DOS06 0667 B76F v2A DOS06 0698 B7A1 D0 F7 BNE ZERIN0 DOS06 0667 B76F v2A DOS06 0699 B7A3 60 ZERIN1 RTS DOS06 0667 B76F v2A DOS06 0700 B7A4 DOS06 0667 B76F v2A DOS06 0701 B7A4 ;Complement count DOS06 0667 B76F v2A DOS06 0702 B7A4 A2 03 COMWRK LDXIM &03 DOS06 0667 B76F v2A DOS06 0703 B7A6 A9 FF WBGPB2 LDAIM &FF DOS06 0667 B76F v2A DOS06 0704 B7A8 5D 65 10 EORAX DOSRAM + &05 DOS06 0667 B76F v2A DOS06 0705 B7AB 9D 65 10 STAAX DOSRAM + &05 DOS06 0667 B76F v2A DOS06 0706 B7AE CA DEX DOS06 0667 B76F v2A DOS06 0707 B7AF 10 F5 BPL WBGPB2 DOS06 0667 B76F v2A DOS06 0708 B7B1 60 RTS DOS06 0667 B76F v2A DOS06 0709 B7B2 DOS06 0667 B76F v2A DOS06 0710 B7B2 ;Resusitate ATEMP from BTEMP DOS06 0667 B76F v2A DOS06 0711 B7B2 AD 7D 10 MAKATP LDA BTEMP DOS06 0667 B76F v2A DOS06 0712 B7B5 85 B4 STA ATEMP DOS06 0667 B76F v2A DOS06 0713 B7B7 AD 7E 10 LDA BTEMP + &01 DOS06 0667 B76F v2A DOS06 0714 B7BA 85 B5 STA ATEMP + &01 DOS06 0667 B76F v2A DOS06 0715 B7BC 60 WBGTR0 RTS DOS06 0667 B76F v2A DOS06 0716 B7BD DOS06 0667 B76F v2A DOS06 0717 B7BD ;Put out a 1 DOS06 0667 B76F v2A DOS06 0718 B7BD A9 01 WOWRIT LDAIM &01 DOS06 0667 B76F v2A DOS06 0719 B7BF D0 05 BNE WBWRIT DOS06 DOS06 DOS06 DOS06 Acorn macro assembler Page 34 DOS06 - DOS06 - Init & Sideways interface DOS06 DOS06 0667 B76F v2A DOS06 0720 B7C1 DOS06 0667 B76F v2A DOS06 0721 B7C1 ;Get byte for BGBP DOS06 0667 B76F v2A DOS06 0722 B7C1 20 2C B1 WBGTR JSR WBGET DOS06 0667 B76F v2A DOS06 0723 B7C4 B0 F6 BCS WBGTR0 DOS06 0667 B76F v2A DOS06 0724 B7C6 DOS06 0667 B76F v2A DOS06 0725 B7C6 2C 81 10 WBWRIT BIT TUMFLG DOS06 0728 B7CE ^43 DOS06 0726 B7C9 10 05 BPL WBWRI0 DOS06 0728 B7CE ^43 DOS06 0727 B7CB 8D E5 FE STA TUBE DOS06 0728 B7CE ^43 DOS06 0728 B7CE 30 C3 BMI ADRINC ; Always DOS06 0726 B7C9 v7A DOS06 0729 B7D0 20 84 B7 WBWRI0 JSR ADRLD -- DOS06 0730 B7D3 81 B8 STAIX ZTEMP -- DOS06 0731 B7D5 4C 93 B7 JMP ADRINC -- DOS06 0732 B7D8 -- DOS06 0733 B7D8 ;Put byte for BGBP -- DOS06 0734 B7D8 20 E0 B7 WBPTR JSR WBREAD -- DOS06 0735 B7DB 20 18 B2 JSR WBPUT -- DOS06 0736 B7DE 18 CLC -- DOS06 0737 B7DF 60 RTS -- DOS06 0738 B7E0 -- DOS06 0739 B7E0 2C 81 10 WBREAD BIT TUMFLG -- DOS06 0740 B7E3 10 06 BPL WBREA0 DOS06 0740 B7E3 v79 DOS06 0741 B7E5 AD E5 FE LDA TUBE DOS06 0740 B7E3 v79 DOS06 0742 B7E8 4C 93 B7 JMP ADRINC DOS06 0740 B7E3 v79 DOS06 0743 B7EB 20 84 B7 WBREA0 JSR ADRLD -- DOS06 0744 B7EE A1 B8 LDAIX ZTEMP -- DOS06 0745 B7F0 4C 93 B7 JMP ADRINC -- DOS06 0746 B7F3 -- DOS06 0747 B7F3 ;It comes here every * command - used -- DOS06 0748 B7F3 ;for making ENABLE disabled -- DOS06 0749 B7F3 [ NOENAB=0 -- DOS06 0752 B7F3 | -- DOS06 0753 B7F3 2C C7 10 WSTUS BIT ENAFLG -- DOS06 0754 B7F6 30 03 BMI WSTUS0 DOS06 0754 B7F6 v7C DOS06 0755 B7F8 CE C7 10 DEC ENAFLG DOS06 0754 B7F6 v7C DOS06 0756 B7FB WSTUS0 DOS06 0754 B7F6 v7C DOS06 0757 B7FB ] DOS06 0754 B7F6 v7C DOS06 0758 B7FB ;Enable use of wild characters by DOS06 0754 B7F6 v7C DOS06 0759 B7FB ;storing the character to be used in DOS06 0754 B7F6 v7C DOS06 0760 B7FB ;WILDCH DOS06 0754 B7F6 v7C DOS06 0761 B7FB ;Disable use of wild characters DOS06 0754 B7F6 v7C DOS06 0762 B7FB A9 FF CLRWLD LDAIM &FF -- DOS06 0763 B7FD 8D CE 10 STA DASHOP -- DOS06 0764 B800 8D CD 10 SETWL0 STA WILDCH DOS06 0770 B80B ^73 DOS06 0765 B803 60 RTS DOS06 0770 B80B ^73 DOS06 0766 B804 DOS06 0770 B80B ^73 DOS06 0767 B804 A9 2A SETWLD LDAIM MASDSH DOS06 0770 B80B ^73 DOS06 0768 B806 8D CE 10 STA DASHOP DOS06 0770 B80B ^73 DOS06 0769 B809 A9 23 LDAIM MASWLD DOS06 0770 B80B ^73 DOS06 0770 B80B D0 F3 BNE SETWL0 -- DOS06 0771 B80D -- DOS06 0772 B80D ;Read catalog info -- DOS06 0773 B80D 20 C6 B8 FRDCAT JSR TRYFIL -- DOS06 0774 B810 20 C8 A2 JSR CHUKBK -- DOS06 0775 B813 A9 01 LDAIM &01 -- DOS06 0776 B815 60 RTS -- DOS06 0777 B816 -- DOS06 0778 B816 ;Delete file -- DOS06 0779 B816 20 A3 B8 FDEFIL JSR TRYFLC -- DOS06 0780 B819 20 C8 A2 JSR CHUKBK -- DOS06 0781 B81C 20 49 A2 JSR DELFIL -- DOS06 0782 B81F 90 24 BCC DORT1A DOS06 0782 B81F v5B DOS06 0783 B821 DOS06 0782 B81F v5B DOS06 0784 B821 ;Write all cat info to disk DOS06 0782 B81F v5B DOS06 0785 B821 20 C6 B8 FWRCAT JSR TRYFIL DOS06 0782 B81F v5B DOS06 0786 B824 20 4B B8 JSR MVILOD DOS06 0782 B81F v5B DOS06 0787 B827 20 67 B8 JSR MVIEXE DOS06 0782 B81F v5B DOS06 0788 B82A 50 16 BVC DORT1B ; Always DOS06 0782 B81F v5B DOS06 0789 B82C DOS06 0782 B81F v5B DOS06 0790 B82C ;Write load address to disk DOS06 0782 B81F v5B DOS06 0791 B82C 20 C6 B8 FWRLOD JSR TRYFIL DOS06 0782 B81F v5B DOS06 0792 B82F 20 4B B8 JSR MVILOD DOS06 0782 B81F v5B DOS06 0793 B832 50 11 BVC DORT1A ; Always DOS06 0782 B81F v5B DOS06 0794 B834 DOS06 0782 B81F v5B DOS06 0795 B834 ;Write execution address to disk DOS06 0782 B81F v5B DOS06 0796 B834 20 C6 B8 FWREXE JSR TRYFIL DOS06 0782 B81F v5B DOS06 0797 B837 20 67 B8 JSR MVIEXE DOS06 0782 B81F v5B DOS06 0798 B83A 50 09 BVC DORT1A ; Always DOS06 0782 B81F v5B DOS06 0799 B83C DOS06 0782 B81F v5B DOS06 0800 B83C ;Write attributes to disk DOS06 0782 B81F v5B DOS06 0801 B83C 20 C6 B8 FWRATT JSR TRYFIL DOS06 0782 B81F v5B DOS06 0802 B83F 20 BB B8 JSR CHKOPN DOS06 0782 B81F v5B DOS06 0803 B842 20 8A B8 DORT1B JSR MVIATT DOS06 0782 B81F v5B DOS06 0804 B845 20 1F A8 DORT1A JSR TITEND -- DOS06 0805 B848 A9 01 LDAIM &01 -- DOS06 0806 B84A 60 RTS -- DOS06 0807 B84B -- DOS06 0808 B84B ;Insert load address in directory -- DOS06 0809 B84B 20 27 A3 MVILOD JSR SAVITA -- DOS06 0810 B84E A0 02 LDYIM &02 -- DOS06 0811 B850 B1 B0 LDAIY TEMP -- DOS06 0812 B852 9D 08 0F STAAX CATHIG -- DOS06 0813 B855 C8 INY -- DOS06 0814 B856 B1 B0 LDAIY TEMP -- DOS06 0815 B858 9D 09 0F STAAX CATHIG + &01 -- DOS06 0816 B85B C8 INY -- DOS06 0817 B85C B1 B0 LDAIY TEMP -- DOS06 0818 B85E 0A ASLA -- DOS06 0819 B85F 0A ASLA -- DOS06 0820 B860 5D 0E 0F EORAX CATHIG + &06 -- DOS06 0821 B863 29 0C ANDIM &0C -- DOS06 0822 B865 10 1B BPL MVIIN0 DOS06 0822 B865 v64 DOS06 0823 B867 DOS06 0822 B865 v64 DOS06 0824 B867 ;Insert execution address DOS06 0822 B865 v64 DOS06 0825 B867 20 27 A3 MVIEXE JSR SAVITA DOS06 0822 B865 v64 DOS06 0826 B86A A0 06 LDYIM &06 DOS06 0822 B865 v64 DOS06 0827 B86C B1 B0 LDAIY TEMP DOS06 0822 B865 v64 DOS06 0828 B86E 9D 0A 0F STAAX CATHIG + &02 DOS06 0822 B865 v64 DOS06 0829 B871 C8 INY DOS06 0822 B865 v64 DOS06 0830 B872 B1 B0 LDAIY TEMP DOS06 0822 B865 v64 DOS06 0831 B874 9D 0B 0F STAAX CATHIG + &03 DOS06 0822 B865 v64 DOS06 0832 B877 C8 INY DOS06 0822 B865 v64 DOS06 0833 B878 B1 B0 LDAIY TEMP DOS06 0822 B865 v64 DOS06 0834 B87A 6A RORA DOS06 0822 B865 v64 DOS06 0835 B87B 6A RORA DOS06 0822 B865 v64 DOS06 0836 B87C 6A RORA DOS06 0822 B865 v64 DOS06 0837 B87D 5D 0E 0F EORAX CATHIG + &06 DOS06 0822 B865 v64 DOS06 0838 B880 29 C0 ANDIM &C0 DOS06 0822 B865 v64 DOS06 0839 B882 5D 0E 0F MVIIN0 EORAX CATHIG + &06 -- DOS06 0840 B885 9D 0E 0F STAAX CATHIG + &06 -- DOS06 0841 B888 B8 CLV -- DOS06 0842 B889 60 RTS DOS06 DOS06 DOS06 DOS06 Acorn macro assembler Page 35 DOS06 - DOS06 - Init & Sideways interface DOS06 -- DOS06 0843 B88A -- DOS06 0844 B88A ;Insert attributes into directory -- DOS06 0845 B88A 20 27 A3 MVIATT JSR SAVITA -- DOS06 0846 B88D A0 0E LDYIM &0E -- DOS06 0847 B88F B1 B0 LDAIY TEMP -- DOS06 0848 B891 29 0A ANDIM &0A -- DOS06 0849 B893 F0 02 BEQ MVIAT0 DOS06 0849 B893 v7D DOS06 0850 B895 A9 80 LDAIM &80 DOS06 0849 B893 v7D DOS06 0851 B897 5D 0F 0E MVIAT0 EORAX CATLOW + &07 -- DOS06 0852 B89A 29 80 ANDIM &80 -- DOS06 0853 B89C 5D 0F 0E EORAX CATLOW + &07 -- DOS06 0854 B89F 9D 0F 0E STAAX CATLOW + &07 -- DOS06 0855 B8A2 60 RTS -- DOS06 0856 B8A3 -- DOS06 0857 B8A3 ;Try and get file and check for file -- DOS06 0858 B8A3 ;open or locked. -- DOS06 0859 B8A3 20 D0 B8 TRYFLC JSR TRYFL1 -- DOS06 0860 B8A6 90 23 BCC TRYFL2 DOS06 0860 B8A6 v5C DOS06 0861 B8A8 DOS06 0860 B8A6 v5C DOS06 0862 B8A8 ;Check if locked DOS06 0860 B8A6 v5C DOS06 0863 B8A8 B9 0F 0E CHKLOK LDAAY MODIFY DOS06 0860 B8A6 v5C DOS06 0864 B8AB 10 22 BPL CHKOPR DOS06 0860 B8A6 v5C DOS06 0865 B8AD DOS06 0860 B8A6 v5C DOS06 0866 B8AD 20 B8 9F DELPRT JSR ESTRNG DOS06 0860 B8A6 v5C DOS06 0867 B8B0 C3 4C 6F = LOKNUM,"Locked",&00 DOS06 0860 B8A6 v5C DOS06 0868 B8B8 DOS06 0860 B8A6 v5C DOS06 0869 B8B8 ;Check for open or locked DOS06 0860 B8A6 v5C DOS06 0870 B8B8 20 A8 B8 CHKOPL JSR CHKLOK DOS06 0860 B8A6 v5C DOS06 0871 B8BB DOS06 0860 B8A6 v5C DOS06 0872 B8BB ;Check file open and scream if so. DOS06 0860 B8A6 v5C DOS06 0873 B8BB 20 27 A3 CHKOPN JSR SAVITA DOS06 0860 B8A6 v5C DOS06 0874 B8BE 20 B6 AF JSR CMPFIL DOS06 0860 B8A6 v5C DOS06 0875 B8C1 90 21 BCC TRYFL3 DOS06 0860 B8A6 v5C DOS06 0876 B8C3 4C 1A AF JMP FILOPN DOS06 0860 B8A6 v5C DOS06 0877 B8C6 DOS06 0860 B8A6 v5C DOS06 0878 B8C6 ;Try and get file if fail take of this DOS06 0860 B8A6 v5C DOS06 0879 B8C6 ; return and return to level below. DOS06 0860 B8A6 v5C DOS06 0880 B8C6 20 D0 B8 TRYFIL JSR TRYFL1 DOS06 0860 B8A6 v5C DOS06 0881 B8C9 B0 19 BCS TRYFL3 DOS06 0860 B8A6 v5C DOS06 0882 B8CB 68 TRYFL2 PLA DOS06 0864 B8AB v5D DOS06 0883 B8CC 68 PLA DOS06 0864 B8AB v5D DOS06 0884 B8CD A9 00 LDAIM &00 DOS06 0864 B8AB v5D DOS06 0885 B8CF 60 CHKOPR RTS DOS06 0875 B8C1 v5E DOS06 0886 B8D0 DOS06 0875 B8C1 v5E DOS06 0887 B8D0 20 70 A0 TRYFL1 JSR FRMNAM DOS06 0875 B8C1 v5E DOS06 0888 B8D3 20 C3 A1 JSR LOOKUP DOS06 0875 B8C1 v5E DOS06 0889 B8D6 90 0C BCC TRYFL3 DOS06 0875 B8C1 v5E DOS06 0890 B8D8 98 TYA DOS06 0875 B8C1 v5E DOS06 0891 B8D9 AA TAX DOS06 0875 B8C1 v5E DOS06 0892 B8DA AD DB 10 TRYFL0 LDA FCBADR DOS06 0875 B8C1 v5E DOS06 0893 B8DD 85 B0 STA TEMP DOS06 0875 B8C1 v5E DOS06 0894 B8DF AD DC 10 LDA FCBADR + &01 DOS06 0875 B8C1 v5E DOS06 0895 B8E2 85 B1 STA TEMP + &01 DOS06 0875 B8C1 v5E DOS06 0896 B8E4 60 TRYFL3 RTS -- DOS06 0897 B8E5 -- DOS06 0898 B8E5 ;Get low mem address and length of free -- DOS06 0899 B8E5 ; memory. -- DOS06 0900 B8E5 A9 83 GETLSZ LDAIM BYTEPA -- DOS06 0901 B8E7 20 F4 FF JSR OSBYTE -- DOS06 0902 B8EA 8C CF 10 STY FRPAGE -- DOS06 0903 B8ED [ RAMVER=0 -- DOS06 0906 B8ED | -- DOS06 0907 B8ED A9 84 LDAIM BYTETM -- DOS06 0908 B8EF 20 F4 FF JSR OSBYTE -- DOS06 0909 B8F2 ] -- DOS06 0910 B8F2 98 TYA -- DOS06 0911 B8F3 38 SEC -- DOS06 0912 B8F4 ED CF 10 SBC FRPAGE -- DOS06 0913 B8F7 8D D0 10 STA FRSIZE -- DOS06 0914 B8FA 60 RTS -- DOS06 0915 B8FB -- DOS06 0916 B8FB -- DOS06 0917 B8FB ;Get memory for DOS -- DOS06 0918 B8FB A2 0A GETMEM LDXIM SWCCME ;Claim memory -- DOS06 0919 B8FD 20 A0 B9 JSR DOSWCL -- DOS06 0920 B900 20 10 B9 JSR SUSPRI ;Tell me I've done it -- DOS06 0921 B903 -- DOS06 0922 B903 A0 D3 LDYIM COLDS -- DOS06 0923 B905 A9 FF LDAIM &FF ;Indicate warm start up -- DOS06 0924 B907 91 B0 STAIY TEMP ; warmed **** HMT -- DOS06 0925 B909 8D D3 10 STA COLDS -- DOS06 0926 B90C -- DOS06 0927 B90C C8 INY ; So Y -> MEMFLG -- DOS06 0928 B90D 91 B0 STAIY TEMP -- DOS06 0929 B90F 60 RTS -- DOS06 0930 B910 -- DOS06 0931 B910 ;Get private area -- DOS06 0932 B910 48 SUSPRI PHA -- DOS06 0933 B911 A6 F4 LDX ROMID -- DOS06 0934 B913 A9 00 LDAIM &00 -- DOS06 0935 B915 85 B0 STA TEMP -- DOS06 0936 B917 BD F0 0D LDAAX PRIPTR -- DOS06 0937 B91A 29 3F ANDIM &3F ; Use only the non-frugal bits -- DOS06 0938 B91C 85 B1 STA TEMP + &01 -- DOS06 0939 B91E 68 PLA -- DOS06 0940 B91F 60 RTS -- DOS06 0941 B920 -- DOS06 0942 B920 ;Claim NMI -- DOS06 0943 B920 20 27 A3 NMICLA JSR SAVITA -- DOS06 0944 B923 48 PHA -- DOS06 0945 B924 2C C8 10 BIT NMIFLG ;Already got ? -- DOS06 0946 B927 30 11 BMI NMICL0 DOS06 0946 B927 v6E DOS06 0947 B929 A9 8F LDAIM BYTESC DOS06 0946 B927 v6E DOS06 0948 B92B A2 0C LDXIM SWCCNM DOS06 0946 B927 v6E DOS06 0949 B92D 20 A8 B9 JSR READIT DOS06 0946 B927 v6E DOS06 0950 B930 84 A0 STY PRENMI ;Save for handing back DOS06 0946 B927 v6E DOS06 0951 B932 A9 FF LDAIM &FF ;Set NMI flag DOS06 0946 B927 v6E DOS06 0952 B934 8D C8 10 STA NMIFLG DOS06 0946 B927 v6E DOS06 0953 B937 DOS06 0946 B927 v6E DOS06 0954 B937 ; Now ensure that a RESET in the middle doesn't fuck things up! DOS06 0946 B927 v6E DOS06 0955 B937 EE D3 10 INC COLDS ; <- 0, for a cold start DOS06 0946 B927 v6E DOS06 0956 B93A DOS06 0946 B927 v6E DOS06 0957 B93A 68 NMICL0 PLA -- DOS06 0958 B93B AA TAX -- DOS06 0959 B93C BD F2 B9 LDAAX NMITBL -- DOS06 0960 B93F 85 B8 STA ZTEMP -- DOS06 0961 B941 BD F9 B9 LDAAX NMITBH -- DOS06 0962 B944 85 B9 STA ZTEMP + &01 -- DOS06 0963 B946 BC 00 BA LDYAX NMIROL ;Get length -- DOS06 0964 B949 B1 B8 NMICL1 LDAIY ZTEMP ;Move routine DOS06 0967 B94F ^78 DOS06 0965 B94B 99 00 0D STAAY INTNMI DOS06 DOS06 DOS06 DOS06 Acorn macro assembler Page 36 DOS06 - DOS06 - Init & Sideways interface DOS06 DOS06 0967 B94F ^78 DOS06 0966 B94E 88 DEY DOS06 0967 B94F ^78 DOS06 0967 B94F 10 F8 BPL NMICL1 -- DOS06 0968 B951 E0 02 CPXIM &02 -- DOS06 0969 B953 B0 14 BCS NMICL2 DOS06 0969 B953 v6B DOS06 0970 B955 A5 F4 LDA ROMID ;Store romID into LDAIM DOS06 0969 B953 v6B DOS06 0971 B957 8D 3C 0D STA MYID - RDMNMI + INTNMI + &01 DOS06 0969 B953 v6B DOS06 0972 B95A E0 00 CPXIM &00 ;Write ? DOS06 0969 B953 v6B DOS06 0973 B95C D0 0B BNE NMICL2 DOS06 0969 B953 v6B DOS06 0974 B95E A0 12 LDYIM RDMNMI - WRIOVR - &01 ;Put write overlay on DOS06 0969 B953 v6B DOS06 0975 B960 B9 0E AD NMICL3 LDAAY WRIOVR DOS06 0969 B953 v6B DOS06 0976 B963 99 0A 0D STAAY NMIOVR - RDMNMI + INTNMI DOS06 0969 B953 v6B DOS06 0977 B966 88 DEY DOS06 0969 B953 v6B DOS06 0978 B967 10 F7 BPL NMICL3 DOS06 0969 B953 v6B DOS06 0979 B969 60 NMICL2 RTS -- DOS06 0980 B96A -- DOS06 0981 B96A ;Check disk finished and when done -- DOS06 0982 B96A ;release NMIs -- DOS06 0983 B96A 20 AE AC DSKFIN JSR DSKWAI -- DOS06 0984 B96D -- DOS06 0985 B96D ;Release NMI -- DOS06 0986 B96D 20 27 A3 NMIREL JSR SAVITA -- DOS06 0987 B970 2C C8 10 BIT NMIFLG ;Do I have it? -- DOS06 0988 B973 10 0E BPL NMIRL0 DOS06 0988 B973 v71 DOS06 0989 B975 ;*********** is this neccessary? HMT JSR SAVITA DOS06 0988 B973 v71 DOS06 0990 B975 DOS06 0988 B973 v71 DOS06 0991 B975 CE D3 10 DEC COLDS ; <- $FF for a worm start DOS06 0988 B973 v71 DOS06 0992 B978 DOS06 0988 B973 v71 DOS06 0993 B978 A4 A0 LDY PRENMI ;Did anybody have it? DOS06 0988 B973 v71 DOS06 0994 B97A C0 FF CPYIM &FF DOS06 0988 B973 v71 DOS06 0995 B97C F0 05 BEQ NMIRL0 ;Ignore if not DOS06 0988 B973 v71 DOS06 0996 B97E A2 0B LDXIM SWCRNM ;Hand it back DOS06 0988 B973 v71 DOS06 0997 B980 20 A0 B9 JSR DOSWCL DOS06 0988 B973 v71 DOS06 0998 B983 A9 00 NMIRL0 LDAIM &00 -- DOS06 0999 B985 8D C8 10 STA NMIFLG -- DOS06 1000 B988 60 RTS -- DOS06 1001 B989 -- DOS06 1002 B989 ;Clear keyboard buffer -- DOS06 1003 B989 20 27 A3 CLRKEY JSR SAVITA -- DOS06 1004 B98C A9 0F LDAIM BYTECB -- DOS06 1005 B98E A2 01 LDXIM &01 -- DOS06 1006 B990 A0 00 WRITBY LDYIM &00 -- DOS06 1007 B992 F0 16 BEQ BYTJMP DOS06 1007 B992 v69 DOS06 1008 B994 DOS06 1007 B992 v69 DOS06 1009 B994 ;Zero spool handle DOS06 1007 B992 v69 DOS06 1010 B994 ;***ZERSPH LDAIM BYTESH ;*** HMT DOS06 1007 B992 v69 DOS06 1011 B994 ;*** LDXIM $00 DOS06 1007 B992 v69 DOS06 1012 B994 ;*** BEQ WRITBY DOS06 1007 B992 v69 DOS06 1013 B994 DOS06 1007 B992 v69 DOS06 1014 B994 ;Set where OSWRCH goes DOS06 1007 B992 v69 DOS06 1015 B994 AA WRIWDE TAX DOS06 1007 B992 v69 DOS06 1016 B995 A9 03 WRIWDX LDAIM BYTESD DOS06 1007 B992 v69 DOS06 1017 B997 D0 11 BNE BYTJMP DOS06 1007 B992 v69 DOS06 1018 B999 DOS06 1007 B992 v69 DOS06 1019 B999 ;Acknowledge escape DOS06 1007 B992 v69 DOS06 1020 B999 20 27 A3 ACKESC JSR SAVITA ;Keep registers DOS06 1007 B992 v69 DOS06 1021 B99C A9 7E LDAIM BYTEAE DOS06 1007 B992 v69 DOS06 1022 B99E D0 0A BNE BYTJMP DOS06 1007 B992 v69 DOS06 1023 B9A0 DOS06 1007 B992 v69 DOS06 1024 B9A0 ;Do sideways call DOS06 1007 B992 v69 DOS06 1025 B9A0 A9 8F DOSWCL LDAIM BYTESC DOS06 1007 B992 v69 DOS06 1026 B9A2 D0 06 BNE BYTJMP DOS06 1007 B992 v69 DOS06 1027 B9A4 DOS06 1007 B992 v69 DOS06 1028 B9A4 ;Read switches DOS06 1007 B992 v69 DOS06 1029 B9A4 A9 FF READSW LDAIM BYTESW DOS06 1007 B992 v69 DOS06 1030 B9A6 A2 00 READBY LDXIM &00 DOS06 1007 B992 v69 DOS06 1031 B9A8 A0 FF READIT LDYIM &FF DOS06 1007 B992 v69 DOS06 1032 B9AA 4C F4 FF BYTJMP JMP OSBYTE -- DOS06 1033 B9AD -- DOS06 1034 B9AD ;Jump table to put into indirection -- DOS06 1035 B9AD ;vectors -- DOS06 1036 B9AD 1B VTABB = &1B -- DOS06 1037 B9AE FF = &FF -- DOS06 1038 B9AF 1E = &1E -- DOS06 1039 B9B0 FF = &FF -- DOS06 1040 B9B1 21 = &21 -- DOS06 1041 B9B2 FF = &FF -- DOS06 1042 B9B3 24 = &24 -- DOS06 1043 B9B4 FF = &FF -- DOS06 1044 B9B5 27 = &27 -- DOS06 1045 B9B6 FF = &FF -- DOS06 1046 B9B7 2A = &2A -- DOS06 1047 B9B8 FF = &FF -- DOS06 1048 B9B9 2D = &2D -- DOS06 1049 B9BA FF = &FF -- DOS06 1050 B9BB -- DOS06 1051 B9BB ;Indirection table for use by sideways -- DOS06 1052 B9BB ;handler -- DOS06 1053 B9BB E2 VTABF = WFILE -- DOS06 1054 B9BC B5 = /(WFILE ) -- DOS06 1055 B9BD 00 = &00 -- DOS06 1056 B9BE 33 = WARGS -- DOS06 1057 B9BF B0 = /(WARGS ) -- DOS06 1058 B9C0 00 = &00 -- DOS06 1059 B9C1 2C = WBGET -- DOS06 1060 B9C2 B1 = /(WBGET ) -- DOS06 1061 B9C3 00 = &00 -- DOS06 1062 B9C4 18 = WBPUT -- DOS06 1063 B9C5 B2 = /(WBPUT ) -- DOS06 1064 B9C6 00 = &00 -- DOS06 1065 B9C7 26 = WBGPB -- DOS06 1066 B9C8 B6 = /(WBGPB ) -- DOS06 1067 B9C9 00 = &00 -- DOS06 1068 B9CA AE = WFIND -- DOS06 1069 B9CB AE = /(WFIND ) -- DOS06 1070 B9CC 00 = &00 -- DOS06 1071 B9CD 13 = WFSCM -- DOS06 1072 B9CE B6 = /(WFSCM ) -- DOS06 1073 B9CF 00 = &00 -- DOS06 1074 B9D0 -- DOS06 1075 B9D0 ;Jump out table for file handler call -- DOS06 1076 B9D0 79 FSCLTB = WFOPT - &01 -- DOS06 1077 B9D1 F4 = WFEOF - &01 -- DOS06 1078 B9D2 09 = WNOTA - &01 -- DOS06 1079 B9D3 A2 = WNAME - &01 -- DOS06 1080 B9D4 09 = WNOTA - &01 -- DOS06 1081 B9D5 5E = WDCAT - &01 -- DOS06 1082 B9D6 F7 = WFDIE - &01 -- DOS06 1083 B9D7 F2 = WHLIM - &01 -- DOS06 1084 B9D8 F2 = WSTUS - &01 -- DOS06 1085 B9D9 A8 FSCHTB = /(WFOPT - &01 ) -- DOS06 1086 B9DA B0 = /(WFEOF - &01 ) DOS06 DOS06 DOS06 DOS06 Acorn macro assembler Page 37 DOS06 - DOS06 - Init & Sideways interface DOS06 -- DOS06 1087 B9DB A7 = /(WNOTA - &01 ) -- DOS06 1088 B9DC A5 = /(WNAME - &01 ) -- DOS06 1089 B9DD A7 = /(WNOTA - &01 ) -- DOS06 1090 B9DE A3 = /(WDCAT - &01 ) -- DOS06 1091 B9DF AD = /(WFDIE - &01 ) -- DOS06 1092 B9E0 AD = /(WHLIM - &01 ) -- DOS06 1093 B9E1 B7 = /(WSTUS - &01 ) -- DOS06 1094 B9E2 -- DOS06 1095 B9E2 A0 FILJPL = LOADER - &01 -- DOS06 1096 B9E3 D7 = SAVER - &01 -- DOS06 1097 B9E4 20 = FWRCAT - &01 -- DOS06 1098 B9E5 2B = FWRLOD - &01 -- DOS06 1099 B9E6 33 = FWREXE - &01 -- DOS06 1100 B9E7 3B = FWRATT - &01 -- DOS06 1101 B9E8 0C = FRDCAT - &01 -- DOS06 1102 B9E9 15 = FDEFIL - &01 -- DOS06 1103 B9EA A6 FILJPH = /(LOADER - &01 ) -- DOS06 1104 B9EB A6 = /(SAVER - &01 ) -- DOS06 1105 B9EC B8 = /(FWRCAT - &01 ) -- DOS06 1106 B9ED B8 = /(FWRLOD - &01 ) -- DOS06 1107 B9EE B8 = /(FWREXE - &01 ) -- DOS06 1108 B9EF B8 = /(FWRATT - &01 ) -- DOS06 1109 B9F0 B8 = /(FRDCAT - &01 ) -- DOS06 1110 B9F1 B8 = /(FDEFIL - &01 ) -- DOS06 1111 B9F2 -- DOS06 1112 B9F2 21 NMITBL = RDMNMI -- DOS06 1113 B9F3 21 = RDMNMI -- DOS06 1114 B9F4 51 = NOPNMI -- DOS06 1115 B9F5 B5 = WTFNMI -- DOS06 1116 B9F6 8A = WMFNMI -- DOS06 1117 B9F7 A5 = RTFNMI -- DOS06 1118 B9F8 6F = RMFNMI -- DOS06 1119 B9F9 AD NMITBH = /(RDMNMI ) -- DOS06 1120 B9FA AD = /(RDMNMI ) -- DOS06 1121 B9FB AD = /(NOPNMI ) -- DOS06 1122 B9FC AD = /(WTFNMI ) -- DOS06 1123 B9FD AD = /(WMFNMI ) -- DOS06 1124 B9FE AD = /(RTFNMI ) -- DOS06 1125 B9FF AD = /(RMFNMI ) -- DOS06 1126 BA00 4D NMIROL = RMFNMI - RDMNMI - &01 -- DOS06 1127 BA01 4D = RMFNMI - RDMNMI - &01 -- DOS06 1128 BA02 00 = &00 -- DOS06 1129 BA03 0F = NMIEND - WTFNMI - &01 -- DOS06 1130 BA04 1A = RTFNMI - WMFNMI - &01 -- DOS06 1131 BA05 0F = WTFNMI - RTFNMI - &01 -- DOS06 1132 BA06 1A = WMFNMI - RMFNMI - &01 -- DOS06 1133 BA07 -- DOS06 1134 BA07 ;In WBRWTB -- DOS06 1135 BA07 ; bit 0 = use pointer ? 0=Y,1=N -- DOS06 1136 BA07 ; bit 1 = read pointer ? 0=N,1=Y -- DOS06 1137 BA07 ; bit 2 = read(1),write(0) -- DOS06 1138 BA07 F1 WGPTBL = RETURN -- DOS06 1139 BA08 D8 = WBPTR -- DOS06 1140 BA09 D8 = WBPTR -- DOS06 1141 BA0A C1 = WBGTR -- DOS06 1142 BA0B C1 = WBGTR -- DOS06 1143 BA0C 2F = RDTCO -- DOS06 1144 BA0D 5E = RDBIR -- DOS06 1145 BA0E 71 = RLBIB -- DOS06 1146 BA0F E3 = WCBAT -- DOS06 1147 BA10 A4 WGPTBH = /(RETURN ) -- DOS06 1148 BA11 B7 = /(WBPTR ) -- DOS06 1149 BA12 B7 = /(WBPTR ) -- DOS06 1150 BA13 B7 = /(WBGTR ) -- DOS06 1151 BA14 B7 = /(WBGTR ) -- DOS06 1152 BA15 B7 = /(RDTCO ) -- DOS06 1153 BA16 B7 = /(RDBIR ) -- DOS06 1154 BA17 B7 = /(RLBIB ) -- DOS06 1155 BA18 B6 = /(WCBAT ) -- DOS06 1156 BA19 04 WBRWTB = &04 -- DOS06 1157 BA1A 02 = &02 -- DOS06 1158 BA1B 03 = &03 -- DOS06 1159 BA1C 06 = &06 -- DOS06 1160 BA1D 07 = &07 -- DOS06 1161 BA1E 04 = &04 -- DOS06 1162 BA1F 04 = &04 -- DOS06 1163 BA20 04 = &04 -- DOS06 1164 BA21 04 = &04 -- DOS06 1165 BA22 -- DOS06 1166 BA22 LNK DOS07 -- DOS07 0001 BA22 ;*** File Seven *** > DOS07 -- DOS07 0002 BA22 TTL - DOS07 - Help & Syntax ; -- DOS07 0003 BA22 OPT &01 -- DOS07 0004 BA22 ;* Contains syntax messages * -- DOS07 0005 BA22 -- DOS07 0006 BA22 ;Get help on DFS -- DOS07 0007 BA22 98 HELP TYA -- DOS07 0008 BA23 A2 FF LDXIM &FF -- DOS07 0009 BA25 A0 0E LDYIM COMNO -- DOS07 0010 BA27 48 HELP1 PHA DOS07 0038 BA53 ^52 DOS07 0011 BA28 20 F7 9F JSR VSTRNG ;Print DFS version number DOS07 0038 BA53 ^52 DOS07 0012 BA2B 0D 44 46 = CR,"DFS " DOS07 0038 BA53 ^52 DOS07 0013 BA30 31 = "0" + VERH DOS07 0038 BA53 ^52 DOS07 0014 BA31 2E = "." DOS07 0038 BA53 ^52 DOS07 0015 BA32 32 = "0" + VERM DOS07 0038 BA53 ^52 DOS07 0016 BA33 30 = "0" + VERL DOS07 0038 BA53 ^52 DOS07 0017 BA34 [ NOENAB=0 DOS07 0038 BA53 ^52 DOS07 0019 BA34 ] DOS07 0038 BA53 ^52 DOS07 0020 BA34 0D = CR DOS07 0038 BA53 ^52 DOS07 0021 BA35 86 BC STX COMTXT DOS07 0038 BA53 ^52 DOS07 0022 BA37 A9 00 HELP0 LDAIM &00 DOS07 0038 BA53 ^52 DOS07 0023 BA39 85 B9 STA ETEMP DOS07 0038 BA53 ^52 DOS07 0024 BA3B 20 A6 BF JSR PDSPC ;Indent info two spaces DOS07 0038 BA53 ^52 DOS07 0025 BA3E 20 7F BA JSR PSYNTX DOS07 0038 BA53 ^52 DOS07 0026 BA41 20 B6 BC JSR PCRLF DOS07 0038 BA53 ^52 DOS07 0027 BA44 88 DEY DOS07 0038 BA53 ^52 DOS07 0028 BA45 D0 F0 BNE HELP0 DOS07 0038 BA53 ^52 DOS07 0029 BA47 68 PLA DOS07 0038 BA53 ^52 DOS07 0030 BA48 A8 TAY DOS07 0038 BA53 ^52 DOS07 0031 BA49 A2 9E HELP2 LDXIM HLPTAB - COMTAB - &03 DOS07 0038 BA53 ^52 DOS07 0032 BA4B 4C A8 A5 JMP WNAME0 DOS07 0038 BA53 ^52 DOS07 0033 BA4E DOS07 0038 BA53 ^52 DOS07 0034 BA4E ;Get help about UTILS DOS07 0038 BA53 ^52 DOS07 0035 BA4E 98 PMHELP TYA DOS07 0038 BA53 ^52 DOS07 0036 BA4F A2 73 LDXIM INITBL - COMTAB - &01 DOS07 0038 BA53 ^52 DOS07 0037 BA51 A0 05 LDYIM UTLNO DOS07 0038 BA53 ^52 DOS07 0038 BA53 D0 D2 BNE HELP1 DOS07 0045 BA5F ^68 DOS07 0039 BA55 DOS07 0045 BA5F ^68 DOS07 0040 BA55 ;Don't know about that item of help DOS07 0045 BA5F ^68 DOS07 0041 BA55 20 F1 A5 NOHELP JSR SETUPR DOS07 0045 BA5F ^68 DOS07 0042 BA58 F0 70 BEQ PSYNT4 ;End of line => go away DOS07 DOS07 DOS07 DOS07 Acorn macro assembler Page 38 DOS07 - DOS07 - Help & Syntax; DOS07 DOS07 0042 BA58 v0F DOS07 0043 BA5A 20 C9 A0 NOHLP1 JSR RDCHR DOS07 0042 BA58 v0F DOS07 0044 BA5D 90 FB BCC NOHLP1 DOS07 0042 BA58 v0F DOS07 0045 BA5F B0 E8 BCS HELP2 DOS07 0042 BA58 v0F DOS07 0046 BA61 DOS07 0042 BA58 v0F DOS07 0047 BA61 20 F1 A5 CHKSYN JSR SETUPR DOS07 0042 BA58 v0F DOS07 0048 BA64 D0 64 BNE PSYNT4 DOS07 0042 BA58 v0F DOS07 0049 BA66 20 C8 9F SYNERR JSR FSTRNG DOS07 0042 BA58 v0F DOS07 0050 BA69 DC 53 79 = SYNNUM,"Syntax: " DOS07 0042 BA58 v0F DOS07 0051 BA72 86 B9 STX ETEMP DOS07 0042 BA58 v0F DOS07 0052 BA74 20 7F BA JSR PSYNTX DOS07 0042 BA58 v0F DOS07 0053 BA77 A9 00 LDAIM &00 DOS07 0042 BA58 v0F DOS07 0054 BA79 20 BE BA JSR PHELPC DOS07 0042 BA58 v0F DOS07 0055 BA7C 4C 00 01 JMP ERRBUF DOS07 0042 BA58 v0F DOS07 0056 BA7F DOS07 0042 BA58 v0F DOS07 0057 BA7F A6 BC PSYNTX LDX COMTXT DOS07 0042 BA58 v0F DOS07 0058 BA81 E8 SYNER1 INX DOS07 0042 BA58 v0F DOS07 0059 BA82 BD F2 A4 LDAAX COMTAB DOS07 0042 BA58 v0F DOS07 0060 BA85 30 06 BMI SYNER0 DOS07 0042 BA58 v0F DOS07 0061 BA87 20 BE BA JSR PHELPC DOS07 0042 BA58 v0F DOS07 0062 BA8A 4C 81 BA JMP SYNER1 DOS07 0042 BA58 v0F DOS07 0063 BA8D E8 SYNER0 INX DOS07 0042 BA58 v0F DOS07 0064 BA8E E8 INX DOS07 0042 BA58 v0F DOS07 0065 BA8F 86 BC STX COMTXT DOS07 0042 BA58 v0F DOS07 0066 BA91 BD F2 A4 LDAAX COMTAB DOS07 0042 BA58 v0F DOS07 0067 BA94 20 9A BA JSR PSYNT5 DOS07 0042 BA58 v0F DOS07 0068 BA97 20 38 A1 JSR SFOUR DOS07 0042 BA58 v0F DOS07 0069 BA9A 20 27 A3 PSYNT5 JSR SAVITA DOS07 0042 BA58 v0F DOS07 0070 BA9D 29 0F ANDIM &0F DOS07 0042 BA58 v0F DOS07 0071 BA9F F0 29 BEQ PSYNT4 DOS07 0042 BA58 v0F DOS07 0072 BAA1 A8 TAY DOS07 0042 BA58 v0F DOS07 0073 BAA2 A9 20 LDAIM " " DOS07 0042 BA58 v0F DOS07 0074 BAA4 20 BE BA JSR PHELPC DOS07 0042 BA58 v0F DOS07 0075 BAA7 A2 FF LDXIM &FF ; Used to be $00 DOS07 0042 BA58 v0F DOS07 0076 BAA9 E8 PSYNT2 INX DOS07 0042 BA58 v0F DOS07 0077 BAAA BD CE BA LDAAX ARGTBL DOS07 0042 BA58 v0F DOS07 0078 BAAD 10 FA BPL PSYNT2 DOS07 0042 BA58 v0F DOS07 0079 BAAF 88 PSYNT1 DEY DOS07 0042 BA58 v0F DOS07 0080 BAB0 D0 F7 BNE PSYNT2 DOS07 0042 BA58 v0F DOS07 0081 BAB2 29 7F ANDIM &7F DOS07 0042 BA58 v0F DOS07 0082 BAB4 20 BE BA PSYNT3 JSR PHELPC DOS07 0042 BA58 v0F DOS07 0083 BAB7 E8 INX DOS07 0042 BA58 v0F DOS07 0084 BAB8 BD CE BA LDAAX ARGTBL DOS07 0042 BA58 v0F DOS07 0085 BABB 10 F7 BPL PSYNT3 DOS07 0042 BA58 v0F DOS07 0086 BABD 60 RTS DOS07 0042 BA58 v0F DOS07 0087 BABE DOS07 0042 BA58 v0F DOS07 0088 BABE 20 27 A3 PHELPC JSR SAVITA DOS07 0042 BA58 v0F DOS07 0089 BAC1 A6 B9 LDX ETEMP DOS07 0042 BA58 v0F DOS07 0090 BAC3 F0 06 BEQ PHLPC0 DOS07 0042 BA58 v0F DOS07 0091 BAC5 E6 B9 INC ETEMP DOS07 0042 BA58 v0F DOS07 0092 BAC7 9D 00 01 STAAX ERRBUF DOS07 0042 BA58 v0F DOS07 0093 BACA 60 PSYNT4 RTS DOS07 0090 BAC3 v79 DOS07 0094 BACB 4C 1F A0 PHLPC0 JMP PCHR -- DOS07 0095 BACE -- DOS07 0096 BACE BC 66 73 ARGTBL = !("<"),"fsp>" -- DOS07 0097 BAD3 BC 61 66 = !("<"),"afsp>" -- DOS07 0098 BAD9 A8 4C 29 = !("("),"L)" -- DOS07 0099 BADC BC 73 6F = !("<"),"source> <dest.>" -- DOS07 0100 BAEC BC 6F 6C = !("<"),"old fsp> <new fsp>" -- DOS07 0101 BAFF A8 3C 64 = !("("),"<dir>)" -- DOS07 0102 BB06 A8 3C 64 = !("("),"<drive>)" -- DOS07 0103 BB0F BC 74 69 = !("<"),"title>" -- DOS07 0104 BB16 BC 64 72 = !("<"),"drive>" -- DOS07 0105 BB1D FF = !(&FF ) ; Terminator -- DOS07 0106 BB1E -- DOS07 0107 BB1E -- DOS07 0108 BB1E LNK DOS08 -- DOS08 0001 BB1E ;*** File Eight *** > DOS08 -- DOS08 0002 BB1E TTL - DOS08 - Compact -- DOS08 0003 BB1E OPT &01 -- DOS08 0004 BB1E ;* Compacts files on disk * -- DOS08 0005 BB1E -- DOS08 0006 BB1E 20 CE A9 COMPCT JSR READRV -- DOS08 0007 BB21 20 F7 9F JSR VSTRNG -- DOS08 0008 BB24 43 6F 6D = "Compacting :" -- DOS08 0009 BB30 8D D1 10 STA FDRIV -- DOS08 0010 BB33 8D D2 10 STA TDRIV -- DOS08 0011 BB36 20 40 A0 JSR DIGOUT -- DOS08 0012 BB39 20 B6 BC JSR PCRLF -- DOS08 0013 BB3C A0 00 LDYIM &00 ;Close all files -- DOS08 0014 BB3E 20 1B AE JSR VSHUT -- DOS08 0015 BB41 20 E5 B8 JSR GETLSZ -- DOS08 0016 BB44 20 C2 A2 JSR GETDIR -- DOS08 0017 BB47 AC 05 0F LDY DIRLEN -- DOS08 0018 BB4A 84 CA STY WORK + &10 -- DOS08 0019 BB4C A9 02 LDAIM &02 -- DOS08 0020 BB4E 85 C8 STA WORK + &0E -- DOS08 0021 BB50 A9 00 LDAIM &00 -- DOS08 0022 BB52 85 C9 STA WORK + &0F -- DOS08 0023 BB54 A4 CA LOOPX LDY WORK + &10 -- DOS08 0024 BB56 20 F1 A1 JSR UNSTEP -- DOS08 0025 BB59 C0 F8 CPYIM &F8 -- DOS08 0026 BB5B D0 28 BNE NOTDUN DOS08 0026 BB5B v57 DOS08 0027 BB5D DOS08 0026 BB5B v57 DOS08 0028 BB5D [ &FF=0 DOS08 0026 BB5B v57 DOS08 0031 BB5D ] DOS08 0026 BB5B v57 DOS08 0032 BB5D AD 07 0F LDA DIRHIG + &07 DOS08 0026 BB5B v57 DOS08 0033 BB60 38 SEC DOS08 0026 BB5B v57 DOS08 0034 BB61 E5 C8 SBC WORK + &0E DOS08 0026 BB5B v57 DOS08 0035 BB63 48 PHA DOS08 0026 BB5B v57 DOS08 0036 BB64 AD 06 0F LDA DIRHIG + &06 DOS08 0026 BB5B v57 DOS08 0037 BB67 29 03 ANDIM &03 DOS08 0026 BB5B v57 DOS08 0038 BB69 E5 C9 SBC WORK + &0F DOS08 0026 BB5B v57 DOS08 0039 BB6B 20 40 A0 JSR DIGOUT DOS08 0026 BB5B v57 DOS08 0040 BB6E 68 PLA DOS08 0026 BB5B v57 DOS08 0041 BB6F 20 38 A0 JSR BYTOUT DOS08 0026 BB5B v57 DOS08 0042 BB72 20 F7 9F JSR VSTRNG DOS08 0026 BB5B v57 DOS08 0043 BB75 20 66 72 = " free sectors",CR DOS08 0026 BB5B v57 DOS08 0044 BB83 EA NOP DOS08 0026 BB5B v57 DOS08 0045 BB84 60 RTS DOS08 0026 BB5B v57 DOS08 0046 BB85 DOS08 0026 BB5B v57 DOS08 0047 BB85 84 CA NOTDUN STY WORK + &10 -- DOS08 0048 BB87 20 74 A2 JSR INFORM -- DOS08 0049 BB8A A4 CA LDY WORK + &10 -- DOS08 0050 BB8C [ &FF=0 -- DOS08 0058 BB8C ] -- DOS08 0059 BB8C [ &FF=0 -- DOS08 0063 BB8C | -- DOS08 0064 BB8C B9 0C 0F LDAAY CATHIG + &04 -- DOS08 0065 BB8F C9 01 CMPIM &01 ; Does the same as the above -- DOS08 0066 BB91 ] -- DOS08 0067 BB91 A9 00 LDAIM &00 DOS08 DOS08 DOS08 DOS08 Acorn macro assembler Page 39 DOS08 - DOS08 - Compact DOS08 -- DOS08 0068 BB93 85 BC STA WORK + &02 -- DOS08 0069 BB95 85 C0 STA WORK + &06 -- DOS08 0070 BB97 79 0D 0F ADCAY CATHIG + &05 -- DOS08 0071 BB9A 85 C4 STA WORK + &0A -- DOS08 0072 BB9C B9 0E 0F LDAAY CATHIG + &06 -- DOS08 0073 BB9F 08 PHP -- DOS08 0074 BBA0 20 30 A1 JSR ISOLEN -- DOS08 0075 BBA3 28 PLP -- DOS08 0076 BBA4 69 00 ADCIM &00 -- DOS08 0077 BBA6 85 C5 STA WORK + &0B -- DOS08 0078 BBA8 B9 0F 0F LDAAY CATHIG + &07 -- DOS08 0079 BBAB 85 C6 STA WORK + &0C -- DOS08 0080 BBAD B9 0E 0F LDAAY CATHIG + &06 -- DOS08 0081 BBB0 29 03 ANDIM &03 -- DOS08 0082 BBB2 85 C7 STA WORK + &0D -- DOS08 0083 BBB4 C5 C9 CMP WORK + &0F -- DOS08 0084 BBB6 D0 14 BNE CMPCT2 DOS08 0084 BBB6 v6B DOS08 0085 BBB8 A5 C6 LDA WORK + &0C DOS08 0084 BBB6 v6B DOS08 0086 BBBA C5 C8 CMP WORK + &0E DOS08 0084 BBB6 v6B DOS08 0087 BBBC D0 0E BNE CMPCT2 DOS08 0084 BBB6 v6B DOS08 0088 BBBE 18 CLC DOS08 0084 BBB6 v6B DOS08 0089 BBBF 65 C4 ADC WORK + &0A DOS08 0084 BBB6 v6B DOS08 0090 BBC1 85 C8 STA WORK + &0E DOS08 0084 BBB6 v6B DOS08 0091 BBC3 A5 C9 LDA WORK + &0F DOS08 0084 BBB6 v6B DOS08 0092 BBC5 65 C5 ADC WORK + &0B DOS08 0084 BBB6 v6B DOS08 0093 BBC7 85 C9 STA WORK + &0F DOS08 0084 BBB6 v6B DOS08 0094 BBC9 4C E7 BB JMP CMPCT4 DOS08 0084 BBB6 v6B DOS08 0095 BBCC A5 C8 CMPCT2 LDA WORK + &0E -- DOS08 0096 BBCE 99 0F 0F STAAY CATHIG + &07 -- DOS08 0097 BBD1 B9 0E 0F LDAAY CATHIG + &06 -- DOS08 0098 BBD4 29 FC ANDIM &FC -- DOS08 0099 BBD6 05 C9 ORA WORK + &0F -- DOS08 0100 BBD8 99 0E 0F STAAY CATHIG + &06 -- DOS08 0101 BBDB A9 00 LDAIM &00 -- DOS08 0102 BBDD 85 A8 STA LINNO -- DOS08 0103 BBDF 85 A9 STA LINNO + &01 -- DOS08 0104 BBE1 20 02 BE JSR MVDKDA -- DOS08 0105 BBE4 20 3B AA JSR DIROUT -- DOS08 0106 BBE7 A4 CA CMPCT4 LDY WORK + &10 -- DOS08 0107 BBE9 20 79 A2 JSR PRTINF -- DOS08 0108 BBEC 4C 54 BB JMP LOOPX -- DOS08 0109 BBEF -- DOS08 0110 BBEF LNK DOS09 -- DOS09 0001 BBEF ;*** File Nine *** - DOS09 -- DOS09 0002 BBEF TTL - DOS09 - Copy complete disk -- DOS09 0003 BBEF OPT &01 -- DOS09 0004 BBEF ;* BACKUP - Does disk backup sector -- DOS09 0005 BBEF ; for sector * -- DOS09 0006 BBEF [ NOENAB=0 -- DOS09 0007 BBEF | -- DOS09 0008 BBEF 2C C7 10 CHKENA BIT ENAFLG -- DOS09 0009 BBF2 10 5E BPL CHKEN0 DOS09 0009 BBF2 v21 DOS09 0010 BBF4 DOS09 0009 BBF2 v21 DOS09 0011 BBF4 20 BE BC JSR SURE DOS09 0009 BBF2 v21 DOS09 0012 BBF7 F0 02 BEQ CHKNA1 DOS09 0009 BBF2 v21 DOS09 0013 BBF9 68 PLA DOS09 0009 BBF2 v21 DOS09 0014 BBFA 68 PLA ; Peel off one RTS level DOS09 0009 BBF2 v21 DOS09 0015 BBFB 4C B6 BC CHKNA1 JMP PCRLF DOS09 0009 BBF2 v21 DOS09 0016 BBFE ; ******* JSR ESTRNG DOS09 0009 BBF2 v21 DOS09 0017 BBFE ; ******* = CNENUM,"Not enabled",$00 DOS09 0009 BBF2 v21 DOS09 0018 BBFE ] DOS09 0009 BBF2 v21 DOS09 0019 BBFE DOS09 0009 BBF2 v21 DOS09 0020 BBFE 20 61 BA GET2DR JSR CHKSYN DOS09 0009 BBF2 v21 DOS09 0021 BC01 20 D3 A9 JSR GETDRV DOS09 0009 BBF2 v21 DOS09 0022 BC04 8D D1 10 STA FDRIV DOS09 0009 BBF2 v21 DOS09 0023 BC07 20 61 BA JSR CHKSYN DOS09 0009 BBF2 v21 DOS09 0024 BC0A 20 D3 A9 JSR GETDRV DOS09 0009 BBF2 v21 DOS09 0025 BC0D 8D D2 10 STA TDRIV DOS09 0009 BBF2 v21 DOS09 0026 BC10 98 TYA DOS09 0009 BBF2 v21 DOS09 0027 BC11 48 PHA DOS09 0009 BBF2 v21 DOS09 0028 BC12 A9 00 LDAIM &00 DOS09 0009 BBF2 v21 DOS09 0029 BC14 85 A9 STA LINNO + &01 DOS09 0009 BBF2 v21 DOS09 0030 BC16 AD D2 10 LDA TDRIV DOS09 0009 BBF2 v21 DOS09 0031 BC19 CD D1 10 CMP FDRIV DOS09 0009 BBF2 v21 DOS09 0032 BC1C D0 06 BNE COPYNS DOS09 0009 BBF2 v21 DOS09 0033 BC1E A9 FF LDAIM &FF DOS09 0009 BBF2 v21 DOS09 0034 BC20 85 A9 STA LINNO + &01 DOS09 0009 BBF2 v21 DOS09 0035 BC22 85 AA STA LINNO + &02 DOS09 0009 BBF2 v21 DOS09 0036 BC24 20 E5 B8 COPYNS JSR GETLSZ DOS09 0009 BBF2 v21 DOS09 0037 BC27 20 F7 9F JSR VSTRNG DOS09 0009 BBF2 v21 DOS09 0038 BC2A 43 6F 70 = "Copying from :" DOS09 0009 BBF2 v21 DOS09 0039 BC38 AD D1 10 LDA FDRIV DOS09 0009 BBF2 v21 DOS09 0040 BC3B 20 40 A0 JSR DIGOUT DOS09 0009 BBF2 v21 DOS09 0041 BC3E 20 F7 9F JSR VSTRNG DOS09 0009 BBF2 v21 DOS09 0042 BC41 20 74 6F = " to :" DOS09 0009 BBF2 v21 DOS09 0043 BC46 AD D2 10 LDA TDRIV DOS09 0009 BBF2 v21 DOS09 0044 BC49 20 40 A0 JSR DIGOUT DOS09 0009 BBF2 v21 DOS09 0045 BC4C 20 B6 BC JSR PCRLF DOS09 0009 BBF2 v21 DOS09 0046 BC4F 68 PLA DOS09 0009 BBF2 v21 DOS09 0047 BC50 A8 TAY DOS09 0009 BBF2 v21 DOS09 0048 BC51 18 CLC DOS09 0009 BBF2 v21 DOS09 0049 BC52 60 CHKEN0 RTS -- DOS09 0050 BC53 -- DOS09 0051 BC53 -- DOS09 0052 BC53 20 27 A3 CHKDSF JSR SAVITA -- DOS09 0053 BC56 24 A9 BIT LINNO + &01 -- DOS09 0054 BC58 10 0B BPL CHKDS1 DOS09 0054 BC58 v74 DOS09 0055 BC5A A9 00 LDAIM &00 DOS09 0054 BC58 v74 DOS09 0056 BC5C F0 0A BEQ CHKDS0 DOS09 0054 BC58 v74 DOS09 0057 BC5E 20 27 A3 CHKDST JSR SAVITA DOS09 0054 BC58 v74 DOS09 0058 BC61 24 A9 BIT LINNO + &01 DOS09 0054 BC58 v74 DOS09 0059 BC63 30 01 BMI CHKDS2 DOS09 0054 BC58 v74 DOS09 0060 BC65 60 CHKDS1 RTS DOS09 0056 BC5C v75 DOS09 0061 BC66 A9 80 CHKDS2 LDAIM &80 DOS09 0056 BC5C v75 DOS09 0062 BC68 C5 AA CHKDS0 CMP LINNO + &02 DOS09 0063 BC6A ^79 DOS09 0063 BC6A F0 F9 BEQ CHKDS1 -- DOS09 0064 BC6C 85 AA STA LINNO + &02 -- DOS09 0065 BC6E 20 F7 9F JSR VSTRNG -- DOS09 0066 BC71 49 6E 73 = "Insert ",&EA -- DOS09 0067 BC79 24 AA BIT LINNO + &02 -- DOS09 0068 BC7B 30 0B BMI CHKDS3 DOS09 0068 BC7B v74 DOS09 0069 BC7D 20 F7 9F JSR VSTRNG DOS09 0068 BC7B v74 DOS09 0070 BC80 73 6F 75 = "source" DOS09 0068 BC7B v74 DOS09 0071 BC86 90 0F BCC CHKDS4 DOS09 0071 BC86 v70 DOS09 0072 BC88 20 F7 9F CHKDS3 JSR VSTRNG DOS09 0071 BC86 v70 DOS09 0073 BC8B 64 65 73 = "destination",&EA DOS09 0071 BC86 v70 DOS09 0074 BC97 20 F7 9F CHKDS4 JSR VSTRNG -- DOS09 0075 BC9A 20 64 69 = " disk and hit a key",&EA -- DOS09 0076 BCAE 20 89 B9 JSR CLRKEY -- DOS09 0077 BCB1 20 E0 FF JSR OSRDCH -- DOS09 0078 BCB4 B0 2D BCS ABORT DOS09 DOS09 DOS09 DOS09 Acorn macro assembler Page 40 DOS09 - DOS09 - Copy complete disk DOS09 DOS09 0078 BCB4 v52 DOS09 0079 BCB6 DOS09 0078 BCB4 v52 DOS09 0080 BCB6 ;Print carriage return line feed DOS09 0078 BCB4 v52 DOS09 0081 BCB6 48 PCRLF PHA DOS09 0078 BCB4 v52 DOS09 0082 BCB7 A9 0D LDAIM CR DOS09 0078 BCB4 v52 DOS09 0083 BCB9 20 1F A0 JSR PCHR DOS09 0078 BCB4 v52 DOS09 0084 BCBC 68 PLA DOS09 0078 BCB4 v52 DOS09 0085 BCBD 60 RTS DOS09 0078 BCB4 v52 DOS09 0086 BCBE DOS09 0078 BCB4 v52 DOS09 0087 BCBE 20 F7 9F SURE JSR VSTRNG DOS09 0078 BCB4 v52 DOS09 0088 BCC1 47 6F 20 = "Go (Y/N) ? ",&EA DOS09 0078 BCB4 v52 DOS09 0089 BCCD ;Get a 'Y' or 'N' from the keyboard DOS09 0078 BCB4 v52 DOS09 0090 BCCD ; defaults to 'N' DOS09 0078 BCB4 v52 DOS09 0091 BCCD 20 89 B9 GETYN JSR CLRKEY DOS09 0078 BCB4 v52 DOS09 0092 BCD0 20 E0 FF JSR OSRDCH DOS09 0078 BCB4 v52 DOS09 0093 BCD3 B0 0E BCS ABORT DOS09 0078 BCB4 v52 DOS09 0094 BCD5 29 5F ANDIM &5F DOS09 0078 BCB4 v52 DOS09 0095 BCD7 C9 59 CMPIM "Y" DOS09 0078 BCB4 v52 DOS09 0096 BCD9 08 PHP DOS09 0078 BCB4 v52 DOS09 0097 BCDA F0 02 BEQ GETYN0 DOS09 0078 BCB4 v52 DOS09 0098 BCDC A9 4E LDAIM "N" DOS09 0078 BCB4 v52 DOS09 0099 BCDE 20 1F A0 GETYN0 JSR PCHR DOS09 0078 BCB4 v52 DOS09 0100 BCE1 28 PLP DOS09 0078 BCB4 v52 DOS09 0101 BCE2 60 RTS DOS09 0078 BCB4 v52 DOS09 0102 BCE3 DOS09 0078 BCB4 v52 DOS09 0103 BCE3 ;Abort command DOS09 0078 BCB4 v52 DOS09 0104 BCE3 4C 76 AB ABORT JMP ESCAPE -- DOS09 0105 BCE6 -- DOS09 0106 BCE6 4C B6 A8 NOCOP JMP NOROOM DOS09 0150 BD2D ^37 DOS09 0107 BCE9 DOS09 0150 BD2D ^37 DOS09 0108 BCE9 [ NOENAB=0 DOS09 0150 BD2D ^37 DOS09 0110 BCE9 | DOS09 0150 BD2D ^37 DOS09 0111 BCE9 CPYDSK ; ******* JSR CHKENA DOS09 0150 BD2D ^37 DOS09 0112 BCE9 ] DOS09 0150 BD2D ^37 DOS09 0113 BCE9 20 FE BB JSR GET2DR DOS09 0150 BD2D ^37 DOS09 0114 BCEC ; ****** DOS09 0150 BD2D ^37 DOS09 0115 BCEC 20 EF BB JSR CHKENA DOS09 0150 BD2D ^37 DOS09 0116 BCEF ; ****** DOS09 0150 BD2D ^37 DOS09 0117 BCEF [ NOENAB=0 DOS09 0150 BD2D ^37 DOS09 0118 BCEF ] DOS09 0150 BD2D ^37 DOS09 0119 BCEF A9 00 LDAIM &00 DOS09 0150 BD2D ^37 DOS09 0120 BCF1 85 C7 STA WORK + &0D DOS09 0150 BD2D ^37 DOS09 0121 BCF3 85 C9 STA WORK + &0F DOS09 0150 BD2D ^37 DOS09 0122 BCF5 85 C8 STA WORK + &0E DOS09 0150 BD2D ^37 DOS09 0123 BCF7 85 C6 STA WORK + &0C DOS09 0150 BD2D ^37 DOS09 0124 BCF9 85 A8 STA LINNO DOS09 0150 BD2D ^37 DOS09 0125 BCFB 20 53 BC JSR CHKDSF DOS09 0150 BD2D ^37 DOS09 0126 BCFE AD D1 10 LDA FDRIV DOS09 0150 BD2D ^37 DOS09 0127 BD01 85 CD STA FDRIVE DOS09 0150 BD2D ^37 DOS09 0128 BD03 20 6B AA JSR DIRLDY DOS09 0150 BD2D ^37 DOS09 0129 BD06 AD 07 0F LDA DIRHIG + &07 DOS09 0150 BD2D ^37 DOS09 0130 BD09 85 C4 STA WORK + &0A DOS09 0150 BD2D ^37 DOS09 0131 BD0B AD 06 0F LDA DIRHIG + &06 DOS09 0150 BD2D ^37 DOS09 0132 BD0E 29 03 ANDIM &03 DOS09 0150 BD2D ^37 DOS09 0133 BD10 85 C5 STA WORK + &0B DOS09 0150 BD2D ^37 DOS09 0134 BD12 ;***************************** HMT DOS09 0150 BD2D ^37 DOS09 0135 BD12 ; LDA DIRHIG + $06 ; Get boot option DOS09 0150 BD2D ^37 DOS09 0136 BD12 ; ANDIM $F0 DOS09 0150 BD2D ^37 DOS09 0137 BD12 ; STA QTEMP DOS09 0150 BD2D ^37 DOS09 0138 BD12 ;***************************** HMT DOS09 0150 BD2D ^37 DOS09 0139 BD12 20 5E BC JSR CHKDST DOS09 0150 BD2D ^37 DOS09 0140 BD15 AD D2 10 LDA TDRIV DOS09 0150 BD2D ^37 DOS09 0141 BD18 85 CD STA FDRIVE DOS09 0150 BD2D ^37 DOS09 0142 BD1A 20 6B AA JSR DIRLDY DOS09 0150 BD2D ^37 DOS09 0143 BD1D AD 06 0F LDA DIRHIG + &06 DOS09 0150 BD2D ^37 DOS09 0144 BD20 29 03 ANDIM &03 DOS09 0150 BD2D ^37 DOS09 0145 BD22 C5 C5 CMP WORK + &0B DOS09 0150 BD2D ^37 DOS09 0146 BD24 90 C0 BCC NOCOP DOS09 0150 BD2D ^37 DOS09 0147 BD26 D0 07 BNE CPYDK4 DOS09 0150 BD2D ^37 DOS09 0148 BD28 AD 07 0F LDA DIRHIG + &07 DOS09 0150 BD2D ^37 DOS09 0149 BD2B C5 C4 CMP WORK + &0A DOS09 0150 BD2D ^37 DOS09 0150 BD2D 90 B7 BCC NOCOP DOS09 0147 BD26 v78 DOS09 0151 BD2F 20 02 BE CPYDK4 JSR MVDKDA ; Move the data HMT -- DOS09 0152 BD32 ;************************* HMT -- DOS09 0153 BD32 ; LDA DIRHIG + $06 -- DOS09 0154 BD32 ; PHA -- DOS09 0155 BD32 ; LDA DIRHIG + $07 -- DOS09 0156 BD32 ; PHA -- DOS09 0157 BD32 -- DOS09 0158 BD32 4C 6B AA JMP DIRLDY ; Get the dir back into RAM -- DOS09 0159 BD35 -- DOS09 0160 BD35 ; PLA -- DOS09 0161 BD35 ; STA DIRHIG + $07 -- DOS09 0162 BD35 ; PLA -- DOS09 0163 BD35 ; ANDIM $0F -- DOS09 0164 BD35 ; ORA QTEMP -- DOS09 0165 BD35 ; STA DIRHIG + $06 -- DOS09 0166 BD35 -- DOS09 0167 BD35 ; JMP DIROUT -- DOS09 0168 BD35 ; This removed does not increment the MSN on the copy. HMT -- DOS09 0169 BD35 -- DOS09 0170 BD35 ;************************* HMT -- DOS09 0171 BD35 -- DOS09 0172 BD35 LNK DOS10 -- DOS10 0001 BD35 ;*** File 10 *** - DOS10 -- DOS10 0002 BD35 TTL - DOS10 - Copy files -- DOS10 0003 BD35 OPT &01 -- DOS10 0004 BD35 ;* Copies files * -- DOS10 0005 BD35 -- DOS10 0006 BD35 20 04 B8 CPYFIL JSR SETWLD -- DOS10 0007 BD38 20 FE BB JSR GET2DR -- DOS10 0008 BD3B 20 61 BA JSR CHKSYN -- DOS10 0009 BD3E 20 6A A0 JSR GETNAM -- DOS10 0010 BD41 20 53 BC JSR CHKDSF -- DOS10 0011 BD44 AD D1 10 LDA FDRIV -- DOS10 0012 BD47 20 99 A6 JSR DODRIV -- DOS10 0013 BD4A 20 87 A1 JSR ERRLOK -- DOS10 0014 BD4D A5 CC CPYFL3 LDA QUALIF DOS10 0061 BDB0 ^1B DOS10 0015 BD4F ;**************************QSTORE DOS10 0061 BDB0 ^1B DOS10 0016 BD4F 48 PHA ; Save bytes, instead of QSTORE DOS10 0061 BDB0 ^1B DOS10 0017 BD50 A5 B6 LDA VTEMP DOS10 0061 BDB0 ^1B DOS10 0018 BD52 85 AB STA LTEMP DOS10 0061 BDB0 ^1B DOS10 0019 BD54 20 79 A2 JSR PRTINF DOS10 0061 BDB0 ^1B DOS10 0020 BD57 A2 00 LDXIM &00 DOS10 0061 BDB0 ^1B DOS10 0021 BD59 B9 08 0E COPYL LDAAY CATLOW DOS10 0061 BDB0 ^1B DOS10 0022 BD5C 95 C5 STAZX WORK + &0B DOS10 0061 BDB0 ^1B DOS10 0023 BD5E 9D 50 10 STAAX NAMTRA DOS10 0061 BDB0 ^1B DOS10 0024 BD61 B9 08 0F LDAAY CATHIG DOS10 0061 BDB0 ^1B DOS10 0025 BD64 95 BB STAZX WORK + &01 DOS10 0061 BDB0 ^1B DOS10 0026 BD66 9D 47 10 STAAX TMPCIN + &02 DOS10 0061 BDB0 ^1B DOS10 0027 BD69 E8 INX DOS10 0061 BDB0 ^1B DOS10 0028 BD6A C8 INY DOS10 DOS10 DOS10 DOS10 Acorn macro assembler Page 41 DOS10 - DOS10 - Copy files DOS10 DOS10 0061 BDB0 ^1B DOS10 0029 BD6B E0 08 CPXIM &08 DOS10 0061 BDB0 ^1B DOS10 0030 BD6D D0 EA BNE COPYL DOS10 0061 BDB0 ^1B DOS10 0031 BD6F A5 C1 LDA WORK + &07 DOS10 0061 BDB0 ^1B DOS10 0032 BD71 20 30 A1 JSR ISOLEN DOS10 0061 BDB0 ^1B DOS10 0033 BD74 85 C3 STA WORK + &09 DOS10 0061 BDB0 ^1B DOS10 0034 BD76 A5 BF LDA WORK + &05 DOS10 0061 BDB0 ^1B DOS10 0035 BD78 18 CLC DOS10 0061 BDB0 ^1B DOS10 0036 BD79 69 FF ADCIM &FF DOS10 0061 BDB0 ^1B DOS10 0037 BD7B A5 C0 LDA WORK + &06 DOS10 0061 BDB0 ^1B DOS10 0038 BD7D 69 00 ADCIM &00 DOS10 0061 BDB0 ^1B DOS10 0039 BD7F 85 C4 STA WORK + &0A DOS10 0061 BDB0 ^1B DOS10 0040 BD81 A5 C3 LDA WORK + &09 DOS10 0061 BDB0 ^1B DOS10 0041 BD83 69 00 ADCIM &00 DOS10 0061 BDB0 ^1B DOS10 0042 BD85 85 C5 STA WORK + &0B DOS10 0061 BDB0 ^1B DOS10 0043 BD87 AD 4E 10 LDA TMPCIN + &09 DOS10 0061 BDB0 ^1B DOS10 0044 BD8A 85 C6 STA WORK + &0C DOS10 0061 BDB0 ^1B DOS10 0045 BD8C AD 4D 10 LDA TMPCIN + &08 DOS10 0061 BDB0 ^1B DOS10 0046 BD8F 29 03 ANDIM &03 DOS10 0061 BDB0 ^1B DOS10 0047 BD91 85 C7 STA WORK + &0D DOS10 0061 BDB0 ^1B DOS10 0048 BD93 A9 FF LDAIM &FF ;Set the output dir flag DOS10 0061 BDB0 ^1B DOS10 0049 BD95 85 A8 STA LINNO DOS10 0061 BDB0 ^1B DOS10 0050 BD97 20 02 BE JSR MVDKDA DOS10 0061 BDB0 ^1B DOS10 0051 BD9A 20 53 BC JSR CHKDSF DOS10 0061 BDB0 ^1B DOS10 0052 BD9D AD D1 10 LDA FDRIV DOS10 0061 BDB0 ^1B DOS10 0053 BDA0 20 99 A6 JSR DODRIV DOS10 0061 BDB0 ^1B DOS10 0054 BDA3 20 C2 A2 JSR GETDIR DOS10 0061 BDB0 ^1B DOS10 0055 BDA6 A5 AB LDA LTEMP DOS10 0061 BDB0 ^1B DOS10 0056 BDA8 85 B6 STA VTEMP DOS10 0061 BDB0 ^1B DOS10 0057 BDAA ;**************************QSTORE DOS10 0061 BDB0 ^1B DOS10 0058 BDAA 68 PLA ; Save bytes, instead of QSTORE DOS10 0061 BDB0 ^1B DOS10 0059 BDAB 85 CC STA QUALIF DOS10 0061 BDB0 ^1B DOS10 0060 BDAD 20 BF A1 JSR NEXT DOS10 0061 BDB0 ^1B DOS10 0061 BDB0 B0 9B BCS CPYFL3 -- DOS10 0062 BDB2 60 RTS -- DOS10 0063 BDB3 -- DOS10 0064 BDB3 20 F1 BD REGEN JSR SWPFCB -- DOS10 0065 BDB6 20 5E BC JSR CHKDST -- DOS10 0066 BDB9 AD D2 10 LDA TDRIV -- DOS10 0067 BDBC 85 CD STA FDRIVE -- DOS10 0068 BDBE A5 CC LDA QUALIF -- DOS10 0069 BDC0 48 PHA ;save lock status -- DOS10 0070 BDC1 20 C2 A2 JSR GETDIR -- DOS10 0071 BDC4 20 AC A1 JSR LOOKW -- DOS10 0072 BDC7 90 03 BCC COPYFE DOS10 0072 BDC7 v7C DOS10 0073 BDC9 20 49 A2 JSR DELFIL DOS10 0072 BDC7 v7C DOS10 0074 BDCC 68 COPYFE PLA -- DOS10 0075 BDCD 85 CC STA QUALIF -- DOS10 0076 BDCF 20 95 A9 JSR DECODL -- DOS10 0077 BDD2 20 AC A9 JSR DECODE -- DOS10 0078 BDD5 A5 C2 LDA WORK + &08 -- DOS10 0079 BDD7 20 30 A1 JSR ISOLEN -- DOS10 0080 BDDA 85 C4 STA WORK + &0A -- DOS10 0081 BDDC 20 FB A8 JSR GENFIL -- DOS10 0082 BDDF A5 C2 LDA WORK + &08 -- DOS10 0083 BDE1 29 03 ANDIM &03 -- DOS10 0084 BDE3 48 PHA -- DOS10 0085 BDE4 A5 C3 LDA WORK + &09 -- DOS10 0086 BDE6 48 PHA -- DOS10 0087 BDE7 20 F1 BD JSR SWPFCB -- DOS10 0088 BDEA 68 PLA -- DOS10 0089 BDEB 85 C8 STA WORK + &0E -- DOS10 0090 BDED 68 PLA -- DOS10 0091 BDEE 85 C9 STA WORK + &0F -- DOS10 0092 BDF0 60 RTS -- DOS10 0093 BDF1 -- DOS10 0094 BDF1 A2 11 SWPFCB LDXIM &11 -- DOS10 0095 BDF3 BD 45 10 SWPFC0 LDAAX TMPCIN DOS10 0101 BDFF ^72 DOS10 0096 BDF6 B4 BA LDYZX WORK DOS10 0101 BDFF ^72 DOS10 0097 BDF8 95 BA STAZX WORK DOS10 0101 BDFF ^72 DOS10 0098 BDFA 98 TYA DOS10 0101 BDFF ^72 DOS10 0099 BDFB 9D 45 10 STAAX TMPCIN DOS10 0101 BDFF ^72 DOS10 0100 BDFE CA DEX DOS10 0101 BDFF ^72 DOS10 0101 BDFF 10 F2 BPL SWPFC0 -- DOS10 0102 BE01 60 RTS -- DOS10 0103 BE02 -- DOS10 0104 BE02 ;Move Disk Data -- DOS10 0105 BE02 ;On entry:- -- DOS10 0106 BE02 ;FDRIV: Source drive -- DOS10 0107 BE02 ;TDRIV: Destination drive -- DOS10 0108 BE02 ;WORK + $0F: Dest sec no (H) -- DOS10 0109 BE02 ; + $0E: (L) -- DOS10 0110 BE02 ; + $0D: Src sec no (H) -- DOS10 0111 BE02 ; + $0C: (L) -- DOS10 0112 BE02 ; + $0B: Secs to move (H) -- DOS10 0113 BE02 ; + $0A: (L) -- DOS10 0114 BE02 ; -- DOS10 0115 BE02 ;Used internally:- -- DOS10 0116 BE02 ; + $09: Sec no to R/W (H) -- DOS10 0117 BE02 ; + $08: (L) -- DOS10 0118 BE02 ; + $07: Sectors to shift this time -- DOS10 0119 BE02 ; + $06: Zero (Low length) -- DOS10 0120 BE02 ; + $05: -- DOS10 0121 BE02 ; + $04: -- DOS10 0122 BE02 ; + $03: Start of buffer (H) -- DOS10 0123 BE02 ; + $02: (L) (Zero) -- DOS10 0124 BE02 ; + $01: -- DOS10 0125 BE02 ; + $00: -- DOS10 0126 BE02 A9 00 MVDKDA LDAIM &00 -- DOS10 0127 BE04 85 BC STA WORK + &02 -- DOS10 0128 BE06 85 C0 STA WORK + &06 -- DOS10 0129 BE08 F0 79 BEQ CPYFL8 ; Always, to Precheck the length DOS10 0129 BE08 v06 DOS10 0130 BE0A DOS10 0129 BE08 v06 DOS10 0131 BE0A A5 C4 CPYFL5 LDA WORK + &0A DOS10 0188 BE87 ^01 DOS10 0132 BE0C A8 TAY DOS10 0188 BE87 ^01 DOS10 0133 BE0D CD D0 10 CMP FRSIZE DOS10 0188 BE87 ^01 DOS10 0134 BE10 A5 C5 LDA WORK + &0B DOS10 0188 BE87 ^01 DOS10 0135 BE12 E9 00 SBCIM &00 DOS10 0188 BE87 ^01 DOS10 0136 BE14 90 03 BCC SIZET DOS10 0188 BE87 ^01 DOS10 0137 BE16 AC D0 10 LDY FRSIZE DOS10 0188 BE87 ^01 DOS10 0138 BE19 84 C1 SIZET STY WORK + &07 DOS10 0188 BE87 ^01 DOS10 0139 BE1B A5 C6 LDA WORK + &0C DOS10 0188 BE87 ^01 DOS10 0140 BE1D 85 C3 STA WORK + &09 DOS10 0188 BE87 ^01 DOS10 0141 BE1F A5 C7 LDA WORK + &0D DOS10 0188 BE87 ^01 DOS10 0142 BE21 85 C2 STA WORK + &08 DOS10 0188 BE87 ^01 DOS10 0143 BE23 AD CF 10 LDA FRPAGE DOS10 0188 BE87 ^01 DOS10 0144 BE26 85 BD STA WORK + &03 DOS10 0188 BE87 ^01 DOS10 0145 BE28 AD D1 10 LDA FDRIV DOS10 0188 BE87 ^01 DOS10 0146 BE2B 85 CD STA FDRIVE DOS10 0188 BE87 ^01 DOS10 0147 BE2D 20 53 BC JSR CHKDSF DOS10 0188 BE87 ^01 DOS10 0148 BE30 20 98 AB JSR DETUBE DOS10 0188 BE87 ^01 DOS10 0149 BE33 20 31 AB JSR DRVSEL DOS10 DOS10 DOS10 DOS10 Acorn macro assembler Page 42 DOS10 - DOS10 - Copy files DOS10 DOS10 0188 BE87 ^01 DOS10 0150 BE36 20 D3 A6 JSR BLKRD DOS10 0188 BE87 ^01 DOS10 0151 BE39 AD D2 10 LDA TDRIV DOS10 0188 BE87 ^01 DOS10 0152 BE3C 85 CD STA FDRIVE DOS10 0188 BE87 ^01 DOS10 0153 BE3E 24 A8 BIT LINNO DOS10 0188 BE87 ^01 DOS10 0154 BE40 10 07 BPL CPYFL9 DOS10 0188 BE87 ^01 DOS10 0155 BE42 20 B3 BD JSR REGEN DOS10 0188 BE87 ^01 DOS10 0156 BE45 A9 00 LDAIM &00 DOS10 0188 BE87 ^01 DOS10 0157 BE47 85 A8 STA LINNO DOS10 0188 BE87 ^01 DOS10 0158 BE49 A5 C8 CPYFL9 LDA WORK + &0E DOS10 0188 BE87 ^01 DOS10 0159 BE4B 85 C3 STA WORK + &09 DOS10 0188 BE87 ^01 DOS10 0160 BE4D A5 C9 LDA WORK + &0F DOS10 0188 BE87 ^01 DOS10 0161 BE4F 85 C2 STA WORK + &08 DOS10 0188 BE87 ^01 DOS10 0162 BE51 AD CF 10 LDA FRPAGE DOS10 0188 BE87 ^01 DOS10 0163 BE54 85 BD STA WORK + &03 DOS10 0188 BE87 ^01 DOS10 0164 BE56 20 5E BC JSR CHKDST DOS10 0188 BE87 ^01 DOS10 0165 BE59 20 98 AB JSR DETUBE DOS10 0188 BE87 ^01 DOS10 0166 BE5C 20 31 AB JSR DRVSEL DOS10 0188 BE87 ^01 DOS10 0167 BE5F 20 E1 A6 JSR BLKWR DOS10 0188 BE87 ^01 DOS10 0168 BE62 A5 C1 LDA WORK + &07 DOS10 0188 BE87 ^01 DOS10 0169 BE64 18 CLC DOS10 0188 BE87 ^01 DOS10 0170 BE65 65 C8 ADC WORK + &0E DOS10 0188 BE87 ^01 DOS10 0171 BE67 85 C8 STA WORK + &0E DOS10 0188 BE87 ^01 DOS10 0172 BE69 90 02 BCC CPYFL6 DOS10 0188 BE87 ^01 DOS10 0173 BE6B E6 C9 INC WORK + &0F DOS10 0188 BE87 ^01 DOS10 0174 BE6D A5 C1 CPYFL6 LDA WORK + &07 DOS10 0188 BE87 ^01 DOS10 0175 BE6F 18 CLC DOS10 0188 BE87 ^01 DOS10 0176 BE70 65 C6 ADC WORK + &0C DOS10 0188 BE87 ^01 DOS10 0177 BE72 85 C6 STA WORK + &0C DOS10 0188 BE87 ^01 DOS10 0178 BE74 90 02 BCC CPYFL7 DOS10 0188 BE87 ^01 DOS10 0179 BE76 E6 C7 INC WORK + &0D DOS10 0188 BE87 ^01 DOS10 0180 BE78 38 CPYFL7 SEC DOS10 0188 BE87 ^01 DOS10 0181 BE79 A5 C4 LDA WORK + &0A DOS10 0188 BE87 ^01 DOS10 0182 BE7B E5 C1 SBC WORK + &07 DOS10 0188 BE87 ^01 DOS10 0183 BE7D 85 C4 STA WORK + &0A DOS10 0188 BE87 ^01 DOS10 0184 BE7F B0 02 BCS CPYFL8 DOS10 0188 BE87 ^01 DOS10 0185 BE81 C6 C5 DEC WORK + &0B DOS10 0188 BE87 ^01 DOS10 0186 BE83 A5 C4 CPYFL8 LDA WORK + &0A ; This is here for the Precheck DOS10 0188 BE87 ^01 DOS10 0187 BE85 05 C5 ORA WORK + &0B DOS10 0188 BE87 ^01 DOS10 0188 BE87 D0 81 BNE CPYFL5 -- DOS10 0189 BE89 60 RTS -- DOS10 0190 BE8A -- DOS10 0191 BE8A LNK DOS11 -- DOS11 0001 BE8A ; *** File Eleven *** > DOS11 -- DOS11 0002 BE8A TTL - DOS11 - Pseudo-MOS resident utilities -- DOS11 0003 BE8A OPT &01 -- DOS11 0004 BE8A ;All those useful facilities that can -- DOS11 0005 BE8A ;be implemented by using only OSCALLs -- DOS11 0006 BE8A -- DOS11 0007 BE8A A6 F4 PRIBLD LDX ROMID -- DOS11 0008 BE8C BD F0 0D LDAAX PRIPTR -- DOS11 0009 BE8F 29 3F ANDIM &3F ; Dont use the FRUGAL bits -- DOS11 0010 BE91 85 AD STA BLDTBL + &01 -- DOS11 0011 BE93 E6 AD INC BLDTBL + &01 -- DOS11 0012 BE95 60 RTS -- DOS11 0013 BE96 -- DOS11 0014 BE96 ;TYPE lists without line numbers -- DOS11 0015 BE96 20 B2 BF TYPE JSR ZERCHK -- DOS11 0016 BE99 A9 00 LDAIM &00 -- DOS11 0017 BE9B F0 05 BEQ TYPE0 DOS11 0017 BE9B v7A DOS11 0018 BE9D DOS11 0017 BE9B v7A DOS11 0019 BE9D ;LIST list with line numbers DOS11 0017 BE9B v7A DOS11 0020 BE9D 20 B2 BF LIST JSR ZERCHK DOS11 0017 BE9B v7A DOS11 0021 BEA0 A9 FF LDAIM &FF DOS11 0017 BE9B v7A DOS11 0022 BEA2 85 AB TYPE0 STA LTEMP ;Store in linno flag -- DOS11 0023 BEA4 A9 40 LDAIM &40 ;Get for reading -- DOS11 0024 BEA6 20 CE FF JSR OSFIND ;Get file -- DOS11 0025 BEA9 A8 TAY -- DOS11 0026 BEAA A9 0D LDAIM CR ;Start with a linno -- DOS11 0027 BEAC C0 00 CPYIM &00 ;Did the file exist ? -- DOS11 0028 BEAE D0 1E BNE TYPE3 DOS11 0028 BEAE v61 DOS11 0029 BEB0 4C 8C A1 TYPE8 JMP NOFIL DOS11 0056 BEE8 ^46 DOS11 0030 BEB3 20 D7 FF TYPE1 JSR OSBGET DOS11 0056 BEE8 ^46 DOS11 0031 BEB6 B0 1E BCS TYPE2 ;EOF?? DOS11 0056 BEE8 ^46 DOS11 0032 BEB8 C9 0A CMPIM LF ;Ignore LFs DOS11 0056 BEE8 ^46 DOS11 0033 BEBA F0 F7 BEQ TYPE1 DOS11 0056 BEE8 ^46 DOS11 0034 BEBC 28 PLP DOS11 0056 BEE8 ^46 DOS11 0035 BEBD D0 08 BNE TYPE4 DOS11 0056 BEE8 ^46 DOS11 0036 BEBF 48 PHA DOS11 0056 BEE8 ^46 DOS11 0037 BEC0 20 DC BF JSR IPRDEC ;Print and INC linno DOS11 0056 BEE8 ^46 DOS11 0038 BEC3 20 A9 BF JSR PSPACE DOS11 0056 BEE8 ^46 DOS11 0039 BEC6 68 PLA DOS11 0056 BEE8 ^46 DOS11 0040 BEC7 20 E3 FF TYPE4 JSR OSASCI ;Print char DOS11 0056 BEE8 ^46 DOS11 0041 BECA 24 FF BIT ESCFLG DOS11 0056 BEE8 ^46 DOS11 0042 BECC 30 1F BMI DUMP3 DOS11 0056 BEE8 ^46 DOS11 0043 BECE 25 AB TYPE3 AND LTEMP ;Linno disable DOS11 0056 BEE8 ^46 DOS11 0044 BED0 C9 0D CMPIM CR DOS11 0056 BEE8 ^46 DOS11 0045 BED2 08 PHP ;Save linno flag DOS11 0056 BEE8 ^46 DOS11 0046 BED3 4C B3 BE JMP TYPE1 DOS11 0056 BEE8 ^46 DOS11 0047 BED6 28 TYPE2 PLP ;Remove from stack DOS11 0056 BEE8 ^46 DOS11 0048 BED7 20 E7 FF JSR OSCRLF DOS11 0056 BEE8 ^46 DOS11 0049 BEDA A9 00 TYPE9 LDAIM &00 ;EOF close down DOS11 0114 BF52 ^06 DOS11 0050 BEDC 4C CE FF JMP OSFIND DOS11 0114 BF52 ^06 DOS11 0051 BEDF DOS11 0114 BF52 ^06 DOS11 0052 BEDF 20 B2 BF DUMP JSR ZERCHK DOS11 0114 BF52 ^06 DOS11 0053 BEE2 A9 40 LDAIM &40 DOS11 0114 BF52 ^06 DOS11 0054 BEE4 20 CE FF JSR OSFIND DOS11 0114 BF52 ^06 DOS11 0055 BEE7 A8 TAY DOS11 0114 BF52 ^06 DOS11 0056 BEE8 F0 C6 BEQ TYPE8 DOS11 0114 BF52 ^06 DOS11 0057 BEEA DOS11 0114 BF52 ^06 DOS11 0058 BEEA 20 8A BE JSR PRIBLD ; Put the private pointer+1 into BLDTBL+$01 DOS11 0114 BF52 ^06 DOS11 0059 BEED DOS11 0114 BF52 ^06 DOS11 0060 BEED ; LDX ROMID DOS11 0114 BF52 ^06 DOS11 0061 BEED ; LDAAX PRIPTR DOS11 0114 BF52 ^06 DOS11 0062 BEED ; ANDIM $3F ; Dont use the FRUGAL bits DOS11 0114 BF52 ^06 DOS11 0063 BEED ; STA BLDTBL + $01 DOS11 0114 BF52 ^06 DOS11 0064 BEED ; INC BLDTBL + $01 DOS11 0114 BF52 ^06 DOS11 0065 BEED DOS11 0114 BF52 ^06 DOS11 0066 BEED 24 FF DUMP3 BIT ESCFLG DOS11 0114 BF52 ^06 DOS11 0067 BEEF 30 65 BMI BUILD4 DOS11 0114 BF52 ^06 DOS11 0068 BEF1 A5 A9 LDA LINNO + &01 DOS11 0114 BF52 ^06 DOS11 0069 BEF3 20 F0 BF JSR HMTBUT DOS11 0114 BF52 ^06 DOS11 0070 BEF6 A5 A8 LDA LINNO DOS11 0114 BF52 ^06 DOS11 0071 BEF8 20 F0 BF JSR HMTBUT DOS11 0114 BF52 ^06 DOS11 0072 BEFB 20 A9 BF JSR PSPACE DOS11 0114 BF52 ^06 DOS11 0073 BEFE A9 07 LDAIM &07 DOS11 0114 BF52 ^06 DOS11 0074 BF00 85 AC STA BLDTBL DOS11 0114 BF52 ^06 DOS11 0075 BF02 A2 00 LDXIM &00 DOS11 0114 BF52 ^06 DOS11 0076 BF04 20 D7 FF DUMP2 JSR OSBGET DOS11 0114 BF52 ^06 DOS11 0077 BF07 B0 0D BCS DUMP4 DOS11 0114 BF52 ^06 DOS11 0078 BF09 81 AC STAIX BLDTBL DOS11 0114 BF52 ^06 DOS11 0079 BF0B 20 F0 BF JSR HMTBUT DOS11 DOS11 DOS11 DOS11 Acorn macro assembler Page 43 DOS11 - DOS11 - Pseudo-MOS resident utilities DOS11 DOS11 0114 BF52 ^06 DOS11 0080 BF0E 20 A9 BF JSR PSPACE DOS11 0114 BF52 ^06 DOS11 0081 BF11 C6 AC DEC BLDTBL DOS11 0114 BF52 ^06 DOS11 0082 BF13 10 EF BPL DUMP2 DOS11 0114 BF52 ^06 DOS11 0083 BF15 18 CLC DOS11 0114 BF52 ^06 DOS11 0084 BF16 08 DUMP4 PHP DOS11 0114 BF52 ^06 DOS11 0085 BF17 90 13 BCC DUMPB DOS11 0114 BF52 ^06 DOS11 0086 BF19 A9 2A DUMPC LDAIM "*" DOS11 0114 BF52 ^06 DOS11 0087 BF1B 20 E3 FF JSR OSASCI DOS11 0114 BF52 ^06 DOS11 0088 BF1E 20 E3 FF JSR OSASCI DOS11 0114 BF52 ^06 DOS11 0089 BF21 20 A9 BF JSR PSPACE ;**************************** HMT DOS11 0114 BF52 ^06 DOS11 0090 BF24 DOS11 0114 BF52 ^06 DOS11 0091 BF24 A9 00 LDAIM &00 DOS11 0114 BF52 ^06 DOS11 0092 BF26 81 AC STAIX BLDTBL DOS11 0114 BF52 ^06 DOS11 0093 BF28 C6 AC DEC BLDTBL DOS11 0114 BF52 ^06 DOS11 0094 BF2A 10 ED BPL DUMPC DOS11 0114 BF52 ^06 DOS11 0095 BF2C A9 07 DUMPB LDAIM &07 DOS11 0114 BF52 ^06 DOS11 0096 BF2E 85 AC STA BLDTBL DOS11 0114 BF52 ^06 DOS11 0097 BF30 A1 AC DUMP6 LDAIX BLDTBL DOS11 0114 BF52 ^06 DOS11 0098 BF32 C9 7F CMPIM &7F DOS11 0114 BF52 ^06 DOS11 0099 BF34 B0 04 BCS DUMP7 DOS11 0114 BF52 ^06 DOS11 0100 BF36 C9 20 CMPIM " " DOS11 0114 BF52 ^06 DOS11 0101 BF38 B0 02 BCS DUMP8 DOS11 0114 BF52 ^06 DOS11 0102 BF3A A9 2E DUMP7 LDAIM "." DOS11 0114 BF52 ^06 DOS11 0103 BF3C 20 E3 FF DUMP8 JSR OSASCI DOS11 0114 BF52 ^06 DOS11 0104 BF3F C6 AC DEC BLDTBL DOS11 0114 BF52 ^06 DOS11 0105 BF41 10 ED BPL DUMP6 DOS11 0114 BF52 ^06 DOS11 0106 BF43 20 E7 FF JSR OSCRLF DOS11 0114 BF52 ^06 DOS11 0107 BF46 A9 08 LDAIM &08 DOS11 0114 BF52 ^06 DOS11 0108 BF48 18 CLC DOS11 0114 BF52 ^06 DOS11 0109 BF49 65 A8 ADC LINNO DOS11 0114 BF52 ^06 DOS11 0110 BF4B 85 A8 STA LINNO DOS11 0114 BF52 ^06 DOS11 0111 BF4D 90 02 BCC DUMP9 DOS11 0114 BF52 ^06 DOS11 0112 BF4F E6 A9 INC LINNO + &01 DOS11 0114 BF52 ^06 DOS11 0113 BF51 28 DUMP9 PLP DOS11 0114 BF52 ^06 DOS11 0114 BF52 B0 86 BCS TYPE9 DOS11 0115 BF54 ^17 DOS11 0115 BF54 90 97 BCC DUMP3 DOS11 0067 BEEF v1A DOS11 0116 BF56 DOS11 0067 BEEF v1A DOS11 0117 BF56 20 99 B9 BUILD4 JSR ACKESC DOS11 0159 BF9C ^38 DOS11 0118 BF59 20 DA BE JSR TYPE9 DOS11 0159 BF9C ^38 DOS11 0119 BF5C 4C 76 AB JMP ESCAPE DOS11 0159 BF9C ^38 DOS11 0120 BF5F DOS11 0159 BF9C ^38 DOS11 0121 BF5F 20 B2 BF BUILD JSR ZERCHK DOS11 0159 BF9C ^38 DOS11 0122 BF62 A9 80 LDAIM &80 DOS11 0159 BF9C ^38 DOS11 0123 BF64 20 CE FF JSR OSFIND DOS11 0159 BF9C ^38 DOS11 0124 BF67 85 AB STA LTEMP DOS11 0159 BF9C ^38 DOS11 0125 BF69 20 DC BF BUILD1 JSR IPRDEC DOS11 0159 BF9C ^38 DOS11 0126 BF6C 20 A9 BF JSR PSPACE DOS11 0159 BF9C ^38 DOS11 0127 BF6F DOS11 0159 BF9C ^38 DOS11 0128 BF6F ; LDX ROMID DOS11 0159 BF9C ^38 DOS11 0129 BF6F ; LDYAX PRIPTR DOS11 0159 BF9C ^38 DOS11 0130 BF6F ; INY DOS11 0159 BF9C ^38 DOS11 0131 BF6F ; TYA DOS11 0159 BF9C ^38 DOS11 0132 BF6F ; ANDIM $3F ; Dont use FRUGAL bits DOS11 0159 BF9C ^38 DOS11 0133 BF6F ; STA BLDTBL + $01 DOS11 0159 BF9C ^38 DOS11 0134 BF6F DOS11 0159 BF9C ^38 DOS11 0135 BF6F 20 8A BE JSR PRIBLD ; Put private pointer+1 into BLDTBL+$01 DOS11 0159 BF9C ^38 DOS11 0136 BF72 DOS11 0159 BF9C ^38 DOS11 0137 BF72 A2 AC LDXIM BLDTBL DOS11 0159 BF9C ^38 DOS11 0138 BF74 A0 FF LDYIM &FF DOS11 0159 BF9C ^38 DOS11 0139 BF76 84 AE STY BLDTBL + &02 DOS11 0159 BF9C ^38 DOS11 0140 BF78 84 B0 STY BLDTBL + &04 DOS11 0159 BF9C ^38 DOS11 0141 BF7A C8 INY ; Y := 0 DOS11 0159 BF9C ^38 DOS11 0142 BF7B 84 AC STY BLDTBL DOS11 0159 BF9C ^38 DOS11 0143 BF7D A9 20 LDAIM " " ; Min. acceptable value DOS11 0159 BF9C ^38 DOS11 0144 BF7F 85 AF STA BLDTBL + &03 DOS11 0159 BF9C ^38 DOS11 0145 BF81 98 TYA DOS11 0159 BF9C ^38 DOS11 0146 BF82 20 F1 FF JSR OSWORD DOS11 0159 BF9C ^38 DOS11 0147 BF85 08 PHP DOS11 0159 BF9C ^38 DOS11 0148 BF86 84 AA STY UTEMP DOS11 0159 BF9C ^38 DOS11 0149 BF88 A4 AB LDY LTEMP DOS11 0159 BF9C ^38 DOS11 0150 BF8A A2 00 LDXIM &00 DOS11 0159 BF9C ^38 DOS11 0151 BF8C F0 07 BEQ BUILD3 ;Always DOS11 0159 BF9C ^38 DOS11 0152 BF8E A1 AC BUILD2 LDAIX BLDTBL DOS11 0159 BF9C ^38 DOS11 0153 BF90 20 D4 FF JSR OSBPUT DOS11 0159 BF9C ^38 DOS11 0154 BF93 E6 AC INC BLDTBL DOS11 0159 BF9C ^38 DOS11 0155 BF95 A5 AC BUILD3 LDA BLDTBL DOS11 0159 BF9C ^38 DOS11 0156 BF97 C5 AA CMP UTEMP DOS11 0159 BF9C ^38 DOS11 0157 BF99 D0 F3 BNE BUILD2 DOS11 0159 BF9C ^38 DOS11 0158 BF9B 28 PLP DOS11 0159 BF9C ^38 DOS11 0159 BF9C B0 B8 BCS BUILD4 -- DOS11 0160 BF9E A9 0D LDAIM CR -- DOS11 0161 BFA0 20 D4 FF JSR OSBPUT -- DOS11 0162 BFA3 4C 69 BF JMP BUILD1 -- DOS11 0163 BFA6 -- DOS11 0164 BFA6 ;*************************************************************** -- DOS11 0165 BFA6 ; This chunk is to be moved into DOS12 to ORG at the right place -- DOS11 0166 BFA6 ; to touch the top of the ROM so PNUM is always at $XFF0 -- DOS11 0167 BFA6 [ &FF=0 -- DOS11 0200 BFA6 ] -- DOS11 0201 BFA6 ;*************************************************************** -- DOS11 0202 BFA6 -- DOS11 0203 BFA6 ;Print two spaces -- DOS11 0204 BFA6 20 A9 BF PDSPC JSR PSPACE -- DOS11 0205 BFA9 -- DOS11 0206 BFA9 ;Print a space -- DOS11 0207 BFA9 48 PSPACE PHA -- DOS11 0208 BFAA A9 20 LDAIM " " -- DOS11 0209 BFAC 20 E3 FF JSR OSASCI -- DOS11 0210 BFAF 68 PLA -- DOS11 0211 BFB0 18 CLC -- DOS11 0212 BFB1 60 RTS -- DOS11 0213 BFB2 -- DOS11 0214 BFB2 BA ZERCHK TSX ;A=0 on return -- DOS11 0215 BFB3 A9 00 LDAIM &00 -- DOS11 0216 BFB5 9D 07 01 STAAX &107 -- DOS11 0217 BFB8 88 DEY -- DOS11 0218 BFB9 C8 ZERCH2 INY DOS11 0221 BFBE ^79 DOS11 0219 BFBA B1 F2 LDAIY LINPTR DOS11 0221 BFBE ^79 DOS11 0220 BFBC C9 20 CMPIM " " DOS11 0221 BFBE ^79 DOS11 0221 BFBE F0 F9 BEQ ZERCH2 -- DOS11 0222 BFC0 C9 0D CMPIM CR -- DOS11 0223 BFC2 D0 03 BNE ZERCH1 DOS11 0223 BFC2 v7C DOS11 0224 BFC4 4C 66 BA JMP SYNERR DOS11 0223 BFC2 v7C DOS11 0225 BFC7 A9 00 ZERCH1 LDAIM &00 ;Clear the line counter -- DOS11 0226 BFC9 85 A8 STA LINNO -- DOS11 0227 BFCB 85 A9 STA LINNO + &01 -- DOS11 0228 BFCD -- DOS11 0229 BFCD ;Convert LINPTR + Y to XY -- DOS11 0230 BFCD 48 PHA -- DOS11 0231 BFCE 98 TYA -- DOS11 0232 BFCF 18 CLC DOS11 DOS11 DOS11 DOS11 Acorn macro assembler Page 44 DOS11 - DOS11 - Pseudo-MOS resident utilities DOS11 -- DOS11 0233 BFD0 65 F2 ADC LINPTR -- DOS11 0234 BFD2 AA TAX -- DOS11 0235 BFD3 A5 F3 LDA LINPTR + &01 -- DOS11 0236 BFD5 69 00 ADCIM &00 -- DOS11 0237 BFD7 A8 TAY -- DOS11 0238 BFD8 68 PLA -- DOS11 0239 BFD9 60 RTS -- DOS11 0240 BFDA -- DOS11 0241 BFDA ENDPRG -- DOS11 0242 BFDA LNK DOS12 -- DOS12 0001 BFDA ; *** File Twelve *** > DOS12 -- DOS12 0002 BFDA TTL - DOS12 - Pseudo-MOS PNUM kept at $XFF0 -- DOS12 0003 BFDA OPT &01 -- DOS12 0004 BFDA -- DOS12 0005 BFDA [ . > &BFDC -- DOS12 0007 BFDA ] -- DOS12 0008 BFDA [ . < &BFDC -- DOS12 0009 BFDA 00 00 % &BFDC - . -- DOS12 0010 BFDC ] -- DOS12 0011 BFDC -- DOS12 0012 BFDC ; ORG &BFDC -- DOS12 0013 BFDC -- DOS12 0014 BFDC IPRDEC -- DOS12 0015 BFDC F8 SED -- DOS12 0016 BFDD 18 CLC -- DOS12 0017 BFDE A5 A8 LDA LINNO -- DOS12 0018 BFE0 69 01 ADCIM &01 -- DOS12 0019 BFE2 85 A8 STA LINNO -- DOS12 0020 BFE4 A5 A9 LDA LINNO + 1 -- DOS12 0021 BFE6 69 00 ADCIM 0 -- DOS12 0022 BFE8 85 A9 STA LINNO + 1 -- DOS12 0023 BFEA D8 CLD -- DOS12 0024 BFEB 20 F0 BF JSR PNUM -- DOS12 0025 BFEE A5 A8 LDA LINNO -- DOS12 0026 BFF0 -- DOS12 0027 BFF0 PNUM ;******** PHA -- DOS12 0028 BFF0 ;******** PHP -- DOS12 0029 BFF0 ;******** JSR SFOUR -- DOS12 0030 BFF0 ;******** PLP -- DOS12 0031 BFF0 ;******** JSR PHNUM -- DOS12 0032 BFF0 ;******** PLA -- DOS12 0033 BFF0 ;********PHNUM TAX -- DOS12 0034 BFF0 ;******** BCS PHNUM0 -- DOS12 0035 BFF0 ;******** BEQ PSPACE -- DOS12 0036 BFF0 ;******** BNE PHNUM0 ; Always -- DOS12 0037 BFF0 -- DOS12 0038 BFF0 HMTBUT -- DOS12 0039 BFF0 48 PHA -- DOS12 0040 BFF1 20 38 A1 JSR SFOUR -- DOS12 0041 BFF4 20 F8 BF JSR PHNUM0 -- DOS12 0042 BFF7 68 PLA -- DOS12 0043 BFF8 PHNUM0 -- DOS12 0044 BFF8 20 45 A0 JSR DIGUT1 ; Convert to character -- DOS12 0045 BFFB 20 E3 FF JSR OSASCI ; Same as JSR DIGOUT only to SPOOL file ******* HMT -- DOS12 0046 BFFE 38 SEC -- DOS12 0047 BFFF 60 RTS -- DOS12 0048 C000 -- DOS12 0049 C000 END Assembly finished, no errors Action : Action : *DIR X Action : GET File : NFS01 Offset : 13 New, Own or Previous address (N/O/P) : O Action : GET File : LOWL01 Offset : 05 New, Own or Previous address (N/O/P) : O Action : GET File : DOS01 Offset : 12 New, Own or Previous address (N/O/P) : O Action : *OPT 1 Action : *BACK Action : SAVE Output file : ROM Start address : &8000 End address : &C000 Load address : &8000 Proc. (T/P/H/I) P Exec address : &8000 Proc. (T/P/H/I) P Action : *spool This Perl script creates the slack columns from the raw listing. Copy the text between the cut lines. Paste it into a new file, slack.pl, and remove the first 30 characters from each line. Then call it with perl slack.pl dnfs.asm.txt >dnfs-slack.txt -------->8--- #!/usr/bin/perl $base=0x8000; @slack = (0x80) x 0x4001; open(ASM,'<'.shift(@ARGV))or die; while(<ASM>){ y/ -~//cd; if(/^Action :\s*asm\s+([A-Z0-9._-]+)/i) { $file=sprintf("%-7s",$1); } elsif(/^[0-9A-F]{4} [0-9A-F]{4} ...... LNK\s+([A-Z0-9._-]+)\s*$/) { $file=sprintf("%-7s",$1); # Link filename not held over as LNK lines do not assemble instructions. } elsif(/^([0-9A-F]{4}) ([0-9A-F]{4}) .. .. .. /) { $line=$1; $pc=hex($2); $label[$pc-$base] = $file.' '.$line.' '.$2 if $pc >= $base; } if(/^([0-9A-F]{4}) ([0-9A-F]{4}) [13579BDF]0 ([0-9A-F]{2}) ...... B/){ $line=$1; $pc=hex($2); $op=hex($3); if($op & 0x80) { $dest = $pc + 2 - 0x100 + $op; $slack = $op - 0x80; for($i = $pc + 2 - $base + $op - 0xFF; $i <= $pc - $base; ++$i) { if($slack[$i] > $slack) { $slack[$i] = $slack; $source[$i] = $pc-$base; } } } else { $dest = $pc + 2 + $op; $slack = 0x7f - $op; for($i = $pc + 2 - $base; $i <= $pc + 2 - $base + $op; ++$i) { if($slack[$i] > $slack) { $slack[$i] = $slack; $source[$i] = $pc-$base; } } } } } undef $file; undef $link; seek(ASM,0,0); while(<ASM>){ y/ -~//cd; if(/^Action :\s*asm\s+([A-Z0-9._-]+)/i) { $link=sprintf("%-7s",$1); } elsif(/^[0-9A-F]{4} [0-9A-F]{4} ...... LNK\s+([A-Z0-9._-]+)\s*$/) { $link=sprintf("%-7s",$1); } elsif(/^[0-9A-F]{4} [0-9A-F]{4} ...... END\s*$/) { $link=sprintf("%-7s",""); } if(/^([0-9A-F]{4}) ([0-9A-F]{4})(.*)$/) { $line=$1; $pc=hex($2); $source=$3; if($pc>=$base && $slack[$pc-$base] < 0x80) { printf("%-17s %s%02X %-7s %s\n", (($pc>=$base && defined($source[$pc-$base]) && defined($label[$source[$pc-$base]])) ? $label[$source[$pc-$base]] : ''), (($source[$pc-$base] < $pc-$base) ? 'v' : '^'), $slack[$pc-$base], $file, $_); } else { printf(" -- %-7s %s\n", $file, $_); } } else { printf(" %-7s %s\n", $file, $_); } if(defined($link)) { $file=$link; undef $link; } } -------->8--- End of dnfs-slack.txt