URL
https://opencores.org/ocsvn/System09/System09/trunk
Subversion Repositories System09
[/] [System09/] [trunk/] [src/] [Flex9/] [f9-monex.lst] - Rev 223
Go to most recent revision | Compare with Previous | Blame | View Log
Assembler release DWC_2.0 version 2.11May 6, 2004 (c) Motorola (free ware)0001 *0002 ** FLEX 9 DISK DRIVERS0003 *0004 * FOR SYS09BUG ON THE0005 * DIGILENT SPARTAN 3 STARTER BOARD AND0006 * TERASIC CYCLONE 2 DE1 BOARD0007 * WITH I/O MAPPED AT $XE0000008 * AND ROM MAPPED AT $XF0000009 * THE DIGILENT SPARTAN 3 STARTER BOARD HAS 1MBYTE OF SRAM0010 * THE TERASIC CYCLONE 2 DE1 BOARD HAS 512KBYTE OF SRAM0011 * THE FIRST 64K IS USED BY FLEX,0012 * THE SECOND 128K IS USED AS A ROM DISK0013 * THE REMAINING RAM IS USED FOR A RAM DISK0014 *0015 *0016 0001 CFLAG EQU $01 CARRY FLAG0017 0002 VFLAG EQU $02 OVERFLOW FLAG0018 0004 ZFLAG EQU $04 ZERO FLAG0019 0008 NFLAG EQU $08 NEGATIVE FLAG0020 0010 IFLAG EQU $10 IRQ MASK CC0021 0020 HFLAG EQU $20 HALF CARRY0022 0040 FFLAG EQU $40 FIRQ MASK CC0023 0080 EFLAG EQU $80 ENTIRE FLAG0024 *0025 0000 MAPPAG EQU $00 PAGE $0000 DAT ADDRESSf9-monex.txt, line no. 26: Symbol undefined Pass 20026 0000 DATREG EQU IC11 DAT REGISTERS0027 *0028 * Serial Port0029 *f9-monex.txt, line no. 30: Symbol undefined Pass 20030 0000 ACIAC1 EQU ACIASf9-monex.txt, line no. 31: Symbol undefined Pass 20031 0001 ACIAD1 EQU ACIAS+10032 04E2 DELCON EQU 1250 Delay (Processor clock in MHz * 50)0033 *0034 * XMODEM Control characters0035 *0036 0001 SOH EQU $010037 0004 EOT EQU $040038 0006 ACK EQU $060039 0015 NAK EQU $150040 0018 CAN EQU $180041 *0042 * DRIVE GEOMETRY0043 *0044 000E EMAXSEC EQU 14 ROM DISK0045 0030 EMAXTRK EQU 48 3 * 16 * 14 * 256 = 172,032 Bytes0046 0292 ETOTSEC EQU EMAXTRK*EMAXSEC-EMAXSEC0047 *0048 000E RMAXSEC EQU 14 RAM DISK0049 *RMAXTRK EQU 192 12 * 16 * 14 * 256 = 688,128 Bytes Digilent Spartan 30050 0040 RMAXTRK EQU 64 4 * 16 * 14 * 256 = 229,376 Bytes Terasic Cyclone 20051 0372 RTOTSEC EQU RMAXTRK*RMAXSEC-RMAXSEC0052 *0053 * DRIVE TYPES0054 *0055 0000 DTYPROM EQU 0 ROM DISK0056 0001 DTYPRAM EQU 1 RAM DISK0057 0002 DTYPFLS EQU 2 FLASH DISK0058 0003 DTYPNET EQU 3 FLEXNET DISK0059 *0060 DE00 ORG $DE000061 *0062 * DISK DRIVER JUMP TABLE LAST UPDATE: 22/12/20060063 * Disk driver for RAM Disk.0064 *0065 * 14 SECTORS PER TRACK0066 * 16 * N TRACKS PER DISK0067 *0068 * ROM DISK OCCUPIES $10000 - $1E000 ... $30000 - $3E0000069 * RAM DISK OCCUPIES $40000 - $4E000 ... $F0000 - $FE0000070 * Track Buffer page mapped at $E000 - $EFFF0071 * MAPPAG = $00 = 0 x $1000 (4 K pages)00720073 * ON SWTPC ROM AT $XF000 AND IO AT $XE0000074 * APPEARS THROUGHOUT THE MEMORY SO MUST BE SKIPPED OVER0075 * WHEN USING RAM AS A RAMDISK.0076 * THE MSN OF THE TRACK MAPS INTO THE MSN OF THE DAT0077 * THE LSN OF THE TRACK NUMBER INDEXES INTO THE 4K RAM PAGE0078 * THE SECTOR MAPS INTO THE LSN OF THE DAT WHICH IS INVERTED0079 *0080 *0081 *0082 * FLEX disk jump table.0083 *0084 DE00 0E 57 READ JMP READSCf9-monex.txt, line no. 85: Phasing Error0085 DE02 0E 5B WRITE JMP WRITSCf9-monex.txt, line no. 86: Phasing Error0086 DE04 0E 5F VERIFY JMP BUSYf9-monex.txt, line no. 87: Phasing Error0087 DE06 0E 63 RESTOR JMP RESTR1f9-monex.txt, line no. 88: Phasing Error0088 DE08 0E 6C DRIVE JMP DRVSELf9-monex.txt, line no. 89: Phasing Error0089 DE0A 0E 9F DRVRDY JMP CHKRDYf9-monex.txt, line no. 90: Phasing Error0090 DE0C 0E A3 QUICK JMP CHKQIKf9-monex.txt, line no. 91: Phasing Error0091 DE0E 0E A7 COLDDR JMP DINITf9-monex.txt, line no. 92: Phasing Error0092 DE10 0E BF WARMDR JMP DWARMf9-monex.txt, line no. 93: Phasing Error0093 DE12 0E C3 SEEK JMP SEEKTS0094 *0095 * RAM SPACE0096 *f9-monex.txt, line no. 97: Phasing Error0097 DE14 00 DRVNUM FCB 0f9-monex.txt, line no. 98: Phasing Error0098 DE15 00 TRACK FCB 0f9-monex.txt, line no. 99: Phasing Error0099 DE16 00 SECTOR FCB 0f9-monex.txt, line no. 100: Phasing Error0100 DE17 00 CHKSUM FCB 0f9-monex.txt, line no. 101: Phasing Error0101 DE18 00 CCSAVE FCB 0f9-monex.txt, line no. 102: Phasing Error0102 DE19 00 BLKNUM FCB 0 Xmodem block numberf9-monex.txt, line no. 103: Phasing Error0103 DE1A 00 BYTCNT FCB 0 Xmodem byte countf9-monex.txt, line no. 104: Phasing Error0104 DE1B 00 00 XSTATE FDB 0 Xmodem State Vectorf9-monex.txt, line no. 105: Phasing Error0105 DE1D 00 00 00 DELCNT FCB $00,$00,$00 Xmodem Poll timer0106 *0107 * Disc driver type table.0108 * Indexed by drive number0109 *f9-monex.txt, line no. 110: Phasing Error0110 DE20 00 DTYPTAB FCB DTYPROM Drive 0 (ROM Disk)0111 DE21 01 FCB DTYPRAM Drive 1 (RAM Disk)0112 DE22 02 FCB DTYPFLS Drive 2 (FLASH Disk)0113 DE23 03 FCB DTYPNET Drive 3 (NETPC Disk)0114 *0115 * RAM Disk offset0116 * Indexed by drive type0117 *f9-monex.txt, line no. 118: Phasing Error0118 DE24 10 DOFFTAB FCB $10 ROM Disk $100000119 DE25 40 FCB $40 RAM DISK $400000120 DE26 FF FCB $FF Flash Disk0121 DE27 FF FCB $FF NETPC Disk0122 *f9-monex.txt, line no. 123: Phasing Error0123 DE28 REAVEC RMB 2 Disc driver jump table.f9-monex.txt, line no. 124: Phasing Error0124 DE2A WRIVEC RMB 2f9-monex.txt, line no. 125: Phasing Error0125 DE2C VERVEC RMB 2f9-monex.txt, line no. 126: Phasing Error0126 DE2E RSTVEC RMB 2f9-monex.txt, line no. 127: Phasing Error0127 DE30 DRVVEC RMB 2f9-monex.txt, line no. 128: Phasing Error0128 DE32 CHKVEC RMB 2f9-monex.txt, line no. 129: Phasing Error0129 DE34 QUIVEC RMB 2f9-monex.txt, line no. 130: Phasing Error0130 DE36 INIVEC RMB 2f9-monex.txt, line no. 131: Phasing Error0131 DE38 WARVEC RMB 2f9-monex.txt, line no. 132: Phasing Error0132 DE3A SEEVEC RMB 20133 *0134 * SECTOR BUFFER0135 *f9-monex.txt, line no. 136: Phasing Error0136 DE3C BUFFER RMB 256f9-monex.txt, line no. 137: Phasing Error0137 DF3C SYNCREG RMB 4 Prom input register0138 *0139 ****************************************0140 *0141 * START OF EXTENSION COMMANDS0142 *0143 ****************************************0144 *f9-monex.txt, line no. 145: Symbol undefined Pass 20145 0000 ORG MONEXT0146 0000 07 9C FDB NEXTEXT Jump to next extended command0147 *0148 *0149 *****************************************0150 * Disk drivers *0151 * ------------ *0152 * The system dependant code for the *0153 * disc drivers fits here. Two tables *0154 * must be included. These are DTYPTAB a *0155 * four byte table that defines which of *0156 * the (up to four) following sets of *0157 * jump tables to use, and TABSRT the *0158 * jump tables themselves. For a full *0159 * description of the floppy drivers see *0160 * section 4 (pp9-14) of the general *0161 * Flex adaptation guide. *0162 *****************************************0163 *0164 * Mass storage drivers for embedded applications.0165 *0166 * Jump tables.0167 0002 01 17 TABSRT FDB EREAD Drive type 0 (ROM disk).0168 0004 01 3F FDB EWRITE0169 0006 01 3D FDB ECHECK0170 0008 01 3D FDB ECHECK0171 000A 01 3D FDB ECHECK0172 000C 01 3D FDB ECHECK0173 000E 01 3D FDB ECHECK0174 0010 00 52 FDB DDUMMY0175 0012 00 52 FDB DDUMMY0176 0014 00 52 FDB DDUMMY0177 *0178 0016 01 17 FDB EREAD Drive type 1 (RAM disk).0179 0018 01 3F FDB EWRITE0180 001A 01 3D FDB ECHECK0181 001C 01 3D FDB ECHECK0182 001E 01 3D FDB ECHECK0183 0020 01 3D FDB ECHECK0184 0022 01 3D FDB ECHECK0185 0024 00 52 FDB DDUMMY0186 0026 00 52 FDB DDUMMY0187 0028 00 52 FDB DDUMMY0188 *0189 002A 00 52 FDB DDUMMY Drive type 2 (External Flash disk).0190 002C 00 52 FDB DDUMMY0191 002E 00 52 FDB DDUMMY0192 0030 00 52 FDB DDUMMY0193 0032 00 52 FDB DDUMMY0194 0034 00 52 FDB DDUMMY0195 0036 00 52 FDB DDUMMY0196 0038 00 52 FDB DDUMMY0197 003A 00 52 FDB DDUMMY0198 003C 00 52 FDB DDUMMY0199 *0200 003E 01 78 FDB NREAD Drive type 3 (NetPC drive via serial port).0201 0040 01 E7 FDB NWRITE0202 0042 02 47 FDB NVERIFY0203 0044 02 4C FDB NCHECK0204 0046 02 4C FDB NCHECK0205 0048 02 4C FDB NCHECK0206 004A 02 4C FDB NCHECK0207 004C 00 52 FDB DDUMMY0208 004E 00 52 FDB DDUMMY0209 0050 00 52 FDB DDUMMY0210 *0211 *0212 * Dummy routine (no errors).0213 0052 5F DDUMMY CLRB0214 0053 5D TSTB Set (z)=10215 0054 1C FE ANDCC #$FF-CFLAG Set (c)=00216 0056 39 RTS0217 * *0218 **************************0219 * Main Flex entry points *0220 *************************0221 *0222 * Read sector routine.0223 * Entry: (X) = address where sector is to be placed.0224 * (A) = Track number.0225 * (B) = Sector number.0226 * Exit: (B) = Error code (z)=1 if no error.0227 0057 6E 9F DE 32 READSC JMP [REAVEC]0228 *0229 * Write track routine.0230 * Entry: (X) = Address of area of memory from which the data will be taken.0231 * (A) = Track number.0232 * (B) = Sector number.0233 * Exit: (B) = Error condition, (Z)=1 no an error.0234 005B 6E 9F DE 34 WRITSC JMP [WRIVEC]0235 *0236 * Verify sector routine.0237 * Entry: no parameters.0238 * Exit: (B) = Error condition (Z)=1 if no error.0239 005F 6E 9F DE 36 BUSY JMP [VERVEC]0240 *0241 * Restore drive to track 00.0242 * Entry: (X) = FCB address (3,X contains drive number).0243 * Exit: (B) = Error condition, (Z)=1 if no error.0244 0063 8D 07 RESTR1 BSR DRVSEL Select drive first.0245 0065 27 01 BEQ RST10246 0067 39 RTS0247 0068 6E 9F DE 38 RST1 JMP [RSTVEC]0248 *0249 * Select current drive.0250 * Entry: (X) = FCB address (3,X contains drive number).0251 * Exit: (B) = Error condition, (Z)=0 and (c)=1 if error.0252 * (B) = $0F if non existant drive.0253 006C 34 30 DRVSEL PSHS X,Y0254 006E E6 03 LDB 3,X Get driver type.0255 0070 F7 DE 1E STB DRVNUM0256 0073 8E DE 2A LDX #DTYPTAB0257 0076 A6 85 LDA B,X0258 0078 81 FF CMPA #$FF Is the drive nonexistant?0259 007A 26 08 BNE DRIVE10260 007C 35 30 PULS X,Y0261 007E C6 0F LDB #$0F0262 0080 5D TSTB0263 0081 1A 01 ORCC #$010264 0083 39 RTS0265 *0266 0084 C6 14 DRIVE1 LDB #20 Get correct table start address.0267 0086 3D MUL0268 0087 8E 00 02 LDX #TABSRT0269 008A 30 8B LEAX D,X0270 008C 10 8E DE 32 LDY #REAVEC Copy table into ram.0271 0090 C6 14 LDB #200272 0092 A6 80 DRIVE2 LDA 0,X+0273 0094 A7 A0 STA 0,Y+0274 0096 5A DECB0275 0097 26 F9 BNE DRIVE20276 0099 35 30 PULS X,Y0277 009B 6E 9F DE 3A JMP [DRVVEC]0278 *0279 * Check for drive ready.0280 * Entry: (X) = FCB address (3,X contains drive number)>0281 * Exit: (B) = Error condition, (Z)=0 AND (C)=1 if drive is not ready.0282 009F 6E 9F DE 3C CHKRDY JMP [CHKVEC]0283 *0284 * Quick drive ready check.0285 * Entry: (X) = FCB address (3,X contains drive number).0286 * Exit: (B) = Error condition, (Z)=0 AND (c)=1 if drive not ready.0287 00A3 6E 9F DE 3E CHKQIK JMP [QUIVEC]0288 *0289 * Init (cold start).0290 * Entry: no parameters.0291 * Exit: no change.0292 00A7 4F DINIT CLRA0293 00A8 B7 DE 1E DINIT1 STA DRVNUM Init each valid drive in turn.0294 00AB 8E DE 1B LDX #DRVNUM-30295 00AE 8D BC BSR DRVSEL0296 00B0 25 04 BCS DINIT20297 00B2 AD 9F DE 40 JSR [INIVEC]0298 00B6 B6 DE 1E DINIT2 LDA DRVNUM0299 00B9 4C INCA0300 00BA 81 04 CMPA #40301 00BC 26 EA BNE DINIT10302 00BE 39 RTS0303 *0304 * Warm start.0305 * Entry: no parameters.0306 * Exit: no change.0307 00BF 6E 9F DE 42 DWARM JMP [WARVEC]0308 *0309 * Seek track.0310 * Entry: (A) = Track number.0311 * (B) = Sector number.0312 * Exit: (B) = Error condition, (Z)=1 if no error.0313 00C3 6E 9F DE 44 SEEKTS JMP [SEEVEC]0314 *0315 *0316 *****************************************************0317 * ROMdisk drivers *0318 * --------------- *0319 * Drivers to support a ROMdisk in the external RAM *0320 * of the SYS09. The ROMdisk base address is $10000 *0321 *****************************************************0322 * Dummy return for ROM disk (write protected!)0323 *0324 * MAP RAM DISK INTO MEMORY SPACE0325 *0326 00C7 1F A8 MAPIN TFR CC,A ; Save state of interrupt masks0327 00C9 B7 DE 22 STA CCSAVE0328 00CC 1A 50 ORCC #FFLAG+IFLAG ; Mask interrupts while IO mapped out0329 00CE CE DE 2A LDU #DTYPTAB ; Point to Drive Type table0330 00D1 F6 DE 1E LDB DRVNUM ; Get working drive number0331 00D4 E6 C5 LDB B,U0332 00D6 CE DE 2E LDU #DOFFTAB0333 00D9 B6 DE 1F LDA TRACK0334 00DC AB C5 ADDA B,U ; Add Base offset into RAM0335 00DE 84 F0 ANDA #$F0 ; Mask MSN0336 00E0 A7 E2 STA ,-S ; Save A on stack0337 *0338 00E2 B6 DE 20 LDA SECTOR0339 00E5 80 01 SUBA #1 ; Sectors 1 to 14 => 0 to 130340 00E7 88 0F EORA #$0F ; Complement LSNybble0341 00E9 84 0F ANDA #$0F0342 *0343 00EB AB E0 ADDA ,S+ ; Add sector to LSN of Track and pop0344 00ED 97 00 STA DATREG+MAPPAG0345 *0346 00EF B6 DE 1F LDA TRACK ; LSN of Track indexes into 4K page0347 00F2 84 0F ANDA #$0F0348 00F4 8B 00 ADDA #MAPPAG*160349 00F6 5F CLRB0350 00F7 1F 03 TFR D,U0351 00F9 39 RTS0352 *0353 * MAP RAM DISK OUT OF MEMORY0354 *0355 00FA 86 00 MAPOUT LDA #MAPPAG ; Point to the Flex page0356 00FC 88 0F EORA #$0F ; Complement LSNybble0357 00FE 97 00 STA DATREG+MAPPAG ; map in Flex page0358 0100 B6 DE 22 LDA CCSAVE ; restore interrupt masks0359 0103 1F 8A TFR A,CC0360 0105 39 RTS0361 *0362 * Seek track and sector0363 * A holds track number (0-32)0364 * B holds sector number (1-14)0365 *0366 0106 B7 DE 1F ESEEK STA TRACK0367 0109 F7 DE 20 STB SECTOR0368 010C 1C FE ANDCC #$FE ; CLEAR CARRY0369 010E 1A 04 ORCC #$04 ; SET Z0370 0110 39 RTS0371 *0372 * MARK DISK READ ONLY0373 *0374 0111 C6 40 EDUMMY LDB #$400375 0113 5D TSTB0376 0114 1A 01 ORCC #$010377 0116 39 RTS0378 *0379 0117 34 70 EREAD PSHS X,Y,U push sequentialy to preserve order on stack0380 0119 17 FF EA LBSR ESEEK0381 011C 17 FF A8 LBSR MAPIN build external ram address0382 *0383 011F 10 8E DE 46 LDY #BUFFER0384 0123 5F CLRB0385 0124 A6 C0 ERLOOP1 LDA 0,U+ move 256 bytes to buffer from external RAM0386 0126 A7 A0 STA 0,Y+0387 0128 5A DECB0388 0129 26 F9 BNE ERLOOP10389 *0390 012B 17 FF CC LBSR MAPOUT0391 *0392 012E 10 8E DE 46 LDY #BUFFER0393 0132 5F CLRB0394 0133 A6 A0 ERLOOP2 LDA 0,Y+ move 256 bytes from buffer to Flex RAM0395 0135 A7 80 STA 0,X+0396 0137 5A DECB0397 0138 26 F9 BNE ERLOOP20398 *0399 013A 5F CLRB0400 013B 35 F0 PULS X,Y,U,PC restore all registers0401 *0402 * check for marker bytes $AA55 in first bytes of first track/sector0403 *0404 *ECHECK CLRA0405 * LDB #10406 * LDX #BUFFER0407 * BSR EREAD0408 * LDD BUFFER0409 * CMPD #$AA550410 * BNE EERR0411 * LBRA DDUMMY0412 *EERR LDB #$80 not ready bit set0413 * TSTB0414 * ORCC #$010415 * RTS0416 013D 5F ECHECK CLRB0417 013E 39 RTS0418 *0419 * Write Sector0420 *0421 013F 34 70 EWRITE PSHS X,Y,U0422 0141 17 FF C2 LBSR ESEEK0423 0144 CE DE 2A LDU #DTYPTAB ; Point to Drive Type table0424 0147 F6 DE 1E LDB DRVNUM ; Get working drive number0425 014A E6 C5 LDB B,U ; Fetch Drive type0426 014C C1 01 CMPB #DTYPRAM ; Is it a RAM Disk ?0427 014E 27 07 BEQ EWOK ; Yep, can write to it0428 0150 C1 00 CMPB #DTYPROM ; Allow writes to ROM Disk too0429 0152 27 03 BEQ EWOK0430 0154 16 FF BA LBRA EDUMMY ; Nope report read only0431 *0432 0157 10 8E DE 46 EWOK LDY #BUFFER0433 015B 5F CLRB0434 015C A6 80 EWLOOP1 LDA 0,X+ move 256 bytes to buffer from Flex RAM0435 015E A7 A0 STA 0,Y+0436 0160 5A DECB0437 0161 26 F9 BNE EWLOOP10438 *0439 0163 17 FF 61 LBSR MAPIN0440 *0441 0166 10 8E DE 46 LDY #BUFFER0442 016A 5F CLRB0443 016B A6 A0 EWLOOP2 LDA 0,Y+ move 256 bytes from buffer to external RAM0444 016D A7 C0 STA 0,U+0445 016F 5A DECB0446 0170 26 F9 BNE EWLOOP20447 *0448 0172 17 FF 85 LBSR MAPOUT0449 *0450 0175 5F CLRB0451 0176 35 F0 PULS X,Y,U,PC0452 *0453 *0454 *****************************************************0455 * FlexNet drivers *0456 * --------------- *0457 * Drivers to support a remote connection via the *0458 * serial port using the FlexNet protocol as defined *0459 * in FLEXNet_421B *0460 *****************************************************0461 *0462 *0463 * read sector from remote drive0464 *0465 0178 34 04 NREAD PSHS B0466 017A 34 02 PSHS A0467 017C 7F DE 21 CLR CHKSUM clear checksum0468 017F 7F DE 22 CLR CHKSUM+10469 *0470 0182 86 73 LDA #'s Send read sector command0471 0184 BD 02 81 JSR SCHAR0472 0187 24 4C BCC NRD_DNR if timeout, then flag drive not ready0473 *0474 0189 B6 DE 1E LDA DRVNUM send drive0475 018C BD 02 81 JSR SCHAR0476 018F 24 44 BCC NRD_DNR0477 *0478 0191 35 02 PULS A send track0479 0193 BD 02 81 JSR SCHAR0480 0196 24 3D BCC NRD_DNR0481 *0482 0198 35 02 PULS A send sector0483 019A BD 02 81 JSR SCHAR0484 019D 24 36 BCC NRD_DNR0485 *0486 * transfer 256 bytes0487 019F 5F CLRB0488 01A0 BD 02 65 NREAD1 JSR RCHAR read byte0489 01A3 24 30 BCC NRD_DNR if timeout, then flag drive not ready0490 01A5 A7 80 STA 0,X+0491 01A7 BB DE 22 ADDA CHKSUM+1 update checksum0492 01AA B7 DE 22 STA CHKSUM+10493 01AD 24 03 BCC NREAD20494 01AF 7C DE 21 INC CHKSUM0495 01B2 5A NREAD2 DECB0496 01B3 26 EB BNE NREAD10497 *0498 * compare checksums0499 01B5 BD 02 65 JSR RCHAR get checksum msb0500 01B8 24 1B BCC NRD_DNR0501 01BA 34 02 PSHS A0502 01BC BD 02 65 JSR RCHAR get checksum lsb0503 01BF 24 14 BCC NRD_DNR0504 01C1 1F 89 TFR A,B0505 01C3 35 02 PULS A0506 01C5 10 B3 DE 21 CMPD CHKSUM compare checksums0507 01C9 26 0E BNE NRD_ERR if checksum error, then flag crc read error0508 *0509 01CB 86 06 LDA #ACK no checksum error, send ACK char0510 01CD BD 02 81 JSR SCHAR0511 01D0 24 03 BCC NRD_DNR0512 01D2 5F CLRB all OK, flag no error0513 01D3 20 0D BRA NRD_END0514 *0515 01D5 C6 10 NRD_DNR LDB #16 flag drive not ready0516 01D7 20 09 BRA NRD_END0517 *0518 01D9 86 15 NRD_ERR LDA #NAK send NAK0519 01DB BD 02 81 JSR SCHAR0520 01DE 24 F5 BCC NRD_DNR0521 01E0 C6 09 LDB #09 flag crc read error0522 *0523 01E2 F7 DE 21 NRD_END STB CHKSUM used by VERIFY0524 01E5 5D TSTB0525 01E6 39 RTS0526 *0527 *0528 * write sector to remote drive0529 *0530 01E7 34 04 NWRITE PSHS B0531 01E9 34 02 PSHS A0532 01EB 7F DE 21 CLR CHKSUM clear checksum0533 01EE 7F DE 22 CLR CHKSUM+10534 *0535 01F1 86 72 LDA #'r Send write sector command0536 01F3 BD 02 81 JSR SCHAR0537 01F6 24 DD BCC NRD_DNR if timeout, then flag drive not ready0538 *0539 01F8 B6 DE 1E LDA DRVNUM send drive0540 01FB BD 02 81 JSR SCHAR0541 01FE 24 D5 BCC NRD_DNR0542 *0543 0200 35 02 PULS A send track0544 0202 BD 02 81 JSR SCHAR0545 0205 24 CE BCC NRD_DNR0546 *0547 0207 35 02 PULS A send sector0548 0209 BD 02 81 JSR SCHAR0549 020C 24 C7 BCC NRD_DNR0550 *0551 * transfer 256 bytes0552 020E 5F CLRB0553 020F A6 80 NWRITE1 LDA 0,X+0554 0211 BD 02 81 JSR SCHAR write byte0555 0214 24 BF BCC NRD_DNR if timeout, then flag drive not ready0556 0216 BB DE 22 ADDA CHKSUM+1 update checksum0557 0219 B7 DE 22 STA CHKSUM+10558 021C 24 03 BCC NWRITE20559 021E 7C DE 21 INC CHKSUM0560 0221 5A NWRITE2 DECB0561 0222 26 EB BNE NWRITE10562 *0563 * compare checksums0564 0224 B6 DE 21 LDA CHKSUM0565 0227 BD 02 81 JSR SCHAR send checksum msb0566 022A 24 A9 BCC NRD_DNR0567 022C B6 DE 22 LDA CHKSUM+10568 022F BD 02 81 JSR SCHAR send checksum lsb0569 0232 24 A1 BCC NRD_DNR0570 *0571 0234 BD 02 65 JSR RCHAR get checksum response0572 0237 24 9C BCC NRD_DNR0573 0239 81 06 CMPA #ACK0574 023B 26 03 BNE NWR_ERR if checksum error, then flag write error0575 *0576 023D 5F CLRB all OK, flag no error0577 023E 20 02 BRA NWR_END0578 *0579 0240 C6 0A NWR_ERR LDB #10 flag write error0580 *0581 0242 F7 DE 21 NWR_END STB CHKSUM used by VERIFY0582 0245 5D TSTB0583 0246 39 RTS0584 *0585 *0586 * verify last sector written to remote drive0587 *0588 0247 F6 DE 21 NVERIFY LDB CHKSUM test last checksum0589 024A 5D TSTB0590 024B 39 RTS0591 *0592 *0593 * quck check and check drive ready0594 *0595 024C 86 51 NCHECK LDA #'Q quick check command0596 024E BD 02 81 JSR SCHAR0597 0251 24 0C BCC NCK_ERR if timeout, then flag drive not ready05980599 0253 BD 02 65 JSR RCHAR get response from host0600 0256 24 07 BCC NCK_ERR0601 0258 81 06 CMPA #ACK0602 025A 26 03 BNE NCK_ERR if NAK, then flag drive not ready06030604 025C 5F CLRB all OK, flag drive ready0605 025D 20 04 BRA NCK_END0606 *0607 025F C6 10 NCK_ERR LDB #16 report drive not ready0608 0261 1A 01 ORCC #$01 check needs carry set as well0609 *0610 0263 5D NCK_END TSTB0611 0264 39 RTS0612 *0613 *0614 * recieve char from remote drive.0615 * timeout if no response for approx 1s.0616 * Entry: no parameters0617 * Exit: (A) = recieved char, (C)=1 if valid char, (C)=0 if timeout.0618 *0619 0265 34 30 RCHAR PSHS X,Y0620 *0621 0267 8E 03 E8 LDX #1000 1000x inner loop0622 026A 10 8E 04 E2 RCHAR1 LDY #DELCON delay constant for inner loop (approx 1ms).0623 026E 96 00 RCHAR2 LDA ACIAC1 test for recieved char0624 0270 47 ASRA0625 0271 25 0A BCS RCHAR3 get character0626 0273 31 3F LEAY -1,Y else, continue to count delay0627 0275 26 F7 BNE RCHAR20628 0277 30 1F LEAX -1,X0629 0279 26 EF BNE RCHAR10630 027B 35 B0 PULS X,Y,PC return with error if timed out0631 *0632 027D 96 01 RCHAR3 LDA ACIAD1 return data (carry bit still set)0633 027F 35 B0 PULS X,Y,PC0634 *0635 *0636 * transmit char to remote drive.0637 * timeout if no response for approx 1s. (allows for use of hardware flow control)0638 * Entry: (A) = char to transmit0639 * Exit: (A) = recieved char, (C)=1 if valid char, (C)=0 if timeout.0640 *0641 0281 34 30 SCHAR PSHS X,Y0642 0283 34 02 PSHS A0643 *0644 0285 8E 03 E8 LDX #1000 1000x inner loop0645 0288 10 8E 04 E2 SCHAR1 LDY #DELCON delay constant for inner loop (approx 1ms).0646 028C 96 00 SCHAR2 LDA ACIAC1 test for space in transmit FIFO0647 028E 47 ASRA0648 028F 47 ASRA0649 0290 25 0C BCS SCHAR3 send character0650 0292 31 3F LEAY -1,Y else, continue to count delay0651 0294 26 F6 BNE SCHAR20652 0296 30 1F LEAX -1,X0653 0298 26 EE BNE SCHAR10654 029A 35 02 PULS A0655 029C 35 B0 PULS X,Y,PC return with error if timed out0656 *0657 029E 35 02 SCHAR3 PULS A0658 02A0 97 01 STA ACIAD1 send data (carry bit still set)0659 02A2 35 B0 PULS X,Y,PC0660 *0661 ** 'UF' Format RAMdisc to FLEX standard.0662 *0663 02A4 0A 0D DISFOS FCB $0A,$0D0664 02A6 46 6F 72 6D 61 74 FCC 'Formating RAMdisk... '69 6E 67 20 52 414D 64 69 73 6B 2E2E 2E 200665 02BB 04 FCB 40666 02BC 0A 0D 04 MESS6 FCB $0A,$0D,40667 02BF 52 61 6D 64 69 73 FCC 'Ramdisk not allocated! '6B 20 6E 6F 74 2061 6C 6C 6F 63 6174 65 64 21 200668 02D6 04 FCB 40669 *0670 02D7 8E 02 A4 UFSUB LDX #DISFOS0671 02DA BD 04 50 JSR PDATA10672 02DD 8E DE 2A LDX #DTYPTAB search for allocated ramdisk0673 02E0 5F CLRB0674 02E1 A6 85 FMT9 LDA B,X0675 02E3 81 01 CMPA #DTYPRAM driver type 1 is ramdisk0676 02E5 27 0C BEQ FFOUND0677 02E7 5C INCB0678 02E8 C1 04 CMPB #4 end of table? then not allocated.0679 02EA 26 F5 BNE FMT90680 02EC 8E 02 BC LDX #MESS60681 02EF BD 04 50 JSR PDATA10682 02F2 39 RTS0683 *0684 02F3 F7 DE 1E FFOUND STB DRVNUM0685 02F6 8E DE 1B LDX #DRVNUM-30686 02F9 9D 6C JSR DRVSEL0687 *0688 * set up free chain0689 *0690 02FB 8E DE 46 LDX #BUFFER clear out buffer0691 02FE 4F CLRA0692 02FF 5F CLRB0693 0300 A7 80 DFL1 STA 0,X+0694 0302 5A DECB0695 0303 26 FB BNE DFL10696 *0697 0305 7F DE 1F CLR TRACK0698 0308 86 01 LDA #10699 030A B7 DE 20 STA SECTOR0700 030D 8E DE 46 DFL2 LDX #BUFFER0701 0310 B6 DE 1F LDA TRACK0702 0313 A7 84 STA 0,X0703 0315 B6 DE 20 LDA SECTOR0704 0318 4C INCA0705 0319 81 0F CMPA #RMAXSEC+1 last sector on track?0706 031B 26 04 BNE DFL30707 031D 6C 84 INC 0,X0708 031F 86 01 LDA #10709 0321 A7 01 DFL3 STA 1,X0710 0323 B6 DE 1F LDA TRACK0711 0326 F6 DE 20 LDB SECTOR0712 0329 9D 5B JSR WRITSC0713 032B 7C DE 20 INC SECTOR0714 032E B6 DE 20 LDA SECTOR0715 0331 81 0F CMPA #RMAXSEC+10716 0333 26 D8 BNE DFL20717 0335 86 01 LDA #10718 0337 B7 DE 20 STA SECTOR0719 033A 7C DE 1F INC TRACK0720 033D B6 DE 1F LDA TRACK0721 0340 81 40 CMPA #RMAXTRK0722 0342 26 C9 BNE DFL20723 * break free chain at last track/sector0724 0344 8E DE 46 LDX #BUFFER0725 0347 86 3F LDA #RMAXTRK-10726 0349 C6 0E LDB #RMAXSEC0727 034B 9D 57 JSR READSC0728 034D 8E DE 46 LDX #BUFFER0729 0350 6F 84 CLR 0,X0730 0352 6F 01 CLR 1,X0731 0354 86 3F LDA #RMAXTRK-10732 0356 C6 0E LDB #RMAXSEC0733 0358 9D 5B JSR WRITSC0734 * set up sector structure, SIR, directory etc0735 035A 8E DE 46 LDX #BUFFER0736 035D 4F CLRA0737 035E C6 0E LDB #RMAXSEC0738 0360 9D 57 JSR READSC0739 0362 8E DE 46 LDX #BUFFER0740 0365 6F 84 CLR 0,X break end of directory chain0741 0367 6F 01 CLR 1,X0742 0369 4F CLRA0743 036A C6 0E LDB #RMAXSEC0744 036C 9D 5B JSR WRITSC0745 *0746 036E 8E DE 46 LDX #BUFFER0747 0371 4F CLRA0748 0372 C6 03 LDB #3 set up SIR0749 0374 9D 57 JSR READSC0750 0376 8E DE 46 LDX #BUFFER0751 0379 6F 84 CLR 0,X break forward link0752 037B 6F 01 CLR 1,X0753 037D CC 52 41 LDD #$5241 set volume name (RAMDISK )0754 0380 ED 88 10 STD 16,X0755 0383 CC 4D 44 LDD #$4D440756 0386 ED 88 12 STD 18,X0757 0389 CC 49 53 LDD #$49530758 038C ED 88 14 STD 20,X0759 038F CC 4B 20 LDD #$4B200760 0392 ED 88 16 STD 22,X0761 0395 CC 00 01 LDD #1 volume number0762 0398 ED 88 1B STD 27,X0763 039B CC 01 01 LDD #$0101 first trk/sec 01-010764 039E ED 88 1D STD 29,X0765 03A1 86 3F LDA #RMAXTRK-10766 03A3 C6 0E LDB #RMAXSEC0767 03A5 ED 88 1F STD 31,X0768 03A8 ED 88 26 STD 38,X0769 03AB CC 03 72 LDD #RTOTSEC total DATA sectors (2912-14)0770 03AE ED 88 21 STD 33,X0771 *0772 03B1 86 01 LDA #01 month set default creation date (SYS09's birthday!)0773 03B3 A7 88 23 STA 35,X0774 03B6 86 07 LDA #07 day0775 03B8 A7 88 24 STA 36,X0776 03BB 86 07 LDA #07 year0777 03BD A7 88 25 STA 37,X0778 *0779 03C0 4F RF3 CLRA0780 03C1 C6 03 LDB #30781 03C3 9D 5B JSR WRITSC0782 *0783 03C5 8E DE 46 LDX #BUFFER0784 03C8 4F CLRA0785 03C9 C6 01 LDB #10786 03CB 9D 57 JSR READSC0787 03CD 8E DE 46 LDX #BUFFER0788 03D0 86 AA LDA #$AA set the init flag0789 03D2 A7 84 STA 0,X0790 03D4 86 55 LDA #$550791 03D6 A7 01 STA 1,X0792 03D8 4F CLRA0793 03D9 C6 01 LDB #10794 03DB 0E 5B JMP WRITSC0795 *0796 ********************************0797 * System specific Boot *0798 * command goes here. *0799 ********************************0800 *0801 * Boot FLEX from the FPGA's internal pre-loaded scratch RAM0802 *0803 03DD 08 08 UBMESS FCB $08, $080804 03DF 42 6F 6F 74 69 6E FCC 'Booting internal FLEX....'67 20 69 6E 74 6572 6E 61 6C 20 464C 45 58 2E 2E 2E2E0805 03F8 0D 0A 04 FCB $0D,$0A,$040806 *0807 03FB 8E 03 DD UBSUB LDX #UBMESS0808 03FE BD 04 50 JSR PDATA10809 *0810 0401 8E D3 E5 LDX #$D3E50811 0404 10 8E 04 24 LDY #CONTAB Overlay console driver table0812 0408 EC A1 UB1 LDD 0,Y++0813 040A ED 81 STD 0,X++0814 040C 8C D3 FD CMPX #$D3FD0815 040F 26 F7 BNE UB10816 *0817 0411 8E DE 00 LDX #$DE00 Overlay disk driver table0818 0414 10 8E 04 3C LDY #DISTAB0819 0418 EC A1 UB2 LDD 0,Y++0820 041A ED 81 STD 0,X++0821 041C 8C DE 1E CMPX #$DE1E0822 041F 26 F7 BNE UB20823 *0824 0421 7E CD 00 UBEND JMP $CD000825 *0826 * FLEX console jump table.0827 0424 04 5C CONTAB FDB INPNE INPUT NO ECHO0828 0426 04 68 FDB DUMMY INTERRUPT HANDLERf9-monex.txt, line no. 829: Symbol undefined Pass 20829 0428 00 02 FDB MONRAM+$02 SWI VECTORf9-monex.txt, line no. 830: Symbol undefined Pass 20830 042A 00 08 FDB MONRAM+$08 IRQ VECTOR0831 042C 04 68 FDB DUMMY TIMER OFF0832 042E 04 68 FDB DUMMY TIMER ON0833 0430 04 68 FDB DUMMY TIMER INITIALIZATION0834 0432 04 64 FDB CONTRL MONITOR0835 0434 04 68 FDB DUMMY TERMINAL INITIALIZATION0836 0436 04 60 FDB STATUS INPUT CHECK0837 0438 04 54 FDB OUTP TERMINAL OUTPUT0838 043A 04 58 FDB INPE TERMINAL INPUT WITH ECHO0839 *0840 * FLEX disk jump table.0841 043C 0E 57 DISTAB JMP READSC0842 043E 0E 5B JMP WRITSC0843 0440 0E 5F JMP BUSY0844 0442 0E 63 JMP RESTR10845 0444 0E 6C JMP DRVSEL0846 0446 0E 9F JMP CHKRDY0847 0448 0E A3 JMP CHKQIK0848 044A 0E A7 JMP DINIT0849 044C 0E BF JMP DWARM0850 044E 0E C3 JMP SEEKTS0851 *0852 * Monitor jumps0853 *f9-monex.txt, line no. 854: Symbol undefined Pass 20854 0450 6E 9F 00 00 PDATA1 JMP [PDATAV]f9-monex.txt, line no. 855: Symbol undefined Pass 20855 0454 6E 9F 00 00 OUTP JMP [OUTCHV]f9-monex.txt, line no. 856: Symbol undefined Pass 20856 0458 6E 9F 00 00 INPE JMP [INCHEV]f9-monex.txt, line no. 857: Symbol undefined Pass 20857 045C 6E 9F 00 00 INPNE JMP [INCHV]f9-monex.txt, line no. 858: Symbol undefined Pass 20858 0460 6E 9F 00 00 STATUS JMP [INCHKV]f9-monex.txt, line no. 859: Symbol undefined Pass 20859 0464 6E 9F 00 00 CONTRL JMP [MONITV]0860 0468 39 DUMMY RTS0861 *0862 ** 'UL' LOAD ROM DISK VIA SERIAL PORT0863 *0864 0469 53 65 72 69 61 6C ULMES FCC 'Serial ROM Disk upload ...'20 52 4F 4D 20 4469 73 6B 20 75 706C 6F 61 64 20 2E2E 2E0865 0483 0D 0A 04 FCB $0D,$0A,$040866 0486 52 4F 4D 20 44 69 ULMES1 FCC 'ROM Disk Loaded'73 6B 20 4C 6F 6164 65 640867 0495 0D 0A 04 FCB $0D,$0A,$040868 *0869 0498 8E 04 69 ULSUB LDX #ULMES0870 049B BD 04 50 JSR PDATA10871 *0872 049E 86 00 LDA #$000873 04A0 B7 DE 1E STA DRVNUM0874 04A3 4F CLRA TRACK 00875 04A4 C6 01 LDB #$01 SECTOR 10876 04A6 B7 DE 1F ULLOOP0 STA TRACK0877 04A9 F7 DE 20 STB SECTOR`0878 04AC 17 FC 18 LBSR MAPIN0879 *0880 04AF 5F CLRB xfer 256 bytes at a time.0881 04B0 BD 04 D3 ULLOOP1 JSR LRBYTE transfer should be hex bytes0882 04B3 A7 C0 STA ,U+0883 04B5 5A DECB0884 04B6 26 F8 BNE ULLOOP10885 *0886 04B8 17 FC 3F LBSR MAPOUT0887 *0888 04BB B6 DE 1F LDA TRACK0889 04BE F6 DE 20 LDB SECTOR0890 04C1 5C INCB0891 04C2 C1 0F CMPB #EMAXSEC+10892 04C4 26 E0 BNE ULLOOP00893 04C6 C6 01 LDB #10894 04C8 4C INCA0895 04C9 81 30 CMPA #EMAXTRK0896 04CB 26 D9 BNE ULLOOP00897 *0898 04CD 8E 04 86 ULEXIT LDX #ULMES10899 04D0 7E 04 50 JMP PDATA10900 *0901 * Read a byte from the serial port0902 *0903 04D3 34 04 LRBYTE PSHS B0904 04D5 8D 0E BSR LRHEX Get hex digit.0905 04D7 48 ASLA0906 04D8 48 ASLA Shift to msb.0907 04D9 48 ASLA0908 04DA 48 ASLA0909 04DB 1F 89 TFR A,B Save in B.0910 04DD 8D 06 BSR LRHEX Get next digit.0911 04DF 34 04 PSHS B0912 04E1 AB E0 ADDA 0,S+ Add together bytes.0913 04E3 35 84 PULS B,PC0914 *0915 04E5 BD 05 0B LRHEX JSR INTER0916 04E8 29 FB BVS LRHEX0917 04EA 80 30 SUBA #$30 Remove ascii bias.0918 04EC 2B F7 BMI LRHEX0919 04EE 81 09 CMPA #$09 Number?0920 04F0 2F 0A BLE LRHEX1 Yes.0921 04F2 81 11 CMPA #$11 Keep testing.0922 04F4 2B EF BMI LRHEX0923 04F6 81 16 CMPA #$160924 04F8 2E EB BGT LRHEX0925 04FA 80 07 SUBA #$070926 04FC 39 LRHEX1 RTS0927 *0928 * ACIA INPUT TEST0929 *0930 04FD 96 00 INTEST LDA ACIAC10931 04FF 85 01 BITA #$010932 0501 39 RTS0933 *0934 * RESET ACIA0935 *0936 0502 86 03 ACIRST LDA #$03 master reset0937 0504 97 00 STA ACIAC10938 0506 86 11 LDA #$110939 0508 97 00 STA ACIAC10940 050A 39 RTS0941 *0942 * ACIA INPUT0943 *0944 050B 86 10 INTER LDA #160945 050D B7 DE 27 STA DELCNT+00946 0510 7F DE 28 CLR DELCNT+10947 0513 7F DE 29 CLR DELCNT+20948 0516 96 00 INTER0 LDA ACIAC10949 0518 85 01 BITA #$010950 051A 26 08 BNE INTER10951 051C 85 78 BITA #$780952 051E 27 09 BEQ INTER20953 0520 8D E0 BSR ACIRST0954 0522 20 E7 BRA INTER0955 *0956 0524 96 01 INTER1 LDA ACIAD10957 0526 1C 02 ANDCC #VFLAG0958 0528 39 RTS0959 *0960 0529 7A DE 29 INTER2 DEC DELCNT+20961 052C 26 E8 BNE INTER00962 052E 7A DE 28 DEC DELCNT+10963 0531 26 E3 BNE INTER00964 0533 7A DE 27 DEC DELCNT+00965 0536 26 DE BNE INTER00966 0538 4F CLRA0967 0539 1A 02 ORCC #VFLAG0968 053B 39 RTS0969 *0970 * ACIA OUTPUT0971 *0972 053C 34 02 OUTTER PSHS A0973 *0974 053E 96 00 OUTTE1 LDA ACIAC10975 0540 85 02 BITA #$020976 0542 26 08 BNE OUTTE20977 0544 85 78 BITA #$780978 0546 27 F6 BEQ OUTTE10979 0548 8D B8 BSR ACIRST0980 054A 20 F2 BRA OUTTE10981 *0982 054C 35 02 OUTTE2 PULS A0983 054E 97 01 STA ACIAD10984 0550 39 RTS0985 *0986 ** 'UX' Xmodem ROM Disk upload0987 *0988 0551 0D 0A UXMES FCB $0D,$0A0989 0553 58 6D 6F 64 65 6D FCC 'Xmodem ROM Disk Upload'20 52 4F 4D 20 4469 73 6B 20 55 706C 6F 61 640990 0569 04 FCB 40991 056A 0D 0A UXMES1 FCB $0D,$0A0992 056C 55 70 6C 6F 61 64 FCC 'Upload Complete'20 43 6F 6D 70 6C65 74 650993 057B 04 FCB 40994 057C 0D 0A UXMES2 FCB $0D,$0A0995 057E 55 70 6C 6F 61 64 FCC 'Upload Error'20 45 72 72 6F 720996 058A 04 FCB 40997 *0998 058B 8E 05 51 UXSUB LDX #UXMES0999 058E 17 FE BF LBSR PDATA11000 *1001 0591 86 01 LDA #11002 0593 B7 DE 23 STA BLKNUM1003 0596 8E 05 F9 LDX #XSTSTR1004 0599 BF DE 25 STX XSTATE1005 *1006 059C 86 00 LDA #$001007 059E B7 DE 1E STA DRVNUM1008 05A1 4F CLRA TRACK 01009 05A2 C6 01 LDB #$01 SECTOR 11010 05A4 B7 DE 1F UXLOOP0 STA TRACK1011 05A7 F7 DE 20 STB SECTOR1012 05AA 17 FB 1A LBSR MAPIN1013 *1014 05AD 5F CLRB xfer 256 bytes at a time.1015 05AE 17 00 2B UXLOOP1 LBSR XBYTE transfer should be hex bytes1016 05B1 25 20 BCS UXERR1017 05B3 A7 C0 STA ,U+1018 05B5 5A DECB1019 05B6 26 F6 BNE UXLOOP11020 *1021 05B8 17 FB 3F LBSR MAPOUT1022 *1023 05BB B6 DE 1F LDA TRACK1024 05BE F6 DE 20 LDB SECTOR1025 05C1 5C INCB1026 05C2 C1 0F CMPB #EMAXSEC+11027 05C4 26 DE BNE UXLOOP01028 05C6 C6 01 LDB #11029 05C8 4C INCA1030 05C9 81 30 CMPA #EMAXTRK1031 05CB 26 D7 BNE UXLOOP01032 *1033 05CD 8E 05 6A UXEXIT LDX #UXMES11034 05D0 7E 04 50 JMP PDATA11035 *1036 05D3 17 FB 24 UXERR LBSR MAPOUT1037 05D6 8E 05 7C LDX #UXMES21038 05D9 16 FE 74 LBRA PDATA11039 *1040 * Get a Byte using XModem protocol1041 * Carry clear => no errors1042 * Carry set => errors1043 *1044 05DC 34 10 XBYTE PSHS X1045 05DE BE DE 25 LDX XSTATE1046 *1047 05E1 17 FF 27 XBYTE0 LBSR INTER1048 05E4 28 0A BVC XBYTE11049 05E6 86 15 LDA #NAK1050 05E8 17 FF 51 LBSR OUTTER1051 05EB 8E 05 F9 LDX #XSTSTR1052 05EE 20 F1 BRA XBYTE01053 *1054 05F0 AD 84 XBYTE1 JSR ,X1055 05F2 26 ED BNE XBYTE01056 05F4 BF DE 25 STX XSTATE1057 05F7 35 90 PULS X,PC1058 *1059 * START - LOOK FOR SOH (START OF HEADER) = $011060 *1061 05F9 81 01 XSTSTR CMPA #SOH1062 05FB 26 06 BNE XSTSTR11063 05FD 8E 06 19 LDX #XSTBLK1064 0600 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, no valid data (no exit)1065 0602 39 RTS1066 *1067 0603 81 04 XSTSTR1 CMPA #EOT1068 0605 26 08 BNE XSTSTR21069 0607 86 06 LDA #ACK1070 0609 17 FF 30 LBSR OUTTER1071 060C 1A 05 ORCC #CFLAG+ZFLAG Set (c)=1 abort & exit1072 060E 39 RTS1073 *1074 060F 81 18 XSTSTR2 CMPA #CAN1075 0611 26 03 BNE XSTSTR31076 0613 1A 05 ORCC #CFLAG+ZFLAG Set (c)=1 abort & exit1077 0615 39 RTS1078 *1079 0616 1C FA XSTSTR3 ANDCC #$FF-CFLAG-ZFLAG1080 0618 39 RTS1081 *1082 * Got SOH1083 * Now get block number1084 *1085 0619 B1 DE 23 XSTBLK CMPA BLKNUM1086 061C 26 06 BNE XSTBLKE1087 061E 8E 06 2F LDX #XSTCOM1088 0621 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit)1089 0623 39 RTS1090 *1091 * Error in block number1092 *1093 0624 86 15 XSTBLKE LDA #NAK1094 0626 17 FF 13 LBSR OUTTER1095 0629 8E 05 F9 LDX #XSTSTR1096 062C 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit)1097 062E 39 RTS1098 *1099 * Get complement of block number1100 *1101 062F 43 XSTCOM COMA1102 0630 B1 DE 23 CMPA BLKNUM1103 0633 26 EF BNE XSTBLKE1104 0635 7F DE 21 CLR CHKSUM1105 0638 86 80 LDA #1281106 063A B7 DE 24 STA BYTCNT1107 063D 8E 06 43 LDX #XSTDAT1108 0640 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit)1109 0642 39 RTS1110 *1111 * Get data bytes1112 *1113 0643 34 02 XSTDAT PSHS A1114 0645 BB DE 21 ADDA CHKSUM1115 0648 B7 DE 21 STA CHKSUM1116 064B 35 02 PULS A1117 064D 7A DE 24 DEC BYTCNT1118 0650 26 03 BNE XSTDAT11119 0652 8E 06 5A LDX #XSTCHK1120 0655 1C FE XSTDAT1 ANDCC #$FF-CFLAG No abort1121 0657 1A 04 ORCC #ZFLAG Valid data (exit)1122 0659 39 RTS1123 *1124 * Byte count reached zero1125 * Check checksum byte1126 *1127 065A B1 DE 21 XSTCHK CMPA CHKSUM1128 065D 26 07 BNE XSTCHK1 retry if wrong checksum1129 *1130 * Checksum OK ...1131 * increment block number1132 * and send ACK1133 *1134 065F 7C DE 23 INC BLKNUM1135 0662 86 06 LDA #ACK1136 0664 20 0D BRA XSTCHK21137 *1138 * Checksum Error detected ...1139 * Reset Sector counter in ACCB to last 128 byte boundary1140 * and send NAK1141 *1142 0666 34 04 XSTCHK1 PSHS B1143 0668 1F 30 TFR U,D1144 066A 5A DECB1145 066B C4 80 ANDB #1281146 066D 1F 03 TFR D,U1147 066F 35 04 PULS B1148 0671 86 15 LDA #NAK1149 0673 17 FE C6 XSTCHK2 LBSR OUTTER1150 0676 8E 05 F9 LDX #XSTSTR1151 0679 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, no valid data (no exit)1152 067B 39 RTS1153 *1154 ** 'UP' Load ROMdisk via config PROM.1155 *1156 067C 08 08 UPMES FCB $08,$081157 067E 4C 6F 61 64 20 52 FCC 'Load ROM disk from config PROM.'4F 4D 20 64 69 736B 20 66 72 6F 6D20 63 6F 6E 66 6967 20 50 52 4F 4D2E1158 069D 04 FCB 41159 069E 46 6F 75 6E 64 20 UPMES1 FCC 'Found SYNC, loading data...'53 59 4E 43 2C 206C 6F 61 64 69 6E67 20 64 61 74 612E 2E 2E1160 06B9 0A 0D 04 FCB $0A,$0D,41161 06BC 52 4F 4D 20 44 69 UPMES2 FCC 'ROM Disk Loaded.'73 6B 20 4C 6F 6164 65 64 2E1162 06CC 0A 0D 04 FCB $0A,$0D,41163 06CF 52 4F 4D 20 44 69 UPMES3 FCC 'ROM Disk Not Found.'73 6B 20 4E 6F 7420 46 6F 75 6E 642E1164 06E2 0A 0D 04 FCB $0A,$0D,41165 *1166 06E5 8E 06 7C UPSUB LDX #UPMES1167 06E8 BD 04 50 JSR PDATA11168 *1169 06EB 8D 5A BSR UPRESET1170 06ED 10 8E 00 20 LDY #$0020 Set up count for 2 MBit1171 06F1 8E 00 00 LDX #$00001172 06F4 8D 6C UPSUB1 BSR UPBIT Shift in bit1173 06F6 8D 7C BSR UPSYNC Test for Sync pattern`1174 06F8 27 15 BEQ UPSUB4 Skip if found1175 06FA 30 1F LEAX -1,X Count Down inner loop1176 06FC 8C 00 00 CMPX #$00001177 06FF 26 F3 BNE UPSUB1 Branch if inner loop not complete1178 0701 31 1F LEAY -1,X Count down outer loop1179 0703 10 8C 00 00 CMPY #$00001180 0707 26 EB BNE UPSUB1 Branch if outer loop not complete1181 *1182 0709 8E 06 CF LDX #UPMES3 2MBits scanned, no synch, report error1183 070C 7E 04 50 JMP PDATA11184 *1185 070F 8E 06 9E UPSUB4 LDX #UPMES1 Sync found, now load disk1186 0712 BD 04 50 JSR PDATA11187 *1188 0715 4F CLRA1189 0716 B7 DE 1E STA DRVNUM select Drive 01190 0719 C6 01 LDB #$011191 071B B7 DE 1F UPSUB2 STA TRACK track 01192 071E F7 DE 20 STB SECTOR sector 11193 *1194 0721 17 F9 A3 LBSR MAPIN map in buffer1195 0724 5F CLRB 256 byte sector1196 0725 8D 67 UPSUB3 BSR UPBYTE read byte from prom1197 0727 A7 C0 STA ,U+ Store in buffer1198 0729 5A DECB1199 072A 26 F9 BNE UPSUB3 Loop until sector read`1200 072C 17 F9 CB LBSR MAPOUT map out buffer1201 *1202 072F B6 DE 1F LDA TRACK Advance sector1203 0732 F6 DE 20 LDB SECTOR1204 0735 5C INCB1205 0736 C1 0F CMPB #EMAXSEC+1 Wrap on max sector count1206 0738 26 E1 BNE UPSUB21207 073A C6 01 LDB #11208 073C 4C INCA Advance track1209 073D 81 30 CMPA #EMAXTRK1210 073F 26 DA BNE UPSUB21211 *1212 0741 8E 06 BC UPEXIT LDX #UPMES2 Load complete, report message1213 0744 7E 04 50 JMP PDATA11214 *1215 * Reset Serial PROM1216 *f9-monex.txt, line no. 1217: Symbol undefined Pass 21217 0747 86 00 UPRESET LDA #PRSTHI Strobe the reset linef9-monex.txt, line no. 1218: Symbol undefined Pass 21218 0749 97 00 STA PROMREGf9-monex.txt, line no. 1219: Symbol undefined Pass 21219 074B 86 00 LDA #PRSTLOf9-monex.txt, line no. 1220: Symbol undefined Pass 21220 074D 97 00 STA PROMREG1221 074F 8E 00 00 LDX #$0000 Delay a while`f9-monex.txt, line no. 1222: Phasing Error1222 0752 30 1F UPRST1 LEAX -1,X1223 0754 8C 00 00 CMPX #$00001224 0757 26 FB BNE UPRST11225 0759 BF DF 46 STX SYNCREG+0 Clear Sync Shift Register1226 075C BF DF 48 STX SYNCREG+21227 075F 39 RTS1228 *1229 * Input 1 Bit From PROM1230 *f9-monex.txt, line no. 1231: Phasing Errorf9-monex.txt, line no. 1231: Symbol undefined Pass 21231 0760 86 00 UPBIT LDA #PCLKHIf9-monex.txt, line no. 1232: Symbol undefined Pass 21232 0762 97 00 STA PROMREGf9-monex.txt, line no. 1233: Symbol undefined Pass 21233 0764 86 00 LDA #PCLKLOf9-monex.txt, line no. 1234: Symbol undefined Pass 21234 0766 97 00 STA PROMREGf9-monex.txt, line no. 1235: Symbol undefined Pass 21235 0768 96 00 LDA PROMREG1236 076A 44 LSRA1237 076B 78 DF 49 ASL SYNCREG+31238 076E 39 RTS1239 *1240 * Test for 32 bit Sync Word1241 *f9-monex.txt, line no. 1242: Phasing Error1242 076F 79 DF 48 UPSYNC ROL SYNCREG+21243 0772 79 DF 47 ROL SYNCREG+11244 0775 79 DF 46 ROL SYNCREG+0f9-monex.txt, line no. 1245: Symbol undefined Pass 21245 0778 CC 00 00 LDD #SYNCLO1246 077B 10 B3 DF 48 CMPD SYNCREG+21247 077F 26 0C BNE UPSYNCXf9-monex.txt, line no. 1248: Symbol undefined Pass 21248 0781 CC 00 00 LDD #SYNCHI1249 0784 10 B3 DF 46 CMPD SYNCREG+0f9-monex.txt, line no. 1250: Phasing Error1250 0788 39 UPSYNCX RTS1251 *1252 * Input 1 Byte From PROM1253 *f9-monex.txt, line no. 1254: Phasing Error1254 0789 34 04 UPBYTE PSHS B1255 078B C6 08 LDB #8f9-monex.txt, line no. 1256: Phasing Error1256 078D 8D D3 UPBYTE1 BSR UPBIT1257 078F 5A DECB1258 0790 26 00 BNE UPBYTE11259 0792 B6 DF 49 LDA SYNCREG+31260 0795 35 84 PULS B,PC1261 *1262 ***** NEXTCMD *****1263 *f9-monex.txt, line no. 1264: Phasing Error1264 0797 17 FC BE NEXTEXT LBSR INPE GET ONE CHAR. FROM TERMINAL1265 079A 84 7F ANDA #$7F STRIP PARITY FROM CHAR.1266 079C 1F 89 TFR A,B1267 079E 86 20 LDA #$201268 07A0 17 FC B1 LBSR OUTP PRNT SPACE1269 07A3 C1 60 CMPB #$601270 07A5 2F 07 BLE NXTEX01271 07A7 C0 20 SUBB #$201272 *1273 ***** DO TABLE LOOKUP *****1274 * FOR COMMAND FUNCTIONS1275 *f9-monex.txt, line no. 1276: Phasing Error1276 07A9 8E 07 C4 NXTEX0 LDX #EXTTAB POINT TO JUMP TABLEf9-monex.txt, line no. 1277: Phasing Error1277 07AC E1 80 NXTEX1 CMPB ,X+ DOES COMMAND MATCH TABLE ENTRY ?1278 07AE 27 12 BEQ JMPEXT BRANCH IF MATCH FOUND1279 07B0 30 02 LEAX 2,X POINT TO NEXT ENTRY IN TABLE1280 07B2 8C 07 D3 CMPX #EXTEND REACHED END OF TABLE YET ?1281 07B5 26 FA BNE NXTEX1 IF NOT END, CHECK NEXT ENTRY1282 07B7 8E 07 D3 LDX #MSGWHAT POINT TO MSG "WHAT?"1283 07BA 16 FC 93 LBRA PDATA1 PRINT MSG AND RETURNf9-monex.txt, line no. 1284: Phasing Error1284 07BD 6E 94 JMPEXT JMP [,X] JUMP TO COMMAND ROUTINE1285 *1286 * EXTENDED COMMAND JUMP TABLE1287 *f9-monex.txt, line no. 1288: Phasing Error1288 07BF EXTTAB EQU *1289 07BF 42 FCC 'B' BOOT FLEX1290 07C0 03 FB FDB UBSUB1291 07C2 4C FCC 'L' LOAD ROM DISK OVER SERIAL PORT1292 07C3 04 98 FDB ULSUB1293 07C5 46 FCC 'F' FORMAT RAM DISK1294 07C6 02 D7 FDB UFSUB1295 07C8 50 FCC 'P' LOAD ROM DISK FROM PROM1296 07C9 06 E5 FDB UPSUB1297 07CB 58 FCC 'X' XMODEM ROM DISK UPLOAD1298 07CC 05 8B FDB UXSUB1299 *f9-monex.txt, line no. 1300: Phasing Error1300 07CE EXTEND EQU *1301 *f9-monex.txt, line no. 1302: Phasing Error1302 07CE 57 48 41 54 20 3F MSGWHAT FCC "WHAT ?"1303 07D4 0A 0D 04 FCB $0A,$0D,$041304 ENDProgram + Init Data = 2047 bytesError count = 68
Go to most recent revision | Compare with Previous | Blame | View Log
