URL
https://opencores.org/ocsvn/System09/System09/trunk
Subversion Repositories System09
Compare Revisions
- This comparison shows the changes necessary to convert path
/System09/trunk/src
- from Rev 106 to Rev 120
- ↔ Reverse comparison
Rev 106 → Rev 120
/dsk/DISK_RAM.dsk
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/sys09bug/sys09270.lst
0,0 → 1,2861
Assembler release DWC_2.0 version 2.11 |
May 6, 2004 (c) Motorola (free ware) |
0001 NAM SYS09BUG FOR TERASIC CYCLONE II DE2-70 |
0000 INCLUDE "opt_270.asm" |
0001 |
0002 * |
0003 *************************************************** |
0004 * OPTION SWITCHES |
0005 *************************************************** |
0006 * |
0007 * |
0008 ** THE CONTROL PORT CAN ONLY BE ONE OF THESE |
0009 ** NOTE THAT THE ACIA WILL ALWAYS BE PRESET |
0010 ** FOR LOADING AND SAVING S1 RECORDS |
0011 * |
0012 *SWTOPT EQU $FF SWTP ACIA SERIAL CONTROL PORT |
0013 *ADSOPT EQU $FF ADS6809 & DG640 VIDEO DISPAY |
0014 *B3SOPT EQU $FF B3-SPARTAN2 FPGA VIDEO & PS2 KEYBOARD |
0015 *B5XOPT EQU $FF B5-X300 FPGA VIDEO & PS2 KEYBOARD |
0016 *S3SOPT EQU $FF SPARTAN3 STARTER FPGA VIDEO & PS2 KEYBOARD |
0017 *S3EOPT EQU $FF SPARTAN3E STARTER |
0018 *XESOPT EQU $FF XESS XSA-3S100 & XST-3.0 |
0019 00FF DE270OPT EQU $FF CYCLONE II DE2-70 |
0020 * |
0002 END |
0000 INCLUDE "sys09equ.asm" |
0001 * |
0002 *************************************************** |
0003 * MEMORY MAP EQUATES * |
0004 *************************************************** |
0005 E000 MONIO EQU $E000 I/O SPACE |
0006 IFD B3SOPT |
0007 MONEXT EQU $F000 START OF EXTENDED COMMANDS |
0008 EXTCMD EQU $00 EXTENDED OFFSET |
0009 ENDIF B3SOPT |
0009 ENDIF B3SOPT |
0010 IFD S3EOPT |
0011 MONRAM EQU $7FC0 |
0012 ELSE |
0013 DFC0 MONRAM EQU $DFC0 STACK SPACE |
0014 ENDIF S3EOPT |
0015 F800 MONROM EQU $F800 START OF ROM |
0016 IFD S3SOPT |
0017 MONEXT EQU $F000 START OF EXTENDED COMMANDS |
0018 EXTCMD EQU $00 EXTENDED OFFSET |
0019 ENDIF S3SOPT |
0019 ENDIF S3SOPT |
0020 IFD XESOPT |
0021 MONEXT EQU $F000 START OF EXTENDED COMMANDS |
0022 EXTCMD EQU $00 EXTENDED OFFSET |
0023 ENDIF XESOPT |
0023 ENDIF XESOPT |
0024 IFD DE270OPT |
0025 F000 MONEXT EQU $F000 START OF EXTENDED COMMANDS |
0026 0000 EXTCMD EQU $00 EXTENDED OFFSET |
0027 ENDIF DE270OPT |
0028 ************************************************** |
0029 ************************************************** |
0030 |
0031 IFD SWTOPT |
0032 * |
0033 * SOUTH WEST TECHNICAL PRODUCTS COMPUTER |
0034 * |
0035 ACIAOPT EQU $FF ACIA AT PORT 0 |
0036 DMAFOPT EQU $FF DMAF2 8" FLOPPY DISK BOOT |
0037 MFDCOPT EQU $FF MINIFLOPPY 5.25" DISK BOOT |
0038 DATOPT EQU $FF DYNAMIC ADDRESS TRANSLATION |
0039 ENDIF |
0039 ENDIF |
0040 * |
0041 IFD ADSOPT |
0042 * |
0043 * ACKERMAN DIGITAL ADS6809 |
0044 * |
0045 DG640OPT EQU $FF DG640 VDU AT $E800 |
0046 *RTCOPT EQU $FF REAL TIME CLOCK |
0047 PRTOPT EQU $FF PRINTER DRIVERS |
0048 MFDCOPT EQU $FF MINIFLOPPY 5.25" DISK BOOT |
0049 ENDIF ADSOPT |
0049 ENDIF ADSOPT |
0050 * |
0051 IFD B3SOPT |
0052 * |
0053 * BURCHED SPARTAN 2 B3+ |
0054 * |
0055 ACIAOPT EQU $FF ACIA AT PORT 0 |
0056 PS2OPT EQU $FF PS2 KEYBOARD AT $E020 |
0057 VDUOPT EQU $FF VDU AT $E030 |
0058 IDEOPT EQU $FF IDE AT $E100 |
0059 DATOPT EQU $FF DYNAMIC ADDRESS TRANSLATION |
0060 HFCOPT EQU $FF HARDWARE FLOW CONTROL |
0061 ENDIF B3SOPT |
0061 ENDIF B3SOPT |
0062 * |
0063 IFD B5XOPT |
0064 * |
0065 * BURCHED SPARTAN 2 B5-X300 |
0066 * |
0067 ACIAOPT EQU $FF ACIA AT PORT 0 |
0068 PS2OPT EQU $FF PS2 KEYBOARD AT $E020 |
0069 VDUOPT EQU $FF VDU AT $E030 |
0070 CF8OPT EQU $FF COMPACT FLASH AT $E040 |
0071 DATOPT EQU $FF DYNAMIC ADDRESS TRANSLATION |
0072 HFCOPT EQU $FF HARDWARE FLOW CONTROL |
0073 ENDIF B5XOPT |
0073 ENDIF B5XOPT |
0074 * |
0075 IFD S3SOPT |
0076 * |
0077 * DIGILENT SPARTAN 3 STARTER |
0078 * |
0079 ACIAOPT EQU $FF ACIA AT PORT 0 |
0080 PS2OPT EQU $FF PS2 KEYBOARD AT $E020 |
0081 VDUOPT EQU $FF VDU AT $E030 |
0082 CF8OPT EQU $FF COMPACT FLASH AT $E040 |
0083 DATOPT EQU $FF DYNAMIC ADDRESS TRANSLATION |
0084 EXTOPT EQU $FF EXTENDED COMMANDS |
0085 ENDIF S3SOPT |
0085 ENDIF S3SOPT |
0086 * |
0087 IFD S3EOPT |
0088 * |
0089 * DIGILENT SPARTAN 3E STARTER |
0090 * |
0091 ACIAOPT EQU $FF ACIA AT PORT 0 |
0092 PS2OPT EQU $FF PS2 KEYBOARD AT $E020 |
0093 VDUOPT EQU $FF VDU AT $E030 |
0094 TRAOPT EQU $FF PIA TRACE TIMER |
0095 ENDIF S3EOPT |
0095 ENDIF S3EOPT |
0096 * |
0097 IFD XESOPT |
0098 * |
0099 * XESS SPARTAN 3 XSA-3S1000 & XST-3.0 |
0100 * |
0101 ACIAOPT EQU $FF ACIA AT PORT 0 |
0102 PS2OPT EQU $FF PS2 KEYBOARD AT $E020 |
0103 VDUOPT EQU $FF VDU AT $E030 |
0104 IDEOPT EQU $FF IDE AT $E100 |
0105 DATOPT EQU $FF DYNAMIC ADDRESS TRANSLATION |
0106 HFCOPT EQU $FF HARDWARE FLOW CONTROL |
0107 EXTOPT EQU $FF EXTENDED COMMANDS |
0108 ENDIF XESOPT |
0108 ENDIF XESOPT |
0109 * |
0110 IFD DE270OPT |
0111 * |
0112 * TERASIC CYCLONE 2 DE2-70 |
0113 * |
0114 00FF ACIAOPT EQU $FF ACIA AT PORT 0 |
0115 00FF PS2OPT EQU $FF PS2 KEYBOARD AT $E020 |
0116 00FF VDUOPT EQU $FF VDU AT $E030 |
0117 00FF CF8OPT EQU $FF COMPACT FLASH AT $E040 |
0118 00FF DATOPT EQU $FF DYNAMIC ADDRESS TRANSLATION |
0119 00FF EXTOPT EQU $FF EXTENDED COMMANDS |
0120 ENDIF DE270OPT |
0121 * |
0122 * |
0123 IFD ACIAOPT |
0124 * |
0125 *************************************************** |
0126 * SERIAL PORT * |
0127 *************************************************** |
0128 * |
0129 ** ACIA SITS ON PORT 0 |
0130 * |
0131 E000 ACIAS EQU MONIO+$00 CONTROL PORT |
0132 * |
0133 ENDIF ACIAOPT |
0134 IFD MFDCOPT |
0135 * |
0136 *************************************************** |
0137 * MINIFLOPPY DRIVE * |
0138 *************************************************** |
0139 * |
0140 ** FLOPPY DISK CONTROLLER SITS ON PORT 1 |
0141 * |
0142 DRVFDC EQU MONIO+$14 |
0143 CMDFDC EQU MONIO+$18 |
0144 SECFDC EQU MONIO+$1A |
0145 DATFDC EQU MONIO+$1B |
0146 ENDIF MFDCOPT |
0146 ENDIF MFDCOPT |
0147 IFD PS2OPT |
0148 * |
0149 *************************************************** |
0150 * VDU8 PS/2 KEYBOARD PORT * |
0151 *************************************************** |
0152 * |
0153 ** KEYBOARD SITS ON PORT 2 |
0154 * |
0155 E020 PS2KBD EQU MONIO+$20 PS/2 KEYBOARD PORT |
0156 ENDIF PS2OPT |
0157 IFD VDUOPT |
0158 * |
0159 *************************************************** |
0160 * VDU8 DISPLAY DRIVER EQUATES * |
0161 *************************************************** |
0162 * |
0163 ** VDU8 DISPLAY SITS ON PORT 3 |
0164 * |
0165 E030 VDU EQU MONIO+$30 |
0166 0000 VDUCHR EQU 0 CHARACTER REGISTER |
0167 0001 VDUATT EQU 1 ATTRIBUTE REGISTER |
0168 0002 VDUCOL EQU 2 CURSOR COLUMN |
0169 0003 VDUROW EQU 3 CURSOR ROW |
0170 0004 VDUOFF EQU 4 ROW OFFSET |
0171 * |
0172 0050 LINLEN EQU 80 LENGTH OF A LINE |
0173 0019 NUMLIN EQU 25 NUMBER OF LINES |
0174 ENDIF VDUOPT |
0175 * |
0176 IFD CF8OPT |
0177 * |
0178 *************************************************** |
0179 * COMPACT FLASH EQUATES 8 BIT TRANSFER * |
0180 *************************************************** |
0181 * |
0182 ** COMPACT FLASH SITS AT PORT 4 |
0183 * |
0184 E040 CF_BASE EQU MONIO+$40 |
0185 E040 CF_DATA EQU CF_BASE+0 |
0186 E041 CF_ERROR EQU CF_BASE+1 ; read error |
0187 E041 CF_FEATURE EQU CF_BASE+1 ; write feature |
0188 E042 CF_SECCNT EQU CF_BASE+2 |
0189 E043 CF_SECNUM EQU CF_BASE+3 |
0190 E044 CF_CYLLO EQU CF_BASE+4 |
0191 E045 CF_CYLHI EQU CF_BASE+5 |
0192 E046 CF_HEAD EQU CF_BASE+6 |
0193 E047 CF_STATUS EQU CF_BASE+7 ; read status |
0194 E047 CF_COMAND EQU CF_BASE+7 ; write command |
0195 * |
0196 * Command Equates |
0197 * |
0198 0020 CMDREAD EQU $20 ; Read Single sector |
0199 0030 CMDWRITE EQU $30 ; Write Single sector |
0200 00EF CMDFEATURE EQU $EF |
0201 0001 FEAT8BIT EQU $01 ; enable 8 bit transfers |
0202 00E0 HEADLBA EQU $E0 |
0203 * |
0204 * Status bit equates |
0205 * |
0206 0080 BUSY EQU $80 |
0207 0040 DRDY EQU $40 |
0208 0008 DRQ EQU $08 |
0209 0001 ERR EQU $01 |
0210 * |
0211 ENDIF CF8OPT |
0212 * |
0213 IFD IDEOPT |
0214 * |
0215 *************************************************** |
0216 * COMPACT FLASH EQUATES 16 BIT TRANSFER (XESS) * |
0217 *************************************************** |
0218 * |
0219 ** COMPACT FLASH SITS AT PORT 4 |
0220 * |
0221 CF_BASE EQU MONIO+$0100 |
0222 CF_DATA EQU CF_BASE+0 |
0223 CF_ERROR EQU CF_BASE+2 ; read error |
0224 CF_FEATURE EQU CF_BASE+2 ; write feature |
0225 CF_SECCNT EQU CF_BASE+4 |
0226 CF_SECNUM EQU CF_BASE+6 |
0227 CF_CYLLO EQU CF_BASE+8 |
0228 CF_CYLHI EQU CF_BASE+10 |
0229 CF_HEAD EQU CF_BASE+12 |
0230 CF_STATUS EQU CF_BASE+14 ; read status |
0231 CF_COMAND EQU CF_BASE+14 ; write command |
0232 CF_AUX EQU CF_BASE+30 |
0233 * |
0234 * Command Equates |
0235 * |
0236 CMDREAD EQU $20 ; Read Single sector |
0237 CMDWRITE EQU $30 ; Write Single sector |
0238 AUXRESET EQU $06 ; Reset IDE |
0239 AUXRSTREL EQU $02 ; Reset release IRQ masked |
0240 HEADLBA EQU $E0 |
0241 * |
0242 * Status bit equates |
0243 * |
0244 BUSY EQU $80 |
0245 DRDY EQU $40 |
0246 DRQ EQU $08 |
0247 ERR EQU $01 |
0248 * |
0249 ENDIF CF8OPT |
0249 ENDIF CF8OPT |
0250 * |
0251 IFD RTCOPT |
0252 * |
0253 ************************************************** |
0254 * MM58167A REAL TIME CLOCK MEMORY MAP: |
0255 ************************************************** |
0256 * |
0257 ** REAL TIME CLOCK SITS ON PORT 4 AND PORT 5 |
0258 * |
0259 CLOCK EQU MONIO+$40 CLOCK BASE ADDRESS AND REGISTERS |
0260 * |
0261 * COUNTER AND COMPARITOR REGISTERS: |
0262 * |
0263 * Both the Clock Counter and Clock Comparitor |
0264 * consist of 8 registers for holding the time. |
0265 * The register offsets from the Counter and |
0266 * Comparitor registers are listed above. |
0267 * |
0268 COUNTR EQU CLOCK+0 |
0269 CMPRAM EQU CLOCK+8 COMPARITOR REGISTERS |
0270 * |
0271 * CLOCK REGISTER OFFSETS: |
0272 * These register offsets are used for the CLOCK |
0273 * and comparitor ram CMPRAM. |
0274 * |
0275 S10000 EQU 0 TEN THOUNSANDTHS OF SECONDS |
0276 S100 EQU 1 HUNDRETHS AND TENTHS OF SECONDS |
0277 SECOND EQU 2 |
0278 MINUIT EQU 3 |
0279 HOUR EQU 4 |
0280 WKDAY EQU 5 |
0281 MTHDAY EQU 6 |
0282 MONTH EQU 7 |
0283 * |
0284 * INTERRUPT OUTPUT REGISTERS: |
0285 * |
0286 * An interrupt output may be generated at the |
0287 * following rates by setting the appropriate bit |
0288 * in the Interrupt Control Register (CINTCR). |
0289 * The Interrupt Status Register (CINTSR) must be |
0290 * read to clear the interrupt and will return |
0291 * the source of the interrupt. |
0292 * |
0293 * 1/Month Bit 7 |
0294 * 1/Week Bit 6 |
0295 * 1/Day Bit 5 |
0296 * 1/Hour Bit 4 |
0297 * 1/Minuite Bit 3 |
0298 * 1/Second Bit 2 |
0299 * 10/Second Bit 1 |
0300 * Comparitor Bit 0 |
0301 * |
0302 CINTSR EQU CLOCK+16 INTERRUPT STATUS REGISTER |
0303 CINTCR EQU CLOCK+17 INTERRUPT CONTROL REGISTER |
0304 * |
0305 * COUNTER AND RAM RESETS; GO COMMAND. |
0306 * |
0307 * The counter and comparitor may be reset |
0308 * by writing $FF into CTRRES and CMPRES |
0309 * respectivly. |
0310 * A write to the Go command register (GOCMND) |
0311 * will reset the 1/1000ths, 1/100ths and 1/10ths |
0312 * of a second counter. |
0313 * |
0314 CTRRES EQU CLOCK+18 COUNTER RESET |
0315 CMPRES EQU CLOCK+19 COMPARITOR RAM RESET |
0316 GOCMND EQU CLOCK+21 GO COMMAND |
0317 * |
0318 * CLOCK STATUS REGISTER. |
0319 * |
0320 * The counter takes 61 usec. to rollover for |
0321 * every 1KHz clock pulse. If the Status bit is |
0322 * set after reading the counter, the counter |
0323 * should be re-read to ensure the time is correct. |
0324 * |
0325 CLKSTA EQU CLOCK+20 STATUS BIT |
0326 SBYINT EQU CLOCK+22 STANDBY INTERRUPT |
0327 TSTMOD EQU CLOCK+31 TEST MODE REGISTER |
0328 ENDIF RTCOPT |
0328 ENDIF RTCOPT |
0329 * |
0330 IFD TRAOPT |
0331 * |
0332 ************************************************** |
0333 * PIA INTERRUPT TIMER |
0334 ************************************************** |
0335 * |
0336 ** PIA INTERRUPT TIMER SITS ON PORT 7 |
0337 * |
0338 ** PIA TIMER FOR SINGLE STEP / TRACE |
0339 * |
0340 * TADATA = Output = Timer preset register |
0341 * TACTRL - CA1 = input = rising edge = NMI |
0342 * - CA2 = Output = Timer Reset (Active High) |
0343 * TBDATA = Input = Timer read back register |
0344 * TBCTRL - CB1 = input = rising edge = FIRQ |
0345 * - CB2 = output = strobe low on write to TBDATA = Timer Preset |
0346 * |
0347 * CRA0 = 0 CA1 IRQ DISAB, CRA0 = 1 CA1 IRQ ENAB |
0348 * CRA1 = 1 CA1 Rising edge IRQ |
0349 * CRA2 = 0 TADATA = Data Direction, CRA2 = 1 TADATA = I/O Register |
0350 * CRA3 = 0 CA2 = 0 output, CRA3 = 1 CA2 = 1 |
0351 * CRA4 = 1 ] CA2 = Set/Reset output |
0352 * CRA5 = 1 ] |
0353 * CRA6 = X CA2 Input Interrupt Flag |
0354 * CRA7 = X CA1 Interrupt Flag |
0355 * |
0356 * CRB0 = 0 CB1 IRQ DISAB, CRB0 = 1 CA1 IRQ ENAB |
0357 * CRB1 = 1 CB1 Rising edge IRQ |
0358 * CRB2 = 0 TBDATA = Data Direction, CRB2 = 1 TBDATA = I/O Register |
0359 * CRB3 = 0 CB2 = 0 output, CRB3 = 1 CB2 = 1 |
0360 * CRB4 = 1 ] CB2 = Set/Reset output |
0361 * CRB5 = 1 ] |
0362 * CRB6 = X CB2 Input Interrupt Flag |
0363 * CRB7 = X CB1 Interrupt Flag |
0364 * |
0365 * DDRA = 0 TADATA = Input, DDRA = 1 TADATA = Output |
0366 * DDRB = 0 TBDATA = Input, DDRB = 1 TBDATA = Output |
0367 * |
0368 TADATA EQU MONIO+$70 Timer preset port |
0369 TACTRL EQU MONIO+$71 |
0370 TBDATA EQU MONIO+$72 Timer read back port |
0371 TBCTRL EQU MONIO+$73 |
0372 * |
0373 TRADEL EQU 13 Number of E cycles for RTI (May need to be fudged) |
0374 * |
0375 ENDIF TRAOPT |
0375 ENDIF TRAOPT |
0376 IFD ADSOPT |
0377 * |
0378 *************************************************** |
0379 * SERIAL PORT FOR DG640 * |
0380 *************************************************** |
0381 * |
0382 ** SET UP FOR ACKERMAN DIGITAL ADS6809 |
0383 ** THE ADS6809 S100 BOAD HAS AN ON BOARD ACIA |
0384 * |
0385 ACIAS EQU MONIO+$400 CONTROL PORT |
0386 * |
0387 ENDIF ADSOPT |
0387 ENDIF ADSOPT |
0388 IFD PRTOPT |
0389 * |
0390 *************************************************** |
0391 * PRINTER INTERFACE * |
0392 *************************************************** |
0393 * |
0394 PADATA EQU MONIO+$404 |
0395 PACTRL EQU MONIO+$405 |
0396 PBDATA EQU MONIO+$406 |
0397 PBCTRL EQU MONIO+$407 |
0398 * |
0399 ** CB1 ACK. I/P |
0400 ** CB2 STB. O/P |
0401 ** PB0 - PB7 DATA 1 - 8 O/P |
0402 ** PORT A BIT ASSIGNMENT |
0403 * |
0404 PBUSY EQU $80 I/P |
0405 PEMPTY EQU $40 I/P |
0406 SELECT EQU $20 I/P |
0407 PERROR EQU $10 I/P |
0408 PRESET EQU %00000100 O/P PA3 = 0 |
0409 AUTOFD EQU %00001000 O/P PA2 = 0 |
0410 DIRMSK EQU %00001100 |
0411 ENDIF PRTOPT |
0411 ENDIF PRTOPT |
0412 IFD DG640OPT |
0413 * |
0414 *************************************************** |
0415 * DG640 MEMORY MAPPED DISPLAY DRIVER VARIABLES * |
0416 *************************************************** |
0417 * |
0418 ** VIDEO DISPLAY DEFINITIONS |
0419 * |
0420 SCREEN EQU MONIO+$0800 START OF SCREEN MEMORY |
0421 LINLEN EQU 64 LENGTH OF A LINE |
0422 NUMLIN EQU 16 NUMBER OF LINES |
0423 SCNLEN EQU $400 LENGTH OF SCREEN |
0424 ENDIF DG640OPT |
0424 ENDIF DG640OPT |
0425 * |
0426 IFD DMAFOPT |
0427 * |
0428 *************************************************** |
0429 * DMAF2 8" DRIVE * |
0430 *************************************************** |
0431 * |
0432 ADDREG EQU $F000 ADDRESS REGISTER |
0433 CNTREG EQU $F002 COUNT REGISTER |
0434 CCREG EQU $F010 CHANNEL CONTROL REGISTER |
0435 PRIREG EQU $F014 DMA PRIORITY REGISTER |
0436 AAAREG EQU $F015 ??? |
0437 BBBREG EQU $F016 ??? |
0438 COMREG EQU $F020 1791 COMMAND REGISTER |
0439 SECREG EQU $F022 SECTOR REGISTER |
0440 DRVREG EQU $F024 DRIVE SELECT LATCH |
0441 CCCREG EQU $F040 ??? |
0442 ENDIF DMAFOPT |
0442 ENDIF DMAFOPT |
0443 IFD DATOPT |
0444 ************************************************** |
0445 * DYNAMIC ADDRESS TRANSLATION REGISTERS * |
0446 ************************************************** |
0447 * |
0448 FFF0 IC11 EQU $FFF0 DAT RAM CHIP |
0449 55AA TSTPAT EQU $55AA TEST PATTERN |
0450 ENDIF DATOPT |
0451 * |
0003 END |
0000 INCLUDE "sys09bug.asm" |
0001 * NAM SYS09BUG12 SYSTEM09 MONITOR |
0002 OPT l |
|
|
sys09bug.asm page 2 |
0004 * |
0005 * MONITOR PROGRAM FOR THE SOUTHWEST TECHNICAL |
0006 * PRODUCTS MP-09 CPU BOARD AS COMMENTED BY.... |
0007 * |
0008 * ALLEN CLARK WALLACE WATSON |
0009 * 2502 REGAL OAKS LANE 4815 EAST 97th AVE. |
0010 * LUTZ, FLA. 33549 TEMPLE TERRACE, FLA. 33617 |
0011 * PH. 813-977-0347 PH. 813-985-1359 |
0012 * |
0013 * MODIFIED TO SBUG09 VER 1.8 BY: RANDY JARRETT |
0014 * 2561 NANTUCKET DR APT. E |
0015 * ATLANTA, GA 30345 |
0016 * PH. 404-320-1043 |
0017 * |
0018 * MODIFIED TO SYS09BUG VER 1.0 |
0019 * FOR: SYSTEM09 FPGA SYSTEM |
0020 * BY: JOHN KENT |
0021 * DATE: 21ST NOVEMBER 2006 |
0022 * REMOVED: DISK BOOTS |
0023 * MEMORY TEST |
0024 * ADDED: ADM3A VDU DRIVER |
0025 * |
0026 * MODIFIED TO SYS09BUG VER 1.1 |
0027 * BY: JOHN KENT |
0028 * DATE: 7TH JANUARY 2007 |
0029 * ADDED: 'U' USER EXTENTION COMMANDS AT $F000 |
0030 * CONDITIONAL ASSEMBLY OF FLOPPY BOOTS |
0031 * AND REALTIME CLOCK |
0032 * |
0033 * MODIFIED TO SYS09BUG VER 1.2 |
0034 * BY: JOHN KENT |
0035 * DATE: 21ST MAY 2007 |
0036 * ADDED: COMPACT FLASH BOOT TO FPGA VERSION |
0037 * REMOVED PORT REDIRECTION ON PUNCH & LOAD |
0038 * |
0039 * Modified to SYS09BUG VER 1.3 |
0040 * BY: JOHN KENT |
0041 * DATE: 8TH JAN 2008 |
0042 * ADDED: CONDITIONALS FOR SPARTAN3E STARTER BOARD |
0043 * WITH ONLY 32K OF RAM |
0044 * |
0045 * Modified to SYS09BUG VER 1.4 |
0046 * BY: JOHN KENT |
0047 * DATE: 3RD FEB 2008 |
0048 * ADDED: CONDITIONALS FOR XESS BOARD WITH IDE |
0049 * SEPERATE CONDITIONAL FOR S3 STARTER AND B5-X300 |
0050 * 16 BIT IDE DISK BOOT STRAP ROUTINE |
0051 * |
0052 * Modified to SYS09BUG VER 1.5 |
0053 * BY: JOHN KENT |
0054 * DATE: 7TH SEP 2008 |
0055 * ADDED: ADDED "B3-S2+" STRING |
0056 * |
0057 * Modified to SYS09BUG VER 1.6 |
0058 * BY: JOHN KENT |
0059 * DATE: 2ND DEC 2008 |
0060 * ADDED: ADDED HARDWARE FLOW CONTROL |
0061 * |
0062 * CHANGED: SEPARARTED OPTIONS EQUATES AND BODY INTO SEPARATE FILES |
0063 * |
0064 * Modified to SYS09BUG VER 1.7 |
0065 * BY: JOHN KENT |
0066 * DATE: 16TH OCT 2010 |
0067 * ADDED: "DE2-70" STRING |
0068 * |
0069 * *** COMMANDS *** |
0070 * |
0071 * CONTROL A = ALTER THE "A" ACCUMULATOR |
0072 * CONTROL B = ALTER THE "B" ACCUMULATOR |
0073 * CONTROL C = ALTER THE CONDITION CODE REGISTER |
0074 * CONTROL D = ALTER THE DIRECT PAGE REGISTER |
0075 * CONTROL P = ALTER THE PROGRAM COUNTER |
0076 * CONTROL U = ALTER USER STACK POINTER |
0077 * CONTROL X = ALTER "X" INDEX REGISTER |
0078 * CONTROL Y = ALTER "Y" INDEX REGISTER |
0079 * B hhhh = SET BREAKPOINT AT LOCATION $hhhh |
0080 * D = 5.25" MINIFLOPPY BOOT |
0081 * E ssss-eeee = EXAMINE MEMORY |
0082 * FROM STARTING ADDRESS ssss |
0083 * TO ENDING ADDRESS eeee. |
0084 * G = CONTINUE EXECUTION FROM BREAKPOINT OR SWI |
0085 * L = LOAD TAPE |
0086 * M hhhh = EXAMINE AND CHANGE MEMORY LOCATION hhhh |
0087 * P ssss-eeee = PUNCH TAPE, START ssss TO END eeee ADDR. |
0088 * R = DISPLAY REGISTER CONTENTS |
0089 * S = DISPLAY STACK FROM ssss TO $DFC0 |
0090 * U = 8" DMAF2 FLOPPY BOOT |
0091 * U = USER EXTENSION COMMANDS AT $F000 |
0092 * X = REMOVE ALL BREAKPOINTS |
0093 * |
0094 * |
0095 *************************************************** |
0096 * SYS09BUG VARIABLE SPACE |
0097 *************************************************** |
0098 * |
0099 DFC0 ORG MONRAM |
0100 DFC0 STACK EQU * ; TOP OF INTERNAL STACK |
0101 DFC0 NMI RMB 2 ; USER NMI VECTOR |
0102 DFC2 SWI3 RMB 2 ; SOFTWARE INTERRUPT VECTOR #3 |
0103 DFC4 SWI2 RMB 2 ; SOFTWARE INTERRUPT VECTOR #2 |
0104 DFC6 FIRQ RMB 2 ; FAST INTERRUPT VECTOR |
0105 DFC8 IRQ RMB 2 ; INTERRUPT VECTOR |
0106 DFCA SWI RMB 2 ; SOFTWARE INTERRUPT VECTOR |
0107 DFCC SVCVO RMB 2 ; SUPERVISOR CALL VECTOR ORGIN |
0108 DFCE SVCVL RMB 2 ; SUPERVISOR CALL VECTOR LIMIT |
0109 IFD DATOPT |
0110 DFD0 LRARAM RMB 16 ; LRA ADDRESSES |
0111 ENDIF DATOPT |
0112 DFE0 CPORT RMB 2 ; RE-VECTORABLE CONTROL PORT |
0113 DFE2 ECHO RMB 1 ; ECHO FLAG |
0114 DFE3 BPTBL RMB 24 ; BREAKPOINT TABLE BASE ADDR |
0115 IFD TRAOPT |
0116 NMISAV RMB 2 ; NMI Jump Vector Backup |
0117 TRACNT RMB 2 ; Trace Count |
0118 ENDIF TRAOPT |
0118 ENDIF TRAOPT |
0119 IFD VDUOPT |
0120 * |
0121 ************************************************** |
0122 * VDU8 DISPLAY DRIVER VARIABLES * |
0123 ************************************************** |
0124 * |
0125 **** ALWAYS KEEP COLADX AND ROWADX TOGETHER ****** |
0126 DFFB COLADX RMB 1 ; CURSOR COLUMN |
0127 DFFC ROWADX RMB 1 ; CURSOR ROW |
0128 ************************************************** |
0129 * |
0130 DFFD NEWROW RMB 1 ; NEW ROW TEMP FOR ESCAPE |
0131 DFFE ESCFLG RMB 1 ; ESCAPE SEQUENCE ACTIVE |
0132 ENDIF VDUOPT |
0133 IFD DG640OPT |
0134 * |
0135 *************************************************** |
0136 * DG640 MEMORY MAPPED DISPLAY DRIVER VARIABLES * |
0137 *************************************************** |
0138 * |
0139 ***** ALWAYS KEEP THESE TWO BYTES TOGETHER ***** |
0140 COLADX RMB 1 ; CURSOR COLUMN |
0141 ROWADX RMB 1 ; CURSOR ROW |
0142 ************************************************* |
0143 CURSOR RMB 2 ; ABSOLUTE SCREEN ADDRESS |
0144 NEWROW RMB 1 ; NEW ROW TEMP FOR ESCAPE |
0145 ESCFLG RMB 1 ; ESCAPE SEQUENCE ACTIVE |
0146 ENDIF DG640OPT |
0146 ENDIF DG640OPT |
0147 * |
0148 * |
0149 *************************************************** |
0150 * START OF ROM * |
0151 *************************************************** |
0152 * |
0153 F800 ORG MONROM |
0154 F800 F8 14 FDB MONITOR |
0155 F802 F8 61 FDB NEXTCMD |
0156 F804 FC A1 FDB INCH |
0157 F806 FC 9B FDB INCHE |
0158 F808 FC B9 FDB INCHEK |
0159 F80A FC CE FDB OUTCH |
0160 F80C FB 8F FDB PDATA |
0161 F80E FB 1E FDB PCRLF |
0162 F810 FB 1A FDB PSTRNG |
0163 F812 FA 2E FDB LRA |
0164 * |
0165 IFD ADSOPT |
0166 FDB PCHK ; CHECK FOR PRINTER INPUT |
0167 FDB PINIZ ; INITIATE PRINTER |
0168 FDB POUTCH ; OUTPUT CH. TO PRINTER |
0169 FDB VINIZ |
0170 FDB VOUTCH |
0171 FDB ACINIZ |
0172 FDB AOUTCH |
0173 ENDIF ADSOPT |
0173 ENDIF ADSOPT |
0174 * |
0175 * MONITOR |
0176 * |
0177 * VECTOR ADDRESS STRING IS..... |
0178 * $F8A1-$F8A1-$F8A1-$F8A1-$F8A1-$FAB0-$FFFF-$FFFF |
0179 * |
0180 F814 8E FE 62 MONITOR LDX #RAMVEC ; POINT TO VECTOR ADDR. STRING |
0181 F817 10 8E DF C0 LDY #STACK ; POINT TO RAM VECTOR LOCATION |
0182 F81B C6 10 LDB #$10 ; BYTES TO MOVE = 16 |
0183 F81D A6 80 LOOPA LDA ,X+ ; GET VECTOR BYTE |
0184 F81F A7 A0 STA ,Y+ ; PUT VECTORS IN RAM / $DFC0-$DFCF |
0185 F821 5A DECB ; SUBTRACT 1 FROM NUMBER OF BYTES TO MOVE |
0186 F822 26 F9 BNE LOOPA ; CONTINUE UNTIL ALL VECTORS MOVED |
0187 * |
0188 * CONTENTS FROM TO FUNCTION |
0189 * $F8A1 $FE40 $DFC0 USER-V |
0190 * $F8A1 $FE42 $DFC2 SWI3-V |
0191 * $F8A1 $FE44 $DFC4 SWI2-V |
0192 * $F8A1 $FE46 $DFC6 FIRQ-V |
0193 * $F8A1 $FE48 $DFC8 IRQ-V |
0194 * $FAB0 $FE4A $DFCA SWI-V |
0195 * $FFFF $FE4C $DFCC SVC-VO |
0196 * $FFFF $FE4E $DFCE SVC-VL |
0197 * |
0198 F824 8E E0 00 LDX #ACIAS |
0199 F827 BF DF E0 STX CPORT ; STORE ADDR. IN RAM |
0200 F82A 17 01 5B LBSR XBKPNT ; CLEAR OUTSTANDING BREAKPOINTS |
0201 F82D C6 0C LDB #12 ; CLEAR 12 BYTES ON STACK |
0202 F82F 6F E2 CLRSTK CLR ,-S |
0203 F831 5A DECB |
0204 F832 26 FB BNE CLRSTK |
0205 F834 30 8C DD LEAX MONITOR,PCR ; SET PC TO SBUG-E ENTRY |
0206 F837 AF 6A STX 10,S ; ON STACK |
0207 F839 86 D0 LDA #$D0 ; PRESET CONDITION CODES ON STACK |
0208 F83B A7 E4 STA ,S |
0209 F83D 1F 43 TFR S,U |
0210 F83F 17 04 A3 LBSR IOINIZ ; INITIALIZE CONTROL PORT |
0211 F842 8E FE 72 LDX #MSG1 ; POINT TO MONITOR MESSAGE |
0212 F845 17 03 47 LBSR PDATA ; PRINT MSG |
0213 * |
0214 IFD DATOPT |
0215 F848 8E DF D0 LDX #LRARAM ; POINT TO LRA RAM STORAGE AREA |
0216 F84B 4F CLRA START ; TOTAL AT ZERO |
0217 F84C C6 0D LDB #13 ; TOTAL UP ALL ACTIVE RAM MEMORY |
0218 F84E 6D 85 FNDREL TST B,X ; TEST FOR RAM AT NEXT LOC. |
0219 F850 27 03 BEQ RELPAS ; IF NO RAM GO TO NEXT LOC. |
0220 F852 8B 04 ADDA #4 ; ELSE ADD 4K TO TOTAL |
0221 F854 19 DAA ; ADJ. TOTAL FOR DECIMAL |
0222 F855 5A RELPAS DECB ; SUB. 1 FROM LOCS. TO TEST |
0223 F856 2A F6 BPL FNDREL ; PRINT TOTAL OF RAM |
0224 F858 17 04 0C LBSR OUT2H ; OUTPUT HEX BYTE AS ASCII |
0225 F85B 8E FE 92 LDX #MSG2 ; POINT TO MSG 'K' CR/LF + 3 NULS |
0226 F85E 17 03 2E LBSR PDATA ; PRINT MSG |
0227 ENDIF DATOPT |
0228 * |
0229 IFD TRAOPT |
0230 LBSR TRAINZ |
0231 ENDIF TRAOPT |
0231 ENDIF TRAOPT |
0232 * |
0233 ***** NEXTCMD ***** |
0234 * |
0235 F861 8E FE 99 NEXTCMD LDX #MSG3 ; POINT TO MSG ">" |
0236 F864 17 02 B3 LBSR PSTRNG ; PRINT MSG |
0237 F867 17 04 37 LBSR INCH ; GET ONE CHAR. FROM TERMINAL |
0238 F86A 84 7F ANDA #$7F ; STRIP PARITY FROM CHAR. |
0239 F86C 81 0D CMPA #$0D ; IS IT CARRIAGE RETURN ? |
0240 F86E 27 F1 BEQ NEXTCMD ; IF CR THEN GET ANOTHER CHAR. |
0241 F870 1F 89 TFR A,B ; PUT CHAR. IN "B" ACCUM. |
0242 F872 81 20 CMPA #$20 ; IS IT CONTROL OR DATA CHAR ? |
0243 F874 2C 09 BGE PRTCMD ; IF CMD CHAR IS DATA, PRNT IT |
0244 F876 86 5E LDA #'^ ; ELSE CNTRL CHAR CMD SO... |
0245 F878 17 04 53 LBSR OUTCH ; PRINT "^" |
0246 F87B 1F 98 TFR B,A ; RECALL CNTRL CMD CHAR |
0247 F87D 8B 40 ADDA #$40 ; CONVERT IT TO ASCII LETTER |
0248 F87F 17 04 4C PRTCMD LBSR OUTCH ; PRNT CMD CHAR |
0249 F882 17 04 47 LBSR OUT1S ; PRNT SPACE |
0250 F885 C1 60 CMPB #$60 |
0251 F887 2F 02 BLE NXTCH0 |
0252 F889 C0 20 SUBB #$20 |
0253 * |
0254 ***** DO TABLE LOOKUP ***** |
0255 * FOR COMMAND FUNCTIONS |
0256 * |
0257 F88B 8E FE 29 NXTCH0 LDX #JMPTAB ; POINT TO JUMP TABLE |
0258 F88E E1 80 NXTCHR CMPB ,X+ ; DOES COMMAND MATCH TABLE ENTRY ? |
0259 F890 27 0F BEQ JMPCMD ; BRANCH IF MATCH FOUND |
0260 F892 30 02 LEAX 2,X ; POINT TO NEXT ENTRY IN TABLE |
0261 F894 8C FE 62 CMPX #TABEND ; REACHED END OF TABLE YET ? |
0262 F897 26 F5 BNE NXTCHR ; IF NOT END, CHECK NEXT ENTRY |
0263 F899 8E FE 9B LDX #MSG4 ; POINT TO MSG "WHAT?" |
0264 F89C 17 02 F0 LBSR PDATA ; PRINT MSG |
0265 F89F 20 C0 BRA NEXTCMD ; IF NO MATCH, PRMPT FOR NEW CMD |
0266 F8A1 AD 94 JMPCMD JSR [,X] ; JUMP TO COMMAND ROUTINE |
0267 F8A3 20 BC BRA NEXTCMD ; PROMPT FOR NEW COMMAND |
0268 * |
0269 * "G" GO OR CONTINUE |
0270 * |
0271 F8A5 1F 34 GO TFR U,S |
0272 F8A7 3B RTI RTI |
0273 * |
0274 ***** "M" MEMORY EXAMINE AND CHANGE ***** |
0275 * |
0276 F8A8 17 03 6B MEMCHG LBSR IN1ADR ; INPUT ADDRESS |
0277 F8AB 29 2D BVS CHRTN ; IF NOT HEX, RETURN |
0278 F8AD 1F 12 TFR X,Y ; SAVE ADDR IN "Y" |
0279 F8AF 8E FE A1 MEMC2 LDX #MSG5 ; POINT TO MSG " - " |
0280 F8B2 17 02 65 LBSR PSTRNG ; PRINT MSG |
0281 F8B5 1F 21 TFR Y,X ; FETCH ADDRESS |
0282 F8B7 17 03 A5 LBSR OUT4H ; PRINT ADDR IN HEX |
0283 F8BA 17 04 0F LBSR OUT1S ; OUTPUT SPACE |
0284 F8BD A6 A4 LDA ,Y ; GET CONTENTS OF CURRENT ADDR. |
0285 F8BF 17 03 A5 LBSR OUT2H ; OUTPUT CONTENTS IN ASCII |
0286 F8C2 17 04 07 LBSR OUT1S ; OUTPUT SPACE |
0287 F8C5 17 03 5E LBSR BYTE ; LOOP WAITING FOR OPERATOR INPUT |
0288 F8C8 28 11 BVC CHANGE ; IF VALID HEX GO CHANGE MEM. LOC. |
0289 F8CA 81 08 CMPA #8 ; IS IT A BACKSPACE (CNTRL H)? |
0290 F8CC 27 E1 BEQ MEMC2 ; PROMPT OPERATOR AGAIN |
0291 F8CE 81 18 CMPA #$18 ; IS IT A CANCEL (CNTRL X)? |
0292 F8D0 27 DD BEQ MEMC2 ; PROMPT OPERATOR AGAIN |
0293 F8D2 81 5E CMPA #'^ ; IS IT AN UP ARROW? |
0294 F8D4 27 17 BEQ BACK ; DISPLAY PREVIOUS BYTE |
0295 F8D6 81 0D CMPA #$D ; IS IT A CR? |
0296 F8D8 26 0F BNE FORWRD ; DISPLAY NEXT BYTE |
0297 F8DA 39 CHRTN RTS ; EXIT ROUTINE |
0298 * |
0299 * |
0300 F8DB A7 A4 CHANGE STA ,Y ; CHANGE BYTE IN MEMORY |
0301 F8DD A1 A4 CMPA ,Y ; DID MEMORY BYTE CHANGE? |
0302 F8DF 27 08 BEQ FORWRD ; $F972 |
0303 F8E1 17 03 E8 LBSR OUT1S ; OUTPUT SPACE |
0304 F8E4 86 3F LDA #'? ; LOAD QUESTION MARK |
0305 F8E6 17 03 E5 LBSR OUTCH ; PRINT IT |
0306 F8E9 31 21 FORWRD LEAY 1,Y ; POINT TO NEXT HIGHER MEM LOCATION |
0307 F8EB 20 C2 BRA MEMC2 ; PRINT LOCATION & CONTENTS |
0308 F8ED 31 3F BACK LEAY -1,Y ; POINT TO LAST MEM LOCATION |
0309 F8EF 20 BE BRA MEMC2 ; PRINT LOCATION & CONTENTS |
0310 * |
0311 * "S" DISPLAY STACK |
0312 * HEX-ASCII DISPLAY OF CURRENT STACK CONTENTS FROM |
0313 ** CURRENT STACK POINTER TO INTERNAL STACK LIMIT. |
0314 * |
0315 F8F1 17 02 A2 DISSTK LBSR PRTSP ; PRINT CURRENT STACK POINTER |
0316 F8F4 1F 32 TFR U,Y |
0317 F8F6 8E DF C0 LDX #STACK ; LOAD INTERNAL STACK AS UPPER LIMIT |
0318 F8F9 30 1F LEAX -1,X ; POINT TO CURRENT STACK |
0319 F8FB 20 05 BRA MDUMP1 ; ENTER MEMORY DUMP OF STACK CONTENTS |
0320 * |
0321 * "E" DUMP MEMORY FOR EXAMINE IN HEX AND ASCII |
0322 * AFTER CALLING 'IN2ADR' LOWER ADDRESS IN Y-REG. |
0323 * UPPER ADDRESS IN X-REG. |
0324 * IF HEX ADDRESSES ARE INVALID (V)=1. |
0325 * |
0326 F8FD 17 03 0B MEMDUMP LBSR IN2ADR ; INPUT ADDRESS BOUNDRIES |
0327 F900 29 06 BVS EDPRTN ; NEW COMMAND IF ILLEGAL HEX |
0328 F902 34 20 MDUMP1 PSHS Y ; COMPARE LOWER TO UPPER BOUNDS |
0329 F904 AC E1 CMPX ,S++ ; LOWER BOUNDS > UPPER BOUNDS? |
0330 F906 24 01 BCC AJDUMP ; IF NOT, DUMP HEX AND ASCII |
0331 F908 39 EDPRTN RTS ; |
0332 * |
0333 * ADJUST LOWER AND UPPER ADDRESS LIMITS |
0334 * TO EVEN 16 BYTE BOUNDRIES. |
0335 * |
0336 * IF LOWER ADDR = $4532 |
0337 * LOWER BOUNDS WILL BE ADJUSTED TO = $4530. |
0338 * |
0339 * IF UPPER ADDR = $4567 |
0340 * UPPER BOUNDS WILL BE ADJUSTED TO = $4570. |
0341 * |
0342 * ENTER WITH LOWER ADDRESS IN X-REG. |
0343 * -UPPER ADDRESS ON TOP OF STACK. |
0344 * |
0345 F909 1F 10 AJDUMP TFR X,D ; GET UPPER ADDR IN D-REG |
0346 F90B C3 00 10 ADDD #$10 ; ADD 16 TO UPPER ADDRESS |
0347 F90E C4 F0 ANDB #$F0 ; MASK TO EVEN 16 BYTE BOUNDRY |
0348 F910 34 06 PSHS A,B ; SAVE ON STACK AS UPPER DUMP LIMIT |
0349 F912 1F 20 TFR Y,D ; $F9A5 GET LOWER ADDRESS IN D-REG |
0350 F914 C4 F0 ANDB #$F0 ; MASK TO EVEN 16 BYTE BOUNDRY |
0351 F916 1F 01 TFR D,X ; PUT IN X-REG AS LOWER DUMP LIMIT |
0352 F918 AC E4 NXTLIN CMPX ,S ; COMPARE LOWER TO UPPER LIMIT |
0353 F91A 27 05 BEQ SKPDMP ; IF EQUAL SKIP HEX-ASCII DUMP |
0354 F91C 17 03 9A LBSR INCHEK ; CHECK FOR INPUT FROM KEYBOARD |
0355 F91F 27 03 BEQ EDUMP |
0356 F921 32 62 SKPDMP LEAS 2,S ; READJUST STACK IF NOT DUMPING |
0357 F923 39 RTS ; |
0358 * |
0359 * PRINT 16 HEX BYTES FOLLOWED BY 16 ASCII CHARACTERS |
0360 * FOR EACH LINE THROUGHOUT ADDRESS LIMITS. |
0361 * |
0362 F924 34 10 EDUMP PSHS X ; PUSH LOWER ADDR LIMIT ON STACK |
0363 F926 8E FE A1 LDX #MSG5 ; POINT TO MSG " - " |
0364 F929 17 01 EE LBSR PSTRNG ; PRINT MSG |
0365 F92C AE E4 LDX ,S ; LOAD LOWER ADDR FROM TOP OF STACK |
0366 F92E 17 03 2E LBSR OUT4H ; PRINT THE ADDRESS |
0367 F931 17 03 96 LBSR OUT2S ; 2 SPACES |
0368 F934 C6 10 LDB #$10 ; LOAD COUNT OF 16 BYTES TO DUMP |
0369 F936 A6 80 ELOOP LDA ,X+ ; GET FROM MEMORY HEX BYTE TO PRINT |
0370 F938 17 03 2C LBSR OUT2H ; OUTPUT HEX BYTE AS ASCII |
0371 F93B 17 03 8E LBSR OUT1S ; OUTPUT SPACE |
0372 F93E 5A DECB ; $F9D1 DECREMENT BYTE COUNT |
0373 F93F 26 F5 BNE ELOOP ; CONTINUE TIL 16 HEX BYTES PRINTED |
0374 * |
0375 * PRINT 16 ASCII CHARACTERS |
0376 * IF NOT PRINTABLE OR NOT VALID |
0377 * ASCII PRINT A PERIOD (.) |
0378 F941 17 03 86 LBSR OUT2S ; 2 SPACES |
0379 F944 AE E1 LDX ,S++ ; GET LOW LIMIT FRM STACK - ADJ STACK |
0380 F946 C6 10 LDB #$10 ; SET ASCII CHAR TO PRINT = 16 |
0381 F948 A6 80 EDPASC LDA ,X+ ; GET CHARACTER FROM MEMORY |
0382 F94A 81 20 CMPA #$20 ; IF LESS THAN $20, NON-PRINTABLE? |
0383 F94C 25 04 BCS PERIOD ; IF SO, PRINT PERIOD INSTEAD |
0384 F94E 81 7E CMPA #$7E ; IS IT VALID ASCII? |
0385 F950 23 02 BLS PRASC ; IF SO PRINT IT |
0386 F952 86 2E PERIOD LDA #'. ; LOAD A PERIOD (.) |
0387 F954 17 03 77 PRASC LBSR OUTCH ; PRINT ASCII CHARACTER |
0388 F957 5A DECB ; DECREMENT COUNT |
0389 F958 26 EE BNE EDPASC |
0390 F95A 20 BC BRA NXTLIN |
0391 * |
0392 ***** "B" SET BREAKPOINT ***** |
0393 * |
0394 F95C 17 02 B7 BRKPNT LBSR IN1ADR ; GET BREAKPOINT ADDRESS |
0395 F95F 29 1E BVS EXITBP ; EXIT IF INVALID HEX ADDR. |
0396 F961 8C DF C0 CMPX #STACK ; ADDRESS ILLEGAL IF >=$DFC0 |
0397 F964 24 1A BCC BPERR ; IF ERROR PRINT (?), EXIT |
0398 F966 34 10 PSHS X ; $FA82 PUSH BP ADDRESS ON STACK |
0399 F968 8E FF FF LDX #$FFFF ; LOAD DUMMY ADDR TO TEST BP TABLE |
0400 F96B 8D 55 BSR BPTEST ; TEST BP TABLE FOR FREE SPACE |
0401 F96D 35 10 PULS X ; POP BP ADDRESS FROM STACK |
0402 F96F 27 0F BEQ BPERR ; (Z) SET, OUT OF BP TABLE SPACE |
0403 F971 A6 84 LDA ,X ; GET DATA AT BREAKPOINT ADDRESS |
0404 F973 81 3F CMPA #$3F ; IS IT A SWI? |
0405 F975 27 09 BEQ BPERR ; IF SWI ALREADY, INDICATE ERROR |
0406 F977 A7 A0 STA ,Y+ ; SAVE DATA BYTE IN BP TABLE |
0407 F979 AF A4 STX ,Y ; SAVE BP ADDRESS IN BP TABLE |
0408 F97B 86 3F LDA #$3F ; LOAD A SWI ($3F) |
0409 F97D A7 84 STA ,X ; SAVE SWI AT BREAKPOINT ADDRESS |
0410 F97F 39 EXITBP RTS ; |
0411 * |
0412 * INDICATE ERROR SETTING BREAKPOINT |
0413 * |
0414 F980 17 03 49 BPERR LBSR OUT1S ; OUTPUT SPACE |
0415 F983 86 3F LDA #'? ; LOAD (?), INDICATE BREAKPOINT ERROR |
0416 F985 16 03 46 LBRA OUTCH ; PRINT "?" |
0417 * |
0418 *** "X" CLEAR OUTSTANDING BREAKPOINTS *** |
0419 * |
0420 F988 10 8E DF E3 XBKPNT LDY #BPTBL ; POINT TO BREAKPOINT TABLE |
0421 F98C C6 08 LDB #8 ; LOAD BREAKPOINT COUNTER |
0422 F98E 8D 18 XBPLP BSR RPLSWI ; REMOVE USED ENTRY IN BP TABLE |
0423 F990 5A DECB $FAAC ; DECREMENT BP COUNTER |
0424 F991 26 FB BNE XBPLP ; END OF BREAKPOINT TABLE? |
0425 F993 39 RTS |
0426 * |
0427 ***** SWI ENTRY POINT ***** |
0428 * |
0429 F994 1F 43 SWIE TFR S,U ; TRANSFER STACK TO USER POINTER |
0430 F996 AE 4A LDX 10,U ; LOAD PC FROM STACK INTO X-REG |
0431 F998 30 1F LEAX -1,X ; ADJUST ADDR DOWN 1 BYTE. |
0432 F99A 8D 26 BSR BPTEST ; FIND BREAKPOINT IN BP TABLE |
0433 F99C 27 04 BEQ REGPR ; IF FOUND, REPLACE DATA AT BP ADDR |
0434 F99E AF 4A STX 10,U ; SAVE BREAKPOINT ADDR IN STACK |
0435 F9A0 8D 06 BSR RPLSWI ; GO REPLACE SWI WITH ORIGINAL DATA |
0436 F9A2 17 02 48 REGPR LBSR REGSTR ; GO PRINT REGISTERS |
0437 * |
0438 IFD TRAOPT |
0439 LDX #0 |
0440 STX TRACNT |
0441 ENDIF TRAOPT |
0441 ENDIF TRAOPT |
0442 * |
0443 F9A5 16 FE B9 LBRA NEXTCMD ; GET NEXT COMMAND |
0444 * |
0445 F9A8 AE 21 RPLSWI LDX 1,Y ; LOAD BP ADDRESS FROM BP TABLE |
0446 F9AA 8C DF C0 CMPX #STACK ; COMPARE TO TOP AVAILABLE USER MEMORY |
0447 F9AD 24 0A BCC FFSTBL ; GO RESET TABLE ENTRY TO $FF'S |
0448 F9AF A6 84 LDA ,X ; GET DATA FROM BP ADDRESS |
0449 F9B1 81 3F CMPA #$3F ; IS IT SWI? |
0450 F9B3 26 04 BNE FFSTBL ; IF NOT, RESET TABLE ENTRY TO $FF'S |
0451 F9B5 A6 A4 LDA ,Y ; GET ORIGINAL DATA FROM BP TABLE |
0452 F9B7 A7 84 STA ,X ; $FAD3 RESTORE DATA AT BP ADDRESS |
0453 F9B9 86 FF FFSTBL LDA #$FF ; LOAD $FF IN A-ACC |
0454 F9BB A7 A0 STA ,Y+ ; RESET BREAKPOINT TABLE DATA TO $FF'S |
0455 F9BD A7 A0 STA ,Y+ ; RESET BREAKPOINT TABLE ADDR TO $FF'S |
0456 F9BF A7 A0 STA ,Y+ |
0457 F9C1 39 RTS |
0458 * |
0459 ** SEARCH BREAKPOINT TABLE FOR MATCH ** |
0460 * |
0461 F9C2 10 8E DF E3 BPTEST LDY #BPTBL ; POINT TO BREAKPOINT TABLE |
0462 F9C6 C6 08 LDB #8 ; LOAD BREAKPOINT COUNTER |
0463 F9C8 A6 A0 FNDBP LDA ,Y+ ; LOAD DATA BYTE |
0464 F9CA AC A1 CMPX ,Y++ ; COMPARE ADDRESS, IS IT SAME? |
0465 F9CC 27 04 BEQ BPADJ ; IF SO, ADJUST POINTER FOR TABLE ENTRY |
0466 F9CE 5A DECB ; IF NOT, DECREMENT BREAKPOINT COUNTER |
0467 F9CF 26 F7 BNE FNDBP ; AND LOOK FOR NEXT POSSIBLE MATCH |
0468 F9D1 39 RTS ; |
0469 * |
0470 * |
0471 F9D2 31 3D BPADJ LEAY -3,Y ; MOVE POINTER TO BEGIN OF BP ENTRY |
0472 F9D4 39 RTS |
0473 * |
0474 IFD TRAOPT |
0475 * |
0476 ** TRACE from address AAAA BB bytes |
0477 * |
0478 TRACE LBSR ALTPC1 ; SET UP NEW PC |
0479 BVS TREXIT ; ADDRESS ERROR, EXIT |
0480 LBSR OUT1S |
0481 LBSR IN1ADR ; Fetch Byte Count |
0482 BVS TREXIT ; Byte Count error, EXIT |
0483 STX TRACNT |
0484 * |
0485 LDX NMI ; Save NMI Vector |
0486 STX NMISAV |
0487 LDX #NMIE ; Set up NMI for Tracing |
0488 STX NMI |
0489 LBSR TRAINZ ; Initialise Hardware |
0490 BRA TRACEG ; Start Trace |
0491 TREXIT RTS |
0492 * |
0493 * CRA0 = 0 CA1 IRQ DISAB, CRA0 = 1 CA1 IRQ ENAB |
0494 * CRA1 = 1 CA1 Rising edge IRQ |
0495 * CRA2 = 0 TADATA = Data Direction, CRA2 = 1 TADATA = I/O Register |
0496 * CRA3 = 0 CA2 = 0 output, CRA3 = 1 CA2 = 1 |
0497 * CRA4 = 1 ] CA2 = Set/Reset output |
0498 * CRA5 = 1 ] |
0499 * CRA6 = X CA2 Input Interrupt Flag |
0500 * CRA7 = X CA1 Interrupt Flag |
0501 * |
0502 * CRB0 = 0 CB1 IRQ DISAB, CRB0 = 1 CA1 IRQ ENAB |
0503 * CRB1 = 1 CB1 Rising edge IRQ |
0504 * CRB2 = 0 TBDATA = Data Direction, CRB2 = 1 TBDATA = I/O Register |
0505 * CRB3 = 0 CB2 = 0 output, CRB3 = 1 CB2 = 1 |
0506 * CRB4 = 1 ] CB2 = Set/Reset output |
0507 * CRB5 = 1 ] |
0508 * CRB6 = X CB2 Input Interrupt Flag |
0509 * CRB7 = X CB1 Interrupt Flag |
0510 * |
0511 * |
0512 ** TRACE NMI ENTRY POINT |
0513 * |
0514 NMIE TFR S,U |
0515 LDA #$36 ; Disable Interrupt, CA2 Low |
0516 STA TACTRL |
0517 LDA TADATA ; Clear Interrupt flag by reading data port |
0518 * |
0519 LBSR REGSTR ; DUMP REGISTERS |
0520 * |
0521 LDX 10,U ; TEST IF NEXT INSTRUCTION IS A SWI |
0522 LDA ,X |
0523 CMPA #$3F |
0524 BEQ TRACEX ; EXIT ON SWI |
0525 * |
0526 LDX TRACNT ; CHECK IF TRACE COUNT EXPIRED |
0527 BEQ TRACEX ; YES, GO BACK TO THE MONITOR |
0528 LEAX -1,X ; ECREMENT TRACE COUNT |
0529 STX TRACNT |
0530 * |
0531 ** TRACE GO (RESUME SINGLE STEP) |
0532 * |
0533 TRACEG TFR U,S ; SET UP PROGRAM STACK POINTER |
0534 LDA #TRADEL ; SET UP TIMER DELAY (NUMB CYCLES FOR RTI+1) |
0535 STA TADATA |
0536 LDA #$36 ; LOAD STROBE LOW |
0537 STA TACTRL |
0538 LDA TADATA ; CLEAR INTERRUPT |
0539 LDA #$36 ; RELEASE RESET |
0540 STA TBCTRL |
0541 LDA #$3F ; RELEASE LOAD, ENABLE CA1 NMI, CA1 RISING EDGE |
0542 STA TACTRL |
0543 RTI ; GO EXECUTE INSTRUCTION |
0544 * |
0545 TRACEX LDX NMISAV ; Restore NMI vector |
0546 STX NMI |
0547 LBRA NEXTCMD ; Jump back to the command loop. |
0548 * |
0549 ** TRACE HARDWARE INITIALISATION |
0550 * |
0551 TRAINZ LDA #$32 ; SELECT DDRA, CA2 LOW, NMI DISABLED |
0552 STA TACTRL |
0553 LDA #$3A ; SELECT DDRB, CB2 HIGH, FIRQ DISABLED |
0554 STA TBCTRL |
0555 LDA #$FF ; PORTA = OUTPUT |
0556 STA TADATA |
0557 LDA #$00 ; PORTB = INPUT |
0558 STA TBDATA |
0559 LDA #$36 ; SELECT OUTPUT REGISTER A, CA2 LOW |
0560 STA TACTRL |
0561 LDA #$3E ; SELECT OUTPUT REGISTER B, CB2 HIGH |
0562 STA TBCTRL |
0563 RTS |
0564 * |
0565 ENDIF TRAOPT |
0565 ENDIF TRAOPT |
0566 IFD MFDCOPT |
0567 * |
0568 ** "U" MINI DISK BOOT |
0569 * |
0570 MINBOOT TST CMDFDC |
0571 CLR DRVFDC |
0572 LDX #$0000 |
0573 LOOP LEAX $01,X |
0574 CMPX #$0000 |
0575 BNE LOOP |
0576 LDA #$0F |
0577 STA CMDFDC |
0578 BSR DELAY |
0579 LOOP1 LDB CMDFDC |
0580 BITB #$01 |
0581 BNE LOOP1 |
0582 LDA #$01 |
0583 STA SECFDC |
0584 BSR DELAY |
0585 LDA #$8C |
0586 STA CMDFDC |
0587 BSR DELAY |
0588 LDX #$C000 |
0589 BRA LOOP3 |
0590 LOOP2 BITB #$02 |
0591 BEQ LOOP3 |
0592 LDA DATFDC |
0593 STA ,X+ |
0594 LOOP3 LDB CMDFDC |
0595 BITB #$01 |
0596 BNE LOOP2 |
0597 BITB #$2C |
0598 BEQ LOOP4 |
0599 RTS |
0600 * |
0601 LOOP4 LDX #$C000 |
0602 STX $0A,U |
0603 TFR U,S |
0604 RTI |
0605 * |
0606 DELAY LDB #$04 |
0607 LOOP5 DECB |
0608 BNE LOOP5 |
0609 RTS |
0610 ENDIF MFDCOPT |
0610 ENDIF MFDCOPT |
0611 * |
0612 IFD DMAFOPT |
0613 * |
0614 *** "D" DISK BOOT FOR DMAF2 *** |
0615 * |
0616 DBOOT LDA #$DE |
0617 STA DRVREG |
0618 LDA #$FF |
0619 STA PRIREG ; $FAF8 |
0620 STA CCREG |
0621 STA AAAREG |
0622 STA BBBREG |
0623 TST CCREG |
0624 LDA #$D8 |
0625 STA COMREG |
0626 LBSR DLY |
0627 DBOOT0 LDA COMREG |
0628 BMI DBOOT0 |
0629 LDA #$09 |
0630 STA COMREG |
0631 LBSR DLY |
0632 * |
0633 DISKWT LDA COMREG ; FETCH DRIVE STATUS |
0634 BITA #1 ; TEST BUSY BIT |
0635 BNE DISKWT ; LOOP UNTIL NOT BUSY |
0636 * |
0637 BITA #$10 |
0638 BNE DBOOT |
0639 * |
0640 LDX #$C000 ; LOGICAL ADDR. = $C000 |
0641 BSR LRA ; GET 20 BIT PHYSICAL ADDR. OF LOG. ADDR. |
0642 ORA #$10 |
0643 STA CCCREG |
0644 TFR X,D |
0645 COMA ; |
0646 COMB ; |
0647 STD ADDREG |
0648 LDX #$FEFF ; LOAD DMA BYTE COUNT = $100 |
0649 STX CNTREG ; STORE IN COUNT REGISTER |
0650 LDA #$FF ; LOAD THE CHANNEL REGISTER |
0651 STA CCREG |
0652 LDA #$FE ; SET CHANNEL 0 |
0653 STA PRIREG |
0654 LDA #1 ; SET SECTOR TO "1" |
0655 STA SECREG ; ISSUE COMMAND |
0656 LDA #$8C ; SET SINGLE SECTOR READ |
0657 STA COMREG ; ISSUE COMMAND |
0658 BSR DLY |
0659 * |
0660 * THE FOLLOWING CODE TESTS THE STATUS OF THE |
0661 * CHANNEL CONTROL REGISTER. IF "D7" IS NOT |
0662 * ZERO THEN IT WILL LOOP WAITING FOR "D7" |
0663 * TO GO TO ZERO. IF AFTER 65,536 TRIES IT |
0664 * IS STILL A ONE THE BOOT OPERATION WILL |
0665 * BE STARTED OVER FROM THE BEGINING. |
0666 * |
0667 CLRB ; |
0668 DBOOT1 PSHS B ; $FB55 |
0669 CLRB ; |
0670 DBOOT2 TST CCREG |
0671 BPL DBOOT3 |
0672 DECB ; |
0673 BNE DBOOT2 |
0674 PULS B |
0675 DECB |
0676 BNE DBOOT1 |
0677 BRA DBOOT |
0678 DBOOT3 PULS B |
0679 LDA COMREG |
0680 BITA #$1C |
0681 BEQ DBOOT4 |
0682 RTS ; |
0683 * |
0684 * |
0685 DBOOT4 LDB #$DE |
0686 STB DRVREG |
0687 LDX #$C000 |
0688 STX 10,U |
0689 TFR U,S ; $FB7B |
0690 RTI ; |
0691 ENDIF DMAFOPT |
0691 ENDIF DMAFOPT |
0692 * |
0693 IFD CF8OPT |
0694 * |
0695 * COMPACT FLASH BOOT |
0696 * |
0697 F9D5 8D 40 CFBOOT BSR WAITRDY |
0698 F9D7 86 E0 LDA #HEADLBA |
0699 F9D9 B7 E0 46 STA CF_HEAD |
0700 F9DC 8D 39 BSR WAITRDY |
0701 F9DE 86 01 LDA #FEAT8BIT |
0702 F9E0 B7 E0 41 STA CF_FEATURE |
0703 F9E3 86 EF LDA #CMDFEATURE |
0704 F9E5 B7 E0 47 STA CF_COMAND |
0705 F9E8 8D 2D BSR WAITRDY |
0706 * |
0707 * READ SECTORS FROM CF |
0708 * |
0709 F9EA 86 01 CFREAD LDA #$01 |
0710 F9EC B7 E0 42 STA CF_SECCNT |
0711 F9EF 4F CLRA |
0712 F9F0 B7 E0 43 STA CF_SECNUM |
0713 F9F3 B7 E0 44 STA CF_CYLLO |
0714 F9F6 B7 E0 45 STA CF_CYLHI |
0715 * |
0716 F9F9 86 20 LDA #CMDREAD ; IDE READ MULTIPLE |
0717 F9FB B7 E0 47 STA CF_COMAND |
0718 F9FE 8D 17 BSR WAITRDY |
0719 FA00 8E C0 00 LDX #$C000 |
0720 * |
0721 * READ LOOP |
0722 * |
0723 FA03 8D 21 RDLOOP BSR WAITDRQ |
0724 FA05 B6 E0 40 LDA CF_DATA |
0725 FA08 A7 80 STA ,X+ |
0726 FA0A 8C C2 00 CMPX #$C200 |
0727 FA0D 26 F4 BNE RDLOOP |
0728 * |
0729 FA0F 8E C0 00 LDX #$C000 |
0730 FA12 AF 4A STX $0A,U |
0731 FA14 1F 34 TFR U,S |
0732 FA16 3B RTI |
0733 * |
0734 * WAIT UNTIL READY |
0735 * |
0736 FA17 B6 E0 47 WAITRDY LDA CF_STATUS |
0737 FA1A 85 80 BITA #BUSY |
0738 FA1C 26 F9 BNE WAITRDY |
0739 FA1E B6 E0 47 LDA CF_STATUS |
0740 FA21 85 40 BITA #DRDY |
0741 FA23 27 F2 BEQ WAITRDY |
0742 FA25 39 RTS |
0743 * |
0744 * WAIT FOR DATA REQUEST |
0745 * |
0746 FA26 B6 E0 47 WAITDRQ LDA CF_STATUS |
0747 FA29 85 08 BITA #DRQ |
0748 FA2B 27 F9 BEQ WAITDRQ |
0749 FA2D 39 RTS |
0750 ENDIF CF8OPT |
0751 * |
0752 IFD IDEOPT |
0753 * |
0754 * XESS 16 BIT IDE BOOT |
0755 * |
0756 IDEBOOT LDD #AUXRESET |
0757 STD CF_AUX |
0758 LDD #AUXRSTREL |
0759 STD CF_AUX |
0760 LDD #HEADLBA |
0761 STD CF_HEAD |
0762 BSR WAITRDY |
0763 * |
0764 * READ SECTORS FROM CF |
0765 * |
0766 LDD #$01 |
0767 STD CF_SECCNT |
0768 CLRB |
0769 STD CF_SECNUM |
0770 STD CF_CYLLO |
0771 STD CF_CYLHI |
0772 * |
0773 LDB #CMDREAD ; IDE READ MULTIPLE |
0774 STD CF_COMAND |
0775 BSR WAITRDY |
0776 LDX #$C000 |
0777 * |
0778 * READ LOOP |
0779 * |
0780 RDLOOP BSR WAITDRQ |
0781 LDD CF_DATA |
0782 STB ,X+ |
0783 CMPX #$C100 |
0784 BNE RDLOOP |
0785 * |
0786 LDX #$C000 |
0787 STX $0A,U |
0788 TFR U,S |
0789 RTI |
0790 * |
0791 * WAIT UNTIL READY |
0792 * |
0793 WAITRDY LDD CF_STATUS |
0794 BITB #BUSY |
0795 BNE WAITRDY |
0796 LDD CF_STATUS |
0797 BITB #DRDY |
0798 BEQ WAITRDY |
0799 RTS |
0800 * |
0801 * WAIT FOR DATA REQUEST |
0802 * |
0803 WAITDRQ LDD CF_STATUS |
0804 BITB #DRQ |
0805 BEQ WAITDRQ |
0806 RTS |
0807 ENDIF IDEOPT |
0807 ENDIF IDEOPT |
0808 * |
0809 IFD RTCOPT |
0810 * |
0811 * CLOCK INTER FACE UTILITY |
0812 * |
0813 * TIME <Hours> <Minuits> <Seconds> |
0814 * If no argument is specified, the current time |
0815 * will be displayed. |
0816 * |
0817 * READ A REGISTER FROM THE COUNTER. |
0818 * The X Index rgister points to the register |
0819 * to be read. The Status Register is checked |
0820 * before and after the register is read before |
0821 * returning a value in accumulator A |
0822 * |
0823 RDCLK TST CLKSTA |
0824 BNE RDCLK |
0825 RDCLK1 LDA 0,X |
0826 TST CLKSTA |
0827 BNE RDCLK1 |
0828 RTS |
0829 * |
0830 * MAIN PROGRAM: |
0831 * |
0832 TIMSET LDX #COUNTR ; POINT TO TIMER |
0833 LBSR BYTE ; READ HOURS |
0834 BVS SHOWTM ; NO ARG, DISP TIME |
0835 STA HOUR,X |
0836 LBSR OUT1S |
0837 LBSR BYTE ; READ MINUITES |
0838 BVS SHOWTM |
0839 STA MINUIT,X |
0840 LBSR OUT1S |
0841 LBSR BYTE ; SECONDS. |
0842 BVS SHOWTM |
0843 STA SECOND,X |
0844 * |
0845 * DISPLAY CURRENT TIME |
0846 * |
0847 SHOWTM LBSR PCRLF |
0848 LDX #COUNTR+HOUR |
0849 LDB #3 |
0850 SHOWLP BSR RDCLK |
0851 LBSR OUT2H |
0852 LDA #': |
0853 LBSR OUTCH |
0854 LEAX -1,X |
0855 DECB |
0856 BNE SHOWLP |
0857 RTS |
0858 * |
0859 * INITIATE CLOCK. |
0860 * MASK INTERRUPTS. |
0861 * |
0862 CLKINZ CLR CINTCR ; MASK ALL INTERRUPTS |
0863 TST CINTSR ; CLEAR ANY INTERRUPTS |
0864 RTS |
0865 ENDIF RTCOPT |
0865 ENDIF RTCOPT |
0866 IFD DATOPT |
0867 * |
0868 ***** LRA LOAD REAL ADDRESS ***** |
0869 * |
0870 * THE FOLLOWING CODE LOADS THE 20-BIT |
0871 * PHYSICAL ADDRESS OF A MEMORY BYTE |
0872 * INTO THE "A" AND "X" REGISTERS. THIS |
0873 * ROUTINE IS ENTERED WITH THE LOGICAL |
0874 * ADDRESS OF A MEMORY BYTE IN THE "IX" |
0875 * REGISTER. EXIT IS MADE WITH THE HIGH- |
0876 * ORDER FOUR BITS OF THE 20-BIT PHYSICAL |
0877 * ADDRESS IN THE "A" REGISTER, AND THE |
0878 * LOW-ORDER 16-BITS OF THE 20-BIT |
0879 * PHYSICAL ADDRESS IN THE "IX" REGISTER. |
0880 * ALL OTHER REGISTERS ARE PRESERVED. |
0881 * THIS ROUTINE IS REQUIRED SINCE THE |
0882 * DMAF1 AND DMAF2 DISK CONTROLLERS MUST |
0883 * PRESENT PHYSICAL ADDRESSES ON THE |
0884 * SYSTEM BUS. |
0885 * |
0886 FA2E 34 36 LRA PSHS A,B,X,Y ; PUSH REGISTERS ON STACK |
0887 FA30 A6 62 LDA 2,S ; GET MSB LOGICAL ADDR FRM X REG ON STACK |
0888 FA32 44 LSRA ; |
0889 FA33 44 LSRA ; ADJ FOR INDEXED INTO |
0890 FA34 44 LSRA ; CORRESPONDING LOCATION |
0891 FA35 44 LSRA ; IN LRA TABLE |
0892 FA36 10 8E DF D0 LDY #LRARAM ; LOAD LRA TABLE BASE ADDRESS |
0893 FA3A E6 A6 LDB A,Y ; GET PHYSICAL ADDR. DATA FROM LRA TABLE |
0894 FA3C 54 LSRB ; ADJ. REAL ADDR. TO REFLECT EXTENDED |
0895 FA3D 54 LSRB ; PHYSICAL ADDRESS. |
0896 FA3E 54 LSRB ; EXTENDED MS 4-BITS ARE RETURNED |
0897 FA3F 54 LSRB ; IN THE "A" ACCUMULATOR |
0898 FA40 E7 E4 STB ,S ; MS 4 BITS IN A ACCUM. STORED ON STACK |
0899 FA42 E6 A6 LDB A,Y ; LOAD REAL ADDRESS DATA FROM LRA TABLE |
0900 FA44 53 COMB ; COMP TO ADJ FOR PHYSICAL ADDR. IN X REG |
0901 FA45 58 ASLB ; ADJ DATA FOR RELOCATION IN X REG |
0902 FA46 58 ASLB ; |
0903 FA47 58 ASLB ; $FB97 |
0904 FA48 58 ASLB ; |
0905 FA49 A6 62 LDA 2,S ; GET MS BYTE OF LOGICAL ADDR. |
0906 FA4B 84 0F ANDA #$0F ; MASK MS NIBBLE OF LOGICAL ADDRESS |
0907 FA4D A7 62 STA 2,S ; SAVE IT IN X REG ON STACK |
0908 FA4F EA 62 ORB 2,S ; SET MS BYTE IN X REG TO ADJ PHY ADDR. |
0909 * |
0910 * PLUS LS NIBBLE OF LOGICAL ADDRESS |
0911 * |
0912 FA51 E7 62 STB 2,S ; SAVE AS LS 16 BITS OF PHY ADDR IN X REG ON STACK |
0913 FA53 35 B6 PULS A,B,X,Y,PC ; POP REGS. FROM STACK |
0914 ENDIF DATOPT |
0915 * |
0916 * DELAY LOOP |
0917 * |
0918 FA55 34 04 DLY PSHS B ; SAVE CONTENTS OF "B" |
0919 FA57 C6 20 LDB #$20 ; GET LOOP DELAY VALUE |
0920 FA59 5A SUB1 DECB ; SUBTRACT ONE FROM VALUE |
0921 FA5A 26 FD BNE SUB1 ; LOOP UNTIL ZERO |
0922 FA5C 35 84 PULS B,PC ; RESTORE CONTENTS OF "B" |
0923 * RTS ; |
0924 * |
0925 ***** "L" LOAD MIKBUG TAPE ***** |
0926 * |
0927 FA5E BD FC E7 LOAD JSR ACINIZ |
0928 FA61 86 11 LDA #$11 ; LOAD 'DC1' CASS. READ ON CODE |
0929 FA63 17 02 68 LBSR OUTCH ; OUTPUT IT TO TERMINAL PORT |
0930 FA66 7F DF E2 CLR ECHO ; TURN OFF ECHO FLAG |
0931 FA69 17 02 2A LOAD1 LBSR ECHON ; INPUT 8 BIT BYTE WITH NO ECHO |
0932 FA6C 81 53 LOAD2 CMPA #'S ; IS IT AN "S", START CHARACTER ? |
0933 FA6E 26 F9 BNE LOAD1 ; IF NOT, DISCARD AND GET NEXT CHAR. |
0934 FA70 17 02 23 LBSR ECHON |
0935 FA73 81 39 CMPA #'9 ; IS IT A "9" , END OF FILE CHAR ? |
0936 FA75 27 3D BEQ LOAD21 ; IF SO, EXIT LOAD |
0937 FA77 81 31 CMPA #'1 ; IS IT A "1" , FILE LOAD CHAR ? |
0938 FA79 26 F1 BNE LOAD2 ; IF NOT, LOOK FOR START CHAR. |
0939 FA7B 17 01 A8 LBSR BYTE ; INPUT BYTE COUNT |
0940 FA7E 34 02 PSHS A ; PUSH COUNT ON STACK |
0941 FA80 29 26 BVS LODERR ; (V) C-CODE SET, ILLEGAL HEX |
0942 FA82 17 01 91 LBSR IN1ADR ; INPUT LOAD ADDRESS |
0943 FA85 29 21 BVS LODERR ; (V) C-CODE SET, ADDR NOT HEX |
0944 FA87 34 10 PSHS X ; PUSH ADDR ON STACK |
0945 FA89 E6 E0 LDB ,S+ ; LOAD MSB OF ADDR AS CHECKSUM BYTE |
0946 FA8B EB E0 ADDB ,S+ ; ADD LSB OF ADDR TO CHECKSUM |
0947 FA8D EB E4 ADDB ,S ; ADD BYTE COUNT BYTE TO CHECKSUM |
0948 FA8F 6A E4 DEC ,S ; $FC37 DECREMENT BYTE COUNT 2 TO BYPASS |
0949 FA91 6A E4 DEC ,S ; ADDRESS BYTES. |
0950 FA93 34 04 LOAD10 PSHS B ; PUSH CHECKSUM ON STACK |
0951 FA95 17 01 8E LBSR BYTE ; INPUT DATA BYTE (2 HEX CHAR) |
0952 FA98 35 04 PULS B ; POP CHECKSUM FROM STACK |
0953 FA9A 29 0C BVS LODERR ; (V) SET, DATA BYTE NOT HEX |
0954 FA9C 34 02 PSHS A ; PUSH DATA BYTE ON STACK |
0955 FA9E EB E0 ADDB ,S+ ; ADD DATA TO CHECKSUM, AUTO INC STACK |
0956 FAA0 6A E4 DEC ,S ; DECREMENT BYTE COUNT 1 |
0957 FAA2 27 05 BEQ LOAD16 ; IF BYTE COUNT ZERO, TEST CHECKSUM |
0958 FAA4 A7 80 STA ,X+ ; SAVE DATA BYTE IN MEMORY |
0959 FAA6 20 EB BRA LOAD10 ; GET NEXT DATA BYTE |
0960 FAA8 5F LODERR CLRB ; ERROR CONDITION, ZERO CHECKSUM ; |
0961 FAA9 35 02 LOAD16 PULS A ; ADJUST STACK (REMOVE BYTE COUNT) |
0962 FAAB C1 FF CMPB #$FF ; CHECKSUM OK? |
0963 FAAD 27 BA BEQ LOAD1 ; IF SO, LOAD NEXT LINE |
0964 FAAF 86 3F LDA #'? ; LOAD (?) ERROR INDICATOR |
0965 FAB1 17 02 1A LBSR OUTCH ; OUTPUT IT TO TERMINAL |
0966 FAB4 73 DF E2 LOAD21 COM ECHO ; TURN ECHO ON |
0967 FAB7 86 13 LDA #$13 ; $FC5F LOAD 'DC3' CASS. READ OFF CODE |
0968 FAB9 16 02 12 LBRA OUTCH ; OUTPUT IT |
0969 * |
0970 ***** "P" PUNCH MIKBUG TAPE ***** |
0971 * |
0972 FABC 6F E2 PUNCH CLR ,-S ; CLEAR RESERVED BYTE ON STACK |
0973 FABE 17 01 4A LBSR IN2ADR ; GET BEGIN AND END ADDRESS |
0974 FAC1 34 30 PSHS X,Y ; SAVE ADDRESSES ON STACK |
0975 FAC3 29 4D BVS PUNEXT ; (V) C-CODE SET, EXIT PUNCH |
0976 FAC5 AC 62 CMPX 2,S ; COMPARE BEGIN TO END ADDR |
0977 FAC7 25 49 BCS PUNEXT ; IF BEGIN GREATER THAN END, EXIT PUNCH |
0978 FAC9 30 01 LEAX 1,X ; INCREMENT END ADDRESS |
0979 FACB AF E4 STX ,S ; STORE END ADDR ON STACK |
0980 FACD BD FC E7 JSR ACINIZ |
0981 FAD0 86 12 LDA #$12 ; LOAD 'DC2' PUNCH ON CODE |
0982 FAD2 17 01 F9 LBSR OUTCH ; OUTPUT IT TO TERMINAL |
0983 FAD5 EC E4 PUNCH2 LDD ,S ; LOAD END ADDR IN D-ACC |
0984 FAD7 A3 62 SUBD 2,S ; SUBTRACT BEGIN FROM END |
0985 FAD9 27 06 BEQ PUNCH3 ; SAME, PUNCH 32 BYTES DEFAULT |
0986 FADB 10 83 00 20 CMPD #$20 ; LESS THAN 32 BYTES? |
0987 FADF 23 02 BLS PUNCH4 ; PUNCH THAT MANY BYTES |
0988 FAE1 C6 20 PUNCH3 LDB #$20 ; LOAD BYTE COUNT OF 32. |
0989 FAE3 E7 64 PUNCH4 STB 4,S ; STORE ON STACK AS BYTE COUNT |
0990 FAE5 8E FE E2 LDX #MSG20 ; POINT TO MSG "S1" |
0991 FAE8 17 00 2F LBSR PSTRNG ; PRINT MSG |
0992 FAEB CB 03 ADDB #3 ; ADD 3 BYTES TO BYTE COUNT |
0993 FAED 1F 98 TFR B,A ; GET BYTE COUNT IN A-ACC TO PUNCH |
0994 FAEF 17 01 75 LBSR OUT2H ; OUTPUT BYTE COUNT |
0995 FAF2 AE 62 LDX 2,S ; LOAD BEGIN ADDRESS |
0996 FAF4 17 01 68 LBSR OUT4H ; PUNCH ADDRESS |
0997 FAF7 EB 62 ADDB 2,S ; ADD ADDR MSB TO CHECKSUM |
0998 FAF9 EB 63 ADDB 3,S ; ADD ADDR LSB TO CHECKSUM |
0999 FAFB EB 84 PUNCHL ADDB ,X ; ADD DATA BYTE TO CHECKSUM |
1000 FAFD A6 80 LDA ,X+ ; LOAD DATA BYTE TO PUNCH |
1001 FAFF 17 01 65 LBSR OUT2H ; OUTPUT DATA BYTE |
1002 FB02 6A 64 DEC 4,S ; DECREMENT BYTE COUNT |
1003 FB04 26 F5 BNE PUNCHL ; NOT DONE, PUNCH NEXT BYTE |
1004 FB06 53 COMB 1's ; COMPLIMENT CHECKSUM BYTE |
1005 FB07 1F 98 TFR B,A ; GET IT IN A-ACC TO PUNCH |
1006 FB09 17 01 5B LBSR OUT2H ; OUTPUT CHECKSUM BYTE |
1007 FB0C AF 62 STX 2,S ; SAVE X-REG IN STACK AS NEW PUNCH ADDR |
1008 FB0E AC E4 CMPX ,S ; COMPARE IT TO END ADDR |
1009 FB10 26 C3 BNE PUNCH2 ; $FCB5 PUNCH NOT DONE, CONT. |
1010 FB12 86 14 PUNEXT LDA #$14 ; LOAD 'DC4' PUNCH OFF CODE |
1011 FB14 17 01 B7 LBSR OUTCH ; OUTPUT IT |
1012 FB17 32 65 LEAS 5,S ; READJUST STACK POINTER |
1013 FB19 39 RTS ; |
1014 * |
1015 * PRINT STRING PRECEEDED BY A CR & LF. |
1016 * |
1017 FB1A 8D 02 PSTRNG BSR PCRLF ; PRINT CR/LF |
1018 FB1C 20 71 BRA PDATA ; PRINT STRING POINTED TO BY IX |
1019 * |
1020 * PCRLF |
1021 * |
1022 FB1E 34 10 PCRLF PSHS X ; SAVE IX |
1023 FB20 8E FE 93 LDX #MSG2+1 ; POINT TO MSG CR/LF + 3 NULS |
1024 FB23 17 00 69 LBSR PDATA ; PRINT MSG |
1025 FB26 35 90 PULS X,PC ; RESTORE IX & RETURN |
1026 * |
1027 * LONG BRANCHES TO COMMON ROUTINES |
1028 * |
1029 FB28 16 01 A1 JOUT1S LBRA OUT1S |
1030 FB2B 16 00 F8 JBYTE LBRA BYTE |
1031 FB2E 16 00 E5 JIN1ADR LBRA IN1ADR |
1032 * |
1033 * ALTER "PC" PROGRAM COUNTER |
1034 * |
1035 FB31 17 00 91 ALTRPC LBSR PRTPC ; $FCF5 PRINT MSG " PC = " |
1036 FB34 8D F2 ALTPC1 BSR JOUT1S ; OUTPUT SPACE |
1037 FB36 8D F6 BSR JIN1ADR ; GET NEW CONTENTS FOR "PC" |
1038 FB38 29 02 BVS ALTPCD ; EXIT IF INVALID HEX |
1039 FB3A AF 4A STX 10,U ; POKE IN NEW CONTENTS |
1040 FB3C 39 ALTPCD RTS ; |
1041 * |
1042 * ALTER "U" USER STACK POINTER |
1043 * |
1044 FB3D 8D 61 ALTRU BSR PRTUS ; $FCCA PRINT MSG " US = " |
1045 FB3F 8D E7 BSR JOUT1S ; OUTPUT SPACE |
1046 FB41 8D EB BSR JIN1ADR ; GET NEW CONTENTS FOR "US" |
1047 FB43 29 02 BVS ALTUD ; EXIT IF INVALID HEX |
1048 FB45 AF 48 STX 8,U ; POKE IN NEW CONTENTS |
1049 FB47 39 ALTUD RTS ; |
1050 * |
1051 * ALTER "Y" INDEX REGISTER |
1052 * |
1053 FB48 8D 72 ALTRY BSR PRTIY ; PRINT MSG " IY = " |
1054 FB4A 8D DC BSR JOUT1S ; OUTPUT SPACE |
1055 FB4C 8D E0 BSR JIN1ADR ; GET NEW CONTENTS FOR "IY" |
1056 FB4E 29 02 BVS ALTYD ; EXIT IF INVALID HEX |
1057 FB50 AF 46 STX 6,U ; $F8F0 POKE IN NEW CONTENTS |
1058 FB52 39 ALTYD RTS ; |
1059 * |
1060 * ALTER "X" INDEX REGISTER |
1061 * |
1062 FB53 8D 5E ALTRX BSR PRTIX ; $FCE0 PRINT MSG " IX = " |
1063 FB55 8D D1 BSR JOUT1S ; OUTPUT SPACE |
1064 FB57 8D D5 BSR JIN1ADR |
1065 FB59 29 02 BVS ALTXD |
1066 FB5B AF 44 STX 4,U |
1067 FB5D 39 ALTXD RTS ; |
1068 * |
1069 * ALTER "DP" DIRECT PAGE REGISTER |
1070 * |
1071 FB5E 8D 49 ALTRDP BSR PRTDP ; $FCD5 PRINT MSG " DP = " |
1072 FB60 8D C6 BSR JOUT1S ; OUTPUT SPACE |
1073 FB62 8D C7 BSR JBYTE ; INPUT BYTE (2 HEX CHAR) |
1074 FB64 29 02 BVS ALTDPD |
1075 FB66 A7 43 STA 3,U |
1076 FB68 39 ALTDPD RTS ; |
1077 * |
1078 * ALTER "B" ACCUMULATOR |
1079 * |
1080 FB69 8D 6C ALTRB BSR PRTB ; $FD09 PRINT MSG " B = " |
1081 FB6B 8D BB BSR JOUT1S ; OUTPUT SPACE |
1082 FB6D 8D BC BSR JBYTE ; INPUT BYTE (2 HEX CHAR) |
1083 FB6F 29 02 BVS ALTBD |
1084 FB71 A7 42 STA 2,U |
1085 FB73 39 ALTBD RTS ; $F91C |
1086 * |
1087 * ALTER "A" ACCUMULATOR |
1088 * |
1089 FB74 8D 58 ALTRA BSR PRTA ; $FCFF RINT MSG " A = " |
1090 FB76 8D B0 BSR JOUT1S ; OUTPUT SPACE |
1091 FB78 8D B1 BSR JBYTE ; INPUT BYTE (2 HEX CHAR) |
1092 FB7A 29 02 BVS ALTAD |
1093 FB7C A7 41 STA 1,U |
1094 FB7E 39 ALTAD RTS ; |
1095 * |
1096 * ALTER "CC" REGISTER |
1097 * |
1098 FB7F 8D 5F ALTRCC BSR PRTCC ; $FD13 PRINT MSG " CC: " |
1099 FB81 8D A5 BSR JOUT1S ; OUTPUT SPACE |
1100 FB83 8D A6 BSR JBYTE ; INPUT BYTE (2 HEX CHAR) |
1101 FB85 29 04 BVS ALTCCD |
1102 FB87 8A 80 ORA #$80 ; SETS "E" FLAG IN PRINT LIST |
1103 FB89 A7 C4 STA ,U |
1104 FB8B 39 ALTCCD RTS ; |
1105 * |
1106 * PDATA |
1107 * |
1108 FB8C 17 01 3F PRINT LBSR OUTCH |
1109 FB8F A6 80 PDATA LDA ,X+ ; GET 1st CHAR. TO PRINT |
1110 FB91 81 04 CMPA #4 ; IS IT EOT? |
1111 FB93 26 F7 BNE PRINT ; IF NOT EOT PRINT IT |
1112 FB95 39 RTS ; |
1113 * |
1114 * PRINT REGISTERS |
1115 * |
1116 FB96 8E FE A5 PRTSP LDX #MSG10 ; POINT TO MSG "SP=" |
1117 FB99 8D F4 BSR PDATA ; PRINT MSG |
1118 FB9B 1F 31 TFR U,X |
1119 FB9D 16 00 BF JOUT4H LBRA OUT4H |
1120 * |
1121 FBA0 8E FE B1 PRTUS LDX #MSG12 ; POINT TO MSG "US=" |
1122 FBA3 8D EA BSR PDATA ; PRINT MSG |
1123 FBA5 AE 48 LDX 8,U |
1124 FBA7 20 F4 BRA JOUT4H |
1125 * |
1126 FBA9 8E FE C3 PRTDP LDX #MSG15 ; POINT TO MSG "DP=" |
1127 FBAC 8D E1 BSR PDATA ; PRINT MSG |
1128 FBAE A6 43 LDA 3,U |
1129 FBB0 16 00 B4 JOUT2H LBRA OUT2H ; OUTPUT HEX BYTE AS ASCII |
1130 * |
1131 FBB3 8E FE BD PRTIX LDX #MSG14 ; POINT TO MSG "IX=" |
1132 FBB6 8D D7 BSR PDATA ; PRINT MSG |
1133 FBB8 AE 44 LDX 4,U ; $FCE6 |
1134 FBBA 20 E1 BRA JOUT4H |
1135 * |
1136 FBBC 8E FE B7 PRTIY LDX #MSG13 ; POINT TO MSG "IY=" |
1137 FBBF 8D CE BSR PDATA ; PRINT MSG |
1138 FBC1 AE 46 LDX 6,U |
1139 FBC3 20 D8 BRA JOUT4H |
1140 * |
1141 FBC5 8E FE AB PRTPC LDX #MSG11 ; POINT TO MSG "PC=" |
1142 FBC8 8D C5 BSR PDATA ; PRINT MSG |
1143 FBCA AE 4A LDX 10,U |
1144 FBCC 20 CF BRA JOUT4H |
1145 * |
1146 FBCE 8E FE C9 PRTA LDX #MSG16 ; POINT TO MSG "A=" |
1147 FBD1 8D BC BSR PDATA ; PRINT MSG |
1148 FBD3 A6 41 LDA 1,U |
1149 FBD5 20 D9 BRA JOUT2H ; OUTPUT HEX BYTE AS ASCII |
1150 * |
1151 FBD7 8E FE CE PRTB LDX #MSG17 ; POINT TO MSG "B=" |
1152 FBDA 8D B3 BSR PDATA ; PRINT MSG |
1153 FBDC A6 42 LDA 2,U |
1154 FBDE 20 D0 BRA JOUT2H ; OUTPUT HEX BYTE AS ASCII |
1155 * |
1156 FBE0 8E FE D3 PRTCC LDX #MSG18 ; POINT TO MSG "CC:" |
1157 FBE3 8D AA BSR PDATA ; PRINT MSG |
1158 FBE5 A6 C4 LDA ,U |
1159 FBE7 8E FE DA LDX #MSG19 ; POINT TO MSG "EFHINZVC" |
1160 FBEA 16 00 90 LBRA BIASCI ; OUTPUT IN BINARY/ASCII FORMAT |
1161 * |
1162 * "R" DISPLAY REGISTERS |
1163 * |
1164 FBED 8E FE A1 REGSTR LDX #MSG5 ; POINT TO MSG " - " |
1165 FBF0 17 FF 27 LBSR PSTRNG ; PRINT MSG |
1166 FBF3 8D A1 BSR PRTSP ; $FCBF |
1167 FBF5 8D A9 BSR PRTUS ; $FCCA |
1168 FBF7 8D B0 BSR PRTDP ; $FCD5 |
1169 FBF9 8D B8 BSR PRTIX ; $FCE0 |
1170 FBFB 8D BF BSR PRTIY ; $FCEB |
1171 FBFD 8E FE A1 LDX #MSG5 ; POINT TO MSG " - " |
1172 FC00 17 FF 17 LBSR PSTRNG ; PRINT MSG |
1173 FC03 8D C0 BSR PRTPC ; $FCF5 |
1174 FC05 8D C7 BSR PRTA ; $FCFF |
1175 FC07 8D CE BSR PRTB ; $FD09 |
1176 FC09 20 D5 BRA PRTCC ; $FD13 |
1177 * |
1178 * THE FOLLOWING ROUTINE LOOPS WAITING FOR THE |
1179 * OPERATOR TO INPUT TWO VALID HEX ADDRESSES. |
1180 * THE FIRST ADDRESS INPUT IS RETURNED IN "IY". |
1181 * THE SECOND IS RETURNED IN "IX". THE "V" BIT |
1182 * IN THE C-CODE REG. IS SET IF AN INVALID HEX |
1183 * ADDRESS IS INPUT. |
1184 * |
1185 FC0B 8D 09 IN2ADR BSR IN1ADR ; GET FIRST ADDRESS |
1186 FC0D 29 4D BVS NOTHEX ; EXIT IF NOT VALID HEX |
1187 FC0F 1F 12 TFR X,Y ; SAVE FIRST ADDR. IN "IY" |
1188 FC11 86 2D LDA #'- |
1189 FC13 17 00 B8 LBSR OUTCH ; PRINT " - " |
1190 * |
1191 * THE FOLLOWING ROUTINE LOOPS WAITING FOR THE |
1192 * OPERATOR TO INPUT ONE VALID HEX ADDRESS. THE |
1193 * ADDRESS IS RETURNED IN THE "X" REGISTER. |
1194 * |
1195 FC16 8D 0E IN1ADR BSR BYTE ; INPUT BYTE (2 HEX CHAR) |
1196 FC18 29 42 BVS NOTHEX ; EXIT IF NOT VALID HEX |
1197 FC1A 1F 01 TFR D,X |
1198 FC1C 8D 08 BSR BYTE ; INPUT BYTE (2 HEX CHAR) |
1199 FC1E 29 3C BVS NOTHEX |
1200 FC20 34 10 PSHS X |
1201 FC22 A7 61 STA 1,S |
1202 FC24 35 90 PULS X,PC |
1203 * |
1204 ***** INPUT BYTE (2 HEX CHAR.) ***** |
1205 * |
1206 FC26 8D 11 BYTE BSR INHEX ; GET HEX LEFT |
1207 FC28 29 32 BVS NOTHEX ; EXIT IF NOT VALID HEX |
1208 FC2A 48 ASLA ; |
1209 FC2B 48 ASLA ; |
1210 FC2C 48 ASLA ; SHIFT INTO LEFT NIBBLE |
1211 FC2D 48 ASLA ; |
1212 FC2E 1F 89 TFR A,B ; PUT HEXL IN "B" |
1213 FC30 8D 07 BSR INHEX ; GET HEX RIGHT |
1214 FC32 29 28 BVS NOTHEX ; EXIT IF NOT VALID HEX |
1215 FC34 34 04 PSHS B ; PUSH HEXL ON STACK |
1216 FC36 AB E0 ADDA ,S+ ; ADD HEXL TO HEXR AND ADJ. STK |
1217 FC38 39 RTS ; RETURN WITH HEX L&R IN "A" |
1218 * |
1219 * |
1220 FC39 8D 5B INHEX BSR ECHON ; INPUT ASCII CHAR. |
1221 FC3B 81 30 CMPA #'0 ; IS IT > OR = "0" ? |
1222 FC3D 25 1D BCS NOTHEX ; IF LESS IT AIN'T HEX |
1223 FC3F 81 39 CMPA #'9 ; IS IT < OR = "9" ? |
1224 FC41 22 03 BHI INHEXA ; IF > MAYBE IT'S ALPHA |
1225 FC43 80 30 SUBA #$30 ; ASCII ADJ. NUMERIC |
1226 FC45 39 RTS ; |
1227 * |
1228 * |
1229 FC46 81 41 INHEXA CMPA #'A ; IS IT > OR = "A" |
1230 FC48 25 12 BCS NOTHEX ; IF LESS IT AIN'T HEX |
1231 FC4A 81 46 CMPA #'F ; IS IT < OR = "F" ? |
1232 FC4C 22 03 BHI INHEXL ; IF > IT AIN'T HEX |
1233 FC4E 80 37 SUBA #'A-10 ; ($37) ASCII ADJ. ALPHA |
1234 FC50 39 RTS ; |
1235 * |
1236 FC51 81 61 INHEXL CMPA #'a ; IS IT > OR = "a" |
1237 FC53 25 07 BCS NOTHEX ; IF LESS IT AIN'T HEX |
1238 FC55 81 66 CMPA #'f ; IS IT < "f" |
1239 FC57 22 03 BHI NOTHEX ; IF > IT AIN'T HEX |
1240 FC59 80 57 SUBA #'a-10 ; ($57) ADJUST TO LOWER CASE |
1241 FC5B 39 RTS ; |
1242 * |
1243 * |
1244 FC5C 1A 02 NOTHEX ORCC #2 ; SET (V) FLAG IN C-CODES REGISTER |
1245 FC5E 39 RTS ; |
1246 * |
1247 * |
1248 FC5F 34 10 OUT4H PSHS X ; PUSH X-REG. ON THE STACK |
1249 FC61 35 02 PULS A ; POP MS BYTE OF X-REG INTO A-ACC. |
1250 FC63 8D 02 BSR OUTHL ; OUTPUT HEX LEFT |
1251 FC65 35 02 PULS A ; POP LS BYTE OF X-REG INTO A-ACC. |
1252 FC67 OUTHL EQU * |
1253 FC67 34 02 OUT2H PSHS A ; SAVE IT BACK ON STACK |
1254 FC69 44 LSRA ; CONVERT UPPER HEX NIBBLE TO ASCII |
1255 FC6A 44 LSRA ; |
1256 FC6B 44 LSRA ; |
1257 FC6C 44 LSRA ; |
1258 FC6D 8D 04 BSR XASCII ; PRINT HEX NIBBLE AS ASCII |
1259 FC6F 35 02 OUTHR PULS A ; CONVERT LOWER HEX NIBBLE TO ASCII |
1260 FC71 84 0F ANDA #$0F ; STRIP LEFT NIBBLE |
1261 FC73 8B 30 XASCII ADDA #$30 ; ASCII ADJ |
1262 FC75 81 39 CMPA #$39 ; IS IT < OR = "9" ? |
1263 FC77 2F 02 BLE OUTC ; IF LESS, OUTPUT IT |
1264 FC79 8B 07 ADDA #7 ; IF > MAKE ASCII LETTER |
1265 FC7B 20 51 OUTC BRA OUTCH ; OUTPUT CHAR |
1266 * |
1267 * BINARY / ASCII --- THIS ROUTINE |
1268 * OUTPUTS A BYTE IN ENHANCED |
1269 * BINARY FORMAT. THE ENHANCEMENT |
1270 * IS DONE BY SUBSTITUTING ASCII |
1271 * LETTERS FOR THE ONES IN THE BYTE. |
1272 * THE ASCII ENHANCEMENT LETTERS |
1273 * ARE OBTAINED FROM THE STRING |
1274 * POINTED TO BY THE INDEX REG. "X". |
1275 * |
1276 FC7D 34 02 BIASCI PSHS A ; SAVE "A" ON STACK |
1277 FC7F C6 08 LDB #8 ; PRESET LOOP# TO BITS PER BYTE |
1278 FC81 A6 80 OUTBA LDA ,X+ ; GET LETTER FROM STRING |
1279 FC83 68 E4 ASL ,S ; TEST BYTE FOR "1" IN B7 |
1280 FC85 25 02 BCS PRTBA ; IF ONE PRINT LETTER |
1281 FC87 86 2D LDA #'- ; IF ZERO PRINT "-" |
1282 FC89 8D 43 PRTBA BSR OUTCH ; PRINT IT |
1283 FC8B 8D 3F BSR OUT1S ; PRINT SPACE |
1284 FC8D 5A DECB ; SUB 1 FROM #BITS YET TO PRINT |
1285 FC8E 26 F1 BNE OUTBA |
1286 FC90 35 82 PULS A,PC |
1287 * |
1288 IFD EXTOPT |
1289 * |
1290 * EXTENDED USER COMMANDS |
1291 * |
1292 FC92 6E 9F F0 00 USRCMD JMP [MONEXT+EXTCMD] |
1293 ENDIF EXTOPT |
1294 * |
1295 * |
1296 FC96 7D DF E2 ECHON TST ECHO ; IS ECHO REQUIRED ? |
1297 FC99 27 06 BEQ INCH ; ECHO NOT REQ. IF CLEAR |
1298 * |
1299 * INCHE |
1300 * |
1301 * GETS CHARACTER FROM TERMINAL AND |
1302 * ECHOS SAME. THE CHARACTER IS RETURNED |
1303 * IN THE "A" ACCUMULATOR WITH THE PARITY |
1304 * BIT MASKED OFF. ALL OTHER REGISTERS |
1305 * ARE PRESERVED. |
1306 * |
1307 FC9B 8D 04 INCHE BSR INCH ; GET CHAR FROM TERMINAL |
1308 FC9D 84 7F ANDA #$7F ; STRIP PARITY FROM CHAR. |
1309 FC9F 20 2D BRA OUTCH ; ECHO CHAR TO TERMINAL |
1310 * |
1311 * INCH |
1312 * |
1313 * GET CHARACTER FROM TERMINAL. RETURN |
1314 * CHARACTER IN "A" ACCUMULATOR AND PRESERVE |
1315 * ALL OTHER REGISTERS. THE INPUT CHARACTER |
1316 * IS 8 BITS AND IS NOT ECHOED. |
1317 * |
1318 * |
1319 FCA1 34 10 INCH PSHS X ; SAVE IX |
1320 IFD HFCOPT |
1321 LDA #$11 ; SET RTS* LOW, REQUEST FAR END TO TX |
1322 STA [CPORT] |
1323 ENDIF HFCOPT |
1323 ENDIF HFCOPT |
1324 FCA3 BE DF E0 GETSTA LDX CPORT ; POINT TO TERMINAL PORT |
1325 FCA6 A6 84 LDA ,X ; FETCH PORT STATUS |
1326 FCA8 85 01 BITA #1 ; TEST READY BIT, RDRF ? |
1327 IFD PS2OPT |
1328 FCAA 26 09 BNE GETST1 |
1329 FCAC 8E E0 20 LDX #PS2KBD |
1330 FCAF A6 84 LDA ,X |
1331 FCB1 85 01 BITA #1 |
1332 ENDIF PS2OPT |
1333 FCB3 27 EE BEQ GETSTA ; IF NOT RDY, THEN TRY AGAIN |
1334 FCB5 GETST1 EQU * |
1335 IFD HFCOPT |
1336 LDA #$51 ; SET RTS* HIGH, STOP FAR END FROM TXING, UNTIL NEXT INPUT |
1337 STA [CPORT] |
1338 ENDIF HFCOPT |
1338 ENDIF HFCOPT |
1339 FCB5 A6 01 LDA 1,X ; FETCH CHAR |
1340 FCB7 35 90 PULS X,PC ; RESTORE IX |
1341 * |
1342 * INCHEK |
1343 * |
1344 * CHECK FOR A CHARACTER AVAILABLE FROM |
1345 * THE TERMINAL. THE SERIAL PORT IS CHECKED |
1346 * FOR READ READY. ALL REGISTERS ARE |
1347 * PRESERVED, AND THE "Z" BIT WILL BE |
1348 * CLEAR IF A CHARACTER CAN BE READ. |
1349 * |
1350 * |
1351 FCB9 34 02 INCHEK PSHS A ; SAVE A ACCUM |
1352 IFD HFCOPT |
1353 LDA #$11 ; SET RTS* LOW, REQUEST FAR END TO TX |
1354 STA [CPORT] |
1355 ENDIF HFCOPT |
1355 ENDIF HFCOPT |
1356 FCBB A6 9F DF E0 LDA [CPORT] ; FETCH PORT STATUS |
1357 FCBF 85 01 BITA #1 ; TEST READY BIT, RDRF ? |
1358 IFD PS2OPT |
1359 FCC1 26 05 BNE INCHEK1 |
1360 FCC3 B6 E0 20 LDA PS2KBD |
1361 FCC6 85 01 BITA #1 ; TEST READY BIT< RDRF ? |
1362 ENDIF PS2OPT |
1363 FCC8 35 82 INCHEK1 PULS A,PC ; RESTORE A ACCUM. |
1364 * |
1365 FCCA 8D 00 OUT2S BSR OUT1S ; OUTPUT 2 SPACES |
1366 FCCC 86 20 OUT1S LDA #$20 ; OUTPUT 1 SPACE |
1367 * |
1368 * |
1369 * OUTCH |
1370 * |
1371 * OUTPUT CHARACTER TO TERMINAL. |
1372 * THE CHAR. TO BE OUTPUT IS |
1373 * PASSED IN THE A REGISTER. |
1374 * ALL REGISTERS ARE PRESERVED. |
1375 * |
1376 OUTCH IFD VDUOPT |
1377 FCCE 8D 49 BSR VOUTCH |
1378 ENDIF VDUOPT |
1379 IFD DG640OPT |
1380 BSR VOUTCH |
1381 ENDIF DG640OPT |
1381 ENDIF DG640OPT |
1382 FCD0 34 12 AOUTCH PSHS A,X ; SAVE A ACCUM AND IX |
1383 FCD2 BE DF E0 LDX CPORT ; GET ADDR. OF TERMINAL |
1384 FCD5 A6 84 FETSTA LDA ,X ; FETCH PORT STATUS |
1385 FCD7 85 02 BITA #2 ; TEST TDRE, OK TO XMIT ? |
1386 FCD9 27 FA BEQ FETSTA ; IF NOT LOOP UNTIL RDY |
1387 FCDB 85 08 BITA #8 ; CLEAR TO SEND ? |
1388 FCDD 26 F6 BNE FETSTA ; NO, LOOP UNTIL CLEAR |
1389 FCDF 35 02 PULS A ; GET CHAR. FOR XMIT |
1390 FCE1 A7 01 STA 1,X ; XMIT CHAR. |
1391 FCE3 35 90 PULS X,PC ; RESTORE IX |
1392 * |
1393 * IO INITIALIZATION |
1394 * |
1395 FCE5 IOINIZ EQU * |
1396 IFD VDUOPT |
1397 FCE5 8D 13 BSR VINIZ |
1398 ENDIF VDUOPT |
1399 IFD DG640OPT |
1400 BSR VINIZ |
1401 ENDIF DG640OPT |
1401 ENDIF DG640OPT |
1402 FCE7 BE DF E0 ACINIZ LDX CPORT ; POINT TO CONTROL PORT ADDRESS |
1403 FCEA 86 03 LDA #3 ; RESET ACIA PORT CODE |
1404 FCEC A7 84 STA ,X ; STORE IN CONTROL REGISTER |
1405 FCEE 86 51 LDA #$51 ; SET 8 DATA, 2 STOP AN 0 PARITY RTS* HIGH |
1406 FCF0 A7 84 STA ,X ; STORE IN CONTROL REGISTER |
1407 FCF2 6D 01 TST 1,X ; ANYTHING IN DATA REGISTER? |
1408 FCF4 86 FF LDA #$FF ; TURN ON ECHO FLAG |
1409 FCF6 B7 DF E2 STA ECHO |
1410 FCF9 39 RTS |
1411 * |
1412 IFD VDUOPT |
1413 * |
1414 *************************************************** |
1415 * VDU8 ADM3A REGISTER-MAPPED EMULATOR * |
1416 * * |
1417 * 80 x 25 Characters |
1418 * |
1419 *************************************************** |
1420 * |
1421 *************************************************** |
1422 * INITIALIZE EMULATOR * |
1423 *************************************************** |
1424 * |
1425 FCFA 8E E0 30 VINIZ LDX #VDU |
1426 FCFD CC 00 00 LDD #0 |
1427 FD00 FD DF FB STD COLADX ; AND ROWADX |
1428 FD03 A7 02 STA VDUCOL,X |
1429 FD05 E7 03 STB VDUROW,X |
1430 FD07 E7 04 STB VDUOFF,X |
1431 FD09 FD DF FD STD NEWROW ; AND ESCFLG |
1432 FD0C C6 02 LDB #$02 |
1433 FD0E E7 01 STB VDUATT,X |
1434 FD10 7F DF FE CLR ESCFLG |
1435 FD13 86 1B LDA #$1B ; SEND ESCAPE |
1436 FD15 8D 02 BSR VOUTCH |
1437 FD17 86 59 LDA #'Y ; CLEAR TO END OF SCREEN |
1438 * |
1439 ** VIDEO OUTPUT ROUTINE |
1440 * |
1441 FD19 34 16 VOUTCH PSHS A,B,X ; SAVE REGISTERS |
1442 FD1B 8E E0 30 LDX #VDU ; POINT TO VDU REGISTERS |
1443 * |
1444 ** CHECK FOR ESCAPE SEQUENCE |
1445 * |
1446 FD1E 7D DF FE TST ESCFLG ; ESCAPE ACTIVE? |
1447 FD21 27 04 BEQ SOROU1 ; BRANCH IF NOT |
1448 FD23 8D 60 BSR ESCAPE ; ELSE DO ESCAPE |
1449 FD25 20 0D BRA RETURN ; AND RETURN |
1450 * |
1451 ** CHECK FOR CONTROL CHARACTERS |
1452 * |
1453 FD27 81 20 SOROU1 CMPA #$20 ; CONTROL CODES? |
1454 FD29 24 04 BHS SOROU2 |
1455 FD2B 8D 09 BSR CONTRL ; BRANCH IF SO |
1456 FD2D 20 05 BRA RETURN |
1457 * |
1458 ** OUTPUT TEXT CHARACTER |
1459 * |
1460 FD2F A7 84 SOROU2 STA VDUCHR,X ; DISPLAY CHARACTER |
1461 FD31 17 00 AF LBSR NEWCOL ; UPDATE COLUMN |
1462 * |
1463 ** DISPLAY CURSOR AND RETURN |
1464 * |
1465 FD34 35 96 RETURN PULS A,B,X,PC ; RESTORE REGISTERS AND RETURN |
1466 * |
1467 *************************************************** |
1468 * CONTROL CODE HANDLERS * |
1469 *************************************************** |
1470 * |
1471 FD36 81 08 CONTRL CMPA #$08 ; CTRL H - BACKSPACE ? |
1472 FD38 27 34 BEQ BACKSP |
1473 FD3A 81 1B CMPA #$1B ; ESCAPE SEQUENCE? |
1474 FD3C 27 5A BEQ SETESC |
1475 FD3E 81 1A CMPA #$1A ; CTRL Z - Clear Screen |
1476 FD40 10 27 00 7C LBEQ CLRSCR |
1477 FD44 81 16 CMPA #$16 ; CTRL ^ - Home |
1478 FD46 27 38 BEQ HOME |
1479 FD48 81 0D CMPA #$0D ; CTRL M - RETURN? |
1480 FD4A 10 27 00 89 LBEQ CRETN |
1481 FD4E 81 0C CMPA #$0C ; CTRL L - CHAR RIGHT |
1482 FD50 27 24 BEQ CHRIGHT |
1483 FD52 81 0B CMPA #$0B ; CTRL K - MOVE UP ONE LINE |
1484 FD54 27 0F BEQ LINEUP |
1485 FD56 81 0A CMPA #$0A ; CTRL J - LINE FEED |
1486 FD58 26 45 BNE RETESC ; NONE OF THESE, RETURN |
1487 * |
1488 ***************************************** LINE FEED |
1489 * |
1490 FD5A FC DF FB LINEFD LDD COLADX ; GET CURRENT COLUMN AND ROW |
1491 FD5D 5C INCB ; BUMP ROW |
1492 FD5E C1 19 CMPB #NUMLIN ; SCROLL TIME? |
1493 FD60 26 79 BNE NEWCUR ; POSITION CURSOR IF NOT |
1494 FD62 16 00 8F LBRA SCROLL ; ELSE SCROLL IT |
1495 * |
1496 ***************************************** LINE FEED |
1497 * |
1498 FD65 FC DF FB LINEUP LDD COLADX ; GET CURRENT COLUMN AND ROW |
1499 FD68 5D TSTB ; AT TOP OF SCREEN ? |
1500 FD69 27 34 BEQ RETESC ; Yes, Ignore |
1501 FD6B 5A DECB ; No, Decrement ROW |
1502 FD6C 20 6D BRA NEWCUR ; POSITION CURSOR |
1503 * |
1504 *********************************** BACK SPACE |
1505 * |
1506 FD6E B6 DF FB BACKSP LDA COLADX |
1507 FD71 27 2C BEQ RETESC ; RETURN |
1508 FD73 4A DECA |
1509 FD74 20 62 BRA POSCOL ; POSITION CURSOR |
1510 * |
1511 *********************************** CURSOR RIGHT |
1512 * |
1513 FD76 B6 DF FB CHRIGHT LDA COLADX |
1514 FD79 4C INCA |
1515 FD7A 81 50 CMPA #LINLEN |
1516 FD7C 27 21 BEQ RETESC |
1517 FD7E 20 58 BRA POSCOL |
1518 * |
1519 *********************************** CURSOR RIGHT |
1520 * |
1521 FD80 CC 00 00 HOME LDD #0 ; HOME - POSITION TOP OF SCREEN |
1522 FD83 20 56 BRA NEWCUR |
1523 * |
1524 *************************************************** |
1525 * ESCAPE HANDLERS * |
1526 *************************************************** |
1527 * |
1528 FD85 F6 DF FE ESCAPE LDB ESCFLG ; GET FLAG |
1529 FD88 C1 3D CMPB #'= ; SETTING CURSOR? |
1530 FD8A 27 14 BEQ ESCCUR ; BRANCH IF SO |
1531 FD8C 81 59 CMPA #'Y ; CLEAR TO END OF SCREEN? |
1532 FD8E 27 6E BEQ ESCCLS |
1533 FD90 81 54 CMPA #'T ; CLEAR TO END OF LINE? |
1534 FD92 27 31 BEQ ESCCLL |
1535 FD94 81 3D CMPA #'= ; STARTING CURSOR SET? |
1536 FD96 26 04 BNE CLRESC ; BRANCH IF NOT |
1537 * |
1538 ***************************** START ESCAPE SEQUENCE |
1539 * |
1540 FD98 B7 DF FE SETESC STA ESCFLG ; ELSE START CURSORING |
1541 FD9B 39 RTS ; AND RETURN |
1542 * |
1543 FD9C 7F DF FE CLRESC CLR ESCFLG ; NO OTHERS SUPPORTED |
1544 FD9F 39 RETESC RTS ; SO RETURN |
1545 * |
1546 ********************************* SET SCREEN CURSOR |
1547 * |
1548 FDA0 7D DF FD ESCCUR TST NEWROW ; ROW SET? |
1549 FDA3 26 04 BNE ESCCU1 ; BRANCH IF SO |
1550 FDA5 B7 DF FD STA NEWROW ; ELSE SET NEW ROW |
1551 FDA8 39 RTS ; AND RETURN |
1552 * |
1553 FDA9 7F DF FE ESCCU1 CLR ESCFLG |
1554 FDAC 80 20 SUBA #$20 ; ADJUST COLUMN ADDRESS |
1555 FDAE 81 4F CMPA #LINLEN-1 ;CHECK FOR ACCEPTABLE COLUM |
1556 FDB0 22 ED BHI RETESC ; NOT OK, DO NOTHING |
1557 * |
1558 FDB2 F6 DF FD ESCCU2 LDB NEWROW |
1559 FDB5 7F DF FD CLR NEWROW |
1560 FDB8 C0 20 SUBB #$20 ; ADJUST TO ROW ADDRESS |
1561 FDBA C1 18 CMPB #NUMLIN-1 ; CHECK FOR ACCEPTABLE ROW |
1562 FDBC 22 E1 BHI RETESC ; ELSE RETURN DOING NOTHING |
1563 FDBE 20 1B BRA NEWCUR ; GO SET NEW CURSOR IF SO |
1564 * |
1565 ****************** CLEAR FROM CURSOR TO END OF LINE |
1566 * |
1567 FDC0 CC 00 00 CLRSCR LDD #0 ; CLEAR FROM TOP OF SCREEN |
1568 FDC3 8D 16 BSR NEWCUR |
1569 FDC5 B6 DF FB ESCCLL LDA COLADX |
1570 FDC8 C6 20 LDB #$20 ; AND CLEAR CHAR |
1571 FDCA E7 84 ESCCL1 STB VDUCHR,X ; DISPLAY TEXT |
1572 FDCC 4C INCA |
1573 FDCD A7 02 STA VDUCOL,X |
1574 FDCF 81 50 CMPA #LINLEN ; UNTIL END OF LINE |
1575 FDD1 26 F7 BNE ESCCL1 |
1576 FDD3 7F DF FE CLR ESCFLG |
1577 FDD6 39 RTS |
1578 * |
1579 *********************************** CARRIAGE RETURN |
1580 * |
1581 FDD7 4F CRETN CLRA ; SET COLUMN ZERO |
1582 FDD8 F6 DF FC POSCOL LDB ROWADX ; GET CURRENT ROW |
1583 * |
1584 *********** GENERATE NEW CURSOR POSITION AND RETURN |
1585 * |
1586 FDDB FD DF FB NEWCUR STD COLADX ; SAVE NEW ROW AND COLUMN |
1587 FDDE A7 02 STA VDUCOL,X ; SET NEW COLUMN |
1588 FDE0 E7 03 STB VDUROW,X ; SET NEW ROW |
1589 FDE2 39 RTS ; AND RETURN |
1590 * |
1591 ********************* UPDATE CURRENT COLUMN AND ROW |
1592 * |
1593 FDE3 FC DF FB NEWCOL LDD COLADX ; GET ROW AND COLUMN |
1594 FDE6 4C INCA ; BUMP COLUMN |
1595 FDE7 81 50 CMPA #LINLEN ; ROLL? |
1596 FDE9 26 F0 BNE NEWCUR ; BRANCH IF NOT |
1597 FDEB 4F CLRA ; ELSE RESET TO ZERO |
1598 FDEC 5C INCB ; AND BUMP ROW |
1599 FDED C1 19 CMPB #NUMLIN |
1600 FDEF 26 EA BNE NEWCUR |
1601 FDF1 5A DECB ; BOTTOM ROW |
1602 FDF2 8D E7 BSR NEWCUR |
1603 * |
1604 ********************************* SCROLL THE SCREEN |
1605 * |
1606 FDF4 E6 04 SCROLL LDB VDUOFF,X |
1607 FDF6 5C INCB |
1608 FDF7 C1 19 CMPB #NUMLIN |
1609 FDF9 25 01 BLO SCROL1 |
1610 FDFB 5F CLRB |
1611 FDFC E7 04 SCROL1 STB VDUOFF,X |
1612 * |
1613 **************** CLEAR FROM CURSOR TO END OF SCREEN |
1614 * |
1615 FDFE F6 DF FB ESCCLS LDB COLADX ; GET CURSOR |
1616 FE01 86 20 LDA #$20 ; GET A SPACE |
1617 FE03 F7 DF FB ESCCLS1 STB COLADX |
1618 FE06 E7 02 STB VDUCOL,X |
1619 FE08 A7 84 STA VDUCHR,X |
1620 FE0A 5C INCB |
1621 FE0B C1 50 CMPB #LINLEN |
1622 FE0D 26 F4 BNE ESCCLS1 |
1623 * |
1624 FE0F F6 DF FC LDB ROWADX |
1625 FE12 5C INCB |
1626 FE13 C1 19 CMPB #NUMLIN |
1627 FE15 27 08 BEQ ESCCLS2 |
1628 FE17 F7 DF FC STB ROWADX |
1629 FE1A E7 03 STB VDUROW,X |
1630 FE1C 5F CLRB |
1631 FE1D 20 E4 BRA ESCCLS1 |
1632 * |
1633 FE1F 5F ESCCLS2 CLRB |
1634 FE20 F7 DF FB STB COLADX |
1635 FE23 E7 02 STB VDUCOL,X |
1636 FE25 F7 DF FE STB ESCFLG |
1637 FE28 39 RTS |
1638 ENDIF VDUOPT |
1639 * |
1640 IFD DG640OPT |
1641 *************************************************** |
1642 * TELEVIDEO-TYPE MEMORY-MAPPED EMULATOR * |
1643 * * |
1644 * FOR HARD-WIRED MEMORY-MAPPED DISPLAYS USING THE * |
1645 * HIGH ORDER BIT OF EACH BYTE FOR REVERSE VIDEO * |
1646 * CURSORING (SUCH AS THE THOMAS INSTRUMENTATION * |
1647 * 16x64 BOARD). * |
1648 *************************************************** |
1649 * |
1650 *************************************************** |
1651 * INITIALIZE EMULATOR * |
1652 *************************************************** |
1653 * |
1654 VINIZ LDX #0 |
1655 STX COLADX ; AND ROWADX |
1656 STX NEWROW ; AND ESCFLG |
1657 LDX #SCREEN ; POINT TO SCREEN |
1658 STX CURSOR ; SET PROGRAM CURSOR |
1659 LDA #$1B ; SEND ESCAPE |
1660 BSR VOUTCH |
1661 LDA #'Y ; CLEAR TO END OF SCREEN |
1662 * |
1663 ** VIDEO OUTPUT ROUTINE |
1664 * |
1665 VOUTCH PSHS A,B,X ; SAVE REGISTERS |
1666 * |
1667 ** CLEAR CURSOR |
1668 * |
1669 LDX CURSOR |
1670 LDB 0,X |
1671 ANDB #$7F |
1672 STB 0,X |
1673 * |
1674 ** CHECK FOR ESCAPE SEQUENCE |
1675 * |
1676 TST ESCFLG ; ESCAPE ACTIVE? |
1677 BEQ SOROU1 ; BRANCH IF NOT |
1678 BSR ESCAPE ; ELSE DO ESCAPE |
1679 BRA RETURN ; AND RETURN |
1680 * |
1681 ** CHECK FOR CONTROL CHARACTERS |
1682 * |
1683 SOROU1 CMPA #$20 ; CONTROL CODES? |
1684 BHS SOROU2 |
1685 BSR CONTRL ; BRANCH IF SO |
1686 BRA RETURN |
1687 * |
1688 ** OUTPUT TEXT CHARACTER |
1689 * |
1690 SOROU2 LDX CURSOR ; ELSE GET CURSOR |
1691 STA 0,X ; DISPLAY CHARACTER |
1692 LBSR NEWCOL ; UPDATE COLUMN |
1693 * |
1694 ** DISPLAY CURSOR AND RETURN |
1695 * |
1696 RETURN LDX CURSOR ; AND DISPLAY IT |
1697 LDB ,X |
1698 ORB #$80 ; WITH REVID |
1699 STB ,X |
1700 PULS A,B,X,PC ; RESTORE REGISTERS AND RETURN |
1701 * |
1702 *************************************************** |
1703 * CONTROL CODE HANDLERS * |
1704 *************************************************** |
1705 * |
1706 CONTRL CMPA #$08 ; CTRL H - BACKSPACE ? |
1707 LBEQ BACKSP |
1708 CMPA #$1B ; ESCAPE SEQUENCE? |
1709 LBEQ SETESC |
1710 CMPA #$D ; CTRL M - RETURN? |
1711 LBEQ CRETN |
1712 CMPA #$0A ; CTRL J - LINE FEED |
1713 BNE RETESC ; NONE OF THESE, RETURN |
1714 * |
1715 ***************************************** LINE FEED |
1716 * |
1717 LINEFD LDD COLADX ; GET CURRENT COLUMN AND ROW |
1718 INCB ; BUMP ROW |
1719 CMPB #NUMLIN ; SCROLL TIME? |
1720 LBNE NEWCUR ; POSITION CURSOR IF NOT |
1721 LBRA SCROLL ; ELSE SCROLL IT |
1722 * |
1723 ***************************************** LINE FEED |
1724 * |
1725 LINEUP LDD COLADX ; GET CURRENT COLUMN AND ROW |
1726 TSTB ; AT TOP OF SCREEN ? |
1727 BEQ RETESC ; YES, RETURN |
1728 DECB ; NO, DECREMENT ROW |
1729 LBRA NEWCUR ; POSITION CURSOR |
1730 * |
1731 *********************************** BACK SPACE |
1732 * |
1733 BACKSP LDA COLADX ; GET CURRENT COLUMN AND ROW |
1734 BEQ RETESC ; IF AT TOP LEFT CORNER RETURN |
1735 DECA ; OTHERWISE BACK STEP ONE CHARACTER |
1736 LBRA POSCOL ; POSITION CURSOR |
1737 * |
1738 *********************************** CURSOR RIGHT |
1739 * |
1740 CHRIGHT LDA COLADX ; GET CURRENT COLUMN AND ROW |
1741 INCA ; MOVE RIGHT ONE CHARACTER |
1742 CMPA #LINLEN ; ARE WE AT THE END OF THE LINE ? |
1743 BEQ RETESC ; YES, RETURN |
1744 LBRA POSCOL ; NO, POSITION CURSOR |
1745 * |
1746 *************************************************** |
1747 * ESCAPE HANDLERS * |
1748 *************************************************** |
1749 * |
1750 ESCAPE LDB ESCFLG ; ARE WE IN AN ESCAPE SEQUENCE ? |
1751 CMPB #'= ; ARE WE SETTING CURSOR? |
1752 BEQ ESCCUR ; YES BRANCH TO SET CURSOR |
1753 CMPA #'Y ; CLEAR TO END OF SCREEN? |
1754 LBEQ ESCCLS ; YES, CLEAR SCREEN |
1755 CMPA #'T ; CLEAR TO END OF LINE? |
1756 BEQ ESCCLL ; YES, CLEAR LINE |
1757 CMPA #'E ; INSERT LINE? |
1758 BEQ ESCINL |
1759 CMPA #'R ; DELETE LINE? |
1760 BEQ ESCDLL |
1761 CMPA #'= ; STARTING CURSOR SET? |
1762 BNE CLRESC ; BRANCH IF NOT |
1763 * |
1764 ***************************** START ESCAPE SEQUENCE |
1765 * |
1766 SETESC STA ESCFLG ; ELSE START CURSORING |
1767 RTS ; AND RETURN |
1768 * |
1769 CLRESC CLR ESCFLG ; NO OTHERS SUPPORTED |
1770 RETESC RTS ; SO RETURN |
1771 * |
1772 ********************************* SET SCREEN CURSOR |
1773 * |
1774 ESCCUR TST NEWROW ; ROW SET? |
1775 BNE ESCCU1 ; BRANCH IF SO |
1776 STA NEWROW ; ELSE SET NEW ROW |
1777 RTS ; AND RETURN |
1778 * |
1779 ESCCU1 CLR ESCFLG |
1780 SUBA #$20 ; ADJUST COLUMN ADDRESS |
1781 CMPA #LINLEN-1 ; CHECK FOR ACCEPTABLE COLUM |
1782 BHI RETESC ; NOT OK, DO NOTHING |
1783 * |
1784 ESCCU2 LDB NEWROW |
1785 CLR NEWROW |
1786 SUBB #$20 ; ADJUST TO ROW ADDRESS |
1787 CMPB #NUMLIN-1 ; CHECK FOR ACCEPTABLE ROW |
1788 BHI RETESC ; ELSE RETURN DOING NOTHING |
1789 BRA NEWCUR ; GO SET NEW CURSOR IF SO |
1790 * |
1791 *************************** DELETE LINE FROM SCREEN |
1792 * |
1793 ESCDLL BSR CRETN ; GO COL. ZERO |
1794 LDB ROWADX |
1795 CMPB #NUMLIN-1 |
1796 BEQ SCROL3 |
1797 BRA SCROL1 ; AND DELETE THIS LINE |
1798 * |
1799 *************************** INSERT LINE INTO SCREEN |
1800 * |
1801 ESCINL BSR CRETN ; GO TO COL. ZERO |
1802 LDB ROWADX |
1803 CMPB #NUMLIN-1 |
1804 BEQ ESCCLL |
1805 * |
1806 ** SCROLL SCREEN DOWN FROM CURSOR |
1807 * |
1808 LDX #SCREEN+SCNLEN-LINLEN |
1809 ESCIN0 LDA ,-X |
1810 STA LINLEN,X |
1811 LDA SCNLEN,X |
1812 STA SCNLEN+LINLEN,X |
1813 CMPX CURSOR |
1814 BNE ESCIN0 |
1815 * |
1816 ****************** CLEAR FROM CURSOR TO END OF LINE |
1817 * |
1818 ESCCLL LDA COLADX ; GET CURRENT COLUMN |
1819 LDX CURSOR ; GET CURSOR |
1820 LDB #$20 ; AND CLEAR CHAR |
1821 ESCLL1 STB SCNLEN,X ; CLEAR ATTRIBUTE |
1822 STB ,X+ ; CLEAR TEXT |
1823 INCA |
1824 CMPA #LINLEN ; UNTIL END OF LINE |
1825 BNE ESCLL1 |
1826 CLR ESCFLG |
1827 RTS |
1828 * |
1829 *********************************** CARRIAGE RETURN |
1830 * |
1831 CRETN CLRA ; SET COLUMN ZERO |
1832 POSCOL LDB ROWADX ; GET CURRENT ROW |
1833 * |
1834 *********** GENERATE NEW CURSOR POSITION AND RETURN |
1835 * |
1836 NEWCUR STD COLADX ; SAVE NEW ROW AND COLUMN |
1837 LDA #LINLEN ; ELSE ADD A LINE |
1838 MUL ; LINLEN * ROWADX |
1839 ADDB COLADX |
1840 ADCA #0 |
1841 ADDD #SCREEN ; ADD SCREEN BASE. |
1842 STD CURSOR ; SAVE NEW CURSOR |
1843 TFR D,X ; GET CURSOR IN X |
1844 RTS ; AND RETURN |
1845 * |
1846 ********************* UPDATE CURRENT COLUMN AND ROW |
1847 * |
1848 NEWCOL LDD COLADX ; GET ROW AND COLUMN |
1849 INCA ; BUMP COLUMN |
1850 CMPA #LINLEN ; ROLL? |
1851 BNE NEWCUR ; BRANCH IF NOT |
1852 CLRA ; ELSE RESET TO ZERO |
1853 INCB ; AND BUMP ROW |
1854 CMPB #NUMLIN |
1855 BNE NEWCUR |
1856 DECB ; BOTTOM ROW |
1857 BSR NEWCUR |
1858 * |
1859 ********************************* SCROLL THE SCREEN |
1860 * |
1861 SCROLL LDX #SCREEN ; POINT TO SCREEN |
1862 SCROL1 LDA SCNLEN+LINLEN,X |
1863 STA SCNLEN,X |
1864 LDA LINLEN,X ; MOVE TWO BYTES |
1865 STA ,X+ ; UP ONE LINE |
1866 CMPX #SCREEN+SCNLEN-LINLEN |
1867 BNE SCROL1 ; LOOP UNTIL DONE |
1868 BRA SCROL3 |
1869 * |
1870 **************** CLEAR FROM CURSOR TO END OF SCREEN |
1871 * |
1872 ESCCLS LDX CURSOR ; GET CURSOR |
1873 SCROL3 LDA #$20 ; GET A SPACE |
1874 SCROL2 STA SCNLEN,X ; CLEAR ATTRIBUTES |
1875 STA ,X+ ; AND TEXT |
1876 CMPX #SCREEN+SCNLEN |
1877 BNE SCROL2 ; UNTIL DONE |
1878 CLR ESCFLG |
1879 RTS |
1880 ENDIF DG640OPT |
1880 ENDIF DG640OPT |
1881 * |
1882 IFD PRTOPT |
1883 ************************************* |
1884 * |
1885 ** PRINTER DRIVER ROUTINES |
1886 * |
1887 ************************************* |
1888 * |
1889 ** PINIZ - INITIATE PRINTER PORT |
1890 * |
1891 PINIZ PSHS B |
1892 LDD #DIRMSK*256+$04 ; ACCA=DIRMSK ACCB=$04 |
1893 STD PADATA ; SET DDR AND SELECT DATA |
1894 * |
1895 ** RESET PRINTER |
1896 * |
1897 LDB #PRESET |
1898 STB PADATA |
1899 RESTLP INCB ; DELAY FOR RESET |
1900 BNE RESTLP |
1901 STA PADATA ; ACCA=DIRMSK |
1902 * |
1903 ** INITALIZE PORT B (DATA PORT) |
1904 * |
1905 LDA #$2A |
1906 STA PBCTRL |
1907 LDD #$FF2E ; ACCA=$FF ACCB =%00101110 |
1908 STD PBDATA ; PBDREG PBCTRL |
1909 * |
1910 ** SELECT 66 LINES/PAGE |
1911 * |
1912 LDA #$1B |
1913 BSR POUTCH |
1914 LDA #'C |
1915 BSR POUTCH |
1916 LDA #66 |
1917 PULS B |
1918 ************************************* |
1919 * |
1920 ** OUTPUT A CHARACTER TO THE PRINTER |
1921 * |
1922 ************************************* |
1923 POUTCH PSHS B |
1924 LDB PBDATA ; CLEAR INTERRUPT BIT |
1925 * |
1926 ** WAIT TILL NOT BUSY |
1927 * |
1928 BUSYLP LDB PADATA |
1929 BITB #PERROR |
1930 BEQ PEXIT |
1931 TSTB |
1932 BMI BUSYLP |
1933 * |
1934 ** NOW OUTPUT CHARACTER |
1935 * |
1936 STA PBDATA |
1937 PEXIT PULS B,PC |
1938 ************************************* |
1939 * |
1940 ** PCHK TEST IFD PRINTER READY |
1941 * |
1942 ************************************* |
1943 PCHK TST PBCTRL ; TEST STATE OF CRB7 |
1944 RTS ; SET ON ACKNOWLEDGE |
1945 ENDIF PRTOPT |
1945 ENDIF PRTOPT |
1946 ************************************* |
1947 * |
1948 * MONITOR KEYBOARD COMMAND JUMP TABLE |
1949 * |
1950 ************************************* |
1951 * |
1952 FE29 JMPTAB EQU * |
1953 FE29 01 FCB 1 " ^A " |
1954 FE2A FB 74 FDB ALTRA |
1955 FE2C 02 FCB 2 " ^B " |
1956 FE2D FB 69 FDB ALTRB |
1957 FE2F 03 FCB 3 " ^C " |
1958 FE30 FB 7F FDB ALTRCC |
1959 FE32 04 FCB 4 " ^D " |
1960 FE33 FB 5E FDB ALTRDP |
1961 FE35 10 FCB $10 " ^P " |
1962 FE36 FB 31 FDB ALTRPC |
1963 FE38 15 FCB $15 " ^U " |
1964 FE39 FB 3D FDB ALTRU |
1965 FE3B 18 FCB $18 " ^X " |
1966 FE3C FB 53 FDB ALTRX |
1967 FE3E 19 FCB $19 " ^Y " |
1968 FE3F FB 48 FDB ALTRY |
1969 * |
1970 FE41 42 FCC 'B' |
1971 FE42 F9 5C FDB BRKPNT |
1972 FE44 45 FCC 'E' |
1973 FE45 F8 FD FDB MEMDUMP |
1974 FE47 47 FCC 'G' |
1975 FE48 F8 A5 FDB GO |
1976 FE4A 4C FCC 'L' |
1977 FE4B FA 5E FDB LOAD |
1978 FE4D 50 FCC 'P' |
1979 FE4E FA BC FDB PUNCH |
1980 FE50 4D FCC 'M' |
1981 FE51 F8 A8 FDB MEMCHG |
1982 FE53 52 FCC 'R' |
1983 FE54 FB ED FDB REGSTR |
1984 FE56 53 FCC 'S' |
1985 FE57 F8 F1 FDB DISSTK |
1986 FE59 58 FCC 'X' |
1987 FE5A F9 88 FDB XBKPNT |
1988 IFD MFDCOPT |
1989 FCC 'D' ; *** SWTPC USES 'U' FOR MINIBOOT |
1990 FDB MINBOOT |
1991 ENDIF MFDCOPT |
1991 ENDIF MFDCOPT |
1992 IFD CF8OPT |
1993 FE5C 44 FCC 'D' ; *** FPGA 8 BIT USES 'D' FOR CFBOOT |
1994 FE5D F9 D5 FDB CFBOOT |
1995 ENDIF CF8OPT |
1996 IFD IDEOPT |
1997 FCC 'D' ; *** XESS FPGA 16 BIT IDE USES 'D' FOR IDEBOOT |
1998 FDB IDEBOOT |
1999 ENDIF IDEOPT |
1999 ENDIF IDEOPT |
2000 IFD DMAFOPT |
2001 FCC 'U' ; *** SWTPC USES 'D' FOR DMAF2 BOOT |
2002 FDB DBOOT |
2003 ENDIF DMAFOPT |
2003 ENDIF DMAFOPT |
2004 IFD EXTOPT |
2005 FE5F 55 FCC 'U' ; *** IF FPGA, 'U' IS FOR USER |
2006 FE60 FC 92 FDB USRCMD |
2007 ENDIF EXTOPT |
2008 IFD RTCOPT |
2009 FCC 'T' |
2010 FDB TIMSET |
2011 ENDIF RTCOPT |
2011 ENDIF RTCOPT |
2012 IFD TRAOPT |
2013 FCC "T" |
2014 FDB TRACE |
2015 ENDIF TRAOPT |
2015 ENDIF TRAOPT |
2016 * |
2017 FE62 TABEND EQU * |
2018 * |
2019 * ** 6809 VECTOR ADDRESSES ** |
2020 * |
2021 * FOLLOWING ARE THE ADDRESSES OF THE VECTOR ROUTINES |
2022 * FOR THE 6809 PROCESSOR. DURING INITIALIZATION THEY |
2023 * ARE RELOCATED TO RAM FROM $DFC0 TO $DFCF. THEY ARE |
2024 * RELOCATED TO RAM SO THAT THE USER MAY REVECTOR TO |
2025 * HIS OWN ROUTINES IF HE SO DESIRES. |
2026 * |
2027 * |
2028 FE62 F9 94 RAMVEC FDB SWIE ; USER-V |
2029 FE64 F8 A7 FDB RTI ; SWI3-V |
2030 FE66 F8 A7 FDB RTI ; SWI2-V |
2031 FE68 F8 A7 FDB RTI ; FIRQ-V |
2032 FE6A F8 A7 FDB RTI ; IRQ-V |
2033 FE6C F9 94 FDB SWIE ; SWI-V |
2034 FE6E FF FF FDB $FFFF ; SVC-VO |
2035 FE70 FF FF FDB $FFFF ; SVC-VL |
2036 * |
2037 * PRINTABLE MESSAGE STRINGS |
2038 * |
2039 FE72 0D 0A 00 00 00 MSG1 FCB $D,$A,$0,$0,$0 * 0, CR/LF, 0 |
2040 FE77 53 59 53 30 39 42 FCC 'SYS09BUG 1.7 FOR ' |
55 47 20 31 2E 37 |
20 46 4F 52 20 |
2041 IFD SWTOPT |
2042 FCC 'SWTPC' |
2043 ENDIF SWTOPT |
2043 ENDIF SWTOPT |
2044 IFD ADSOPT |
2045 FCC 'ADS6809' |
2046 ENDIF ADSOPT |
2046 ENDIF ADSOPT |
2047 IFD B3SOPT |
2048 FCC 'B3-S2+' |
2049 ENDIF B3SOPT |
2049 ENDIF B3SOPT |
2050 IFD B5XOPT |
2051 FCC 'B5-X300' |
2052 ENDIF B5XOPT |
2052 ENDIF B5XOPT |
2053 IFD S3SOPT |
2054 FCC 'S3STARTER' |
2055 ENDIF S3SOPT |
2055 ENDIF S3SOPT |
2056 IFD S3EOPT |
2057 FCC 'S3E' |
2058 ENDIF S3EOPT |
2058 ENDIF S3EOPT |
2059 IFD XESOPT |
2060 FCC 'XESS' |
2061 ENDIF XESOPT |
2061 ENDIF XESOPT |
2062 IFD DE270OPT |
2063 FE88 44 45 32 2D 37 30 FCC 'DE2-70' |
2064 ENDIF DE270OPT |
2065 FE8E 20 2D 20 FCC ' - ' |
2066 FE91 04 FCB 4 |
2067 FE92 4B 0D 0A 00 00 00 MSG2 FCB 'K,$0D,$0A,$00,$00,$00,$04 ; K,<CR>,<LF>,3 NULS,<EOT> |
04 |
2068 FE99 3E MSG3 FCC '>' |
2069 FE9A 04 FCB 4 |
2070 FE9B 57 48 41 54 3F MSG4 FCC 'WHAT?' |
2071 FEA0 04 FCB 4 |
2072 FEA1 20 2D 20 MSG5 FCC ' - ' |
2073 FEA4 04 FCB 4' |
2074 FEA5 20 20 53 50 3D MSG10 FCC ' SP=' |
2075 FEAA 04 FCB 4 |
2076 FEAB 20 20 50 43 3D MSG11 FCC ' PC=' |
2077 FEB0 04 FCB 4 |
2078 FEB1 20 20 55 53 3D MSG12 FCC ' US=' |
2079 FEB6 04 FCB 4 |
2080 FEB7 20 20 49 59 3D MSG13 FCC ' IY=' |
2081 FEBC 04 FCB 4 |
2082 FEBD 20 20 49 58 3D MSG14 FCC ' IX=' |
2083 FEC2 04 FCB 4 |
2084 FEC3 20 20 44 50 3D MSG15 FCC ' DP=' |
2085 FEC8 04 FCB 4 |
2086 FEC9 20 20 41 3D MSG16 FCC ' A=' |
2087 FECD 04 FCB 4 |
2088 FECE 20 20 42 3D MSG17 FCC ' B=' |
2089 FED2 04 FCB 4 |
2090 FED3 20 20 43 43 3A 20 MSG18 FCC ' CC: ' |
2091 FED9 04 FCB 4 |
2092 FEDA 45 46 48 49 4E 5A MSG19 FCC 'EFHINZVC' |
56 43 |
2093 FEE2 53 31 MSG20 FCC 'S1' |
2094 FEE4 04 FCB 4 |
2095 IFD DATOPT |
2096 * |
2097 * POWER UP/ RESET/ NMI ENTRY POINT |
2098 * |
2099 FF00 ORG $FF00 |
2100 * |
2101 * |
2102 FF00 8E FF F0 START LDX #IC11 ; POINT TO DAT RAM IC11 |
2103 FF03 86 0F LDA #$0F ; GET COMPLIMENT OF ZERO |
2104 * |
2105 * |
2106 * INITIALIZE DAT RAM --- LOADS $F-$0 IN LOCATIONS $0-$F |
2107 * OF DAT RAM, THUS STORING COMPLEMENT OF MSB OF ADDRESS |
2108 * IN THE DAT RAM. THE COMPLEMENT IS REQUIRED BECAUSE THE |
2109 * OUTPUT OF IC11, A 74S189, IS THE INVERSE OF THE DATA |
2110 * STORED IN IT. |
2111 * |
2112 * |
2113 FF05 A7 80 DATLP STA ,X+ ; STORE & POINT TO NEXT RAM LOCATION |
2114 FF07 4A DECA ; GET COMP. VALUE FOR NEXT LOCATION |
2115 FF08 26 FB BNE DATLP ; ALL 16 LOCATIONS INITIALIZED ? |
2116 * |
2117 * NOTE: IX NOW CONTAINS $0000, DAT RAM IS NO LONGER |
2118 * ADDRESSED, AND LOGICAL ADDRESSES NOW EQUAL |
2119 * PHYSICAL ADDRESSES. |
2120 * |
2121 FF0A 86 F0 LDA #$F0 |
2122 FF0C A7 84 STA ,X ; STORE $F0 AT $FFFF |
2123 FF0E 8E D0 A0 LDX #$D0A0 ; ASSUME RAM TO BE AT $D000-$DFFF |
2124 FF11 10 8E 55 AA LDY #TSTPAT ; LOAD TEST DATA PATTERN INTO "Y" |
2125 FF15 EE 84 TSTRAM LDU ,X ; SAVE DATA FROM TEST LOCATION |
2126 FF17 10 AF 84 STY ,X ; STORE TEST PATTERN AT $D0A0 |
2127 FF1A 10 AC 84 CMPY ,X ; IS THERE RAM AT THIS LOCATION ? |
2128 FF1D 27 0B BEQ CNVADR ; IF MATCH THERE'S RAM, SO SKIP |
2129 FF1F 30 89 F0 00 LEAX -$1000,X ; ELSE POINT 4K LOWER |
2130 FF23 8C F0 A0 CMPX #$F0A0 ; DECREMENTED PAST ZER0 YET ? |
2131 FF26 26 ED BNE TSTRAM ; IF NOT CONTINUE TESTING FOR RAM |
2132 FF28 20 D6 BRA START ; ELSE START ALL OVER AGAIN |
2133 * |
2134 * |
2135 * THE FOLLOWING CODE STORES THE COMPLEMENT OF |
2136 * THE MS CHARACTER OF THE FOUR CHARACTER HEX |
2137 * ADDRESS OF THE FIRST 4K BLOCK OF RAM LOCATED |
2138 * BY THE ROUTINE "TSTRAM" INTO THE DAT RAM. IT |
2139 * IS STORED IN RAM IN THE LOCATION THAT IS |
2140 * ADDRESSED WHEN THE PROCESSOR ADDRESS IS $D---, |
2141 * THUS IF THE FIRST 4K BLOCK OF RAM IS FOUND |
2142 * WHEN TESTING LOCATION $70A0, MEANING THERE |
2143 * IS NO RAM PHYSICALLY ADDRESSED IN THE RANGE |
2144 * $8000-$DFFF, THEN THE COMPLEMENT OF THE |
2145 * "7" IN THE $70A0 WILL BE STORED IN |
2146 * THE DAT RAM. THUS WHEN THE PROCESSOR OUTPUTS |
2147 * AN ADDRESS OF $D---, THE DAT RAM WILL RESPOND |
2148 * BY RECOMPLEMENTING THE "7" AND OUTPUTTING THE |
2149 * 7 ONTO THE A12-A15 ADDRESS LINES. THUS THE |
2150 * RAM THAT IS PHYSICALLY ADDRESSED AT $7--- |
2151 * WILL RESPOND AND APPEAR TO THE 6809 THAT IT |
2152 * IS AT $D--- SINCE THAT IS THE ADDRESS THE |
2153 * 6809 WILL BE OUTPUTING WHEN THAT 4K BLOCK |
2154 * OF RAM RESPONDS. |
2155 * |
2156 * |
2157 FF2A EF 84 CNVADR STU ,X ; RESTORE DATA AT TEST LOCATION |
2158 FF2C 1F 10 TFR X,D ; PUT ADDR. OF PRESENT 4K BLOCK IN D |
2159 FF2E 43 COMA ; COMPLEMENT MSB OF THAT ADDRESS |
2160 FF2F 44 LSRA ; PUT MS 4 BITS OF ADDRESS IN |
2161 FF30 44 LSRA ; LOCATION D0-D3 TO ALLOW STORING |
2162 FF31 44 LSRA ; IT IN THE DYNAMIC ADDRESS |
2163 FF32 44 LSRA ; TRANSLATION RAM. |
2164 FF33 B7 FF FD STA $FFFD ; STORE XLATION FACTOR IN DAT "D" |
2165 * |
2166 FF36 10 CE DF C0 LDS #STACK ; INITIALIZE STACK POINTER |
2167 * |
2168 * |
2169 * THE FOLLOWING CHECKS TO FIND THE REAL PHYSICAL ADDRESSES |
2170 * OF ALL 4K BLKS OF RAM IN THE SYSTEM. WHEN EACH 4K BLK |
2171 * OF RAM IS LOCATED, THE COMPLEMENT OF IT'S REAL ADDRESS |
2172 * IS THEN STORED IN A "LOGICAL" TO "REAL" ADDRESS XLATION |
2173 * TABLE THAT IS BUILT FROM $DFD0 TO $DFDF. FOR EXAMPLE IF |
2174 * THE SYSTEM HAS RAM THAT IS PHYSICALLY LOCATED (WIRED TO |
2175 * RESPOND) AT THE HEX LOCATIONS $0--- THRU $F---.... |
2176 * |
2177 * 0 1 2 3 4 5 6 7 8 9 A B C D E F |
2178 * 4K 4K 4K 4K 4K 4K 4K 4K -- 4K 4K 4K 4K -- -- -- |
2179 * |
2180 * ....FOR A TOTAL OF 48K OF RAM, THEN THE TRANSLATION TABLE |
2181 * CREATED FROM $DFD0 TO $DFDF WILL CONSIST OF THE FOLLOWING.... |
2182 * |
2183 * 0 1 2 3 4 5 6 7 8 9 A B C D E F |
2184 * 0F 0E 0D 0C 0B 0A 09 08 06 05 00 00 04 03 F1 F0 |
2185 * |
2186 * |
2187 * HERE WE SEE THE LOGICAL ADDRESSES OF MEMORY FROM $0000-$7FFF |
2188 * HAVE NOT BEEN SELECTED FOR RELOCATION SO THAT THEIR PHYSICAL |
2189 * ADDRESS WILL = THEIR LOGICAL ADDRESS; HOWEVER, THE 4K BLOCK |
2190 * PHYSICALLY AT $9000 WILL HAVE ITS ADDRESS TRANSLATED SO THAT |
2191 * IT WILL LOGICALLY RESPOND AT $8000. LIKEWISE $A,$B, AND $C000 |
2192 * WILL BE TRANSLATED TO RESPOND TO $9000,$C000, AND $D000 |
2193 * RESPECTIVELY. THE USER SYSTEM WILL LOGICALLY APPEAR TO HAVE |
2194 * MEMORY ADDRESSED AS FOLLOWS.... |
2195 * |
2196 * 0 1 2 3 4 5 6 7 8 9 A B C D E F |
2197 * 4K 4K 4K 4K 4K 4K 4K 4K 4K 4K -- -- 4K 4K -- -- |
2198 * |
2199 * |
2200 FF3A 10 8E DF D0 LDY #LRARAM ; POINT TO LOGICAL/REAL ADDR. TABLE |
2201 FF3E A7 2D STA 13,Y ; STORE $D--- XLATION FACTOR AT $DFDD |
2202 FF40 6F 2E CLR 14,Y ; CLEAR $DFDE |
2203 FF42 86 F0 LDA #$F0 ; DESTINED FOR IC8 AN MEM EXPANSION ? |
2204 FF44 A7 2F STA 15,Y ; STORE AT $DFDF |
2205 FF46 86 0C LDA #$0C ; PRESET NUMBER OF BYTES TO CLEAR |
2206 FF48 6F A6 CLRLRT CLR A,Y ; CLEAR $DFDC THRU $DFD0 |
2207 FF4A 4A DECA ; SUB. 1 FROM BYTES LEFT TO CLEAR |
2208 FF4B 2A FB BPL CLRLRT ; CONTINUE IF NOT DONE CLEARING |
2209 FF4D 30 89 F0 00 FNDRAM LEAX -$1000,X ; POINT TO NEXT LOWER 4K OF RAM |
2210 FF51 8C F0 A0 CMPX #$F0A0 ; TEST FOR DECREMENT PAST ZERO |
2211 FF54 27 22 BEQ FINTAB ; SKIP IF FINISHED |
2212 FF56 EE 84 LDU ,X ; SAVE DATA AT CURRENT TEST LOCATION |
2213 FF58 10 8E 55 AA LDY #TSTPAT ; LOAD TEST DATA PATTERN INTO Y REG. |
2214 FF5C 10 AF 84 STY ,X ; STORE TEST PATT. INTO RAM TEST LOC. |
2215 FF5F 10 AC 84 CMPY ,X ; VERIFY RAM AT TEST LOCATION |
2216 FF62 26 E9 BNE FNDRAM ; IF NO RAM GO LOOK 4K LOWER |
2217 FF64 EF 84 STU ,X ; ELSE RESTORE DATA TO TEST LOCATION |
2218 FF66 10 8E DF D0 LDY #LRARAM ; POINT TO LOGICAL/REAL ADDR. TABLE |
2219 FF6A 1F 10 TFR X,D ; PUT ADDR. OF PRESENT 4K BLOCK IN D |
2220 FF6C 44 LSRA ; PUT MS 4 BITS OF ADDR. IN LOC. D0-D3 |
2221 FF6D 44 LSRA ; TO ALLOW STORING IT IN THE DAT RAM. |
2222 FF6E 44 LSRA |
2223 FF6F 44 LSRA |
2224 FF70 1F 89 TFR A,B ; SAVE OFFSET INTO LRARAM TABLE |
2225 FF72 88 0F EORA #$0F ; INVERT MSB OF ADDR. OF CURRENT 4K BLK |
2226 FF74 A7 A5 STA B,Y ; SAVE TRANSLATION FACTOR IN LRARAM TABLE |
2227 FF76 20 D5 BRA FNDRAM ; GO TRANSLATE ADDR. OF NEXT 4K BLK |
2228 FF78 86 F1 FINTAB LDA #$F1 ; DESTINED FOR IC8 AND MEM EXPANSION ? |
2229 FF7A 10 8E DF D0 LDY #LRARAM ; POINT TO LRARAM TABLE |
2230 FF7E A7 2E STA 14,Y ; STORE $F1 AT $DFCE |
2231 * |
2232 * THE FOLLOWING CHECKS TO SEE IF THERE IS A 4K BLK OF |
2233 * RAM LOCATED AT $C000-$CFFF. IF NONE THERE IT LOCATES |
2234 * THE NEXT LOWER 4K BLK AN XLATES ITS ADDR SO IT |
2235 * LOGICALLY RESPONDS TO THE ADDRESS $C---. |
2236 * |
2237 * |
2238 FF80 86 0C LDA #$0C ; PRESET NUMBER HEX "C" |
2239 FF82 E6 A6 FINDC LDB A,Y ; GET ENTRY FROM LRARAM TABLE |
2240 FF84 26 05 BNE FOUNDC ; BRANCH IF RAM THIS PHYSICAL ADDR. |
2241 FF86 4A DECA ; ELSE POINT 4K LOWER |
2242 FF87 2A F9 BPL FINDC ; GO TRY AGAIN |
2243 FF89 20 14 BRA XFERTF |
2244 FF8B 6F A6 FOUNDC CLR A,Y ; CLR XLATION FACTOR OF 4K BLOCK FOUND |
2245 FF8D E7 2C STB $0C,Y ; GIVE IT XLATION FACTOR MOVING IT TO $C--- |
2246 * |
2247 * THE FOLLOWING CODE ADJUSTS THE TRANSLATION |
2248 * FACTORS SUCH THAT ALL REMAINING RAM WILL |
2249 * RESPOND TO A CONTIGUOUS BLOCK OF LOGICAL |
2250 * ADDRESSES FROM $0000 AND UP.... |
2251 * |
2252 FF8F 4F CLRA ; START AT ZERO |
2253 FF90 1F 21 TFR Y,X ; START POINTER "X" START OF "LRARAM" TABLE. |
2254 FF92 E6 A6 COMPRS LDB A,Y ; GET ENTRY FROM "LRARAM" TABLE |
2255 FF94 27 04 BEQ PNTNXT ; IF IT'S ZER0 SKIP |
2256 FF96 6F A6 CLR A,Y ; ELSE ERASE FROM TABLE |
2257 FF98 E7 80 STB ,X+ ; AND ENTER ABOVE LAST ENTRY- BUMP |
2258 FF9A 4C PNTNXT INCA ; GET OFFSET TO NEXT ENTRY |
2259 FF9B 81 0C CMPA #$0C ; LAST ENTRY YET ? |
2260 FF9D 2D F3 BLT COMPRS |
2261 * |
2262 * THE FOLLOWING CODE TRANSFER THE TRANSLATION |
2263 * FACTORS FROM THE LRARAM TABLE TO IC11 ON |
2264 * THE MP-09 CPU CARD. |
2265 * |
2266 FF9F 8E FF F0 XFERTF LDX #IC11 ; POINT TO DAT RAM IC11 |
2267 FFA2 C6 10 LDB #$10 ; GET NO. OF BYTES TO MOVE |
2268 FFA4 A6 A0 FETCH LDA ,Y+ ; GET BYTE AND POINT TO NEXT |
2269 FFA6 A7 80 STA ,X+ ; POKE XLATION FACTOR IN IC11 |
2270 FFA8 5A DECB ; SUB 1 FROM BYTES TO MOVE |
2271 FFA9 26 F9 BNE FETCH ; CONTINUE UNTIL 16 MOVED |
2272 * |
2273 ELSE |
2274 LRA RTS |
2275 START LDS #STACK ; INITIALIZE STACK POINTER |
2276 CLRB |
2277 ENDIF DATOPT |
2277 ENDIF DATOPT |
2278 * |
2279 FFAB 53 COMB ; SET "B" NON-ZERO |
2280 FFAC F7 DF E2 STB ECHO ; TURN ON ECHO FLAG |
2281 FFAF 16 F8 62 LBRA MONITOR ; INITIALIZATION IS COMPLETE |
2282 * |
2283 ** INTERRUPT JUMP VECTORS |
2284 * |
2285 FFB2 6E 9F DF C0 V1 JMP [STACK] |
2286 FFB6 6E 9F DF C4 V2 JMP [SWI2] |
2287 FFBA 6E 9F DF C6 V3 JMP [FIRQ] |
2288 FFBE 6E 9F DF C8 V4 JMP [IRQ] |
2289 FFC2 6E 9F DF CA V5 JMP [SWI] |
2290 * |
2291 * SWI3 ENTRY POINT |
2292 * |
2293 FFC6 1F 43 SWI3E TFR S,U |
2294 FFC8 AE 4A LDX 10,U *$FFC8 |
2295 FFCA E6 80 LDB ,X+ |
2296 FFCC AF 4A STX 10,U |
2297 FFCE 4F CLRA |
2298 FFCF 58 ASLB |
2299 FFD0 49 ROLA |
2300 FFD1 BE DF CC LDX SVCVO |
2301 FFD4 8C FF FF CMPX #$FFFF |
2302 FFD7 27 0F BEQ SWI3Z |
2303 FFD9 30 8B LEAX D,X |
2304 FFDB BC DF CE CMPX SVCVL |
2305 FFDE 22 08 BHI SWI3Z |
2306 FFE0 34 10 PSHS X |
2307 FFE2 EC C4 LDD ,U |
2308 FFE4 AE 44 LDX 4,U |
2309 FFE6 6E F1 JMP [,S++] |
2310 FFE8 37 1F SWI3Z PULU A,B,X,CC,DP |
2311 FFEA EE 42 LDU 2,U |
2312 FFEC 6E 9F DF C2 JMP [SWI3] |
2313 * |
2314 * 6809 VECTORS |
2315 * |
2316 FFF0 ORG $FFF0 |
2317 FFF0 FF B2 FDB V1 USER-V |
2318 FFF2 FF C6 FDB SWI3E SWI3-V |
2319 FFF4 FF B6 FDB V2 SWI2-V |
2320 FFF6 FF BA FDB V3 FIRQ-V |
2321 FFF8 FF BE FDB V4 IRQ-V |
2322 FFFA FF C2 FDB V5 SWI-V |
2323 FFFC FF B2 FDB V1 NMI-V |
2324 FFFE FF 00 FDB START RESTART-V |
0004 END START |
0005 END |
Program + Init Data = 2021 bytes |
Error count = 0 |
/sys09bug/sys09270.s19
0,0 → 1,66
S123F800F814F861FCA1FC9BFCB9FCCEFB8FFB1EFB1AFA2E8EFE62108EDFC0C610A680A71E |
S123F820A05A26F98EE000BFDFE017015BC60C6FE25A26FB308CDDAF6A86D0A7E41F4317A2 |
S123F84004A38EFE721703478EDFD04FC60D6D8527038B04195A2AF617040C8EFE921703A2 |
S123F8602E8EFE991702B3170437847F810D27F11F8981202C09865E1704531F988B401701 |
S123F880044C170447C1602F02C0208EFE29E180270F30028CFE6226F58EFE9B1702F020AB |
S123F8A0C0AD9420BC1F343B17036B292D1F128EFEA11702651F211703A517040FA6A41798 |
S123F8C003A517040717035E2811810827E1811827DD815E2717810D260F39A7A4A1A427AB |
S123F8E0081703E8863F1703E5312120C2313F20BE1702A21F328EDFC0301F200517030BE2 |
S123F90029063420ACE12401391F10C30010C4F034061F20C4F01F01ACE4270517039A27DB |
S123F9200332623934108EFEA11701EEAEE417032E170396C610A68017032C17038E5A2688 |
S123F940F5170386AEE1C610A68081202504817E2302862E1703775A26EE20BC1702B7290D |
S123F9601E8CDFC0241A34108EFFFF8D553510270FA684813F2709A7A0AFA4863FA78439F2 |
S123F980170349863F160346108EDFE3C6088D185A26FB391F43AE4A301F8D262704AF4AD5 |
S123F9A08D0617024816FEB9AE218CDFC0240AA684813F2604A6A4A78486FFA7A0A7A0A717 |
S123F9C0A039108EDFE3C608A6A0ACA127045A26F739313D398D4086E0B7E0468D398601AA |
S123F9E0B7E04186EFB7E0478D2D8601B7E0424FB7E043B7E044B7E0458620B7E0478D17B6 |
S123FA008EC0008D21B6E040A7808CC20026F48EC000AF4A1F343BB6E047858026F9B6E015 |
S123FA2047854027F239B6E047850827F9393436A66244444444108EDFD0E6A654545454F6 |
S123FA40E7E4E6A65358585858A662840FA762EA62E76235B63404C6205A26FD3584BDFC67 |
S123FA60E786111702687FDFE217022A815326F91702238139273D813126F11701A83402F4 |
S123FA80292617019129213410E6E0EBE0EBE46AE46AE4340417018E3504290C3402EBE093 |
S123FAA06AE42705A78020EB5F3502C1FF27BA863F17021A73DFE286131602126FE2170107 |
S123FAC04A3430294DAC6225493001AFE4BDFCE786121701F9ECE4A362270610830020239D |
S123FAE002C620E7648EFEE217002FCB031F98170175AE62170168EB62EB63EB84A6801732 |
S123FB0001656A6426F5531F9817015BAF62ACE426C386141701B73265398D0220713410EE |
S123FB208EFE9317006935901601A11600F81600E51700918DF28DF62902AF4A398D618D1A |
S123FB40E78DEB2902AF48398D728DDC8DE02902AF46398D5E8DD18DD52902AF44398D49E1 |
S123FB608DC68DC72902A743398D6C8DBB8DBC2902A742398D588DB08DB12902A741398D7C |
S123FB805F8DA58DA629048A80A7C43917013FA680810426F7398EFEA58DF41F311600BF93 |
S123FBA08EFEB18DEAAE4820F48EFEC38DE1A6431600B48EFEBD8DD7AE4420E18EFEB78DA3 |
S123FBC0CEAE4620D88EFEAB8DC5AE4A20CF8EFEC98DBCA64120D98EFECE8DB3A64220D007 |
S123FBE08EFED38DAAA6C48EFEDA1600908EFEA117FF278DA18DA98DB08DB88DBF8EFEA12C |
S123FC0017FF178DC08DC78DCE20D58D09294D1F12862D1700B88D0E29421F018D08293CE3 |
S123FC203410A76135908D112932484848481F898D0729283404ABE0398D5B8130251D81B1 |
S123FC40392203803039814125128146220380373981612507816622038057391A023934D1 |
S123FC601035028D0235023402444444448D043502840F8B3081392F028B0720513402C62D |
S123FC8008A68068E42502862D8D438D3F5A26F135826E9FF0007DDFE227068D04847F202C |
S123FCA02D3410BEDFE0A684850126098EE020A684850127EEA60135903402A69FDFE085F5 |
S123FCC0012605B6E020850135828D0086208D493412BEDFE0A684850227FA850826F63585 |
S123FCE002A70135908D13BEDFE08603A7848651A7846D0186FFB7DFE2398EE030CC0000B0 |
S123FD00FDDFFBA702E703E704FDDFFDC602E7017FDFFE861B8D02865934168EE0307DDF52 |
S123FD20FE27048D60200D812024048D092005A7841700AF359681082734811B275A811AA0 |
S123FD401027007C81162738810D10270089810C2724810B270F810A2645FCDFFB5CC1190C |
S123FD60267916008FFCDFFB5D27345A206DB6DFFB272C4A2062B6DFFB4C815027212058AA |
S123FD80CC00002056F6DFFEC13D27148159276E81542731813D2604B7DFFE397FDFFE392B |
S123FDA07DDFFD2604B7DFFD397FDFFE8020814F22EDF6DFFD7FDFFDC020C11822E1201BF1 |
S123FDC0CC00008D16B6DFFBC620E7844CA702815026F77FDFFE394FF6DFFCFDDFFBA702B7 |
S123FDE0E70339FCDFFB4C815026F04F5CC11926EA5A8DE7E6045CC11925015FE704F6DF0B |
S123FE00FB8620F7DFFBE702A7845CC15026F4F6DFFC5CC1192708F7DFFCE7035F20E45F1D |
S123FE20F7DFFBE702F7DFFE3901FB7402FB6903FB7F04FB5E10FB3115FB3D18FB5319FB44 |
S123FE404842F95C45F8FD47F8A54CFA5E50FABC4DF8A852FBED53F8F158F98844F9D55554 |
S123FE60FC92F994F8A7F8A7F8A7F8A7F994FFFFFFFF0D0A000000535953303942554720E1 |
S123FE80312E3720464F52204445322D3730202D20044B0D0A000000043E04574841543FC6 |
S123FEA004202D2004202053503D04202050433D04202055533D04202049593D04202049BC |
S123FEC0583D04202044503D042020413D042020423D04202043433A2004454648494E5A03 |
S108FEE05643533104F8 |
S123FF008EFFF0860FA7804A26FB86F0A7848ED0A0108E55AAEE8410AF8410AC84270B30A6 |
S123FF2089F0008CF0A026ED20D6EF841F104344444444B7FFFD10CEDFC0108EDFD0A72DD9 |
S123FF406F2E86F0A72F860C6FA64A2AFB3089F0008CF0A02722EE84108E55AA10AF84102E |
S123FF60AC8426E9EF84108EDFD01F10444444441F89880FA7A520D586F1108EDFD0A72E26 |
S123FF80860CE6A626054A2AF920146FA6E72C4F1F21E6A627046FA6E7804C810C2DF38E02 |
S123FFA0FFF0C610A6A0A7805A26F953F7DFE216F8626E9FDFC06E9FDFC46E9FDFC66E9FFC |
S123FFC0DFC86E9FDFCA1F43AE4AE680AF4A4F5849BEDFCC8CFFFF270F308BBCDFCE2208A0 |
S113FFE03410ECC4AE446EF1371FEE426E9FDFC294 |
S113FFF0FFB2FFC6FFB6FFBAFFBEFFC2FFB2FF00EB |
S9030000FC |
/sys09bug/sys09bug.asm
24,7 → 24,6
* ADDED: ADM3A VDU DRIVER |
* |
* MODIFIED TO SYS09BUG VER 1.1 |
* FOR: SYSTEM09 FPGA SYSTEM |
* BY: JOHN KENT |
* DATE: 7TH JANUARY 2007 |
* ADDED: 'U' USER EXTENTION COMMANDS AT $F000 |
32,7 → 31,6
* AND REALTIME CLOCK |
* |
* MODIFIED TO SYS09BUG VER 1.2 |
* FOR: SYSTEM09 FPGA SYSTEM |
* BY: JOHN KENT |
* DATE: 21ST MAY 2007 |
* ADDED: COMPACT FLASH BOOT TO FPGA VERSION |
39,7 → 37,6
* REMOVED PORT REDIRECTION ON PUNCH & LOAD |
* |
* Modified to SYS09BUG VER 1.3 |
* FOR: SYSTEM09 FPGA SYSTEM |
* BY: JOHN KENT |
* DATE: 8TH JAN 2008 |
* ADDED: CONDITIONALS FOR SPARTAN3E STARTER BOARD |
46,7 → 43,6
* WITH ONLY 32K OF RAM |
* |
* Modified to SYS09BUG VER 1.4 |
* FOR: SYSTEM09 FPGA SYSTEM |
* BY: JOHN KENT |
* DATE: 3RD FEB 2008 |
* ADDED: CONDITIONALS FOR XESS BOARD WITH IDE |
54,13 → 50,11
* 16 BIT IDE DISK BOOT STRAP ROUTINE |
* |
* Modified to SYS09BUG VER 1.5 |
* FOR: SYSTEM09 FPGA SYSTEM |
* BY: JOHN KENT |
* DATE: 7TH SEP 2008 |
* ADDED: ADDED "B3-S2+" STRING |
* |
* Modified to SYS09BUG VER 1.6 |
* FOR: SYSTEM09 FPGA SYSTEM |
* BY: JOHN KENT |
* DATE: 2ND DEC 2008 |
* ADDED: ADDED HARDWARE FLOW CONTROL |
67,6 → 61,11
* |
* CHANGED: SEPARARTED OPTIONS EQUATES AND BODY INTO SEPARATE FILES |
* |
* Modified to SYS09BUG VER 1.7 |
* BY: JOHN KENT |
* DATE: 16TH OCT 2010 |
* ADDED: "DE2-70" STRING |
* |
* *** COMMANDS *** |
* |
* CONTROL A = ALTER THE "A" ACCUMULATOR |
1263,7 → 1262,7
CMPA #$39 ; IS IT < OR = "9" ? |
BLE OUTC ; IF LESS, OUTPUT IT |
ADDA #7 ; IF > MAKE ASCII LETTER |
OUTC BRA OUTCH ; OUTPUT CHAR |
OUTC BRA OUTCH ; OUTPUT CHAR |
* |
* BINARY / ASCII --- THIS ROUTINE |
* OUTPUTS A BYTE IN ENHANCED |
2038,28 → 2037,31
* PRINTABLE MESSAGE STRINGS |
* |
MSG1 FCB $D,$A,$0,$0,$0 * 0, CR/LF, 0 |
FCC 'SYS09BUG 1.6 FOR ' |
IFD SWTOPT` |
FCC 'SWTPC ' |
FCC 'SYS09BUG 1.7 FOR ' |
IFD SWTOPT |
FCC 'SWTPC' |
ENDIF SWTOPT |
IFD ADSOPT |
FCC 'ADS6809 ' |
FCC 'ADS6809' |
ENDIF ADSOPT |
IFD B3SOPT |
FCC 'B3-S2+ ' |
FCC 'B3-S2+' |
ENDIF B3SOPT |
IFD B5XOPT |
FCC 'B5-X300 ' |
FCC 'B5-X300' |
ENDIF B5XOPT |
IFD S3SOPT |
FCC 'S3STARTER ' |
FCC 'S3STARTER' |
ENDIF S3SOPT |
IFD S3EOPT |
FCC 'S3E ' |
FCC 'S3E' |
ENDIF S3EOPT |
IFD XESOPT` |
FCC 'XESS ' |
IFD XESOPT |
FCC 'XESS' |
ENDIF XESOPT |
IFD DE270OPT |
FCC 'DE2-70' |
ENDIF DE270OPT |
FCC ' - ' |
FCB 4 |
MSG2 FCB 'K,$0D,$0A,$00,$00,$00,$04 ; K,<CR>,<LF>,3 NULS,<EOT> |
/sys09bug/sys09equ.asm
21,7 → 21,12
MONEXT EQU $F000 START OF EXTENDED COMMANDS |
EXTCMD EQU $00 EXTENDED OFFSET |
ENDIF XESOPT |
*************************************************** |
IFD DE270OPT |
MONEXT EQU $F000 START OF EXTENDED COMMANDS |
EXTCMD EQU $00 EXTENDED OFFSET |
ENDIF DE270OPT |
************************************************** |
************************************************** |
|
IFD SWTOPT |
* |
45,7 → 50,7
* |
IFD B3SOPT |
* |
* BURCHED B3-SPARTAN2 |
* BURCHED SPARTAN 2 B3+ |
* |
ACIAOPT EQU $FF ACIA AT PORT 0 |
PS2OPT EQU $FF PS2 KEYBOARD AT $E020 |
57,7 → 62,7
* |
IFD B5XOPT |
* |
* BURCHED B5-X300 |
* BURCHED SPARTAN 2 B5-X300 |
* |
ACIAOPT EQU $FF ACIA AT PORT 0 |
PS2OPT EQU $FF PS2 KEYBOARD AT $E020 |
91,7 → 96,7
* |
IFD XESOPT |
* |
* XESS XSA-3S1000 & XST-3.0 |
* XESS SPARTAN 3 XSA-3S1000 & XST-3.0 |
* |
ACIAOPT EQU $FF ACIA AT PORT 0 |
PS2OPT EQU $FF PS2 KEYBOARD AT $E020 |
102,7 → 107,19
EXTOPT EQU $FF EXTENDED COMMANDS |
ENDIF XESOPT |
* |
IFD DE270OPT |
* |
* TERASIC CYCLONE 2 DE2-70 |
* |
ACIAOPT EQU $FF ACIA AT PORT 0 |
PS2OPT EQU $FF PS2 KEYBOARD AT $E020 |
VDUOPT EQU $FF VDU AT $E030 |
CF8OPT EQU $FF COMPACT FLASH AT $E040 |
DATOPT EQU $FF DYNAMIC ADDRESS TRANSLATION |
EXTOPT EQU $FF EXTENDED COMMANDS |
ENDIF DE270OPT |
* |
* |
IFD ACIAOPT |
* |
*************************************************** |
/sys09bug/sys09270.sh
0,0 → 1,2
../../Tools/as09/as09_dos.exe sys09270.asm -l > sys09270.lst |
../../Tools/epedit/epedit.exe sys09270.aux |
/sys09bug/sys09270.txt
0,0 → 1,5
NAM SYS09BUG FOR TERASIC CYCLONE II DE2-70 |
INCLUDE "opt_270.txt" |
INCLUDE "sys09equ.txt" |
INCLUDE "sys09bug.txt" |
END |
/sys09bug/sys09270.asm
0,0 → 1,5
NAM SYS09BUG FOR TERASIC CYCLONE II DE2-70 |
INCLUDE "opt_270.asm" |
INCLUDE "sys09equ.asm" |
INCLUDE "sys09bug.asm" |
END |
/sys09bug/sys09270.hex
0,0 → 1,129
:10000000F814F861FCA1FC9BFCC5FCE0FB8FFB1E17 |
:10001000FB1AFA2E8EFE74108EDFC0C610A680A7C3 |
:10002000A05A26F98EE000BFDFE017015BC60C6F17 |
:10003000E25A26FB308CDDAF6A86D0A7E41F431757 |
:1000400004B58EFE841703478EDFD04FC60D6D8535 |
:1000500027038B04195A2AF617040C8EFEA41703E3 |
:100060002E8EFEAB1702B3170437847F810D27F164 |
:100070001F8981202C09865E1704651F988B401705 |
:10008000045E170459C1602F02C0208EFE3BE18040 |
:10009000270F30028CFE7426F58EFEAD1702F0207D |
:1000A000C0AD9420BC1F343B17036B292D1F128E4B |
:1000B000FEB31702651F211703A5170421A6A41775 |
:1000C00003A517041917035E2811810827E1811879 |
:1000D00027DD815E2717810D260F39A7A4A1A4274C |
:1000E000081703FA863F1703F7312120C2313F205A |
:1000F000BE1702A21F328EDFC0301F200517030B70 |
:1001000029063420ACE12401391F10C30010C4F0CB |
:1001100034061F20C4F01F01ACE427051703A627EF |
:100120000332623934108EFEB31701EEAEE41703CA |
:100130002E1703A8C610A68017032C1703A05A2653 |
:10014000F5170398AEE1C610A68081202504817EB4 |
:100150002302862E1703895A26EE20BC1702B729E0 |
:100160001E8CDFC0241A34108EFFFF8D55351027EA |
:100170000FA684813F2709A7A0AFA4863FA7843993 |
:1001800017035B863F160358108EDFE3C6088D18F1 |
:100190005A26FB391F43AE4A301F8D262704AF4A2B |
:1001A0008D0617024816FEB9AE218CDFC0240AA6C0 |
:1001B00084813F2604A6A4A78486FFA7A0A7A0A7A2 |
:1001C000A039108EDFE3C608A6A0ACA127045A26EA |
:1001D000F739313D39CC0006FDE11ECC0002FDE1CE |
:1001E0001ECC00E0FDE10C8D2ECC0001FDE1045F92 |
:1001F000FDE106FDE108FDE10AC620FDE10E8D17D7 |
:100200008EC0008D21FCE100E7808CC10026F48EB9 |
:10021000C000AF4A1F343BFCE10EC58026F9FCE16B |
:100220000EC54027F239FCE10EC50827F9393436EE |
:10023000A66244444444108EDFD0E6A6545454547D |
:10024000E7E4E6A65358585858A662840FA762EA16 |
:1002500062E76235B63404C6205A26FD3584BDFCFB |
:10026000F9861117027A7FDFE217022A815326F9F5 |
:100270001702238139273D813126F11701A8340265 |
:10028000292617019129213410E6E0EBE0EBE46A1E |
:10029000E46AE4340417018E3504290C3402EBE0DF |
:1002A0006AE42705A78020EB5F3502C1FF27BA86E5 |
:1002B0003F17022C73DFE286131602246FE2170148 |
:1002C0004A3430294DAC6225493001AFE4BDFCF918 |
:1002D000861217020BECE4A362270610830020238A |
:1002E00002C620E7648EFEF417002FCB031F981779 |
:1002F0000175AE62170168EB62EB63EB84A68017B1 |
:1003000001656A6426F5531F9817015BAF62ACE480 |
:1003100026C386141701C93265398D022071341045 |
:100320008EFEA517006935901601B31600F8160069 |
:10033000E51700918DF28DF62902AF4A398D618D56 |
:10034000E78DEB2902AF48398D728DDC8DE02902F3 |
:10035000AF46398D5E8DD18DD52902AF44398D4997 |
:100360008DC68DC72902A743398D6C8DBB8DBC29E5 |
:1003700002A742398D588DB08DB12902A741398D20 |
:100380005F8DA58DA629048A80A7C439170151A6BF |
:1003900080810426F7398EFEB78DF41F311600BF19 |
:1003A0008EFEC38DEAAE4820F48EFED58DE1A643C5 |
:1003B0001600B48EFECF8DD7AE4420E18EFEC98DDF |
:1003C000CEAE4620D88EFEBD8DC5AE4A20CF8EFE65 |
:1003D000DB8DBCA64120D98EFEE08DB3A64220D095 |
:1003E0008EFEE58DAAA6C48EFEEC1600908EFEB39E |
:1003F00017FF278DA18DA98DB08DB88DBF8EFEB34F |
:1004000017FF178DC08DC78DCE20D58D09294D1FA3 |
:1004100012862D1700CA8D0E29421F018D08293C16 |
:100420003410A76135908D112932484848481F89FA |
:100430008D0729283404ABE0398D5B8130251D817F |
:1004400039220380303981412512814622038037C9 |
:100450003981612507816622038057391A023934B0 |
:100460001035028D0235023402444444448D043573 |
:1004700002840F8B3081392F028B0720633402C630 |
:1004800008A68068E42502862D8D558D515A26F1E7 |
:1004900035826E9FF0007DDFE227068D04847F2089 |
:1004A0003F34108611A79FDFE0BEDFE0A684850100 |
:1004B00026098EE020A684850127EE8651A79FDFBE |
:1004C000E0A601359034028611A79FDFE0A69FDFEA |
:1004D000E085012605B6E020850135828D00862065 |
:1004E0008D493412BEDFE0A684850227FA850826EE |
:1004F000F63502A70135908D13BEDFE08603A78491 |
:100500008651A7846D0186FFB7DFE2398EE030CCDB |
:100510000000FDDFFBA702E703E704FDDFFDC602E5 |
:10052000E7017FDFFE861B8D02865934168EE03090 |
:100530007DDFFE27048D60200D812024048D09209D |
:1005400005A7841700AF359681082734811B275AE9 |
:10055000811A1027007C81162738810D1027008909 |
:10056000810C2724810B270F810A2645FCDFFB5CC9 |
:10057000C119267916008FFCDFFB5D27345A206DE8 |
:10058000B6DFFB272C4A2062B6DFFB4C81502721C7 |
:100590002058CC00002056F6DFFEC13D27148159BB |
:1005A000276E81542731813D2604B7DFFE397FDF76 |
:1005B000FE397DDFFD2604B7DFFD397FDFFE8020B9 |
:1005C000814F22EDF6DFFD7FDFFDC020C11822E163 |
:1005D000201BCC00008D16B6DFFBC620E7844CA79D |
:1005E00002815026F77FDFFE394FF6DFFCFDDFFB8F |
:1005F000A702E70339FCDFFB4C815026F04F5CC1BA |
:100600001926EA5A8DE7E6045CC11925015FE70463 |
:10061000F6DFFB8620F7DFFBE702A7845CC15026EC |
:10062000F4F6DFFC5CC1192708F7DFFCE7035F2065 |
:10063000E45FF7DFFBE702F7DFFE3901FB7402FB43 |
:100640006903FB7F04FB5E10FB3115FB3D18FB5378 |
:1006500019FB4842F95C45F8FD47F8A54CFA5E5095 |
:10066000FABC4DF8A852FBED53F8F158F98844F95B |
:10067000D555FC92F994F8A7F8A7F8A7F8A7F9942C |
:10068000FFFFFFFF0D0A0000005359533039425558 |
:100690004720312E3720464F52204445322D3730E7 |
:1006A000202D20044B0D0A000000043E0457484151 |
:1006B000543F04202D2004202053503D042020507E |
:1006C000433D04202055533D04202049593D04203A |
:1006D0002049583D04202044503D042020413D0441 |
:1006E0002020423D04202043433A20044546484907 |
:1006F0004E5A564353310400000000000000000031 |
:100700008EFFF0860FA7804A26FB86F0A7848ED046 |
:10071000A0108E55AAEE8410AF8410AC84270B3045 |
:1007200089F0008CF0A026ED20D6EF841F10434402 |
:10073000444444B7FFFD10CEDFC0108EDFD0A72D9C |
:100740006F2E86F0A72F860C6FA64A2AFB3089F001 |
:10075000008CF0A02722EE84108E55AA10AF8410D2 |
:10076000AC8426E9EF84108EDFD01F10444444444B |
:100770001F89880FA7A520D586F1108EDFD0A72E60 |
:10078000860CE6A626054A2AF920146FA6E72C4F08 |
:100790001F21E6A627046FA6E7804C810C2DF38E5F |
:1007A000FFF0C610A6A0A7805A26F953F7DFE2167D |
:1007B000F8626E9FDFC06E9FDFC46E9FDFC66E9FC4 |
:1007C000DFC86E9FDFCA1F43AE4AE680AF4A4F586C |
:1007D00049BEDFCC8CFFFF270F308BBCDFCE220859 |
:1007E0003410ECC4AE446EF1371FEE426E9FDFC290 |
:1007F000FFB2FFC6FFB6FFBAFFBEFFC2FFB2FF00E7 |
:00000001FF |
/sys09bug/sys09270.aux
0,0 → 1,7
t m |
l SYS09270.S19 |
c f800 ffff 0 |
t i |
s sys09270.hex 0 800 |
q |
|
/Flex9/flex9ide.sh
1,3 → 1,3
../../Tools/as09/as09.exe flex9ide.asm -l > flex9ide.lst |
../../Tools/epedit/epedit.exe flex9ide.aux |
|
../../Tools/as09/as09_dos.exe flex9ide.asm -l > flex9ide.lst |
../../Tools/epedit/epedit.exe flex9ide.aux |
|
/Flex9/flex9ram.asm
9,5 → 9,5
INCLUDE "f9-cli.txt" |
INCLUDE "f9-monio.txt" |
INCLUDE "f9-fms.txt" |
INCLUDE "f9-dkram.txt" |
INCLUDE "f9-monex.txt" |
END COLDS |
/Flex9/F9-MONEX.S19
0,0 → 1,66
S123DE000E570E5B0E5F0E630E6C0E9F0EA30EA70EBF0EC300000000000000000000000027 |
S10BDE20000102031040FFFFA2 |
S1230000079C0117013F013D013D013D013D013D0052005200520117013F013D013D013DA3 |
S1230020013D013D005200520052005200520052005200520052005200520052005201789D |
S123004001E70247024C024C024C024C0052005200525F5D1CFE396E9FDE326E9FDE346E84 |
S12300609FDE368D072701396E9FDE383430E603F7DE1E8EDE2AA68581FF26083530C60FC8 |
S12300805D1A0139C6143D8E0002308B108EDE32C614A680A7A05A26F935306E9FDE3A6EE3 |
S12300A09FDE3C6E9FDE3E4FB7DE1E8EDE1B8DBC2504AD9FDE40B6DE1E4C810426EA396EBB |
S12300C09FDE426E9FDE441FA8B7DE221A50CEDE2AF6DE1EE6C5CEDE2EB6DE1FABC584F062 |
S12300E0A7E2B6DE208001880F840FABE09700B6DE1F840F8B005F1F03398600880F9700B3 |
S1230100B6DE221F8A39B7DE1FF7DE201CFE1A0439C6405D1A0139347017FFEA17FFA81000 |
S12301208EDE465FA6C0A7A05A26F917FFCC108EDE465FA6A0A7805A26F95F35F05F39344B |
S12301407017FFC2CEDE2AF6DE1EE6C5C1012707C100270316FFBA108EDE465FA680A7A0A8 |
S12301605A26F917FF61108EDE465FA6A0A7C05A26F917FF855F35F0340434027FDE217FBA |
S1230180DE228673BD0281244CB6DE1EBD028124443502BD0281243D3502BD028124365F50 |
S12301A0BD02652430A780BBDE22B7DE2224037CDE215A26EBBD0265241B3402BD0265243C |
S12301C0141F89350210B3DE21260E8606BD028124035F200DC61020098615BD028124F5C0 |
S12301E0C609F7DE215D39340434027FDE217FDE228672BD028124DDB6DE1EBD028124D511 |
S12302003502BD028124CE3502BD028124C75FA680BD028124BFBBDE22B7DE2224037CDE74 |
S1230220215A26EBB6DE21BD028124A9B6DE22BD028124A1BD0265249C810626035F20029C |
S1230240C60AF7DE215D39F6DE215D398651BD0281240CBD02652407810626035F2004C624 |
S1230260101A015D3934308E03E8108E04E2960047250A313F26F7301F26EF35B0960135AA |
S1230280B0343034028E03E8108E04E296004747250C313F26F6301F26EE350235B035027C |
S12302A0970135B00A0D466F726D6174696E672052414D6469736B2E2E2E20040A0D045239 |
S12302C0616D6469736B206E6F7420616C6C6F63617465642120048E02A4BD04508EDE2A47 |
S12302E05FA6858101270C5CC10426F58E02BCBD045039F7DE1E8EDE1B9D6C8EDE464F5F06 |
S1230300A7805A26FB7FDE1F8601B7DE208EDE46B6DE1FA784B6DE204C810F26046C8486BF |
S123032001A701B6DE1FF6DE209D5B7CDE20B6DE20810F26D88601B7DE207CDE1FB6DE1F4D |
S1230340814026C98EDE46863FC60E9D578EDE466F846F01863FC60E9D5B8EDE464FC60E2F |
S12303609D578EDE466F846F014FC60E9D5B8EDE464FC6039D578EDE466F846F01CC524123 |
S1230380ED8810CC4D44ED8812CC4953ED8814CC4B20ED8816CC0001ED881BCC0101ED889D |
S12303A01D863FC60EED881FED8826CC0372ED88218601A788238607A788248607A78825E3 |
S12303C04FC6039D5B8EDE464FC6019D578EDE4686AAA7848655A7014FC6010E5B080842EC |
S12303E06F6F74696E6720696E7465726E616C20464C45582E2E2E2E0D0A048E03DDBD049B |
S1230400508ED3E5108E0424ECA1ED818CD3FD26F78EDE00108E043CECA1ED818CDE1E2615 |
S1230420F77ECD00045C046800020008046804680468046404680460045404580E570E5BA2 |
S12304400E5F0E630E6C0E9F0EA30EA70EBF0EC36E9F00006E9F00006E9F00006E9F00005B |
S12304606E9F00006E9F00003953657269616C20524F4D204469736B2075706C6F61642047 |
S12304802E2E2E0D0A04524F4D204469736B204C6F616465640D0A048E0469BD0450860004 |
S12304A0B7DE1E4FC601B7DE1FF7DE2017FC185FBD04D3A7C05A26F817FC3FB6DE1FF6DEF0 |
S12304C0205CC10F26E0C6014C813026D98E04867E045034048D0E484848481F898D0634B7 |
S12304E004ABE03584BD050B29FB80302BF781092F0A81112BEF81162EEB800739960085F3 |
S123050001398603970086119700398610B7DE277FDE287FDE299600850126088578270942 |
S12305208DE020E796011C02397ADE2926E87ADE2826E37ADE2726DE4F1A0239340296004A |
S123054085022608857827F68DB820F235029701390D0A586D6F64656D20524F4D2044690D |
S1230560736B2055706C6F6164040D0A55706C6F616420436F6D706C657465040D0A55705B |
S12305806C6F6164204572726F72048E055117FEBF8601B7DE238E05F9BFDE258600B7DE29 |
S12305A01E4FC601B7DE1FF7DE2017FB1A5F17002B2520A7C05A26F617FB3FB6DE1FF6DE93 |
S12305C0205CC10F26DEC6014C813026D78E056A7E045017FB248E057C16FE743410BEDE8A |
S12305E02517FF27280A861517FF518E05F920F1AD8426EDBFDE253590810126068E06199E |
S12306001CFA3981042608860617FF301A0539811826031A05391CFA39B1DE2326068E06CF |
S12306202F1CFA39861517FF138E05F91CFA3943B1DE2326EF7FDE218680B7DE248E06437B |
S12306401CFA393402BBDE21B7DE2135027ADE2426038E065A1CFE1A0439B1DE2126077C0D |
S1230660DE238606200D34041F305AC4801F033504861517FEC68E05F91CFA3908084C6F20 |
S1230680616420524F4D206469736B2066726F6D20636F6E6669672050524F4D2E04466F09 |
S12306A0756E642053594E432C206C6F6164696E6720646174612E2E2E0A0D04524F4D20FB |
S12306C04469736B204C6F616465642E0A0D04524F4D204469736B204E6F7420466F756E37 |
S12306E0642E0A0D048E067CBD04508D5A108E00208E00008D6C8D7C2715301F8C000026B6 |
S1230700F3311F108C000026EB8E06CF7E04508E069EBD04504FB7DE1EC601B7DE1FF7DE1B |
S12307202017F9A35F8D67A7C05A26F917F9CBB6DE1FF6DE205CC10F26E1C6014C81302610 |
S1230740DA8E06BC7E045086009700860097008E0000301F8C000026FBBFDF46BFDF4839D2 |
S1230760860097008600970096004478DF493979DF4879DF4779DF46CC000010B3DF4826CF |
S12307800CCC000010B3DF46393404C6088DD35A2600B6DF49358417FCBE847F1F898620BD |
S12307A017FCB1C1602F07C0208E07C4E180271230028C07D326FA8E07D316FC936E94423E |
S11A07C003FB4C04984602D75006E558058B57484154203F0A0D0448 |
S9030000FC |
/Flex9/f9-monex.txt
0,0 → 1,1304
* |
** FLEX 9 DISK DRIVERS |
* |
* FOR SYS09BUG ON THE |
* DIGILENT SPARTAN 3 STARTER BOARD AND |
* TERASIC CYCLONE 2 DE1 BOARD |
* WITH I/O MAPPED AT $XE000 |
* AND ROM MAPPED AT $XF000 |
* THE DIGILENT SPARTAN 3 STARTER BOARD HAS 1MBYTE OF SRAM |
* THE TERASIC CYCLONE 2 DE1 BOARD HAS 512KBYTE OF SRAM |
* THE FIRST 64K IS USED BY FLEX, |
* THE SECOND 128K IS USED AS A ROM DISK |
* THE REMAINING RAM IS USED FOR A RAM DISK |
* |
* |
CFLAG EQU $01 CARRY FLAG |
VFLAG EQU $02 OVERFLOW FLAG |
ZFLAG EQU $04 ZERO FLAG |
NFLAG EQU $08 NEGATIVE FLAG |
IFLAG EQU $10 IRQ MASK CC |
HFLAG EQU $20 HALF CARRY |
FFLAG EQU $40 FIRQ MASK CC |
EFLAG EQU $80 ENTIRE FLAG |
* |
MAPPAG EQU $00 PAGE $0000 DAT ADDRESS |
DATREG EQU IC11 DAT REGISTERS |
* |
* Serial Port |
* |
ACIAC1 EQU ACIAS |
ACIAD1 EQU ACIAS+1 |
DELCON EQU 1250 Delay (Processor clock in MHz * 50) |
* |
* XMODEM Control characters |
* |
SOH EQU $01 |
EOT EQU $04 |
ACK EQU $06 |
NAK EQU $15 |
CAN EQU $18 |
* |
* DRIVE GEOMETRY |
* |
EMAXSEC EQU 14 ROM DISK |
EMAXTRK EQU 48 3 * 16 * 14 * 256 = 172,032 Bytes |
ETOTSEC EQU EMAXTRK*EMAXSEC-EMAXSEC |
* |
RMAXSEC EQU 14 RAM DISK |
*RMAXTRK EQU 192 12 * 16 * 14 * 256 = 688,128 Bytes Digilent Spartan 3 |
RMAXTRK EQU 64 4 * 16 * 14 * 256 = 229,376 Bytes Terasic Cyclone 2 |
RTOTSEC EQU RMAXTRK*RMAXSEC-RMAXSEC |
* |
* DRIVE TYPES |
* |
DTYPROM EQU 0 ROM DISK |
DTYPRAM EQU 1 RAM DISK |
DTYPFLS EQU 2 FLASH DISK |
DTYPNET EQU 3 FLEXNET DISK |
* |
ORG $DE00 |
* |
* DISK DRIVER JUMP TABLE LAST UPDATE: 22/12/2006 |
* Disk driver for RAM Disk. |
* |
* 14 SECTORS PER TRACK |
* 16 * N TRACKS PER DISK |
* |
* ROM DISK OCCUPIES $10000 - $1E000 ... $30000 - $3E000 |
* RAM DISK OCCUPIES $40000 - $4E000 ... $F0000 - $FE000 |
* Track Buffer page mapped at $E000 - $EFFF |
* MAPPAG = $00 = 0 x $1000 (4 K pages) |
|
* ON SWTPC ROM AT $XF000 AND IO AT $XE000 |
* APPEARS THROUGHOUT THE MEMORY SO MUST BE SKIPPED OVER |
* WHEN USING RAM AS A RAMDISK. |
* THE MSN OF THE TRACK MAPS INTO THE MSN OF THE DAT |
* THE LSN OF THE TRACK NUMBER INDEXES INTO THE 4K RAM PAGE |
* THE SECTOR MAPS INTO THE LSN OF THE DAT WHICH IS INVERTED |
* |
* |
* |
* FLEX disk jump table. |
* |
READ JMP READSC |
WRITE JMP WRITSC |
VERIFY JMP BUSY |
RESTOR JMP RESTR1 |
DRIVE JMP DRVSEL |
DRVRDY JMP CHKRDY |
QUICK JMP CHKQIK |
COLDDR JMP DINIT |
WARMDR JMP DWARM |
SEEK JMP SEEKTS |
* |
* RAM SPACE |
* |
DRVNUM FCB 0 |
TRACK FCB 0 |
SECTOR FCB 0 |
CHKSUM FCB 0 |
CCSAVE FCB 0 |
BLKNUM FCB 0 Xmodem block number |
BYTCNT FCB 0 Xmodem byte count |
XSTATE FDB 0 Xmodem State Vector |
DELCNT FCB $00,$00,$00 Xmodem Poll timer |
* |
* Disc driver type table. |
* Indexed by drive number |
* |
DTYPTAB FCB DTYPROM Drive 0 (ROM Disk) |
FCB DTYPRAM Drive 1 (RAM Disk) |
FCB DTYPFLS Drive 2 (FLASH Disk) |
FCB DTYPNET Drive 3 (NETPC Disk) |
* |
* RAM Disk offset |
* Indexed by drive type |
* |
DOFFTAB FCB $10 ROM Disk $10000 |
FCB $40 RAM DISK $40000 |
FCB $FF Flash Disk |
FCB $FF NETPC Disk |
* |
REAVEC RMB 2 Disc driver jump table. |
WRIVEC RMB 2 |
VERVEC RMB 2 |
RSTVEC RMB 2 |
DRVVEC RMB 2 |
CHKVEC RMB 2 |
QUIVEC RMB 2 |
INIVEC RMB 2 |
WARVEC RMB 2 |
SEEVEC RMB 2 |
* |
* SECTOR BUFFER |
* |
BUFFER RMB 256 |
SYNCREG RMB 4 Prom input register |
* |
**************************************** |
* |
* START OF EXTENSION COMMANDS |
* |
**************************************** |
* |
ORG MONEXT |
FDB NEXTEXT Jump to next extended command |
* |
* |
***************************************** |
* Disk drivers * |
* ------------ * |
* The system dependant code for the * |
* disc drivers fits here. Two tables * |
* must be included. These are DTYPTAB a * |
* four byte table that defines which of * |
* the (up to four) following sets of * |
* jump tables to use, and TABSRT the * |
* jump tables themselves. For a full * |
* description of the floppy drivers see * |
* section 4 (pp9-14) of the general * |
* Flex adaptation guide. * |
***************************************** |
* |
* Mass storage drivers for embedded applications. |
* |
* Jump tables. |
TABSRT FDB EREAD Drive type 0 (ROM disk). |
FDB EWRITE |
FDB ECHECK |
FDB ECHECK |
FDB ECHECK |
FDB ECHECK |
FDB ECHECK |
FDB DDUMMY |
FDB DDUMMY |
FDB DDUMMY |
* |
FDB EREAD Drive type 1 (RAM disk). |
FDB EWRITE |
FDB ECHECK |
FDB ECHECK |
FDB ECHECK |
FDB ECHECK |
FDB ECHECK |
FDB DDUMMY |
FDB DDUMMY |
FDB DDUMMY |
* |
FDB DDUMMY Drive type 2 (External Flash disk). |
FDB DDUMMY |
FDB DDUMMY |
FDB DDUMMY |
FDB DDUMMY |
FDB DDUMMY |
FDB DDUMMY |
FDB DDUMMY |
FDB DDUMMY |
FDB DDUMMY |
* |
FDB NREAD Drive type 3 (NetPC drive via serial port). |
FDB NWRITE |
FDB NVERIFY |
FDB NCHECK |
FDB NCHECK |
FDB NCHECK |
FDB NCHECK |
FDB DDUMMY |
FDB DDUMMY |
FDB DDUMMY |
* |
* |
* Dummy routine (no errors). |
DDUMMY CLRB |
TSTB Set (z)=1 |
ANDCC #$FF-CFLAG Set (c)=0 |
RTS |
* * |
************************** |
* Main Flex entry points * |
************************* |
* |
* Read sector routine. |
* Entry: (X) = address where sector is to be placed. |
* (A) = Track number. |
* (B) = Sector number. |
* Exit: (B) = Error code (z)=1 if no error. |
READSC JMP [REAVEC] |
* |
* Write track routine. |
* Entry: (X) = Address of area of memory from which the data will be taken. |
* (A) = Track number. |
* (B) = Sector number. |
* Exit: (B) = Error condition, (Z)=1 no an error. |
WRITSC JMP [WRIVEC] |
* |
* Verify sector routine. |
* Entry: no parameters. |
* Exit: (B) = Error condition (Z)=1 if no error. |
BUSY JMP [VERVEC] |
* |
* Restore drive to track 00. |
* Entry: (X) = FCB address (3,X contains drive number). |
* Exit: (B) = Error condition, (Z)=1 if no error. |
RESTR1 BSR DRVSEL Select drive first. |
BEQ RST1 |
RTS |
RST1 JMP [RSTVEC] |
* |
* Select current drive. |
* Entry: (X) = FCB address (3,X contains drive number). |
* Exit: (B) = Error condition, (Z)=0 and (c)=1 if error. |
* (B) = $0F if non existant drive. |
DRVSEL PSHS X,Y |
LDB 3,X Get driver type. |
STB DRVNUM |
LDX #DTYPTAB |
LDA B,X |
CMPA #$FF Is the drive nonexistant? |
BNE DRIVE1 |
PULS X,Y |
LDB #$0F |
TSTB |
ORCC #$01 |
RTS |
* |
DRIVE1 LDB #20 Get correct table start address. |
MUL |
LDX #TABSRT |
LEAX D,X |
LDY #REAVEC Copy table into ram. |
LDB #20 |
DRIVE2 LDA 0,X+ |
STA 0,Y+ |
DECB |
BNE DRIVE2 |
PULS X,Y |
JMP [DRVVEC] |
* |
* Check for drive ready. |
* Entry: (X) = FCB address (3,X contains drive number)> |
* Exit: (B) = Error condition, (Z)=0 AND (C)=1 if drive is not ready. |
CHKRDY JMP [CHKVEC] |
* |
* Quick drive ready check. |
* Entry: (X) = FCB address (3,X contains drive number). |
* Exit: (B) = Error condition, (Z)=0 AND (c)=1 if drive not ready. |
CHKQIK JMP [QUIVEC] |
* |
* Init (cold start). |
* Entry: no parameters. |
* Exit: no change. |
DINIT CLRA |
DINIT1 STA DRVNUM Init each valid drive in turn. |
LDX #DRVNUM-3 |
BSR DRVSEL |
BCS DINIT2 |
JSR [INIVEC] |
DINIT2 LDA DRVNUM |
INCA |
CMPA #4 |
BNE DINIT1 |
RTS |
* |
* Warm start. |
* Entry: no parameters. |
* Exit: no change. |
DWARM JMP [WARVEC] |
* |
* Seek track. |
* Entry: (A) = Track number. |
* (B) = Sector number. |
* Exit: (B) = Error condition, (Z)=1 if no error. |
SEEKTS JMP [SEEVEC] |
* |
* |
***************************************************** |
* ROMdisk drivers * |
* --------------- * |
* Drivers to support a ROMdisk in the external RAM * |
* of the SYS09. The ROMdisk base address is $10000 * |
***************************************************** |
* Dummy return for ROM disk (write protected!) |
* |
* MAP RAM DISK INTO MEMORY SPACE |
* |
MAPIN TFR CC,A ; Save state of interrupt masks |
STA CCSAVE |
ORCC #FFLAG+IFLAG ; Mask interrupts while IO mapped out |
LDU #DTYPTAB ; Point to Drive Type table |
LDB DRVNUM ; Get working drive number |
LDB B,U |
LDU #DOFFTAB |
LDA TRACK |
ADDA B,U ; Add Base offset into RAM |
ANDA #$F0 ; Mask MSN |
STA ,-S ; Save A on stack |
* |
LDA SECTOR |
SUBA #1 ; Sectors 1 to 14 => 0 to 13 |
EORA #$0F ; Complement LSNybble |
ANDA #$0F |
* |
ADDA ,S+ ; Add sector to LSN of Track and pop |
STA DATREG+MAPPAG |
* |
LDA TRACK ; LSN of Track indexes into 4K page |
ANDA #$0F |
ADDA #MAPPAG*16 |
CLRB |
TFR D,U |
RTS |
* |
* MAP RAM DISK OUT OF MEMORY |
* |
MAPOUT LDA #MAPPAG ; Point to the Flex page |
EORA #$0F ; Complement LSNybble |
STA DATREG+MAPPAG ; map in Flex page |
LDA CCSAVE ; restore interrupt masks |
TFR A,CC |
RTS |
* |
* Seek track and sector |
* A holds track number (0-32) |
* B holds sector number (1-14) |
* |
ESEEK STA TRACK |
STB SECTOR |
ANDCC #$FE ; CLEAR CARRY |
ORCC #$04 ; SET Z |
RTS |
* |
* MARK DISK READ ONLY |
* |
EDUMMY LDB #$40 |
TSTB |
ORCC #$01 |
RTS |
* |
EREAD PSHS X,Y,U push sequentialy to preserve order on stack |
LBSR ESEEK |
LBSR MAPIN build external ram address |
* |
LDY #BUFFER |
CLRB |
ERLOOP1 LDA 0,U+ move 256 bytes to buffer from external RAM |
STA 0,Y+ |
DECB |
BNE ERLOOP1 |
* |
LBSR MAPOUT |
* |
LDY #BUFFER |
CLRB |
ERLOOP2 LDA 0,Y+ move 256 bytes from buffer to Flex RAM |
STA 0,X+ |
DECB |
BNE ERLOOP2 |
* |
CLRB |
PULS X,Y,U,PC restore all registers |
* |
* check for marker bytes $AA55 in first bytes of first track/sector |
* |
*ECHECK CLRA |
* LDB #1 |
* LDX #BUFFER |
* BSR EREAD |
* LDD BUFFER |
* CMPD #$AA55 |
* BNE EERR |
* LBRA DDUMMY |
*EERR LDB #$80 not ready bit set |
* TSTB |
* ORCC #$01 |
* RTS |
ECHECK CLRB |
RTS |
* |
* Write Sector |
* |
EWRITE PSHS X,Y,U |
LBSR ESEEK |
LDU #DTYPTAB ; Point to Drive Type table |
LDB DRVNUM ; Get working drive number |
LDB B,U ; Fetch Drive type |
CMPB #DTYPRAM ; Is it a RAM Disk ? |
BEQ EWOK ; Yep, can write to it |
CMPB #DTYPROM ; Allow writes to ROM Disk too |
BEQ EWOK |
LBRA EDUMMY ; Nope report read only |
* |
EWOK LDY #BUFFER |
CLRB |
EWLOOP1 LDA 0,X+ move 256 bytes to buffer from Flex RAM |
STA 0,Y+ |
DECB |
BNE EWLOOP1 |
* |
LBSR MAPIN |
* |
LDY #BUFFER |
CLRB |
EWLOOP2 LDA 0,Y+ move 256 bytes from buffer to external RAM |
STA 0,U+ |
DECB |
BNE EWLOOP2 |
* |
LBSR MAPOUT |
* |
CLRB |
PULS X,Y,U,PC |
* |
* |
***************************************************** |
* FlexNet drivers * |
* --------------- * |
* Drivers to support a remote connection via the * |
* serial port using the FlexNet protocol as defined * |
* in FLEXNet_421B * |
***************************************************** |
* |
* |
* read sector from remote drive |
* |
NREAD PSHS B |
PSHS A |
CLR CHKSUM clear checksum |
CLR CHKSUM+1 |
* |
LDA #'s Send read sector command |
JSR SCHAR |
BCC NRD_DNR if timeout, then flag drive not ready |
* |
LDA DRVNUM send drive |
JSR SCHAR |
BCC NRD_DNR |
* |
PULS A send track |
JSR SCHAR |
BCC NRD_DNR |
* |
PULS A send sector |
JSR SCHAR |
BCC NRD_DNR |
* |
* transfer 256 bytes |
CLRB |
NREAD1 JSR RCHAR read byte |
BCC NRD_DNR if timeout, then flag drive not ready |
STA 0,X+ |
ADDA CHKSUM+1 update checksum |
STA CHKSUM+1 |
BCC NREAD2 |
INC CHKSUM |
NREAD2 DECB |
BNE NREAD1 |
* |
* compare checksums |
JSR RCHAR get checksum msb |
BCC NRD_DNR |
PSHS A |
JSR RCHAR get checksum lsb |
BCC NRD_DNR |
TFR A,B |
PULS A |
CMPD CHKSUM compare checksums |
BNE NRD_ERR if checksum error, then flag crc read error |
* |
LDA #ACK no checksum error, send ACK char |
JSR SCHAR |
BCC NRD_DNR |
CLRB all OK, flag no error |
BRA NRD_END |
* |
NRD_DNR LDB #16 flag drive not ready |
BRA NRD_END |
* |
NRD_ERR LDA #NAK send NAK |
JSR SCHAR |
BCC NRD_DNR |
LDB #09 flag crc read error |
* |
NRD_END STB CHKSUM used by VERIFY |
TSTB |
RTS |
* |
* |
* write sector to remote drive |
* |
NWRITE PSHS B |
PSHS A |
CLR CHKSUM clear checksum |
CLR CHKSUM+1 |
* |
LDA #'r Send write sector command |
JSR SCHAR |
BCC NRD_DNR if timeout, then flag drive not ready |
* |
LDA DRVNUM send drive |
JSR SCHAR |
BCC NRD_DNR |
* |
PULS A send track |
JSR SCHAR |
BCC NRD_DNR |
* |
PULS A send sector |
JSR SCHAR |
BCC NRD_DNR |
* |
* transfer 256 bytes |
CLRB |
NWRITE1 LDA 0,X+ |
JSR SCHAR write byte |
BCC NRD_DNR if timeout, then flag drive not ready |
ADDA CHKSUM+1 update checksum |
STA CHKSUM+1 |
BCC NWRITE2 |
INC CHKSUM |
NWRITE2 DECB |
BNE NWRITE1 |
* |
* compare checksums |
LDA CHKSUM |
JSR SCHAR send checksum msb |
BCC NRD_DNR |
LDA CHKSUM+1 |
JSR SCHAR send checksum lsb |
BCC NRD_DNR |
* |
JSR RCHAR get checksum response |
BCC NRD_DNR |
CMPA #ACK |
BNE NWR_ERR if checksum error, then flag write error |
* |
CLRB all OK, flag no error |
BRA NWR_END |
* |
NWR_ERR LDB #10 flag write error |
* |
NWR_END STB CHKSUM used by VERIFY |
TSTB |
RTS |
* |
* |
* verify last sector written to remote drive |
* |
NVERIFY LDB CHKSUM test last checksum |
TSTB |
RTS |
* |
* |
* quck check and check drive ready |
* |
NCHECK LDA #'Q quick check command |
JSR SCHAR |
BCC NCK_ERR if timeout, then flag drive not ready |
|
JSR RCHAR get response from host |
BCC NCK_ERR |
CMPA #ACK |
BNE NCK_ERR if NAK, then flag drive not ready |
|
CLRB all OK, flag drive ready |
BRA NCK_END |
* |
NCK_ERR LDB #16 report drive not ready |
ORCC #$01 check needs carry set as well |
* |
NCK_END TSTB |
RTS |
* |
* |
* recieve char from remote drive. |
* timeout if no response for approx 1s. |
* Entry: no parameters |
* Exit: (A) = recieved char, (C)=1 if valid char, (C)=0 if timeout. |
* |
RCHAR PSHS X,Y |
* |
LDX #1000 1000x inner loop |
RCHAR1 LDY #DELCON delay constant for inner loop (approx 1ms). |
RCHAR2 LDA ACIAC1 test for recieved char |
ASRA |
BCS RCHAR3 get character |
LEAY -1,Y else, continue to count delay |
BNE RCHAR2 |
LEAX -1,X |
BNE RCHAR1 |
PULS X,Y,PC return with error if timed out |
* |
RCHAR3 LDA ACIAD1 return data (carry bit still set) |
PULS X,Y,PC |
* |
* |
* transmit char to remote drive. |
* timeout if no response for approx 1s. (allows for use of hardware flow control) |
* Entry: (A) = char to transmit |
* Exit: (A) = recieved char, (C)=1 if valid char, (C)=0 if timeout. |
* |
SCHAR PSHS X,Y |
PSHS A |
* |
LDX #1000 1000x inner loop |
SCHAR1 LDY #DELCON delay constant for inner loop (approx 1ms). |
SCHAR2 LDA ACIAC1 test for space in transmit FIFO |
ASRA |
ASRA |
BCS SCHAR3 send character |
LEAY -1,Y else, continue to count delay |
BNE SCHAR2 |
LEAX -1,X |
BNE SCHAR1 |
PULS A |
PULS X,Y,PC return with error if timed out |
* |
SCHAR3 PULS A |
STA ACIAD1 send data (carry bit still set) |
PULS X,Y,PC |
* |
** 'UF' Format RAMdisc to FLEX standard. |
* |
DISFOS FCB $0A,$0D |
FCC 'Formating RAMdisk... ' |
FCB 4 |
MESS6 FCB $0A,$0D,4 |
FCC 'Ramdisk not allocated! ' |
FCB 4 |
* |
UFSUB LDX #DISFOS |
JSR PDATA1 |
LDX #DTYPTAB search for allocated ramdisk |
CLRB |
FMT9 LDA B,X |
CMPA #DTYPRAM driver type 1 is ramdisk |
BEQ FFOUND |
INCB |
CMPB #4 end of table? then not allocated. |
BNE FMT9 |
LDX #MESS6 |
JSR PDATA1 |
RTS |
* |
FFOUND STB DRVNUM |
LDX #DRVNUM-3 |
JSR DRVSEL |
* |
* set up free chain |
* |
LDX #BUFFER clear out buffer |
CLRA |
CLRB |
DFL1 STA 0,X+ |
DECB |
BNE DFL1 |
* |
CLR TRACK |
LDA #1 |
STA SECTOR |
DFL2 LDX #BUFFER |
LDA TRACK |
STA 0,X |
LDA SECTOR |
INCA |
CMPA #RMAXSEC+1 last sector on track? |
BNE DFL3 |
INC 0,X |
LDA #1 |
DFL3 STA 1,X |
LDA TRACK |
LDB SECTOR |
JSR WRITSC |
INC SECTOR |
LDA SECTOR |
CMPA #RMAXSEC+1 |
BNE DFL2 |
LDA #1 |
STA SECTOR |
INC TRACK |
LDA TRACK |
CMPA #RMAXTRK |
BNE DFL2 |
* break free chain at last track/sector |
LDX #BUFFER |
LDA #RMAXTRK-1 |
LDB #RMAXSEC |
JSR READSC |
LDX #BUFFER |
CLR 0,X |
CLR 1,X |
LDA #RMAXTRK-1 |
LDB #RMAXSEC |
JSR WRITSC |
* set up sector structure, SIR, directory etc |
LDX #BUFFER |
CLRA |
LDB #RMAXSEC |
JSR READSC |
LDX #BUFFER |
CLR 0,X break end of directory chain |
CLR 1,X |
CLRA |
LDB #RMAXSEC |
JSR WRITSC |
* |
LDX #BUFFER |
CLRA |
LDB #3 set up SIR |
JSR READSC |
LDX #BUFFER |
CLR 0,X break forward link |
CLR 1,X |
LDD #$5241 set volume name (RAMDISK ) |
STD 16,X |
LDD #$4D44 |
STD 18,X |
LDD #$4953 |
STD 20,X |
LDD #$4B20 |
STD 22,X |
LDD #1 volume number |
STD 27,X |
LDD #$0101 first trk/sec 01-01 |
STD 29,X |
LDA #RMAXTRK-1 |
LDB #RMAXSEC |
STD 31,X |
STD 38,X |
LDD #RTOTSEC total DATA sectors (2912-14) |
STD 33,X |
* |
LDA #01 month set default creation date (SYS09's birthday!) |
STA 35,X |
LDA #07 day |
STA 36,X |
LDA #07 year |
STA 37,X |
* |
RF3 CLRA |
LDB #3 |
JSR WRITSC |
* |
LDX #BUFFER |
CLRA |
LDB #1 |
JSR READSC |
LDX #BUFFER |
LDA #$AA set the init flag |
STA 0,X |
LDA #$55 |
STA 1,X |
CLRA |
LDB #1 |
JMP WRITSC |
* |
******************************** |
* System specific Boot * |
* command goes here. * |
******************************** |
* |
* Boot FLEX from the FPGA's internal pre-loaded scratch RAM |
* |
UBMESS FCB $08, $08 |
FCC 'Booting internal FLEX....' |
FCB $0D,$0A,$04 |
* |
UBSUB LDX #UBMESS |
JSR PDATA1 |
* |
LDX #$D3E5 |
LDY #CONTAB Overlay console driver table |
UB1 LDD 0,Y++ |
STD 0,X++ |
CMPX #$D3FD |
BNE UB1 |
* |
LDX #$DE00 Overlay disk driver table |
LDY #DISTAB |
UB2 LDD 0,Y++ |
STD 0,X++ |
CMPX #$DE1E |
BNE UB2 |
* |
UBEND JMP $CD00 |
* |
* FLEX console jump table. |
CONTAB FDB INPNE INPUT NO ECHO |
FDB DUMMY INTERRUPT HANDLER |
FDB MONRAM+$02 SWI VECTOR |
FDB MONRAM+$08 IRQ VECTOR |
FDB DUMMY TIMER OFF |
FDB DUMMY TIMER ON |
FDB DUMMY TIMER INITIALIZATION |
FDB CONTRL MONITOR |
FDB DUMMY TERMINAL INITIALIZATION |
FDB STATUS INPUT CHECK |
FDB OUTP TERMINAL OUTPUT |
FDB INPE TERMINAL INPUT WITH ECHO |
* |
* FLEX disk jump table. |
DISTAB JMP READSC |
JMP WRITSC |
JMP BUSY |
JMP RESTR1 |
JMP DRVSEL |
JMP CHKRDY |
JMP CHKQIK |
JMP DINIT |
JMP DWARM |
JMP SEEKTS |
* |
* Monitor jumps |
* |
PDATA1 JMP [PDATAV] |
OUTP JMP [OUTCHV] |
INPE JMP [INCHEV] |
INPNE JMP [INCHV] |
STATUS JMP [INCHKV] |
CONTRL JMP [MONITV] |
DUMMY RTS |
* |
** 'UL' LOAD ROM DISK VIA SERIAL PORT |
* |
ULMES FCC 'Serial ROM Disk upload ...' |
FCB $0D,$0A,$04 |
ULMES1 FCC 'ROM Disk Loaded' |
FCB $0D,$0A,$04 |
* |
ULSUB LDX #ULMES |
JSR PDATA1 |
* |
LDA #$00 |
STA DRVNUM |
CLRA TRACK 0 |
LDB #$01 SECTOR 1 |
ULLOOP0 STA TRACK |
STB SECTOR` |
LBSR MAPIN |
* |
CLRB xfer 256 bytes at a time. |
ULLOOP1 JSR LRBYTE transfer should be hex bytes |
STA ,U+ |
DECB |
BNE ULLOOP1 |
* |
LBSR MAPOUT |
* |
LDA TRACK |
LDB SECTOR |
INCB |
CMPB #EMAXSEC+1 |
BNE ULLOOP0 |
LDB #1 |
INCA |
CMPA #EMAXTRK |
BNE ULLOOP0 |
* |
ULEXIT LDX #ULMES1 |
JMP PDATA1 |
* |
* Read a byte from the serial port |
* |
LRBYTE PSHS B |
BSR LRHEX Get hex digit. |
ASLA |
ASLA Shift to msb. |
ASLA |
ASLA |
TFR A,B Save in B. |
BSR LRHEX Get next digit. |
PSHS B |
ADDA 0,S+ Add together bytes. |
PULS B,PC |
* |
LRHEX JSR INTER |
BVS LRHEX |
SUBA #$30 Remove ascii bias. |
BMI LRHEX |
CMPA #$09 Number? |
BLE LRHEX1 Yes. |
CMPA #$11 Keep testing. |
BMI LRHEX |
CMPA #$16 |
BGT LRHEX |
SUBA #$07 |
LRHEX1 RTS |
* |
* ACIA INPUT TEST |
* |
INTEST LDA ACIAC1 |
BITA #$01 |
RTS |
* |
* RESET ACIA |
* |
ACIRST LDA #$03 master reset |
STA ACIAC1 |
LDA #$11 |
STA ACIAC1 |
RTS |
* |
* ACIA INPUT |
* |
INTER LDA #16 |
STA DELCNT+0 |
CLR DELCNT+1 |
CLR DELCNT+2 |
INTER0 LDA ACIAC1 |
BITA #$01 |
BNE INTER1 |
BITA #$78 |
BEQ INTER2 |
BSR ACIRST |
BRA INTER |
* |
INTER1 LDA ACIAD1 |
ANDCC #VFLAG |
RTS |
* |
INTER2 DEC DELCNT+2 |
BNE INTER0 |
DEC DELCNT+1 |
BNE INTER0 |
DEC DELCNT+0 |
BNE INTER0 |
CLRA |
ORCC #VFLAG |
RTS |
* |
* ACIA OUTPUT |
* |
OUTTER PSHS A |
* |
OUTTE1 LDA ACIAC1 |
BITA #$02 |
BNE OUTTE2 |
BITA #$78 |
BEQ OUTTE1 |
BSR ACIRST |
BRA OUTTE1 |
* |
OUTTE2 PULS A |
STA ACIAD1 |
RTS |
* |
** 'UX' Xmodem ROM Disk upload |
* |
UXMES FCB $0D,$0A |
FCC 'Xmodem ROM Disk Upload' |
FCB 4 |
UXMES1 FCB $0D,$0A |
FCC 'Upload Complete' |
FCB 4 |
UXMES2 FCB $0D,$0A |
FCC 'Upload Error' |
FCB 4 |
* |
UXSUB LDX #UXMES |
LBSR PDATA1 |
* |
LDA #1 |
STA BLKNUM |
LDX #XSTSTR |
STX XSTATE |
* |
LDA #$00 |
STA DRVNUM |
CLRA TRACK 0 |
LDB #$01 SECTOR 1 |
UXLOOP0 STA TRACK |
STB SECTOR |
LBSR MAPIN |
* |
CLRB xfer 256 bytes at a time. |
UXLOOP1 LBSR XBYTE transfer should be hex bytes |
BCS UXERR |
STA ,U+ |
DECB |
BNE UXLOOP1 |
* |
LBSR MAPOUT |
* |
LDA TRACK |
LDB SECTOR |
INCB |
CMPB #EMAXSEC+1 |
BNE UXLOOP0 |
LDB #1 |
INCA |
CMPA #EMAXTRK |
BNE UXLOOP0 |
* |
UXEXIT LDX #UXMES1 |
JMP PDATA1 |
* |
UXERR LBSR MAPOUT |
LDX #UXMES2 |
LBRA PDATA1 |
* |
* Get a Byte using XModem protocol |
* Carry clear => no errors |
* Carry set => errors |
* |
XBYTE PSHS X |
LDX XSTATE |
* |
XBYTE0 LBSR INTER |
BVC XBYTE1 |
LDA #NAK |
LBSR OUTTER |
LDX #XSTSTR |
BRA XBYTE0 |
* |
XBYTE1 JSR ,X |
BNE XBYTE0 |
STX XSTATE |
PULS X,PC |
* |
* START - LOOK FOR SOH (START OF HEADER) = $01 |
* |
XSTSTR CMPA #SOH |
BNE XSTSTR1 |
LDX #XSTBLK |
ANDCC #$FF-CFLAG-ZFLAG No abort, no valid data (no exit) |
RTS |
* |
XSTSTR1 CMPA #EOT |
BNE XSTSTR2 |
LDA #ACK |
LBSR OUTTER |
ORCC #CFLAG+ZFLAG Set (c)=1 abort & exit |
RTS |
* |
XSTSTR2 CMPA #CAN |
BNE XSTSTR3 |
ORCC #CFLAG+ZFLAG Set (c)=1 abort & exit |
RTS |
* |
XSTSTR3 ANDCC #$FF-CFLAG-ZFLAG |
RTS |
* |
* Got SOH |
* Now get block number |
* |
XSTBLK CMPA BLKNUM |
BNE XSTBLKE |
LDX #XSTCOM |
ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit) |
RTS |
* |
* Error in block number |
* |
XSTBLKE LDA #NAK |
LBSR OUTTER |
LDX #XSTSTR |
ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit) |
RTS |
* |
* Get complement of block number |
* |
XSTCOM COMA |
CMPA BLKNUM |
BNE XSTBLKE |
CLR CHKSUM |
LDA #128 |
STA BYTCNT |
LDX #XSTDAT |
ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit) |
RTS |
* |
* Get data bytes |
* |
XSTDAT PSHS A |
ADDA CHKSUM |
STA CHKSUM |
PULS A |
DEC BYTCNT |
BNE XSTDAT1 |
LDX #XSTCHK |
XSTDAT1 ANDCC #$FF-CFLAG No abort |
ORCC #ZFLAG Valid data (exit) |
RTS |
* |
* Byte count reached zero |
* Check checksum byte |
* |
XSTCHK CMPA CHKSUM |
BNE XSTCHK1 retry if wrong checksum |
* |
* Checksum OK ... |
* increment block number |
* and send ACK |
* |
INC BLKNUM |
LDA #ACK |
BRA XSTCHK2 |
* |
* Checksum Error detected ... |
* Reset Sector counter in ACCB to last 128 byte boundary |
* and send NAK |
* |
XSTCHK1 PSHS B |
TFR U,D |
DECB |
ANDB #128 |
TFR D,U |
PULS B |
LDA #NAK |
XSTCHK2 LBSR OUTTER |
LDX #XSTSTR |
ANDCC #$FF-CFLAG-ZFLAG No abort, no valid data (no exit) |
RTS |
* |
** 'UP' Load ROMdisk via config PROM. |
* |
UPMES FCB $08,$08 |
FCC 'Load ROM disk from config PROM.' |
FCB 4 |
UPMES1 FCC 'Found SYNC, loading data...' |
FCB $0A,$0D,4 |
UPMES2 FCC 'ROM Disk Loaded.' |
FCB $0A,$0D,4 |
UPMES3 FCC 'ROM Disk Not Found.' |
FCB $0A,$0D,4 |
* |
UPSUB LDX #UPMES |
JSR PDATA1 |
* |
BSR UPRESET |
LDY #$0020 Set up count for 2 MBit |
LDX #$0000 |
UPSUB1 BSR UPBIT Shift in bit |
BSR UPSYNC Test for Sync pattern` |
BEQ UPSUB4 Skip if found |
LEAX -1,X Count Down inner loop |
CMPX #$0000 |
BNE UPSUB1 Branch if inner loop not complete |
LEAY -1,X Count down outer loop |
CMPY #$0000 |
BNE UPSUB1 Branch if outer loop not complete |
* |
LDX #UPMES3 2MBits scanned, no synch, report error |
JMP PDATA1 |
* |
UPSUB4 LDX #UPMES1 Sync found, now load disk |
JSR PDATA1 |
* |
CLRA |
STA DRVNUM select Drive 0 |
LDB #$01 |
UPSUB2 STA TRACK track 0 |
STB SECTOR sector 1 |
* |
LBSR MAPIN map in buffer |
CLRB 256 byte sector |
UPSUB3 BSR UPBYTE read byte from prom |
STA ,U+ Store in buffer |
DECB |
BNE UPSUB3 Loop until sector read` |
LBSR MAPOUT map out buffer |
* |
LDA TRACK Advance sector |
LDB SECTOR |
INCB |
CMPB #EMAXSEC+1 Wrap on max sector count |
BNE UPSUB2 |
LDB #1 |
INCA Advance track |
CMPA #EMAXTRK |
BNE UPSUB2 |
* |
UPEXIT LDX #UPMES2 Load complete, report message |
JMP PDATA1 |
* |
* Reset Serial PROM |
* |
UPRESET LDA #PRSTHI Strobe the reset line |
STA PROMREG |
LDA #PRSTLO |
STA PROMREG |
LDX #$0000 Delay a while` |
UPRST1 LEAX -1,X |
CMPX #$0000 |
BNE UPRST1 |
STX SYNCREG+0 Clear Sync Shift Register |
STX SYNCREG+2 |
RTS |
* |
* Input 1 Bit From PROM |
* |
UPBIT LDA #PCLKHI |
STA PROMREG |
LDA #PCLKLO |
STA PROMREG |
LDA PROMREG |
LSRA |
ASL SYNCREG+3 |
RTS |
* |
* Test for 32 bit Sync Word |
* |
UPSYNC ROL SYNCREG+2 |
ROL SYNCREG+1 |
ROL SYNCREG+0 |
LDD #SYNCLO |
CMPD SYNCREG+2 |
BNE UPSYNCX |
LDD #SYNCHI |
CMPD SYNCREG+0 |
UPSYNCX RTS |
* |
* Input 1 Byte From PROM |
* |
UPBYTE PSHS B |
LDB #8 |
UPBYTE1 BSR UPBIT |
DECB |
BNE UPBYTE1 |
LDA SYNCREG+3 |
PULS B,PC |
* |
***** NEXTCMD ***** |
* |
NEXTEXT LBSR INPE GET ONE CHAR. FROM TERMINAL |
ANDA #$7F STRIP PARITY FROM CHAR. |
TFR A,B |
LDA #$20 |
LBSR OUTP PRNT SPACE |
CMPB #$60 |
BLE NXTEX0 |
SUBB #$20 |
* |
***** DO TABLE LOOKUP ***** |
* FOR COMMAND FUNCTIONS |
* |
NXTEX0 LDX #EXTTAB POINT TO JUMP TABLE |
NXTEX1 CMPB ,X+ DOES COMMAND MATCH TABLE ENTRY ? |
BEQ JMPEXT BRANCH IF MATCH FOUND |
LEAX 2,X POINT TO NEXT ENTRY IN TABLE |
CMPX #EXTEND REACHED END OF TABLE YET ? |
BNE NXTEX1 IF NOT END, CHECK NEXT ENTRY |
LDX #MSGWHAT POINT TO MSG "WHAT?" |
LBRA PDATA1 PRINT MSG AND RETURN |
JMPEXT JMP [,X] JUMP TO COMMAND ROUTINE |
* |
* EXTENDED COMMAND JUMP TABLE |
* |
EXTTAB EQU * |
FCC 'B' BOOT FLEX |
FDB UBSUB |
FCC 'L' LOAD ROM DISK OVER SERIAL PORT |
FDB ULSUB |
FCC 'F' FORMAT RAM DISK |
FDB UFSUB |
FCC 'P' LOAD ROM DISK FROM PROM |
FDB UPSUB |
FCC 'X' XMODEM ROM DISK UPLOAD |
FDB UXSUB |
* |
EXTEND EQU * |
* |
MSGWHAT FCC "WHAT ?" |
FCB $0A,$0D,$04 |
END |
/Flex9/f9-monex.asm
2,9 → 2,11
** FLEX 9 DISK DRIVERS |
* |
* FOR SYS09BUG ON THE DIGILENT SPARTAN 3 STARTER BOARD |
* AND THE TERASIC CYCLONE 2 DE1 BOARD |
* WITH I/O MAPPED AT $XE000 |
* AND ROM MAPPED AT $XF000 |
* THE DIGILENT SPARTAN 3 STARTER BOARD HAS 1MBYTE OF SRAM |
* THE TERASIC CYCLONE 2 DE1 BOARD HAS 512KB OF SRAM |
* THE FIRST 64K IS USED BY FLEX, |
* THE SECOND 128K IS USED AS A ROM DISK |
* THE REMAINING RAM IS USED FOR A RAM DISK |
43,7 → 45,8
ETOTSEC EQU EMAXTRK*EMAXSEC-EMAXSEC |
* |
RMAXSEC EQU 14 RAM DISK |
RMAXTRK EQU 192 12 * 16 * 14 * 256 = 688,128 Bytes |
* RMAXTRK EQU 192 12 * 16 * 256 = 688,128 Bytes (Spartan 3 starter with 1MB) |
RMAXTRK EQU 64 4 * 16 * 14 * 256 = 229,376 Bytes (Cyclone 2 DE1 with 512KB) |
RTOTSEC EQU RMAXTRK*RMAXSEC-RMAXSEC |
* |
* DRIVE TYPES |
/Flex9/flex9ram.lst
0,0 → 1,4009
Assembler release DWC_2.0 version 2.11 |
May 6, 2004 (c) Motorola (free ware) |
0001 NAM FLEX SOURCE |
0000 INCLUDE "f9-moneq.txt" |
|
|
f9-moneq.txt page 2 |
0002 * |
0003 *************************************************** |
0004 * MEMORY MAP EQUATES * |
0005 *************************************************** |
0006 E000 MONIO EQU $E000 I/O SPACE |
0007 DFC0 MONRAM EQU $DFC0 STACK SPACE |
0008 F800 MONROM EQU $F800 START OF ROM |
0009 F000 MONEXT EQU $F000 EXTENDED COMMANDS |
0010 *MONEXT EQU $1000 EXTENDED COMMANDS |
0011 * |
0012 *************************************************** |
0013 * SYS09BUG VARIABLE SPACE |
0014 *************************************************** |
0015 * |
0016 DFC0 STACK EQU MONRAM+0 TOP OF INTERNAL STACK / USER VECTOR |
0017 DFC2 SWI3 EQU MONRAM+2 SOFTWARE INTERRUPT VECTOR #3 |
0018 DFC4 SWI2 EQU MONRAM+4 SOFTWARE INTERRUPT VECTOR #2 |
0019 DFC6 FIRQ EQU MONRAM+6 FAST INTERRUPT VECTOR |
0020 DFC8 IRQ EQU MONRAM+8 INTERRUPT VECTOR |
0021 DFCA SWI EQU MONRAM+10 SOFTWARE INTERRUPT VECTOR |
0022 DFCC SVCVO EQU MONRAM+12 SUPERVISOR CALL VECTOR ORGIN |
0023 DFCE SVCVL EQU MONRAM+14 SUPERVISOR CALL VECTOR LIMIT |
0024 DFD0 LRARAM EQU MONRAM+16 LRA ADDRESSES |
0025 DFE0 CPORT EQU MONRAM+32 RE-VECTORABLE CONTROL PORT |
0026 DFE2 ECHO EQU MONRAM+34 ECHO FLAG |
0027 DFE3 BPTBL EQU MONRAM+35 BREAKPOINT TABLE BASE ADDR |
0028 ************************************************** |
0029 * VDU BYTES * |
0030 ************************************************** |
0031 * |
0032 **** ALWAYS KEEP COLADX AND ROWADX TOGETHER ****** |
0033 DFFB COLADX EQU MONRAM+59 CURSOR COLUMN |
0034 DFFC ROWADX EQU MONRAM+60 CURSOR ROW |
0035 ************************************************** |
0036 * |
0037 DFFD NEWROW EQU MONRAM+61 NEW ROW TEMP FOR ESCAPE |
0038 DFFE ESCFLG EQU MONRAM+62 ESCAPE SEQUENCE ACTIVE |
0039 * |
0040 *************************************************** |
0041 * SERIAL PORT * |
0042 *************************************************** |
0043 * |
0044 E000 ACIAS EQU MONIO+$00 CONTROL PORT |
0045 * |
0046 *************************************************** |
0047 * PS/2 KEYBOARD PORT * |
0048 *************************************************** |
0049 * |
0050 E020 PS2KBD EQU MONIO+$20 PS/2 KEYBOARD PORT |
0051 * |
0052 *************************************************** |
0053 * ADM3A DISPLAY DRIVER VARIABLES * |
0054 *************************************************** |
0055 * |
0056 ** VIDEO DISPLAY DEFINITIONS |
0057 * |
0058 E030 VDU EQU MONIO+$30 |
0059 0000 VDUCHR EQU 0 CHARACTER REGISTER |
0060 0001 VDUATT EQU 1 ATTRIBUTE REGISTER |
0061 0002 VDUCOL EQU 2 CURSOR COLUMN |
0062 0003 VDUROW EQU 3 CURSOR ROW |
0063 0004 VDUOFF EQU 4 ROW OFFSET |
0064 * |
0065 0050 LINLEN EQU 80 LENGTH OF A LINE |
0066 0019 NUMLIN EQU 25 NUMBER OF LINES |
0067 * |
0068 *************************************************** |
0069 * Serial PROM register |
0070 *************************************************** |
0071 * |
0072 ** CONFIGURATION PROM DEFINITIONS |
0073 * |
0074 E0C0 PROMREG EQU MONIO+$C0 |
0075 0001 PCLKHI EQU $01 Toggle PROM Clock High |
0076 0000 PCLKLO EQU $00 Toggle PROM Clock Low |
0077 0002 PRSTHI EQU $02 Toggle PROM Reset High |
0078 0000 PRSTLO EQU $00 Toggle PROM Reset Low |
0079 AA55 SYNCHI EQU $AA55 Synch Pattern High Word |
0080 FF00 SYNCLO EQU $FF00 Synch Pattern Low Word |
0081 * |
0082 * |
0083 *************************************************** |
0084 * Dynamic Address Translation Registers |
0085 *************************************************** |
0086 * |
0087 ** DAT Table |
0088 * |
0089 FFF0 IC11 EQU $FFF0 DAT RAM CHIP |
0090 * |
0091 *************************************************** |
0092 * START OF ROM * |
0093 *************************************************** |
0094 * |
0095 F800 MONITV EQU MONROM+0 FDB MONITOR |
0096 F802 NXTCMV EQU MONROM+2 FDB NEXTCMD |
0097 F804 INCHV EQU MONROM+4 FDB INCH |
0098 F806 INCHEV EQU MONROM+6 FDB INCHE |
0099 F808 INCHKV EQU MONROM+8 FDB INCHEK |
0100 F80A OUTCHV EQU MONROM+10 FDB OUTCH |
0101 F80C PDATAV EQU MONROM+12 FDB PDATA |
0102 F80E PCRLFV EQU MONROM+14 FDB PCRLF |
0103 F810 PSTRGV EQU MONROM+16 FDB PSTRNG |
0104 F812 LRAV EQU MONROM+18 FDB LRA |
0002 END |
0000 INCLUDE "f9-equ.txt" |
0001 0000 Z0000 EQU $0000 |
0002 0005 Z0005 EQU $0005 |
0003 0044 Z0044 EQU $0044 |
0004 00A0 Z00A0 EQU $00A0 |
0005 C07F ZC07F EQU $C07F |
0006 C080 LINBUF EQU $C080 |
0007 C0FF ZC0FF EQU $C0FF |
0003 END |
0000 INCLUDE "f9-spool.txt" |
0001 * |
0002 ** PRINTER SPOOLING |
0003 * |
0004 C700 ORG $C700 |
0005 C700 7E C7 21 PRSPL1 JMP ZC721 |
0006 C703 7E C7 03 PRSPL2 JMP * |
0007 C706 7E C7 47 PRSPL3 JMP ZC747 |
0008 C709 7E C7 85 PRSPL4 JMP ZC785 |
0009 C70C 7E C7 95 PRSPL5 JMP ZC795 |
0010 C70F 7E C7 1F PRSPL6 JMP ZC71F |
0011 * |
0012 ** SPOOLER SCRATCH AREA |
0013 * |
0014 C712 0C 00 00 00 00 C8 ZC712 FCB $0C,$00,$00,$00,$00,$C8,$10 |
10 |
0015 C719 C8 10 ZC719 FCB $C8,$10 |
0016 C71B 00 QCNT FCB $00 |
0017 C71C 00 ZC71C FCB $00 |
0018 C71D 00 ZC71D FCB $00 |
0019 C71E 00 ZC71E FCB $00 |
0020 * |
0021 C71F 3B ZC71F RTI |
0022 C720 12 NOP |
0023 * |
0024 C721 1A 10 ZC721 ORCC #$10 |
0025 C723 BE CC 31 LDX ZCC31 |
0026 C726 10 EF 02 STS 2,X |
0027 C729 7D CC 34 TST ZCC34 |
0028 C72C 26 11 BNE ZC73F |
0029 C72E 8E CC FC LDX #ZCCFC |
0030 C731 7C CC 34 INC ZCC34 |
0031 C734 6D 84 TST ,X |
0032 C736 27 07 BEQ ZC73F |
0033 C738 BF CC 31 ZC738 STX ZCC31 |
0034 C73B 10 EE 02 LDS $02,X |
0035 C73E 3B RTI |
0036 * |
0037 C73F 8E CC F8 ZC73F LDX #ZCCF8 |
0038 C742 7F CC 34 CLR ZCC34 |
0039 C745 20 F1 BRA ZC738 |
0040 * |
0041 C747 1A 10 ZC747 ORCC #$10 |
0042 C749 7D C7 1B TST QCNT |
0043 C74C 27 29 BEQ ZC777 |
0044 C74E BE C7 19 LDX ZC719 |
0045 C751 A6 84 LDA ,X |
0046 C753 34 02 PSHS A |
0047 C755 EC 01 LDD $01,X |
0048 C757 8E CA C0 LDX #ZCAC0 |
0049 C75A ED 88 40 STD $40,X |
0050 C75D 35 02 PULS A |
0051 C75F A7 03 STA $03,X |
0052 C761 6F 84 CLR ,X |
0053 C763 86 01 LDA #$01 |
0054 C765 A7 02 STA $02,X |
0055 C767 6F 88 22 CLR $22,X |
0056 C76A 6F 88 3B CLR $3B,X |
0057 C76D 7D C7 1E ZC76D TST ZC71E |
0058 C770 27 29 BEQ ZC79B |
0059 C772 11 3F SWI3 |
0060 C774 12 NOP |
0061 C775 20 F6 BRA ZC76D |
0062 * |
0063 C777 1C EF ZC777 ANDCC #$EF |
0064 C779 AD 9F D3 ED ZC779 JSR [TOFVEC] |
0065 C77D 7F CC FC CLR ZCCFC |
0066 C780 11 3F SWI3 |
0067 C782 12 NOP |
0068 C783 20 F4 BRA ZC779 |
0069 * |
0070 C785 1A 10 ZC785 ORCC #$10 |
0071 C787 7D CC 30 TST ZCC30 |
0072 C78A 27 05 BEQ ZC791 |
0073 C78C 11 3F SWI3 |
0074 C78E 12 NOP |
0075 C78F 20 F4 BRA ZC785 |
0076 * |
0077 C791 7C CC 30 ZC791 INC ZCC30 |
0078 C794 39 RTS |
0079 * |
0080 C795 7F CC 30 ZC795 CLR ZCC30 |
0081 C798 1C EF ANDCC #$EF |
0082 C79A 39 RTS |
0083 * |
0084 C79B 7D C7 1D ZC79B TST ZC71D |
0085 C79E 26 27 BNE ZC7C7 |
0086 C7A0 8E CA C0 LDX #ZCAC0 |
0087 C7A3 BD D4 06 JSR FMS |
0088 C7A6 26 1F BNE ZC7C7 |
0089 C7A8 7D C7 1C TST ZC71C |
0090 C7AB 27 0F BEQ ZC7BC |
0091 C7AD 7F C7 1C CLR ZC71C |
0092 C7B0 81 0A CMPA #$0A |
0093 C7B2 27 0F BEQ ZC7C3 |
0094 C7B4 34 02 PSHS A |
0095 C7B6 86 0A LDA #$0A |
0096 C7B8 8D 3C BSR ZC7F6 |
0097 C7BA 35 02 PULS A |
0098 C7BC 81 0D ZC7BC CMPA #$0D |
0099 C7BE 26 03 BNE ZC7C3 |
0100 C7C0 B7 C7 1C STA ZC71C |
0101 C7C3 8D 31 ZC7C3 BSR ZC7F6 |
0102 C7C5 20 D4 BRA ZC79B |
0103 * |
0104 C7C7 86 0D ZC7C7 LDA #$0D |
0105 C7C9 8D 2B BSR ZC7F6 |
0106 C7CB 86 0A LDA #$0A |
0107 C7CD 8D 27 BSR ZC7F6 |
0108 C7CF B6 C7 12 LDA ZC712 |
0109 C7D2 8D 22 BSR ZC7F6 |
0110 C7D4 7F C7 1D CLR ZC71D |
0111 C7D7 BE C7 19 LDX ZC719 |
0112 C7DA 6D 03 TST $03,X |
0113 C7DC 27 05 BEQ ZC7E3 |
0114 C7DE 6A 03 DEC $03,X |
0115 C7E0 7E C7 47 JMP ZC747 |
0116 * |
0117 C7E3 30 04 ZC7E3 LEAX $04,X |
0118 C7E5 8C C8 40 CMPX #FCB |
0119 C7E8 26 03 BNE ZC7ED |
0120 C7EA 8E C8 10 LDX #ZC810 |
0121 C7ED BF C7 19 ZC7ED STX ZC719 |
0122 C7F0 7A C7 1B DEC QCNT |
0123 C7F3 7E C7 47 JMP ZC747 |
0124 * |
0125 C7F6 BD CC D8 ZC7F6 JSR PCHK |
0126 C7F9 2B 05 BMI ZC800 |
0127 C7FB 11 3F SWI3 |
0128 C7FD 12 NOP |
0129 C7FE 20 F6 BRA ZC7F6 |
0130 * |
0131 C800 7E CC E4 ZC800 JMP POUT |
0132 C810 ZC810 EQU $C810 |
0133 C838 ZC838 EQU $C838 |
0004 END |
0000 INCLUDE "f9-sfcb.txt" |
0001 * |
0002 ** SYSTEM FILE CONTROL BLOCK |
0003 * |
0004 C840 ORG $C840 |
0005 C840 FF FCB FCB $FF |
0006 C841 00 FCB $00 |
0007 C842 00 FCB $00 |
0008 C843 00 FCB $00 |
0009 C844 53 54 41 52 54 55 ZC844 FCC "STARTUP" |
50 |
0010 C84B 00 FCB $00 |
0011 C84C 54 58 54 FCC "TXT" |
0012 C84F 00 FCB $00 |
0005 END |
0000 INCLUDE "f9-init.txt" |
0001 * |
0002 ** FLEX INITIATION |
0003 * |
0004 CA00 ORG $CA00 |
0005 CA00 20 06 ZCA00 BRA ZCA08 |
0006 CA02 BD CA AC ZCA02 JSR >ZCAAC |
0007 CA05 39 RTS |
0008 CA06 C0 A0 ZCA06 SUBB #$A0 |
0009 CA08 86 39 ZCA08 LDA #$39 |
0010 CA0A B7 D3 FD STA >ZD3FD |
0011 CA0D BE CC 2B LDX >MEMEND |
0012 CA10 30 89 00 A1 LEAX $00A1,X |
0013 CA14 BF CA 06 STX >ZCA06 |
0014 CA17 AD 9F D3 F1 JSR [TINVEC] |
0015 CA1B BE D3 FB LDX >INVEC |
0016 CA1E BF CD 0A STX >INCH+1 |
0017 CA21 BF CD 0D STX >INCH2+1 |
0018 CA24 BE D3 F9 LDX >OUTVEC |
0019 CA27 BF CD 10 STX >OUTCH+1 |
0020 CA2A BF CD 13 STX >OUTCH2+1 |
0021 CA2D BE D3 F7 LDX >STAVEC |
0022 CA30 BF CD 4F STX >ZCD4E+1 |
0023 CA33 8E 00 A0 LDX #Z00A0 |
0024 CA36 C6 B9 LDB #$B9 |
0025 CA38 A6 84 ZCA38 LDA ,X |
0026 CA3A E7 84 STB ,X |
0027 CA3C 12 NOP |
0028 CA3D E1 84 CMPB ,X |
0029 CA3F 26 0B BNE ZCA4C |
0030 CA41 A7 84 STA ,X |
0031 CA43 30 89 04 00 LEAX $0400,X |
0032 CA47 BC CA 06 CMPX >ZCA06 |
0033 CA4A 26 EC BNE ZCA38 |
0034 CA4C 30 89 FF 5F ZCA4C LEAX $FF5F,X |
0035 CA50 BF CC 2B STX >MEMEND |
0036 CA53 8E CD 03 LDX #WARMS |
0037 CA56 BF CC 16 STX >ESCVEC |
0038 CA59 8E CA DC LDX #TTLSTR |
0039 CA5C BD CE 81 JSR >PSTRG1 |
0040 CA5F BD CE B5 JSR >PCRLF1 |
0041 CA62 8D 9E BSR ZCA02 |
0042 CA64 BD CE B5 JSR >PCRLF1 |
0043 CA67 8E C8 40 LDX #FCB |
0044 CA6A 86 01 LDA #$01 |
0045 CA6C A7 84 STA ,X |
0046 CA6E BD D4 06 JSR >FMS |
0047 CA71 27 08 BEQ ZCA7B |
0048 CA73 A6 01 LDA $01,X |
0049 CA75 BD D2 00 JSR >ZD200 |
0050 CA78 7E CD 67 JMP >WARM1 |
0051 |
0052 CA7B 8E C0 80 ZCA7B LDX #LINBUF |
0053 CA7E BF CC 14 ZCA7E STX >LINPTR |
0054 CA81 8E C8 40 LDX #FCB |
0055 CA84 BD D4 06 JSR >FMS |
0056 CA87 27 05 BEQ ZCA8E |
0057 CA89 34 30 PSHS Y,X |
0058 CA8B 7E D2 D7 JMP >ZD2D7 |
0059 |
0060 CA8E BE CC 14 ZCA8E LDX >LINPTR |
0061 CA91 A7 80 STA ,X+ |
0062 CA93 81 0D CMPA #$0D |
0063 CA95 26 E7 BNE ZCA7E |
0064 CA97 8E C8 40 LDX #FCB |
0065 CA9A BD D1 F4 JSR >ZD1F4 |
0066 CA9D 8E C0 80 LDX #LINBUF |
0067 CAA0 BF CC 14 STX >LINPTR |
0068 CAA3 8E CD 67 LDX #WARM1 |
0069 CAA6 BF CC 43 STX >ZCC43 |
0070 CAA9 7E D3 2E JMP >ZD32E |
0071 |
0072 CAAC 8E CA EC ZCAAC LDX #DATSTR |
0073 CAAF BD CE 81 JSR >PSTRG1 |
0074 CAB2 BD CE 2B JSR >INBUF1 |
0075 CAB5 8D 14 BSR ZCACB |
0076 CAB7 25 F3 BCS ZCAAC |
0077 CAB9 B7 CC 0E STA >MONTH |
0078 CABC 8D 0D BSR ZCACB |
0079 CABE 25 EC BCS ZCAAC |
0080 CAC0 B7 CC 0F ZCAC0 STA >DAY |
0081 CAC3 8D 06 BSR ZCACB |
0082 CAC5 25 E5 BCS ZCAAC |
0083 CAC7 B7 CC 10 STA >YEAR |
0084 CACA 39 RTS |
0085 |
0086 CACB BD D1 75 ZCACB JSR >INDEC1 |
0087 CACE 25 0B BCS ZCADB |
0088 CAD0 B6 CC 1C LDA >LODOFF+1 |
0089 CAD3 5D TSTB |
0090 CAD4 27 03 BEQ ZCAD9 |
0091 CAD6 1C FE ANDCC #$FE |
0092 CAD8 39 RTS |
0093 |
0094 CAD9 1A 01 ZCAD9 ORCC #$01 |
0095 CADB 39 ZCADB RTS |
0096 |
0097 CADC 36 38 30 39 20 46 TTLSTR FCC "6809 FLEX V3.01" |
4C 45 58 20 56 33 |
2E 30 31 |
0098 CAEB 04 FCB $04 |
0099 CAEC 44 41 54 45 20 28 DATSTR FCC "DATE (MM,DD,YY)? " |
4D 4D 2C 44 44 2C |
59 59 29 3F 20 |
0100 CAFD 04 FCB $04 |
0006 END |
0000 INCLUDE "f9-var.txt" |
0001 * |
0002 ** TTYSET PARAMETERS |
0003 * |
0004 CC00 ORG $CC00 |
0005 CC00 08 BSPCHR FCB $08 |
0006 CC01 18 DELCHR FCB $18 |
0007 CC02 3A EOLCHR FCB $3A |
0008 CC03 19 DEPCNT FCB 25 |
0009 CC04 00 WIDCNT FCB $00 |
0010 CC05 04 NULCNT FCB $04 |
0011 CC06 40 TABCHR FCB '@ |
0012 CC07 00 BSECHR FCB $00 |
0013 CC08 00 EJTCNT FCB $00 |
0014 CC09 FF PAUSE FCB $FF |
0015 CC0A 1B ESCCHR FCB $1B |
0016 CC0B 00 SYSDRV FCB 0 |
0017 CC0C 01 WRKDRV FCB 1 |
0018 CC0D 00 ZCC0D FCB $00 |
0019 CC0E DATERG EQU * |
0020 CC0E 00 MONTH FCB $00 |
0021 CC0F 00 DAY FCB $00 |
0022 CC10 00 YEAR FCB $00 |
0023 CC11 00 LASTRM FCB $00 |
0024 CC12 00 00 UCTVEC FDB $0000 |
0025 CC14 00 00 LINPTR FDB $0000 |
0026 CC16 00 00 ESCVEC FDB $0000 |
0027 CC18 00 CURCHR FCB $00 |
0028 CC19 00 PRVCHR FCB $00 |
0029 CC1A 00 CURLIN FCB $00 |
0030 CC1B 00 00 LODOFF FDB $0000 |
0031 CC1D 00 TRNFLG FCB $00 |
0032 CC1E 00 00 TRNVEC FDB $0000 |
0033 CC20 00 ERRTYP FCB $00 |
0034 CC21 00 SIOFLG FCB $00 |
0035 CC22 00 OUTSWT FCB $00 |
0036 CC23 00 INPSWT FCB $00 |
0037 CC24 00 00 FOPADR FDB $0000 |
0038 CC26 00 00 FIPADR FDB $0000 |
0039 CC28 00 CMDFLG FCB $00 |
0040 CC29 00 CURCOL FCB $00 |
0041 CC2A 00 FCB $00 |
0042 CC2B BF FF MEMEND FDB $BFFF |
0043 CC2D 00 00 ERRVEC FDB $0000 |
0044 CC2F 01 FIEFLG FCB $01 |
0045 CC30 00 ZCC30 FCB $00 |
0046 CC31 00 00 00 ZCC31 FCB $00,$00,$00 |
0047 CC34 00 00 00 00 00 00 ZCC34 FCB $00,$00,$00,$00,$00,$00,$00 |
00 |
0048 CC3D ZCC3D EQU $CC3D |
0049 CC3F ZCC3F EQU $CC3F |
0050 CC43 ZCC43 EQU $CC43 |
0051 CC45 ZCC45 EQU $CC45 |
0052 CC47 ZCC47 EQU $CC47 |
0053 CC49 ORG $CC49 |
0054 CC49 60 MAPUP FCB $60 MAP LOWER TO UPPERCASE |
0055 CC4A ZCC4A EQU $CC4A |
0056 CC4B ZCC4B EQU $CC4B |
0057 CC4C ZCC4C EQU $CC4C |
0058 CC4D ZCC4D EQU $CC4D |
0007 END |
0000 INCLUDE "f9-data.txt" |
0001 * |
0002 ** STRINGS AND MESSAGES |
0003 * |
0004 CC4E ORG $CC4E |
0005 CC4E 2B 2B 2B PMTSTR FCC "+++" |
0006 CC51 04 FCB $04 |
0007 CC52 3F 3F 3F QRYSTR FCC "???" |
0008 CC55 04 FCB $04 |
0009 CC56 57 48 41 54 3F WOTMSG FCC "WHAT?" |
0010 CC5B 04 FCB $04 |
0011 CC5C 43 41 4E 27 54 20 NTRMSG FCC "CAN'T TRANSFER" |
54 52 41 4E 53 46 |
45 52 |
0012 CC6A 04 FCB $04 |
0013 CC6B 4E 4F 54 20 46 4F NFDMSG FCC "NOT FOUND" |
55 4E 44 |
0014 CC74 04 FCB $04 |
0015 CC75 44 49 53 4B 20 45 DERMSG FCC "DISK ERROR #" |
52 52 4F 52 20 23 |
0016 CC81 04 FCB $04 |
0017 CC82 44 52 49 56 45 53 DNRMSG FCC "DRIVES NOT READY" |
20 4E 4F 54 20 52 |
45 41 44 59 |
0018 CC92 04 FCB $04 |
0019 * |
0020 ** MEMORY RESIDENT COMMANDS |
0021 * |
0022 CC93 47 45 54 CMDTBL FCC "GET" |
0023 CC96 00 FCB $00 |
0024 CC97 D2 0F FDB GETCMD |
0025 CC99 4D 4F 4E FCC "MON" |
0026 CC9C 00 FCB $00 |
0027 CC9D D3 4B FDB ZD34B |
0028 CC9F 00 FCB $00 |
0029 * |
0030 ** DECIMAL CONVERSION TABLE |
0031 * |
0032 CCA0 27 10 DECTBL FDB 10000 |
0033 CCA2 03 E8 FDB 1000 |
0034 CCA4 00 64 FDB 100 |
0035 CCA6 00 0A FDB 10 |
0008 END |
0000 INCLUDE "f9-cli.txt" |
0001 ********************************************* |
0002 * |
0003 * FLEX COMMAND LINE INTERPRETER & SUBROUTINES |
0004 * |
0005 ********************************************* |
0006 CD00 ORG $CD00 |
0007 * |
0008 ** FLEX JUMPS |
0009 * |
0010 CD00 7E CD 57 COLDS JMP >COLD1 |
0011 CD03 7E CD 67 WARMS JMP >WARM1 |
0012 CD06 7E CD B1 RENTER JMP >RENT1 |
0013 CD09 7E CD 09 INCH JMP >INCH |
0014 CD0C 7E CD 0C INCH2 JMP >INCH2 |
0015 CD0F 7E CD 0F OUTCH JMP >OUTCH |
0016 CD12 7E CD 12 OUTCH2 JMP >OUTCH2 |
0017 CD15 7E CE FB GETCHR JMP >GETCH1 |
0018 CD18 7E CF 41 PUTCHR JMP >PUTCH1 |
0019 CD1B 7E CE 2B INBUFF JMP >INBUF1 |
0020 CD1E 7E CE 81 PSTRNG JMP >PSTRG1 |
0021 CD21 7E CF ED CLASS JMP >CLASS1 |
0022 CD24 7E CE B5 PCRLF JMP >PCRLF1 |
0023 CD27 7E D0 0E NXTCH JMP >NXTCH1 |
0024 CD2A 7E CD EA RSTRIO JMP >RSTIO1 |
0025 CD2D 7E D0 36 GETFIL JMP >GETFL1 |
0026 CD30 7E D1 A2 LOAD JMP >LOAD1 |
0027 CD33 7E D0 EB SETEXT JMP >SETEX1 |
0028 CD36 7E D3 49 ADDBX JMP >ADDBX1 |
0029 CD39 7E CF 86 OUTDEC JMP >OUTDC1 |
0030 CD3C 7E CF D4 OUTHEX JMP >OUTHX1 |
0031 CD3F 7E D2 7F RPTERR JMP >RPTER1 |
0032 CD42 7E D1 2F GETHEX JMP >GETHX1 |
0033 CD45 7E CF D0 OUTADR JMP >OUTAD1 |
0034 CD48 7E D1 75 INDEC JMP >INDEC1 |
0035 CD4B 7E D3 29 DOCMND JMP >DOCMD1 |
0036 CD4E 7E CD 4E ZCD4E JMP >ZCD4E |
0037 CD51 7E CE 05 JMP >ZCE05 |
0038 CD54 7E CE 05 JMP >ZCE05 |
0039 * |
0040 ** COLD START ENTRY |
0041 * |
0042 CD57 10 CE C0 7F COLD1 LDS #ZC07F |
0043 CD5B 7F CC 11 ZCD5B CLR >LASTRM |
0044 CD5E BD D4 00 JSR >ZD400 |
0045 CD61 7F CC 28 CLR >CMDFLG |
0046 CD64 BD D3 FD JSR >ZD3FD |
0047 * |
0048 ** WARM START ENTRY |
0049 * |
0050 CD67 10 CE C0 7F WARM1 LDS #ZC07F |
0051 CD6B BD DE 18 JSR >WARMDR |
0052 CD6E 8E CD 03 LDX #WARMS |
0053 CD71 BF CC 16 STX >ESCVEC |
0054 CD74 8E C7 00 LDX #PRSPL1 |
0055 CD77 AF 9F D3 E9 STX [SWIVVC] |
0056 CD7B BE D3 E7 LDX >IHNDVC |
0057 CD7E AF 9F D3 EB STX [IRQVVC] |
0058 CD82 8E CC F8 LDX #ZCCF8 |
0059 CD85 BF CC 31 STX >ZCC31 |
0060 CD88 7F CC 34 CLR >ZCC34 |
0061 CD8B 7F CC 4C CLR >ZCC4C |
0062 CD8E 8D 5A BSR RSTIO1 |
0063 CD90 B6 CC 11 LDA >LASTRM |
0064 CD93 B1 CC 02 CMPA >EOLCHR |
0065 CD96 26 05 BNE ZCD9D |
0066 CD98 7C CC 15 INC >LINPTR+1 |
0067 CD9B 20 14 BRA RENT1 |
0068 |
0069 CD9D 7D CC 28 ZCD9D TST >CMDFLG |
0070 CDA0 10 26 05 97 LBNE ZD33B |
0071 CDA4 BD D4 03 JSR >FMSCLS |
0072 CDA7 26 B2 BNE ZCD5B |
0073 CDA9 8E CC 4E LDX #PMTSTR |
0074 CDAC BD CE 81 JSR >PSTRG1 |
0075 CDAF 8D 7A BSR INBUF1 |
0076 * |
0077 ** MAIN CONTROL LOOP |
0078 * |
0079 CDB1 BD D0 D4 RENT1 JSR >ZD0D4 |
0080 CDB4 81 0D CMPA #$0D |
0081 CDB6 27 E5 BEQ ZCD9D |
0082 CDB8 8E C8 40 ZCDB8 LDX #FCB |
0083 CDBB 7C CC 0D INC >ZCC0D |
0084 CDBE BD D0 36 JSR >GETFL1 |
0085 CDC1 25 16 BCS ZCDD9 |
0086 CDC3 8E CC 93 LDX #CMDTBL |
0087 CDC6 8D 3E BSR ZCE06 |
0088 CDC8 27 09 BEQ ZCDD3 |
0089 CDCA BE CC 12 LDX >UCTVEC |
0090 CDCD 27 07 BEQ ZCDD6 |
0091 CDCF 8D 35 BSR ZCE06 |
0092 CDD1 26 03 BNE ZCDD6 |
0093 CDD3 6E 98 01 ZCDD3 JMP [$01,X] |
0094 |
0095 CDD6 BD D2 2E ZCDD6 JSR >ZD22E |
0096 CDD9 8E CC 56 ZCDD9 LDX #WOTMSG |
0097 CDDC 86 15 LDA #$15 |
0098 CDDE B7 CC 20 ZCDDE STA >ERRTYP |
0099 CDE1 BD CE 81 ZCDE1 JSR >PSTRG1 |
0100 CDE4 7F CC 11 ZCDE4 CLR >LASTRM |
0101 CDE7 7E CD 67 JMP >WARM1 |
0102 * |
0103 ** RESTORE IO VECTORS |
0104 * |
0105 CDEA BE CD 13 RSTIO1 LDX >OUTCH2+1 |
0106 CDED BF CD 10 STX >OUTCH+1 |
0107 CDF0 BE CD 0D LDX >INCH2+1 |
0108 CDF3 BF CD 0A STX >INCH+1 |
0109 CDF6 7F CC 23 CLR >INPSWT |
0110 CDF9 7F CC 22 CLR >OUTSWT |
0111 CDFC 7F CC 21 CLR >SIOFLG |
0112 CDFF 7F CC 26 CLR >FIPADR |
0113 CE02 7F CC 24 CLR >FOPADR |
0114 CE05 39 ZCE05 RTS |
0115 |
0116 CE06 10 8E C8 44 ZCE06 LDY #ZC844 |
0117 CE0A A6 A0 ZCE0A LDA ,Y+ |
0118 CE0C 81 5F CMPA #$5F |
0119 CE0E 23 02 BLS ZCE12 |
0120 CE10 80 20 SUBA #$20 |
0121 CE12 A1 80 ZCE12 CMPA ,X+ |
0122 CE14 26 08 BNE ZCE1E |
0123 CE16 6D 84 TST ,X |
0124 CE18 26 F0 BNE ZCE0A |
0125 CE1A 6D A4 TST ,Y |
0126 CE1C 27 0C BEQ ZCE2A |
0127 CE1E 6D 80 ZCE1E TST ,X+ |
0128 CE20 26 FC BNE ZCE1E |
0129 CE22 30 02 LEAX $02,X |
0130 CE24 6D 84 TST ,X |
0131 CE26 26 DE BNE ZCE06 |
0132 CE28 1C FB ANDCC #$FB |
0133 CE2A 39 ZCE2A RTS |
0134 * |
0135 ** GET USER COMMAND LINE |
0136 * |
0137 CE2B 8E C0 80 INBUF1 LDX #LINBUF |
0138 CE2E BF CC 14 STX >LINPTR |
0139 CE31 BD CE FB ZCE31 JSR >GETCH1 |
0140 CE34 B1 CC 01 CMPA >DELCHR |
0141 CE37 27 1D BEQ ZCE56 |
0142 CE39 B1 CC 00 CMPA >BSPCHR |
0143 CE3C 27 1F BEQ ZCE5D |
0144 CE3E 81 0D CMPA #$0D |
0145 CE40 27 0D BEQ ZCE4F |
0146 CE42 81 0A CMPA #$0A |
0147 CE44 27 32 BEQ ZCE78 |
0148 CE46 81 1F CMPA #$1F |
0149 CE48 23 E7 BLS ZCE31 |
0150 CE4A 8C C0 FF ZCE4A CMPX #ZC0FF |
0151 CE4D 27 E2 BEQ ZCE31 |
0152 CE4F A7 80 ZCE4F STA ,X+ |
0153 CE51 81 0D CMPA #$0D |
0154 CE53 26 DC BNE ZCE31 |
0155 CE55 39 RTS |
0156 |
0157 CE56 8E CC 52 ZCE56 LDX #QRYSTR |
0158 CE59 8D 26 BSR PSTRG1 |
0159 CE5B 20 CE BRA INBUF1 |
0160 |
0161 CE5D 8C C0 80 ZCE5D CMPX #LINBUF |
0162 CE60 27 F4 BEQ ZCE56 |
0163 CE62 30 1F LEAX -$01,X |
0164 CE64 B6 CC 07 LDA >BSECHR |
0165 CE67 81 08 CMPA #$08 |
0166 CE69 26 08 BNE ZCE73 |
0167 CE6B 86 20 LDA #$20 |
0168 CE6D BD CF 66 JSR >ZCF66 |
0169 CE70 B6 CC 07 LDA >BSECHR |
0170 CE73 BD CF 66 ZCE73 JSR >ZCF66 |
0171 CE76 20 B9 BRA ZCE31 |
0172 |
0173 CE78 86 0D ZCE78 LDA #$0D |
0174 CE7A BD CF 41 JSR >PUTCH1 |
0175 CE7D 86 20 LDA #$20 |
0176 CE7F 20 C9 BRA ZCE4A |
0177 |
0178 CE81 8D 32 PSTRG1 BSR PCRLF1 |
0179 CE83 A6 84 ZCE83 LDA ,X |
0180 CE85 81 04 CMPA #$04 |
0181 CE87 27 6F BEQ ZCEF8 |
0182 CE89 BD CF 41 JSR >PUTCH1 |
0183 CE8C 30 01 LEAX $01,X |
0184 CE8E 20 F3 BRA ZCE83 |
0185 |
0186 CE90 BD CD 4E ZCE90 JSR >ZCD4E |
0187 CE93 27 65 BEQ ZCEFA |
0188 CE95 AD 9F D3 E5 JSR [ZD3E5] |
0189 CE99 B1 CC 0A CMPA >ESCCHR |
0190 CE9C 26 5C BNE ZCEFA |
0191 CE9E 7F CC 1A ZCE9E CLR >CURLIN |
0192 CEA1 AD 9F D3 E5 ZCEA1 JSR [ZD3E5] |
0193 CEA5 B1 CC 0A CMPA >ESCCHR |
0194 CEA8 27 50 BEQ ZCEFA |
0195 CEAA 81 03 CMPA #$03 CTRL C |
0196 CEAC 26 F3 BNE ZCEA1 |
0197 CEAE 7F CC 11 CLR >LASTRM |
0198 CEB1 6E 9F CC 16 JMP [ESCVEC] |
0199 * |
0200 ** PRINT CR, LINEFEED |
0201 * |
0202 CEB5 7D CC 21 PCRLF1 TST >SIOFLG |
0203 CEB8 26 27 BNE ZCEE1 |
0204 CEBA 8D D4 BSR ZCE90 |
0205 CEBC B6 CC 03 LDA >DEPCNT |
0206 CEBF 27 20 BEQ ZCEE1 |
0207 CEC1 B1 CC 1A CMPA >CURLIN |
0208 CEC4 22 18 BHI ZCEDE |
0209 CEC6 7F CC 1A CLR >CURLIN |
0210 CEC9 7D CC 09 TST >PAUSE |
0211 CECC 27 02 BEQ ZCED0 |
0212 CECE 8D CE BSR ZCE9E |
0213 CED0 34 04 ZCED0 PSHS B |
0214 CED2 F6 CC 08 LDB >EJTCNT |
0215 CED5 27 05 BEQ ZCEDC |
0216 CED7 8D 08 ZCED7 BSR ZCEE1 |
0217 CED9 5A DECB |
0218 CEDA 26 FB BNE ZCED7 |
0219 CEDC 35 04 ZCEDC PULS B |
0220 CEDE 7C CC 1A ZCEDE INC >CURLIN |
0221 CEE1 86 0D ZCEE1 LDA #$0D |
0222 CEE3 8D 5C BSR PUTCH1 |
0223 CEE5 86 0A LDA #$0A |
0224 CEE7 8D 58 BSR PUTCH1 |
0225 CEE9 34 04 PSHS B |
0226 CEEB F6 CC 05 LDB >NULCNT |
0227 CEEE 27 06 BEQ ZCEF6 |
0228 CEF0 4F ZCEF0 CLRA |
0229 CEF1 8D 4E BSR PUTCH1 |
0230 CEF3 5A DECB |
0231 CEF4 26 FA BNE ZCEF0 |
0232 CEF6 35 04 ZCEF6 PULS B |
0233 CEF8 1C FE ZCEF8 ANDCC #$FE |
0234 CEFA 39 ZCEFA RTS |
0235 * |
0236 ** GET A CHARACTER HONOURING TTYSET |
0237 * |
0238 CEFB 7D CC 23 GETCH1 TST >INPSWT |
0239 CEFE 26 1A BNE ZCF1A |
0240 CF00 7D CC 26 TST >FIPADR |
0241 CF03 27 10 BEQ ZCF15 |
0242 CF05 8D 1A BSR ZCF21 |
0243 CF07 7D CC 2F TST >FIEFLG |
0244 CF0A 27 11 BEQ ZCF1D |
0245 CF0C 7D CC 24 TST >FOPADR |
0246 CF0F 27 0C BEQ ZCF1D |
0247 CF11 8D 53 BSR ZCF66 |
0248 CF13 20 08 BRA ZCF1D |
0249 CF15 BD CD 09 ZCF15 JSR >INCH |
0250 CF18 20 03 BRA ZCF1D |
0251 |
0252 CF1A BD CD 0C ZCF1A JSR >INCH2 |
0253 CF1D 7F CC 1A ZCF1D CLR >CURLIN |
0254 CF20 39 RTS |
0255 |
0256 CF21 BF CC 47 ZCF21 STX >ZCC47 |
0257 CF24 BE CC 26 LDX >FIPADR |
0258 CF27 20 06 BRA ZCF2F |
0259 |
0260 CF29 BF CC 47 ZCF29 STX >ZCC47 |
0261 CF2C BE CC 24 LDX >FOPADR |
0262 CF2F BD D4 06 ZCF2F JSR >FMS |
0263 CF32 26 04 BNE ZCF38 |
0264 CF34 BE CC 47 LDX >ZCC47 |
0265 CF37 39 RTS |
0266 |
0267 CF38 7F CC 24 ZCF38 CLR >FOPADR |
0268 CF3B BD D2 7F JSR >RPTER1 |
0269 CF3E 7E CD 03 JMP >WARMS |
0270 * |
0271 ** OUTPUT CHARACTER HONOURING TTYSET |
0272 * |
0273 CF41 7D CC 21 PUTCH1 TST >SIOFLG |
0274 CF44 26 20 BNE ZCF66 |
0275 CF46 81 1F CMPA #$1F |
0276 CF48 22 05 BHI ZCF4F |
0277 CF4A 7F CC 29 CLR >CURCOL |
0278 CF4D 20 17 BRA ZCF66 |
0279 |
0280 CF4F 7C CC 29 ZCF4F INC >CURCOL |
0281 CF52 34 02 PSHS A |
0282 CF54 B6 CC 04 LDA >WIDCNT |
0283 CF57 27 0B BEQ ZCF64 |
0284 CF59 B1 CC 29 CMPA >CURCOL |
0285 CF5C 24 06 BCC ZCF64 |
0286 CF5E BD CE B5 JSR >PCRLF1 |
0287 CF61 7C CC 29 INC >CURCOL |
0288 CF64 35 02 ZCF64 PULS A |
0289 CF66 34 02 ZCF66 PSHS A |
0290 CF68 7D CC 22 TST >OUTSWT |
0291 CF6B 26 13 BNE ZCF80 |
0292 CF6D 7D CC 24 TST >FOPADR |
0293 CF70 27 04 BEQ ZCF76 |
0294 CF72 8D B5 BSR ZCF29 |
0295 CF74 20 0D BRA ZCF83 |
0296 |
0297 CF76 7D CC 26 ZCF76 TST >FIPADR |
0298 CF79 26 08 BNE ZCF83 |
0299 CF7B BD CD 0F JSR >OUTCH |
0300 CF7E 20 03 BRA ZCF83 |
0301 CF80 BD CD 12 ZCF80 JSR >OUTCH2 |
0302 CF83 35 02 ZCF83 PULS A |
0303 CF85 39 RTS |
0304 |
0305 CF86 7F CC 4A OUTDC1 CLR >ZCC4A |
0306 CF89 F7 CC 1D STB >TRNFLG |
0307 CF8C 86 04 LDA #$04 |
0308 CF8E B7 CC 4D STA >ZCC4D |
0309 CF91 EC 84 LDD ,X |
0310 CF93 8E CC A0 LDX #DECTBL |
0311 CF96 8D 0B ZCF96 BSR ZCFA3 |
0312 CF98 30 02 LEAX $02,X |
0313 CF9A 7A CC 4D DEC >ZCC4D |
0314 CF9D 26 F7 BNE ZCF96 |
0315 CF9F 1F 98 TFR B,A |
0316 CFA1 20 3D BRA OUTHXR |
0317 |
0318 CFA3 7F CC 4B ZCFA3 CLR >ZCC4B |
0319 CFA6 10 A3 84 ZCFA6 CMPD ,X |
0320 CFA9 25 07 BCS ZCFB2 |
0321 CFAB A3 84 SUBD ,X |
0322 CFAD 7C CC 4B INC >ZCC4B |
0323 CFB0 20 F4 BRA ZCFA6 |
0324 |
0325 CFB2 34 02 ZCFB2 PSHS A |
0326 CFB4 B6 CC 4B LDA >ZCC4B |
0327 CFB7 26 10 BNE ZCFC9 |
0328 CFB9 7D CC 4A TST >ZCC4A |
0329 CFBC 26 0B BNE ZCFC9 |
0330 CFBE 7D CC 1D TST >TRNFLG |
0331 CFC1 27 0B BEQ ZCFCE |
0332 CFC3 86 20 LDA #$20 |
0333 CFC5 8D 23 BSR ZCFEA |
0334 CFC7 20 05 BRA ZCFCE |
0335 |
0336 CFC9 7C CC 4A ZCFC9 INC >ZCC4A |
0337 CFCC 8D 12 BSR OUTHXR |
0338 CFCE 35 82 ZCFCE PULS PC,A |
0339 * |
0340 ** DISPLAY HEX ADDRESS |
0341 * |
0342 CFD0 8D 02 OUTAD1 BSR OUTHX1 |
0343 CFD2 30 01 LEAX $01,X |
0344 * |
0345 ** OUPUT HEX BYTE |
0346 * |
0347 CFD4 A6 84 OUTHX1 LDA ,X |
0348 CFD6 8D 04 BSR OUTHXL |
0349 CFD8 A6 84 LDA ,X |
0350 CFDA 20 04 BRA OUTHXR |
0351 |
0352 CFDC 44 OUTHXL LSRA |
0353 CFDD 44 LSRA |
0354 CFDE 44 LSRA |
0355 CFDF 44 LSRA |
0356 CFE0 84 0F OUTHXR ANDA #$0F |
0357 CFE2 8B 30 ADDA #$30 |
0358 CFE4 81 39 CMPA #$39 |
0359 CFE6 23 02 BLS ZCFEA |
0360 CFE8 8B 07 ADDA #$07 |
0361 CFEA 7E CF 41 ZCFEA JMP >PUTCH1 |
0362 * |
0363 ** CLASSIFY CHARACTER ALHA/NUMERIC |
0364 * |
0365 CFED 81 30 CLASS1 CMPA #'0 |
0366 CFEF 25 14 BCS ZD005 |
0367 CFF1 81 39 CMPA #'9 |
0368 CFF3 23 16 BLS ZD00B |
0369 CFF5 81 41 CMPA #'A |
0370 CFF7 25 0C BCS ZD005 |
0371 CFF9 81 5A CMPA #'Z |
0372 CFFB 23 0E BLS ZD00B |
0373 CFFD 81 61 CMPA #'a $61 |
0374 CFFF 25 04 BCS ZD005 |
0375 D001 81 7A CMPA #'z $7A |
0376 D003 23 06 BLS ZD00B |
0377 D005 1A 01 ZD005 ORCC #$01 |
0378 D007 B7 CC 11 STA >LASTRM |
0379 D00A 39 RTS |
0380 D00B 1C FE ZD00B ANDCC #$FE |
0381 D00D 39 RTS |
0382 * |
0383 ** GET NEXT CHARACTER FROM FILE |
0384 * |
0385 D00E 34 10 NXTCH1 PSHS X |
0386 D010 BE CC 14 LDX >LINPTR |
0387 D013 B6 CC 18 LDA >CURCHR |
0388 D016 B7 CC 19 STA >PRVCHR |
0389 D019 A6 80 ZD019 LDA ,X+ |
0390 D01B B7 CC 18 STA >CURCHR |
0391 D01E 81 0D CMPA #$0D |
0392 D020 27 10 BEQ ZD032 |
0393 D022 B1 CC 02 CMPA >EOLCHR |
0394 D025 27 0B BEQ ZD032 |
0395 D027 BF CC 14 STX >LINPTR |
0396 D02A 81 20 CMPA #$20 |
0397 D02C 26 04 BNE ZD032 |
0398 D02E A1 84 CMPA ,X |
0399 D030 27 E7 BEQ ZD019 |
0400 D032 8D B9 ZD032 BSR CLASS1 |
0401 D034 35 90 PULS PC,X |
0402 * |
0403 ** PARSE FILE SPEC. IN LINE BUFFER |
0404 * |
0405 D036 86 15 GETFL1 LDA #$15 |
0406 D038 A7 01 STA $01,X |
0407 D03A 86 FF LDA #$FF |
0408 D03C A7 03 STA $03,X |
0409 D03E 6F 04 CLR $04,X |
0410 D040 6F 0C CLR $0C,X |
0411 D042 BD D0 D4 JSR >ZD0D4 |
0412 D045 86 08 LDA #$08 |
0413 D047 B7 CC 4B STA >ZCC4B |
0414 D04A 8D 34 BSR ZD080 |
0415 D04C 25 2E BCS ZD07C |
0416 D04E 26 0F BNE ZD05F |
0417 D050 8D 2E BSR ZD080 |
0418 D052 25 28 BCS ZD07C |
0419 D054 26 09 BNE ZD05F |
0420 D056 BC CC 3F CMPX >ZCC3F |
0421 D059 27 6C BEQ ZD0C7 |
0422 D05B 8D 23 BSR ZD080 |
0423 D05D 23 68 BLS ZD0C7 |
0424 D05F BE CC 3F ZD05F LDX >ZCC3F |
0425 D062 6D 04 TST $04,X |
0426 D064 27 61 BEQ ZD0C7 |
0427 D066 6D 03 TST $03,X |
0428 D068 2A 0F BPL ZD079 |
0429 D06A 7D CC 0D TST >ZCC0D |
0430 D06D 27 05 BEQ ZD074 |
0431 D06F B6 CC 0B LDA >SYSDRV |
0432 D072 20 03 BRA ZD077 |
0433 |
0434 D074 B6 CC 0C ZD074 LDA >WRKDRV |
0435 D077 A7 03 ZD077 STA $03,X |
0436 D079 7F CC 0D ZD079 CLR >ZCC0D |
0437 D07C BE CC 3F ZD07C LDX >ZCC3F |
0438 D07F 39 RTS |
0439 |
0440 D080 8D 8C ZD080 BSR NXTCH1 |
0441 D082 25 43 BCS ZD0C7 |
0442 D084 81 39 CMPA #$39 |
0443 D086 22 15 BHI ZD09D |
0444 D088 BE CC 3F LDX >ZCC3F |
0445 D08B 6D 03 TST $03,X |
0446 D08D 2A 38 BPL ZD0C7 |
0447 D08F 84 03 ANDA #$03 |
0448 D091 A7 03 STA $03,X |
0449 D093 BD D0 0E JSR >NXTCH1 |
0450 D096 24 2F BCC ZD0C7 |
0451 D098 81 2E ZD098 CMPA #$2E |
0452 D09A 1C FE ANDCC #$FE |
0453 D09C 39 RTS |
0454 |
0455 D09D F6 CC 4B ZD09D LDB >ZCC4B |
0456 D0A0 2B 25 BMI ZD0C7 |
0457 D0A2 34 04 PSHS B |
0458 D0A4 C0 05 SUBB #$05 |
0459 D0A6 F7 CC 4B STB >ZCC4B |
0460 D0A9 35 04 PULS B |
0461 D0AB B1 CC 49 ZD0AB CMPA >MAPUP |
0462 D0AE 25 02 BCS ZD0B2 |
0463 D0B0 80 20 SUBA #$20 |
0464 D0B2 A7 04 ZD0B2 STA $04,X |
0465 D0B4 30 01 LEAX $01,X |
0466 D0B6 5A DECB |
0467 D0B7 BD D0 0E JSR >NXTCH1 |
0468 D0BA 24 08 BCC ZD0C4 |
0469 D0BC 81 2D CMPA #$2D |
0470 D0BE 27 04 BEQ ZD0C4 |
0471 D0C0 81 5F CMPA #$5F |
0472 D0C2 26 06 BNE ZD0CA |
0473 D0C4 5D ZD0C4 TSTB |
0474 D0C5 26 E4 BNE ZD0AB |
0475 D0C7 1A 01 ZD0C7 ORCC #$01 |
0476 D0C9 39 RTS |
0477 |
0478 D0CA 5D ZD0CA TSTB |
0479 D0CB 27 CB BEQ ZD098 |
0480 D0CD 6F 04 CLR $04,X |
0481 D0CF 30 01 LEAX $01,X |
0482 D0D1 5A DECB |
0483 D0D2 20 F6 BRA ZD0CA |
0484 |
0485 D0D4 BF CC 3F ZD0D4 STX >ZCC3F |
0486 D0D7 BE CC 14 LDX >LINPTR |
0487 D0DA A6 84 ZD0DA LDA ,X |
0488 D0DC 81 20 CMPA #$20 |
0489 D0DE 26 04 BNE ZD0E4 |
0490 D0E0 30 01 LEAX $01,X |
0491 D0E2 20 F6 BRA ZD0DA |
0492 D0E4 BF CC 14 ZD0E4 STX >LINPTR |
0493 D0E7 BE CC 3F LDX >ZCC3F |
0494 D0EA 39 RTS |
0495 * |
0496 ** DEFAULT FILE EXTENSION |
0497 * |
0498 D0EB 34 30 SETEX1 PSHS Y,X |
0499 D0ED E6 0C LDB $0C,X |
0500 D0EF 26 18 BNE ZD109 |
0501 D0F1 10 8E D1 0B LDY #EXTTBL |
0502 D0F5 81 0B CMPA #$0B |
0503 D0F7 22 10 BHI ZD109 |
0504 D0F9 C6 03 LDB #$03 |
0505 D0FB 3D MUL |
0506 D0FC 31 A5 LEAY B,Y |
0507 D0FE C6 03 LDB #$03 |
0508 D100 A6 A0 ZD100 LDA ,Y+ |
0509 D102 A7 0C STA $0C,X |
0510 D104 30 01 LEAX $01,X |
0511 D106 5A DECB |
0512 D107 26 F7 BNE ZD100 |
0513 D109 35 B0 ZD109 PULS PC,Y,X |
0514 * |
0515 ** STANDARD FILE NAME EXTTENSIONS |
0516 * |
0517 D10B 42 49 4E EXTTBL FCC "BIN" |
0518 D10E 54 58 54 FCC "TXT" |
0519 D111 43 4D 44 FCC "CMD" |
0520 D114 42 41 53 FCC "BAS" |
0521 D117 53 59 53 FCC "SYS" |
0522 D11A 42 41 4B FCC "BAK" |
0523 D11D 53 43 52 FCC "SCR" |
0524 D120 44 41 54 FCC "DAT" |
0525 D123 42 41 43 FCC "BAC" |
0526 D126 44 49 52 FCC "DIR" |
0527 D129 50 52 54 FCC "PRT" |
0528 D12C 4F 55 54 FCC "OUT" |
0529 * |
0530 ** READ A HEX ADDRESS FROM THE LINE BUFFER |
0531 * |
0532 D12F BD D2 1E GETHX1 JSR >ZD21E |
0533 D132 BD D0 0E ZD132 JSR >NXTCH1 |
0534 D135 25 22 BCS ZD159 |
0535 D137 8D 26 BSR ZD15F |
0536 D139 25 18 BCS ZD153 |
0537 D13B 34 04 PSHS B |
0538 D13D C6 04 LDB #$04 |
0539 D13F 78 CC 1C ZD13F ASL >LODOFF+1 |
0540 D142 79 CC 1B ROL >LODOFF |
0541 D145 5A DECB |
0542 D146 26 F7 BNE ZD13F |
0543 D148 35 04 PULS B |
0544 D14A BB CC 1C ADDA >LODOFF+1 |
0545 D14D B7 CC 1C STA >LODOFF+1 |
0546 D150 5C INCB |
0547 D151 20 DF BRA ZD132 |
0548 |
0549 D153 BD D0 0E ZD153 JSR >NXTCH1 |
0550 D156 24 FB BCC ZD153 |
0551 D158 39 RTS |
0552 |
0553 D159 BE CC 1B ZD159 LDX >LODOFF |
0554 D15C 1C FE ANDCC #$FE |
0555 D15E 39 RTS |
0556 |
0557 D15F 80 47 ZD15F SUBA #$47 |
0558 D161 2A 0F BPL ZD172 |
0559 D163 8B 06 ADDA #$06 |
0560 D165 2A 04 BPL ZD16B |
0561 D167 8B 07 ADDA #$07 |
0562 D169 2A 07 BPL ZD172 |
0563 D16B 8B 0A ZD16B ADDA #$0A |
0564 D16D 2B 03 BMI ZD172 |
0565 D16F 1C FE ANDCC #$FE |
0566 D171 39 RTS |
0567 |
0568 D172 1A 01 ZD172 ORCC #$01 |
0569 D174 39 RTS |
0570 |
0571 D175 BD D2 1E INDEC1 JSR >ZD21E |
0572 D178 BD D0 0E ZD178 JSR >NXTCH1 |
0573 D17B 25 DC BCS ZD159 |
0574 D17D 81 39 CMPA #$39 |
0575 D17F 22 D2 BHI ZD153 |
0576 D181 84 0F ANDA #$0F |
0577 D183 34 04 PSHS B |
0578 D185 34 02 PSHS A |
0579 D187 FC CC 1B LDD >LODOFF |
0580 D18A 58 ASLB |
0581 D18B 49 ROLA |
0582 D18C 58 ASLB |
0583 D18D 49 ROLA |
0584 D18E 58 ASLB |
0585 D18F 49 ROLA |
0586 D190 F3 CC 1B ADDD >LODOFF |
0587 D193 F3 CC 1B ADDD >LODOFF |
0588 D196 EB E0 ADDB ,S+ |
0589 D198 89 00 ADCA #$00 |
0590 D19A FD CC 1B STD >LODOFF |
0591 D19D 35 04 PULS B |
0592 D19F 5C INCB |
0593 D1A0 20 D6 BRA ZD178 |
0594 * |
0595 ** LOAD BINARY FILE |
0596 * |
0597 D1A2 7F CC 1D LOAD1 CLR >TRNFLG |
0598 D1A5 8D 3D ZD1A5 BSR ZD1E4 |
0599 D1A7 81 02 CMPA #$02 |
0600 D1A9 27 15 BEQ ZD1C0 |
0601 D1AB 81 16 CMPA #$16 |
0602 D1AD 26 F6 BNE ZD1A5 |
0603 D1AF 8D 33 BSR ZD1E4 |
0604 D1B1 B7 CC 1E STA >TRNVEC |
0605 D1B4 8D 2E BSR ZD1E4 |
0606 D1B6 B7 CC 1F STA >TRNVEC+1 |
0607 D1B9 86 01 LDA #$01 |
0608 D1BB B7 CC 1D STA >TRNFLG |
0609 D1BE 20 E5 BRA ZD1A5 |
0610 |
0611 D1C0 8D 22 ZD1C0 BSR ZD1E4 |
0612 D1C2 1F 89 TFR A,B |
0613 D1C4 8D 1E BSR ZD1E4 |
0614 D1C6 1E 89 EXG A,B |
0615 D1C8 F3 CC 1B ADDD >LODOFF |
0616 D1CB FD CC 3D STD >ZCC3D |
0617 D1CE 8D 14 BSR ZD1E4 |
0618 D1D0 1F 89 TFR A,B |
0619 D1D2 4D TSTA |
0620 D1D3 27 D0 BEQ ZD1A5 |
0621 D1D5 8D 0D ZD1D5 BSR ZD1E4 |
0622 D1D7 BE CC 3D LDX >ZCC3D |
0623 D1DA A7 80 STA ,X+ |
0624 D1DC BF CC 3D STX >ZCC3D |
0625 D1DF 5A DECB |
0626 D1E0 26 F3 BNE ZD1D5 |
0627 D1E2 20 C1 BRA ZD1A5 |
0628 |
0629 D1E4 8E C8 40 ZD1E4 LDX #FCB |
0630 D1E7 BD D4 06 JSR >FMS |
0631 D1EA 27 11 BEQ ZD1FD |
0632 D1EC A6 01 LDA $01,X |
0633 D1EE 81 08 CMPA #$08 |
0634 D1F0 26 0E BNE ZD200 |
0635 D1F2 32 62 LEAS $02,S |
0636 D1F4 86 04 ZD1F4 LDA #$04 |
0637 D1F6 A7 84 STA ,X |
0638 D1F8 BD D4 06 JSR >FMS |
0639 D1FB 26 0D BNE ZD20A |
0640 D1FD 1C FE ZD1FD ANDCC #$FE |
0641 D1FF 39 RTS |
0642 |
0643 D200 B7 CC 20 ZD200 STA >ERRTYP |
0644 D203 81 04 CMPA #$04 |
0645 D205 26 03 BNE ZD20A |
0646 D207 1A 01 ORCC #$01 |
0647 D209 39 RTS |
0648 |
0649 D20A 8D 73 ZD20A BSR RPTER1 |
0650 D20C 7E CD E4 JMP >ZCDE4 |
0651 * |
0652 ** 'GET' - LOAD BINARY FILE |
0653 * |
0654 D20F 86 00 GETCMD LDA #$00 |
0655 D211 8D 35 BSR ZD248 |
0656 D213 25 0F BCS ZD224 |
0657 D215 8D 07 BSR ZD21E |
0658 D217 7C CC 4C INC >ZCC4C |
0659 D21A 8D 86 BSR LOAD1 |
0660 D21C 20 F1 BRA GETCMD |
0661 |
0662 D21E 4F ZD21E CLRA |
0663 D21F 5F CLRB |
0664 D220 FD CC 1B STD >LODOFF |
0665 D223 39 RTS |
0666 |
0667 D224 F6 CC 4C ZD224 LDB >ZCC4C |
0668 D227 10 27 FB AE LBEQ ZCDD9 |
0669 D22B 7E CD 03 JMP >WARMS |
0670 |
0671 D22E 86 02 ZD22E LDA #$02 |
0672 D230 8D 22 BSR ZD254 |
0673 D232 8D EA BSR ZD21E |
0674 D234 BD D1 A2 JSR >LOAD1 |
0675 D237 F6 CC 1D LDB >TRNFLG |
0676 D23A 27 04 BEQ ZD240 |
0677 D23C 6E 9F CC 1E JMP [TRNVEC] |
0678 |
0679 D240 8E CC 5C ZD240 LDX #NTRMSG |
0680 D243 86 81 LDA #$81 |
0681 D245 7E CD DE JMP >ZCDDE |
0682 |
0683 D248 34 02 ZD248 PSHS A |
0684 D24A 8E C8 40 LDX #FCB |
0685 D24D BD D0 36 JSR >GETFL1 |
0686 D250 35 02 PULS A |
0687 D252 25 1A BCS ZD26E |
0688 D254 8E C8 40 ZD254 LDX #FCB |
0689 D257 BD D0 EB JSR >SETEX1 |
0690 D25A 8E C8 40 LDX #FCB |
0691 D25D 86 01 LDA #$01 |
0692 D25F A7 84 STA ,X |
0693 D261 BD D1 E4 JSR >ZD1E4 |
0694 D264 10 25 00 BB LBCS ZD323 |
0695 D268 86 FF LDA #$FF |
0696 D26A A7 88 3B STA $3B,X |
0697 D26D 39 RTS |
0698 |
0699 D26E B6 CC 11 ZD26E LDA >LASTRM |
0700 D271 81 0D CMPA #$0D |
0701 D273 27 07 BEQ ZD27C |
0702 D275 B1 CC 02 CMPA >EOLCHR |
0703 D278 10 26 FB 5D LBNE ZCDD9 |
0704 D27C 1A 01 ZD27C ORCC #$01 |
0705 D27E 39 RTS |
0706 |
0707 D27F 34 30 RPTER1 PSHS Y,X |
0708 D281 A6 01 LDA $01,X |
0709 D283 B7 CC 20 STA >ERRTYP |
0710 D286 27 63 BEQ ZD2EB |
0711 D288 BD CD EA JSR >RSTIO1 |
0712 D28B 10 BE CC 2D LDY >ERRVEC |
0713 D28F 26 08 BNE ZD299 |
0714 D291 81 10 CMPA #$10 |
0715 D293 27 58 BEQ ZD2ED |
0716 D295 10 8E D3 61 LDY #ZD361 |
0717 D299 8E C8 40 ZD299 LDX #FCB |
0718 D29C 6D 02 TST $02,X |
0719 D29E 27 09 BEQ ZD2A9 |
0720 D2A0 86 04 LDA #$04 |
0721 D2A2 A7 84 STA ,X |
0722 D2A4 BD D4 06 JSR >FMS |
0723 D2A7 26 2E BNE ZD2D7 |
0724 D2A9 8E C8 38 ZD2A9 LDX #ZC838 |
0725 D2AC C6 0B LDB #$0B |
0726 D2AE 8D 6E BSR ZD31E |
0727 D2B0 8E C8 40 LDX #FCB |
0728 D2B3 B6 CC 0B LDA >SYSDRV |
0729 D2B6 A7 03 STA $03,X |
0730 D2B8 86 01 LDA #$01 |
0731 D2BA A7 84 STA ,X |
0732 D2BC BD D4 06 JSR >FMS |
0733 D2BF 26 16 BNE ZD2D7 |
0734 D2C1 B6 CC 20 LDA >ERRTYP |
0735 D2C4 4A DECA |
0736 D2C5 47 ASRA |
0737 D2C6 47 ASRA |
0738 D2C7 4C INCA |
0739 D2C8 6F 88 20 CLR $20,X |
0740 D2CB A7 88 21 STA $21,X |
0741 D2CE 86 15 LDA #$15 |
0742 D2D0 A7 84 STA ,X |
0743 D2D2 BD D4 06 JSR >FMS |
0744 D2D5 27 1E BEQ ZD2F5 |
0745 D2D7 8E CC 75 ZD2D7 LDX #DERMSG |
0746 D2DA BD CE 81 JSR >PSTRG1 |
0747 D2DD BE CC 3F LDX >ZCC3F |
0748 D2E0 B6 CC 20 LDA >ERRTYP |
0749 D2E3 A7 01 STA $01,X |
0750 D2E5 6F 84 CLR ,X |
0751 D2E7 5F CLRB |
0752 D2E8 BD CF 86 JSR >OUTDC1 |
0753 D2EB 35 B0 ZD2EB PULS PC,Y,X |
0754 |
0755 D2ED 8E CC 82 ZD2ED LDX #DNRMSG |
0756 D2F0 BD CE 81 JSR >PSTRG1 |
0757 D2F3 20 F6 BRA ZD2EB |
0758 |
0759 D2F5 BD CE B5 ZD2F5 JSR >PCRLF1 |
0760 D2F8 8E C8 40 LDX #FCB |
0761 D2FB B6 CC 20 LDA >ERRTYP |
0762 D2FE 4A DECA |
0763 D2FF 84 03 ANDA #$03 |
0764 D301 C6 3F LDB #$3F |
0765 D303 3D MUL |
0766 D304 CB 04 ADDB #$04 |
0767 D306 E7 88 22 STB $22,X |
0768 D309 BD D4 06 ZD309 JSR >FMS |
0769 D30C 26 C9 BNE ZD2D7 |
0770 D30E BD CF 41 JSR >PUTCH1 |
0771 D311 81 0D CMPA #$0D |
0772 D313 26 F4 BNE ZD309 |
0773 D315 86 04 LDA #$04 |
0774 D317 A7 84 STA ,X |
0775 D319 BD D4 06 JSR >FMS |
0776 D31C 20 CD BRA ZD2EB |
0777 D31E 34 30 ZD31E PSHS Y,X |
0778 D320 7E D1 00 JMP >ZD100 |
0779 |
0780 D323 8E CC 6B ZD323 LDX #NFDMSG NOT FOUND |
0781 D326 7E CD E1 JMP >ZCDE1 |
0782 * |
0783 ** CALL FLEX AS A SUBROUTINE |
0784 * |
0785 D329 35 06 DOCMD1 PULS B,A |
0786 D32B FD CC 43 STD >ZCC43 |
0787 D32E 10 FF CC 45 ZD32E STS >ZCC45 |
0788 D332 7F CC 20 CLR >ERRTYP |
0789 D335 7C CC 28 INC >CMDFLG |
0790 D338 7E CD B8 JMP >ZCDB8 |
0791 D33B 7F CC 28 ZD33B CLR >CMDFLG |
0792 D33E 10 FE CC 45 LDS >ZCC45 |
0793 D342 F6 CC 20 LDB >ERRTYP |
0794 D345 6E 9F CC 43 JMP [ZCC43] |
0795 * |
0796 ** ADD ACCB TO IX |
0797 * |
0798 D349 3A ADDBX1 ABX |
0799 D34A 39 RTS |
0800 |
0801 D34B 7D CC FC ZD34B TST >ZCCFC |
0802 D34E 26 04 BNE ZD354 |
0803 D350 6E 9F D3 F3 JMP [MONVEC] |
0804 |
0805 D354 8E C8 40 ZD354 LDX #FCB |
0806 D357 86 1B LDA #$1B |
0807 D359 A7 01 STA $01,X |
0808 D35B BD D2 7F JSR >RPTER1 |
0809 D35E 7E CD 67 JMP >WARM1 |
0810 |
0811 D361 45 52 52 4F 52 53 ZD361 FCC /ERRORS/ |
0812 D367 00 00 FCB $00,$00 |
0813 D369 53 59 53 FCC /SYS/ |
0009 END |
0000 INCLUDE "f9-monio.txt" |
0001 * |
0002 ** TERMINAL AND PRINTER DRIVERS |
0003 ** SYS09BUG - Spartan 3 Starter Board |
0004 * |
0005 ** FLEX DRIVER MEMORY MAP: |
0006 ** C700 - C83F PRINTER SPOOLER |
0007 ** CCC0 - CCF7 PRINTER DRIVERS |
0008 ** D370 - D3FF CONSOLE DRIVERS |
0009 ** DE00 - DFAF DISK DRIVERS |
0010 * |
0011 * |
0012 ** INTERRUPT VECTORS |
0013 * |
0014 DFC8 IRQVEC EQU MONRAM+$08 |
0015 DFC2 SWIVEC EQU MONRAM+$02 SWI3 VECTOR |
0016 * |
0017 ** PRINTER DRIVERS |
0018 * |
0019 CCC0 ORG $CCC0 |
0020 CCC0 7E D3 70 PINIT JMP DUMRTS INITIATE PRINTER |
0021 CCD8 ORG $CCD8 |
0022 CCD8 7E D3 70 PCHK JMP DUMRTS CHECK IF PRINTER READY |
0023 CCE4 ORG $CCE4 |
0024 CCE4 7E D3 70 POUT JMP DUMRTS OUTPUT CHR. TO PRINTER |
0025 CCF8 ORG $CCF8 |
0026 CCF8 01 00 00 00 ZCCF8 FCB $01,$00,$00,$00 |
0027 CCFC 00 00 00 00 ZCCFC FCB $00,$00,$00,$00 |
0028 * |
0029 ** CONSOLE DRIVER PATCHES: |
0030 * |
0031 D370 ORG $D370 |
0032 D370 IHND EQU * INTERRUPT HANDLER |
0033 D370 TMON EQU * TIMER ON |
0034 D370 TMOFF EQU * TIMER OFF |
0035 D370 TMINT EQU * TIMER INITIALIZATION |
0036 D370 DUMRTS EQU * |
0037 D370 39 RTS |
0038 * |
0039 ** SBUG MONITOR I/O CALLS |
0040 * |
0041 D371 7E D3 70 TERINZ JMP DUMRTS INITIATE ACIA |
0042 D374 6E 9F F8 04 INCHNE JMP [MONROM+$04] INPUT WITHOUT ECHO |
0043 D378 6E 9F F8 00 MONITR JMP [MONROM+$00] |
0044 D37C 6E 9F F8 08 INCHEK JMP [MONROM+$08] CHECK FOR TERMINAL ENTRY |
0045 D380 6E 9F F8 0A OUTEEE JMP [MONROM+$0A] OUPUT CHARACTER |
0046 D384 6E 9F F8 06 INEEE JMP [MONROM+$06] INPUT WITH ECHO |
0047 |
0048 * |
0049 ** AUTO BLOCK FDBS |
0050 * |
0051 D3E5 ORG $D3E5 |
0052 D3E5 D3 74 ZD3E5 FDB INCHNE INPUT - NO ECHO |
0053 D3E7 D3 70 IHNDVC FDB IHND IRQ INTERRUPT HANDLER |
0054 D3E9 DF C2 SWIVVC FDB SWIVEC SWI3 VECTOR LOCATION |
0055 D3EB DF C8 IRQVVC FDB IRQVEC IRQ VECTOR LOCATION |
0056 D3ED D3 70 TOFVEC FDB TMOFF TIMER OFF ROUTINE |
0057 D3EF D3 70 TONVEC FDB TMON TIMER ON ROUTINE |
0058 D3F1 D3 70 TINVEC FDB TMINT TIMER INITIALIZE ROUTINE |
0059 D3F3 D3 78 MONVEC FDB MONITR MONITOR RETURN ADDRESS |
0060 D3F5 D3 71 TERVEC FDB TERINZ TERMINAL INITIATION |
0061 D3F7 D3 7C STAVEC FDB INCHEK CHECK TERMINAL STATUS |
0062 D3F9 D3 80 OUTVEC FDB OUTEEE TERMINAL CHAR OUTPUT |
0063 D3FB D3 84 INVEC FDB INEEE TERMINAL INPUT CHARACTER |
0064 D3FD 7E CA 00 ZD3FD JMP ZCA00 |
0010 END |
0000 INCLUDE "f9-fms.txt" |
0001 * |
0002 ** FILE MANAGEMENT SYSTEM |
0003 * |
0004 D400 7E D4 36 ZD400 JMP >ZD436 |
0005 D403 7E D4 59 FMSCLS JMP >ZD459 |
0006 D406 7E D4 7B FMS JMP >FMS1 |
0007 D409 20 44 49 53 4B 20 CPYMSG FCC / DISK OPERATING SYSTEM/ |
4F 50 45 52 41 54 |
49 4E 47 20 53 59 |
53 54 45 4D |
0008 D41F 20 43 4F 50 59 52 FCC / COPYRIGHT (C) 1980 BY/ |
49 47 48 54 20 28 |
43 29 20 31 39 38 |
30 20 42 59 |
0009 D435 20 54 45 43 48 4E FCC / TECHNICAL SYSTEMS CONSULTANTS/ |
49 43 41 4C 20 53 |
59 53 54 45 4D 53 |
20 43 4F 4E 53 55 |
4C 54 41 4E 54 53 |
0010 D409 ORG CPYMSG |
0011 D409 FCBPTR RMB 2 |
0012 D40B CURFCB RMB 4 |
0013 D40F ZD40F RMB 2 |
0014 D411 ZD411 RMB 1 |
0015 D412 ZD412 RMB 1 |
0016 D413 ZD413 RMB 1 |
0017 D414 ZD414 RMB 1 |
0018 D415 ZD415 RMB 2 |
0019 D417 ZD417 RMB 1 |
0020 D418 ZD418 RMB 2 |
0021 D41A ZD41A RMB 1 |
0022 D41B ZD41B RMB 2 |
0023 D41D ZD41D RMB 24 |
0024 D435 FF VERFLG FCB $FF |
0025 * |
0026 ** |
0027 * |
0028 D436 BD DE 15 ZD436 JSR >COLDDR |
0029 D439 8E D4 09 LDX #FCBPTR |
0030 D43C C6 0A LDB #$0A |
0031 D43E 8D 11 BSR ZD451 |
0032 D440 8E 00 05 LDX #Z0005 |
0033 D443 BF D4 13 STX >ZD413 |
0034 D446 BF D4 15 STX >ZD415 |
0035 D449 7F D4 1A CLR >ZD41A |
0036 D44C 8E D4 1B ZD44C LDX #ZD41B |
0037 D44F C6 1A LDB #$1A |
0038 D451 6F 80 ZD451 CLR ,X+ |
0039 D453 5A DECB |
0040 D454 26 FB BNE ZD451 |
0041 D456 7E C7 0C JMP >PRSPL5 |
0042 |
0043 D459 BD C7 09 ZD459 JSR >PRSPL4 |
0044 D45C BE D4 09 ZD45C LDX >FCBPTR |
0045 D45F 27 EB BEQ ZD44C |
0046 D461 30 88 E4 LEAX -$1C,X |
0047 D464 BF D4 0B STX >CURFCB |
0048 D467 34 20 PSHS Y |
0049 D469 BD DA C3 JSR >CLOSE |
0050 D46C 35 20 PULS Y |
0051 D46E 24 EC BCC ZD45C |
0052 D470 BE D4 0B LDX >CURFCB |
0053 D473 6F 02 CLR $02,X |
0054 D475 BD C7 0C JSR >PRSPL5 |
0055 D478 C6 FF LDB #$FF |
0056 D47A 39 RTS |
0057 |
0058 * |
0059 ** FMS CALL, PROCESSING |
0060 * |
0061 D47B 7D CC FC FMS1 TST >ZCCFC |
0062 D47E 27 03 BEQ ZD483 |
0063 D480 BD C7 09 JSR >PRSPL4 |
0064 D483 34 24 ZD483 PSHS Y,B |
0065 D485 BF D4 0B STX >CURFCB |
0066 D488 6F 01 CLR $01,X |
0067 D48A E6 84 LDB ,X |
0068 D48C 26 22 BNE DOFUNC |
0069 * |
0070 ** READ/WRITE CHAR/BYTE |
0071 * |
0072 D48E E6 02 LDB $02,X |
0073 D490 27 1A BEQ ZD4AC |
0074 D492 C1 02 CMPB #$02 |
0075 D494 27 11 BEQ ZD4A7 |
0076 D496 BD D5 B4 JSR >ZD5B4 |
0077 D499 BE D4 0B ZD499 LDX >CURFCB |
0078 D49C 25 26 BCS ZD4C4 |
0079 D49E 7D CC FC TST >ZCCFC |
0080 D4A1 26 23 BNE ZD4C6 |
0081 D4A3 5F CLRB |
0082 D4A4 35 24 PULS Y,B |
0083 D4A6 39 RTS |
0084 |
0085 D4A7 BD D6 CF ZD4A7 JSR >ZD6CF |
0086 D4AA 20 ED BRA ZD499 |
0087 D4AC C6 12 ZD4AC LDB #$12 |
0088 D4AE 20 14 BRA ZD4C4 |
0089 |
0090 D4B0 C1 16 DOFUNC CMPB #$16 |
0091 D4B2 23 04 BLS DOFUN1 |
0092 D4B4 C6 01 LDB #$01 |
0093 D4B6 20 0C BRA ZD4C4 |
0094 D4B8 5A DOFUN1 DECB |
0095 D4B9 58 ASLB |
0096 D4BA 8E D4 CE LDX #FMSTBL |
0097 D4BD AD 95 JSR [B,X] |
0098 D4BF BE D4 0B LDX >CURFCB |
0099 D4C2 24 02 BCC ZD4C6 |
0100 D4C4 E7 01 ZD4C4 STB $01,X |
0101 D4C6 BD C7 0C ZD4C6 JSR >PRSPL5 |
0102 D4C9 6D 01 TST $01,X |
0103 D4CB 35 24 PULS Y,B |
0104 D4CD 39 RTS |
0105 * |
0106 ** FMS COMMAND VECTOR TABLE |
0107 * |
0108 D4CE D9 86 FMSTBL FDB OPENRD FC 1 |
0109 D4D0 D9 D9 FDB OPENWR FC 2 |
0110 D4D2 DA F9 FDB OPENUD FC 3 |
0111 D4D4 DA C3 FDB CLOSE FC 4 |
0112 D4D6 D5 E2 FDB REWIND FC 5 |
0113 D4D8 D8 1D FDB OPNDIR FC 6 |
0114 D4DA D8 38 FDB GETREC FC 7 |
0115 D4DC D8 76 FDB PUTREC FC 8 |
0116 D4DE D6 41 FDB RDSECT FC 9 |
0117 D4E0 D6 9F FDB WRSECT FC 10 |
0118 D4E2 D9 69 FDB RESV1 FC 11 |
0119 D4E4 DB D6 FDB DELETE FC 12 |
0120 D4E6 DB 2C FDB RENAME FC 13 |
0121 D4E8 D6 99 FDB RESV2 FC 14 |
0122 D4EA DA 87 FDB NXTSEC FC 15 |
0123 D4EC D8 10 FDB OPNREC FC 16 |
0124 D4EE D5 6F FDB GETBYT FC 17 |
0125 D4F0 D5 90 FDB PUTBYT FC 18 |
0126 D4F2 DB 07 FDB RESV3 FC 19 |
0127 D4F4 DD BD FDB NXTDRV FC 20 |
0128 D4F6 DC FB FDB POSREC FC 21 |
0129 D4F8 DC E5 FDB BAKREC FC 22 |
0130 * |
0131 ** |
0132 * |
0133 D4FA 8D 20 ZD4FA BSR ZD51C |
0134 D4FC 26 05 BNE ZD503 |
0135 D4FE C6 02 LDB #$02 |
0136 D500 1A 01 ORCC #$01 |
0137 D502 39 RTS |
0138 |
0139 D503 ED 84 ZD503 STD ,X |
0140 D505 AE 84 LDX ,X |
0141 D507 6F 84 CLR ,X |
0142 D509 6F 01 CLR $01,X |
0143 D50B 39 RTS |
0144 |
0145 D50C 8D 0E ZD50C BSR ZD51C |
0146 D50E 27 05 BEQ ZD515 |
0147 D510 C6 0D LDB #$0D |
0148 D512 1A 01 ORCC #$01 |
0149 D514 39 RTS |
0150 |
0151 D515 EC 94 ZD515 LDD [,X] |
0152 D517 ED 84 STD ,X |
0153 D519 1C FE ANDCC #$FE |
0154 D51B 39 RTS |
0155 |
0156 D51C FC D4 0B ZD51C LDD >CURFCB |
0157 D51F C3 00 1C ADDD #$001C |
0158 D522 8E D4 09 LDX #FCBPTR |
0159 D525 10 AE 84 ZD525 LDY ,X |
0160 D528 26 03 BNE ZD52D |
0161 D52A 1C FB ANDCC #$FB |
0162 D52C 39 RTS |
0163 |
0164 D52D 10 A3 84 ZD52D CMPD ,X |
0165 D530 26 01 BNE ZD533 |
0166 D532 39 RTS |
0167 D533 AE 84 ZD533 LDX ,X |
0168 D535 20 EE BRA ZD525 |
0169 |
0170 D537 BE D4 0B ZD537 LDX >CURFCB |
0171 D53A 4F CLRA |
0172 D53B 5F CLRB |
0173 D53C 8D 02 BSR ZD540 |
0174 D53E C6 2F LDB #$2F |
0175 D540 A7 88 11 ZD540 STA $11,X |
0176 D543 30 01 LEAX $01,X |
0177 D545 5A DECB |
0178 D546 26 F8 BNE ZD540 |
0179 D548 39 RTS |
0180 |
0181 D549 BE D4 0B ZD549 LDX >CURFCB |
0182 D54C C6 0B LDB #$0B |
0183 D54E A6 04 ZD54E LDA $04,X |
0184 D550 A7 88 24 STA $24,X |
0185 D553 30 01 LEAX $01,X |
0186 D555 5A DECB |
0187 D556 26 F6 BNE ZD54E |
0188 D558 39 RTS |
0189 |
0190 D559 BE D4 0B ZD559 LDX >CURFCB |
0191 D55C C6 0B LDB #$0B |
0192 D55E A6 04 ZD55E LDA $04,X |
0193 D560 34 02 PSHS A |
0194 D562 A6 88 24 LDA $24,X |
0195 D565 A1 E0 CMPA ,S+ |
0196 D567 26 05 BNE ZD56E |
0197 D569 30 01 LEAX $01,X |
0198 D56B 5A DECB |
0199 D56C 26 F0 BNE ZD55E |
0200 D56E 39 ZD56E RTS |
0201 * |
0202 ** GET RANDOM BYTE FROM SECTOR |
0203 * |
0204 D56F BE D4 0B GETBYT LDX >CURFCB |
0205 D572 E6 02 LDB $02,X |
0206 D574 54 LSRB |
0207 D575 24 79 BCC ZD5F0 |
0208 D577 E6 88 23 LDB $23,X |
0209 D57A 7E D6 00 JMP >ZD600 |
0210 |
0211 D57D BE D4 0B ZD57D LDX >CURFCB |
0212 D580 E6 88 22 LDB $22,X |
0213 D583 6C 88 22 INC $22,X |
0214 D586 3A ABX |
0215 D587 A7 88 40 STA $40,X |
0216 D58A 5C INCB |
0217 D58B 26 1F BNE ZD5AC |
0218 D58D 1A 01 ORCC #$01 |
0219 D58F 39 RTS |
0220 * |
0221 ** PUT RANDOM BYTE IN SECTOR |
0222 * |
0223 D590 BE D4 0B PUTBYT LDX >CURFCB |
0224 D593 E6 02 LDB $02,X |
0225 D595 C4 03 ANDB #$03 |
0226 D597 C1 03 CMPB #$03 |
0227 D599 26 55 BNE ZD5F0 |
0228 D59B CA 80 ORB #$80 |
0229 D59D E7 02 STB $02,X |
0230 D59F E6 0F LDB $0F,X |
0231 D5A1 C5 80 BITB #$80 |
0232 D5A3 26 0A BNE ZD5AF |
0233 D5A5 E6 88 23 LDB $23,X |
0234 D5A8 3A ABX |
0235 D5A9 A7 88 40 STA $40,X |
0236 D5AC 1C FE ZD5AC ANDCC #$FE |
0237 D5AE 39 RTS |
0238 |
0239 D5AF C6 0B ZD5AF LDB #$0B |
0240 D5B1 1A 01 ORCC #$01 |
0241 D5B3 39 RTS |
0242 |
0243 D5B4 A6 88 3B ZD5B4 LDA $3B,X |
0244 D5B7 2B 3C BMI ZD5F5 |
0245 D5B9 27 07 BEQ ZD5C2 |
0246 D5BB 6A 88 3B DEC $3B,X |
0247 D5BE 86 20 LDA #$20 |
0248 D5C0 20 1D BRA ZD5DF |
0249 |
0250 D5C2 8D 31 ZD5C2 BSR ZD5F5 |
0251 D5C4 25 1B BCS ZD5E1 |
0252 D5C6 81 18 CMPA #$18 |
0253 D5C8 22 15 BHI ZD5DF |
0254 D5CA 27 F6 BEQ ZD5C2 |
0255 D5CC 81 09 CMPA #$09 |
0256 D5CE 26 0C BNE ZD5DC |
0257 D5D0 8D 23 BSR ZD5F5 |
0258 D5D2 25 0D BCS ZD5E1 |
0259 D5D4 BE D4 0B LDX >CURFCB |
0260 D5D7 A7 88 3B STA $3B,X |
0261 D5DA 20 D8 BRA ZD5B4 |
0262 |
0263 D5DC 4D ZD5DC TSTA |
0264 D5DD 27 E3 BEQ ZD5C2 |
0265 D5DF 1C FE ZD5DF ANDCC #$FE |
0266 D5E1 39 ZD5E1 RTS |
0267 * |
0268 ** REWIND FILE |
0269 * |
0270 D5E2 BD DA B1 REWIND JSR >ZDAB1 |
0271 D5E5 25 09 BCS ZD5F0 |
0272 D5E7 85 01 BITA #$01 |
0273 D5E9 27 05 BEQ ZD5F0 |
0274 D5EB A7 84 STA ,X |
0275 D5ED 7E D9 A0 JMP >ZD9A0 |
0276 |
0277 D5F0 C6 12 ZD5F0 LDB #$12 |
0278 D5F2 1A 01 ORCC #$01 |
0279 D5F4 39 RTS |
0280 |
0281 D5F5 BE D4 0B ZD5F5 LDX >CURFCB |
0282 D5F8 E6 88 22 LDB $22,X |
0283 D5FB 27 0A BEQ ZD607 |
0284 D5FD 6C 88 22 INC $22,X |
0285 D600 3A ZD600 ABX |
0286 D601 A6 88 40 LDA $40,X |
0287 D604 1C FE ANDCC #$FE |
0288 D606 39 RTS |
0289 |
0290 D607 8D 03 ZD607 BSR ZD60C |
0291 D609 24 EA BCC ZD5F5 |
0292 D60B 39 RTS |
0293 |
0294 D60C BE D4 0B ZD60C LDX >CURFCB |
0295 D60F EC 88 40 LDD $40,X |
0296 D612 6C 88 21 INC $21,X |
0297 D615 26 03 BNE ZD61A |
0298 D617 6C 88 20 INC $20,X |
0299 D61A 10 83 00 00 ZD61A CMPD #$0000 |
0300 D61E 27 1C BEQ ZD63C |
0301 D620 ED 88 1E ZD620 STD $1E,X |
0302 D623 34 02 PSHS A |
0303 D625 86 04 LDA #$04 |
0304 D627 A7 88 22 STA $22,X |
0305 D62A 35 02 PULS A |
0306 D62C 8D 13 BSR RDSECT |
0307 D62E 24 10 BCC ZD640 |
0308 D630 C5 80 BITB #$80 |
0309 D632 27 04 BEQ ZD638 |
0310 D634 C6 10 LDB #$10 |
0311 D636 20 06 BRA ZD63E |
0312 |
0313 D638 C6 09 ZD638 LDB #$09 |
0314 D63A 20 02 BRA ZD63E |
0315 |
0316 D63C C6 08 ZD63C LDB #$08 |
0317 D63E 1A 01 ZD63E ORCC #$01 |
0318 D640 39 ZD640 RTS |
0319 * |
0320 ** READ SINGLE SECTOR |
0321 * |
0322 D641 8D 25 RDSECT BSR ZD668 |
0323 D643 BE D4 0B LDX >CURFCB |
0324 D646 BD DE 0C JSR >DRIVE |
0325 D649 25 12 BCS ZD65D |
0326 D64B 8D 11 ZD64B BSR ZD65E |
0327 D64D BD DE 00 JSR >READ |
0328 D650 26 03 BNE ZD655 |
0329 D652 1C FE ANDCC #$FE |
0330 D654 39 RTS |
0331 |
0332 D655 34 04 ZD655 PSHS B |
0333 D657 8D 17 BSR ZD670 |
0334 D659 35 04 PULS B |
0335 D65B 24 EE BCC ZD64B |
0336 D65D 39 ZD65D RTS |
0337 |
0338 D65E BE D4 0B ZD65E LDX >CURFCB |
0339 D661 EC 88 1E LDD $1E,X |
0340 D664 30 88 40 LEAX $40,X |
0341 D667 39 RTS |
0342 |
0343 D668 4F ZD668 CLRA |
0344 D669 B7 D4 11 STA >ZD411 |
0345 D66C B7 D4 12 STA >ZD412 |
0346 D66F 39 RTS |
0347 |
0348 D670 C5 10 ZD670 BITB #$10 |
0349 D672 26 11 BNE ZD685 |
0350 D674 C5 80 BITB #$80 |
0351 D676 26 24 BNE ZD69C |
0352 D678 F6 D4 11 LDB >ZD411 |
0353 D67B 5C INCB |
0354 D67C C1 07 CMPB #$07 |
0355 D67E 27 05 BEQ ZD685 |
0356 D680 F7 D4 11 STB >ZD411 |
0357 D683 20 14 BRA RESV2 |
0358 |
0359 D685 7F D4 11 ZD685 CLR >ZD411 |
0360 D688 F6 D4 12 LDB >ZD412 |
0361 D68B 5C INCB |
0362 D68C C1 04 CMPB #$04 |
0363 D68E 27 0C BEQ ZD69C |
0364 D690 F7 D4 12 STB >ZD412 |
0365 D693 BE D4 0B LDX >CURFCB |
0366 D696 BD DE 09 JSR >RESTOR |
0367 * |
0368 ** RESERVED |
0369 * |
0370 D699 1C FE RESV2 ANDCC #$FE |
0371 D69B 39 RTS |
0372 D69C 1A 01 ZD69C ORCC #$01 |
0373 D69E 39 RTS |
0374 * |
0375 ** WRITE SINGLE SECTOR |
0376 * |
0377 D69F 8D C7 WRSECT BSR ZD668 |
0378 D6A1 BE D4 0B LDX >CURFCB |
0379 D6A4 BD DE 0C JSR >DRIVE |
0380 D6A7 25 20 BCS ZD6C9 |
0381 D6A9 BE D4 0B ZD6A9 LDX >CURFCB |
0382 D6AC 8D B0 BSR ZD65E |
0383 D6AE BD DE 03 JSR >WRITE |
0384 D6B1 26 0A BNE ZD6BD |
0385 D6B3 B6 D4 35 LDA >VERFLG |
0386 D6B6 27 37 BEQ ZD6EF |
0387 D6B8 BD DE 06 JSR >VERIFY |
0388 D6BB 27 32 BEQ ZD6EF |
0389 D6BD C5 40 ZD6BD BITB #$40 |
0390 D6BF 26 0B BNE ZD6CC |
0391 D6C1 34 04 PSHS B |
0392 D6C3 8D AB BSR ZD670 |
0393 D6C5 35 04 PULS B |
0394 D6C7 24 E0 BCC ZD6A9 |
0395 D6C9 39 ZD6C9 RTS |
0396 |
0397 D6CA C6 20 LDB #$20 |
0398 D6CC 1A 01 ZD6CC ORCC #$01 |
0399 D6CE 39 RTS |
0400 |
0401 D6CF BE D4 0B ZD6CF LDX >CURFCB |
0402 D6D2 E6 88 3B LDB $3B,X |
0403 D6D5 2B 3D BMI ZD714 |
0404 D6D7 81 20 CMPA #$20 |
0405 D6D9 26 0F BNE ZD6EA |
0406 D6DB 5C INCB |
0407 D6DC E7 88 3B STB $3B,X |
0408 D6DF C1 7F CMPB #$7F |
0409 D6E1 26 0C BNE ZD6EF |
0410 D6E3 20 0D BRA ZD6F2 |
0411 |
0412 D6E5 8D 0B ZD6E5 BSR ZD6F2 |
0413 D6E7 24 E6 BCC ZD6CF |
0414 D6E9 39 RTS |
0415 |
0416 D6EA 5D ZD6EA TSTB |
0417 D6EB 27 27 BEQ ZD714 |
0418 D6ED 20 F6 BRA ZD6E5 |
0419 |
0420 D6EF 1C FE ZD6EF ANDCC #$FE |
0421 D6F1 39 RTS |
0422 |
0423 D6F2 34 02 ZD6F2 PSHS A |
0424 D6F4 C1 01 CMPB #$01 |
0425 D6F6 26 04 BNE ZD6FC |
0426 D6F8 86 20 LDA #$20 |
0427 D6FA 20 10 BRA ZD70C |
0428 |
0429 D6FC 86 09 ZD6FC LDA #$09 |
0430 D6FE 8D 14 BSR ZD714 |
0431 D700 35 02 PULS A |
0432 D702 25 0F BCS ZD713 |
0433 D704 34 02 PSHS A |
0434 D706 BE D4 0B LDX >CURFCB |
0435 D709 A6 88 3B LDA $3B,X |
0436 D70C 6F 88 3B ZD70C CLR $3B,X |
0437 D70F 8D 03 BSR ZD714 |
0438 D711 35 02 PULS A |
0439 D713 39 ZD713 RTS |
0440 |
0441 D714 BE D4 0B ZD714 LDX >CURFCB |
0442 D717 E6 02 LDB $02,X |
0443 D719 C1 02 CMPB #$02 |
0444 D71B 10 26 FE D1 LBNE ZD5F0 |
0445 D71F E6 88 22 LDB $22,X |
0446 D722 C1 04 CMPB #$04 |
0447 D724 26 08 BNE ZD72E |
0448 D726 34 02 PSHS A |
0449 D728 8D 21 BSR ZD74B |
0450 D72A 35 02 PULS A |
0451 D72C 25 0F BCS ZD73D |
0452 D72E BD D5 7D ZD72E JSR >ZD57D |
0453 D731 24 0A BCC ZD73D |
0454 D733 C6 04 LDB #$04 |
0455 D735 BE D4 0B LDX >CURFCB |
0456 D738 E7 88 22 STB $22,X |
0457 D73B 1C FE ANDCC #$FE |
0458 D73D 39 ZD73D RTS |
0459 |
0460 D73E BE D4 0B ZD73E LDX >CURFCB |
0461 D741 4F CLRA |
0462 D742 5F CLRB |
0463 D743 ED 88 20 STD $20,X |
0464 D746 ED 88 42 STD $42,X |
0465 D749 20 27 BRA ZD772 |
0466 |
0467 D74B E6 88 12 ZD74B LDB $12,X |
0468 D74E 26 22 BNE ZD772 |
0469 D750 E6 88 17 LDB $17,X |
0470 D753 27 44 BEQ ZD799 |
0471 D755 6F 88 17 CLR $17,X |
0472 D758 8D 3F BSR ZD799 |
0473 D75A 25 2A BCS ZD786 |
0474 D75C 8D E0 BSR ZD73E |
0475 D75E 25 26 BCS ZD786 |
0476 D760 8D DC BSR ZD73E |
0477 D762 25 22 BCS ZD786 |
0478 D764 BE D4 0B LDX >CURFCB |
0479 D767 C6 02 LDB #$02 |
0480 D769 E7 88 17 STB $17,X |
0481 D76C EC 88 11 LDD $11,X |
0482 D76F 7E DC 82 JMP >ZDC82 |
0483 |
0484 D772 8D 0E ZD772 BSR ZD782 |
0485 D774 BE D4 0B LDX >CURFCB |
0486 D777 ED 88 40 STD $40,X |
0487 D77A BD D6 9F JSR >WRSECT |
0488 D77D 24 1A BCC ZD799 |
0489 D77F 7E DB C1 JMP >ZDBC1 |
0490 |
0491 D782 8D 03 ZD782 BSR ZD787 |
0492 D784 EC 84 LDD ,X |
0493 D786 39 ZD786 RTS |
0494 |
0495 D787 BE D4 0B ZD787 LDX >CURFCB |
0496 D78A E6 03 LDB $03,X |
0497 D78C 86 06 LDA #$06 |
0498 D78E 3D MUL |
0499 D78F 8E D4 1D LDX #ZD41D |
0500 D792 3A ABX |
0501 D793 BF D4 1B STX >ZD41B |
0502 D796 6D 84 TST ,X |
0503 D798 39 RTS |
0504 |
0505 D799 8D E7 ZD799 BSR ZD782 |
0506 D79B 26 05 BNE ZD7A2 |
0507 D79D C6 07 LDB #$07 |
0508 D79F 1A 01 ZD79F ORCC #$01 |
0509 D7A1 39 RTS |
0510 |
0511 D7A2 BE D4 0B ZD7A2 LDX >CURFCB |
0512 D7A5 ED 88 13 STD $13,X |
0513 D7A8 6D 88 12 TST $12,X |
0514 D7AB 26 03 BNE ZD7B0 |
0515 D7AD ED 88 11 STD $11,X |
0516 D7B0 6C 88 16 ZD7B0 INC $16,X |
0517 D7B3 26 03 BNE ZD7B8 |
0518 D7B5 6C 88 15 INC $15,X |
0519 D7B8 6D 88 17 ZD7B8 TST $17,X |
0520 D7BB 27 0B BEQ ZD7C8 |
0521 D7BD BD DC 43 JSR >ZDC43 |
0522 D7C0 25 DD BCS ZD79F |
0523 D7C2 BE D4 0B LDX >CURFCB |
0524 D7C5 EC 88 13 LDD $13,X |
0525 D7C8 BD D6 20 ZD7C8 JSR >ZD620 |
0526 D7CB 25 D2 BCS ZD79F |
0527 D7CD BE D4 0B LDX >CURFCB |
0528 D7D0 EC 88 40 LDD $40,X |
0529 D7D3 34 06 PSHS B,A |
0530 D7D5 8D B0 BSR ZD787 |
0531 D7D7 35 06 PULS B,A |
0532 D7D9 ED 84 STD ,X |
0533 D7DB 26 0A BNE ZD7E7 |
0534 D7DD 6F 02 CLR $02,X |
0535 D7DF 6F 03 CLR $03,X |
0536 D7E1 6F 04 CLR $04,X |
0537 D7E3 6F 05 CLR $05,X |
0538 D7E5 20 08 BRA ZD7EF |
0539 |
0540 D7E7 10 AE 04 ZD7E7 LDY $04,X |
0541 D7EA 31 3F LEAY -$01,Y |
0542 D7EC 10 AF 04 STY $04,X |
0543 D7EF 4F ZD7EF CLRA |
0544 D7F0 BE D4 0B LDX >CURFCB |
0545 D7F3 6C 88 21 INC $21,X |
0546 D7F6 26 03 BNE ZD7FB |
0547 D7F8 6C 88 20 INC $20,X |
0548 D7FB 5F ZD7FB CLRB |
0549 D7FC A7 88 40 ZD7FC STA $40,X |
0550 D7FF 30 01 LEAX $01,X |
0551 D801 5A DECB |
0552 D802 26 F8 BNE ZD7FC |
0553 D804 BE D4 0B LDX >CURFCB |
0554 D807 EC 88 20 LDD $20,X |
0555 D80A ED 88 42 STD $42,X |
0556 D80D 1C FE ANDCC #$FE |
0557 D80F 39 RTS |
0558 * |
0559 ** OPEN SYSTEM INFO. RECORD |
0560 * |
0561 D810 5F OPNREC CLRB |
0562 D811 34 04 PSHS B |
0563 D813 C6 03 LDB #$03 |
0564 D815 20 0E BRA ZD825 |
0565 D817 BE D4 15 LDX >ZD415 |
0566 D81A BF D4 13 STX >ZD413 |
0567 D81D F6 D4 13 OPNDIR LDB >ZD413 |
0568 D820 34 04 PSHS B |
0569 D822 F6 D4 14 LDB >ZD414 |
0570 D825 BE D4 0B ZD825 LDX >CURFCB |
0571 D828 E7 88 41 STB $41,X |
0572 D82B 35 04 PULS B |
0573 D82D E7 88 40 STB $40,X |
0574 D830 7F D4 18 CLR >ZD418 |
0575 D833 5F CLRB |
0576 D834 E7 88 22 STB $22,X |
0577 D837 39 RTS |
0578 * |
0579 ** GET INFO RECORD |
0580 * |
0581 D838 BE D4 0B GETREC LDX >CURFCB |
0582 D83B E6 88 22 LDB $22,X |
0583 D83E 26 1D BNE ZD85D |
0584 D840 BD D6 0C JSR >ZD60C |
0585 D843 25 30 BCS ZD875 |
0586 D845 BE D4 0B LDX >CURFCB |
0587 D848 7D D4 18 TST >ZD418 |
0588 D84B 26 05 BNE ZD852 |
0589 D84D DC 44 LDD <Z0044 |
0590 D84F FD D4 18 STD >ZD418 |
0591 D852 86 10 ZD852 LDA #$10 |
0592 D854 A7 88 22 STA $22,X |
0593 D857 EC 88 1E LDD $1E,X |
0594 D85A ED 88 2F STD $2F,X |
0595 D85D A6 88 22 ZD85D LDA $22,X |
0596 D860 A7 88 31 STA $31,X |
0597 D863 C6 18 LDB #$18 |
0598 D865 34 14 ZD865 PSHS X,B |
0599 D867 BD D5 F5 JSR >ZD5F5 |
0600 D86A 35 14 PULS X,B |
0601 D86C A7 04 STA $04,X |
0602 D86E 30 01 LEAX $01,X |
0603 D870 5A DECB |
0604 D871 26 F2 BNE ZD865 |
0605 D873 1C FE ANDCC #$FE |
0606 D875 39 ZD875 RTS |
0607 * |
0608 ** PUT INFORMATION RECORD |
0609 * |
0610 D876 BE D4 0B PUTREC LDX >CURFCB |
0611 D879 A6 88 31 LDA $31,X |
0612 D87C A7 88 22 STA $22,X |
0613 D87F C6 18 LDB #$18 |
0614 D881 34 14 ZD881 PSHS X,B |
0615 D883 A6 04 LDA $04,X |
0616 D885 BD D7 14 JSR >ZD714 |
0617 D888 35 14 PULS X,B |
0618 D88A 30 01 LEAX $01,X |
0619 D88C 5A DECB |
0620 D88D 26 F2 BNE ZD881 |
0621 D88F 7E D6 9F JMP >WRSECT |
0622 |
0623 D892 BE D4 0B ZD892 LDX >CURFCB |
0624 D895 A6 03 LDA $03,X |
0625 D897 A7 88 23 STA $23,X |
0626 D89A B6 D4 17 LDA >ZD417 |
0627 D89D 7D D4 1A TST >ZD41A |
0628 D8A0 26 31 BNE ZD8D3 |
0629 D8A2 A7 03 STA $03,X |
0630 D8A4 BE D4 15 LDX >ZD415 |
0631 D8A7 BF D4 13 STX >ZD413 |
0632 D8AA 8C 00 05 ZD8AA CMPX #Z0005 |
0633 D8AD 27 0C BEQ ZD8BB |
0634 D8AF 8D 22 BSR ZD8D3 |
0635 D8B1 23 37 BLS ZD8EA |
0636 D8B3 BE D4 18 LDX >ZD418 |
0637 D8B6 BF D4 13 STX >ZD413 |
0638 D8B9 20 EF BRA ZD8AA |
0639 |
0640 D8BB BE D4 0B ZD8BB LDX >CURFCB |
0641 D8BE A6 88 23 LDA $23,X |
0642 D8C1 A7 03 STA $03,X |
0643 D8C3 2A 0E BPL ZD8D3 |
0644 D8C5 BD DD BD ZD8C5 JSR >NXTDRV |
0645 D8C8 25 36 BCS ZD900 |
0646 D8CA 8D 07 BSR ZD8D3 |
0647 D8CC 23 1C BLS ZD8EA |
0648 D8CE BD DD AD JSR >ZDDAD |
0649 D8D1 20 F2 BRA ZD8C5 |
0650 |
0651 D8D3 BE D4 0B ZD8D3 LDX >CURFCB |
0652 D8D6 7F D4 1A CLR >ZD41A |
0653 D8D9 BD D5 49 JSR >ZD549 |
0654 D8DC BD D8 1D JSR >OPNDIR |
0655 D8DF BD D8 38 ZD8DF JSR >GETREC |
0656 D8E2 24 07 BCC ZD8EB |
0657 D8E4 C1 08 CMPB #$08 |
0658 D8E6 27 18 BEQ ZD900 |
0659 D8E8 1A 01 ORCC #$01 |
0660 D8EA 39 ZD8EA RTS |
0661 |
0662 D8EB BE D4 0B ZD8EB LDX >CURFCB |
0663 D8EE A6 04 LDA $04,X |
0664 D8F0 27 0C BEQ ZD8FE |
0665 D8F2 2A 02 BPL ZD8F6 |
0666 D8F4 8D 0F BSR ZD905 |
0667 D8F6 BD D5 59 ZD8F6 JSR >ZD559 |
0668 D8F9 26 E4 BNE ZD8DF |
0669 D8FB 1C FE ANDCC #$FE |
0670 D8FD 39 RTS |
0671 |
0672 D8FE 8D 05 ZD8FE BSR ZD905 |
0673 D900 1C FB ZD900 ANDCC #$FB |
0674 D902 1C FE ANDCC #$FE |
0675 D904 39 RTS |
0676 |
0677 D905 A6 88 33 ZD905 LDA $33,X |
0678 D908 26 0C BNE ZD916 |
0679 D90A EC 88 2F LDD $2F,X |
0680 D90D ED 88 32 STD $32,X |
0681 D910 A6 88 31 LDA $31,X |
0682 D913 A7 88 34 STA $34,X |
0683 D916 39 ZD916 RTS |
0684 |
0685 D917 BD D7 87 ZD917 JSR >ZD787 |
0686 D91A 26 17 BNE ZD933 |
0687 D91C 8D 18 BSR ZD936 |
0688 D91E 25 15 BCS ZD935 |
0689 D920 C6 06 LDB #$06 |
0690 D922 10 BE D4 0B LDY >CURFCB |
0691 D926 BE D4 1B LDX >ZD41B |
0692 D929 A6 A8 5D ZD929 LDA $5D,Y |
0693 D92C 31 21 LEAY $01,Y |
0694 D92E A7 80 STA ,X+ |
0695 D930 5A DECB |
0696 D931 26 F6 BNE ZD929 |
0697 D933 1C FE ZD933 ANDCC #$FE |
0698 D935 39 ZD935 RTS |
0699 |
0700 D936 BD D8 10 ZD936 JSR >OPNREC |
0701 D939 BD D6 0C JSR >ZD60C |
0702 D93C 25 08 BCS ZD946 |
0703 D93E BE D4 0B LDX >CURFCB |
0704 D941 C6 10 LDB #$10 |
0705 D943 E7 88 22 STB $22,X |
0706 D946 39 ZD946 RTS |
0707 |
0708 D947 BD D7 87 ZD947 JSR >ZD787 |
0709 D94A 8D EA BSR ZD936 |
0710 D94C 25 F8 BCS ZD946 |
0711 D94E C6 06 LDB #$06 |
0712 D950 10 BE D4 0B LDY >CURFCB |
0713 D954 BE D4 1B LDX >ZD41B |
0714 D957 A6 80 ZD957 LDA ,X+ |
0715 D959 A7 A8 5D STA $5D,Y |
0716 D95C 31 21 LEAY $01,Y |
0717 D95E 5A DECB |
0718 D95F 26 F6 BNE ZD957 |
0719 D961 BD D6 9F JSR >WRSECT |
0720 D964 24 E0 BCC ZD946 |
0721 D966 7E DB C1 JMP >ZDBC1 |
0722 * |
0723 ** |
0724 * |
0725 D969 BE D4 0B RESV1 LDX >CURFCB |
0726 D96C 86 02 LDA #$02 |
0727 D96E A7 02 STA $02,X |
0728 D970 EC 88 2F LDD $2F,X |
0729 D973 ED 88 1E STD $1E,X |
0730 D976 BD D6 41 JSR >RDSECT |
0731 D979 25 08 BCS ZD983 |
0732 D97B BD D8 76 JSR >PUTREC |
0733 D97E 24 05 BCC ZD985 |
0734 D980 7E DB C1 JMP >ZDBC1 |
0735 |
0736 D983 C6 0A ZD983 LDB #$0A |
0737 D985 39 ZD985 RTS |
0738 * |
0739 ** OPEN FOR READ |
0740 * |
0741 D986 BD D4 FA OPENRD JSR >ZD4FA |
0742 D989 25 3D BCS ZD9C8 |
0743 D98B BD D8 92 JSR >ZD892 |
0744 D98E 25 38 BCS ZD9C8 |
0745 D990 26 3B BNE ZD9CD |
0746 D992 BE D4 0B LDX >CURFCB |
0747 D995 7D D4 1A TST >ZD41A |
0748 D998 27 06 BEQ ZD9A0 |
0749 D99A A6 0F LDA $0F,X |
0750 D99C 85 20 BITA #$20 |
0751 D99E 26 29 BNE ZD9C9 |
0752 D9A0 BD DC C0 ZD9A0 JSR >ZDCC0 |
0753 D9A3 25 2A BCS ZD9CF |
0754 D9A5 EC 88 11 LDD $11,X |
0755 D9A8 ED 88 40 STD $40,X |
0756 D9AB BD DA 76 JSR >ZDA76 |
0757 D9AE E6 88 17 LDB $17,X |
0758 D9B1 27 13 BEQ ZD9C6 |
0759 D9B3 34 04 ZD9B3 PSHS B |
0760 D9B5 BD D6 0C JSR >ZD60C |
0761 D9B8 35 04 PULS B |
0762 D9BA 25 0C BCS ZD9C8 |
0763 D9BC 5A DECB |
0764 D9BD 26 F4 BNE ZD9B3 |
0765 D9BF BE D4 0B LDX >CURFCB |
0766 D9C2 5F CLRB |
0767 D9C3 E7 88 22 STB $22,X |
0768 D9C6 1C FE ZD9C6 ANDCC #$FE |
0769 D9C8 39 ZD9C8 RTS |
0770 |
0771 D9C9 C6 11 ZD9C9 LDB #$11 |
0772 D9CB 20 02 BRA ZD9CF |
0773 |
0774 D9CD C6 04 ZD9CD LDB #$04 |
0775 D9CF 34 04 ZD9CF PSHS B |
0776 D9D1 BD D5 0C JSR >ZD50C |
0777 D9D4 35 04 PULS B |
0778 D9D6 1A 01 ORCC #$01 |
0779 D9D8 39 RTS |
0780 |
0781 D9D9 BE D4 0B OPENWR LDX >CURFCB |
0782 D9DC 6D 03 TST $03,X |
0783 D9DE 2A 08 BPL ZD9E8 |
0784 D9E0 BD DD BD JSR >NXTDRV |
0785 D9E3 24 03 BCC ZD9E8 |
0786 D9E5 C6 10 LDB #$10 |
0787 D9E7 39 RTS |
0788 |
0789 D9E8 BD D4 FA ZD9E8 JSR >ZD4FA |
0790 D9EB 25 E2 BCS ZD9CF |
0791 D9ED BD D5 37 JSR >ZD537 |
0792 D9F0 BD D9 17 JSR >ZD917 |
0793 D9F3 25 DA BCS ZD9CF |
0794 D9F5 BD D8 92 JSR >ZD892 |
0795 D9F8 25 D5 BCS ZD9CF |
0796 D9FA 26 04 BNE ZDA00 |
0797 D9FC C6 03 LDB #$03 |
0798 D9FE 20 CF BRA ZD9CF |
0799 |
0800 DA00 BD DC C0 ZDA00 JSR >ZDCC0 |
0801 DA03 25 CA BCS ZD9CF |
0802 DA05 BE D4 0B LDX >CURFCB |
0803 DA08 C6 0A LDB #$0A |
0804 DA0A 6F 0F ZDA0A CLR $0F,X |
0805 DA0C 30 01 LEAX $01,X |
0806 DA0E 5A DECB |
0807 DA0F 26 F9 BNE ZDA0A |
0808 DA11 BE D4 0B LDX >CURFCB |
0809 DA14 EC 88 32 LDD $32,X |
0810 DA17 27 27 BEQ ZDA40 |
0811 DA19 ED 88 2F STD $2F,X |
0812 DA1C A6 88 34 LDA $34,X |
0813 DA1F A7 88 31 STA $31,X |
0814 DA22 FC CC 0E LDD >DATERG |
0815 DA25 ED 88 19 STD $19,X |
0816 DA28 B6 CC 10 LDA >YEAR |
0817 DA2B A7 88 1B STA $1B,X |
0818 DA2E BD DD AD JSR >ZDDAD |
0819 DA31 BD D9 69 JSR >RESV1 |
0820 DA34 25 99 BCS ZD9CF |
0821 DA36 8D 3E BSR ZDA76 |
0822 DA38 86 04 LDA #$04 |
0823 DA3A A7 88 22 STA $22,X |
0824 DA3D 1C FE ANDCC #$FE |
0825 DA3F 39 RTS |
0826 |
0827 DA40 BE D4 0B ZDA40 LDX >CURFCB |
0828 DA43 6F 88 17 CLR $17,X |
0829 DA46 6C 88 12 INC $12,X |
0830 DA49 EC 88 2F LDD $2F,X |
0831 DA4C BD D6 20 JSR >ZD620 |
0832 DA4F 25 0D BCS ZDA5E |
0833 DA51 BD D7 72 JSR >ZD772 |
0834 DA54 25 08 BCS ZDA5E |
0835 DA56 BD D6 9F JSR >WRSECT |
0836 DA59 24 06 BCC ZDA61 |
0837 DA5B BD DB C1 JSR >ZDBC1 |
0838 DA5E 7E D9 CF ZDA5E JMP >ZD9CF |
0839 |
0840 DA61 BE D4 0B ZDA61 LDX >CURFCB |
0841 DA64 EC 88 1E LDD $1E,X |
0842 DA67 ED 88 32 STD $32,X |
0843 DA6A 86 10 LDA #$10 |
0844 DA6C A7 88 34 STA $34,X |
0845 DA6F BD D9 47 JSR >ZD947 |
0846 DA72 25 EA BCS ZDA5E |
0847 DA74 20 8A BRA ZDA00 |
0848 |
0849 DA76 BE D4 0B ZDA76 LDX >CURFCB |
0850 DA79 A6 84 LDA ,X |
0851 DA7B A7 02 STA $02,X |
0852 DA7D 6F 84 CLR ,X |
0853 DA7F 6F 88 3B CLR $3B,X |
0854 DA82 4F CLRA |
0855 DA83 A7 88 22 STA $22,X |
0856 DA86 39 RTS |
0857 * |
0858 ** READ/WRITE NEXT SECTOR |
0859 * |
0860 DA87 8D 28 NXTSEC BSR ZDAB1 |
0861 DA89 25 0E BCS ZDA99 |
0862 DA8B 6F 84 CLR ,X |
0863 DA8D 44 LSRA |
0864 DA8E 10 25 FB 7A LBCS ZD60C |
0865 DA92 C6 04 LDB #$04 |
0866 DA94 E7 88 22 STB $22,X |
0867 DA97 1C FE ANDCC #$FE |
0868 DA99 39 ZDA99 RTS |
0869 |
0870 DA9A BE D4 0B ZDA9A LDX >CURFCB |
0871 DA9D A6 02 LDA $02,X |
0872 DA9F 81 83 CMPA #$83 |
0873 DAA1 26 0B BNE ZDAAE |
0874 DAA3 86 03 LDA #$03 |
0875 DAA5 A7 02 STA $02,X |
0876 DAA7 BD D6 9F ZDAA7 JSR >WRSECT |
0877 DAAA 10 25 01 13 LBCS ZDBC1 |
0878 DAAE 1C FE ZDAAE ANDCC #$FE |
0879 DAB0 39 RTS |
0880 |
0881 DAB1 8D E7 ZDAB1 BSR ZDA9A |
0882 DAB3 25 0D BCS ZDAC2 |
0883 DAB5 BE D4 0B LDX >CURFCB |
0884 DAB8 A6 02 LDA $02,X |
0885 DABA 81 03 CMPA #$03 |
0886 DABC 23 F0 BLS ZDAAE |
0887 DABE C6 12 LDB #$12 |
0888 DAC0 1A 01 ORCC #$01 |
0889 DAC2 39 ZDAC2 RTS |
0890 |
0891 DAC3 8D EC CLOSE BSR ZDAB1 |
0892 DAC5 25 31 BCS ZDAF8 |
0893 DAC7 81 02 CMPA #$02 |
0894 DAC9 27 08 BEQ ZDAD3 |
0895 DACB BE D4 0B ZDACB LDX >CURFCB |
0896 DACE 6F 02 CLR $02,X |
0897 DAD0 7E D5 0C JMP >ZD50C |
0898 |
0899 DAD3 A6 88 12 ZDAD3 LDA $12,X |
0900 DAD6 26 05 BNE ZDADD |
0901 DAD8 BD DB A7 JSR >ZDBA7 |
0902 DADB 20 19 BRA ZDAF6 |
0903 |
0904 DADD 8D C8 ZDADD BSR ZDAA7 |
0905 DADF 25 17 BCS ZDAF8 |
0906 DAE1 BE D4 0B LDX >CURFCB |
0907 DAE4 6D 88 17 TST $17,X |
0908 DAE7 27 05 BEQ ZDAEE |
0909 DAE9 BD DC 98 JSR >ZDC98 |
0910 DAEC 25 0A BCS ZDAF8 |
0911 DAEE BD D9 69 ZDAEE JSR >RESV1 |
0912 DAF1 25 05 BCS ZDAF8 |
0913 DAF3 BD D9 47 JSR >ZD947 |
0914 DAF6 24 D3 ZDAF6 BCC ZDACB |
0915 DAF8 39 ZDAF8 RTS |
0916 * |
0917 ** OPEN FOR UPDATE |
0918 * |
0919 DAF9 BD D9 86 OPENUD JSR >OPENRD |
0920 DAFC 25 28 BCS ZDB26 |
0921 DAFE BD D6 0C JSR >ZD60C |
0922 DB01 25 23 BCS ZDB26 |
0923 DB03 86 03 LDA #$03 |
0924 DB05 20 18 BRA ZDB1F |
0925 * |
0926 ** |
0927 * |
0928 DB07 BD D9 86 RESV3 JSR >OPENRD |
0929 DB0A 25 1A BCS ZDB26 |
0930 DB0C BE D4 0B LDX >CURFCB |
0931 DB0F A6 0F LDA $0F,X |
0932 DB11 85 80 BITA #$80 |
0933 DB13 26 12 BNE ZDB27 |
0934 DB15 EC 88 13 LDD $13,X |
0935 DB18 BD D6 20 JSR >ZD620 |
0936 DB1B 25 09 BCS ZDB26 |
0937 DB1D 86 02 LDA #$02 |
0938 DB1F BE D4 0B ZDB1F LDX >CURFCB |
0939 DB22 A7 02 STA $02,X |
0940 DB24 1C FE ANDCC #$FE |
0941 DB26 39 ZDB26 RTS |
0942 |
0943 DB27 C6 0B ZDB27 LDB #$0B |
0944 DB29 1A 01 ORCC #$01 |
0945 DB2B 39 RTS |
0946 * |
0947 ** RENAME FILE |
0948 * |
0949 DB2C 8D 35 RENAME BSR ZDB63 |
0950 DB2E BD D8 92 JSR >ZD892 |
0951 DB31 25 2A BCS ZDB5D |
0952 DB33 27 24 BEQ ZDB59 |
0953 DB35 BE D4 0B LDX >CURFCB |
0954 DB38 C6 0B LDB #$0B |
0955 DB3A A6 88 24 ZDB3A LDA $24,X |
0956 DB3D A7 04 STA $04,X |
0957 DB3F 30 01 LEAX $01,X |
0958 DB41 5A DECB |
0959 DB42 26 F6 BNE ZDB3A |
0960 DB44 8D 4D BSR ZDB93 |
0961 DB46 25 15 BCS ZDB5D |
0962 DB48 BE D4 0B LDX >CURFCB |
0963 DB4B A6 0F LDA $0F,X |
0964 DB4D 85 80 BITA #$80 |
0965 DB4F 26 D6 BNE ZDB27 |
0966 DB51 85 60 BITA #$60 |
0967 DB53 26 09 BNE ZDB5E |
0968 DB55 8D 0C BSR ZDB63 |
0969 DB57 20 55 BRA ZDBAE |
0970 |
0971 DB59 C6 03 ZDB59 LDB #$03 |
0972 DB5B 1A 01 ORCC #$01 |
0973 DB5D 39 ZDB5D RTS |
0974 DB5E C6 0C ZDB5E LDB #$0C |
0975 DB60 1A 01 ORCC #$01 |
0976 DB62 39 RTS |
0977 |
0978 DB63 BE D4 0B ZDB63 LDX >CURFCB |
0979 DB66 86 0B LDA #$0B |
0980 DB68 B7 D4 11 STA >ZD411 |
0981 DB6B A6 04 ZDB6B LDA $04,X |
0982 DB6D E6 88 35 LDB $35,X |
0983 DB70 A7 88 35 STA $35,X |
0984 DB73 E7 04 STB $04,X |
0985 DB75 30 01 LEAX $01,X |
0986 DB77 7A D4 11 DEC >ZD411 |
0987 DB7A 26 EF BNE ZDB6B |
0988 DB7C BE D4 0B LDX >CURFCB |
0989 DB7F A6 0C LDA $0C,X |
0990 DB81 26 0C BNE ZDB8F |
0991 DB83 C6 03 LDB #$03 |
0992 DB85 A6 88 3D ZDB85 LDA $3D,X |
0993 DB88 A7 0C STA $0C,X |
0994 DB8A 30 01 LEAX $01,X |
0995 DB8C 5A DECB |
0996 DB8D 26 F6 BNE ZDB85 |
0997 DB8F BE D4 0B ZDB8F LDX >CURFCB |
0998 DB92 39 RTS |
0999 |
1000 DB93 8D CE ZDB93 BSR ZDB63 |
1001 DB95 BD D8 92 ZDB95 JSR >ZD892 |
1002 DB98 25 07 BCS ZDBA1 |
1003 DB9A 26 06 BNE ZDBA2 |
1004 DB9C BE D4 0B LDX >CURFCB |
1005 DB9F 1C FE ANDCC #$FE |
1006 DBA1 39 ZDBA1 RTS |
1007 |
1008 DBA2 C6 04 ZDBA2 LDB #$04 |
1009 DBA4 1A 01 ORCC #$01 |
1010 DBA6 39 RTS |
1011 |
1012 DBA7 BE D4 0B ZDBA7 LDX >CURFCB |
1013 DBAA 86 FF LDA #$FF |
1014 DBAC A7 04 STA $04,X |
1015 DBAE BD D9 69 ZDBAE JSR >RESV1 |
1016 DBB1 BE D4 0B LDX >CURFCB |
1017 DBB4 86 00 LDA #$00 |
1018 DBB6 A7 02 STA $02,X |
1019 DBB8 39 RTS |
1020 |
1021 DBB9 ED 88 40 ZDBB9 STD $40,X |
1022 DBBC BD D6 9F JSR >WRSECT |
1023 DBBF 24 14 BCC ZDBD5 |
1024 DBC1 C5 40 ZDBC1 BITB #$40 |
1025 DBC3 26 08 BNE ZDBCD |
1026 DBC5 C5 80 BITB #$80 |
1027 DBC7 27 0A BEQ ZDBD3 |
1028 DBC9 C6 10 LDB #$10 |
1029 DBCB 20 06 BRA ZDBD3 |
1030 DBCD C6 0B ZDBCD LDB #$0B |
1031 DBCF 20 02 BRA ZDBD3 |
1032 |
1033 DBD1 C6 0A LDB #$0A |
1034 DBD3 1A 01 ZDBD3 ORCC #$01 |
1035 DBD5 39 ZDBD5 RTS |
1036 * |
1037 ** DELETE FILE |
1038 * |
1039 DBD6 BD D9 17 DELETE JSR >ZD917 |
1040 DBD9 25 5E BCS ZDC39 |
1041 DBDB 8D B8 BSR ZDB95 |
1042 DBDD 25 5A BCS ZDC39 |
1043 DBDF BE D4 0B LDX >CURFCB |
1044 DBE2 A6 0F LDA $0F,X |
1045 DBE4 85 80 BITA #$80 |
1046 DBE6 26 52 BNE ZDC3A |
1047 DBE8 85 60 BITA #$60 |
1048 DBEA 26 52 BNE ZDC3E |
1049 DBEC BD D7 87 JSR >ZD787 |
1050 DBEF BE D4 1B LDX >ZD41B |
1051 DBF2 EC 02 LDD $02,X |
1052 DBF4 26 0F BNE ZDC05 |
1053 DBF6 BE D4 0B LDX >CURFCB |
1054 DBF9 EC 88 11 LDD $11,X |
1055 DBFC 27 33 BEQ ZDC31 |
1056 DBFE BE D4 1B LDX >ZD41B |
1057 DC01 ED 84 STD ,X |
1058 DC03 20 14 BRA ZDC19 |
1059 |
1060 DC05 BE D4 0B ZDC05 LDX >CURFCB |
1061 DC08 BD D6 20 JSR >ZD620 |
1062 DC0B 25 2C BCS ZDC39 |
1063 DC0D BE D4 0B LDX >CURFCB |
1064 DC10 EC 88 11 LDD $11,X |
1065 DC13 27 1C BEQ ZDC31 |
1066 DC15 8D A2 BSR ZDBB9 |
1067 DC17 25 20 BCS ZDC39 |
1068 DC19 BE D4 0B ZDC19 LDX >CURFCB |
1069 DC1C EC 88 13 LDD $13,X |
1070 DC1F BE D4 1B LDX >ZD41B |
1071 DC22 ED 02 STD $02,X |
1072 DC24 BE D4 0B LDX >CURFCB |
1073 DC27 EC 88 15 LDD $15,X |
1074 DC2A BE D4 1B LDX >ZD41B |
1075 DC2D E3 04 ADDD $04,X |
1076 DC2F ED 04 STD $04,X |
1077 DC31 BD DB A7 ZDC31 JSR >ZDBA7 |
1078 DC34 25 03 BCS ZDC39 |
1079 DC36 BD D9 47 JSR >ZD947 |
1080 DC39 39 ZDC39 RTS |
1081 |
1082 DC3A C6 0B ZDC3A LDB #$0B |
1083 DC3C 20 02 BRA ZDC40 |
1084 DC3E C6 0C ZDC3E LDB #$0C |
1085 DC40 1A 01 ZDC40 ORCC #$01 |
1086 DC42 39 RTS |
1087 |
1088 DC43 EC 88 1E ZDC43 LDD $1E,X |
1089 DC46 5C INCB |
1090 DC47 E1 88 3C CMPB $3C,X |
1091 DC4A 23 03 BLS ZDC4F |
1092 DC4C C6 01 LDB #$01 |
1093 DC4E 4C INCA |
1094 DC4F 10 A3 88 13 ZDC4F CMPD $13,X |
1095 DC53 26 0E BNE ZDC63 |
1096 DC55 A6 88 37 LDA $37,X |
1097 DC58 81 FF CMPA #$FF |
1098 DC5A 27 07 BEQ ZDC63 |
1099 DC5C 4C INCA |
1100 DC5D A7 88 37 STA $37,X |
1101 DC60 1C FE ANDCC #$FE |
1102 DC62 39 RTS |
1103 |
1104 DC63 8D 33 ZDC63 BSR ZDC98 |
1105 DC65 25 30 BCS ZDC97 |
1106 DC67 BE D4 0B LDX >CURFCB |
1107 DC6A A6 88 3A LDA $3A,X |
1108 DC6D 8B 03 ADDA #$03 |
1109 DC6F 26 16 BNE ZDC87 |
1110 DC71 EC 88 1E LDD $1E,X |
1111 DC74 10 A3 88 11 CMPD $11,X |
1112 DC78 27 05 BEQ ZDC7F |
1113 DC7A C6 17 LDB #$17 |
1114 DC7C 1A 01 ORCC #$01 |
1115 DC7E 39 RTS |
1116 |
1117 DC7F EC 88 40 ZDC7F LDD $40,X |
1118 DC82 ED 88 38 ZDC82 STD $38,X |
1119 DC85 86 04 LDA #$04 |
1120 DC87 A7 88 3A ZDC87 STA $3A,X |
1121 DC8A EC 88 13 LDD $13,X |
1122 DC8D ED 88 35 STD $35,X |
1123 DC90 86 01 LDA #$01 |
1124 DC92 A7 88 37 STA $37,X |
1125 DC95 1C FE ANDCC #$FE |
1126 DC97 39 ZDC97 RTS |
1127 |
1128 DC98 EC 88 38 ZDC98 LDD $38,X |
1129 DC9B BD D6 20 JSR >ZD620 |
1130 DC9E 25 F7 BCS ZDC97 |
1131 DCA0 BE D4 0B LDX >CURFCB |
1132 DCA3 1F 12 TFR X,Y |
1133 DCA5 E6 88 3A LDB $3A,X |
1134 DCA8 3A ABX |
1135 DCA9 C6 03 LDB #$03 |
1136 DCAB A6 A8 35 ZDCAB LDA $35,Y |
1137 DCAE 31 21 LEAY $01,Y |
1138 DCB0 A7 88 40 STA $40,X |
1139 DCB3 30 01 LEAX $01,X |
1140 DCB5 5A DECB |
1141 DCB6 26 F3 BNE ZDCAB |
1142 DCB8 BD D6 9F JSR >WRSECT |
1143 DCBB 24 DA BCC ZDC97 |
1144 DCBD 7E DB C1 JMP >ZDBC1 |
1145 |
1146 DCC0 BD D8 10 ZDCC0 JSR >OPNREC |
1147 DCC3 BD D6 0C JSR >ZD60C |
1148 DCC6 25 46 BCS ZDD0E |
1149 DCC8 BE D4 0B LDX >CURFCB |
1150 DCCB 4F CLRA |
1151 DCCC 5F CLRB |
1152 DCCD ED 88 20 STD $20,X |
1153 DCD0 A6 88 67 LDA $67,X |
1154 DCD3 A7 88 3C STA $3C,X |
1155 DCD6 5F CLRB |
1156 DCD7 6F 88 40 ZDCD7 CLR $40,X |
1157 DCDA 30 01 LEAX $01,X |
1158 DCDC 5A DECB |
1159 DCDD 26 F8 BNE ZDCD7 |
1160 DCDF BE D4 0B LDX >CURFCB |
1161 DCE2 1C FE ANDCC #$FE |
1162 DCE4 39 RTS |
1163 * |
1164 ** BACKUP ONE RECORD |
1165 * |
1166 DCE5 BE D4 0B BAKREC LDX >CURFCB |
1167 DCE8 A6 88 17 LDA $17,X |
1168 DCEB 27 1D BEQ ZDD0A |
1169 DCED EC 88 20 LDD $20,X |
1170 DCF0 83 00 01 SUBD #$0001 |
1171 DCF3 2A 03 BPL ZDCF8 |
1172 DCF5 7E DD 9A JMP >ZDD9A |
1173 * |
1174 ** POSITION TO RECORD N |
1175 * |
1176 DCF8 ED 88 20 ZDCF8 STD $20,X |
1177 DCFB BD DA B1 POSREC JSR >ZDAB1 |
1178 DCFE 25 0E BCS ZDD0E |
1179 DD00 46 RORA |
1180 DD01 24 07 BCC ZDD0A |
1181 DD03 6F 84 CLR ,X |
1182 DD05 A6 88 17 LDA $17,X |
1183 DD08 26 05 BNE ZDD0F |
1184 DD0A C6 12 ZDD0A LDB #$12 |
1185 DD0C 1A 01 ORCC #$01 |
1186 DD0E 39 ZDD0E RTS |
1187 |
1188 DD0F 7F D4 11 ZDD0F CLR >ZD411 |
1189 DD12 EC 88 11 LDD $11,X |
1190 DD15 10 AE 88 20 LDY $20,X |
1191 DD19 27 6A BEQ ZDD85 |
1192 DD1B BD DD 9F JSR >ZDD9F |
1193 DD1E 25 EE BCS ZDD0E |
1194 DD20 4F CLRA |
1195 DD21 5F CLRB |
1196 DD22 6D 02 ZDD22 TST $02,X |
1197 DD24 27 74 BEQ ZDD9A |
1198 DD26 EB 02 ADDB $02,X |
1199 DD28 89 00 ADCA #$00 |
1200 DD2A BF D4 0F STX >ZD40F |
1201 DD2D BE D4 0B LDX >CURFCB |
1202 DD30 10 A3 88 20 CMPD $20,X |
1203 DD34 24 2C BCC ZDD62 |
1204 DD36 BE D4 0F LDX >ZD40F |
1205 DD39 30 03 LEAX $03,X |
1206 DD3B 34 02 PSHS A |
1207 DD3D B6 D4 11 LDA >ZD411 |
1208 DD40 4C INCA |
1209 DD41 B7 D4 11 STA >ZD411 |
1210 DD44 81 54 CMPA #$54 |
1211 DD46 27 08 BEQ ZDD50 |
1212 DD48 81 A8 CMPA #$A8 |
1213 DD4A 35 02 PULS A |
1214 DD4C 27 4C BEQ ZDD9A |
1215 DD4E 20 D2 BRA ZDD22 |
1216 |
1217 DD50 34 04 ZDD50 PSHS B |
1218 DD52 BE D4 0B LDX >CURFCB |
1219 DD55 EC 88 40 LDD $40,X |
1220 DD58 8D 45 BSR ZDD9F |
1221 DD5A 25 3E BCS ZDD9A |
1222 DD5C 35 04 PULS B |
1223 DD5E 35 02 PULS A |
1224 DD60 20 C0 BRA ZDD22 |
1225 |
1226 DD62 A3 88 20 ZDD62 SUBD $20,X |
1227 DD65 BE D4 0F LDX >ZD40F |
1228 DD68 A6 02 LDA $02,X |
1229 DD6A 34 04 PSHS B |
1230 DD6C A0 E0 SUBA ,S+ |
1231 DD6E 4A DECA |
1232 DD6F 1F 89 TFR A,B |
1233 DD71 A6 84 LDA ,X |
1234 DD73 EB 01 ADDB $01,X |
1235 DD75 BE D4 0B LDX >CURFCB |
1236 DD78 25 05 BCS ZDD7F |
1237 DD7A E1 88 3C ZDD7A CMPB $3C,X |
1238 DD7D 23 06 BLS ZDD85 |
1239 DD7F E0 88 3C ZDD7F SUBB $3C,X |
1240 DD82 4C INCA |
1241 DD83 20 F5 BRA ZDD7A |
1242 |
1243 DD85 BD D6 20 ZDD85 JSR >ZD620 |
1244 DD88 25 14 BCS ZDD9E |
1245 DD8A BE D4 0B LDX >CURFCB |
1246 DD8D EC 88 42 LDD $42,X |
1247 DD90 10 A3 88 20 CMPD $20,X |
1248 DD94 27 14 BEQ ZDDAA |
1249 DD96 C6 19 LDB #$19 |
1250 DD98 20 02 BRA ZDD9C |
1251 |
1252 DD9A C6 18 ZDD9A LDB #$18 |
1253 DD9C 1A 01 ZDD9C ORCC #$01 |
1254 DD9E 39 ZDD9E RTS |
1255 |
1256 DD9F BD D6 20 ZDD9F JSR >ZD620 |
1257 DDA2 25 08 BCS ZDDAC |
1258 DDA4 BE D4 0B LDX >CURFCB |
1259 DDA7 C6 44 LDB #$44 |
1260 DDA9 3A ABX |
1261 DDAA 1C FE ZDDAA ANDCC #$FE |
1262 DDAC 39 ZDDAC RTS |
1263 |
1264 DDAD BE D4 0B ZDDAD LDX >CURFCB |
1265 DDB0 C6 0B LDB #$0B |
1266 DDB2 A6 88 24 ZDDB2 LDA $24,X |
1267 DDB5 A7 04 STA $04,X |
1268 DDB7 30 01 LEAX $01,X |
1269 DDB9 5A DECB |
1270 DDBA 26 F6 BNE ZDDB2 |
1271 DDBC 39 RTS |
1272 * |
1273 ** FIND NEXT DRIVE |
1274 * |
1275 DDBD BE D4 0B NXTDRV LDX >CURFCB |
1276 DDC0 A6 03 LDA $03,X |
1277 DDC2 4C INCA |
1278 DDC3 81 04 CMPA #$04 |
1279 DDC5 24 0F BCC ZDDD6 |
1280 DDC7 A7 03 STA $03,X |
1281 DDC9 26 05 BNE ZDDD0 |
1282 DDCB BD DE 0F JSR >DRVRDY |
1283 DDCE 20 03 BRA ZDDD3 |
1284 |
1285 DDD0 BD DE 12 ZDDD0 JSR >QUICK |
1286 DDD3 25 E8 ZDDD3 BCS NXTDRV |
1287 DDD5 39 RTS |
1288 |
1289 DDD6 C6 10 ZDDD6 LDB #$10 |
1290 DDD8 1A 01 ORCC #$01 |
1291 DDDA 39 RTS |
0011 END |
0000 INCLUDE "f9-monex.txt" |
0001 * |
0002 ** FLEX 9 DISK DRIVERS |
0003 * |
0004 * FOR SYS09BUG ON THE |
0005 * DIGILENT SPARTAN 3 STARTER BOARD AND |
0006 * TERASIC CYCLONE 2 DE1 BOARD |
0007 * WITH I/O MAPPED AT $XE000 |
0008 * AND ROM MAPPED AT $XF000 |
0009 * THE DIGILENT SPARTAN 3 STARTER BOARD HAS 1MBYTE OF SRAM |
0010 * THE TERASIC CYCLONE 2 DE1 BOARD HAS 512KBYTE OF SRAM |
0011 * THE FIRST 64K IS USED BY FLEX, |
0012 * THE SECOND 128K IS USED AS A ROM DISK |
0013 * THE REMAINING RAM IS USED FOR A RAM DISK |
0014 * |
0015 * |
0016 0001 CFLAG EQU $01 CARRY FLAG |
0017 0002 VFLAG EQU $02 OVERFLOW FLAG |
0018 0004 ZFLAG EQU $04 ZERO FLAG |
0019 0008 NFLAG EQU $08 NEGATIVE FLAG |
0020 0010 IFLAG EQU $10 IRQ MASK CC |
0021 0020 HFLAG EQU $20 HALF CARRY |
0022 0040 FFLAG EQU $40 FIRQ MASK CC |
0023 0080 EFLAG EQU $80 ENTIRE FLAG |
0024 * |
0025 0000 MAPPAG EQU $00 PAGE $0000 DAT ADDRESS |
0026 FFF0 DATREG EQU IC11 DAT REGISTERS |
0027 * |
0028 * Serial Port |
0029 * |
0030 E000 ACIAC1 EQU ACIAS |
0031 E001 ACIAD1 EQU ACIAS+1 |
0032 04E2 DELCON EQU 1250 Delay (Processor clock in MHz * 50) |
0033 * |
0034 * XMODEM Control characters |
0035 * |
0036 0001 SOH EQU $01 |
0037 0004 EOT EQU $04 |
0038 0006 ACK EQU $06 |
0039 0015 NAK EQU $15 |
0040 0018 CAN EQU $18 |
0041 * |
0042 * DRIVE GEOMETRY |
0043 * |
0044 000E EMAXSEC EQU 14 ROM DISK |
0045 0030 EMAXTRK EQU 48 3 * 16 * 14 * 256 = 172,032 Bytes |
0046 0292 ETOTSEC EQU EMAXTRK*EMAXSEC-EMAXSEC |
0047 * |
0048 000E RMAXSEC EQU 14 RAM DISK |
0049 *RMAXTRK EQU 192 12 * 16 * 14 * 256 = 688,128 Bytes Digilent Spartan 3 |
0050 0040 RMAXTRK EQU 64 4 * 16 * 14 * 256 = 229,376 Bytes Terasic Cyclone 2 |
0051 0372 RTOTSEC EQU RMAXTRK*RMAXSEC-RMAXSEC |
0052 * |
0053 * DRIVE TYPES |
0054 * |
0055 0000 DTYPROM EQU 0 ROM DISK |
0056 0001 DTYPRAM EQU 1 RAM DISK |
0057 0002 DTYPFLS EQU 2 FLASH DISK |
0058 0003 DTYPNET EQU 3 FLEXNET DISK |
0059 * |
0060 DE00 ORG $DE00 |
0061 * |
0062 * DISK DRIVER JUMP TABLE LAST UPDATE: 22/12/2006 |
0063 * Disk driver for RAM Disk. |
0064 * |
0065 * 14 SECTORS PER TRACK |
0066 * 16 * N TRACKS PER DISK |
0067 * |
0068 * ROM DISK OCCUPIES $10000 - $1E000 ... $30000 - $3E000 |
0069 * RAM DISK OCCUPIES $40000 - $4E000 ... $F0000 - $FE000 |
0070 * Track Buffer page mapped at $E000 - $EFFF |
0071 * MAPPAG = $00 = 0 x $1000 (4 K pages) |
0072 |
0073 * ON SWTPC ROM AT $XF000 AND IO AT $XE000 |
0074 * APPEARS THROUGHOUT THE MEMORY SO MUST BE SKIPPED OVER |
0075 * WHEN USING RAM AS A RAMDISK. |
0076 * THE MSN OF THE TRACK MAPS INTO THE MSN OF THE DAT |
0077 * THE LSN OF THE TRACK NUMBER INDEXES INTO THE 4K RAM PAGE |
0078 * THE SECTOR MAPS INTO THE LSN OF THE DAT WHICH IS INVERTED |
0079 * |
0080 * |
0081 * |
0082 * FLEX disk jump table. |
0083 * |
0084 DE00 7E F0 57 READ JMP READSC |
0085 DE03 7E F0 5B WRITE JMP WRITSC |
0086 DE06 7E F0 5F VERIFY JMP BUSY |
0087 DE09 7E F0 63 RESTOR JMP RESTR1 |
0088 DE0C 7E F0 6C DRIVE JMP DRVSEL |
0089 DE0F 7E F0 9F DRVRDY JMP CHKRDY |
0090 DE12 7E F0 A3 QUICK JMP CHKQIK |
0091 DE15 7E F0 A7 COLDDR JMP DINIT |
0092 DE18 7E F0 BF WARMDR JMP DWARM |
0093 DE1B 7E F0 C3 SEEK JMP SEEKTS |
0094 * |
0095 * RAM SPACE |
0096 * |
0097 DE1E 00 DRVNUM FCB 0 |
0098 DE1F 00 TRACK FCB 0 |
0099 DE20 00 SECTOR FCB 0 |
0100 DE21 00 CHKSUM FCB 0 |
0101 DE22 00 CCSAVE FCB 0 |
0102 DE23 00 BLKNUM FCB 0 Xmodem block number |
0103 DE24 00 BYTCNT FCB 0 Xmodem byte count |
0104 DE25 00 00 XSTATE FDB 0 Xmodem State Vector |
0105 DE27 00 00 00 DELCNT FCB $00,$00,$00 Xmodem Poll timer |
0106 * |
0107 * Disc driver type table. |
0108 * Indexed by drive number |
0109 * |
0110 DE2A 00 DTYPTAB FCB DTYPROM Drive 0 (ROM Disk) |
0111 DE2B 01 FCB DTYPRAM Drive 1 (RAM Disk) |
0112 DE2C 02 FCB DTYPFLS Drive 2 (FLASH Disk) |
0113 DE2D 03 FCB DTYPNET Drive 3 (NETPC Disk) |
0114 * |
0115 * RAM Disk offset |
0116 * Indexed by drive type |
0117 * |
0118 DE2E 10 DOFFTAB FCB $10 ROM Disk $10000 |
0119 DE2F 40 FCB $40 RAM DISK $40000 |
0120 DE30 FF FCB $FF Flash Disk |
0121 DE31 FF FCB $FF NETPC Disk |
0122 * |
0123 DE32 REAVEC RMB 2 Disc driver jump table. |
0124 DE34 WRIVEC RMB 2 |
0125 DE36 VERVEC RMB 2 |
0126 DE38 RSTVEC RMB 2 |
0127 DE3A DRVVEC RMB 2 |
0128 DE3C CHKVEC RMB 2 |
0129 DE3E QUIVEC RMB 2 |
0130 DE40 INIVEC RMB 2 |
0131 DE42 WARVEC RMB 2 |
0132 DE44 SEEVEC RMB 2 |
0133 * |
0134 * SECTOR BUFFER |
0135 * |
0136 DE46 BUFFER RMB 256 |
0137 DF46 SYNCREG RMB 4 Prom input register |
0138 * |
0139 **************************************** |
0140 * |
0141 * START OF EXTENSION COMMANDS |
0142 * |
0143 **************************************** |
0144 * |
0145 F000 ORG MONEXT |
0146 F000 F7 BD FDB NEXTEXT Jump to next extended command |
0147 * |
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 F002 F1 19 TABSRT FDB EREAD Drive type 0 (ROM disk). |
0168 F004 F1 41 FDB EWRITE |
0169 F006 F1 3F FDB ECHECK |
0170 F008 F1 3F FDB ECHECK |
0171 F00A F1 3F FDB ECHECK |
0172 F00C F1 3F FDB ECHECK |
0173 F00E F1 3F FDB ECHECK |
0174 F010 F0 52 FDB DDUMMY |
0175 F012 F0 52 FDB DDUMMY |
0176 F014 F0 52 FDB DDUMMY |
0177 * |
0178 F016 F1 19 FDB EREAD Drive type 1 (RAM disk). |
0179 F018 F1 41 FDB EWRITE |
0180 F01A F1 3F FDB ECHECK |
0181 F01C F1 3F FDB ECHECK |
0182 F01E F1 3F FDB ECHECK |
0183 F020 F1 3F FDB ECHECK |
0184 F022 F1 3F FDB ECHECK |
0185 F024 F0 52 FDB DDUMMY |
0186 F026 F0 52 FDB DDUMMY |
0187 F028 F0 52 FDB DDUMMY |
0188 * |
0189 F02A F0 52 FDB DDUMMY Drive type 2 (External Flash disk). |
0190 F02C F0 52 FDB DDUMMY |
0191 F02E F0 52 FDB DDUMMY |
0192 F030 F0 52 FDB DDUMMY |
0193 F032 F0 52 FDB DDUMMY |
0194 F034 F0 52 FDB DDUMMY |
0195 F036 F0 52 FDB DDUMMY |
0196 F038 F0 52 FDB DDUMMY |
0197 F03A F0 52 FDB DDUMMY |
0198 F03C F0 52 FDB DDUMMY |
0199 * |
0200 F03E F1 7A FDB NREAD Drive type 3 (NetPC drive via serial port). |
0201 F040 F1 E9 FDB NWRITE |
0202 F042 F2 49 FDB NVERIFY |
0203 F044 F2 4E FDB NCHECK |
0204 F046 F2 4E FDB NCHECK |
0205 F048 F2 4E FDB NCHECK |
0206 F04A F2 4E FDB NCHECK |
0207 F04C F0 52 FDB DDUMMY |
0208 F04E F0 52 FDB DDUMMY |
0209 F050 F0 52 FDB DDUMMY |
0210 * |
0211 * |
0212 * Dummy routine (no errors). |
0213 F052 5F DDUMMY CLRB |
0214 F053 5D TSTB Set (z)=1 |
0215 F054 1C FE ANDCC #$FF-CFLAG Set (c)=0 |
0216 F056 39 RTS |
0217 * * |
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 F057 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 F05B 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 F05F 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 F063 8D 07 RESTR1 BSR DRVSEL Select drive first. |
0245 F065 27 01 BEQ RST1 |
0246 F067 39 RTS |
0247 F068 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 F06C 34 30 DRVSEL PSHS X,Y |
0254 F06E E6 03 LDB 3,X Get driver type. |
0255 F070 F7 DE 1E STB DRVNUM |
0256 F073 8E DE 2A LDX #DTYPTAB |
0257 F076 A6 85 LDA B,X |
0258 F078 81 FF CMPA #$FF Is the drive nonexistant? |
0259 F07A 26 08 BNE DRIVE1 |
0260 F07C 35 30 PULS X,Y |
0261 F07E C6 0F LDB #$0F |
0262 F080 5D TSTB |
0263 F081 1A 01 ORCC #$01 |
0264 F083 39 RTS |
0265 * |
0266 F084 C6 14 DRIVE1 LDB #20 Get correct table start address. |
0267 F086 3D MUL |
0268 F087 8E F0 02 LDX #TABSRT |
0269 F08A 30 8B LEAX D,X |
0270 F08C 10 8E DE 32 LDY #REAVEC Copy table into ram. |
0271 F090 C6 14 LDB #20 |
0272 F092 A6 80 DRIVE2 LDA 0,X+ |
0273 F094 A7 A0 STA 0,Y+ |
0274 F096 5A DECB |
0275 F097 26 F9 BNE DRIVE2 |
0276 F099 35 30 PULS X,Y |
0277 F09B 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 F09F 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 F0A3 6E 9F DE 3E CHKQIK JMP [QUIVEC] |
0288 * |
0289 * Init (cold start). |
0290 * Entry: no parameters. |
0291 * Exit: no change. |
0292 F0A7 4F DINIT CLRA |
0293 F0A8 B7 DE 1E DINIT1 STA DRVNUM Init each valid drive in turn. |
0294 F0AB 8E DE 1B LDX #DRVNUM-3 |
0295 F0AE 8D BC BSR DRVSEL |
0296 F0B0 25 04 BCS DINIT2 |
0297 F0B2 AD 9F DE 40 JSR [INIVEC] |
0298 F0B6 B6 DE 1E DINIT2 LDA DRVNUM |
0299 F0B9 4C INCA |
0300 F0BA 81 04 CMPA #4 |
0301 F0BC 26 EA BNE DINIT1 |
0302 F0BE 39 RTS |
0303 * |
0304 * Warm start. |
0305 * Entry: no parameters. |
0306 * Exit: no change. |
0307 F0BF 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 F0C3 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 SPACE |
0325 * |
0326 F0C7 1F A8 MAPIN TFR CC,A ; Save state of interrupt masks |
0327 F0C9 B7 DE 22 STA CCSAVE |
0328 F0CC 1A 50 ORCC #FFLAG+IFLAG ; Mask interrupts while IO mapped out |
0329 F0CE CE DE 2A LDU #DTYPTAB ; Point to Drive Type table |
0330 F0D1 F6 DE 1E LDB DRVNUM ; Get working drive number |
0331 F0D4 E6 C5 LDB B,U |
0332 F0D6 CE DE 2E LDU #DOFFTAB |
0333 F0D9 B6 DE 1F LDA TRACK |
0334 F0DC AB C5 ADDA B,U ; Add Base offset into RAM |
0335 F0DE 84 F0 ANDA #$F0 ; Mask MSN |
0336 F0E0 A7 E2 STA ,-S ; Save A on stack |
0337 * |
0338 F0E2 B6 DE 20 LDA SECTOR |
0339 F0E5 80 01 SUBA #1 ; Sectors 1 to 14 => 0 to 13 |
0340 F0E7 88 0F EORA #$0F ; Complement LSNybble |
0341 F0E9 84 0F ANDA #$0F |
0342 * |
0343 F0EB AB E0 ADDA ,S+ ; Add sector to LSN of Track and pop |
0344 F0ED B7 FF F0 STA DATREG+MAPPAG |
0345 * |
0346 F0F0 B6 DE 1F LDA TRACK ; LSN of Track indexes into 4K page |
0347 F0F3 84 0F ANDA #$0F |
0348 F0F5 8B 00 ADDA #MAPPAG*16 |
0349 F0F7 5F CLRB |
0350 F0F8 1F 03 TFR D,U |
0351 F0FA 39 RTS |
0352 * |
0353 * MAP RAM DISK OUT OF MEMORY |
0354 * |
0355 F0FB 86 00 MAPOUT LDA #MAPPAG ; Point to the Flex page |
0356 F0FD 88 0F EORA #$0F ; Complement LSNybble |
0357 F0FF B7 FF F0 STA DATREG+MAPPAG ; map in Flex page |
0358 F102 B6 DE 22 LDA CCSAVE ; restore interrupt masks |
0359 F105 1F 8A TFR A,CC |
0360 F107 39 RTS |
0361 * |
0362 * Seek track and sector |
0363 * A holds track number (0-32) |
0364 * B holds sector number (1-14) |
0365 * |
0366 F108 B7 DE 1F ESEEK STA TRACK |
0367 F10B F7 DE 20 STB SECTOR |
0368 F10E 1C FE ANDCC #$FE ; CLEAR CARRY |
0369 F110 1A 04 ORCC #$04 ; SET Z |
0370 F112 39 RTS |
0371 * |
0372 * MARK DISK READ ONLY |
0373 * |
0374 F113 C6 40 EDUMMY LDB #$40 |
0375 F115 5D TSTB |
0376 F116 1A 01 ORCC #$01 |
0377 F118 39 RTS |
0378 * |
0379 F119 34 70 EREAD PSHS X,Y,U push sequentialy to preserve order on stack |
0380 F11B 17 FF EA LBSR ESEEK |
0381 F11E 17 FF A6 LBSR MAPIN build external ram address |
0382 * |
0383 F121 10 8E DE 46 LDY #BUFFER |
0384 F125 5F CLRB |
0385 F126 A6 C0 ERLOOP1 LDA 0,U+ move 256 bytes to buffer from external RAM |
0386 F128 A7 A0 STA 0,Y+ |
0387 F12A 5A DECB |
0388 F12B 26 F9 BNE ERLOOP1 |
0389 * |
0390 F12D 17 FF CB LBSR MAPOUT |
0391 * |
0392 F130 10 8E DE 46 LDY #BUFFER |
0393 F134 5F CLRB |
0394 F135 A6 A0 ERLOOP2 LDA 0,Y+ move 256 bytes from buffer to Flex RAM |
0395 F137 A7 80 STA 0,X+ |
0396 F139 5A DECB |
0397 F13A 26 F9 BNE ERLOOP2 |
0398 * |
0399 F13C 5F CLRB |
0400 F13D 35 F0 PULS X,Y,U,PC restore all registers |
0401 * |
0402 * check for marker bytes $AA55 in first bytes of first track/sector |
0403 * |
0404 *ECHECK CLRA |
0405 * LDB #1 |
0406 * LDX #BUFFER |
0407 * BSR EREAD |
0408 * LDD BUFFER |
0409 * CMPD #$AA55 |
0410 * BNE EERR |
0411 * LBRA DDUMMY |
0412 *EERR LDB #$80 not ready bit set |
0413 * TSTB |
0414 * ORCC #$01 |
0415 * RTS |
0416 F13F 5F ECHECK CLRB |
0417 F140 39 RTS |
0418 * |
0419 * Write Sector |
0420 * |
0421 F141 34 70 EWRITE PSHS X,Y,U |
0422 F143 17 FF C2 LBSR ESEEK |
0423 F146 CE DE 2A LDU #DTYPTAB ; Point to Drive Type table |
0424 F149 F6 DE 1E LDB DRVNUM ; Get working drive number |
0425 F14C E6 C5 LDB B,U ; Fetch Drive type |
0426 F14E C1 01 CMPB #DTYPRAM ; Is it a RAM Disk ? |
0427 F150 27 07 BEQ EWOK ; Yep, can write to it |
0428 F152 C1 00 CMPB #DTYPROM ; Allow writes to ROM Disk too |
0429 F154 27 03 BEQ EWOK |
0430 F156 16 FF BA LBRA EDUMMY ; Nope report read only |
0431 * |
0432 F159 10 8E DE 46 EWOK LDY #BUFFER |
0433 F15D 5F CLRB |
0434 F15E A6 80 EWLOOP1 LDA 0,X+ move 256 bytes to buffer from Flex RAM |
0435 F160 A7 A0 STA 0,Y+ |
0436 F162 5A DECB |
0437 F163 26 F9 BNE EWLOOP1 |
0438 * |
0439 F165 17 FF 5F LBSR MAPIN |
0440 * |
0441 F168 10 8E DE 46 LDY #BUFFER |
0442 F16C 5F CLRB |
0443 F16D A6 A0 EWLOOP2 LDA 0,Y+ move 256 bytes from buffer to external RAM |
0444 F16F A7 C0 STA 0,U+ |
0445 F171 5A DECB |
0446 F172 26 F9 BNE EWLOOP2 |
0447 * |
0448 F174 17 FF 84 LBSR MAPOUT |
0449 * |
0450 F177 5F CLRB |
0451 F178 35 F0 PULS X,Y,U,PC |
0452 * |
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 drive |
0464 * |
0465 F17A 34 04 NREAD PSHS B |
0466 F17C 34 02 PSHS A |
0467 F17E 7F DE 21 CLR CHKSUM clear checksum |
0468 F181 7F DE 22 CLR CHKSUM+1 |
0469 * |
0470 F184 86 73 LDA #'s Send read sector command |
0471 F186 BD F2 85 JSR SCHAR |
0472 F189 24 4C BCC NRD_DNR if timeout, then flag drive not ready |
0473 * |
0474 F18B B6 DE 1E LDA DRVNUM send drive |
0475 F18E BD F2 85 JSR SCHAR |
0476 F191 24 44 BCC NRD_DNR |
0477 * |
0478 F193 35 02 PULS A send track |
0479 F195 BD F2 85 JSR SCHAR |
0480 F198 24 3D BCC NRD_DNR |
0481 * |
0482 F19A 35 02 PULS A send sector |
0483 F19C BD F2 85 JSR SCHAR |
0484 F19F 24 36 BCC NRD_DNR |
0485 * |
0486 * transfer 256 bytes |
0487 F1A1 5F CLRB |
0488 F1A2 BD F2 67 NREAD1 JSR RCHAR read byte |
0489 F1A5 24 30 BCC NRD_DNR if timeout, then flag drive not ready |
0490 F1A7 A7 80 STA 0,X+ |
0491 F1A9 BB DE 22 ADDA CHKSUM+1 update checksum |
0492 F1AC B7 DE 22 STA CHKSUM+1 |
0493 F1AF 24 03 BCC NREAD2 |
0494 F1B1 7C DE 21 INC CHKSUM |
0495 F1B4 5A NREAD2 DECB |
0496 F1B5 26 EB BNE NREAD1 |
0497 * |
0498 * compare checksums |
0499 F1B7 BD F2 67 JSR RCHAR get checksum msb |
0500 F1BA 24 1B BCC NRD_DNR |
0501 F1BC 34 02 PSHS A |
0502 F1BE BD F2 67 JSR RCHAR get checksum lsb |
0503 F1C1 24 14 BCC NRD_DNR |
0504 F1C3 1F 89 TFR A,B |
0505 F1C5 35 02 PULS A |
0506 F1C7 10 B3 DE 21 CMPD CHKSUM compare checksums |
0507 F1CB 26 0E BNE NRD_ERR if checksum error, then flag crc read error |
0508 * |
0509 F1CD 86 06 LDA #ACK no checksum error, send ACK char |
0510 F1CF BD F2 85 JSR SCHAR |
0511 F1D2 24 03 BCC NRD_DNR |
0512 F1D4 5F CLRB all OK, flag no error |
0513 F1D5 20 0D BRA NRD_END |
0514 * |
0515 F1D7 C6 10 NRD_DNR LDB #16 flag drive not ready |
0516 F1D9 20 09 BRA NRD_END |
0517 * |
0518 F1DB 86 15 NRD_ERR LDA #NAK send NAK |
0519 F1DD BD F2 85 JSR SCHAR |
0520 F1E0 24 F5 BCC NRD_DNR |
0521 F1E2 C6 09 LDB #09 flag crc read error |
0522 * |
0523 F1E4 F7 DE 21 NRD_END STB CHKSUM used by VERIFY |
0524 F1E7 5D TSTB |
0525 F1E8 39 RTS |
0526 * |
0527 * |
0528 * write sector to remote drive |
0529 * |
0530 F1E9 34 04 NWRITE PSHS B |
0531 F1EB 34 02 PSHS A |
0532 F1ED 7F DE 21 CLR CHKSUM clear checksum |
0533 F1F0 7F DE 22 CLR CHKSUM+1 |
0534 * |
0535 F1F3 86 72 LDA #'r Send write sector command |
0536 F1F5 BD F2 85 JSR SCHAR |
0537 F1F8 24 DD BCC NRD_DNR if timeout, then flag drive not ready |
0538 * |
0539 F1FA B6 DE 1E LDA DRVNUM send drive |
0540 F1FD BD F2 85 JSR SCHAR |
0541 F200 24 D5 BCC NRD_DNR |
0542 * |
0543 F202 35 02 PULS A send track |
0544 F204 BD F2 85 JSR SCHAR |
0545 F207 24 CE BCC NRD_DNR |
0546 * |
0547 F209 35 02 PULS A send sector |
0548 F20B BD F2 85 JSR SCHAR |
0549 F20E 24 C7 BCC NRD_DNR |
0550 * |
0551 * transfer 256 bytes |
0552 F210 5F CLRB |
0553 F211 A6 80 NWRITE1 LDA 0,X+ |
0554 F213 BD F2 85 JSR SCHAR write byte |
0555 F216 24 BF BCC NRD_DNR if timeout, then flag drive not ready |
0556 F218 BB DE 22 ADDA CHKSUM+1 update checksum |
0557 F21B B7 DE 22 STA CHKSUM+1 |
0558 F21E 24 03 BCC NWRITE2 |
0559 F220 7C DE 21 INC CHKSUM |
0560 F223 5A NWRITE2 DECB |
0561 F224 26 EB BNE NWRITE1 |
0562 * |
0563 * compare checksums |
0564 F226 B6 DE 21 LDA CHKSUM |
0565 F229 BD F2 85 JSR SCHAR send checksum msb |
0566 F22C 24 A9 BCC NRD_DNR |
0567 F22E B6 DE 22 LDA CHKSUM+1 |
0568 F231 BD F2 85 JSR SCHAR send checksum lsb |
0569 F234 24 A1 BCC NRD_DNR |
0570 * |
0571 F236 BD F2 67 JSR RCHAR get checksum response |
0572 F239 24 9C BCC NRD_DNR |
0573 F23B 81 06 CMPA #ACK |
0574 F23D 26 03 BNE NWR_ERR if checksum error, then flag write error |
0575 * |
0576 F23F 5F CLRB all OK, flag no error |
0577 F240 20 02 BRA NWR_END |
0578 * |
0579 F242 C6 0A NWR_ERR LDB #10 flag write error |
0580 * |
0581 F244 F7 DE 21 NWR_END STB CHKSUM used by VERIFY |
0582 F247 5D TSTB |
0583 F248 39 RTS |
0584 * |
0585 * |
0586 * verify last sector written to remote drive |
0587 * |
0588 F249 F6 DE 21 NVERIFY LDB CHKSUM test last checksum |
0589 F24C 5D TSTB |
0590 F24D 39 RTS |
0591 * |
0592 * |
0593 * quck check and check drive ready |
0594 * |
0595 F24E 86 51 NCHECK LDA #'Q quick check command |
0596 F250 BD F2 85 JSR SCHAR |
0597 F253 24 0C BCC NCK_ERR if timeout, then flag drive not ready |
0598 |
0599 F255 BD F2 67 JSR RCHAR get response from host |
0600 F258 24 07 BCC NCK_ERR |
0601 F25A 81 06 CMPA #ACK |
0602 F25C 26 03 BNE NCK_ERR if NAK, then flag drive not ready |
0603 |
0604 F25E 5F CLRB all OK, flag drive ready |
0605 F25F 20 04 BRA NCK_END |
0606 * |
0607 F261 C6 10 NCK_ERR LDB #16 report drive not ready |
0608 F263 1A 01 ORCC #$01 check needs carry set as well |
0609 * |
0610 F265 5D NCK_END TSTB |
0611 F266 39 RTS |
0612 * |
0613 * |
0614 * recieve char from remote drive. |
0615 * timeout if no response for approx 1s. |
0616 * Entry: no parameters |
0617 * Exit: (A) = recieved char, (C)=1 if valid char, (C)=0 if timeout. |
0618 * |
0619 F267 34 30 RCHAR PSHS X,Y |
0620 * |
0621 F269 8E 03 E8 LDX #1000 1000x inner loop |
0622 F26C 10 8E 04 E2 RCHAR1 LDY #DELCON delay constant for inner loop (approx 1ms). |
0623 F270 B6 E0 00 RCHAR2 LDA ACIAC1 test for recieved char |
0624 F273 47 ASRA |
0625 F274 25 0A BCS RCHAR3 get character |
0626 F276 31 3F LEAY -1,Y else, continue to count delay |
0627 F278 26 F6 BNE RCHAR2 |
0628 F27A 30 1F LEAX -1,X |
0629 F27C 26 EE BNE RCHAR1 |
0630 F27E 35 B0 PULS X,Y,PC return with error if timed out |
0631 * |
0632 F280 B6 E0 01 RCHAR3 LDA ACIAD1 return data (carry bit still set) |
0633 F283 35 B0 PULS X,Y,PC |
0634 * |
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 transmit |
0639 * Exit: (A) = recieved char, (C)=1 if valid char, (C)=0 if timeout. |
0640 * |
0641 F285 34 30 SCHAR PSHS X,Y |
0642 F287 34 02 PSHS A |
0643 * |
0644 F289 8E 03 E8 LDX #1000 1000x inner loop |
0645 F28C 10 8E 04 E2 SCHAR1 LDY #DELCON delay constant for inner loop (approx 1ms). |
0646 F290 B6 E0 00 SCHAR2 LDA ACIAC1 test for space in transmit FIFO |
0647 F293 47 ASRA |
0648 F294 47 ASRA |
0649 F295 25 0C BCS SCHAR3 send character |
0650 F297 31 3F LEAY -1,Y else, continue to count delay |
0651 F299 26 F5 BNE SCHAR2 |
0652 F29B 30 1F LEAX -1,X |
0653 F29D 26 ED BNE SCHAR1 |
0654 F29F 35 02 PULS A |
0655 F2A1 35 B0 PULS X,Y,PC return with error if timed out |
0656 * |
0657 F2A3 35 02 SCHAR3 PULS A |
0658 F2A5 B7 E0 01 STA ACIAD1 send data (carry bit still set) |
0659 F2A8 35 B0 PULS X,Y,PC |
0660 * |
0661 ** 'UF' Format RAMdisc to FLEX standard. |
0662 * |
0663 F2AA 0A 0D DISFOS FCB $0A,$0D |
0664 F2AC 46 6F 72 6D 61 74 FCC 'Formating RAMdisk... ' |
69 6E 67 20 52 41 |
4D 64 69 73 6B 2E |
2E 2E 20 |
0665 F2C1 04 FCB 4 |
0666 F2C2 0A 0D 04 MESS6 FCB $0A,$0D,4 |
0667 F2C5 52 61 6D 64 69 73 FCC 'Ramdisk not allocated! ' |
6B 20 6E 6F 74 20 |
61 6C 6C 6F 63 61 |
74 65 64 21 20 |
0668 F2DC 04 FCB 4 |
0669 * |
0670 F2DD 8E F2 AA UFSUB LDX #DISFOS |
0671 F2E0 BD F4 6A JSR PDATA1 |
0672 F2E3 8E DE 2A LDX #DTYPTAB search for allocated ramdisk |
0673 F2E6 5F CLRB |
0674 F2E7 A6 85 FMT9 LDA B,X |
0675 F2E9 81 01 CMPA #DTYPRAM driver type 1 is ramdisk |
0676 F2EB 27 0C BEQ FFOUND |
0677 F2ED 5C INCB |
0678 F2EE C1 04 CMPB #4 end of table? then not allocated. |
0679 F2F0 26 F5 BNE FMT9 |
0680 F2F2 8E F2 C2 LDX #MESS6 |
0681 F2F5 BD F4 6A JSR PDATA1 |
0682 F2F8 39 RTS |
0683 * |
0684 F2F9 F7 DE 1E FFOUND STB DRVNUM |
0685 F2FC 8E DE 1B LDX #DRVNUM-3 |
0686 F2FF BD F0 6C JSR DRVSEL |
0687 * |
0688 * set up free chain |
0689 * |
0690 F302 8E DE 46 LDX #BUFFER clear out buffer |
0691 F305 4F CLRA |
0692 F306 5F CLRB |
0693 F307 A7 80 DFL1 STA 0,X+ |
0694 F309 5A DECB |
0695 F30A 26 FB BNE DFL1 |
0696 * |
0697 F30C 7F DE 1F CLR TRACK |
0698 F30F 86 01 LDA #1 |
0699 F311 B7 DE 20 STA SECTOR |
0700 F314 8E DE 46 DFL2 LDX #BUFFER |
0701 F317 B6 DE 1F LDA TRACK |
0702 F31A A7 84 STA 0,X |
0703 F31C B6 DE 20 LDA SECTOR |
0704 F31F 4C INCA |
0705 F320 81 0F CMPA #RMAXSEC+1 last sector on track? |
0706 F322 26 04 BNE DFL3 |
0707 F324 6C 84 INC 0,X |
0708 F326 86 01 LDA #1 |
0709 F328 A7 01 DFL3 STA 1,X |
0710 F32A B6 DE 1F LDA TRACK |
0711 F32D F6 DE 20 LDB SECTOR |
0712 F330 BD F0 5B JSR WRITSC |
0713 F333 7C DE 20 INC SECTOR |
0714 F336 B6 DE 20 LDA SECTOR |
0715 F339 81 0F CMPA #RMAXSEC+1 |
0716 F33B 26 D7 BNE DFL2 |
0717 F33D 86 01 LDA #1 |
0718 F33F B7 DE 20 STA SECTOR |
0719 F342 7C DE 1F INC TRACK |
0720 F345 B6 DE 1F LDA TRACK |
0721 F348 81 40 CMPA #RMAXTRK |
0722 F34A 26 C8 BNE DFL2 |
0723 * break free chain at last track/sector |
0724 F34C 8E DE 46 LDX #BUFFER |
0725 F34F 86 3F LDA #RMAXTRK-1 |
0726 F351 C6 0E LDB #RMAXSEC |
0727 F353 BD F0 57 JSR READSC |
0728 F356 8E DE 46 LDX #BUFFER |
0729 F359 6F 84 CLR 0,X |
0730 F35B 6F 01 CLR 1,X |
0731 F35D 86 3F LDA #RMAXTRK-1 |
0732 F35F C6 0E LDB #RMAXSEC |
0733 F361 BD F0 5B JSR WRITSC |
0734 * set up sector structure, SIR, directory etc |
0735 F364 8E DE 46 LDX #BUFFER |
0736 F367 4F CLRA |
0737 F368 C6 0E LDB #RMAXSEC |
0738 F36A BD F0 57 JSR READSC |
0739 F36D 8E DE 46 LDX #BUFFER |
0740 F370 6F 84 CLR 0,X break end of directory chain |
0741 F372 6F 01 CLR 1,X |
0742 F374 4F CLRA |
0743 F375 C6 0E LDB #RMAXSEC |
0744 F377 BD F0 5B JSR WRITSC |
0745 * |
0746 F37A 8E DE 46 LDX #BUFFER |
0747 F37D 4F CLRA |
0748 F37E C6 03 LDB #3 set up SIR |
0749 F380 BD F0 57 JSR READSC |
0750 F383 8E DE 46 LDX #BUFFER |
0751 F386 6F 84 CLR 0,X break forward link |
0752 F388 6F 01 CLR 1,X |
0753 F38A CC 52 41 LDD #$5241 set volume name (RAMDISK ) |
0754 F38D ED 88 10 STD 16,X |
0755 F390 CC 4D 44 LDD #$4D44 |
0756 F393 ED 88 12 STD 18,X |
0757 F396 CC 49 53 LDD #$4953 |
0758 F399 ED 88 14 STD 20,X |
0759 F39C CC 4B 20 LDD #$4B20 |
0760 F39F ED 88 16 STD 22,X |
0761 F3A2 CC 00 01 LDD #1 volume number |
0762 F3A5 ED 88 1B STD 27,X |
0763 F3A8 CC 01 01 LDD #$0101 first trk/sec 01-01 |
0764 F3AB ED 88 1D STD 29,X |
0765 F3AE 86 3F LDA #RMAXTRK-1 |
0766 F3B0 C6 0E LDB #RMAXSEC |
0767 F3B2 ED 88 1F STD 31,X |
0768 F3B5 ED 88 26 STD 38,X |
0769 F3B8 CC 03 72 LDD #RTOTSEC total DATA sectors (2912-14) |
0770 F3BB ED 88 21 STD 33,X |
0771 * |
0772 F3BE 86 01 LDA #01 month set default creation date (SYS09's birthday!) |
0773 F3C0 A7 88 23 STA 35,X |
0774 F3C3 86 07 LDA #07 day |
0775 F3C5 A7 88 24 STA 36,X |
0776 F3C8 86 07 LDA #07 year |
0777 F3CA A7 88 25 STA 37,X |
0778 * |
0779 F3CD 4F RF3 CLRA |
0780 F3CE C6 03 LDB #3 |
0781 F3D0 BD F0 5B JSR WRITSC |
0782 * |
0783 F3D3 8E DE 46 LDX #BUFFER |
0784 F3D6 4F CLRA |
0785 F3D7 C6 01 LDB #1 |
0786 F3D9 BD F0 57 JSR READSC |
0787 F3DC 8E DE 46 LDX #BUFFER |
0788 F3DF 86 AA LDA #$AA set the init flag |
0789 F3E1 A7 84 STA 0,X |
0790 F3E3 86 55 LDA #$55 |
0791 F3E5 A7 01 STA 1,X |
0792 F3E7 4F CLRA |
0793 F3E8 C6 01 LDB #1 |
0794 F3EA 7E F0 5B JMP WRITSC |
0795 * |
0796 ******************************** |
0797 * System specific Boot * |
0798 * command goes here. * |
0799 ******************************** |
0800 * |
0801 * Boot FLEX from the FPGA's internal pre-loaded scratch RAM |
0802 * |
0803 F3ED 08 08 UBMESS FCB $08, $08 |
0804 F3EF 42 6F 6F 74 69 6E FCC 'Booting internal FLEX....' |
67 20 69 6E 74 65 |
72 6E 61 6C 20 46 |
4C 45 58 2E 2E 2E |
2E |
0805 F408 0D 0A 04 FCB $0D,$0A,$04 |
0806 * |
0807 F40B 8E F3 ED UBSUB LDX #UBMESS |
0808 F40E BD F4 6A JSR PDATA1 |
0809 * |
0810 F411 8E D3 E5 LDX #$D3E5 |
0811 F414 10 8E F4 34 LDY #CONTAB Overlay console driver table |
0812 F418 EC A1 UB1 LDD 0,Y++ |
0813 F41A ED 81 STD 0,X++ |
0814 F41C 8C D3 FD CMPX #$D3FD |
0815 F41F 26 F7 BNE UB1 |
0816 * |
0817 F421 8E DE 00 LDX #$DE00 Overlay disk driver table |
0818 F424 10 8E F4 4C LDY #DISTAB |
0819 F428 EC A1 UB2 LDD 0,Y++ |
0820 F42A ED 81 STD 0,X++ |
0821 F42C 8C DE 1E CMPX #$DE1E |
0822 F42F 26 F7 BNE UB2 |
0823 * |
0824 F431 7E CD 00 UBEND JMP $CD00 |
0825 * |
0826 * FLEX console jump table. |
0827 F434 F4 76 CONTAB FDB INPNE INPUT NO ECHO |
0828 F436 F4 82 FDB DUMMY INTERRUPT HANDLER |
0829 F438 DF C2 FDB MONRAM+$02 SWI VECTOR |
0830 F43A DF C8 FDB MONRAM+$08 IRQ VECTOR |
0831 F43C F4 82 FDB DUMMY TIMER OFF |
0832 F43E F4 82 FDB DUMMY TIMER ON |
0833 F440 F4 82 FDB DUMMY TIMER INITIALIZATION |
0834 F442 F4 7E FDB CONTRL MONITOR |
0835 F444 F4 82 FDB DUMMY TERMINAL INITIALIZATION |
0836 F446 F4 7A FDB STATUS INPUT CHECK |
0837 F448 F4 6E FDB OUTP TERMINAL OUTPUT |
0838 F44A F4 72 FDB INPE TERMINAL INPUT WITH ECHO |
0839 * |
0840 * FLEX disk jump table. |
0841 F44C 7E F0 57 DISTAB JMP READSC |
0842 F44F 7E F0 5B JMP WRITSC |
0843 F452 7E F0 5F JMP BUSY |
0844 F455 7E F0 63 JMP RESTR1 |
0845 F458 7E F0 6C JMP DRVSEL |
0846 F45B 7E F0 9F JMP CHKRDY |
0847 F45E 7E F0 A3 JMP CHKQIK |
0848 F461 7E F0 A7 JMP DINIT |
0849 F464 7E F0 BF JMP DWARM |
0850 F467 7E F0 C3 JMP SEEKTS |
0851 * |
0852 * Monitor jumps |
0853 * |
0854 F46A 6E 9F F8 0C PDATA1 JMP [PDATAV] |
0855 F46E 6E 9F F8 0A OUTP JMP [OUTCHV] |
0856 F472 6E 9F F8 06 INPE JMP [INCHEV] |
0857 F476 6E 9F F8 04 INPNE JMP [INCHV] |
0858 F47A 6E 9F F8 08 STATUS JMP [INCHKV] |
0859 F47E 6E 9F F8 00 CONTRL JMP [MONITV] |
0860 F482 39 DUMMY RTS |
0861 * |
0862 ** 'UL' LOAD ROM DISK VIA SERIAL PORT |
0863 * |
0864 F483 53 65 72 69 61 6C ULMES FCC 'Serial ROM Disk upload ...' |
20 52 4F 4D 20 44 |
69 73 6B 20 75 70 |
6C 6F 61 64 20 2E |
2E 2E |
0865 F49D 0D 0A 04 FCB $0D,$0A,$04 |
0866 F4A0 52 4F 4D 20 44 69 ULMES1 FCC 'ROM Disk Loaded' |
73 6B 20 4C 6F 61 |
64 65 64 |
0867 F4AF 0D 0A 04 FCB $0D,$0A,$04 |
0868 * |
0869 F4B2 8E F4 83 ULSUB LDX #ULMES |
0870 F4B5 BD F4 6A JSR PDATA1 |
0871 * |
0872 F4B8 86 00 LDA #$00 |
0873 F4BA B7 DE 1E STA DRVNUM |
0874 F4BD 4F CLRA TRACK 0 |
0875 F4BE C6 01 LDB #$01 SECTOR 1 |
0876 F4C0 B7 DE 1F ULLOOP0 STA TRACK |
0877 F4C3 F7 DE 20 STB SECTOR` |
0878 F4C6 17 FB FE LBSR MAPIN |
0879 * |
0880 F4C9 5F CLRB xfer 256 bytes at a time. |
0881 F4CA BD F4 ED ULLOOP1 JSR LRBYTE transfer should be hex bytes |
0882 F4CD A7 C0 STA ,U+ |
0883 F4CF 5A DECB |
0884 F4D0 26 F8 BNE ULLOOP1 |
0885 * |
0886 F4D2 17 FC 26 LBSR MAPOUT |
0887 * |
0888 F4D5 B6 DE 1F LDA TRACK |
0889 F4D8 F6 DE 20 LDB SECTOR |
0890 F4DB 5C INCB |
0891 F4DC C1 0F CMPB #EMAXSEC+1 |
0892 F4DE 26 E0 BNE ULLOOP0 |
0893 F4E0 C6 01 LDB #1 |
0894 F4E2 4C INCA |
0895 F4E3 81 30 CMPA #EMAXTRK |
0896 F4E5 26 D9 BNE ULLOOP0 |
0897 * |
0898 F4E7 8E F4 A0 ULEXIT LDX #ULMES1 |
0899 F4EA 7E F4 6A JMP PDATA1 |
0900 * |
0901 * Read a byte from the serial port |
0902 * |
0903 F4ED 34 04 LRBYTE PSHS B |
0904 F4EF 8D 0E BSR LRHEX Get hex digit. |
0905 F4F1 48 ASLA |
0906 F4F2 48 ASLA Shift to msb. |
0907 F4F3 48 ASLA |
0908 F4F4 48 ASLA |
0909 F4F5 1F 89 TFR A,B Save in B. |
0910 F4F7 8D 06 BSR LRHEX Get next digit. |
0911 F4F9 34 04 PSHS B |
0912 F4FB AB E0 ADDA 0,S+ Add together bytes. |
0913 F4FD 35 84 PULS B,PC |
0914 * |
0915 F4FF BD F5 28 LRHEX JSR INTER |
0916 F502 29 FB BVS LRHEX |
0917 F504 80 30 SUBA #$30 Remove ascii bias. |
0918 F506 2B F7 BMI LRHEX |
0919 F508 81 09 CMPA #$09 Number? |
0920 F50A 2F 0A BLE LRHEX1 Yes. |
0921 F50C 81 11 CMPA #$11 Keep testing. |
0922 F50E 2B EF BMI LRHEX |
0923 F510 81 16 CMPA #$16 |
0924 F512 2E EB BGT LRHEX |
0925 F514 80 07 SUBA #$07 |
0926 F516 39 LRHEX1 RTS |
0927 * |
0928 * ACIA INPUT TEST |
0929 * |
0930 F517 B6 E0 00 INTEST LDA ACIAC1 |
0931 F51A 85 01 BITA #$01 |
0932 F51C 39 RTS |
0933 * |
0934 * RESET ACIA |
0935 * |
0936 F51D 86 03 ACIRST LDA #$03 master reset |
0937 F51F B7 E0 00 STA ACIAC1 |
0938 F522 86 11 LDA #$11 |
0939 F524 B7 E0 00 STA ACIAC1 |
0940 F527 39 RTS |
0941 * |
0942 * ACIA INPUT |
0943 * |
0944 F528 86 10 INTER LDA #16 |
0945 F52A B7 DE 27 STA DELCNT+0 |
0946 F52D 7F DE 28 CLR DELCNT+1 |
0947 F530 7F DE 29 CLR DELCNT+2 |
0948 F533 B6 E0 00 INTER0 LDA ACIAC1 |
0949 F536 85 01 BITA #$01 |
0950 F538 26 08 BNE INTER1 |
0951 F53A 85 78 BITA #$78 |
0952 F53C 27 0A BEQ INTER2 |
0953 F53E 8D DD BSR ACIRST |
0954 F540 20 E6 BRA INTER |
0955 * |
0956 F542 B6 E0 01 INTER1 LDA ACIAD1 |
0957 F545 1C 02 ANDCC #VFLAG |
0958 F547 39 RTS |
0959 * |
0960 F548 7A DE 29 INTER2 DEC DELCNT+2 |
0961 F54B 26 E6 BNE INTER0 |
0962 F54D 7A DE 28 DEC DELCNT+1 |
0963 F550 26 E1 BNE INTER0 |
0964 F552 7A DE 27 DEC DELCNT+0 |
0965 F555 26 DC BNE INTER0 |
0966 F557 4F CLRA |
0967 F558 1A 02 ORCC #VFLAG |
0968 F55A 39 RTS |
0969 * |
0970 * ACIA OUTPUT |
0971 * |
0972 F55B 34 02 OUTTER PSHS A |
0973 * |
0974 F55D B6 E0 00 OUTTE1 LDA ACIAC1 |
0975 F560 85 02 BITA #$02 |
0976 F562 26 08 BNE OUTTE2 |
0977 F564 85 78 BITA #$78 |
0978 F566 27 F5 BEQ OUTTE1 |
0979 F568 8D B3 BSR ACIRST |
0980 F56A 20 F1 BRA OUTTE1 |
0981 * |
0982 F56C 35 02 OUTTE2 PULS A |
0983 F56E B7 E0 01 STA ACIAD1 |
0984 F571 39 RTS |
0985 * |
0986 ** 'UX' Xmodem ROM Disk upload |
0987 * |
0988 F572 0D 0A UXMES FCB $0D,$0A |
0989 F574 58 6D 6F 64 65 6D FCC 'Xmodem ROM Disk Upload' |
20 52 4F 4D 20 44 |
69 73 6B 20 55 70 |
6C 6F 61 64 |
0990 F58A 04 FCB 4 |
0991 F58B 0D 0A UXMES1 FCB $0D,$0A |
0992 F58D 55 70 6C 6F 61 64 FCC 'Upload Complete' |
20 43 6F 6D 70 6C |
65 74 65 |
0993 F59C 04 FCB 4 |
0994 F59D 0D 0A UXMES2 FCB $0D,$0A |
0995 F59F 55 70 6C 6F 61 64 FCC 'Upload Error' |
20 45 72 72 6F 72 |
0996 F5AB 04 FCB 4 |
0997 * |
0998 F5AC 8E F5 72 UXSUB LDX #UXMES |
0999 F5AF 17 FE B8 LBSR PDATA1 |
1000 * |
1001 F5B2 86 01 LDA #1 |
1002 F5B4 B7 DE 23 STA BLKNUM |
1003 F5B7 8E F6 1A LDX #XSTSTR |
1004 F5BA BF DE 25 STX XSTATE |
1005 * |
1006 F5BD 86 00 LDA #$00 |
1007 F5BF B7 DE 1E STA DRVNUM |
1008 F5C2 4F CLRA TRACK 0 |
1009 F5C3 C6 01 LDB #$01 SECTOR 1 |
1010 F5C5 B7 DE 1F UXLOOP0 STA TRACK |
1011 F5C8 F7 DE 20 STB SECTOR |
1012 F5CB 17 FA F9 LBSR MAPIN |
1013 * |
1014 F5CE 5F CLRB xfer 256 bytes at a time. |
1015 F5CF 17 00 2B UXLOOP1 LBSR XBYTE transfer should be hex bytes |
1016 F5D2 25 20 BCS UXERR |
1017 F5D4 A7 C0 STA ,U+ |
1018 F5D6 5A DECB |
1019 F5D7 26 F6 BNE UXLOOP1 |
1020 * |
1021 F5D9 17 FB 1F LBSR MAPOUT |
1022 * |
1023 F5DC B6 DE 1F LDA TRACK |
1024 F5DF F6 DE 20 LDB SECTOR |
1025 F5E2 5C INCB |
1026 F5E3 C1 0F CMPB #EMAXSEC+1 |
1027 F5E5 26 DE BNE UXLOOP0 |
1028 F5E7 C6 01 LDB #1 |
1029 F5E9 4C INCA |
1030 F5EA 81 30 CMPA #EMAXTRK |
1031 F5EC 26 D7 BNE UXLOOP0 |
1032 * |
1033 F5EE 8E F5 8B UXEXIT LDX #UXMES1 |
1034 F5F1 7E F4 6A JMP PDATA1 |
1035 * |
1036 F5F4 17 FB 04 UXERR LBSR MAPOUT |
1037 F5F7 8E F5 9D LDX #UXMES2 |
1038 F5FA 16 FE 6D LBRA PDATA1 |
1039 * |
1040 * Get a Byte using XModem protocol |
1041 * Carry clear => no errors |
1042 * Carry set => errors |
1043 * |
1044 F5FD 34 10 XBYTE PSHS X |
1045 F5FF BE DE 25 LDX XSTATE |
1046 * |
1047 F602 17 FF 23 XBYTE0 LBSR INTER |
1048 F605 28 0A BVC XBYTE1 |
1049 F607 86 15 LDA #NAK |
1050 F609 17 FF 4F LBSR OUTTER |
1051 F60C 8E F6 1A LDX #XSTSTR |
1052 F60F 20 F1 BRA XBYTE0 |
1053 * |
1054 F611 AD 84 XBYTE1 JSR ,X |
1055 F613 26 ED BNE XBYTE0 |
1056 F615 BF DE 25 STX XSTATE |
1057 F618 35 90 PULS X,PC |
1058 * |
1059 * START - LOOK FOR SOH (START OF HEADER) = $01 |
1060 * |
1061 F61A 81 01 XSTSTR CMPA #SOH |
1062 F61C 26 06 BNE XSTSTR1 |
1063 F61E 8E F6 3A LDX #XSTBLK |
1064 F621 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, no valid data (no exit) |
1065 F623 39 RTS |
1066 * |
1067 F624 81 04 XSTSTR1 CMPA #EOT |
1068 F626 26 08 BNE XSTSTR2 |
1069 F628 86 06 LDA #ACK |
1070 F62A 17 FF 2E LBSR OUTTER |
1071 F62D 1A 05 ORCC #CFLAG+ZFLAG Set (c)=1 abort & exit |
1072 F62F 39 RTS |
1073 * |
1074 F630 81 18 XSTSTR2 CMPA #CAN |
1075 F632 26 03 BNE XSTSTR3 |
1076 F634 1A 05 ORCC #CFLAG+ZFLAG Set (c)=1 abort & exit |
1077 F636 39 RTS |
1078 * |
1079 F637 1C FA XSTSTR3 ANDCC #$FF-CFLAG-ZFLAG |
1080 F639 39 RTS |
1081 * |
1082 * Got SOH |
1083 * Now get block number |
1084 * |
1085 F63A B1 DE 23 XSTBLK CMPA BLKNUM |
1086 F63D 26 06 BNE XSTBLKE |
1087 F63F 8E F6 50 LDX #XSTCOM |
1088 F642 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit) |
1089 F644 39 RTS |
1090 * |
1091 * Error in block number |
1092 * |
1093 F645 86 15 XSTBLKE LDA #NAK |
1094 F647 17 FF 11 LBSR OUTTER |
1095 F64A 8E F6 1A LDX #XSTSTR |
1096 F64D 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit) |
1097 F64F 39 RTS |
1098 * |
1099 * Get complement of block number |
1100 * |
1101 F650 43 XSTCOM COMA |
1102 F651 B1 DE 23 CMPA BLKNUM |
1103 F654 26 EF BNE XSTBLKE |
1104 F656 7F DE 21 CLR CHKSUM |
1105 F659 86 80 LDA #128 |
1106 F65B B7 DE 24 STA BYTCNT |
1107 F65E 8E F6 64 LDX #XSTDAT |
1108 F661 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit) |
1109 F663 39 RTS |
1110 * |
1111 * Get data bytes |
1112 * |
1113 F664 34 02 XSTDAT PSHS A |
1114 F666 BB DE 21 ADDA CHKSUM |
1115 F669 B7 DE 21 STA CHKSUM |
1116 F66C 35 02 PULS A |
1117 F66E 7A DE 24 DEC BYTCNT |
1118 F671 26 03 BNE XSTDAT1 |
1119 F673 8E F6 7B LDX #XSTCHK |
1120 F676 1C FE XSTDAT1 ANDCC #$FF-CFLAG No abort |
1121 F678 1A 04 ORCC #ZFLAG Valid data (exit) |
1122 F67A 39 RTS |
1123 * |
1124 * Byte count reached zero |
1125 * Check checksum byte |
1126 * |
1127 F67B B1 DE 21 XSTCHK CMPA CHKSUM |
1128 F67E 26 07 BNE XSTCHK1 retry if wrong checksum |
1129 * |
1130 * Checksum OK ... |
1131 * increment block number |
1132 * and send ACK |
1133 * |
1134 F680 7C DE 23 INC BLKNUM |
1135 F683 86 06 LDA #ACK |
1136 F685 20 0D BRA XSTCHK2 |
1137 * |
1138 * Checksum Error detected ... |
1139 * Reset Sector counter in ACCB to last 128 byte boundary |
1140 * and send NAK |
1141 * |
1142 F687 34 04 XSTCHK1 PSHS B |
1143 F689 1F 30 TFR U,D |
1144 F68B 5A DECB |
1145 F68C C4 80 ANDB #128 |
1146 F68E 1F 03 TFR D,U |
1147 F690 35 04 PULS B |
1148 F692 86 15 LDA #NAK |
1149 F694 17 FE C4 XSTCHK2 LBSR OUTTER |
1150 F697 8E F6 1A LDX #XSTSTR |
1151 F69A 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, no valid data (no exit) |
1152 F69C 39 RTS |
1153 * |
1154 ** 'UP' Load ROMdisk via config PROM. |
1155 * |
1156 F69D 08 08 UPMES FCB $08,$08 |
1157 F69F 4C 6F 61 64 20 52 FCC 'Load ROM disk from config PROM.' |
4F 4D 20 64 69 73 |
6B 20 66 72 6F 6D |
20 63 6F 6E 66 69 |
67 20 50 52 4F 4D |
2E |
1158 F6BE 04 FCB 4 |
1159 F6BF 46 6F 75 6E 64 20 UPMES1 FCC 'Found SYNC, loading data...' |
53 59 4E 43 2C 20 |
6C 6F 61 64 69 6E |
67 20 64 61 74 61 |
2E 2E 2E |
1160 F6DA 0A 0D 04 FCB $0A,$0D,4 |
1161 F6DD 52 4F 4D 20 44 69 UPMES2 FCC 'ROM Disk Loaded.' |
73 6B 20 4C 6F 61 |
64 65 64 2E |
1162 F6ED 0A 0D 04 FCB $0A,$0D,4 |
1163 F6F0 52 4F 4D 20 44 69 UPMES3 FCC 'ROM Disk Not Found.' |
73 6B 20 4E 6F 74 |
20 46 6F 75 6E 64 |
2E |
1164 F703 0A 0D 04 FCB $0A,$0D,4 |
1165 * |
1166 F706 8E F6 9D UPSUB LDX #UPMES |
1167 F709 BD F4 6A JSR PDATA1 |
1168 * |
1169 F70C 8D 5A BSR UPRESET |
1170 F70E 10 8E 00 20 LDY #$0020 Set up count for 2 MBit |
1171 F712 8E 00 00 LDX #$0000 |
1172 F715 8D 6C UPSUB1 BSR UPBIT Shift in bit |
1173 F717 8D 7C BSR UPSYNC Test for Sync pattern` |
1174 F719 27 15 BEQ UPSUB4 Skip if found |
1175 F71B 30 1F LEAX -1,X Count Down inner loop |
1176 F71D 8C 00 00 CMPX #$0000 |
1177 F720 26 F3 BNE UPSUB1 Branch if inner loop not complete |
1178 F722 31 1F LEAY -1,X Count down outer loop |
1179 F724 10 8C 00 00 CMPY #$0000 |
1180 F728 26 EB BNE UPSUB1 Branch if outer loop not complete |
1181 * |
1182 F72A 8E F6 F0 LDX #UPMES3 2MBits scanned, no synch, report error |
1183 F72D 7E F4 6A JMP PDATA1 |
1184 * |
1185 F730 8E F6 BF UPSUB4 LDX #UPMES1 Sync found, now load disk |
1186 F733 BD F4 6A JSR PDATA1 |
1187 * |
1188 F736 4F CLRA |
1189 F737 B7 DE 1E STA DRVNUM select Drive 0 |
1190 F73A C6 01 LDB #$01 |
1191 F73C B7 DE 1F UPSUB2 STA TRACK track 0 |
1192 F73F F7 DE 20 STB SECTOR sector 1 |
1193 * |
1194 F742 17 F9 82 LBSR MAPIN map in buffer |
1195 F745 5F CLRB 256 byte sector |
1196 F746 8D 67 UPSUB3 BSR UPBYTE read byte from prom |
1197 F748 A7 C0 STA ,U+ Store in buffer |
1198 F74A 5A DECB |
1199 F74B 26 F9 BNE UPSUB3 Loop until sector read` |
1200 F74D 17 F9 AB LBSR MAPOUT map out buffer |
1201 * |
1202 F750 B6 DE 1F LDA TRACK Advance sector |
1203 F753 F6 DE 20 LDB SECTOR |
1204 F756 5C INCB |
1205 F757 C1 0F CMPB #EMAXSEC+1 Wrap on max sector count |
1206 F759 26 E1 BNE UPSUB2 |
1207 F75B C6 01 LDB #1 |
1208 F75D 4C INCA Advance track |
1209 F75E 81 30 CMPA #EMAXTRK |
1210 F760 26 DA BNE UPSUB2 |
1211 * |
1212 F762 8E F6 DD UPEXIT LDX #UPMES2 Load complete, report message |
1213 F765 7E F4 6A JMP PDATA1 |
1214 * |
1215 * Reset Serial PROM |
1216 * |
1217 F768 86 02 UPRESET LDA #PRSTHI Strobe the reset line |
1218 F76A B7 E0 C0 STA PROMREG |
1219 F76D 86 00 LDA #PRSTLO |
1220 F76F B7 E0 C0 STA PROMREG |
1221 F772 8E 00 00 LDX #$0000 Delay a while` |
1222 F775 30 1F UPRST1 LEAX -1,X |
1223 F777 8C 00 00 CMPX #$0000 |
1224 F77A 26 F9 BNE UPRST1 |
1225 F77C BF DF 46 STX SYNCREG+0 Clear Sync Shift Register |
1226 F77F BF DF 48 STX SYNCREG+2 |
1227 F782 39 RTS |
1228 * |
1229 * Input 1 Bit From PROM |
1230 * |
1231 F783 86 01 UPBIT LDA #PCLKHI |
1232 F785 B7 E0 C0 STA PROMREG |
1233 F788 86 00 LDA #PCLKLO |
1234 F78A B7 E0 C0 STA PROMREG |
1235 F78D B6 E0 C0 LDA PROMREG |
1236 F790 44 LSRA |
1237 F791 78 DF 49 ASL SYNCREG+3 |
1238 F794 39 RTS |
1239 * |
1240 * Test for 32 bit Sync Word |
1241 * |
1242 F795 79 DF 48 UPSYNC ROL SYNCREG+2 |
1243 F798 79 DF 47 ROL SYNCREG+1 |
1244 F79B 79 DF 46 ROL SYNCREG+0 |
1245 F79E CC FF 00 LDD #SYNCLO |
1246 F7A1 10 B3 DF 48 CMPD SYNCREG+2 |
1247 F7A5 26 07 BNE UPSYNCX |
1248 F7A7 CC AA 55 LDD #SYNCHI |
1249 F7AA 10 B3 DF 46 CMPD SYNCREG+0 |
1250 F7AE 39 UPSYNCX RTS |
1251 * |
1252 * Input 1 Byte From PROM |
1253 * |
1254 F7AF 34 04 UPBYTE PSHS B |
1255 F7B1 C6 08 LDB #8 |
1256 F7B3 8D CE UPBYTE1 BSR UPBIT |
1257 F7B5 5A DECB |
1258 F7B6 26 FB BNE UPBYTE1 |
1259 F7B8 B6 DF 49 LDA SYNCREG+3 |
1260 F7BB 35 84 PULS B,PC |
1261 * |
1262 ***** NEXTCMD ***** |
1263 * |
1264 F7BD 17 FC B2 NEXTEXT LBSR INPE GET ONE CHAR. FROM TERMINAL |
1265 F7C0 84 7F ANDA #$7F STRIP PARITY FROM CHAR. |
1266 F7C2 1F 89 TFR A,B |
1267 F7C4 86 20 LDA #$20 |
1268 F7C6 17 FC A5 LBSR OUTP PRNT SPACE |
1269 F7C9 C1 60 CMPB #$60 |
1270 F7CB 2F 02 BLE NXTEX0 |
1271 F7CD C0 20 SUBB #$20 |
1272 * |
1273 ***** DO TABLE LOOKUP ***** |
1274 * FOR COMMAND FUNCTIONS |
1275 * |
1276 F7CF 8E F7 E5 NXTEX0 LDX #EXTTAB POINT TO JUMP TABLE |
1277 F7D2 E1 80 NXTEX1 CMPB ,X+ DOES COMMAND MATCH TABLE ENTRY ? |
1278 F7D4 27 0D BEQ JMPEXT BRANCH IF MATCH FOUND |
1279 F7D6 30 02 LEAX 2,X POINT TO NEXT ENTRY IN TABLE |
1280 F7D8 8C F7 F4 CMPX #EXTEND REACHED END OF TABLE YET ? |
1281 F7DB 26 F5 BNE NXTEX1 IF NOT END, CHECK NEXT ENTRY |
1282 F7DD 8E F7 F4 LDX #MSGWHAT POINT TO MSG "WHAT?" |
1283 F7E0 16 FC 87 LBRA PDATA1 PRINT MSG AND RETURN |
1284 F7E3 6E 94 JMPEXT JMP [,X] JUMP TO COMMAND ROUTINE |
1285 * |
1286 * EXTENDED COMMAND JUMP TABLE |
1287 * |
1288 F7E5 EXTTAB EQU * |
1289 F7E5 42 FCC 'B' BOOT FLEX |
1290 F7E6 F4 0B FDB UBSUB |
1291 F7E8 4C FCC 'L' LOAD ROM DISK OVER SERIAL PORT |
1292 F7E9 F4 B2 FDB ULSUB |
1293 F7EB 46 FCC 'F' FORMAT RAM DISK |
1294 F7EC F2 DD FDB UFSUB |
1295 F7EE 50 FCC 'P' LOAD ROM DISK FROM PROM |
1296 F7EF F7 06 FDB UPSUB |
1297 F7F1 58 FCC 'X' XMODEM ROM DISK UPLOAD |
1298 F7F2 F5 AC FDB UXSUB |
1299 * |
1300 F7F4 EXTEND EQU * |
1301 * |
1302 F7F4 57 48 41 54 20 3F MSGWHAT FCC "WHAT ?" |
1303 F7FA 0A 0D 04 FCB $0A,$0D,$04 |
0012 END |
0013 END COLDS |
Program + Init Data = 7039 bytes |
Error count = 0 |
/Flex9/flex9ram.sh
1,3 → 1,3
../../Tools/as09/as09.exe flex9ram.asm -l > flex9ram.lst |
../../Tools/as09/as09_dos.exe flex9ram.asm -l > flex9ram.lst |
../../Tools/epedit/epedit.exe flex9ram.aux |
|
/Flex9/flex9cf8.sh
1,2 → 1,2
../../Tools/as09/as09.exe flex9cf8.asm -l > flex9cf8.lst |
../../Tools/epedit/epedit.exe flex9cf8.aux |
../../Tools/as09/as09_dos.exe flex9cf8.asm -l > flex9cf8.lst |
../../Tools/epedit/epedit.exe flex9cf8.aux |
/Flex9/FLEX9RAM.S19
0,0 → 1,230
S123C7007EC7217EC7037EC7477EC7857EC7957EC71F0C00000000C810C810000000003BDC |
S123C720121A10BECC3110EF027DCC3426118ECCFC7CCC346D842707BFCC3110EE023B8ED3 |
S123C740CCF87FCC3420F11A107DC71B2729BEC719A6843402EC018ECAC0ED88403502A712 |
S123C760036F848601A7026F88226F883B7DC71E2729113F1220F61CEFAD9FD3ED7FCCFCBC |
S123C780113F1220F41A107DCC302705113F1220F47CCC30397FCC301CEF397DC71D2627BC |
S123C7A08ECAC0BDD406261F7DC71C270F7FC71C810A270F3402860A8D3C3502810D26034B |
S123C7C0B7C71C8D3120D4860D8D2B860A8D27B6C7128D227FC71DBEC7196D0327056A0332 |
S123C7E07EC74730048CC84026038EC810BFC7197AC71B7EC747BDCCD82B05113F1220F6C2 |
S106C8007ECCE403 |
S113C840FF000000535441525455500054585400B2 |
S123CA002006BDCAAC39C0A08639B7D3FDBECC2B308900A1BFCA06AD9FD3F1BED3FBBFCD14 |
S123CA200ABFCD0DBED3F9BFCD10BFCD13BED3F7BFCD4F8E00A0C6B9A684E78412E1842648 |
S123CA400BA78430890400BCCA0626EC3089FF5FBFCC2B8ECD03BFCC168ECADCBDCE81BD78 |
S123CA60CEB58D9EBDCEB58EC8408601A784BDD4062708A601BDD2007ECD678EC080BFCC75 |
S123CA80148EC840BDD406270534307ED2D7BECC14A780810D26E78EC840BDD1F48EC08054 |
S123CAA0BFCC148ECD67BFCC437ED32E8ECAECBDCE81BDCE2B8D1425F3B7CC0E8D0D25ECC9 |
S123CAC0B7CC0F8D0625E5B7CC1039BDD175250BB6CC1C5D27031CFE391A01393638303981 |
S121CAE020464C45582056332E3031044441544520284D4D2C44442C5959293F20048B |
S123CC0008183A190004400000FF1B0001000000000000000000000000000000000000003E |
S11ECC200000000000000000000000BFFF000001000000000000000000000036 |
S104CC496086 |
S123CC4E2B2B2B043F3F3F04574841543F0443414E2754205452414E53464552044E4F543E |
S123CC6E20464F554E44044449534B204552524F52202304445249564553204E4F54205296 |
S11DCC8E454144590447455400D20F4D4F4E00D34B00271003E80064000A08 |
S123CD007ECD577ECD677ECDB17ECD097ECD0C7ECD0F7ECD127ECEFB7ECF417ECE2B7ECEC5 |
S123CD20817ECFED7ECEB57ED00E7ECDEA7ED0367ED1A27ED0EB7ED3497ECF867ECFD47EE8 |
S123CD40D27F7ED12F7ECFD07ED1757ED3297ECD4E7ECE057ECE0510CEC07F7FCC11BDD460 |
S123CD60007FCC28BDD3FD10CEC07FBDDE188ECD03BFCC168EC700AF9FD3E9BED3E7AF9FBB |
S123CD80D3EB8ECCF8BFCC317FCC347FCC4C8D5AB6CC11B1CC0226057CCC1520147DCC2887 |
S123CDA010260597BDD40326B28ECC4EBDCE818D7ABDD0D4810D27E58EC8407CCC0DBDD003 |
S123CDC03625168ECC938D3E2709BECC1227078D3526036E9801BDD22E8ECC568615B7CCAF |
S123CDE020BDCE817FCC117ECD67BECD13BFCD10BECD0DBFCD0A7FCC237FCC227FCC217FC7 |
S123CE00CC267FCC2439108EC844A6A0815F23028020A18026086D8426F06DA4270C6D8058 |
S123CE2026FC30026D8426DE1CFB398EC080BFCC14BDCEFBB1CC01271DB1CC00271F810D4F |
S123CE40270D810A2732811F23E78CC0FF27E2A780810D26DC398ECC528D2620CE8CC080AF |
S123CE6027F4301FB6CC07810826088620BDCF66B6CC07BDCF6620B9860DBDCF41862020F2 |
S123CE80C98D32A6848104276FBDCF41300120F3BDCD4E2765AD9FD3E5B1CC0A265C7FCCF4 |
S123CEA01AAD9FD3E5B1CC0A2750810326F37FCC116E9FCC167DCC2126278DD4B6CC0327A6 |
S123CEC020B1CC1A22187FCC1A7DCC0927028DCE3404F6CC0827058D085A26FB35047CCC63 |
S123CEE01A860D8D5C860A8D583404F6CC0527064F8D4E5A26FA35041CFE397DCC23261A1B |
S123CF007DCC2627108D1A7DCC2F27117DCC24270C8D532008BDCD092003BDCD0C7FCC1AB7 |
S123CF2039BFCC47BECC262006BFCC47BECC24BDD4062604BECC47397FCC24BDD27F7ECDF9 |
S123CF40037DCC212620811F22057FCC2920177CCC293402B6CC04270BB1CC292406BDCEEE |
S123CF60B57CCC29350234027DCC2226137DCC2427048DB5200D7DCC262608BDCD0F200316 |
S123CF80BDCD123502397FCC4AF7CC1D8604B7CC4DEC848ECCA08D0B30027ACC4D26F71FAF |
S123CFA098203D7FCC4B10A3842507A3847CCC4B20F43402B6CC4B26107DCC4A260B7DCC6B |
S123CFC01D270B86208D2320057CCC4A8D1235828D023001A6848D04A684200444444444C2 |
S123CFE0840F8B30813923028B077ECF4181302514813923168141250C815A230E816125FD |
S123D00004817A23061A01B7CC11391CFE393410BECC14B6CC18B7CC19A680B7CC18810D42 |
S123D0202710B1CC02270BBFCC1481202604A18427E78DB935908615A70186FFA7036F0477 |
S123D0406F0CBDD0D48608B7CC4B8D34252E260F8D2E25282609BCCC3F276C8D232368BEC1 |
S123D060CC3F6D0427616D032A0F7DCC0D2705B6CC0B2003B6CC0CA7037FCC0DBECC3F393B |
S123D0808D8C254381392215BECC3F6D032A388403A703BDD00E242F812E1CFE39F6CC4B51 |
S123D0A02B253404C005F7CC4B3504B1CC4925028020A70430015ABDD00E2408812D270475 |
S123D0C0815F26065D26E41A01395D27CB6F0430015A20F6BFCC3FBECC14A68481202604C5 |
S123D0E0300120F6BFCC14BECC3F393430E60C2618108ED10B810B2210C6033D31A5C603D3 |
S123D100A6A0A70C30015A26F735B042494E545854434D4442415353595342414B5343524D |
S123D1204441544241434449525052544F5554BDD21EBDD00E25228D2625183404C6047886 |
S123D140CC1C79CC1B5A26F73504BBCC1CB7CC1C5C20DFBDD00E24FB39BECC1B1CFE3980CB |
S123D160472A0F8B062A048B072A078B0A2B031CFE391A0139BDD21EBDD00E25DC8139221A |
S123D180D2840F34043402FCCC1B584958495849F3CC1BF3CC1BEBE08900FDCC1B35045C71 |
S123D1A020D67FCC1D8D3D81022715811626F68D33B7CC1E8D2EB7CC1F8601B7CC1D20E5E7 |
S123D1C08D221F898D1E1E89F3CC1BFDCC3D8D141F894D27D08D0DBECC3DA780BFCC3D5A8B |
S123D1E026F320C18EC840BDD4062711A6018108260E32628604A784BDD406260D1CFE3902 |
S123D200B7CC20810426031A01398D737ECDE486008D35250F8D077CCC4C8D8620F14F5FC0 |
S123D220FDCC1B39F6CC4C1027FBAE7ECD0386028D228DEABDD1A2F6CC1D27046E9FCC1EB2 |
S123D2408ECC5C86817ECDDE34028EC840BDD0363502251A8EC840BDD0EB8EC8408601A70D |
S123D26084BDD1E4102500BB86FFA7883B39B6CC11810D2707B1CC021026FB5D1A013934B8 |
S123D28030A601B7CC202763BDCDEA10BECC2D260881102758108ED3618EC8406D02270906 |
S123D2A08604A784BDD406262E8EC838C60B8D6E8EC840B6CC0BA7038601A784BDD4062634 |
S123D2C016B6CC204A47474C6F8820A788218615A784BDD406271E8ECC75BDCE81BECC3FC1 |
S123D2E0B6CC20A7016F845FBDCF8635B08ECC82BDCE8120F6BDCEB58EC840B6CC204A8453 |
S123D30003C63F3DCB04E78822BDD40626C9BDCF41810D26F48604A784BDD40620CD3430CC |
S123D3207ED1008ECC6B7ECDE13506FDCC4310FFCC457FCC207CCC287ECDB87FCC2810FEE3 |
S123D340CC45F6CC206E9FCC433A397DCCFC26046E9FD3F38EC840861BA701BDD27F7ECDCD |
S10FD360674552524F525300005359537A |
S106CCC07ED370AC |
S106CCD87ED37094 |
S106CCE47ED37088 |
S10BCCF801000000000000002F |
S11BD370397ED3706E9FF8046E9FF8006E9FF8086E9FF80A6E9FF80672 |
S123D3E5D374D370DFC2DFC8D370D370D370D378D371D37CD380D3847ECA007ED4367ED4DF |
S123D405597ED47B204449534B204F5045524154494E472053595354454D20434F50595217 |
S123D4254947485420284329203139383020425920544543484E4943414C205359535445F3 |
S111D4454D5320434F4E53554C54414E5453B7 |
S123D435FFBDDE158ED409C60A8D118E0005BFD413BFD4157FD41A8ED41BC61A6F805A2631 |
S123D455FB7EC70CBDC709BED40927EB3088E4BFD40B3420BDDAC3352024ECBED40B6F02D2 |
S123D475BDC70CC6FF397DCCFC2703BDC7093424BFD40B6F01E6842622E602271AC10227DE |
S123D49511BDD5B4BED40B25267DCCFC26235F352439BDD6CF20EDC6122014C1162304C676 |
S123D4B501200C5A588ED4CEAD95BED40B2402E701BDC70C6D01352439D986D9D9DAF9DA09 |
S123D4D5C3D5E2D81DD838D876D641D69FD969DBD6DB2CD699DA87D810D56FD590DB07DDC0 |
S123D4F5BDDCFBDCE58D202605C6021A0139ED84AE846F846F01398D0E2705C60D1A01399D |
S123D515EC94ED841CFE39FCD40BC3001C8ED40910AE8426031CFB3910A384260139AE8405 |
S123D53520EEBED40B4F5F8D02C62FA7881130015A26F839BED40BC60BA604A78824300137 |
S123D5555A26F639BED40BC60BA6043402A68824A1E0260530015A26F039BED40BE6025404 |
S123D5752479E688237ED600BED40BE688226C88223AA788405C261F1A0139BED40BE602AA |
S123D595C403C1032655CA80E702E60FC580260AE688233AA788401CFE39C60B1A0139A677 |
S123D5B5883B2B3C27076A883B8620201D8D31251B8118221527F68109260C8D23250DBEA3 |
S123D5D5D40BA7883B20D84D27E31CFE39BDDAB1250985012705A7847ED9A0C6121A0139D1 |
S123D5F5BED40BE68822270A6C88223AA688401CFE398D0324EA39BED40BEC88406C882166 |
S123D61526036C882010830000271CED881E34028604A7882235028D132410C5802704C6F9 |
S123D635102006C6092002C6081A01398D25BED40BBDDE0C25128D11BDDE0026031CFE39A6 |
S123D65534048D17350424EE39BED40BEC881E308840394FB7D411B7D41239C5102611C55F |
S123D675802624F6D4115CC1072705F7D41120147FD411F6D4125CC104270CF7D412BED489 |
S123D6950BBDDE091CFE391A01398DC7BED40BBDDE0C2520BED40B8DB0BDDE03260AB6D40C |
S123D6B5352737BDDE062732C540260B34048DAB350424E039C6201A0139BED40BE6883B28 |
S123D6D52B3D8120260F5CE7883BC17F260C200D8D0B24E6395D272720F61CFE393402C168 |
S123D6F50126048620201086098D143502250F3402BED40BA6883B6F883B8D03350239BE49 |
S123D715D40BE602C1021026FED1E68822C104260834028D213502250FBDD57D240AC60488 |
S123D735BED40BE788221CFE39BED40B4F5FED8820ED88422027E688122622E688172744B9 |
S123D7556F88178D3F252A8DE025268DDC2522BED40BC602E78817EC88117EDC828D0EBE7A |
S123D775D40BED8840BDD69F241A7EDBC18D03EC8439BED40BE60386063D8ED41D3ABFD49E |
S123D7951B6D84398DE72605C6071A0139BED40BED88136D88122603ED88116C881626035D |
S123D7B56C88156D8817270BBDDC4325DDBED40BEC8813BDD62025D2BED40BEC88403406D2 |
S123D7D58DB03506ED84260A6F026F036F046F05200810AE04313F10AF044FBED40B6C8850 |
S123D7F52126036C88205FA7884030015A26F8BED40BEC8820ED88421CFE395F3404C603A0 |
S123D815200EBED415BFD413F6D4133404F6D414BED40BE788413504E788407FD4185FE79B |
S123D835882239BED40BE68822261DBDD60C2530BED40B7DD4182605DC44FDD4188610A711 |
S123D8558822EC881EED882FA68822A78831C6183414BDD5F53514A70430015A26F21CFEC1 |
S123D87539BED40BA68831A78822C6183414A604BDD714351430015A26F27ED69FBED40B15 |
S123D895A603A78823B6D4177DD41A2631A703BED415BFD4138C0005270C8D222337BED4BB |
S123D8B518BFD41320EFBED40BA68823A7032A0EBDDDBD25368D07231CBDDDAD20F2BED442 |
S123D8D50B7FD41ABDD549BDD81DBDD8382407C10827181A0139BED40BA604270C2A028DA3 |
S123D8F50FBDD55926E41CFE398D051CFB1CFE39A68833260CEC882FED8832A68831A78851 |
S123D9153439BDD78726178D182515C60610BED40BBED41BA6A85D3121A7805A26F61CFE70 |
S123D93539BDD810BDD60C2508BED40BC610E7882239BDD7878DEA25F8C60610BED40BBE01 |
S123D955D41BA680A7A85D31215A26F6BDD69F24E07EDBC1BED40B8602A702EC882FED88EF |
S123D9751EBDD6412508BDD87624057EDBC1C60A39BDD4FA253DBDD8922538263BBED40BA9 |
S123D9957DD41A2706A60F85202629BDDCC0252AEC8811ED8840BDDA76E688172713340447 |
S123D9B5BDD60C3504250C5A26F4BED40B5FE788221CFE39C6112002C6043404BDD50C3523 |
S123D9D5041A0139BED40B6D032A08BDDDBD2403C61039BDD4FA25E2BDD537BDD91725DA03 |
S123D9F5BDD89225D52604C60320CFBDDCC025CABED40BC60A6F0F30015A26F9BED40BECA5 |
S123DA1588322727ED882FA68834A78831FCCC0EED8819B6CC10A7881BBDDDADBDD96925D4 |
S123DA35998D3E8604A788221CFE39BED40B6F88176C8812EC882FBDD620250DBDD77225D7 |
S123DA5508BDD69F2406BDDBC17ED9CFBED40BEC881EED88328610A78834BDD94725EA20EF |
S123DA758ABED40BA684A7026F846F883B4FA78822398D28250E6F84441025FB7AC604E71B |
S123DA9588221CFE39BED40BA6028183260B8603A702BDD69F102501131CFE398DE7250D50 |
S123DAB5BED40BA602810323F0C6121A01398DEC253181022708BED40B6F027ED50CA68829 |
S123DAD5122605BDDBA720198DC82517BED40B6D88172705BDDC98250ABDD9692505BDD9F3 |
S123DAF54724D339BDD9862528BDD60C252386032018BDD986251ABED40BA60F858026129B |
S123DB15EC8813BDD62025098602BED40BA7021CFE39C60B1A01398D35BDD892252A2724BB |
S123DB35BED40BC60BA68824A70430015A26F68D4D2515BED40BA60F858026D6856026093F |
S123DB558D0C2055C6031A0139C60C1A0139BED40B860BB7D411A604E68835A78835E704F5 |
S123DB7530017AD41126EFBED40BA60C260CC603A6883DA70C30015A26F6BED40B398DCEA7 |
S123DB95BDD89225072606BED40B1CFE39C6041A0139BED40B86FFA704BDD969BED40B86F0 |
S123DBB500A70239ED8840BDD69F2414C5402608C580270AC6102006C60B2002C60A1A01C8 |
S123DBD539BDD917255E8DB8255ABED40BA60F8580265285602652BDD787BED41BEC0226F7 |
S123DBF50FBED40BEC88112733BED41BED842014BED40BBDD620252CBED40BEC8811271C29 |
S123DC158DA22520BED40BEC8813BED41BED02BED40BEC8815BED41BE304ED04BDDBA725A8 |
S123DC3503BDD94739C60B2002C60C1A0139EC881E5CE1883C2303C6014C10A38813260E4B |
S123DC55A6883781FF27074CA788371CFE398D332530BED40BA6883A8B032616EC881E100D |
S123DC75A388112705C6171A0139EC8840ED88388604A7883AEC8813ED88358601A7883780 |
S123DC951CFE39EC8838BDD62025F7BED40B1F12E6883A3AC603A6A8353121A788403001AF |
S123DCB55A26F3BDD69F24DA7EDBC1BDD810BDD60C2546BED40B4F5FED8820A68867A7883B |
S123DCD53C5F6F884030015A26F8BED40B1CFE39BED40BA68817271DEC88208300012A0355 |
S123DCF57EDD9AED8820BDDAB1250E4624076F84A688172605C6121A01397FD411EC88111D |
S123DD1510AE8820276ABDDD9F25EE4F5F6D022774EB028900BFD40FBED40B10A3882024BB |
S123DD352CBED40F30033402B6D4114CB7D4118154270881A83502274C20D23404BED40B73 |
S123DD55EC88408D45253E3504350220C0A38820BED40FA6023404A0E04A1F89A684EB011D |
S123DD75BED40B2505E1883C2306E0883C4C20F5BDD6202514BED40BEC884210A38820272F |
S123DD9514C6192002C6181A0139BDD6202508BED40BC6443A1CFE39BED40BC60BA688244F |
S123DDB5A70430015A26F639BED40BA6034C8104240FA7032605BDDE0F2003BDDE1225E819 |
S109DDD539C6101A0139E1 |
S123DE007EF0577EF05B7EF05F7EF0637EF06C7EF09F7EF0A37EF0A77EF0BF7EF0C3000067 |
S115DE2000000000000000000000000102031040FFFF98 |
S123F000F7BDF119F141F13FF13FF13FF13FF13FF052F052F052F119F141F13FF13FF13F7A |
S123F020F13FF13FF052F052F052F052F052F052F052F052F052F052F052F052F052F17AA7 |
S123F040F1E9F249F24EF24EF24EF24EF052F052F0525F5D1CFE396E9FDE326E9FDE346E18 |
S123F0609FDE368D072701396E9FDE383430E603F7DE1E8EDE2AA68581FF26083530C60FD8 |
S123F0805D1A0139C6143D8EF002308B108EDE32C614A680A7A05A26F935306E9FDE3A6E03 |
S123F0A09FDE3C6E9FDE3E4FB7DE1E8EDE1B8DBC2504AD9FDE40B6DE1E4C810426EA396ECB |
S123F0C09FDE426E9FDE441FA8B7DE221A50CEDE2AF6DE1EE6C5CEDE2EB6DE1FABC584F072 |
S123F0E0A7E2B6DE208001880F840FABE0B7FFF0B6DE1F840F8B005F1F03398600880FB794 |
S123F100FFF0B6DE221F8A39B7DE1FF7DE201CFE1A0439C6405D1A0139347017FFEA17FFD9 |
S123F120A6108EDE465FA6C0A7A05A26F917FFCB108EDE465FA6A0A7805A26F95F35F05F13 |
S123F14039347017FFC2CEDE2AF6DE1EE6C5C1012707C100270316FFBA108EDE465FA68092 |
S123F160A7A05A26F917FF5F108EDE465FA6A0A7C05A26F917FF845F35F0340434027FDE26 |
S123F180217FDE228673BDF285244CB6DE1EBDF28524443502BDF285243D3502BDF2852485 |
S123F1A0365FBDF2672430A780BBDE22B7DE2224037CDE215A26EBBDF267241B3402BDF26C |
S123F1C06724141F89350210B3DE21260E8606BDF28524035F200DC61020098615BDF28576 |
S123F1E024F5C609F7DE215D39340434027FDE217FDE228672BDF28524DDB6DE1EBDF28519 |
S123F20024D53502BDF28524CE3502BDF28524C75FA680BDF28524BFBBDE22B7DE22240309 |
S123F2207CDE215A26EBB6DE21BDF28524A9B6DE22BDF28524A1BDF267249C810626035F9A |
S123F2402002C60AF7DE215D39F6DE215D398651BDF285240CBDF2672407810626035F20F6 |
S123F26004C6101A015D3934308E03E8108E04E2B6E00047250A313F26F6301F26EE35B0BE |
S123F280B6E00135B0343034028E03E8108E04E2B6E0004747250C313F26F5301F26ED35E0 |
S123F2A00235B03502B7E00135B00A0D466F726D6174696E672052414D6469736B2E2E2EBC |
S123F2C020040A0D0452616D6469736B206E6F7420616C6C6F63617465642120048EF2AA77 |
S123F2E0BDF46A8EDE2A5FA6858101270C5CC10426F58EF2C2BDF46A39F7DE1E8EDE1BBD11 |
S123F300F06C8EDE464F5FA7805A26FB7FDE1F8601B7DE208EDE46B6DE1FA784B6DE204C43 |
S123F320810F26046C848601A701B6DE1FF6DE20BDF05B7CDE20B6DE20810F26D78601B748 |
S123F340DE207CDE1FB6DE1F814026C88EDE46863FC60EBDF0578EDE466F846F01863FC6E1 |
S123F3600EBDF05B8EDE464FC60EBDF0578EDE466F846F014FC60EBDF05B8EDE464FC60390 |
S123F380BDF0578EDE466F846F01CC5241ED8810CC4D44ED8812CC4953ED8814CC4B20ED73 |
S123F3A08816CC0001ED881BCC0101ED881D863FC60EED881FED8826CC0372ED88218601C8 |
S123F3C0A788238607A788248607A788254FC603BDF05B8EDE464FC601BDF0578EDE4686F2 |
S123F3E0AAA7848655A7014FC6017EF05B0808426F6F74696E6720696E7465726E616C2053 |
S123F400464C45582E2E2E2E0D0A048EF3EDBDF46A8ED3E5108EF434ECA1ED818CD3FD26D4 |
S123F420F78EDE00108EF44CECA1ED818CDE1E26F77ECD00F476F482DFC2DFC8F482F48288 |
S123F440F482F47EF482F47AF46EF4727EF0577EF05B7EF05F7EF0637EF06C7EF09F7EF093 |
S123F460A37EF0A77EF0BF7EF0C36E9FF80C6E9FF80A6E9FF8066E9FF8046E9FF8086E9F24 |
S123F480F8003953657269616C20524F4D204469736B2075706C6F6164202E2E2E0D0A04B4 |
S123F4A0524F4D204469736B204C6F616465640D0A048EF483BDF46A8600B7DE1E4FC601BC |
S123F4C0B7DE1FF7DE2017FBFE5FBDF4EDA7C05A26F817FC26B6DE1FF6DE205CC10F26E081 |
S123F4E0C6014C813026D98EF4A07EF46A34048D0E484848481F898D063404ABE03584BDE0 |
S123F500F52829FB80302BF781092F0A81112BEF81162EEB800739B6E0008501398603B760 |
S123F520E0008611B7E000398610B7DE277FDE287FDE29B6E000850126088578270A8DDD41 |
S123F54020E6B6E0011C02397ADE2926E67ADE2826E17ADE2726DC4F1A02393402B6E000AE |
S123F56085022608857827F58DB320F13502B7E001390D0A586D6F64656D20524F4D20446D |
S123F58069736B2055706C6F6164040D0A55706C6F616420436F6D706C657465040D0A5552 |
S123F5A0706C6F6164204572726F72048EF57217FEB88601B7DE238EF61ABFDE258600B76B |
S123F5C0DE1E4FC601B7DE1FF7DE2017FAF95F17002B2520A7C05A26F617FB1FB6DE1FF6C5 |
S123F5E0DE205CC10F26DEC6014C813026D78EF58B7EF46A17FB048EF59D16FE6D3410BE75 |
S123F600DE2517FF23280A861517FF4F8EF61A20F1AD8426EDBFDE253590810126068EF6CC |
S123F6203A1CFA3981042608860617FF2E1A0539811826031A05391CFA39B1DE2326068E8D |
S123F640F6501CFA39861517FF118EF61A1CFA3943B1DE2326EF7FDE218680B7DE248EF697 |
S123F660641CFA393402BBDE21B7DE2135027ADE2426038EF67B1CFE1A0439B1DE21260704 |
S123F6807CDE238606200D34041F305AC4801F033504861517FEC48EF61A1CFA3908084CF3 |
S123F6A06F616420524F4D206469736B2066726F6D20636F6E6669672050524F4D2E0446F9 |
S123F6C06F756E642053594E432C206C6F6164696E6720646174612E2E2E0A0D04524F4D9C |
S123F6E0204469736B204C6F616465642E0A0D04524F4D204469736B204E6F7420466F7575 |
S123F7006E642E0A0D048EF69DBDF46A8D5A108E00208E00008D6C8D7C2715301F8C000042 |
S123F72026F3311F108C000026EB8EF6F07EF46A8EF6BFBDF46A4FB7DE1EC601B7DE1FF78D |
S123F740DE2017F9825F8D67A7C05A26F917F9ABB6DE1FF6DE205CC10F26E1C6014C813089 |
S123F76026DA8EF6DD7EF46A8602B7E0C08600B7E0C08E0000301F8C000026F9BFDF46BF61 |
S123F780DF48398601B7E0C08600B7E0C0B6E0C04478DF493979DF4879DF4779DF46CCFF2F |
S123F7A00010B3DF482607CCAA5510B3DF46393404C6088DCE5A26FBB6DF49358417FCB20A |
S123F7C0847F1F89862017FCA5C1602F02C0208EF7E5E180270D30028CF7F426F58EF7F4AE |
S120F7E016FC876E9442F40B4CF4B246F2DD50F70658F5AC57484154203F0A0D0431 |
S9030000FC |
/Flex9/f9-monex.lst
0,0 → 1,1412
Assembler release DWC_2.0 version 2.11 |
May 6, 2004 (c) Motorola (free ware) |
0001 * |
0002 ** FLEX 9 DISK DRIVERS |
0003 * |
0004 * FOR SYS09BUG ON THE |
0005 * DIGILENT SPARTAN 3 STARTER BOARD AND |
0006 * TERASIC CYCLONE 2 DE1 BOARD |
0007 * WITH I/O MAPPED AT $XE000 |
0008 * AND ROM MAPPED AT $XF000 |
0009 * THE DIGILENT SPARTAN 3 STARTER BOARD HAS 1MBYTE OF SRAM |
0010 * THE TERASIC CYCLONE 2 DE1 BOARD HAS 512KBYTE OF SRAM |
0011 * THE FIRST 64K IS USED BY FLEX, |
0012 * THE SECOND 128K IS USED AS A ROM DISK |
0013 * THE REMAINING RAM IS USED FOR A RAM DISK |
0014 * |
0015 * |
0016 0001 CFLAG EQU $01 CARRY FLAG |
0017 0002 VFLAG EQU $02 OVERFLOW FLAG |
0018 0004 ZFLAG EQU $04 ZERO FLAG |
0019 0008 NFLAG EQU $08 NEGATIVE FLAG |
0020 0010 IFLAG EQU $10 IRQ MASK CC |
0021 0020 HFLAG EQU $20 HALF CARRY |
0022 0040 FFLAG EQU $40 FIRQ MASK CC |
0023 0080 EFLAG EQU $80 ENTIRE FLAG |
0024 * |
0025 0000 MAPPAG EQU $00 PAGE $0000 DAT ADDRESS |
f9-monex.txt, line no. 26: Symbol undefined Pass 2 |
0026 0000 DATREG EQU IC11 DAT REGISTERS |
0027 * |
0028 * Serial Port |
0029 * |
f9-monex.txt, line no. 30: Symbol undefined Pass 2 |
0030 0000 ACIAC1 EQU ACIAS |
f9-monex.txt, line no. 31: Symbol undefined Pass 2 |
0031 0001 ACIAD1 EQU ACIAS+1 |
0032 04E2 DELCON EQU 1250 Delay (Processor clock in MHz * 50) |
0033 * |
0034 * XMODEM Control characters |
0035 * |
0036 0001 SOH EQU $01 |
0037 0004 EOT EQU $04 |
0038 0006 ACK EQU $06 |
0039 0015 NAK EQU $15 |
0040 0018 CAN EQU $18 |
0041 * |
0042 * DRIVE GEOMETRY |
0043 * |
0044 000E EMAXSEC EQU 14 ROM DISK |
0045 0030 EMAXTRK EQU 48 3 * 16 * 14 * 256 = 172,032 Bytes |
0046 0292 ETOTSEC EQU EMAXTRK*EMAXSEC-EMAXSEC |
0047 * |
0048 000E RMAXSEC EQU 14 RAM DISK |
0049 *RMAXTRK EQU 192 12 * 16 * 14 * 256 = 688,128 Bytes Digilent Spartan 3 |
0050 0040 RMAXTRK EQU 64 4 * 16 * 14 * 256 = 229,376 Bytes Terasic Cyclone 2 |
0051 0372 RTOTSEC EQU RMAXTRK*RMAXSEC-RMAXSEC |
0052 * |
0053 * DRIVE TYPES |
0054 * |
0055 0000 DTYPROM EQU 0 ROM DISK |
0056 0001 DTYPRAM EQU 1 RAM DISK |
0057 0002 DTYPFLS EQU 2 FLASH DISK |
0058 0003 DTYPNET EQU 3 FLEXNET DISK |
0059 * |
0060 DE00 ORG $DE00 |
0061 * |
0062 * DISK DRIVER JUMP TABLE LAST UPDATE: 22/12/2006 |
0063 * Disk driver for RAM Disk. |
0064 * |
0065 * 14 SECTORS PER TRACK |
0066 * 16 * N TRACKS PER DISK |
0067 * |
0068 * ROM DISK OCCUPIES $10000 - $1E000 ... $30000 - $3E000 |
0069 * RAM DISK OCCUPIES $40000 - $4E000 ... $F0000 - $FE000 |
0070 * Track Buffer page mapped at $E000 - $EFFF |
0071 * MAPPAG = $00 = 0 x $1000 (4 K pages) |
0072 |
0073 * ON SWTPC ROM AT $XF000 AND IO AT $XE000 |
0074 * APPEARS THROUGHOUT THE MEMORY SO MUST BE SKIPPED OVER |
0075 * WHEN USING RAM AS A RAMDISK. |
0076 * THE MSN OF THE TRACK MAPS INTO THE MSN OF THE DAT |
0077 * THE LSN OF THE TRACK NUMBER INDEXES INTO THE 4K RAM PAGE |
0078 * THE SECTOR MAPS INTO THE LSN OF THE DAT WHICH IS INVERTED |
0079 * |
0080 * |
0081 * |
0082 * FLEX disk jump table. |
0083 * |
0084 DE00 0E 57 READ JMP READSC |
f9-monex.txt, line no. 85: Phasing Error |
0085 DE02 0E 5B WRITE JMP WRITSC |
f9-monex.txt, line no. 86: Phasing Error |
0086 DE04 0E 5F VERIFY JMP BUSY |
f9-monex.txt, line no. 87: Phasing Error |
0087 DE06 0E 63 RESTOR JMP RESTR1 |
f9-monex.txt, line no. 88: Phasing Error |
0088 DE08 0E 6C DRIVE JMP DRVSEL |
f9-monex.txt, line no. 89: Phasing Error |
0089 DE0A 0E 9F DRVRDY JMP CHKRDY |
f9-monex.txt, line no. 90: Phasing Error |
0090 DE0C 0E A3 QUICK JMP CHKQIK |
f9-monex.txt, line no. 91: Phasing Error |
0091 DE0E 0E A7 COLDDR JMP DINIT |
f9-monex.txt, line no. 92: Phasing Error |
0092 DE10 0E BF WARMDR JMP DWARM |
f9-monex.txt, line no. 93: Phasing Error |
0093 DE12 0E C3 SEEK JMP SEEKTS |
0094 * |
0095 * RAM SPACE |
0096 * |
f9-monex.txt, line no. 97: Phasing Error |
0097 DE14 00 DRVNUM FCB 0 |
f9-monex.txt, line no. 98: Phasing Error |
0098 DE15 00 TRACK FCB 0 |
f9-monex.txt, line no. 99: Phasing Error |
0099 DE16 00 SECTOR FCB 0 |
f9-monex.txt, line no. 100: Phasing Error |
0100 DE17 00 CHKSUM FCB 0 |
f9-monex.txt, line no. 101: Phasing Error |
0101 DE18 00 CCSAVE FCB 0 |
f9-monex.txt, line no. 102: Phasing Error |
0102 DE19 00 BLKNUM FCB 0 Xmodem block number |
f9-monex.txt, line no. 103: Phasing Error |
0103 DE1A 00 BYTCNT FCB 0 Xmodem byte count |
f9-monex.txt, line no. 104: Phasing Error |
0104 DE1B 00 00 XSTATE FDB 0 Xmodem State Vector |
f9-monex.txt, line no. 105: Phasing Error |
0105 DE1D 00 00 00 DELCNT FCB $00,$00,$00 Xmodem Poll timer |
0106 * |
0107 * Disc driver type table. |
0108 * Indexed by drive number |
0109 * |
f9-monex.txt, line no. 110: Phasing Error |
0110 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 offset |
0116 * Indexed by drive type |
0117 * |
f9-monex.txt, line no. 118: Phasing Error |
0118 DE24 10 DOFFTAB FCB $10 ROM Disk $10000 |
0119 DE25 40 FCB $40 RAM DISK $40000 |
0120 DE26 FF FCB $FF Flash Disk |
0121 DE27 FF FCB $FF NETPC Disk |
0122 * |
f9-monex.txt, line no. 123: Phasing Error |
0123 DE28 REAVEC RMB 2 Disc driver jump table. |
f9-monex.txt, line no. 124: Phasing Error |
0124 DE2A WRIVEC RMB 2 |
f9-monex.txt, line no. 125: Phasing Error |
0125 DE2C VERVEC RMB 2 |
f9-monex.txt, line no. 126: Phasing Error |
0126 DE2E RSTVEC RMB 2 |
f9-monex.txt, line no. 127: Phasing Error |
0127 DE30 DRVVEC RMB 2 |
f9-monex.txt, line no. 128: Phasing Error |
0128 DE32 CHKVEC RMB 2 |
f9-monex.txt, line no. 129: Phasing Error |
0129 DE34 QUIVEC RMB 2 |
f9-monex.txt, line no. 130: Phasing Error |
0130 DE36 INIVEC RMB 2 |
f9-monex.txt, line no. 131: Phasing Error |
0131 DE38 WARVEC RMB 2 |
f9-monex.txt, line no. 132: Phasing Error |
0132 DE3A SEEVEC RMB 2 |
0133 * |
0134 * SECTOR BUFFER |
0135 * |
f9-monex.txt, line no. 136: Phasing Error |
0136 DE3C BUFFER RMB 256 |
f9-monex.txt, line no. 137: Phasing Error |
0137 DF3C SYNCREG RMB 4 Prom input register |
0138 * |
0139 **************************************** |
0140 * |
0141 * START OF EXTENSION COMMANDS |
0142 * |
0143 **************************************** |
0144 * |
f9-monex.txt, line no. 145: Symbol undefined Pass 2 |
0145 0000 ORG MONEXT |
0146 0000 07 9C FDB NEXTEXT Jump to next extended command |
0147 * |
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 EWRITE |
0169 0006 01 3D FDB ECHECK |
0170 0008 01 3D FDB ECHECK |
0171 000A 01 3D FDB ECHECK |
0172 000C 01 3D FDB ECHECK |
0173 000E 01 3D FDB ECHECK |
0174 0010 00 52 FDB DDUMMY |
0175 0012 00 52 FDB DDUMMY |
0176 0014 00 52 FDB DDUMMY |
0177 * |
0178 0016 01 17 FDB EREAD Drive type 1 (RAM disk). |
0179 0018 01 3F FDB EWRITE |
0180 001A 01 3D FDB ECHECK |
0181 001C 01 3D FDB ECHECK |
0182 001E 01 3D FDB ECHECK |
0183 0020 01 3D FDB ECHECK |
0184 0022 01 3D FDB ECHECK |
0185 0024 00 52 FDB DDUMMY |
0186 0026 00 52 FDB DDUMMY |
0187 0028 00 52 FDB DDUMMY |
0188 * |
0189 002A 00 52 FDB DDUMMY Drive type 2 (External Flash disk). |
0190 002C 00 52 FDB DDUMMY |
0191 002E 00 52 FDB DDUMMY |
0192 0030 00 52 FDB DDUMMY |
0193 0032 00 52 FDB DDUMMY |
0194 0034 00 52 FDB DDUMMY |
0195 0036 00 52 FDB DDUMMY |
0196 0038 00 52 FDB DDUMMY |
0197 003A 00 52 FDB DDUMMY |
0198 003C 00 52 FDB DDUMMY |
0199 * |
0200 003E 01 78 FDB NREAD Drive type 3 (NetPC drive via serial port). |
0201 0040 01 E7 FDB NWRITE |
0202 0042 02 47 FDB NVERIFY |
0203 0044 02 4C FDB NCHECK |
0204 0046 02 4C FDB NCHECK |
0205 0048 02 4C FDB NCHECK |
0206 004A 02 4C FDB NCHECK |
0207 004C 00 52 FDB DDUMMY |
0208 004E 00 52 FDB DDUMMY |
0209 0050 00 52 FDB DDUMMY |
0210 * |
0211 * |
0212 * Dummy routine (no errors). |
0213 0052 5F DDUMMY CLRB |
0214 0053 5D TSTB Set (z)=1 |
0215 0054 1C FE ANDCC #$FF-CFLAG Set (c)=0 |
0216 0056 39 RTS |
0217 * * |
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 RST1 |
0246 0067 39 RTS |
0247 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,Y |
0254 006E E6 03 LDB 3,X Get driver type. |
0255 0070 F7 DE 1E STB DRVNUM |
0256 0073 8E DE 2A LDX #DTYPTAB |
0257 0076 A6 85 LDA B,X |
0258 0078 81 FF CMPA #$FF Is the drive nonexistant? |
0259 007A 26 08 BNE DRIVE1 |
0260 007C 35 30 PULS X,Y |
0261 007E C6 0F LDB #$0F |
0262 0080 5D TSTB |
0263 0081 1A 01 ORCC #$01 |
0264 0083 39 RTS |
0265 * |
0266 0084 C6 14 DRIVE1 LDB #20 Get correct table start address. |
0267 0086 3D MUL |
0268 0087 8E 00 02 LDX #TABSRT |
0269 008A 30 8B LEAX D,X |
0270 008C 10 8E DE 32 LDY #REAVEC Copy table into ram. |
0271 0090 C6 14 LDB #20 |
0272 0092 A6 80 DRIVE2 LDA 0,X+ |
0273 0094 A7 A0 STA 0,Y+ |
0274 0096 5A DECB |
0275 0097 26 F9 BNE DRIVE2 |
0276 0099 35 30 PULS X,Y |
0277 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 CLRA |
0293 00A8 B7 DE 1E DINIT1 STA DRVNUM Init each valid drive in turn. |
0294 00AB 8E DE 1B LDX #DRVNUM-3 |
0295 00AE 8D BC BSR DRVSEL |
0296 00B0 25 04 BCS DINIT2 |
0297 00B2 AD 9F DE 40 JSR [INIVEC] |
0298 00B6 B6 DE 1E DINIT2 LDA DRVNUM |
0299 00B9 4C INCA |
0300 00BA 81 04 CMPA #4 |
0301 00BC 26 EA BNE DINIT1 |
0302 00BE 39 RTS |
0303 * |
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 SPACE |
0325 * |
0326 00C7 1F A8 MAPIN TFR CC,A ; Save state of interrupt masks |
0327 00C9 B7 DE 22 STA CCSAVE |
0328 00CC 1A 50 ORCC #FFLAG+IFLAG ; Mask interrupts while IO mapped out |
0329 00CE CE DE 2A LDU #DTYPTAB ; Point to Drive Type table |
0330 00D1 F6 DE 1E LDB DRVNUM ; Get working drive number |
0331 00D4 E6 C5 LDB B,U |
0332 00D6 CE DE 2E LDU #DOFFTAB |
0333 00D9 B6 DE 1F LDA TRACK |
0334 00DC AB C5 ADDA B,U ; Add Base offset into RAM |
0335 00DE 84 F0 ANDA #$F0 ; Mask MSN |
0336 00E0 A7 E2 STA ,-S ; Save A on stack |
0337 * |
0338 00E2 B6 DE 20 LDA SECTOR |
0339 00E5 80 01 SUBA #1 ; Sectors 1 to 14 => 0 to 13 |
0340 00E7 88 0F EORA #$0F ; Complement LSNybble |
0341 00E9 84 0F ANDA #$0F |
0342 * |
0343 00EB AB E0 ADDA ,S+ ; Add sector to LSN of Track and pop |
0344 00ED 97 00 STA DATREG+MAPPAG |
0345 * |
0346 00EF B6 DE 1F LDA TRACK ; LSN of Track indexes into 4K page |
0347 00F2 84 0F ANDA #$0F |
0348 00F4 8B 00 ADDA #MAPPAG*16 |
0349 00F6 5F CLRB |
0350 00F7 1F 03 TFR D,U |
0351 00F9 39 RTS |
0352 * |
0353 * MAP RAM DISK OUT OF MEMORY |
0354 * |
0355 00FA 86 00 MAPOUT LDA #MAPPAG ; Point to the Flex page |
0356 00FC 88 0F EORA #$0F ; Complement LSNybble |
0357 00FE 97 00 STA DATREG+MAPPAG ; map in Flex page |
0358 0100 B6 DE 22 LDA CCSAVE ; restore interrupt masks |
0359 0103 1F 8A TFR A,CC |
0360 0105 39 RTS |
0361 * |
0362 * Seek track and sector |
0363 * A holds track number (0-32) |
0364 * B holds sector number (1-14) |
0365 * |
0366 0106 B7 DE 1F ESEEK STA TRACK |
0367 0109 F7 DE 20 STB SECTOR |
0368 010C 1C FE ANDCC #$FE ; CLEAR CARRY |
0369 010E 1A 04 ORCC #$04 ; SET Z |
0370 0110 39 RTS |
0371 * |
0372 * MARK DISK READ ONLY |
0373 * |
0374 0111 C6 40 EDUMMY LDB #$40 |
0375 0113 5D TSTB |
0376 0114 1A 01 ORCC #$01 |
0377 0116 39 RTS |
0378 * |
0379 0117 34 70 EREAD PSHS X,Y,U push sequentialy to preserve order on stack |
0380 0119 17 FF EA LBSR ESEEK |
0381 011C 17 FF A8 LBSR MAPIN build external ram address |
0382 * |
0383 011F 10 8E DE 46 LDY #BUFFER |
0384 0123 5F CLRB |
0385 0124 A6 C0 ERLOOP1 LDA 0,U+ move 256 bytes to buffer from external RAM |
0386 0126 A7 A0 STA 0,Y+ |
0387 0128 5A DECB |
0388 0129 26 F9 BNE ERLOOP1 |
0389 * |
0390 012B 17 FF CC LBSR MAPOUT |
0391 * |
0392 012E 10 8E DE 46 LDY #BUFFER |
0393 0132 5F CLRB |
0394 0133 A6 A0 ERLOOP2 LDA 0,Y+ move 256 bytes from buffer to Flex RAM |
0395 0135 A7 80 STA 0,X+ |
0396 0137 5A DECB |
0397 0138 26 F9 BNE ERLOOP2 |
0398 * |
0399 013A 5F CLRB |
0400 013B 35 F0 PULS X,Y,U,PC restore all registers |
0401 * |
0402 * check for marker bytes $AA55 in first bytes of first track/sector |
0403 * |
0404 *ECHECK CLRA |
0405 * LDB #1 |
0406 * LDX #BUFFER |
0407 * BSR EREAD |
0408 * LDD BUFFER |
0409 * CMPD #$AA55 |
0410 * BNE EERR |
0411 * LBRA DDUMMY |
0412 *EERR LDB #$80 not ready bit set |
0413 * TSTB |
0414 * ORCC #$01 |
0415 * RTS |
0416 013D 5F ECHECK CLRB |
0417 013E 39 RTS |
0418 * |
0419 * Write Sector |
0420 * |
0421 013F 34 70 EWRITE PSHS X,Y,U |
0422 0141 17 FF C2 LBSR ESEEK |
0423 0144 CE DE 2A LDU #DTYPTAB ; Point to Drive Type table |
0424 0147 F6 DE 1E LDB DRVNUM ; Get working drive number |
0425 014A E6 C5 LDB B,U ; Fetch Drive type |
0426 014C C1 01 CMPB #DTYPRAM ; Is it a RAM Disk ? |
0427 014E 27 07 BEQ EWOK ; Yep, can write to it |
0428 0150 C1 00 CMPB #DTYPROM ; Allow writes to ROM Disk too |
0429 0152 27 03 BEQ EWOK |
0430 0154 16 FF BA LBRA EDUMMY ; Nope report read only |
0431 * |
0432 0157 10 8E DE 46 EWOK LDY #BUFFER |
0433 015B 5F CLRB |
0434 015C A6 80 EWLOOP1 LDA 0,X+ move 256 bytes to buffer from Flex RAM |
0435 015E A7 A0 STA 0,Y+ |
0436 0160 5A DECB |
0437 0161 26 F9 BNE EWLOOP1 |
0438 * |
0439 0163 17 FF 61 LBSR MAPIN |
0440 * |
0441 0166 10 8E DE 46 LDY #BUFFER |
0442 016A 5F CLRB |
0443 016B A6 A0 EWLOOP2 LDA 0,Y+ move 256 bytes from buffer to external RAM |
0444 016D A7 C0 STA 0,U+ |
0445 016F 5A DECB |
0446 0170 26 F9 BNE EWLOOP2 |
0447 * |
0448 0172 17 FF 85 LBSR MAPOUT |
0449 * |
0450 0175 5F CLRB |
0451 0176 35 F0 PULS X,Y,U,PC |
0452 * |
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 drive |
0464 * |
0465 0178 34 04 NREAD PSHS B |
0466 017A 34 02 PSHS A |
0467 017C 7F DE 21 CLR CHKSUM clear checksum |
0468 017F 7F DE 22 CLR CHKSUM+1 |
0469 * |
0470 0182 86 73 LDA #'s Send read sector command |
0471 0184 BD 02 81 JSR SCHAR |
0472 0187 24 4C BCC NRD_DNR if timeout, then flag drive not ready |
0473 * |
0474 0189 B6 DE 1E LDA DRVNUM send drive |
0475 018C BD 02 81 JSR SCHAR |
0476 018F 24 44 BCC NRD_DNR |
0477 * |
0478 0191 35 02 PULS A send track |
0479 0193 BD 02 81 JSR SCHAR |
0480 0196 24 3D BCC NRD_DNR |
0481 * |
0482 0198 35 02 PULS A send sector |
0483 019A BD 02 81 JSR SCHAR |
0484 019D 24 36 BCC NRD_DNR |
0485 * |
0486 * transfer 256 bytes |
0487 019F 5F CLRB |
0488 01A0 BD 02 65 NREAD1 JSR RCHAR read byte |
0489 01A3 24 30 BCC NRD_DNR if timeout, then flag drive not ready |
0490 01A5 A7 80 STA 0,X+ |
0491 01A7 BB DE 22 ADDA CHKSUM+1 update checksum |
0492 01AA B7 DE 22 STA CHKSUM+1 |
0493 01AD 24 03 BCC NREAD2 |
0494 01AF 7C DE 21 INC CHKSUM |
0495 01B2 5A NREAD2 DECB |
0496 01B3 26 EB BNE NREAD1 |
0497 * |
0498 * compare checksums |
0499 01B5 BD 02 65 JSR RCHAR get checksum msb |
0500 01B8 24 1B BCC NRD_DNR |
0501 01BA 34 02 PSHS A |
0502 01BC BD 02 65 JSR RCHAR get checksum lsb |
0503 01BF 24 14 BCC NRD_DNR |
0504 01C1 1F 89 TFR A,B |
0505 01C3 35 02 PULS A |
0506 01C5 10 B3 DE 21 CMPD CHKSUM compare checksums |
0507 01C9 26 0E BNE NRD_ERR if checksum error, then flag crc read error |
0508 * |
0509 01CB 86 06 LDA #ACK no checksum error, send ACK char |
0510 01CD BD 02 81 JSR SCHAR |
0511 01D0 24 03 BCC NRD_DNR |
0512 01D2 5F CLRB all OK, flag no error |
0513 01D3 20 0D BRA NRD_END |
0514 * |
0515 01D5 C6 10 NRD_DNR LDB #16 flag drive not ready |
0516 01D7 20 09 BRA NRD_END |
0517 * |
0518 01D9 86 15 NRD_ERR LDA #NAK send NAK |
0519 01DB BD 02 81 JSR SCHAR |
0520 01DE 24 F5 BCC NRD_DNR |
0521 01E0 C6 09 LDB #09 flag crc read error |
0522 * |
0523 01E2 F7 DE 21 NRD_END STB CHKSUM used by VERIFY |
0524 01E5 5D TSTB |
0525 01E6 39 RTS |
0526 * |
0527 * |
0528 * write sector to remote drive |
0529 * |
0530 01E7 34 04 NWRITE PSHS B |
0531 01E9 34 02 PSHS A |
0532 01EB 7F DE 21 CLR CHKSUM clear checksum |
0533 01EE 7F DE 22 CLR CHKSUM+1 |
0534 * |
0535 01F1 86 72 LDA #'r Send write sector command |
0536 01F3 BD 02 81 JSR SCHAR |
0537 01F6 24 DD BCC NRD_DNR if timeout, then flag drive not ready |
0538 * |
0539 01F8 B6 DE 1E LDA DRVNUM send drive |
0540 01FB BD 02 81 JSR SCHAR |
0541 01FE 24 D5 BCC NRD_DNR |
0542 * |
0543 0200 35 02 PULS A send track |
0544 0202 BD 02 81 JSR SCHAR |
0545 0205 24 CE BCC NRD_DNR |
0546 * |
0547 0207 35 02 PULS A send sector |
0548 0209 BD 02 81 JSR SCHAR |
0549 020C 24 C7 BCC NRD_DNR |
0550 * |
0551 * transfer 256 bytes |
0552 020E 5F CLRB |
0553 020F A6 80 NWRITE1 LDA 0,X+ |
0554 0211 BD 02 81 JSR SCHAR write byte |
0555 0214 24 BF BCC NRD_DNR if timeout, then flag drive not ready |
0556 0216 BB DE 22 ADDA CHKSUM+1 update checksum |
0557 0219 B7 DE 22 STA CHKSUM+1 |
0558 021C 24 03 BCC NWRITE2 |
0559 021E 7C DE 21 INC CHKSUM |
0560 0221 5A NWRITE2 DECB |
0561 0222 26 EB BNE NWRITE1 |
0562 * |
0563 * compare checksums |
0564 0224 B6 DE 21 LDA CHKSUM |
0565 0227 BD 02 81 JSR SCHAR send checksum msb |
0566 022A 24 A9 BCC NRD_DNR |
0567 022C B6 DE 22 LDA CHKSUM+1 |
0568 022F BD 02 81 JSR SCHAR send checksum lsb |
0569 0232 24 A1 BCC NRD_DNR |
0570 * |
0571 0234 BD 02 65 JSR RCHAR get checksum response |
0572 0237 24 9C BCC NRD_DNR |
0573 0239 81 06 CMPA #ACK |
0574 023B 26 03 BNE NWR_ERR if checksum error, then flag write error |
0575 * |
0576 023D 5F CLRB all OK, flag no error |
0577 023E 20 02 BRA NWR_END |
0578 * |
0579 0240 C6 0A NWR_ERR LDB #10 flag write error |
0580 * |
0581 0242 F7 DE 21 NWR_END STB CHKSUM used by VERIFY |
0582 0245 5D TSTB |
0583 0246 39 RTS |
0584 * |
0585 * |
0586 * verify last sector written to remote drive |
0587 * |
0588 0247 F6 DE 21 NVERIFY LDB CHKSUM test last checksum |
0589 024A 5D TSTB |
0590 024B 39 RTS |
0591 * |
0592 * |
0593 * quck check and check drive ready |
0594 * |
0595 024C 86 51 NCHECK LDA #'Q quick check command |
0596 024E BD 02 81 JSR SCHAR |
0597 0251 24 0C BCC NCK_ERR if timeout, then flag drive not ready |
0598 |
0599 0253 BD 02 65 JSR RCHAR get response from host |
0600 0256 24 07 BCC NCK_ERR |
0601 0258 81 06 CMPA #ACK |
0602 025A 26 03 BNE NCK_ERR if NAK, then flag drive not ready |
0603 |
0604 025C 5F CLRB all OK, flag drive ready |
0605 025D 20 04 BRA NCK_END |
0606 * |
0607 025F C6 10 NCK_ERR LDB #16 report drive not ready |
0608 0261 1A 01 ORCC #$01 check needs carry set as well |
0609 * |
0610 0263 5D NCK_END TSTB |
0611 0264 39 RTS |
0612 * |
0613 * |
0614 * recieve char from remote drive. |
0615 * timeout if no response for approx 1s. |
0616 * Entry: no parameters |
0617 * Exit: (A) = recieved char, (C)=1 if valid char, (C)=0 if timeout. |
0618 * |
0619 0265 34 30 RCHAR PSHS X,Y |
0620 * |
0621 0267 8E 03 E8 LDX #1000 1000x inner loop |
0622 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 char |
0624 0270 47 ASRA |
0625 0271 25 0A BCS RCHAR3 get character |
0626 0273 31 3F LEAY -1,Y else, continue to count delay |
0627 0275 26 F7 BNE RCHAR2 |
0628 0277 30 1F LEAX -1,X |
0629 0279 26 EF BNE RCHAR1 |
0630 027B 35 B0 PULS X,Y,PC return with error if timed out |
0631 * |
0632 027D 96 01 RCHAR3 LDA ACIAD1 return data (carry bit still set) |
0633 027F 35 B0 PULS X,Y,PC |
0634 * |
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 transmit |
0639 * Exit: (A) = recieved char, (C)=1 if valid char, (C)=0 if timeout. |
0640 * |
0641 0281 34 30 SCHAR PSHS X,Y |
0642 0283 34 02 PSHS A |
0643 * |
0644 0285 8E 03 E8 LDX #1000 1000x inner loop |
0645 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 FIFO |
0647 028E 47 ASRA |
0648 028F 47 ASRA |
0649 0290 25 0C BCS SCHAR3 send character |
0650 0292 31 3F LEAY -1,Y else, continue to count delay |
0651 0294 26 F6 BNE SCHAR2 |
0652 0296 30 1F LEAX -1,X |
0653 0298 26 EE BNE SCHAR1 |
0654 029A 35 02 PULS A |
0655 029C 35 B0 PULS X,Y,PC return with error if timed out |
0656 * |
0657 029E 35 02 SCHAR3 PULS A |
0658 02A0 97 01 STA ACIAD1 send data (carry bit still set) |
0659 02A2 35 B0 PULS X,Y,PC |
0660 * |
0661 ** 'UF' Format RAMdisc to FLEX standard. |
0662 * |
0663 02A4 0A 0D DISFOS FCB $0A,$0D |
0664 02A6 46 6F 72 6D 61 74 FCC 'Formating RAMdisk... ' |
69 6E 67 20 52 41 |
4D 64 69 73 6B 2E |
2E 2E 20 |
0665 02BB 04 FCB 4 |
0666 02BC 0A 0D 04 MESS6 FCB $0A,$0D,4 |
0667 02BF 52 61 6D 64 69 73 FCC 'Ramdisk not allocated! ' |
6B 20 6E 6F 74 20 |
61 6C 6C 6F 63 61 |
74 65 64 21 20 |
0668 02D6 04 FCB 4 |
0669 * |
0670 02D7 8E 02 A4 UFSUB LDX #DISFOS |
0671 02DA BD 04 50 JSR PDATA1 |
0672 02DD 8E DE 2A LDX #DTYPTAB search for allocated ramdisk |
0673 02E0 5F CLRB |
0674 02E1 A6 85 FMT9 LDA B,X |
0675 02E3 81 01 CMPA #DTYPRAM driver type 1 is ramdisk |
0676 02E5 27 0C BEQ FFOUND |
0677 02E7 5C INCB |
0678 02E8 C1 04 CMPB #4 end of table? then not allocated. |
0679 02EA 26 F5 BNE FMT9 |
0680 02EC 8E 02 BC LDX #MESS6 |
0681 02EF BD 04 50 JSR PDATA1 |
0682 02F2 39 RTS |
0683 * |
0684 02F3 F7 DE 1E FFOUND STB DRVNUM |
0685 02F6 8E DE 1B LDX #DRVNUM-3 |
0686 02F9 9D 6C JSR DRVSEL |
0687 * |
0688 * set up free chain |
0689 * |
0690 02FB 8E DE 46 LDX #BUFFER clear out buffer |
0691 02FE 4F CLRA |
0692 02FF 5F CLRB |
0693 0300 A7 80 DFL1 STA 0,X+ |
0694 0302 5A DECB |
0695 0303 26 FB BNE DFL1 |
0696 * |
0697 0305 7F DE 1F CLR TRACK |
0698 0308 86 01 LDA #1 |
0699 030A B7 DE 20 STA SECTOR |
0700 030D 8E DE 46 DFL2 LDX #BUFFER |
0701 0310 B6 DE 1F LDA TRACK |
0702 0313 A7 84 STA 0,X |
0703 0315 B6 DE 20 LDA SECTOR |
0704 0318 4C INCA |
0705 0319 81 0F CMPA #RMAXSEC+1 last sector on track? |
0706 031B 26 04 BNE DFL3 |
0707 031D 6C 84 INC 0,X |
0708 031F 86 01 LDA #1 |
0709 0321 A7 01 DFL3 STA 1,X |
0710 0323 B6 DE 1F LDA TRACK |
0711 0326 F6 DE 20 LDB SECTOR |
0712 0329 9D 5B JSR WRITSC |
0713 032B 7C DE 20 INC SECTOR |
0714 032E B6 DE 20 LDA SECTOR |
0715 0331 81 0F CMPA #RMAXSEC+1 |
0716 0333 26 D8 BNE DFL2 |
0717 0335 86 01 LDA #1 |
0718 0337 B7 DE 20 STA SECTOR |
0719 033A 7C DE 1F INC TRACK |
0720 033D B6 DE 1F LDA TRACK |
0721 0340 81 40 CMPA #RMAXTRK |
0722 0342 26 C9 BNE DFL2 |
0723 * break free chain at last track/sector |
0724 0344 8E DE 46 LDX #BUFFER |
0725 0347 86 3F LDA #RMAXTRK-1 |
0726 0349 C6 0E LDB #RMAXSEC |
0727 034B 9D 57 JSR READSC |
0728 034D 8E DE 46 LDX #BUFFER |
0729 0350 6F 84 CLR 0,X |
0730 0352 6F 01 CLR 1,X |
0731 0354 86 3F LDA #RMAXTRK-1 |
0732 0356 C6 0E LDB #RMAXSEC |
0733 0358 9D 5B JSR WRITSC |
0734 * set up sector structure, SIR, directory etc |
0735 035A 8E DE 46 LDX #BUFFER |
0736 035D 4F CLRA |
0737 035E C6 0E LDB #RMAXSEC |
0738 0360 9D 57 JSR READSC |
0739 0362 8E DE 46 LDX #BUFFER |
0740 0365 6F 84 CLR 0,X break end of directory chain |
0741 0367 6F 01 CLR 1,X |
0742 0369 4F CLRA |
0743 036A C6 0E LDB #RMAXSEC |
0744 036C 9D 5B JSR WRITSC |
0745 * |
0746 036E 8E DE 46 LDX #BUFFER |
0747 0371 4F CLRA |
0748 0372 C6 03 LDB #3 set up SIR |
0749 0374 9D 57 JSR READSC |
0750 0376 8E DE 46 LDX #BUFFER |
0751 0379 6F 84 CLR 0,X break forward link |
0752 037B 6F 01 CLR 1,X |
0753 037D CC 52 41 LDD #$5241 set volume name (RAMDISK ) |
0754 0380 ED 88 10 STD 16,X |
0755 0383 CC 4D 44 LDD #$4D44 |
0756 0386 ED 88 12 STD 18,X |
0757 0389 CC 49 53 LDD #$4953 |
0758 038C ED 88 14 STD 20,X |
0759 038F CC 4B 20 LDD #$4B20 |
0760 0392 ED 88 16 STD 22,X |
0761 0395 CC 00 01 LDD #1 volume number |
0762 0398 ED 88 1B STD 27,X |
0763 039B CC 01 01 LDD #$0101 first trk/sec 01-01 |
0764 039E ED 88 1D STD 29,X |
0765 03A1 86 3F LDA #RMAXTRK-1 |
0766 03A3 C6 0E LDB #RMAXSEC |
0767 03A5 ED 88 1F STD 31,X |
0768 03A8 ED 88 26 STD 38,X |
0769 03AB CC 03 72 LDD #RTOTSEC total DATA sectors (2912-14) |
0770 03AE ED 88 21 STD 33,X |
0771 * |
0772 03B1 86 01 LDA #01 month set default creation date (SYS09's birthday!) |
0773 03B3 A7 88 23 STA 35,X |
0774 03B6 86 07 LDA #07 day |
0775 03B8 A7 88 24 STA 36,X |
0776 03BB 86 07 LDA #07 year |
0777 03BD A7 88 25 STA 37,X |
0778 * |
0779 03C0 4F RF3 CLRA |
0780 03C1 C6 03 LDB #3 |
0781 03C3 9D 5B JSR WRITSC |
0782 * |
0783 03C5 8E DE 46 LDX #BUFFER |
0784 03C8 4F CLRA |
0785 03C9 C6 01 LDB #1 |
0786 03CB 9D 57 JSR READSC |
0787 03CD 8E DE 46 LDX #BUFFER |
0788 03D0 86 AA LDA #$AA set the init flag |
0789 03D2 A7 84 STA 0,X |
0790 03D4 86 55 LDA #$55 |
0791 03D6 A7 01 STA 1,X |
0792 03D8 4F CLRA |
0793 03D9 C6 01 LDB #1 |
0794 03DB 0E 5B JMP WRITSC |
0795 * |
0796 ******************************** |
0797 * System specific Boot * |
0798 * command goes here. * |
0799 ******************************** |
0800 * |
0801 * Boot FLEX from the FPGA's internal pre-loaded scratch RAM |
0802 * |
0803 03DD 08 08 UBMESS FCB $08, $08 |
0804 03DF 42 6F 6F 74 69 6E FCC 'Booting internal FLEX....' |
67 20 69 6E 74 65 |
72 6E 61 6C 20 46 |
4C 45 58 2E 2E 2E |
2E |
0805 03F8 0D 0A 04 FCB $0D,$0A,$04 |
0806 * |
0807 03FB 8E 03 DD UBSUB LDX #UBMESS |
0808 03FE BD 04 50 JSR PDATA1 |
0809 * |
0810 0401 8E D3 E5 LDX #$D3E5 |
0811 0404 10 8E 04 24 LDY #CONTAB Overlay console driver table |
0812 0408 EC A1 UB1 LDD 0,Y++ |
0813 040A ED 81 STD 0,X++ |
0814 040C 8C D3 FD CMPX #$D3FD |
0815 040F 26 F7 BNE UB1 |
0816 * |
0817 0411 8E DE 00 LDX #$DE00 Overlay disk driver table |
0818 0414 10 8E 04 3C LDY #DISTAB |
0819 0418 EC A1 UB2 LDD 0,Y++ |
0820 041A ED 81 STD 0,X++ |
0821 041C 8C DE 1E CMPX #$DE1E |
0822 041F 26 F7 BNE UB2 |
0823 * |
0824 0421 7E CD 00 UBEND JMP $CD00 |
0825 * |
0826 * FLEX console jump table. |
0827 0424 04 5C CONTAB FDB INPNE INPUT NO ECHO |
0828 0426 04 68 FDB DUMMY INTERRUPT HANDLER |
f9-monex.txt, line no. 829: Symbol undefined Pass 2 |
0829 0428 00 02 FDB MONRAM+$02 SWI VECTOR |
f9-monex.txt, line no. 830: Symbol undefined Pass 2 |
0830 042A 00 08 FDB MONRAM+$08 IRQ VECTOR |
0831 042C 04 68 FDB DUMMY TIMER OFF |
0832 042E 04 68 FDB DUMMY TIMER ON |
0833 0430 04 68 FDB DUMMY TIMER INITIALIZATION |
0834 0432 04 64 FDB CONTRL MONITOR |
0835 0434 04 68 FDB DUMMY TERMINAL INITIALIZATION |
0836 0436 04 60 FDB STATUS INPUT CHECK |
0837 0438 04 54 FDB OUTP TERMINAL OUTPUT |
0838 043A 04 58 FDB INPE TERMINAL INPUT WITH ECHO |
0839 * |
0840 * FLEX disk jump table. |
0841 043C 0E 57 DISTAB JMP READSC |
0842 043E 0E 5B JMP WRITSC |
0843 0440 0E 5F JMP BUSY |
0844 0442 0E 63 JMP RESTR1 |
0845 0444 0E 6C JMP DRVSEL |
0846 0446 0E 9F JMP CHKRDY |
0847 0448 0E A3 JMP CHKQIK |
0848 044A 0E A7 JMP DINIT |
0849 044C 0E BF JMP DWARM |
0850 044E 0E C3 JMP SEEKTS |
0851 * |
0852 * Monitor jumps |
0853 * |
f9-monex.txt, line no. 854: Symbol undefined Pass 2 |
0854 0450 6E 9F 00 00 PDATA1 JMP [PDATAV] |
f9-monex.txt, line no. 855: Symbol undefined Pass 2 |
0855 0454 6E 9F 00 00 OUTP JMP [OUTCHV] |
f9-monex.txt, line no. 856: Symbol undefined Pass 2 |
0856 0458 6E 9F 00 00 INPE JMP [INCHEV] |
f9-monex.txt, line no. 857: Symbol undefined Pass 2 |
0857 045C 6E 9F 00 00 INPNE JMP [INCHV] |
f9-monex.txt, line no. 858: Symbol undefined Pass 2 |
0858 0460 6E 9F 00 00 STATUS JMP [INCHKV] |
f9-monex.txt, line no. 859: Symbol undefined Pass 2 |
0859 0464 6E 9F 00 00 CONTRL JMP [MONITV] |
0860 0468 39 DUMMY RTS |
0861 * |
0862 ** 'UL' LOAD ROM DISK VIA SERIAL PORT |
0863 * |
0864 0469 53 65 72 69 61 6C ULMES FCC 'Serial ROM Disk upload ...' |
20 52 4F 4D 20 44 |
69 73 6B 20 75 70 |
6C 6F 61 64 20 2E |
2E 2E |
0865 0483 0D 0A 04 FCB $0D,$0A,$04 |
0866 0486 52 4F 4D 20 44 69 ULMES1 FCC 'ROM Disk Loaded' |
73 6B 20 4C 6F 61 |
64 65 64 |
0867 0495 0D 0A 04 FCB $0D,$0A,$04 |
0868 * |
0869 0498 8E 04 69 ULSUB LDX #ULMES |
0870 049B BD 04 50 JSR PDATA1 |
0871 * |
0872 049E 86 00 LDA #$00 |
0873 04A0 B7 DE 1E STA DRVNUM |
0874 04A3 4F CLRA TRACK 0 |
0875 04A4 C6 01 LDB #$01 SECTOR 1 |
0876 04A6 B7 DE 1F ULLOOP0 STA TRACK |
0877 04A9 F7 DE 20 STB SECTOR` |
0878 04AC 17 FC 18 LBSR MAPIN |
0879 * |
0880 04AF 5F CLRB xfer 256 bytes at a time. |
0881 04B0 BD 04 D3 ULLOOP1 JSR LRBYTE transfer should be hex bytes |
0882 04B3 A7 C0 STA ,U+ |
0883 04B5 5A DECB |
0884 04B6 26 F8 BNE ULLOOP1 |
0885 * |
0886 04B8 17 FC 3F LBSR MAPOUT |
0887 * |
0888 04BB B6 DE 1F LDA TRACK |
0889 04BE F6 DE 20 LDB SECTOR |
0890 04C1 5C INCB |
0891 04C2 C1 0F CMPB #EMAXSEC+1 |
0892 04C4 26 E0 BNE ULLOOP0 |
0893 04C6 C6 01 LDB #1 |
0894 04C8 4C INCA |
0895 04C9 81 30 CMPA #EMAXTRK |
0896 04CB 26 D9 BNE ULLOOP0 |
0897 * |
0898 04CD 8E 04 86 ULEXIT LDX #ULMES1 |
0899 04D0 7E 04 50 JMP PDATA1 |
0900 * |
0901 * Read a byte from the serial port |
0902 * |
0903 04D3 34 04 LRBYTE PSHS B |
0904 04D5 8D 0E BSR LRHEX Get hex digit. |
0905 04D7 48 ASLA |
0906 04D8 48 ASLA Shift to msb. |
0907 04D9 48 ASLA |
0908 04DA 48 ASLA |
0909 04DB 1F 89 TFR A,B Save in B. |
0910 04DD 8D 06 BSR LRHEX Get next digit. |
0911 04DF 34 04 PSHS B |
0912 04E1 AB E0 ADDA 0,S+ Add together bytes. |
0913 04E3 35 84 PULS B,PC |
0914 * |
0915 04E5 BD 05 0B LRHEX JSR INTER |
0916 04E8 29 FB BVS LRHEX |
0917 04EA 80 30 SUBA #$30 Remove ascii bias. |
0918 04EC 2B F7 BMI LRHEX |
0919 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 LRHEX |
0923 04F6 81 16 CMPA #$16 |
0924 04F8 2E EB BGT LRHEX |
0925 04FA 80 07 SUBA #$07 |
0926 04FC 39 LRHEX1 RTS |
0927 * |
0928 * ACIA INPUT TEST |
0929 * |
0930 04FD 96 00 INTEST LDA ACIAC1 |
0931 04FF 85 01 BITA #$01 |
0932 0501 39 RTS |
0933 * |
0934 * RESET ACIA |
0935 * |
0936 0502 86 03 ACIRST LDA #$03 master reset |
0937 0504 97 00 STA ACIAC1 |
0938 0506 86 11 LDA #$11 |
0939 0508 97 00 STA ACIAC1 |
0940 050A 39 RTS |
0941 * |
0942 * ACIA INPUT |
0943 * |
0944 050B 86 10 INTER LDA #16 |
0945 050D B7 DE 27 STA DELCNT+0 |
0946 0510 7F DE 28 CLR DELCNT+1 |
0947 0513 7F DE 29 CLR DELCNT+2 |
0948 0516 96 00 INTER0 LDA ACIAC1 |
0949 0518 85 01 BITA #$01 |
0950 051A 26 08 BNE INTER1 |
0951 051C 85 78 BITA #$78 |
0952 051E 27 09 BEQ INTER2 |
0953 0520 8D E0 BSR ACIRST |
0954 0522 20 E7 BRA INTER |
0955 * |
0956 0524 96 01 INTER1 LDA ACIAD1 |
0957 0526 1C 02 ANDCC #VFLAG |
0958 0528 39 RTS |
0959 * |
0960 0529 7A DE 29 INTER2 DEC DELCNT+2 |
0961 052C 26 E8 BNE INTER0 |
0962 052E 7A DE 28 DEC DELCNT+1 |
0963 0531 26 E3 BNE INTER0 |
0964 0533 7A DE 27 DEC DELCNT+0 |
0965 0536 26 DE BNE INTER0 |
0966 0538 4F CLRA |
0967 0539 1A 02 ORCC #VFLAG |
0968 053B 39 RTS |
0969 * |
0970 * ACIA OUTPUT |
0971 * |
0972 053C 34 02 OUTTER PSHS A |
0973 * |
0974 053E 96 00 OUTTE1 LDA ACIAC1 |
0975 0540 85 02 BITA #$02 |
0976 0542 26 08 BNE OUTTE2 |
0977 0544 85 78 BITA #$78 |
0978 0546 27 F6 BEQ OUTTE1 |
0979 0548 8D B8 BSR ACIRST |
0980 054A 20 F2 BRA OUTTE1 |
0981 * |
0982 054C 35 02 OUTTE2 PULS A |
0983 054E 97 01 STA ACIAD1 |
0984 0550 39 RTS |
0985 * |
0986 ** 'UX' Xmodem ROM Disk upload |
0987 * |
0988 0551 0D 0A UXMES FCB $0D,$0A |
0989 0553 58 6D 6F 64 65 6D FCC 'Xmodem ROM Disk Upload' |
20 52 4F 4D 20 44 |
69 73 6B 20 55 70 |
6C 6F 61 64 |
0990 0569 04 FCB 4 |
0991 056A 0D 0A UXMES1 FCB $0D,$0A |
0992 056C 55 70 6C 6F 61 64 FCC 'Upload Complete' |
20 43 6F 6D 70 6C |
65 74 65 |
0993 057B 04 FCB 4 |
0994 057C 0D 0A UXMES2 FCB $0D,$0A |
0995 057E 55 70 6C 6F 61 64 FCC 'Upload Error' |
20 45 72 72 6F 72 |
0996 058A 04 FCB 4 |
0997 * |
0998 058B 8E 05 51 UXSUB LDX #UXMES |
0999 058E 17 FE BF LBSR PDATA1 |
1000 * |
1001 0591 86 01 LDA #1 |
1002 0593 B7 DE 23 STA BLKNUM |
1003 0596 8E 05 F9 LDX #XSTSTR |
1004 0599 BF DE 25 STX XSTATE |
1005 * |
1006 059C 86 00 LDA #$00 |
1007 059E B7 DE 1E STA DRVNUM |
1008 05A1 4F CLRA TRACK 0 |
1009 05A2 C6 01 LDB #$01 SECTOR 1 |
1010 05A4 B7 DE 1F UXLOOP0 STA TRACK |
1011 05A7 F7 DE 20 STB SECTOR |
1012 05AA 17 FB 1A LBSR MAPIN |
1013 * |
1014 05AD 5F CLRB xfer 256 bytes at a time. |
1015 05AE 17 00 2B UXLOOP1 LBSR XBYTE transfer should be hex bytes |
1016 05B1 25 20 BCS UXERR |
1017 05B3 A7 C0 STA ,U+ |
1018 05B5 5A DECB |
1019 05B6 26 F6 BNE UXLOOP1 |
1020 * |
1021 05B8 17 FB 3F LBSR MAPOUT |
1022 * |
1023 05BB B6 DE 1F LDA TRACK |
1024 05BE F6 DE 20 LDB SECTOR |
1025 05C1 5C INCB |
1026 05C2 C1 0F CMPB #EMAXSEC+1 |
1027 05C4 26 DE BNE UXLOOP0 |
1028 05C6 C6 01 LDB #1 |
1029 05C8 4C INCA |
1030 05C9 81 30 CMPA #EMAXTRK |
1031 05CB 26 D7 BNE UXLOOP0 |
1032 * |
1033 05CD 8E 05 6A UXEXIT LDX #UXMES1 |
1034 05D0 7E 04 50 JMP PDATA1 |
1035 * |
1036 05D3 17 FB 24 UXERR LBSR MAPOUT |
1037 05D6 8E 05 7C LDX #UXMES2 |
1038 05D9 16 FE 74 LBRA PDATA1 |
1039 * |
1040 * Get a Byte using XModem protocol |
1041 * Carry clear => no errors |
1042 * Carry set => errors |
1043 * |
1044 05DC 34 10 XBYTE PSHS X |
1045 05DE BE DE 25 LDX XSTATE |
1046 * |
1047 05E1 17 FF 27 XBYTE0 LBSR INTER |
1048 05E4 28 0A BVC XBYTE1 |
1049 05E6 86 15 LDA #NAK |
1050 05E8 17 FF 51 LBSR OUTTER |
1051 05EB 8E 05 F9 LDX #XSTSTR |
1052 05EE 20 F1 BRA XBYTE0 |
1053 * |
1054 05F0 AD 84 XBYTE1 JSR ,X |
1055 05F2 26 ED BNE XBYTE0 |
1056 05F4 BF DE 25 STX XSTATE |
1057 05F7 35 90 PULS X,PC |
1058 * |
1059 * START - LOOK FOR SOH (START OF HEADER) = $01 |
1060 * |
1061 05F9 81 01 XSTSTR CMPA #SOH |
1062 05FB 26 06 BNE XSTSTR1 |
1063 05FD 8E 06 19 LDX #XSTBLK |
1064 0600 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, no valid data (no exit) |
1065 0602 39 RTS |
1066 * |
1067 0603 81 04 XSTSTR1 CMPA #EOT |
1068 0605 26 08 BNE XSTSTR2 |
1069 0607 86 06 LDA #ACK |
1070 0609 17 FF 30 LBSR OUTTER |
1071 060C 1A 05 ORCC #CFLAG+ZFLAG Set (c)=1 abort & exit |
1072 060E 39 RTS |
1073 * |
1074 060F 81 18 XSTSTR2 CMPA #CAN |
1075 0611 26 03 BNE XSTSTR3 |
1076 0613 1A 05 ORCC #CFLAG+ZFLAG Set (c)=1 abort & exit |
1077 0615 39 RTS |
1078 * |
1079 0616 1C FA XSTSTR3 ANDCC #$FF-CFLAG-ZFLAG |
1080 0618 39 RTS |
1081 * |
1082 * Got SOH |
1083 * Now get block number |
1084 * |
1085 0619 B1 DE 23 XSTBLK CMPA BLKNUM |
1086 061C 26 06 BNE XSTBLKE |
1087 061E 8E 06 2F LDX #XSTCOM |
1088 0621 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit) |
1089 0623 39 RTS |
1090 * |
1091 * Error in block number |
1092 * |
1093 0624 86 15 XSTBLKE LDA #NAK |
1094 0626 17 FF 13 LBSR OUTTER |
1095 0629 8E 05 F9 LDX #XSTSTR |
1096 062C 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit) |
1097 062E 39 RTS |
1098 * |
1099 * Get complement of block number |
1100 * |
1101 062F 43 XSTCOM COMA |
1102 0630 B1 DE 23 CMPA BLKNUM |
1103 0633 26 EF BNE XSTBLKE |
1104 0635 7F DE 21 CLR CHKSUM |
1105 0638 86 80 LDA #128 |
1106 063A B7 DE 24 STA BYTCNT |
1107 063D 8E 06 43 LDX #XSTDAT |
1108 0640 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit) |
1109 0642 39 RTS |
1110 * |
1111 * Get data bytes |
1112 * |
1113 0643 34 02 XSTDAT PSHS A |
1114 0645 BB DE 21 ADDA CHKSUM |
1115 0648 B7 DE 21 STA CHKSUM |
1116 064B 35 02 PULS A |
1117 064D 7A DE 24 DEC BYTCNT |
1118 0650 26 03 BNE XSTDAT1 |
1119 0652 8E 06 5A LDX #XSTCHK |
1120 0655 1C FE XSTDAT1 ANDCC #$FF-CFLAG No abort |
1121 0657 1A 04 ORCC #ZFLAG Valid data (exit) |
1122 0659 39 RTS |
1123 * |
1124 * Byte count reached zero |
1125 * Check checksum byte |
1126 * |
1127 065A B1 DE 21 XSTCHK CMPA CHKSUM |
1128 065D 26 07 BNE XSTCHK1 retry if wrong checksum |
1129 * |
1130 * Checksum OK ... |
1131 * increment block number |
1132 * and send ACK |
1133 * |
1134 065F 7C DE 23 INC BLKNUM |
1135 0662 86 06 LDA #ACK |
1136 0664 20 0D BRA XSTCHK2 |
1137 * |
1138 * Checksum Error detected ... |
1139 * Reset Sector counter in ACCB to last 128 byte boundary |
1140 * and send NAK |
1141 * |
1142 0666 34 04 XSTCHK1 PSHS B |
1143 0668 1F 30 TFR U,D |
1144 066A 5A DECB |
1145 066B C4 80 ANDB #128 |
1146 066D 1F 03 TFR D,U |
1147 066F 35 04 PULS B |
1148 0671 86 15 LDA #NAK |
1149 0673 17 FE C6 XSTCHK2 LBSR OUTTER |
1150 0676 8E 05 F9 LDX #XSTSTR |
1151 0679 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, no valid data (no exit) |
1152 067B 39 RTS |
1153 * |
1154 ** 'UP' Load ROMdisk via config PROM. |
1155 * |
1156 067C 08 08 UPMES FCB $08,$08 |
1157 067E 4C 6F 61 64 20 52 FCC 'Load ROM disk from config PROM.' |
4F 4D 20 64 69 73 |
6B 20 66 72 6F 6D |
20 63 6F 6E 66 69 |
67 20 50 52 4F 4D |
2E |
1158 069D 04 FCB 4 |
1159 069E 46 6F 75 6E 64 20 UPMES1 FCC 'Found SYNC, loading data...' |
53 59 4E 43 2C 20 |
6C 6F 61 64 69 6E |
67 20 64 61 74 61 |
2E 2E 2E |
1160 06B9 0A 0D 04 FCB $0A,$0D,4 |
1161 06BC 52 4F 4D 20 44 69 UPMES2 FCC 'ROM Disk Loaded.' |
73 6B 20 4C 6F 61 |
64 65 64 2E |
1162 06CC 0A 0D 04 FCB $0A,$0D,4 |
1163 06CF 52 4F 4D 20 44 69 UPMES3 FCC 'ROM Disk Not Found.' |
73 6B 20 4E 6F 74 |
20 46 6F 75 6E 64 |
2E |
1164 06E2 0A 0D 04 FCB $0A,$0D,4 |
1165 * |
1166 06E5 8E 06 7C UPSUB LDX #UPMES |
1167 06E8 BD 04 50 JSR PDATA1 |
1168 * |
1169 06EB 8D 5A BSR UPRESET |
1170 06ED 10 8E 00 20 LDY #$0020 Set up count for 2 MBit |
1171 06F1 8E 00 00 LDX #$0000 |
1172 06F4 8D 6C UPSUB1 BSR UPBIT Shift in bit |
1173 06F6 8D 7C BSR UPSYNC Test for Sync pattern` |
1174 06F8 27 15 BEQ UPSUB4 Skip if found |
1175 06FA 30 1F LEAX -1,X Count Down inner loop |
1176 06FC 8C 00 00 CMPX #$0000 |
1177 06FF 26 F3 BNE UPSUB1 Branch if inner loop not complete |
1178 0701 31 1F LEAY -1,X Count down outer loop |
1179 0703 10 8C 00 00 CMPY #$0000 |
1180 0707 26 EB BNE UPSUB1 Branch if outer loop not complete |
1181 * |
1182 0709 8E 06 CF LDX #UPMES3 2MBits scanned, no synch, report error |
1183 070C 7E 04 50 JMP PDATA1 |
1184 * |
1185 070F 8E 06 9E UPSUB4 LDX #UPMES1 Sync found, now load disk |
1186 0712 BD 04 50 JSR PDATA1 |
1187 * |
1188 0715 4F CLRA |
1189 0716 B7 DE 1E STA DRVNUM select Drive 0 |
1190 0719 C6 01 LDB #$01 |
1191 071B B7 DE 1F UPSUB2 STA TRACK track 0 |
1192 071E F7 DE 20 STB SECTOR sector 1 |
1193 * |
1194 0721 17 F9 A3 LBSR MAPIN map in buffer |
1195 0724 5F CLRB 256 byte sector |
1196 0725 8D 67 UPSUB3 BSR UPBYTE read byte from prom |
1197 0727 A7 C0 STA ,U+ Store in buffer |
1198 0729 5A DECB |
1199 072A 26 F9 BNE UPSUB3 Loop until sector read` |
1200 072C 17 F9 CB LBSR MAPOUT map out buffer |
1201 * |
1202 072F B6 DE 1F LDA TRACK Advance sector |
1203 0732 F6 DE 20 LDB SECTOR |
1204 0735 5C INCB |
1205 0736 C1 0F CMPB #EMAXSEC+1 Wrap on max sector count |
1206 0738 26 E1 BNE UPSUB2 |
1207 073A C6 01 LDB #1 |
1208 073C 4C INCA Advance track |
1209 073D 81 30 CMPA #EMAXTRK |
1210 073F 26 DA BNE UPSUB2 |
1211 * |
1212 0741 8E 06 BC UPEXIT LDX #UPMES2 Load complete, report message |
1213 0744 7E 04 50 JMP PDATA1 |
1214 * |
1215 * Reset Serial PROM |
1216 * |
f9-monex.txt, line no. 1217: Symbol undefined Pass 2 |
1217 0747 86 00 UPRESET LDA #PRSTHI Strobe the reset line |
f9-monex.txt, line no. 1218: Symbol undefined Pass 2 |
1218 0749 97 00 STA PROMREG |
f9-monex.txt, line no. 1219: Symbol undefined Pass 2 |
1219 074B 86 00 LDA #PRSTLO |
f9-monex.txt, line no. 1220: Symbol undefined Pass 2 |
1220 074D 97 00 STA PROMREG |
1221 074F 8E 00 00 LDX #$0000 Delay a while` |
f9-monex.txt, line no. 1222: Phasing Error |
1222 0752 30 1F UPRST1 LEAX -1,X |
1223 0754 8C 00 00 CMPX #$0000 |
1224 0757 26 FB BNE UPRST1 |
1225 0759 BF DF 46 STX SYNCREG+0 Clear Sync Shift Register |
1226 075C BF DF 48 STX SYNCREG+2 |
1227 075F 39 RTS |
1228 * |
1229 * Input 1 Bit From PROM |
1230 * |
f9-monex.txt, line no. 1231: Phasing Error |
f9-monex.txt, line no. 1231: Symbol undefined Pass 2 |
1231 0760 86 00 UPBIT LDA #PCLKHI |
f9-monex.txt, line no. 1232: Symbol undefined Pass 2 |
1232 0762 97 00 STA PROMREG |
f9-monex.txt, line no. 1233: Symbol undefined Pass 2 |
1233 0764 86 00 LDA #PCLKLO |
f9-monex.txt, line no. 1234: Symbol undefined Pass 2 |
1234 0766 97 00 STA PROMREG |
f9-monex.txt, line no. 1235: Symbol undefined Pass 2 |
1235 0768 96 00 LDA PROMREG |
1236 076A 44 LSRA |
1237 076B 78 DF 49 ASL SYNCREG+3 |
1238 076E 39 RTS |
1239 * |
1240 * Test for 32 bit Sync Word |
1241 * |
f9-monex.txt, line no. 1242: Phasing Error |
1242 076F 79 DF 48 UPSYNC ROL SYNCREG+2 |
1243 0772 79 DF 47 ROL SYNCREG+1 |
1244 0775 79 DF 46 ROL SYNCREG+0 |
f9-monex.txt, line no. 1245: Symbol undefined Pass 2 |
1245 0778 CC 00 00 LDD #SYNCLO |
1246 077B 10 B3 DF 48 CMPD SYNCREG+2 |
1247 077F 26 0C BNE UPSYNCX |
f9-monex.txt, line no. 1248: Symbol undefined Pass 2 |
1248 0781 CC 00 00 LDD #SYNCHI |
1249 0784 10 B3 DF 46 CMPD SYNCREG+0 |
f9-monex.txt, line no. 1250: Phasing Error |
1250 0788 39 UPSYNCX RTS |
1251 * |
1252 * Input 1 Byte From PROM |
1253 * |
f9-monex.txt, line no. 1254: Phasing Error |
1254 0789 34 04 UPBYTE PSHS B |
1255 078B C6 08 LDB #8 |
f9-monex.txt, line no. 1256: Phasing Error |
1256 078D 8D D3 UPBYTE1 BSR UPBIT |
1257 078F 5A DECB |
1258 0790 26 00 BNE UPBYTE1 |
1259 0792 B6 DF 49 LDA SYNCREG+3 |
1260 0795 35 84 PULS B,PC |
1261 * |
1262 ***** NEXTCMD ***** |
1263 * |
f9-monex.txt, line no. 1264: Phasing Error |
1264 0797 17 FC BE NEXTEXT LBSR INPE GET ONE CHAR. FROM TERMINAL |
1265 079A 84 7F ANDA #$7F STRIP PARITY FROM CHAR. |
1266 079C 1F 89 TFR A,B |
1267 079E 86 20 LDA #$20 |
1268 07A0 17 FC B1 LBSR OUTP PRNT SPACE |
1269 07A3 C1 60 CMPB #$60 |
1270 07A5 2F 07 BLE NXTEX0 |
1271 07A7 C0 20 SUBB #$20 |
1272 * |
1273 ***** DO TABLE LOOKUP ***** |
1274 * FOR COMMAND FUNCTIONS |
1275 * |
f9-monex.txt, line no. 1276: Phasing Error |
1276 07A9 8E 07 C4 NXTEX0 LDX #EXTTAB POINT TO JUMP TABLE |
f9-monex.txt, line no. 1277: Phasing Error |
1277 07AC E1 80 NXTEX1 CMPB ,X+ DOES COMMAND MATCH TABLE ENTRY ? |
1278 07AE 27 12 BEQ JMPEXT BRANCH IF MATCH FOUND |
1279 07B0 30 02 LEAX 2,X POINT TO NEXT ENTRY IN TABLE |
1280 07B2 8C 07 D3 CMPX #EXTEND REACHED END OF TABLE YET ? |
1281 07B5 26 FA BNE NXTEX1 IF NOT END, CHECK NEXT ENTRY |
1282 07B7 8E 07 D3 LDX #MSGWHAT POINT TO MSG "WHAT?" |
1283 07BA 16 FC 93 LBRA PDATA1 PRINT MSG AND RETURN |
f9-monex.txt, line no. 1284: Phasing Error |
1284 07BD 6E 94 JMPEXT JMP [,X] JUMP TO COMMAND ROUTINE |
1285 * |
1286 * EXTENDED COMMAND JUMP TABLE |
1287 * |
f9-monex.txt, line no. 1288: Phasing Error |
1288 07BF EXTTAB EQU * |
1289 07BF 42 FCC 'B' BOOT FLEX |
1290 07C0 03 FB FDB UBSUB |
1291 07C2 4C FCC 'L' LOAD ROM DISK OVER SERIAL PORT |
1292 07C3 04 98 FDB ULSUB |
1293 07C5 46 FCC 'F' FORMAT RAM DISK |
1294 07C6 02 D7 FDB UFSUB |
1295 07C8 50 FCC 'P' LOAD ROM DISK FROM PROM |
1296 07C9 06 E5 FDB UPSUB |
1297 07CB 58 FCC 'X' XMODEM ROM DISK UPLOAD |
1298 07CC 05 8B FDB UXSUB |
1299 * |
f9-monex.txt, line no. 1300: Phasing Error |
1300 07CE EXTEND EQU * |
1301 * |
f9-monex.txt, line no. 1302: Phasing Error |
1302 07CE 57 48 41 54 20 3F MSGWHAT FCC "WHAT ?" |
1303 07D4 0A 0D 04 FCB $0A,$0D,$04 |
1304 END |
Program + Init Data = 2047 bytes |
Error count = 68 |