OpenCores
URL https://opencores.org/ocsvn/System09/System09/trunk

Subversion Repositories System09

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 220 to Rev 221
    Reverse comparison

Rev 220 → Rev 221

/System09/trunk/src/sys09bug/sys09atl.lst
49,1469 → 49,1480
0022 EXTCMD EQU $00 EXTENDED OFFSET
0023 ENDIF XESOPT
0023 ENDIF XESOPT
0024 IFD DE270OPT
0025 MONEXT EQU $F000 START OF EXTENDED COMMANDS
0026 EXTCMD EQU $00 EXTENDED OFFSET
0027 ENDIF DE270OPT
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
0024 IFD ATLOPT
0025 F000 MONEXT EQU $F000 START OF EXTENDED COMMANDS
0026 0000 EXTCMD EQU $00 EXTENDED OFFSET
0027 ENDIF ATLOPT
0028 IFD DE270OPT
0029 MONEXT EQU $F000 START OF EXTENDED COMMANDS
0030 EXTCMD EQU $00 EXTENDED OFFSET
0031 ENDIF DE270OPT
0031 ENDIF DE270OPT
0032 **************************************************
0033 **************************************************
0034
0035 IFD SWTOPT
0036 *
0037 * SOUTH WEST TECHNICAL PRODUCTS COMPUTER
0038 *
0039 ACIAOPT EQU $FF ACIA AT PORT 0
0040 DMAFOPT EQU $FF DMAF2 8" FLOPPY DISK BOOT
0041 MFDCOPT EQU $FF MINIFLOPPY 5.25" DISK BOOT
0042 DATOPT EQU $FF DYNAMIC ADDRESS TRANSLATION
0043 ENDIF
0043 ENDIF
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+
0045 IFD ADSOPT
0046 *
0047 * ACKERMAN DIGITAL ADS6809
0048 *
0049 DG640OPT EQU $FF DG640 VDU AT $E800
0050 *RTCOPT EQU $FF REAL TIME CLOCK
0051 PRTOPT EQU $FF PRINTER DRIVERS
0052 MFDCOPT EQU $FF MINIFLOPPY 5.25" DISK BOOT
0053 ENDIF ADSOPT
0053 ENDIF ADSOPT
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
0055 IFD B3SOPT
0056 *
0057 * BURCHED SPARTAN 2 B3+
0058 *
0059 ACIAOPT EQU $FF ACIA AT PORT 0
0060 PS2OPT EQU $FF PS2 KEYBOARD AT $E020
0061 VDUOPT EQU $FF VDU AT $E030
0062 IDEOPT EQU $FF IDE AT $E100
0063 DATOPT EQU $FF DYNAMIC ADDRESS TRANSLATION
0064 HFCOPT EQU $FF HARDWARE FLOW CONTROL
0065 ENDIF B3SOPT
0065 ENDIF B3SOPT
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
0067 IFD B5XOPT
0068 *
0069 * BURCHED SPARTAN 2 B5-X300
0070 *
0071 ACIAOPT EQU $FF ACIA AT PORT 0
0072 PS2OPT EQU $FF PS2 KEYBOARD AT $E020
0073 VDUOPT EQU $FF VDU AT $E030
0074 CF8OPT EQU $FF COMPACT FLASH AT $E040
0075 DATOPT EQU $FF DYNAMIC ADDRESS TRANSLATION
0076 HFCOPT EQU $FF HARDWARE FLOW CONTROL
0077 ENDIF B5XOPT
0077 ENDIF B5XOPT
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
0079 IFD S3SOPT
0080 *
0081 * DIGILENT SPARTAN 3 STARTER
0082 *
0083 ACIAOPT EQU $FF ACIA AT PORT 0
0084 PS2OPT EQU $FF PS2 KEYBOARD AT $E020
0085 VDUOPT EQU $FF VDU AT $E030
0086 CF8OPT EQU $FF COMPACT FLASH AT $E040
0087 DATOPT EQU $FF DYNAMIC ADDRESS TRANSLATION
0088 EXTOPT EQU $FF EXTENDED COMMANDS
0089 ENDIF S3SOPT
0089 ENDIF S3SOPT
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
0091 IFD S3EOPT
0092 *
0093 * DIGILENT SPARTAN 3E STARTER
0094 *
0095 ACIAOPT EQU $FF ACIA AT PORT 0
0096 PS2OPT EQU $FF PS2 KEYBOARD AT $E020
0097 VDUOPT EQU $FF VDU AT $E030
0098 TRAOPT EQU $FF PIA TRACE TIMER
0099 ENDIF S3EOPT
0099 ENDIF S3EOPT
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
0101 IFD XESOPT
0102 *
0103 * XESS SPARTAN 3 XSA-3S1000 & XST-3.0
0104 *
0105 ACIAOPT EQU $FF ACIA AT PORT 0
0106 PS2OPT EQU $FF PS2 KEYBOARD AT $E020
0107 VDUOPT EQU $FF VDU AT $E030
0108 IDEOPT EQU $FF IDE AT $E100
0109 DATOPT EQU $FF DYNAMIC ADDRESS TRANSLATION
0110 HFCOPT EQU $FF HARDWARE FLOW CONTROL
0111 EXTOPT EQU $FF EXTENDED COMMANDS
0112 ENDIF XESOPT
0112 ENDIF XESOPT
0113 *
0114 ACIAOPT EQU $FF ACIA AT PORT 0
0115 PS2OPT EQU $FF PS2 KEYBOARD AT $E020
0116 VDUOPT EQU $FF VDU AT $E030
0117 CF8OPT EQU $FF COMPACT FLASH AT $E040
0118 DATOPT EQU $FF DYNAMIC ADDRESS TRANSLATION
0119 EXTOPT EQU $FF EXTENDED COMMANDS
0120 ENDIF DE270OPT
0120 ENDIF DE270OPT
0121 *
0122 *
0123 IFD ACIAOPT
0124 *
0125 ***************************************************
0126 * SERIAL PORT *
0127 ***************************************************
0114 IFD ATLOPT
0115 *
0116 * Digilent Atlys SPARTAN6
0117 *
0118 00FF ACIAOPT EQU $FF ACIA AT PORT 0
0119 00FF PS2OPT EQU $FF PS2 KEYBOARD AT $E020
0120 00FF VDUOPT EQU $FF VDU AT $E030
0121 00FF IDEOPT EQU $FF IDE AT $E100
0122 00FF DATOPT EQU $FF DYNAMIC ADDRESS TRANSLATION
0123 00FF HFCOPT EQU $FF HARDWARE FLOW CONTROL
0124 00FF EXTOPT EQU $FF EXTENDED COMMANDS
0125 ENDIF ATLOPT
0126 *
0127 IFD DE270OPT
0128 *
0129 ** ACIA SITS ON PORT 0
0129 * TERASIC CYCLONE 2 DE2-70
0130 *
0131 ACIAS EQU MONIO+$00 CONTROL PORT
0132 *
0133 ENDIF ACIAOPT
0133 ENDIF ACIAOPT
0134 IFD MFDCOPT
0135 *
0136 ***************************************************
0137 * MINIFLOPPY DRIVE *
0138 ***************************************************
0131 ACIAOPT EQU $FF ACIA AT PORT 0
0132 PS2OPT EQU $FF PS2 KEYBOARD AT $E020
0133 VDUOPT EQU $FF VDU AT $E030
0134 CF8OPT EQU $FF COMPACT FLASH AT $E040
0135 DATOPT EQU $FF DYNAMIC ADDRESS TRANSLATION
0136 EXTOPT EQU $FF EXTENDED COMMANDS
0137 ENDIF DE270OPT
0137 ENDIF DE270OPT
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 PS2KBD EQU MONIO+$20 PS/2 KEYBOARD PORT
0156 ENDIF PS2OPT
0156 ENDIF PS2OPT
0157 IFD VDUOPT
0158 *
0159 ***************************************************
0160 * VDU8 DISPLAY DRIVER EQUATES *
0161 ***************************************************
0162 *
0163 ** VDU8 DISPLAY SITS ON PORT 3
0164 *
0165 VDU EQU MONIO+$30
0166 VDUCHR EQU 0 CHARACTER REGISTER
0167 VDUATT EQU 1 ATTRIBUTE REGISTER
0168 VDUCOL EQU 2 CURSOR COLUMN
0169 VDUROW EQU 3 CURSOR ROW
0170 VDUOFF EQU 4 ROW OFFSET
0140 IFD ACIAOPT
0141 *
0142 ***************************************************
0143 * SERIAL PORT *
0144 ***************************************************
0145 *
0146 ** ACIA SITS ON PORT 0
0147 *
0148 E000 ACIAS EQU MONIO+$00 CONTROL PORT
0149 *
0150 ENDIF ACIAOPT
0151 IFD MFDCOPT
0152 *
0153 ***************************************************
0154 * MINIFLOPPY DRIVE *
0155 ***************************************************
0156 *
0157 ** FLOPPY DISK CONTROLLER SITS ON PORT 1
0158 *
0159 DRVFDC EQU MONIO+$14
0160 CMDFDC EQU MONIO+$18
0161 SECFDC EQU MONIO+$1A
0162 DATFDC EQU MONIO+$1B
0163 ENDIF MFDCOPT
0163 ENDIF MFDCOPT
0164 IFD PS2OPT
0165 *
0166 ***************************************************
0167 * VDU8 PS/2 KEYBOARD PORT *
0168 ***************************************************
0169 *
0170 ** KEYBOARD SITS ON PORT 2
0171 *
0172 LINLEN EQU 80 LENGTH OF A LINE
0173 NUMLIN EQU 25 NUMBER OF LINES
0174 ENDIF VDUOPT
0174 ENDIF VDUOPT
0175 *
0176 IFD CF8OPT
0177 *
0172 E020 PS2KBD EQU MONIO+$20 PS/2 KEYBOARD PORT
0173 ENDIF PS2OPT
0174 IFD VDUOPT
0175 *
0176 ***************************************************
0177 * VDU8 DISPLAY DRIVER EQUATES *
0178 ***************************************************
0179 * COMPACT FLASH EQUATES 8 BIT TRANSFER *
0180 ***************************************************
0179 *
0180 ** VDU8 DISPLAY SITS ON PORT 3
0181 *
0182 ** COMPACT FLASH SITS AT PORT 4
0183 *
0184 CF_BASE EQU MONIO+$40
0185 CF_DATA EQU CF_BASE+0
0186 CF_ERROR EQU CF_BASE+1 ; read error
0187 CF_FEATURE EQU CF_BASE+1 ; write feature
0188 CF_SECCNT EQU CF_BASE+2
0189 CF_SECNUM EQU CF_BASE+3
0190 CF_CYLLO EQU CF_BASE+4
0191 CF_CYLHI EQU CF_BASE+5
0192 CF_HEAD EQU CF_BASE+6
0193 CF_STATUS EQU CF_BASE+7 ; read status
0194 CF_COMAND EQU CF_BASE+7 ; write command
0195 *
0196 * Command Equates
0197 *
0198 CMDREAD EQU $20 ; Read Single sector
0199 CMDWRITE EQU $30 ; Write Single sector
0200 CMDFEATURE EQU $EF
0201 FEAT8BIT EQU $01 ; enable 8 bit transfers
0202 HEADLBA EQU $E0
0203 *
0204 * Status bit equates
0205 *
0206 BUSY EQU $80
0207 DRDY EQU $40
0208 DRQ EQU $08
0209 ERR EQU $01
0210 *
0211 ENDIF CF8OPT
0211 ENDIF CF8OPT
0182 E030 VDU EQU MONIO+$30
0183 0000 VDUCHR EQU 0 CHARACTER REGISTER
0184 0001 VDUATT EQU 1 ATTRIBUTE REGISTER
0185 0002 VDUCOL EQU 2 CURSOR COLUMN
0186 0003 VDUROW EQU 3 CURSOR ROW
0187 0004 VDUOFF EQU 4 ROW OFFSET
0188 *
0189 0050 LINLEN EQU 80 LENGTH OF A LINE
0190 0019 NUMLIN EQU 25 NUMBER OF LINES
0191 ENDIF VDUOPT
0192 *
0193 IFD CF8OPT
0194 *
0195 ***************************************************
0196 * COMPACT FLASH EQUATES 8 BIT TRANSFER *
0197 ***************************************************
0198 *
0199 ** COMPACT FLASH SITS AT PORT 4
0200 *
0201 CF_BASE EQU MONIO+$40
0202 CF_DATA EQU CF_BASE+0
0203 CF_ERROR EQU CF_BASE+1 ; read error
0204 CF_FEATURE EQU CF_BASE+1 ; write feature
0205 CF_SECCNT EQU CF_BASE+2
0206 CF_SECNUM EQU CF_BASE+3
0207 CF_CYLLO EQU CF_BASE+4
0208 CF_CYLHI EQU CF_BASE+5
0209 CF_HEAD EQU CF_BASE+6
0210 CF_STATUS EQU CF_BASE+7 ; read status
0211 CF_COMAND EQU CF_BASE+7 ; write command
0212 *
0213 IFD IDEOPT
0214 *
0215 ***************************************************
0216 * COMPACT FLASH EQUATES 16 BIT TRANSFER (XESS) *
0217 ***************************************************
0218 *
0219 ** COMPACT FLASH SITS AT PORT 4
0213 * Command Equates
0214 *
0215 CMDREAD EQU $20 ; Read Single sector
0216 CMDWRITE EQU $30 ; Write Single sector
0217 CMDFEATURE EQU $EF
0218 FEAT8BIT EQU $01 ; enable 8 bit transfers
0219 HEADLBA EQU $E0
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
0221 * Status bit equates
0222 *
0223 BUSY EQU $80
0224 DRDY EQU $40
0225 DRQ EQU $08
0226 ERR EQU $01
0227 *
0228 ENDIF CF8OPT
0228 ENDIF CF8OPT
0229 *
0230 IFD IDEOPT
0231 *
0232 ***************************************************
0233 * COMPACT FLASH EQUATES 16 BIT TRANSFER (XESS) *
0234 ***************************************************
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
0236 ** COMPACT FLASH SITS AT PORT 4
0237 *
0238 E100 CF_BASE EQU MONIO+$0100
0239 E100 CF_DATA EQU CF_BASE+0
0240 E102 CF_ERROR EQU CF_BASE+2 ; read error
0241 E102 CF_FEATURE EQU CF_BASE+2 ; write feature
0242 E104 CF_SECCNT EQU CF_BASE+4
0243 E106 CF_SECNUM EQU CF_BASE+6
0244 E108 CF_CYLLO EQU CF_BASE+8
0245 E10A CF_CYLHI EQU CF_BASE+10
0246 E10C CF_HEAD EQU CF_BASE+12
0247 E10E CF_STATUS EQU CF_BASE+14 ; read status
0248 E10E CF_COMAND EQU CF_BASE+14 ; write command
0249 E11E CF_AUX EQU CF_BASE+30
0250 *
0251 IFD RTCOPT
0251 * Command Equates
0252 *
0253 **************************************************
0254 * MM58167A REAL TIME CLOCK MEMORY MAP:
0255 **************************************************
0256 *
0257 ** REAL TIME CLOCK SITS ON PORT 4 AND PORT 5
0253 0020 CMDREAD EQU $20 ; Read Single sector
0254 0030 CMDWRITE EQU $30 ; Write Single sector
0255 0006 AUXRESET EQU $06 ; Reset IDE
0256 0002 AUXRSTREL EQU $02 ; Reset release IRQ masked
0257 00E0 HEADLBA EQU $E0
0258 *
0259 CLOCK EQU MONIO+$40 CLOCK BASE ADDRESS AND REGISTERS
0259 * Status bit equates
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.
0261 0080 BUSY EQU $80
0262 0040 DRDY EQU $40
0263 0008 DRQ EQU $08
0264 0001 ERR EQU $01
0265 *
0266 ENDIF CF8OPT
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
0268 IFD RTCOPT
0269 *
0270 **************************************************
0271 * MM58167A REAL TIME CLOCK MEMORY MAP:
0272 **************************************************
0273 *
0274 ** REAL TIME CLOCK SITS ON PORT 4 AND PORT 5
0275 *
0276 CLOCK EQU MONIO+$40 CLOCK BASE ADDRESS AND REGISTERS
0277 *
0278 * COUNTER AND COMPARITOR REGISTERS:
0279 *
0280 * Both the Clock Counter and Clock Comparitor
0281 * consist of 8 registers for holding the time.
0282 * The register offsets from the Counter and
0283 * Comparitor registers are listed above.
0284 *
0285 COUNTR EQU CLOCK+0
0286 CMPRAM EQU CLOCK+8 COMPARITOR REGISTERS
0287 *
0288 * CLOCK REGISTER OFFSETS:
0289 * These register offsets are used for the CLOCK
0290 * and comparitor ram CMPRAM.
0291 *
0292 S10000 EQU 0 TEN THOUNSANDTHS OF SECONDS
0293 S100 EQU 1 HUNDRETHS AND TENTHS OF SECONDS
0294 SECOND EQU 2
0295 MINUIT EQU 3
0296 HOUR EQU 4
0297 WKDAY EQU 5
0298 MTHDAY EQU 6
0299 MONTH EQU 7
0300 *
0301 * INTERRUPT OUTPUT REGISTERS:
0302 *
0303 * An interrupt output may be generated at the
0304 * following rates by setting the appropriate bit
0305 * in the Interrupt Control Register (CINTCR).
0306 * The Interrupt Status Register (CINTSR) must be
0307 * read to clear the interrupt and will return
0308 * the source of the interrupt.
0309 *
0310 * 1/Month Bit 7
0311 * 1/Week Bit 6
0312 * 1/Day Bit 5
0313 * 1/Hour Bit 4
0314 * 1/Minuite Bit 3
0315 * 1/Second Bit 2
0316 * 10/Second Bit 1
0317 * Comparitor Bit 0
0318 *
0319 CINTSR EQU CLOCK+16 INTERRUPT STATUS REGISTER
0320 CINTCR EQU CLOCK+17 INTERRUPT CONTROL REGISTER
0321 *
0322 * COUNTER AND RAM RESETS; GO COMMAND.
0323 *
0324 * The counter and comparitor may be reset
0325 * by writing $FF into CTRRES and CMPRES
0326 * respectivly.
0327 * A write to the Go command register (GOCMND)
0328 * will reset the 1/1000ths, 1/100ths and 1/10ths
0329 * of a second counter.
0330 *
0331 CTRRES EQU CLOCK+18 COUNTER RESET
0332 CMPRES EQU CLOCK+19 COMPARITOR RAM RESET
0333 GOCMND EQU CLOCK+21 GO COMMAND
0334 *
0335 * CLOCK STATUS REGISTER.
0336 *
0337 * The counter takes 61 usec. to rollover for
0338 * every 1KHz clock pulse. If the Status bit is
0339 * set after reading the counter, the counter
0340 * should be re-read to ensure the time is correct.
0341 *
0342 CLKSTA EQU CLOCK+20 STATUS BIT
0343 SBYINT EQU CLOCK+22 STANDBY INTERRUPT
0344 TSTMOD EQU CLOCK+31 TEST MODE REGISTER
0345 ENDIF RTCOPT
0345 ENDIF RTCOPT
0346 *
0347 IFD TRAOPT
0348 *
0349 **************************************************
0350 * PIA INTERRUPT TIMER
0351 **************************************************
0352 *
0353 ** PIA INTERRUPT TIMER SITS ON PORT 7
0354 *
0355 ** PIA TIMER FOR SINGLE STEP / TRACE
0356 *
0357 * TADATA = Output = Timer preset register
0358 * TACTRL - CA1 = input = rising edge = NMI
0359 * - CA2 = Output = Timer Reset (Active High)
0360 * TBDATA = Input = Timer read back register
0361 * TBCTRL - CB1 = input = rising edge = FIRQ
0362 * - CB2 = output = strobe low on write to TBDATA = Timer Preset
0363 *
0364 * CRA0 = 0 CA1 IRQ DISAB, CRA0 = 1 CA1 IRQ ENAB
0365 * CRA1 = 1 CA1 Rising edge IRQ
0366 * CRA2 = 0 TADATA = Data Direction, CRA2 = 1 TADATA = I/O Register
0367 * CRA3 = 0 CA2 = 0 output, CRA3 = 1 CA2 = 1
0368 * CRA4 = 1 ] CA2 = Set/Reset output
0369 * CRA5 = 1 ]
0370 * CRA6 = X CA2 Input Interrupt Flag
0371 * CRA7 = X CA1 Interrupt Flag
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 ***************************************************
0373 * CRB0 = 0 CB1 IRQ DISAB, CRB0 = 1 CA1 IRQ ENAB
0374 * CRB1 = 1 CB1 Rising edge IRQ
0375 * CRB2 = 0 TBDATA = Data Direction, CRB2 = 1 TBDATA = I/O Register
0376 * CRB3 = 0 CB2 = 0 output, CRB3 = 1 CB2 = 1
0377 * CRB4 = 1 ] CB2 = Set/Reset output
0378 * CRB5 = 1 ]
0379 * CRB6 = X CB2 Input Interrupt Flag
0380 * CRB7 = X CB1 Interrupt Flag
0381 *
0382 ** SET UP FOR ACKERMAN DIGITAL ADS6809
0383 ** THE ADS6809 S100 BOAD HAS AN ON BOARD ACIA
0382 * DDRA = 0 TADATA = Input, DDRA = 1 TADATA = Output
0383 * DDRB = 0 TBDATA = Input, DDRB = 1 TBDATA = Output
0384 *
0385 ACIAS EQU MONIO+$400 CONTROL PORT
0386 *
0387 ENDIF ADSOPT
0387 ENDIF ADSOPT
0388 IFD PRTOPT
0385 TADATA EQU MONIO+$70 Timer preset port
0386 TACTRL EQU MONIO+$71
0387 TBDATA EQU MONIO+$72 Timer read back port
0388 TBCTRL EQU MONIO+$73
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
0390 TRADEL EQU 13 Number of E cycles for RTI (May need to be fudged)
0391 *
0392 ENDIF TRAOPT
0392 ENDIF TRAOPT
0393 IFD ADSOPT
0394 *
0395 ***************************************************
0396 * SERIAL PORT FOR DG640 *
0397 ***************************************************
0398 *
0399 ** CB1 ACK. I/P
0400 ** CB2 STB. O/P
0401 ** PB0 - PB7 DATA 1 - 8 O/P
0402 ** PORT A BIT ASSIGNMENT
0399 ** SET UP FOR ACKERMAN DIGITAL ADS6809
0400 ** THE ADS6809 S100 BOAD HAS AN ON BOARD ACIA
0401 *
0402 ACIAS EQU MONIO+$400 CONTROL PORT
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 IC11 EQU $FFF0 DAT RAM CHIP
0449 TSTPAT EQU $55AA TEST PATTERN
0450 ENDIF DATOPT
0450 ENDIF DATOPT
0451 *
0404 ENDIF ADSOPT
0404 ENDIF ADSOPT
0405 IFD PRTOPT
0406 *
0407 ***************************************************
0408 * PRINTER INTERFACE *
0409 ***************************************************
0410 *
0411 PADATA EQU MONIO+$404
0412 PACTRL EQU MONIO+$405
0413 PBDATA EQU MONIO+$406
0414 PBCTRL EQU MONIO+$407
0415 *
0416 ** CB1 ACK. I/P
0417 ** CB2 STB. O/P
0418 ** PB0 - PB7 DATA 1 - 8 O/P
0419 ** PORT A BIT ASSIGNMENT
0420 *
0421 PBUSY EQU $80 I/P
0422 PEMPTY EQU $40 I/P
0423 SELECT EQU $20 I/P
0424 PERROR EQU $10 I/P
0425 PRESET EQU %00000100 O/P PA3 = 0
0426 AUTOFD EQU %00001000 O/P PA2 = 0
0427 DIRMSK EQU %00001100
0428 ENDIF PRTOPT
0428 ENDIF PRTOPT
0429 IFD DG640OPT
0430 *
0431 ***************************************************
0432 * DG640 MEMORY MAPPED DISPLAY DRIVER VARIABLES *
0433 ***************************************************
0434 *
0435 ** VIDEO DISPLAY DEFINITIONS
0436 *
0437 SCREEN EQU MONIO+$0800 START OF SCREEN MEMORY
0438 LINLEN EQU 64 LENGTH OF A LINE
0439 NUMLIN EQU 16 NUMBER OF LINES
0440 SCNLEN EQU $400 LENGTH OF SCREEN
0441 ENDIF DG640OPT
0441 ENDIF DG640OPT
0442 *
0443 IFD DMAFOPT
0444 *
0445 ***************************************************
0446 * DMAF2 8" DRIVE *
0447 ***************************************************
0448 *
0449 ADDREG EQU $F000 ADDRESS REGISTER
0450 CNTREG EQU $F002 COUNT REGISTER
0451 CCREG EQU $F010 CHANNEL CONTROL REGISTER
0452 PRIREG EQU $F014 DMA PRIORITY REGISTER
0453 AAAREG EQU $F015 ???
0454 BBBREG EQU $F016 ???
0455 COMREG EQU $F020 1791 COMMAND REGISTER
0456 SECREG EQU $F022 SECTOR REGISTER
0457 DRVREG EQU $F024 DRIVE SELECT LATCH
0458 CCCREG EQU $F040 ???
0459 ENDIF DMAFOPT
0459 ENDIF DMAFOPT
0460 IFD DATOPT
0461 **************************************************
0462 * DYNAMIC ADDRESS TRANSLATION REGISTERS *
0463 **************************************************
0464 *
0465 FFF0 IC11 EQU $FFF0 DAT RAM CHIP
0466 55AA TSTPAT EQU $55AA TEST PATTERN
0467 ENDIF DATOPT
0468 *
0003 END
0000 INCLUDE "sys09nul.asm"
0000 INCLUDE "sys09ide.asm"
0001 *
0002 ** SYS09BUG MONITOR EXTENSIONS
0003 *
0004 * FOR GENERIC SYS09BUG
0004 * FOR SYS09BUG ON THE XESS XSA-3S100 / XST-3.0
0005 * WITH I/O MAPPED AT $XE000
0006 * AND ROM MAPPED AT $XF000
0007 * (JUST A COPY OF SYS09IDE.ASM
0008 * TO FILL THE MEMORY AT F000)
0006 * 16 BIT IDE MAPPED AT $E100
0007 * AND ROM MAPPED AT $XF000
0008 *
0009 *
0010 *
 
sys09nul.asm page 2
0012 *
0013 ***************************************************
0014 * Serial PROM register
0015 ***************************************************
0016 *
0017 ** CONFIGURATION PROM DEFINITIONS
0018 *
0019 E0C0 PROMREG EQU MONIO+$C0
0020 0001 PCLKHI EQU $01 Toggle PROM Clock High
0021 0000 PCLKLO EQU $00 Toggle PROM Clock Low
0022 0002 PRSTHI EQU $02 Toggle PROM Reset High
0023 0000 PRSTLO EQU $00 Toggle PROM Reset Low
0024 AA55 SYNCHI EQU $AA55 Synch Pattern High Word
0025 FF00 SYNCLO EQU $FF00 Synch Pattern Low Word
sys09ide.asm page 2
0011 *
0012 ***************************************************
0013 * Serial PROM register
0014 ***************************************************
0015 *
0016 ** CONFIGURATION PROM DEFINITIONS
0017 *
0018 E0C0 PROMREG EQU MONIO+$C0
0019 0001 PCLKHI EQU $01 Toggle PROM Clock High
0020 0000 PCLKLO EQU $00 Toggle PROM Clock Low
0021 0002 PRSTHI EQU $02 Toggle PROM Reset High
0022 0000 PRSTLO EQU $00 Toggle PROM Reset Low
0023 AA55 SYNCHI EQU $AA55 Synch Pattern High Word
0024 FF00 SYNCLO EQU $FF00 Synch Pattern Low Word
0025 *
0026 *
0027 *
0028 ***************************************************
0029 * START OF ROM *
0030 ***************************************************
0031 *
0032 F800 MONITV EQU MONROM+0 FDB MONITOR
0033 F802 NXTCMV EQU MONROM+2 FDB NEXTCMD
0034 F804 INCHV EQU MONROM+4 FDB INCH
0035 F806 INCHEV EQU MONROM+6 FDB INCHE
0036 F808 INCHKV EQU MONROM+8 FDB INCHEK
0037 F80A OUTCHV EQU MONROM+10 FDB OUTCH
0038 F80C PDATAV EQU MONROM+12 FDB PDATA
0039 F80E PCRLFV EQU MONROM+14 FDB PCRLF
0040 F810 PSTRGV EQU MONROM+16 FDB PSTRNG
0041 F812 LRAV EQU MONROM+18 FDB LRA
0042 *
0043 * Condition code flags
0044 *
0045 0001 CFLAG EQU $01 CARRY FLAG
0046 0002 VFLAG EQU $02 OVERFLOW FLAG
0047 0004 ZFLAG EQU $04 ZERO FLAG
0048 0008 NFLAG EQU $08 NEGATIVE FLAG
0049 0010 IFLAG EQU $10 IRQ MASK CC
0050 0020 HFLAG EQU $20 HALF CARRY
0051 0040 FFLAG EQU $40 FIRQ MASK CC
0052 0080 EFLAG EQU $80 ENTIRE FLAG
0053 *
0054 * Serial Port
0055 *
Symbol 'ACIAS' undefined Pass 20056 0000 ACIAC1 EQU ACIAS
Symbol 'ACIAS' undefined Pass 20057 0001 ACIAD1 EQU ACIAS+1
0058 04E2 DELCON EQU 1250 Delay (Processor clock in MHz * 50)
0059 *
0060 * XMODEM Control characters
0061 *
0062 0001 SOH EQU $01
0063 0004 EOT EQU $04
0064 0006 ACK EQU $06
0065 0015 NAK EQU $15
0066 0018 CAN EQU $18
0067 *
0068 * Some Disk Constants
0069 *
0070 0100 RMAXTRK EQU 256
0071 00FF RMAXSEC EQU 255
0072 FE01 RTOTSEC EQU RMAXTRK*RMAXSEC-RMAXSEC
0073 *
0074 * RAM SPACE
0075 *
0076 * PUT THIS DOWN THE BOTTOM OF MEMORY
0077 *
0078 0100 ORG $0100
0079 0100 DRVNUM RMB 1
0080 0101 TRACK RMB 1
0081 0102 SECTOR RMB 1
0082 0103 CHKSUM RMB 1
0083 0104 BLKNUM RMB 1 Xmodem block number
0084 0105 BYTCNT RMB 1 Xmodem byte count
0085 0106 XSTATE RMB 2 Xmodem State Vector
0086 0108 DELCNT RMB 3 $00,$00,$00 Xmodem Poll timer
0087 010B MAXTRK RMB 1
0088 010C MAXSEC RMB 1
0089 0200 ORG $0200
0090 *
0091 * SECTOR BUFFER
0092 *
0093 0200 BUFFER RMB 256
0094 *
0095 ****************************************
0096 *
0097 * START OF EXTENSION COMMANDS
0098 *
0099 ****************************************
0100 *
Symbol 'MONEXT' undefined Pass 20101 0000 ORG MONEXT
0102 0000 00 02 FDB NEXTEXT Jump to next extended command
0103 *
0104 ***** NEXTCMD *****
0105 *
0106 0002 AD 9F F8 06 NEXTEXT JSR [INCHEV] GET ONE CHAR. FROM TERMINAL
0107 0006 84 7F ANDA #$7F STRIP PARITY FROM CHAR.
0108 0008 1F 89 TFR A,B
0109 000A 86 20 LDA #$20
0110 000C AD 9F F8 0A JSR [OUTCHV] PRNT SPACE
0111 0010 C1 60 CMPB #$60
0112 0012 2F 02 BLE NXTEX0
0113 0014 C0 20 SUBB #$20
0114 *
0115 ***** DO TABLE LOOKUP *****
0116 * FOR COMMAND FUNCTIONS
0117 *
0118 0016 8E 00 2C NXTEX0 LDX #EXTTAB POINT TO JUMP TABLE
0119 0019 E1 80 NXTEX1 CMPB ,X+ DOES COMMAND MATCH TABLE ENTRY ?
0120 001B 27 0D BEQ JMPEXT BRANCH IF MATCH FOUND
0121 001D 30 02 LEAX 2,X POINT TO NEXT ENTRY IN TABLE
0122 001F 8C 00 35 CMPX #EXTEND REACHED END OF TABLE YET ?
0123 0022 26 F5 BNE NXTEX1 IF NOT END, CHECK NEXT ENTRY
0124 0024 8E 00 35 LDX #MSGWHAT POINT TO MSG "WHAT?"
0125 0027 16 02 1E LBRA PDATA1 PRINT MSG AND RETURN
0126 002A 6E 94 JMPEXT JMP [,X] JUMP TO COMMAND ROUTINE
0127 *
0128 * EXTENDED COMMAND JUMP TABLE
0129 *
0130 002C EXTTAB EQU *
0131 002C 42 FCC 'B' BOOT FLEX
0132 002D 00 3E FDB UBSUB
0133 002F 46 FCC 'F' FORMAT IDE DISK
0134 0030 00 E6 FDB UFSUB
0135 0032 58 FCC 'X' XMODEM ROM DISK UPLOAD
0136 0033 02 B1 FDB UXSUB
0137 *
0138 0035 EXTEND EQU *
0139 *
0140 0035 57 48 41 54 20 3F MSGWHAT FCC "WHAT ?"
0141 003B 0A 0D 04 FCB $0A,$0D,$04
0142 *
0143 * GO TO FLEX RESIDENT IN MEMORY
0144 *
0145 003E 8E CD 00 UBSUB LDX #$CD00
0146 0041 AF 4A STX 10,U
0147 0043 1F 34 TFR U,S
0148 0045 3B RTI
0149 *
0150 * recieve char from remote drive.
0151 * timeout if no response for approx 1s.
0152 * Entry: no parameters
0153 * Exit: (A) = recieved char, (C)=1 if valid char, (C)=0 if timeout.
0154 *
0155 0046 34 30 RCHAR PSHS X,Y
0156 *
0157 0048 8E 03 E8 LDX #1000 1000x inner loop
0158 004B 10 8E 04 E2 RCHAR1 LDY #DELCON delay constant for inner loop (approx 1ms).
0159 004F 96 00 RCHAR2 LDA ACIAC1 test for recieved char
0160 0051 47 ASRA
0161 0052 25 0A BCS RCHAR3 get character
0162 0054 31 3F LEAY -1,Y else, continue to count delay
0163 0056 26 F7 BNE RCHAR2
0164 0058 30 1F LEAX -1,X
0165 005A 26 EF BNE RCHAR1
0166 005C 35 B0 PULS X,Y,PC return with error if timed out
0167 *
0168 005E 96 01 RCHAR3 LDA ACIAD1 return data (carry bit still set)
0169 0060 35 B0 PULS X,Y,PC
0027 ***************************************************
0028 * START OF ROM *
0029 ***************************************************
0030 *
0031 F800 MONITV EQU MONROM+0 FDB MONITOR
0032 F802 NXTCMV EQU MONROM+2 FDB NEXTCMD
0033 F804 INCHV EQU MONROM+4 FDB INCH
0034 F806 INCHEV EQU MONROM+6 FDB INCHE
0035 F808 INCHKV EQU MONROM+8 FDB INCHEK
0036 F80A OUTCHV EQU MONROM+10 FDB OUTCH
0037 F80C PDATAV EQU MONROM+12 FDB PDATA
0038 F80E PCRLFV EQU MONROM+14 FDB PCRLF
0039 F810 PSTRGV EQU MONROM+16 FDB PSTRNG
0040 F812 LRAV EQU MONROM+18 FDB LRA
0041 *
0042 * Condition code flags
0043 *
0044 0001 CFLAG EQU $01 CARRY FLAG
0045 0002 VFLAG EQU $02 OVERFLOW FLAG
0046 0004 ZFLAG EQU $04 ZERO FLAG
0047 0008 NFLAG EQU $08 NEGATIVE FLAG
0048 0010 IFLAG EQU $10 IRQ MASK CC
0049 0020 HFLAG EQU $20 HALF CARRY
0050 0040 FFLAG EQU $40 FIRQ MASK CC
0051 0080 EFLAG EQU $80 ENTIRE FLAG
0052 *
0053 * Serial Port
0054 *
0055 E000 ACIAC1 EQU ACIAS
0056 E001 ACIAD1 EQU ACIAS+1
0057 04E2 DELCON EQU 1250 Delay (Processor clock in MHz * 50)
0058 *
0059 * XMODEM Control characters
0060 *
0061 0001 SOH EQU $01
0062 0004 EOT EQU $04
0063 0006 ACK EQU $06
0064 0015 NAK EQU $15
0065 0018 CAN EQU $18
0066 *
0067 * Some Disk Constants
0068 *
0069 0100 RMAXTRK EQU 256
0070 00FF RMAXSEC EQU 255
0071 FE01 RTOTSEC EQU RMAXTRK*RMAXSEC-RMAXSEC
0072 *
0073 * RAM SPACE
0074 *
0075 * PUT THIS DOWN THE BOTTOM OF MEMORY
0076 *
0077 0100 ORG $0100
0078 0100 DRVNUM RMB 1
0079 0101 TRACK RMB 1
0080 0102 SECTOR RMB 1
0081 0103 CHKSUM RMB 1
0082 0104 BLKNUM RMB 1 Xmodem block number
0083 0105 BYTCNT RMB 1 Xmodem byte count
0084 0106 XSTATE RMB 2 Xmodem State Vector
0085 0108 DELCNT RMB 3 $00,$00,$00 Xmodem Poll timer
0086 010B MAXTRK RMB 1
0087 010C MAXSEC RMB 1
0088 0200 ORG $0200
0089 *
0090 * SECTOR BUFFER
0091 *
0092 0200 BUFFER RMB 256
0093 *
0094 ****************************************
0095 *
0096 * START OF EXTENSION COMMANDS
0097 *
0098 ****************************************
0099 *
0100 F000 ORG MONEXT
0101 F000 F0 02 FDB NEXTEXT Jump to next extended command
0102 *
0103 ***** NEXTCMD *****
0104 *
0105 F002 AD 9F F8 06 NEXTEXT JSR [INCHEV] GET ONE CHAR. FROM TERMINAL
0106 F006 84 7F ANDA #$7F STRIP PARITY FROM CHAR.
0107 F008 1F 89 TFR A,B
0108 F00A 86 20 LDA #$20
0109 F00C AD 9F F8 0A JSR [OUTCHV] PRNT SPACE
0110 F010 C1 60 CMPB #$60
0111 F012 2F 02 BLE NXTEX0
0112 F014 C0 20 SUBB #$20
0113 *
0114 ***** DO TABLE LOOKUP *****
0115 * FOR COMMAND FUNCTIONS
0116 *
0117 F016 8E F0 2C NXTEX0 LDX #EXTTAB POINT TO JUMP TABLE
0118 F019 E1 80 NXTEX1 CMPB ,X+ DOES COMMAND MATCH TABLE ENTRY ?
0119 F01B 27 0D BEQ JMPEXT BRANCH IF MATCH FOUND
0120 F01D 30 02 LEAX 2,X POINT TO NEXT ENTRY IN TABLE
0121 F01F 8C F0 35 CMPX #EXTEND REACHED END OF TABLE YET ?
0122 F022 26 F5 BNE NXTEX1 IF NOT END, CHECK NEXT ENTRY
0123 F024 8E F0 35 LDX #MSGWHAT POINT TO MSG "WHAT?"
0124 F027 16 02 29 LBRA PDATA1 PRINT MSG AND RETURN
0125 F02A 6E 94 JMPEXT JMP [,X] JUMP TO COMMAND ROUTINE
0126 *
0127 * EXTENDED COMMAND JUMP TABLE
0128 *
0129 F02C EXTTAB EQU *
0130 F02C 42 FCC 'B' BOOT FLEX
0131 F02D F0 3E FDB UBSUB
0132 F02F 46 FCC 'F' FORMAT IDE DISK
0133 F030 F0 EA FDB UFSUB
0134 F032 58 FCC 'X' XMODEM ROM DISK UPLOAD
0135 F033 F2 BC FDB UXSUB
0136 *
0137 F035 EXTEND EQU *
0138 *
0139 F035 57 48 41 54 20 3F MSGWHAT FCC "WHAT ?"
0140 F03B 0A 0D 04 FCB $0A,$0D,$04
0141 *
0142 * GO TO FLEX RESIDENT IN MEMORY
0143 *
0144 F03E 8E CD 00 UBSUB LDX #$CD00
0145 F041 AF 4A STX 10,U
0146 F043 1F 34 TFR U,S
0147 F045 3B RTI
0148 *
0149 * recieve char from remote drive.
0150 * timeout if no response for approx 1s.
0151 * Entry: no parameters
0152 * Exit: (A) = recieved char, (C)=1 if valid char, (C)=0 if timeout.
0153 *
0154 F046 34 30 RCHAR PSHS X,Y
0155 *
0156 F048 8E 03 E8 LDX #1000 1000x inner loop
0157 F04B 10 8E 04 E2 RCHAR1 LDY #DELCON delay constant for inner loop (approx 1ms).
0158 F04F B6 E0 00 RCHAR2 LDA ACIAC1 test for recieved char
0159 F052 47 ASRA
0160 F053 25 0A BCS RCHAR3 get character
0161 F055 31 3F LEAY -1,Y else, continue to count delay
0162 F057 26 F6 BNE RCHAR2
0163 F059 30 1F LEAX -1,X
0164 F05B 26 EE BNE RCHAR1
0165 F05D 35 B0 PULS X,Y,PC return with error if timed out
0166 *
0167 F05F B6 E0 01 RCHAR3 LDA ACIAD1 return data (carry bit still set)
0168 F062 35 B0 PULS X,Y,PC
0169 *
0170 *
0171 *
0172 * transmit char to remote drive.
0173 * timeout if no response for approx 1s. (allows for use of hardware flow control)
0174 * Entry: (A) = char to transmit
0175 * Exit: (A) = recieved char, (C)=1 if valid char, (C)=0 if timeout.
0176 *
0177 0062 34 30 SCHAR PSHS X,Y
0178 0064 34 02 PSHS A
0179 *
0180 0066 8E 03 E8 LDX #1000 1000x inner loop
0181 0069 10 8E 04 E2 SCHAR1 LDY #DELCON delay constant for inner loop (approx 1ms).
0182 006D 96 00 SCHAR2 LDA ACIAC1 test for space in transmit FIFO
0183 006F 47 ASRA
0184 0070 47 ASRA
0185 0071 25 0C BCS SCHAR3 send character
0186 0073 31 3F LEAY -1,Y else, continue to count delay
0187 0075 26 F6 BNE SCHAR2
0188 0077 30 1F LEAX -1,X
0189 0079 26 EE BNE SCHAR1
0190 007B 35 02 PULS A
0191 007D 35 B0 PULS X,Y,PC return with error if timed out
0192 *
0193 007F 35 02 SCHAR3 PULS A
0194 0081 97 01 STA ACIAD1 send data (carry bit still set)
0195 0083 35 B0 PULS X,Y,PC
0196 *
0197 ** 'UF' Format IDE Drive to FLEX standard.
0198 *
0199 0085 0A 0D DISFOS FCB $0A,$0D
0200 0087 46 6F 72 6D 61 74 FCC 'Formating IDE disk... '
0171 * transmit char to remote drive.
0172 * timeout if no response for approx 1s. (allows for use of hardware flow control)
0173 * Entry: (A) = char to transmit
0174 * Exit: (A) = recieved char, (C)=1 if valid char, (C)=0 if timeout.
0175 *
0176 F064 34 30 SCHAR PSHS X,Y
0177 F066 34 02 PSHS A
0178 *
0179 F068 8E 03 E8 LDX #1000 1000x inner loop
0180 F06B 10 8E 04 E2 SCHAR1 LDY #DELCON delay constant for inner loop (approx 1ms).
0181 F06F B6 E0 00 SCHAR2 LDA ACIAC1 test for space in transmit FIFO
0182 F072 47 ASRA
0183 F073 47 ASRA
0184 F074 25 0C BCS SCHAR3 send character
0185 F076 31 3F LEAY -1,Y else, continue to count delay
0186 F078 26 F5 BNE SCHAR2
0187 F07A 30 1F LEAX -1,X
0188 F07C 26 ED BNE SCHAR1
0189 F07E 35 02 PULS A
0190 F080 35 B0 PULS X,Y,PC return with error if timed out
0191 *
0192 F082 35 02 SCHAR3 PULS A
0193 F084 B7 E0 01 STA ACIAD1 send data (carry bit still set)
0194 F087 35 B0 PULS X,Y,PC
0195 *
0196 ** 'UF' Format IDE Drive to FLEX standard.
0197 *
0198 F089 0A 0D DISFOS FCB $0A,$0D
0199 F08B 46 6F 72 6D 61 74 FCC 'Formating IDE disk... '
69 6E 67 20 49 44
45 20 64 69 73 6B
2E 2E 2E 20
0201 009D 0A 0D FCB $0A,$0D
0202 009F 44 72 69 76 65 20 FCC 'Drive Number ?'
0200 F0A1 0A 0D FCB $0A,$0D
0201 F0A3 44 72 69 76 65 20 FCC 'Drive Number ?'
4E 75 6D 62 65 72
20 3F
0203 00AD 04 FCB 4
0204 00AE 0A 0D 04 MESS6 FCB $0A,$0D,4
0205 00B1 49 44 45 20 64 72 FCC 'IDE drive not allocated! '
0202 F0B1 04 FCB 4
0203 F0B2 0A 0D 04 MESS6 FCB $0A,$0D,4
0204 F0B5 49 44 45 20 64 72 FCC 'IDE drive not allocated! '
69 76 65 20 6E 6F
74 20 61 6C 6C 6F
63 61 74 65 64 21
20
0206 00CA 04 FCB 4
0207 00CB 0A 0D UFMSG1 FCB $0A,$0D
0208 00CD 46 6F 72 6D 61 74 FCC 'Format Complete'
0205 F0CE 04 FCB 4
0206 F0CF 0A 0D UFMSG1 FCB $0A,$0D
0207 F0D1 46 6F 72 6D 61 74 FCC 'Format Complete'
20 43 6F 6D 70 6C
65 74 65
0209 00DC 04 FCB 4
0210 00DD 49 44 45 44 49 53 VOLMSG FCC 'IDEDISK '
0208 F0E0 04 FCB 4
0209 F0E1 49 44 45 44 49 53 VOLMSG FCC 'IDEDISK '
4B 20
0211 00E5 04 FCB 4
0212 *
0213 00E6 BD 04 B2 UFSUB JSR INITDR
0214 00E9 8E 00 85 LDX #DISFOS
0215 00EC BD 02 48 JSR PDATA1
0216 00EF 17 FF 54 UFSUB1 LBSR RCHAR
0217 00F2 24 FB BCC UFSUB1
0218 00F4 17 FF 6B LBSR SCHAR
0219 00F7 81 30 CMPA #'0'
0220 00F9 10 25 00 EF LBLO UFEXIT
0221 00FD 81 33 CMPA #'3'
0222 00FF 10 22 00 E9 LBHI UFEXIT
0223 0103 80 30 SUBA #'0'
0224 0105 1F 89 TFR A,B
0225 0107 F7 01 00 STB DRVNUM
0226 010A 8E 00 FD LDX #DRVNUM-3
0227 010D BD 05 2F JSR DRVSEL
0228 *
0229 * set up free chain
0230 *
0231 0110 8E 02 00 LDX #BUFFER clear out buffer
0232 0113 4F CLRA
0233 0114 5F CLRB
0234 0115 A7 80 DFL1 STA 0,X+
0235 0117 5A DECB
0236 0118 26 FB BNE DFL1
0237 *
0238 011A 7F 01 01 CLR TRACK
0239 011D 86 01 LDA #1
0240 011F B7 01 02 STA SECTOR
0241 0122 8E 02 00 DFL2 LDX #BUFFER
0242 0125 B6 01 01 LDA TRACK
0243 0128 A7 84 STA 0,X
0244 012A B6 01 02 LDA SECTOR
0245 012D 4C INCA
0246 012E 81 00 CMPA #RMAXSEC+1 last sector on track?
0247 0130 26 04 BNE DFL3
0248 0132 6C 84 INC 0,X
0249 0134 86 01 LDA #1
0250 0136 A7 01 DFL3 STA 1,X
0251 0138 B6 01 01 LDA TRACK
0252 013B F6 01 02 LDB SECTOR
0253 013E BD 05 0A JSR WRITSC
0254 0141 7C 01 02 INC SECTOR
0255 0144 B6 01 02 LDA SECTOR
0256 0147 81 00 CMPA #RMAXSEC+1
0257 0149 26 D7 BNE DFL2
0258 014B 86 01 LDA #1
0259 014D B7 01 02 STA SECTOR
0260 0150 7C 01 01 INC TRACK
0261 0153 B6 01 01 LDA TRACK
0262 0156 81 00 CMPA #RMAXTRK
0263 0158 26 C8 BNE DFL2
0264 * break free chain at last track/sector
0265 015A 8E 02 00 LDX #BUFFER
0266 015D 86 FF LDA #RMAXTRK-1
0267 015F C6 FF LDB #RMAXSEC
0268 0161 BD 04 E6 JSR READSC
0269 0164 8E 02 00 LDX #BUFFER
0270 0167 6F 84 CLR 0,X
0271 0169 6F 01 CLR 1,X
0272 016B 86 FF LDA #RMAXTRK-1
0273 016D C6 FF LDB #RMAXSEC
0274 016F BD 05 0A JSR WRITSC
0275 * set up sector structure, SIR, directory etc
0276 0172 8E 02 00 LDX #BUFFER
0277 0175 4F CLRA
0278 0176 C6 FF LDB #RMAXSEC
0279 0178 BD 04 E6 JSR READSC
0280 017B 8E 02 00 LDX #BUFFER
0281 017E 6F 84 CLR 0,X break end of directory chain
0282 0180 6F 01 CLR 1,X
0283 0182 4F CLRA
0284 0183 C6 FF LDB #RMAXSEC
0285 0185 BD 05 0A JSR WRITSC
0286 *
0287 0188 8E 02 00 LDX #BUFFER
0288 018B 4F CLRA
0289 018C C6 03 LDB #3 set up SIR
0290 018E BD 04 E6 JSR READSC
0291 0191 8E 02 00 LDX #BUFFER
0292 0194 6F 84 CLR 0,X break forward link
0293 0196 6F 01 CLR 1,X
0294 *
0295 0198 34 20 PSHS Y
0296 019A 10 8E 00 DD LDY #VOLMSG
0297 019E C6 10 LDB #16
0298 01A0 A6 A0 DFL4 LDA ,Y+
0299 01A2 A7 85 STA B,X
0300 01A4 5C INCB
0301 01A5 C1 18 CMPB #24
0302 01A7 26 F7 BNE DFL4
0303 01A9 35 20 PULS Y
0304 *
0305 01AB 4F CLRA
0306 01AC F6 01 00 LDB DRVNUM volume number
0307 01AF ED 88 1B STD 27,X
0308 *
0309 01B2 CC 01 01 LDD #$0101 first trk/sec 01-01
0310 01B5 ED 88 1D STD 29,X
0311 01B8 86 FF LDA #RMAXTRK-1
0312 01BA C6 FF LDB #RMAXSEC
0313 01BC ED 88 1F STD 31,X
0314 01BF ED 88 26 STD 38,X
0315 01C2 CC FE 01 LDD #RTOTSEC total DATA sectors (2912-14)
0316 01C5 ED 88 21 STD 33,X
0317 *
0318 01C8 86 01 LDA #01 month set default creation date (SYS09's birthday!)
0319 01CA A7 88 23 STA 35,X
0320 01CD 86 07 LDA #07 day
0321 01CF A7 88 24 STA 36,X
0322 01D2 86 07 LDA #07 year
0323 01D4 A7 88 25 STA 37,X
0324 *
0325 01D7 4F RF3 CLRA
0326 01D8 C6 03 LDB #3
0327 01DA BD 05 0A JSR WRITSC
0328 *
0329 * Not sure what this is about
0330 * put bootstrap on track 0 sector 1
0331 *
0332 * LDX #BUFFER
0333 * CLRA
0334 * LDB #1
0335 * JSR READSC
0336 * LDX #BUFFER
0337 * LDA #$AA set the init flag
0338 * STA 0,X
0339 * LDA #$55
0340 * STA 1,X
0341 * CLRA
0342 * LDB #1
0343 * JSR WRITSC
0344 *
0345 * Write Boot sector
0346 *
0347 01DD 8E 07 00 LDX #BOOT
0348 01E0 4F CLRA TRACK 0
0349 01E1 C6 01 LDB #$01 SECTOR 1
0350 01E3 B7 01 01 STA TRACK
0351 01E6 F7 01 02 STB SECTOR
0352 01E9 17 03 1E LBSR WRITSC
0353 *
0354 01EC 8E 00 CB UFEXIT LDX #UFMSG1
0355 01EF 7E 02 48 JMP PDATA1
0356 *
0357 * ACIA INPUT TEST
0358 *
0359 01F2 96 00 INTEST LDA ACIAC1
0360 01F4 85 01 BITA #$01
0361 01F6 39 RTS
0362 *
0363 * RESET ACIA
0364 *
0365 01F7 86 03 ACIRST LDA #$03 master reset
0366 01F9 97 00 STA ACIAC1
0367 01FB 86 11 LDA #$11
0368 01FD 97 00 STA ACIAC1
0369 01FF 39 RTS
0370 *
0371 * ACIA INPUT
0372 *
0373 0200 86 10 INTER LDA #16
0374 0202 B7 01 08 STA DELCNT+0
0375 0205 7F 01 09 CLR DELCNT+1
0376 0208 7F 01 0A CLR DELCNT+2
0377 020B 96 00 INTER0 LDA ACIAC1
0378 020D 85 01 BITA #$01
0379 020F 26 08 BNE INTER1
0380 0211 85 78 BITA #$78
0381 0213 27 09 BEQ INTER2
0382 0215 8D E0 BSR ACIRST
0383 0217 20 E7 BRA INTER
0384 *
0385 0219 96 01 INTER1 LDA ACIAD1
0386 021B 1C FD ANDCC #$FF-VFLAG
0387 021D 39 RTS
0388 *
0389 021E 7A 01 0A INTER2 DEC DELCNT+2
0390 0221 26 E8 BNE INTER0
0391 0223 7A 01 09 DEC DELCNT+1
0392 0226 26 E3 BNE INTER0
0393 0228 7A 01 08 DEC DELCNT+0
0394 022B 26 DE BNE INTER0
0395 022D 4F CLRA
0396 022E 1A 02 ORCC #VFLAG
0397 0230 39 RTS
0398 *
0399 * ACIA OUTPUT
0400 *
0401 0231 34 02 OUTTER PSHS A
0402 *
0403 0233 96 00 OUTTE1 LDA ACIAC1
0404 0235 85 02 BITA #$02
0405 0237 26 08 BNE OUTTE2
0406 0239 85 78 BITA #$78
0407 023B 27 F6 BEQ OUTTE1
0408 023D 8D B8 BSR ACIRST
0409 023F 20 F2 BRA OUTTE1
0410 *
0411 0241 35 02 OUTTE2 PULS A
0412 0243 97 01 STA ACIAD1
0413 0245 39 RTS
0414 *
0415 * Print Data
0416 *
0417 0246 8D E9 PDATA0 BSR OUTTER
0418 0248 A6 80 PDATA1 LDA ,X+
0419 024A 81 04 CMPA #$04
0420 024C 26 F8 BNE PDATA0
0421 024E 39 RTS
0210 F0E9 04 FCB 4
0211 *
0212 F0EA BD F4 BD UFSUB JSR INITDR
0213 F0ED 8E F0 89 LDX #DISFOS
0214 F0F0 BD F2 53 JSR PDATA1
0215 F0F3 17 FF 50 UFSUB1 LBSR RCHAR
0216 F0F6 24 FB BCC UFSUB1
0217 F0F8 17 FF 69 LBSR SCHAR
0218 F0FB 81 30 CMPA #'0'
0219 F0FD 10 25 00 EF LBLO UFEXIT
0220 F101 81 33 CMPA #'3'
0221 F103 10 22 00 E9 LBHI UFEXIT
0222 F107 80 30 SUBA #'0'
0223 F109 1F 89 TFR A,B
0224 F10B F7 01 00 STB DRVNUM
0225 F10E 8E 00 FD LDX #DRVNUM-3
0226 F111 BD F5 3A JSR DRVSEL
0227 *
0228 * set up free chain
0229 *
0230 F114 8E 02 00 LDX #BUFFER clear out buffer
0231 F117 4F CLRA
0232 F118 5F CLRB
0233 F119 A7 80 DFL1 STA 0,X+
0234 F11B 5A DECB
0235 F11C 26 FB BNE DFL1
0236 *
0237 F11E 7F 01 01 CLR TRACK
0238 F121 86 01 LDA #1
0239 F123 B7 01 02 STA SECTOR
0240 F126 8E 02 00 DFL2 LDX #BUFFER
0241 F129 B6 01 01 LDA TRACK
0242 F12C A7 84 STA 0,X
0243 F12E B6 01 02 LDA SECTOR
0244 F131 4C INCA
0245 F132 81 00 CMPA #RMAXSEC+1 last sector on track?
0246 F134 26 04 BNE DFL3
0247 F136 6C 84 INC 0,X
0248 F138 86 01 LDA #1
0249 F13A A7 01 DFL3 STA 1,X
0250 F13C B6 01 01 LDA TRACK
0251 F13F F6 01 02 LDB SECTOR
0252 F142 BD F5 15 JSR WRITSC
0253 F145 7C 01 02 INC SECTOR
0254 F148 B6 01 02 LDA SECTOR
0255 F14B 81 00 CMPA #RMAXSEC+1
0256 F14D 26 D7 BNE DFL2
0257 F14F 86 01 LDA #1
0258 F151 B7 01 02 STA SECTOR
0259 F154 7C 01 01 INC TRACK
0260 F157 B6 01 01 LDA TRACK
0261 F15A 81 00 CMPA #RMAXTRK
0262 F15C 26 C8 BNE DFL2
0263 * break free chain at last track/sector
0264 F15E 8E 02 00 LDX #BUFFER
0265 F161 86 FF LDA #RMAXTRK-1
0266 F163 C6 FF LDB #RMAXSEC
0267 F165 BD F4 F1 JSR READSC
0268 F168 8E 02 00 LDX #BUFFER
0269 F16B 6F 84 CLR 0,X
0270 F16D 6F 01 CLR 1,X
0271 F16F 86 FF LDA #RMAXTRK-1
0272 F171 C6 FF LDB #RMAXSEC
0273 F173 BD F5 15 JSR WRITSC
0274 * set up sector structure, SIR, directory etc
0275 F176 8E 02 00 LDX #BUFFER
0276 F179 4F CLRA
0277 F17A C6 FF LDB #RMAXSEC
0278 F17C BD F4 F1 JSR READSC
0279 F17F 8E 02 00 LDX #BUFFER
0280 F182 6F 84 CLR 0,X break end of directory chain
0281 F184 6F 01 CLR 1,X
0282 F186 4F CLRA
0283 F187 C6 FF LDB #RMAXSEC
0284 F189 BD F5 15 JSR WRITSC
0285 *
0286 F18C 8E 02 00 LDX #BUFFER
0287 F18F 4F CLRA
0288 F190 C6 03 LDB #3 set up SIR
0289 F192 BD F4 F1 JSR READSC
0290 F195 8E 02 00 LDX #BUFFER
0291 F198 6F 84 CLR 0,X break forward link
0292 F19A 6F 01 CLR 1,X
0293 *
0294 F19C 34 20 PSHS Y
0295 F19E 10 8E F0 E1 LDY #VOLMSG
0296 F1A2 C6 10 LDB #16
0297 F1A4 A6 A0 DFL4 LDA ,Y+
0298 F1A6 A7 85 STA B,X
0299 F1A8 5C INCB
0300 F1A9 C1 18 CMPB #24
0301 F1AB 26 F7 BNE DFL4
0302 F1AD 35 20 PULS Y
0303 *
0304 F1AF 4F CLRA
0305 F1B0 F6 01 00 LDB DRVNUM volume number
0306 F1B3 ED 88 1B STD 27,X
0307 *
0308 F1B6 CC 01 01 LDD #$0101 first trk/sec 01-01
0309 F1B9 ED 88 1D STD 29,X
0310 F1BC 86 FF LDA #RMAXTRK-1
0311 F1BE C6 FF LDB #RMAXSEC
0312 F1C0 ED 88 1F STD 31,X
0313 F1C3 ED 88 26 STD 38,X
0314 F1C6 CC FE 01 LDD #RTOTSEC total DATA sectors (2912-14)
0315 F1C9 ED 88 21 STD 33,X
0316 *
0317 F1CC 86 01 LDA #01 month set default creation date (SYS09's birthday!)
0318 F1CE A7 88 23 STA 35,X
0319 F1D1 86 07 LDA #07 day
0320 F1D3 A7 88 24 STA 36,X
0321 F1D6 86 07 LDA #07 year
0322 F1D8 A7 88 25 STA 37,X
0323 *
0324 F1DB 4F RF3 CLRA
0325 F1DC C6 03 LDB #3
0326 F1DE BD F5 15 JSR WRITSC
0327 *
0328 * Not sure what this is about
0329 * put bootstrap on track 0 sector 1
0330 *
0331 * LDX #BUFFER
0332 * CLRA
0333 * LDB #1
0334 * JSR READSC
0335 * LDX #BUFFER
0336 * LDA #$AA set the init flag
0337 * STA 0,X
0338 * LDA #$55
0339 * STA 1,X
0340 * CLRA
0341 * LDB #1
0342 * JSR WRITSC
0343 *
0344 * Write Boot sector
0345 *
0346 F1E1 8E F7 00 LDX #BOOT
0347 F1E4 4F CLRA TRACK 0
0348 F1E5 C6 01 LDB #$01 SECTOR 1
0349 F1E7 B7 01 01 STA TRACK
0350 F1EA F7 01 02 STB SECTOR
0351 F1ED 17 03 25 LBSR WRITSC
0352 *
0353 F1F0 8E F0 CF UFEXIT LDX #UFMSG1
0354 F1F3 7E F2 53 JMP PDATA1
0355 *
0356 * ACIA INPUT TEST
0357 *
0358 F1F6 B6 E0 00 INTEST LDA ACIAC1
0359 F1F9 85 01 BITA #$01
0360 F1FB 39 RTS
0361 *
0362 * RESET ACIA
0363 *
0364 F1FC 86 03 ACIRST LDA #$03 master reset
0365 F1FE B7 E0 00 STA ACIAC1
0366 F201 86 11 LDA #$11
0367 F203 B7 E0 00 STA ACIAC1
0368 F206 39 RTS
0369 *
0370 * ACIA INPUT
0371 *
0372 F207 86 10 INTER LDA #16
0373 F209 B7 01 08 STA DELCNT+0
0374 F20C 7F 01 09 CLR DELCNT+1
0375 F20F 7F 01 0A CLR DELCNT+2
0376 F212 B6 E0 00 INTER0 LDA ACIAC1
0377 F215 85 01 BITA #$01
0378 F217 26 08 BNE INTER1
0379 F219 85 78 BITA #$78
0380 F21B 27 0A BEQ INTER2
0381 F21D 8D DD BSR ACIRST
0382 F21F 20 E6 BRA INTER
0383 *
0384 F221 B6 E0 01 INTER1 LDA ACIAD1
0385 F224 1C FD ANDCC #$FF-VFLAG
0386 F226 39 RTS
0387 *
0388 F227 7A 01 0A INTER2 DEC DELCNT+2
0389 F22A 26 E6 BNE INTER0
0390 F22C 7A 01 09 DEC DELCNT+1
0391 F22F 26 E1 BNE INTER0
0392 F231 7A 01 08 DEC DELCNT+0
0393 F234 26 DC BNE INTER0
0394 F236 4F CLRA
0395 F237 1A 02 ORCC #VFLAG
0396 F239 39 RTS
0397 *
0398 * ACIA OUTPUT
0399 *
0400 F23A 34 02 OUTTER PSHS A
0401 *
0402 F23C B6 E0 00 OUTTE1 LDA ACIAC1
0403 F23F 85 02 BITA #$02
0404 F241 26 08 BNE OUTTE2
0405 F243 85 78 BITA #$78
0406 F245 27 F5 BEQ OUTTE1
0407 F247 8D B3 BSR ACIRST
0408 F249 20 F1 BRA OUTTE1
0409 *
0410 F24B 35 02 OUTTE2 PULS A
0411 F24D B7 E0 01 STA ACIAD1
0412 F250 39 RTS
0413 *
0414 * Print Data
0415 *
0416 F251 8D E7 PDATA0 BSR OUTTER
0417 F253 A6 80 PDATA1 LDA ,X+
0418 F255 81 04 CMPA #$04
0419 F257 26 F8 BNE PDATA0
0420 F259 39 RTS
0421 *
0422 *
0423 *
0424 ** 'UX' Xmodem IDE Disk upload
0425 *
0426 024F 0D 0A UXMES0 FCB $0D,$0A
0427 0251 58 6D 6F 64 65 6D FCC 'Xmodem IDE Disk Upload'
0423 ** 'UX' Xmodem IDE Disk upload
0424 *
0425 F25A 0D 0A UXMES0 FCB $0D,$0A
0426 F25C 58 6D 6F 64 65 6D FCC 'Xmodem IDE Disk Upload'
20 49 44 45 20 44
69 73 6B 20 55 70
6C 6F 61 64
0428 0267 04 FCB 4
0429 0268 0D 0A UXMES1 FCB $0D,$0A
0430 026A 55 70 6C 6F 61 64 FCC 'Upload Complete'
0427 F272 04 FCB 4
0428 F273 0D 0A UXMES1 FCB $0D,$0A
0429 F275 55 70 6C 6F 61 64 FCC 'Upload Complete'
20 43 6F 6D 70 6C
65 74 65
0431 0279 04 FCB 4
0432 027A 0D 0A UXMES2 FCB $0D,$0A
0433 027C 55 70 6C 6F 61 64 FCC 'Upload Error'
0430 F284 04 FCB 4
0431 F285 0D 0A UXMES2 FCB $0D,$0A
0432 F287 55 70 6C 6F 61 64 FCC 'Upload Error'
20 45 72 72 6F 72
0434 0288 04 FCB 4
0435 0289 0D 0A UXMSG3 FCB $0D,$0A
0436 028B 44 72 69 76 65 20 FCC 'Drive Number :'
0433 F293 04 FCB 4
0434 F294 0D 0A UXMSG3 FCB $0D,$0A
0435 F296 44 72 69 76 65 20 FCC 'Drive Number :'
4E 75 6D 62 65 72
20 3A
0437 0299 04 FCB 4
0438 029A 0D 0A UXMSG4 FCB $0D,$0A
0439 029C 41 72 65 20 59 6F FCC 'Are You Sure ? (Y/N)'
0436 F2A4 04 FCB 4
0437 F2A5 0D 0A UXMSG4 FCB $0D,$0A
0438 F2A7 41 72 65 20 59 6F FCC 'Are You Sure ? (Y/N)'
75 20 53 75 72 65
20 3F 20 28 59 2F
4E 29
0440 02B0 04 FCB 4
0441 *
0442 * Print Banner
0443 *
0444 02B1 8E 02 4F UXSUB LDX #UXMES0
0445 02B4 17 FF 91 LBSR PDATA1
0446 *
0447 * Prompt for Disk drive number (0 to 3)
0448 *
0449 02B7 8E 02 89 LDX #UXMSG3
0450 02BA 17 FF 8B LBSR PDATA1
0451 02BD 17 FF 40 UXSUB1 LBSR INTER
0452 02C0 29 FB BVS UXSUB1
0453 02C2 17 FF 6C LBSR OUTTER
0454 02C5 81 30 CMPA #'0
0455 02C7 10 25 01 2E LBLO UXEXIT
0456 02CB 81 33 CMPA #'3
0457 02CD 10 22 01 28 LBHI UXEXIT
0458 02D1 80 30 SUBA #'0
0459 02D3 B7 01 00 STA DRVNUM
0460 *
0461 * Report selected drive
0462 *
0463 02D6 8E 02 89 LDX #UXMSG3
0464 02D9 17 FF 6C LBSR PDATA1
0465 02DC B6 01 00 LDA DRVNUM
0466 02DF 8B 30 ADDA #'0
0467 02E1 17 FF 4D LBSR OUTTER
0468 *
0469 * Ask for confirmation (Y/N)
0470 *
0471 02E4 8E 02 9A LDX #UXMSG4
0472 02E7 17 FF 5E LBSR PDATA1
0473 02EA 17 FF 13 UXSUB2 LBSR INTER
0474 02ED 29 FB BVS UXSUB2
0475 02EF 17 FF 3F LBSR OUTTER
0476 02F2 84 5F ANDA #$5F
0477 02F4 81 4E CMPA #'N
0478 02F6 10 27 00 FF LBEQ UXEXIT
0479 02FA 81 59 CMPA #'Y
0480 02FC 26 B3 BNE UXSUB
0481 *
0482 * We have confirmation ... now load the disk image
0483 *
0484 02FE 17 01 B1 LBSR INITDR
0485 0301 CE 04 22 LDU #XSTST
0486 0304 FF 01 06 STU XSTATE
0487 0307 86 01 LDA #1
0488 0309 B7 01 04 STA BLKNUM
0489 *
0490 * Sector1
0491 *
0492 030C 8E 02 00 LDX #BUFFER
0493 *
0494 030F 4F CLRA TRACK 0
0495 0310 C6 01 LDB #$01 SECTOR 1
0496 0312 B7 01 01 STA TRACK
0497 0315 F7 01 02 STB SECTOR
0498 *
0499 0318 17 00 EA LBSR XREAD
0500 031B 10 25 00 E0 LBCS UXERR
0501 031F 17 01 87 LBSR XACK
0502 0322 17 00 E0 LBSR XREAD
0503 0325 10 25 00 D6 LBCS UXERR
0504 *
0505 0329 8E 02 00 LDX #BUFFER
0506 032C B6 01 01 LDA TRACK
0507 032F F6 01 02 LDB SECTOR
0508 0332 17 01 D5 LBSR WRITSC
0509 0335 17 01 71 LBSR XACK
0510 *
0511 * Sector 2
0512 *
0513 0338 8E 02 00 LDX #BUFFER
0514 *
0515 033B B6 01 01 LDA TRACK
0516 033E F6 01 02 LDB SECTOR
0517 0341 5C INCB
0518 0342 B7 01 01 STA TRACK
0519 0345 F7 01 02 STB SECTOR
0520 *
0521 0348 17 00 BA LBSR XREAD
0522 034B 10 25 00 B0 LBCS UXERR
0523 034F 17 01 57 LBSR XACK
0524 0352 17 00 B0 LBSR XREAD
0525 0355 10 25 00 A6 LBCS UXERR
0526 *
0527 0359 8E 02 00 LDX #BUFFER
0528 035C B6 01 01 LDA TRACK
0529 035F F6 01 02 LDB SECTOR
0530 0362 17 01 A5 LBSR WRITSC
0531 *
0532 0365 17 01 41 LBSR XACK
0533 *
0534 * Sector 3 - SIR
0535 *
0536 0368 8E 02 00 LDX #BUFFER
0537 *
0538 036B B6 01 01 LDA TRACK
0539 036E F6 01 02 LDB SECTOR
0540 0371 5C INCB
0541 0372 B7 01 01 STA TRACK
0542 0375 F7 01 02 STB SECTOR
0543 *
0544 0378 17 00 8A LBSR XREAD
0545 037B 10 25 00 80 LBCS UXERR
0546 037F 17 01 27 LBSR XACK
0547 0382 17 00 80 LBSR XREAD
0548 0385 10 25 00 76 LBCS UXERR
0549 *
0550 0389 8E 02 00 LDX #BUFFER
0551 038C A6 88 26 LDA 38,X
0552 038F 4C INCA
0553 0390 B7 01 0B STA MAXTRK
0554 0393 E6 88 27 LDB 39,X
0555 0396 5C INCB
0556 0397 F7 01 0C STB MAXSEC
0557 039A B6 01 01 LDA TRACK
0558 039D F6 01 02 LDB SECTOR
0559 03A0 17 01 67 LBSR WRITSC
0560 *
0561 03A3 17 01 03 LBSR XACK
0562 *
0563 * Sector 4 to Last Track & Sector
0439 F2BB 04 FCB 4
0440 *
0441 * Print Banner
0442 *
0443 F2BC 8E F2 5A UXSUB LDX #UXMES0
0444 F2BF 17 FF 91 LBSR PDATA1
0445 *
0446 * Prompt for Disk drive number (0 to 3)
0447 *
0448 F2C2 8E F2 94 LDX #UXMSG3
0449 F2C5 17 FF 8B LBSR PDATA1
0450 F2C8 17 FF 3C UXSUB1 LBSR INTER
0451 F2CB 29 FB BVS UXSUB1
0452 F2CD 17 FF 6A LBSR OUTTER
0453 F2D0 81 30 CMPA #'0
0454 F2D2 10 25 01 2E LBLO UXEXIT
0455 F2D6 81 33 CMPA #'3
0456 F2D8 10 22 01 28 LBHI UXEXIT
0457 F2DC 80 30 SUBA #'0
0458 F2DE B7 01 00 STA DRVNUM
0459 *
0460 * Report selected drive
0461 *
0462 F2E1 8E F2 94 LDX #UXMSG3
0463 F2E4 17 FF 6C LBSR PDATA1
0464 F2E7 B6 01 00 LDA DRVNUM
0465 F2EA 8B 30 ADDA #'0
0466 F2EC 17 FF 4B LBSR OUTTER
0467 *
0468 * Ask for confirmation (Y/N)
0469 *
0470 F2EF 8E F2 A5 LDX #UXMSG4
0471 F2F2 17 FF 5E LBSR PDATA1
0472 F2F5 17 FF 0F UXSUB2 LBSR INTER
0473 F2F8 29 FB BVS UXSUB2
0474 F2FA 17 FF 3D LBSR OUTTER
0475 F2FD 84 5F ANDA #$5F
0476 F2FF 81 4E CMPA #'N
0477 F301 10 27 00 FF LBEQ UXEXIT
0478 F305 81 59 CMPA #'Y
0479 F307 26 B3 BNE UXSUB
0480 *
0481 * We have confirmation ... now load the disk image
0482 *
0483 F309 17 01 B1 LBSR INITDR
0484 F30C CE F4 2D LDU #XSTST
0485 F30F FF 01 06 STU XSTATE
0486 F312 86 01 LDA #1
0487 F314 B7 01 04 STA BLKNUM
0488 *
0489 * Sector1
0490 *
0491 F317 8E 02 00 LDX #BUFFER
0492 *
0493 F31A 4F CLRA TRACK 0
0494 F31B C6 01 LDB #$01 SECTOR 1
0495 F31D B7 01 01 STA TRACK
0496 F320 F7 01 02 STB SECTOR
0497 *
0498 F323 17 00 EA LBSR XREAD
0499 F326 10 25 00 E0 LBCS UXERR
0500 F32A 17 01 87 LBSR XACK
0501 F32D 17 00 E0 LBSR XREAD
0502 F330 10 25 00 D6 LBCS UXERR
0503 *
0504 F334 8E 02 00 LDX #BUFFER
0505 F337 B6 01 01 LDA TRACK
0506 F33A F6 01 02 LDB SECTOR
0507 F33D 17 01 D5 LBSR WRITSC
0508 F340 17 01 71 LBSR XACK
0509 *
0510 * Sector 2
0511 *
0512 F343 8E 02 00 LDX #BUFFER
0513 *
0514 F346 B6 01 01 LDA TRACK
0515 F349 F6 01 02 LDB SECTOR
0516 F34C 5C INCB
0517 F34D B7 01 01 STA TRACK
0518 F350 F7 01 02 STB SECTOR
0519 *
0520 F353 17 00 BA LBSR XREAD
0521 F356 10 25 00 B0 LBCS UXERR
0522 F35A 17 01 57 LBSR XACK
0523 F35D 17 00 B0 LBSR XREAD
0524 F360 10 25 00 A6 LBCS UXERR
0525 *
0526 F364 8E 02 00 LDX #BUFFER
0527 F367 B6 01 01 LDA TRACK
0528 F36A F6 01 02 LDB SECTOR
0529 F36D 17 01 A5 LBSR WRITSC
0530 *
0531 F370 17 01 41 LBSR XACK
0532 *
0533 * Sector 3 - SIR
0534 *
0535 F373 8E 02 00 LDX #BUFFER
0536 *
0537 F376 B6 01 01 LDA TRACK
0538 F379 F6 01 02 LDB SECTOR
0539 F37C 5C INCB
0540 F37D B7 01 01 STA TRACK
0541 F380 F7 01 02 STB SECTOR
0542 *
0543 F383 17 00 8A LBSR XREAD
0544 F386 10 25 00 80 LBCS UXERR
0545 F38A 17 01 27 LBSR XACK
0546 F38D 17 00 80 LBSR XREAD
0547 F390 10 25 00 76 LBCS UXERR
0548 *
0549 F394 8E 02 00 LDX #BUFFER
0550 F397 A6 88 26 LDA 38,X
0551 F39A 4C INCA
0552 F39B B7 01 0B STA MAXTRK
0553 F39E E6 88 27 LDB 39,X
0554 F3A1 5C INCB
0555 F3A2 F7 01 0C STB MAXSEC
0556 F3A5 B6 01 01 LDA TRACK
0557 F3A8 F6 01 02 LDB SECTOR
0558 F3AB 17 01 67 LBSR WRITSC
0559 *
0560 F3AE 17 01 03 LBSR XACK
0561 *
0562 * Sector 4 to Last Track & Sector
0563 *
0564 *
0565 *
0566 03A6 B6 01 01 LDA TRACK
0567 03A9 F6 01 02 LDB SECTOR
0568 03AC 5C INCB
0569 *
0570 03AD 8E 02 00 UXLOOP LDX #BUFFER
0571 03B0 B7 01 01 STA TRACK
0572 03B3 F7 01 02 STB SECTOR
0573 *
0574 03B6 17 00 4C LBSR XREAD
0575 03B9 10 25 00 42 LBCS UXERR
0576 03BD 17 00 E9 LBSR XACK
0577 03C0 17 00 42 LBSR XREAD
0578 03C3 10 25 00 38 LBCS UXERR
0579 *
0580 03C7 8E 02 00 LDX #BUFFER
0581 03CA B6 01 01 LDA TRACK
0582 03CD F6 01 02 LDB SECTOR
0583 03D0 17 01 37 LBSR WRITSC
0584 03D3 17 00 D3 LBSR XACK
0585 *
0586 03D6 B6 01 01 LDA TRACK
0587 03D9 F6 01 02 LDB SECTOR
0588 03DC 5C INCB
0589 03DD F1 01 0C CMPB MAXSEC
0590 03E0 26 CB BNE UXLOOP
0591 03E2 C6 01 LDB #1
0592 03E4 4C INCA
0593 03E5 B1 01 0B CMPA MAXTRK
0594 03E8 26 C3 BNE UXLOOP
0565 F3B1 B6 01 01 LDA TRACK
0566 F3B4 F6 01 02 LDB SECTOR
0567 F3B7 5C INCB
0568 *
0569 F3B8 8E 02 00 UXLOOP LDX #BUFFER
0570 F3BB B7 01 01 STA TRACK
0571 F3BE F7 01 02 STB SECTOR
0572 *
0573 F3C1 17 00 4C LBSR XREAD
0574 F3C4 10 25 00 42 LBCS UXERR
0575 F3C8 17 00 E9 LBSR XACK
0576 F3CB 17 00 42 LBSR XREAD
0577 F3CE 10 25 00 38 LBCS UXERR
0578 *
0579 F3D2 8E 02 00 LDX #BUFFER
0580 F3D5 B6 01 01 LDA TRACK
0581 F3D8 F6 01 02 LDB SECTOR
0582 F3DB 17 01 37 LBSR WRITSC
0583 F3DE 17 00 D3 LBSR XACK
0584 *
0585 F3E1 B6 01 01 LDA TRACK
0586 F3E4 F6 01 02 LDB SECTOR
0587 F3E7 5C INCB
0588 F3E8 F1 01 0C CMPB MAXSEC
0589 F3EB 26 CB BNE UXLOOP
0590 F3ED C6 01 LDB #1
0591 F3EF 4C INCA
0592 F3F0 B1 01 0B CMPA MAXTRK
0593 F3F3 26 C3 BNE UXLOOP
0594 *
0595 *
0596 *
0597 * Write Boot sector
0598 *
0599 03EA 8E 07 00 LDX #BOOT
0600 03ED 4F CLRA TRACK 0
0601 03EE C6 01 LDB #$01 SECTOR 1
0602 03F0 B7 01 01 STA TRACK
0603 03F3 F7 01 02 STB SECTOR
0604 03F6 17 01 11 LBSR WRITSC
0605 *
0606 03F9 8E 02 68 UXEXIT LDX #UXMES1
0607 03FC 7E 02 48 JMP PDATA1
0608 *
0609 03FF 8E 02 7A UXERR LDX #UXMES2
0610 0402 16 FE 43 LBRA PDATA1
0611 *
0612 * Get a Byte using XModem protocol
0613 * Carry clear => no errors
0614 * Carry set => errors
0615 *
0616 0405 34 40 XREAD PSHS U
0617 0407 FE 01 06 LDU XSTATE
0618 *
0619 040A 17 FD F3 XBYTE0 LBSR INTER
0620 040D 28 0A BVC XBYTE1
0621 040F 86 15 LDA #NAK
0622 0411 17 FE 1D LBSR OUTTER
0623 0414 CE 04 22 LDU #XSTST
0624 0417 20 F1 BRA XBYTE0
0625 *
0626 0419 AD C4 XBYTE1 JSR ,U
0627 041B 26 ED BNE XBYTE0
0628 041D FF 01 06 STU XSTATE
0629 0420 35 C0 PULS U,PC
0630 *
0631 * START - LOOK FOR SOH (START OF HEADER) = $01
0632 *
0633 0422 81 01 XSTST CMPA #SOH
0634 0424 26 06 BNE XSTST1
0635 0426 CE 04 42 LDU #XSTBL
0636 0429 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, no valid data (no exit)
0637 042B 39 RTS
0638 *
0639 042C 81 04 XSTST1 CMPA #EOT
0640 042E 26 08 BNE XSTST2
0641 0430 86 06 LDA #ACK
0642 0432 17 FD FC LBSR OUTTER
0643 0435 1A 05 ORCC #CFLAG+ZFLAG Set (c)=1 abort & exit
0644 0437 39 RTS
0645 *
0646 0438 81 18 XSTST2 CMPA #CAN
0647 043A 26 03 BNE XSTST3
0648 043C 1A 05 ORCC #CFLAG+ZFLAG Set (c)=1 abort & exit
0649 043E 39 RTS
0650 *
0651 043F 1C FA XSTST3 ANDCC #$FF-CFLAG-ZFLAG
0652 0441 39 RTS
0653 *
0654 * Got SOH
0655 * Now get block number
0656 *
0657 0442 B1 01 04 XSTBL CMPA BLKNUM
0658 0445 26 06 BNE XSTBLE
0659 0447 CE 04 58 LDU #XSTCOM
0660 044A 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit)
0661 044C 39 RTS
0662 *
0663 * Error in block number
0664 *
0665 044D 86 15 XSTBLE LDA #NAK
0666 044F 17 FD DF LBSR OUTTER
0667 0452 CE 04 22 LDU #XSTST
0668 0455 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit)
0669 0457 39 RTS
0670 *
0671 * Get complement of block number
0672 *
0673 0458 43 XSTCOM COMA
0674 0459 B1 01 04 CMPA BLKNUM
0675 045C 26 EF BNE XSTBLE
0676 045E 7F 01 03 CLR CHKSUM
0677 0461 86 80 LDA #128
0678 0463 B7 01 05 STA BYTCNT
0679 0466 CE 04 6C LDU #XSTDA
0680 0469 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit)
0681 046B 39 RTS
0682 *
0683 * Get data bytes
0684 *
0685 046C 34 02 XSTDA PSHS A
0686 046E BB 01 03 ADDA CHKSUM
0687 0471 B7 01 03 STA CHKSUM
0688 0474 35 02 PULS A
0689 0476 7A 01 05 DEC BYTCNT
0690 0479 26 03 BNE XSTDA1
0691 047B CE 04 83 LDU #XSTCK
0692 047E A7 80 XSTDA1 STA ,X+
0693 0480 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, no valid data (no exit)
0694 0482 39 RTS
0695 *
0696 * Byte count reached zero
0697 * Check checksum byte
0698 *
0699 0483 B1 01 03 XSTCK CMPA CHKSUM
0700 0486 26 0B BNE XSTCK1 retry if wrong checksum
0701 *
0702 * Checksum OK ...
0703 * increment block number
0704 * Don't send ACK until data written to CF
0705 *
0706 0488 7C 01 04 INC BLKNUM
0707 048B CE 04 22 LDU #XSTST
0708 048E 1C FE ANDCC #$FF-CFLAG No abort
0709 0490 1A 04 ORCC #ZFLAG Valid data (exit)
0710 0492 39 RTS
0711 *
0712 * Checksum Error detected ...
0713 * Reset Sector counter in ACCB to last 128 byte boundary
0714 * and send NAK
0715 *
0716 0493 34 04 XSTCK1 PSHS B
0717 0495 1F 10 TFR X,D
0718 0497 5A DECB
0719 0498 C4 80 ANDB #128
0720 049A 1F 01 TFR D,X
0721 049C 35 04 PULS B
0722 049E 86 15 LDA #NAK
0723 04A0 17 FD 8E XSTCK2 LBSR OUTTER
0724 04A3 CE 04 22 LDU #XSTST
0725 04A6 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, no valid data (no exit)
0726 04A8 39 RTS
0727 *
0728 * Acknowledge Data Received
0729 *
0730 04A9 34 02 XACK PSHS A
0731 04AB 86 06 LDA #ACK
0732 04AD 17 FD 81 LBSR OUTTER
0733 04B0 35 82 PULS A,PC
0596 * Write Boot sector
0597 *
0598 F3F5 8E F7 00 LDX #BOOT
0599 F3F8 4F CLRA TRACK 0
0600 F3F9 C6 01 LDB #$01 SECTOR 1
0601 F3FB B7 01 01 STA TRACK
0602 F3FE F7 01 02 STB SECTOR
0603 F401 17 01 11 LBSR WRITSC
0604 *
0605 F404 8E F2 73 UXEXIT LDX #UXMES1
0606 F407 7E F2 53 JMP PDATA1
0607 *
0608 F40A 8E F2 85 UXERR LDX #UXMES2
0609 F40D 16 FE 43 LBRA PDATA1
0610 *
0611 * Get a Byte using XModem protocol
0612 * Carry clear => no errors
0613 * Carry set => errors
0614 *
0615 F410 34 40 XREAD PSHS U
0616 F412 FE 01 06 LDU XSTATE
0617 *
0618 F415 17 FD EF XBYTE0 LBSR INTER
0619 F418 28 0A BVC XBYTE1
0620 F41A 86 15 LDA #NAK
0621 F41C 17 FE 1B LBSR OUTTER
0622 F41F CE F4 2D LDU #XSTST
0623 F422 20 F1 BRA XBYTE0
0624 *
0625 F424 AD C4 XBYTE1 JSR ,U
0626 F426 26 ED BNE XBYTE0
0627 F428 FF 01 06 STU XSTATE
0628 F42B 35 C0 PULS U,PC
0629 *
0630 * START - LOOK FOR SOH (START OF HEADER) = $01
0631 *
0632 F42D 81 01 XSTST CMPA #SOH
0633 F42F 26 06 BNE XSTST1
0634 F431 CE F4 4D LDU #XSTBL
0635 F434 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, no valid data (no exit)
0636 F436 39 RTS
0637 *
0638 F437 81 04 XSTST1 CMPA #EOT
0639 F439 26 08 BNE XSTST2
0640 F43B 86 06 LDA #ACK
0641 F43D 17 FD FA LBSR OUTTER
0642 F440 1A 05 ORCC #CFLAG+ZFLAG Set (c)=1 abort & exit
0643 F442 39 RTS
0644 *
0645 F443 81 18 XSTST2 CMPA #CAN
0646 F445 26 03 BNE XSTST3
0647 F447 1A 05 ORCC #CFLAG+ZFLAG Set (c)=1 abort & exit
0648 F449 39 RTS
0649 *
0650 F44A 1C FA XSTST3 ANDCC #$FF-CFLAG-ZFLAG
0651 F44C 39 RTS
0652 *
0653 * Got SOH
0654 * Now get block number
0655 *
0656 F44D B1 01 04 XSTBL CMPA BLKNUM
0657 F450 26 06 BNE XSTBLE
0658 F452 CE F4 63 LDU #XSTCOM
0659 F455 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit)
0660 F457 39 RTS
0661 *
0662 * Error in block number
0663 *
0664 F458 86 15 XSTBLE LDA #NAK
0665 F45A 17 FD DD LBSR OUTTER
0666 F45D CE F4 2D LDU #XSTST
0667 F460 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit)
0668 F462 39 RTS
0669 *
0670 * Get complement of block number
0671 *
0672 F463 43 XSTCOM COMA
0673 F464 B1 01 04 CMPA BLKNUM
0674 F467 26 EF BNE XSTBLE
0675 F469 7F 01 03 CLR CHKSUM
0676 F46C 86 80 LDA #128
0677 F46E B7 01 05 STA BYTCNT
0678 F471 CE F4 77 LDU #XSTDA
0679 F474 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, No valid data (no exit)
0680 F476 39 RTS
0681 *
0682 * Get data bytes
0683 *
0684 F477 34 02 XSTDA PSHS A
0685 F479 BB 01 03 ADDA CHKSUM
0686 F47C B7 01 03 STA CHKSUM
0687 F47F 35 02 PULS A
0688 F481 7A 01 05 DEC BYTCNT
0689 F484 26 03 BNE XSTDA1
0690 F486 CE F4 8E LDU #XSTCK
0691 F489 A7 80 XSTDA1 STA ,X+
0692 F48B 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, no valid data (no exit)
0693 F48D 39 RTS
0694 *
0695 * Byte count reached zero
0696 * Check checksum byte
0697 *
0698 F48E B1 01 03 XSTCK CMPA CHKSUM
0699 F491 26 0B BNE XSTCK1 retry if wrong checksum
0700 *
0701 * Checksum OK ...
0702 * increment block number
0703 * Don't send ACK until data written to CF
0704 *
0705 F493 7C 01 04 INC BLKNUM
0706 F496 CE F4 2D LDU #XSTST
0707 F499 1C FE ANDCC #$FF-CFLAG No abort
0708 F49B 1A 04 ORCC #ZFLAG Valid data (exit)
0709 F49D 39 RTS
0710 *
0711 * Checksum Error detected ...
0712 * Reset Sector counter in ACCB to last 128 byte boundary
0713 * and send NAK
0714 *
0715 F49E 34 04 XSTCK1 PSHS B
0716 F4A0 1F 10 TFR X,D
0717 F4A2 5A DECB
0718 F4A3 C4 80 ANDB #128
0719 F4A5 1F 01 TFR D,X
0720 F4A7 35 04 PULS B
0721 F4A9 86 15 LDA #NAK
0722 F4AB 17 FD 8C XSTCK2 LBSR OUTTER
0723 F4AE CE F4 2D LDU #XSTST
0724 F4B1 1C FA ANDCC #$FF-CFLAG-ZFLAG No abort, no valid data (no exit)
0725 F4B3 39 RTS
0726 *
0727 * Acknowledge Data Received
0728 *
0729 F4B4 34 02 XACK PSHS A
0730 F4B6 86 06 LDA #ACK
0731 F4B8 17 FD 7F LBSR OUTTER
0732 F4BB 35 82 PULS A,PC
0733 *
0734 *
0735 *
0736 ** FLEX 9 IDE DISK DRIVERS
0737 *
0738 * FOR SYS09BUG 1.2 ON THE XSA-3S1000
0739 * WITH I/O MAPPED AT $XE000
0740 * AND ROM MAPPED AT $XF000
0735 ** FLEX 9 IDE DISK DRIVERS
0736 *
0737 * FOR SYS09BUG 1.2 ON THE XSA-3S1000
0738 * WITH I/O MAPPED AT $XE000
0739 * AND ROM MAPPED AT $XF000
0740 *
0741 *
0742 *
0743 * INITIALIZE CF CARD FOR 8 BIT LBA MODE
0744 *
Symbol 'AUXRESET' undefined Pass 20745 04B2 CC 00 00 INITDR LDD #AUXRESET
Symbol 'CF_AUX' undefined Pass 20746 04B5 FD 00 00 STD CF_AUX
Symbol 'AUXRSTREL' undefined Pass 20747 04B8 CC 00 00 LDD #AUXRSTREL
Symbol 'CF_AUX' undefined Pass 20748 04BB FD 00 00 STD CF_AUX
Symbol 'HEADLBA' undefined Pass 20749 04BE CC 00 00 LDD #HEADLBA
Symbol 'CF_HEAD' undefined Pass 20750 04C1 FD 00 00 STD CF_HEAD
0751 04C4 16 02 E1 LBRA WTRDY
0752 *
0753 * RESTORE DISK DRIVER (SEEK TRACK 00)
0754 *
0755 04C7 8D 66 RESTR1 BSR DRVSEL
0756 04C9 4F CLRA ; Track 0
0757 04CA C6 01 LDB #$01 ; Sector 1
0758 *
0759 * Seek track and sector
0760 * A holds track number (0 - ??)
0761 * B holds sector number (1 - ??)
0762 * Sector numbers starts from 1
0763 * subtract 1 to start from sector 0 on CF
0764 *
0765 04CC 34 02 SEEKTS PSHS A
0766 04CE 4F CLRA
0767 04CF 5A DECB
Symbol 'CF_SECNUM' undefined Pass 20768 04D0 FD 00 00 STD CF_SECNUM
0769 04D3 E6 E4 LDB ,S
Symbol 'CF_CYLLO' undefined Pass 20770 04D5 FD 00 00 STD CF_CYLLO
0771 04D8 F6 01 00 LDB DRVNUM
Symbol 'CF_CYLHI' undefined Pass 20772 04DB FD 00 00 STD CF_CYLHI
0773 04DE C6 01 LDB #$01
Symbol 'CF_SECCNT' undefined Pass 20774 04E0 FD 00 00 STD CF_SECCNT
0775 04E3 5F CLRB
0776 04E4 35 82 PULS A,PC
0777 *
0778 * READ SECTORS FROM CF
0742 * INITIALIZE CF CARD FOR 8 BIT LBA MODE
0743 *
0744 F4BD CC 00 06 INITDR LDD #AUXRESET
0745 F4C0 FD E1 1E STD CF_AUX
0746 F4C3 CC 00 02 LDD #AUXRSTREL
0747 F4C6 FD E1 1E STD CF_AUX
0748 F4C9 CC 00 E0 LDD #HEADLBA
0749 F4CC FD E1 0C STD CF_HEAD
0750 F4CF 16 02 D6 LBRA WTRDY
0751 *
0752 * RESTORE DISK DRIVER (SEEK TRACK 00)
0753 *
0754 F4D2 8D 66 RESTR1 BSR DRVSEL
0755 F4D4 4F CLRA ; Track 0
0756 F4D5 C6 01 LDB #$01 ; Sector 1
0757 *
0758 * Seek track and sector
0759 * A holds track number (0 - ??)
0760 * B holds sector number (1 - ??)
0761 * Sector numbers starts from 1
0762 * subtract 1 to start from sector 0 on CF
0763 *
0764 F4D7 34 02 SEEKTS PSHS A
0765 F4D9 4F CLRA
0766 F4DA 5A DECB
0767 F4DB FD E1 06 STD CF_SECNUM
0768 F4DE E6 E4 LDB ,S
0769 F4E0 FD E1 08 STD CF_CYLLO
0770 F4E3 F6 01 00 LDB DRVNUM
0771 F4E6 FD E1 0A STD CF_CYLHI
0772 F4E9 C6 01 LDB #$01
0773 F4EB FD E1 04 STD CF_SECCNT
0774 F4EE 5F CLRB
0775 F4EF 35 82 PULS A,PC
0776 *
0777 * READ SECTORS FROM CF
0778 *
0779 *
0780 *
0781 04E6 8D E4 READSC BSR SEEKTS
Symbol 'CMDREAD' undefined Pass 20782 04E8 CC 00 00 LDD #CMDREAD ; IDE READ MULTIPLE
Symbol 'CF_COMAND' undefined Pass 20783 04EB FD 00 00 STD CF_COMAND
0784 04EE 17 02 B7 LBSR WTRDY
0785 *
0786 * READ LOOP
0787 *
0788 04F1 34 20 PSHS Y
0789 04F3 10 8E 01 00 LDY #256
0790 04F7 17 02 BD RDLP1 LBSR WTDRQ
Symbol 'CF_DATA' undefined Pass 20791 04FA FC 00 00 LDD CF_DATA
0792 04FD E7 80 STB ,X+
0793 04FF 31 3F LEAY -1,Y
0794 0501 26 F4 BNE RDLP1
0795 0503 35 20 PULS Y
0796 *
0797 0505 17 02 A0 LBSR WTRDY
0798 0508 5F CLRB
0799 0509 39 RTS
0800 *
0801 * WRITE SECTOR TO CF
0802 *
0803 050A 8D C0 WRITSC BSR SEEKTS ; SEEK TRACK & SECTOR
Symbol 'CMDWRITE' undefined Pass 20804 050C CC 00 00 LDD #CMDWRITE ; IDE WRITE MULTIPLE
Symbol 'CF_COMAND' undefined Pass 20805 050F FD 00 00 STD CF_COMAND
0806 0512 17 02 93 LBSR WTRDY
0807 *
0808 * WRITE LOOP
0809 *
0810 0515 34 20 PSHS Y
0811 0517 10 8E 01 00 LDY #256
0812 051B 4F CLRA
0813 051C 17 02 98 WRTLP1 LBSR WTDRQ
0814 051F E6 80 LDB ,X+
Symbol 'CF_DATA' undefined Pass 20815 0521 FD 00 00 STD CF_DATA
0816 0524 31 3F LEAY -1,Y
0817 0526 26 F4 BNE WRTLP1
0818 0528 35 20 PULS Y
0819 *
0820 052A 17 02 7B LBSR WTRDY
0821 052D 5F CLRB
0822 052E 39 RTS
0823 *
0824 * DRIVE SELECT DISK DRIVER
0825 *
0826 052F A6 03 DRVSEL LDA 3,X GET DRIVE # FROM FCB
0827 0531 81 03 CMPA #3
0828 0533 23 01 BLS DRVS2 IF > 3, SET IT TO 0
0829 0535 4F CLRA
0830 0536 B7 01 00 DRVS2 STA DRVNUM
0831 0539 5F CLRB ; SET Z, CLEAR C
0832 053A 39 RTS
0833 *
0834 * CHECK DRIVE READY DISK DRIVER
0835 *
0836 053B A6 03 CHKDRV LDA 3,X
0837 053D 5F CLRB ; CLEAR C, SET Z
0838 053E 39 RTS
0839 *******************************************************
0840 *
0841 * Bootstrap FLEX Loader
0842 *
0843 * SBUG1.8 loads the bootstap loader at $C000
0844 * however the Flex adaption manual has the
0845 * bootstrap loader residing at $C100
0846 * Bootstrap Loader is position independent code
0847 *
0848 ******************************************************
0849 *
0850 * Equates
0851 *
0852 C0FF BSSTACK EQU $C0FF
0853 C300 SCTBUF EQU $C300
0854 *
0855 * Start of Utility
0856 *
Symbol 'MONEXT' undefined Pass 20857 0700 ORG MONEXT+$0700
0858 0700 20 0B BOOT BRA BLOAD0
0859 0702 00 00 00 FCB 0,0,0
0860 0705 00 TRK FCB 0 File start track
0861 0706 00 SCT FCB 0 File start sector
0862 0707 00 DNS FCB 0 Density Flag (not used)
0863 0708 C0 00 TADR FDB $C000 Transfer address
0864 070A 00 00 LADR FDB 0 Load Address
0865 070C 00 DRNUM FCB 0 Drive number 0
0866 *
0867 070D 10 CE C0 FF BLOAD0 LDS #BSSTACK Set up Bootstrap stack
0868 0711 EC 8C F1 LDD TRK,PCR Set up start track and sector
0869 0714 FD C3 00 STD SCTBUF
0870 0717 10 8E C4 00 LDY #SCTBUF+256
0871 *
0872 * Perform actual file load
0873 *
0874 071B 8D 35 BLOAD1 BSR GETCH Get acharcater
0875 071D 81 02 CMPA #$02 Data record hearder ?
0876 071F 27 10 BEQ BLOAD2 Skip, is so
0877 0721 81 16 CMPA #$16 Xfr address hearder ?
0878 0723 26 F6 BNE BLOAD1 Loop if neither
0879 *
0880 * Get transfer address
0881 *
0882 0725 8D 2B BSR GETCH
0883 0727 A7 8C DE STA TADR,PCR
0884 072A 8D 26 BSR GETCH
0885 072C A7 8C DA STA TADR+1,PCR
0886 072F 20 EA BRA BLOAD1
0887 *
0888 * Load data record
0889 *
0890 0731 8D 1F BLOAD2 BSR GETCH Get load address
0891 0733 A7 8C D4 STA LADR,PCR
0892 0736 8D 1A BSR GETCH
0893 0738 A7 8C D0 STA LADR+1,PCR
0894 073B 8D 15 BSR GETCH Get Bytes count
0895 073D 1F 89 TFR A,B
0896 073F 5D TSTB
0897 0740 27 D9 BEQ BLOAD1 Loop if count = 0
0898 0742 AE 8C C5 LDX LADR,PCR Get load address
0899 0745 34 14 BLOAD3 PSHS B,X
0900 0747 8D 09 BSR GETCH Get data character
0901 0749 35 14 PULS B,X
0902 074B A7 80 STA ,X+ Store at load address
0903 074D 5A DECB
0904 074E 26 F5 BNE BLOAD3 Loop until count = 0
0905 0750 20 C9 BRA BLOAD1
0906 *
0907 * Get Character routine
0908 * Reads a sector if needed
0909 *
0910 0752 10 8C C4 00 GETCH CMPY #SCTBUF+256 out of data ?
0911 0756 26 0F BNE GETCH4 Go read Character if not
0912 0758 8E C3 00 GETCH2 LDX #SCTBUF Point to buffer
0913 075B EC 84 LDD 0,X Get forward Link
0914 075D 27 0B BEQ GOFLEX if zero, file is loaded
0915 075F 8D 26 BSR READ Read next sector
0916 0761 26 9D BNE BOOT start over if error
0917 0763 10 8E C3 04 LDY #SCTBUF+4 Point past link
0918 0767 A6 A0 GETCH4 LDA ,Y+ Else, get a character
0919 0769 39 RTS
0920 *
0921 * File is loaded, Jump to it
0922 *
0923 076A 6E 9C 9B GOFLEX JMP [TADR,PCR] Jump to transfer address
0924
0925 *
0926 ** FLEX 9 IDE DISK DRIVERS
0927 *
0928 * Seek track and sector
0929 * A holds track number (0 - ??)
0930 * B holds sector number (1 - ??)
0931 * Sector numbers starts from 1
0932 * subtract 1 to start from sector 0 on CF
0933 *
0934 076D 34 02 SEEK PSHS A
0935 076F 4F CLRA
0936 0770 5A DECB
Symbol 'CF_SECNUM' undefined Pass 20937 0771 FD 00 00 STD CF_SECNUM
0938 0774 E6 E4 LDB ,S
Symbol 'CF_CYLLO' undefined Pass 20939 0776 FD 00 00 STD CF_CYLLO
0940 0779 E6 8C 90 LDB DRNUM,PCR
Symbol 'CF_CYLHI' undefined Pass 20941 077C FD 00 00 STD CF_CYLHI
0942 077F C6 01 LDB #$01
Symbol 'CF_SECCNT' undefined Pass 20943 0781 FD 00 00 STD CF_SECCNT
0944 0784 5F CLRB
0945 0785 35 82 PULS A,PC
0946 *
0947 * READ SECTORS FROM CF
0780 F4F1 8D E4 READSC BSR SEEKTS
0781 F4F3 CC 00 20 LDD #CMDREAD ; IDE READ MULTIPLE
0782 F4F6 FD E1 0E STD CF_COMAND
0783 F4F9 17 02 AC LBSR WTRDY
0784 *
0785 * READ LOOP
0786 *
0787 F4FC 34 20 PSHS Y
0788 F4FE 10 8E 01 00 LDY #256
0789 F502 17 02 B2 RDLP1 LBSR WTDRQ
0790 F505 FC E1 00 LDD CF_DATA
0791 F508 E7 80 STB ,X+
0792 F50A 31 3F LEAY -1,Y
0793 F50C 26 F4 BNE RDLP1
0794 F50E 35 20 PULS Y
0795 *
0796 F510 17 02 95 LBSR WTRDY
0797 F513 5F CLRB
0798 F514 39 RTS
0799 *
0800 * WRITE SECTOR TO CF
0801 *
0802 F515 8D C0 WRITSC BSR SEEKTS ; SEEK TRACK & SECTOR
0803 F517 CC 00 30 LDD #CMDWRITE ; IDE WRITE MULTIPLE
0804 F51A FD E1 0E STD CF_COMAND
0805 F51D 17 02 88 LBSR WTRDY
0806 *
0807 * WRITE LOOP
0808 *
0809 F520 34 20 PSHS Y
0810 F522 10 8E 01 00 LDY #256
0811 F526 4F CLRA
0812 F527 17 02 8D WRTLP1 LBSR WTDRQ
0813 F52A E6 80 LDB ,X+
0814 F52C FD E1 00 STD CF_DATA
0815 F52F 31 3F LEAY -1,Y
0816 F531 26 F4 BNE WRTLP1
0817 F533 35 20 PULS Y
0818 *
0819 F535 17 02 70 LBSR WTRDY
0820 F538 5F CLRB
0821 F539 39 RTS
0822 *
0823 * DRIVE SELECT DISK DRIVER
0824 *
0825 F53A A6 03 DRVSEL LDA 3,X GET DRIVE # FROM FCB
0826 F53C 81 03 CMPA #3
0827 F53E 23 01 BLS DRVS2 IF > 3, SET IT TO 0
0828 F540 4F CLRA
0829 F541 B7 01 00 DRVS2 STA DRVNUM
0830 F544 5F CLRB ; SET Z, CLEAR C
0831 F545 39 RTS
0832 *
0833 * CHECK DRIVE READY DISK DRIVER
0834 *
0835 F546 A6 03 CHKDRV LDA 3,X
0836 F548 5F CLRB ; CLEAR C, SET Z
0837 F549 39 RTS
0838 *******************************************************
0839 *
0840 * Bootstrap FLEX Loader
0841 *
0842 * SBUG1.8 loads the bootstap loader at $C000
0843 * however the Flex adaption manual has the
0844 * bootstrap loader residing at $C100
0845 * Bootstrap Loader is position independent code
0846 *
0847 ******************************************************
0848 *
0849 * Equates
0850 *
0851 C0FF BSSTACK EQU $C0FF
0852 C300 SCTBUF EQU $C300
0853 *
0854 * Start of Utility
0855 *
0856 F700 ORG MONEXT+$0700
0857 F700 20 0B BOOT BRA BLOAD0
0858 F702 00 00 00 FCB 0,0,0
0859 F705 00 TRK FCB 0 File start track
0860 F706 00 SCT FCB 0 File start sector
0861 F707 00 DNS FCB 0 Density Flag (not used)
0862 F708 C0 00 TADR FDB $C000 Transfer address
0863 F70A 00 00 LADR FDB 0 Load Address
0864 F70C 00 DRNUM FCB 0 Drive number 0
0865 *
0866 F70D 10 CE C0 FF BLOAD0 LDS #BSSTACK Set up Bootstrap stack
0867 F711 EC 8C F1 LDD TRK,PCR Set up start track and sector
0868 F714 FD C3 00 STD SCTBUF
0869 F717 10 8E C4 00 LDY #SCTBUF+256
0870 *
0871 * Perform actual file load
0872 *
0873 F71B 8D 35 BLOAD1 BSR GETCH Get acharcater
0874 F71D 81 02 CMPA #$02 Data record hearder ?
0875 F71F 27 10 BEQ BLOAD2 Skip, is so
0876 F721 81 16 CMPA #$16 Xfr address hearder ?
0877 F723 26 F6 BNE BLOAD1 Loop if neither
0878 *
0879 * Get transfer address
0880 *
0881 F725 8D 2B BSR GETCH
0882 F727 A7 8C DE STA TADR,PCR
0883 F72A 8D 26 BSR GETCH
0884 F72C A7 8C DA STA TADR+1,PCR
0885 F72F 20 EA BRA BLOAD1
0886 *
0887 * Load data record
0888 *
0889 F731 8D 1F BLOAD2 BSR GETCH Get load address
0890 F733 A7 8C D4 STA LADR,PCR
0891 F736 8D 1A BSR GETCH
0892 F738 A7 8C D0 STA LADR+1,PCR
0893 F73B 8D 15 BSR GETCH Get Bytes count
0894 F73D 1F 89 TFR A,B
0895 F73F 5D TSTB
0896 F740 27 D9 BEQ BLOAD1 Loop if count = 0
0897 F742 AE 8C C5 LDX LADR,PCR Get load address
0898 F745 34 14 BLOAD3 PSHS B,X
0899 F747 8D 09 BSR GETCH Get data character
0900 F749 35 14 PULS B,X
0901 F74B A7 80 STA ,X+ Store at load address
0902 F74D 5A DECB
0903 F74E 26 F5 BNE BLOAD3 Loop until count = 0
0904 F750 20 C9 BRA BLOAD1
0905 *
0906 * Get Character routine
0907 * Reads a sector if needed
0908 *
0909 F752 10 8C C4 00 GETCH CMPY #SCTBUF+256 out of data ?
0910 F756 26 0F BNE GETCH4 Go read Character if not
0911 F758 8E C3 00 GETCH2 LDX #SCTBUF Point to buffer
0912 F75B EC 84 LDD 0,X Get forward Link
0913 F75D 27 0B BEQ GOFLEX if zero, file is loaded
0914 F75F 8D 26 BSR READ Read next sector
0915 F761 26 9D BNE BOOT start over if error
0916 F763 10 8E C3 04 LDY #SCTBUF+4 Point past link
0917 F767 A6 A0 GETCH4 LDA ,Y+ Else, get a character
0918 F769 39 RTS
0919 *
0920 * File is loaded, Jump to it
0921 *
0922 F76A 6E 9C 9B GOFLEX JMP [TADR,PCR] Jump to transfer address
0923
0924 *
0925 ** FLEX 9 IDE DISK DRIVERS
0926 *
0927 * Seek track and sector
0928 * A holds track number (0 - ??)
0929 * B holds sector number (1 - ??)
0930 * Sector numbers starts from 1
0931 * subtract 1 to start from sector 0 on CF
0932 *
0933 F76D 34 02 SEEK PSHS A
0934 F76F 4F CLRA
0935 F770 5A DECB
0936 F771 FD E1 06 STD CF_SECNUM
0937 F774 E6 E4 LDB ,S
0938 F776 FD E1 08 STD CF_CYLLO
0939 F779 E6 8C 90 LDB DRNUM,PCR
0940 F77C FD E1 0A STD CF_CYLHI
0941 F77F C6 01 LDB #$01
0942 F781 FD E1 04 STD CF_SECCNT
0943 F784 5F CLRB
0944 F785 35 82 PULS A,PC
0945 *
0946 * READ SECTORS FROM CF
0947 *
0948 *
0949 *
0950 0787 8D E4 READ BSR SEEK
Symbol 'CMDREAD' undefined Pass 20951 0789 CC 00 00 LDD #CMDREAD ; IDE READ MULTIPLE
Symbol 'CF_COMAND' undefined Pass 20952 078C FD 00 00 STD CF_COMAND
0953 078F 8D 17 BSR WTRDY
0954 *
0955 * READ LOOP
0956 *
0957 0791 34 20 PSHS Y
0958 0793 10 8E 01 00 LDY #256
0959 0797 8D 1E READ1 BSR WTDRQ
Symbol 'CF_DATA' undefined Pass 20960 0799 FC 00 00 LDD CF_DATA
0961 079C E7 80 STB ,X+
0962 079E 31 3F LEAY -1,Y
0963 07A0 26 F5 BNE READ1
0964 07A2 35 20 PULS Y
0965 *
0966 07A4 8D 02 BSR WTRDY
0967 07A6 5F CLRB
0968 07A7 39 RTS
0969 *
0970 * WAIT UNTIL READY
0971 *
Symbol 'CF_STATUS' undefined Pass 20972 07A8 FC 00 00 WTRDY LDD CF_STATUS
Symbol 'BUSY' undefined Pass 20973 07AB C5 00 BITB #BUSY
0974 07AD 26 F9 BNE WTRDY
Symbol 'CF_STATUS' undefined Pass 20975 07AF FC 00 00 LDD CF_STATUS
Symbol 'DRDY' undefined Pass 20976 07B2 C5 00 BITB #DRDY
0977 07B4 27 F2 BEQ WTRDY
0978 07B6 39 RTS
0979 *
0980 * WAIT FOR DATA REQUEST
0981 *
Symbol 'CF_STATUS' undefined Pass 20982 07B7 FC 00 00 WTDRQ LDD CF_STATUS
Symbol 'DRQ' undefined Pass 20983 07BA C5 00 BITB #DRQ
0984 07BC 27 F9 BEQ WTDRQ
0985 07BE 39 RTS
0986 *
0949 F787 8D E4 READ BSR SEEK
0950 F789 CC 00 20 LDD #CMDREAD ; IDE READ MULTIPLE
0951 F78C FD E1 0E STD CF_COMAND
0952 F78F 8D 17 BSR WTRDY
0953 *
0954 * READ LOOP
0955 *
0956 F791 34 20 PSHS Y
0957 F793 10 8E 01 00 LDY #256
0958 F797 8D 1E READ1 BSR WTDRQ
0959 F799 FC E1 00 LDD CF_DATA
0960 F79C E7 80 STB ,X+
0961 F79E 31 3F LEAY -1,Y
0962 F7A0 26 F5 BNE READ1
0963 F7A2 35 20 PULS Y
0964 *
0965 F7A4 8D 02 BSR WTRDY
0966 F7A6 5F CLRB
0967 F7A7 39 RTS
0968 *
0969 * WAIT UNTIL READY
0970 *
0971 F7A8 FC E1 0E WTRDY LDD CF_STATUS
0972 F7AB C5 80 BITB #BUSY
0973 F7AD 26 F9 BNE WTRDY
0974 F7AF FC E1 0E LDD CF_STATUS
0975 F7B2 C5 40 BITB #DRDY
0976 F7B4 27 F2 BEQ WTRDY
0977 F7B6 39 RTS
0978 *
0979 * WAIT FOR DATA REQUEST
0980 *
0981 F7B7 FC E1 0E WTDRQ LDD CF_STATUS
0982 F7BA C5 08 BITB #DRQ
0983 F7BC 27 F9 BEQ WTDRQ
0984 F7BE 39 RTS
0985 *
0004 END
0000 INCLUDE "sys09bug.asm"
0001 * NAM SYS09BUG12 SYSTEM09 MONITOR
1625,12 → 1636,11
0107 DFCC SVCVO RMB 2 ; SUPERVISOR CALL VECTOR ORGIN
0108 DFCE SVCVL RMB 2 ; SUPERVISOR CALL VECTOR LIMIT
0109 IFD DATOPT
0110 LRARAM RMB 16 ; LRA ADDRESSES
0110 DFD0 LRARAM RMB 16 ; LRA ADDRESSES
0111 ENDIF DATOPT
0111 ENDIF DATOPT
0112 DFD0 CPORT RMB 2 ; RE-VECTORABLE CONTROL PORT
0113 DFD2 ECHO RMB 1 ; ECHO FLAG
0114 DFD3 BPTBL RMB 24 ; BREAKPOINT TABLE BASE ADDR
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
1643,14 → 1653,13
0123 **************************************************
0124 *
0125 **** ALWAYS KEEP COLADX AND ROWADX TOGETHER ******
0126 COLADX RMB 1 ; CURSOR COLUMN
0127 ROWADX RMB 1 ; CURSOR ROW
0126 DFFB COLADX RMB 1 ; CURSOR COLUMN
0127 DFFC ROWADX RMB 1 ; CURSOR ROW
0128 **************************************************
0129 *
0130 NEWROW RMB 1 ; NEW ROW TEMP FOR ESCAPE
0131 ESCFLG RMB 1 ; ESCAPE SEQUENCE ACTIVE
0130 DFFD NEWROW RMB 1 ; NEW ROW TEMP FOR ESCAPE
0131 DFFE ESCFLG RMB 1 ; ESCAPE SEQUENCE ACTIVE
0132 ENDIF VDUOPT
0132 ENDIF VDUOPT
0133 IFD DG640OPT
0134 *
0135 ***************************************************
1674,15 → 1683,15
0152 *
0153 F800 ORG MONROM
0154 F800 F8 14 FDB MONITOR
0155 F802 F8 48 FDB NEXTCMD
0156 F804 FC 04 FDB INCH
0157 F806 FB FE FDB INCHE
0158 F808 FC 13 FDB INCHEK
0159 F80A FC 21 FDB OUTCH
0160 F80C FA F6 FDB PDATA
0161 F80E FA 85 FDB PCRLF
0162 F810 FA 81 FDB PSTRNG
0163 F812 FC F9 FDB LRA
0155 F802 F8 61 FDB NEXTCMD
0156 F804 FC A1 FDB INCH
0157 F806 FC 9B FDB INCHE
0158 F808 FC C5 FDB INCHEK
0159 F80A FC E0 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
1700,7 → 1709,7
0177 * VECTOR ADDRESS STRING IS.....
0178 * $F8A1-$F8A1-$F8A1-$F8A1-$F8A1-$FAB0-$FFFF-$FFFF
0179 *
0180 F814 8E FC 7C MONITOR LDX #RAMVEC ; POINT TO VECTOR ADDR. STRING
0180 F814 8E FE 74 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
1718,9 → 1727,9
0195 * $FFFF $FE4C $DFCC SVC-VO
0196 * $FFFF $FE4E $DFCE SVC-VL
0197 *
Symbol 'ACIAS' undefined Pass 20198 F824 8E 00 00 LDX #ACIAS
0199 F827 BF DF D0 STX CPORT ; STORE ADDR. IN RAM
0200 F82A 17 01 42 LBSR XBKPNT ; CLEAR OUTSTANDING BREAKPOINTS
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
1730,25 → 1739,24
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 03 F4 LBSR IOINIZ ; INITIALIZE CONTROL PORT
0211 F842 8E FC 8C LDX #MSG1 ; POINT TO MONITOR MESSAGE
0212 F845 17 02 AE LBSR PDATA ; PRINT MSG
0210 F83F 17 04 B5 LBSR IOINIZ ; INITIALIZE CONTROL PORT
0211 F842 8E FE 84 LDX #MSG1 ; POINT TO MONITOR MESSAGE
0212 F845 17 03 47 LBSR PDATA ; PRINT MSG
0213 *
0214 IFD DATOPT
0215 LDX #LRARAM ; POINT TO LRA RAM STORAGE AREA
0216 CLRA START ; TOTAL AT ZERO
0217 LDB #13 ; TOTAL UP ALL ACTIVE RAM MEMORY
0218 FNDREL TST B,X ; TEST FOR RAM AT NEXT LOC.
0219 BEQ RELPAS ; IF NO RAM GO TO NEXT LOC.
0220 ADDA #4 ; ELSE ADD 4K TO TOTAL
0221 DAA ; ADJ. TOTAL FOR DECIMAL
0222 RELPAS DECB ; SUB. 1 FROM LOCS. TO TEST
0223 BPL FNDREL ; PRINT TOTAL OF RAM
0224 LBSR OUT2H ; OUTPUT HEX BYTE AS ASCII
0225 LDX #MSG2 ; POINT TO MSG 'K' CR/LF + 3 NULS
0226 LBSR PDATA ; PRINT MSG
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 A3 LDX #MSG2 ; POINT TO MSG 'K' CR/LF + 3 NULS
0226 F85E 17 03 2E LBSR PDATA ; PRINT MSG
0227 ENDIF DATOPT
0227 ENDIF DATOPT
0228 *
0229 IFD TRAOPT
0230 LBSR TRAINZ
1757,91 → 1765,91
0232 *
0233 ***** NEXTCMD *****
0234 *
0235 F848 8E FC AD NEXTCMD LDX #MSG3 ; POINT TO MSG ">"
0236 F84B 17 02 33 LBSR PSTRNG ; PRINT MSG
0237 F84E 17 03 B3 LBSR INCH ; GET ONE CHAR. FROM TERMINAL
0238 F851 84 7F ANDA #$7F ; STRIP PARITY FROM CHAR.
0239 F853 81 0D CMPA #$0D ; IS IT CARRIAGE RETURN ?
0240 F855 27 F1 BEQ NEXTCMD ; IF CR THEN GET ANOTHER CHAR.
0241 F857 1F 89 TFR A,B ; PUT CHAR. IN "B" ACCUM.
0242 F859 81 20 CMPA #$20 ; IS IT CONTROL OR DATA CHAR ?
0243 F85B 2C 09 BGE PRTCMD ; IF CMD CHAR IS DATA, PRNT IT
0244 F85D 86 5E LDA #'^ ; ELSE CNTRL CHAR CMD SO...
0245 F85F 17 03 BF LBSR OUTCH ; PRINT "^"
0246 F862 1F 98 TFR B,A ; RECALL CNTRL CMD CHAR
0247 F864 8B 40 ADDA #$40 ; CONVERT IT TO ASCII LETTER
0248 F866 17 03 B8 PRTCMD LBSR OUTCH ; PRNT CMD CHAR
0249 F869 17 03 B3 LBSR OUT1S ; PRNT SPACE
0250 F86C C1 60 CMPB #$60
0251 F86E 2F 02 BLE NXTCH0
0252 F870 C0 20 SUBB #$20
0235 F861 8E FE AA 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 65 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 5E PRTCMD LBSR OUTCH ; PRNT CMD CHAR
0249 F882 17 04 59 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 F872 8E FC 49 NXTCH0 LDX #JMPTAB ; POINT TO JUMP TABLE
0258 F875 E1 80 NXTCHR CMPB ,X+ ; DOES COMMAND MATCH TABLE ENTRY ?
0259 F877 27 0F BEQ JMPCMD ; BRANCH IF MATCH FOUND
0260 F879 30 02 LEAX 2,X ; POINT TO NEXT ENTRY IN TABLE
0261 F87B 8C FC 7C CMPX #TABEND ; REACHED END OF TABLE YET ?
0262 F87E 26 F5 BNE NXTCHR ; IF NOT END, CHECK NEXT ENTRY
0263 F880 8E FC AF LDX #MSG4 ; POINT TO MSG "WHAT?"
0264 F883 17 02 70 LBSR PDATA ; PRINT MSG
0265 F886 20 C0 BRA NEXTCMD ; IF NO MATCH, PRMPT FOR NEW CMD
0266 F888 AD 94 JMPCMD JSR [,X] ; JUMP TO COMMAND ROUTINE
0267 F88A 20 BC BRA NEXTCMD ; PROMPT FOR NEW COMMAND
0257 F88B 8E FE 3B 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 74 CMPX #TABEND ; REACHED END OF TABLE YET ?
0262 F897 26 F5 BNE NXTCHR ; IF NOT END, CHECK NEXT ENTRY
0263 F899 8E FE AC 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 F88C 1F 34 GO TFR U,S
0272 F88E 3B RTI RTI
0271 F8A5 1F 34 GO TFR U,S
0272 F8A7 3B RTI RTI
0273 *
0274 ***** "M" MEMORY EXAMINE AND CHANGE *****
0275 *
0276 F88F 17 02 EB MEMCHG LBSR IN1ADR ; INPUT ADDRESS
0277 F892 29 2D BVS CHRTN ; IF NOT HEX, RETURN
0278 F894 1F 12 TFR X,Y ; SAVE ADDR IN "Y"
0279 F896 8E FC B5 MEMC2 LDX #MSG5 ; POINT TO MSG " - "
0280 F899 17 01 E5 LBSR PSTRNG ; PRINT MSG
0281 F89C 1F 21 TFR Y,X ; FETCH ADDRESS
0282 F89E 17 03 25 LBSR OUT4H ; PRINT ADDR IN HEX
0283 F8A1 17 03 7B LBSR OUT1S ; OUTPUT SPACE
0284 F8A4 A6 A4 LDA ,Y ; GET CONTENTS OF CURRENT ADDR.
0285 F8A6 17 03 25 LBSR OUT2H ; OUTPUT CONTENTS IN ASCII
0286 F8A9 17 03 73 LBSR OUT1S ; OUTPUT SPACE
0287 F8AC 17 02 DE LBSR BYTE ; LOOP WAITING FOR OPERATOR INPUT
0288 F8AF 28 11 BVC CHANGE ; IF VALID HEX GO CHANGE MEM. LOC.
0289 F8B1 81 08 CMPA #8 ; IS IT A BACKSPACE (CNTRL H)?
0290 F8B3 27 E1 BEQ MEMC2 ; PROMPT OPERATOR AGAIN
0291 F8B5 81 18 CMPA #$18 ; IS IT A CANCEL (CNTRL X)?
0292 F8B7 27 DD BEQ MEMC2 ; PROMPT OPERATOR AGAIN
0293 F8B9 81 5E CMPA #'^ ; IS IT AN UP ARROW?
0294 F8BB 27 17 BEQ BACK ; DISPLAY PREVIOUS BYTE
0295 F8BD 81 0D CMPA #$D ; IS IT A CR?
0296 F8BF 26 0F BNE FORWRD ; DISPLAY NEXT BYTE
0297 F8C1 39 CHRTN RTS ; EXIT ROUTINE
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 B2 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 21 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 19 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 F8C2 A7 A4 CHANGE STA ,Y ; CHANGE BYTE IN MEMORY
0301 F8C4 A1 A4 CMPA ,Y ; DID MEMORY BYTE CHANGE?
0302 F8C6 27 08 BEQ FORWRD ; $F972
0303 F8C8 17 03 54 LBSR OUT1S ; OUTPUT SPACE
0304 F8CB 86 3F LDA #'? ; LOAD QUESTION MARK
0305 F8CD 17 03 51 LBSR OUTCH ; PRINT IT
0306 F8D0 31 21 FORWRD LEAY 1,Y ; POINT TO NEXT HIGHER MEM LOCATION
0307 F8D2 20 C2 BRA MEMC2 ; PRINT LOCATION & CONTENTS
0308 F8D4 31 3F BACK LEAY -1,Y ; POINT TO LAST MEM LOCATION
0309 F8D6 20 BE BRA MEMC2 ; PRINT LOCATION & CONTENTS
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 FA LBSR OUT1S ; OUTPUT SPACE
0304 F8E4 86 3F LDA #'? ; LOAD QUESTION MARK
0305 F8E6 17 03 F7 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 F8D8 17 02 22 DISSTK LBSR PRTSP ; PRINT CURRENT STACK POINTER
0316 F8DB 1F 32 TFR U,Y
0317 F8DD 8E DF C0 LDX #STACK ; LOAD INTERNAL STACK AS UPPER LIMIT
0318 F8E0 30 1F LEAX -1,X ; POINT TO CURRENT STACK
0319 F8E2 20 05 BRA MDUMP1 ; ENTER MEMORY DUMP OF STACK CONTENTS
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.
1848,12 → 1856,12
0323 * UPPER ADDRESS IN X-REG.
0324 * IF HEX ADDRESSES ARE INVALID (V)=1.
0325 *
0326 F8E4 17 02 8B MEMDUMP LBSR IN2ADR ; INPUT ADDRESS BOUNDRIES
0327 F8E7 29 06 BVS EDPRTN ; NEW COMMAND IF ILLEGAL HEX
0328 F8E9 34 20 MDUMP1 PSHS Y ; COMPARE LOWER TO UPPER BOUNDS
0329 F8EB AC E1 CMPX ,S++ ; LOWER BOUNDS > UPPER BOUNDS?
0330 F8ED 24 01 BCC AJDUMP ; IF NOT, DUMP HEX AND ASCII
0331 F8EF 39 EDPRTN RTS ;
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.
1867,98 → 1875,98
0342 * ENTER WITH LOWER ADDRESS IN X-REG.
0343 * -UPPER ADDRESS ON TOP OF STACK.
0344 *
0345 F8F0 1F 10 AJDUMP TFR X,D ; GET UPPER ADDR IN D-REG
0346 F8F2 C3 00 10 ADDD #$10 ; ADD 16 TO UPPER ADDRESS
0347 F8F5 C4 F0 ANDB #$F0 ; MASK TO EVEN 16 BYTE BOUNDRY
0348 F8F7 34 06 PSHS A,B ; SAVE ON STACK AS UPPER DUMP LIMIT
0349 F8F9 1F 20 TFR Y,D ; $F9A5 GET LOWER ADDRESS IN D-REG
0350 F8FB C4 F0 ANDB #$F0 ; MASK TO EVEN 16 BYTE BOUNDRY
0351 F8FD 1F 01 TFR D,X ; PUT IN X-REG AS LOWER DUMP LIMIT
0352 F8FF AC E4 NXTLIN CMPX ,S ; COMPARE LOWER TO UPPER LIMIT
0353 F901 27 05 BEQ SKPDMP ; IF EQUAL SKIP HEX-ASCII DUMP
0354 F903 17 03 0D LBSR INCHEK ; CHECK FOR INPUT FROM KEYBOARD
0355 F906 27 03 BEQ EDUMP
0356 F908 32 62 SKPDMP LEAS 2,S ; READJUST STACK IF NOT DUMPING
0357 F90A 39 RTS ;
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 A6 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 F90B 34 10 EDUMP PSHS X ; PUSH LOWER ADDR LIMIT ON STACK
0363 F90D 8E FC B5 LDX #MSG5 ; POINT TO MSG " - "
0364 F910 17 01 6E LBSR PSTRNG ; PRINT MSG
0365 F913 AE E4 LDX ,S ; LOAD LOWER ADDR FROM TOP OF STACK
0366 F915 17 02 AE LBSR OUT4H ; PRINT THE ADDRESS
0367 F918 17 03 02 LBSR OUT2S ; 2 SPACES
0368 F91B C6 10 LDB #$10 ; LOAD COUNT OF 16 BYTES TO DUMP
0369 F91D A6 80 ELOOP LDA ,X+ ; GET FROM MEMORY HEX BYTE TO PRINT
0370 F91F 17 02 AC LBSR OUT2H ; OUTPUT HEX BYTE AS ASCII
0371 F922 17 02 FA LBSR OUT1S ; OUTPUT SPACE
0372 F925 5A DECB ; $F9D1 DECREMENT BYTE COUNT
0373 F926 26 F5 BNE ELOOP ; CONTINUE TIL 16 HEX BYTES PRINTED
0362 F924 34 10 EDUMP PSHS X ; PUSH LOWER ADDR LIMIT ON STACK
0363 F926 8E FE B2 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 A8 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 A0 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 F928 17 02 F2 LBSR OUT2S ; 2 SPACES
0379 F92B AE E1 LDX ,S++ ; GET LOW LIMIT FRM STACK - ADJ STACK
0380 F92D C6 10 LDB #$10 ; SET ASCII CHAR TO PRINT = 16
0381 F92F A6 80 EDPASC LDA ,X+ ; GET CHARACTER FROM MEMORY
0382 F931 81 20 CMPA #$20 ; IF LESS THAN $20, NON-PRINTABLE?
0383 F933 25 04 BCS PERIOD ; IF SO, PRINT PERIOD INSTEAD
0384 F935 81 7E CMPA #$7E ; IS IT VALID ASCII?
0385 F937 23 02 BLS PRASC ; IF SO PRINT IT
0386 F939 86 2E PERIOD LDA #'. ; LOAD A PERIOD (.)
0387 F93B 17 02 E3 PRASC LBSR OUTCH ; PRINT ASCII CHARACTER
0388 F93E 5A DECB ; DECREMENT COUNT
0389 F93F 26 EE BNE EDPASC
0390 F941 20 BC BRA NXTLIN
0378 F941 17 03 98 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 89 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 F943 17 02 37 BRKPNT LBSR IN1ADR ; GET BREAKPOINT ADDRESS
0395 F946 29 1E BVS EXITBP ; EXIT IF INVALID HEX ADDR.
0396 F948 8C DF C0 CMPX #STACK ; ADDRESS ILLEGAL IF >=$DFC0
0397 F94B 24 1A BCC BPERR ; IF ERROR PRINT (?), EXIT
0398 F94D 34 10 PSHS X ; $FA82 PUSH BP ADDRESS ON STACK
0399 F94F 8E FF FF LDX #$FFFF ; LOAD DUMMY ADDR TO TEST BP TABLE
0400 F952 8D 55 BSR BPTEST ; TEST BP TABLE FOR FREE SPACE
0401 F954 35 10 PULS X ; POP BP ADDRESS FROM STACK
0402 F956 27 0F BEQ BPERR ; (Z) SET, OUT OF BP TABLE SPACE
0403 F958 A6 84 LDA ,X ; GET DATA AT BREAKPOINT ADDRESS
0404 F95A 81 3F CMPA #$3F ; IS IT A SWI?
0405 F95C 27 09 BEQ BPERR ; IF SWI ALREADY, INDICATE ERROR
0406 F95E A7 A0 STA ,Y+ ; SAVE DATA BYTE IN BP TABLE
0407 F960 AF A4 STX ,Y ; SAVE BP ADDRESS IN BP TABLE
0408 F962 86 3F LDA #$3F ; LOAD A SWI ($3F)
0409 F964 A7 84 STA ,X ; SAVE SWI AT BREAKPOINT ADDRESS
0410 F966 39 EXITBP RTS ;
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 F967 17 02 B5 BPERR LBSR OUT1S ; OUTPUT SPACE
0415 F96A 86 3F LDA #'? ; LOAD (?), INDICATE BREAKPOINT ERROR
0416 F96C 16 02 B2 LBRA OUTCH ; PRINT "?"
0414 F980 17 03 5B BPERR LBSR OUT1S ; OUTPUT SPACE
0415 F983 86 3F LDA #'? ; LOAD (?), INDICATE BREAKPOINT ERROR
0416 F985 16 03 58 LBRA OUTCH ; PRINT "?"
0417 *
0418 *** "X" CLEAR OUTSTANDING BREAKPOINTS ***
0419 *
0420 F96F 10 8E DF D3 XBKPNT LDY #BPTBL ; POINT TO BREAKPOINT TABLE
0421 F973 C6 08 LDB #8 ; LOAD BREAKPOINT COUNTER
0422 F975 8D 18 XBPLP BSR RPLSWI ; REMOVE USED ENTRY IN BP TABLE
0423 F977 5A DECB $FAAC ; DECREMENT BP COUNTER
0424 F978 26 FB BNE XBPLP ; END OF BREAKPOINT TABLE?
0425 F97A 39 RTS
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 F97B 1F 43 SWIE TFR S,U ; TRANSFER STACK TO USER POINTER
0430 F97D AE 4A LDX 10,U ; LOAD PC FROM STACK INTO X-REG
0431 F97F 30 1F LEAX -1,X ; ADJUST ADDR DOWN 1 BYTE.
0432 F981 8D 26 BSR BPTEST ; FIND BREAKPOINT IN BP TABLE
0433 F983 27 04 BEQ REGPR ; IF FOUND, REPLACE DATA AT BP ADDR
0434 F985 AF 4A STX 10,U ; SAVE BREAKPOINT ADDR IN STACK
0435 F987 8D 06 BSR RPLSWI ; GO REPLACE SWI WITH ORIGINAL DATA
0436 F989 17 01 C8 REGPR LBSR REGSTR ; GO PRINT REGISTERS
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
1966,36 → 1974,36
0441 ENDIF TRAOPT
0441 ENDIF TRAOPT
0442 *
0443 F98C 16 FE B9 LBRA NEXTCMD ; GET NEXT COMMAND
0443 F9A5 16 FE B9 LBRA NEXTCMD ; GET NEXT COMMAND
0444 *
0445 F98F AE 21 RPLSWI LDX 1,Y ; LOAD BP ADDRESS FROM BP TABLE
0446 F991 8C DF C0 CMPX #STACK ; COMPARE TO TOP AVAILABLE USER MEMORY
0447 F994 24 0A BCC FFSTBL ; GO RESET TABLE ENTRY TO $FF'S
0448 F996 A6 84 LDA ,X ; GET DATA FROM BP ADDRESS
0449 F998 81 3F CMPA #$3F ; IS IT SWI?
0450 F99A 26 04 BNE FFSTBL ; IF NOT, RESET TABLE ENTRY TO $FF'S
0451 F99C A6 A4 LDA ,Y ; GET ORIGINAL DATA FROM BP TABLE
0452 F99E A7 84 STA ,X ; $FAD3 RESTORE DATA AT BP ADDRESS
0453 F9A0 86 FF FFSTBL LDA #$FF ; LOAD $FF IN A-ACC
0454 F9A2 A7 A0 STA ,Y+ ; RESET BREAKPOINT TABLE DATA TO $FF'S
0455 F9A4 A7 A0 STA ,Y+ ; RESET BREAKPOINT TABLE ADDR TO $FF'S
0456 F9A6 A7 A0 STA ,Y+
0457 F9A8 39 RTS
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 F9A9 10 8E DF D3 BPTEST LDY #BPTBL ; POINT TO BREAKPOINT TABLE
0462 F9AD C6 08 LDB #8 ; LOAD BREAKPOINT COUNTER
0463 F9AF A6 A0 FNDBP LDA ,Y+ ; LOAD DATA BYTE
0464 F9B1 AC A1 CMPX ,Y++ ; COMPARE ADDRESS, IS IT SAME?
0465 F9B3 27 04 BEQ BPADJ ; IF SO, ADJUST POINTER FOR TABLE ENTRY
0466 F9B5 5A DECB ; IF NOT, DECREMENT BREAKPOINT COUNTER
0467 F9B6 26 F7 BNE FNDBP ; AND LOOK FOR NEXT POSSIBLE MATCH
0468 F9B8 39 RTS ;
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 F9B9 31 3D BPADJ LEAY -3,Y ; MOVE POINTER TO BEGIN OF BP ENTRY
0472 F9BB 39 RTS
0471 F9D2 31 3D BPADJ LEAY -3,Y ; MOVE POINTER TO BEGIN OF BP ENTRY
0472 F9D4 39 RTS
0473 *
0474 IFD TRAOPT
0475 *
2283,59 → 2291,58
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
0756 F9D5 CC 00 06 IDEBOOT LDD #AUXRESET
0757 F9D8 FD E1 1E STD CF_AUX
0758 F9DB CC 00 02 LDD #AUXRSTREL
0759 F9DE FD E1 1E STD CF_AUX
0760 F9E1 CC 00 E0 LDD #HEADLBA
0761 F9E4 FD E1 0C STD CF_HEAD
0762 F9E7 8D 2E 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
0766 F9E9 CC 00 01 LDD #$01
0767 F9EC FD E1 04 STD CF_SECCNT
0768 F9EF 5F CLRB
0769 F9F0 FD E1 06 STD CF_SECNUM
0770 F9F3 FD E1 08 STD CF_CYLLO
0771 F9F6 FD E1 0A STD CF_CYLHI
0772 *
0773 LDB #CMDREAD ; IDE READ MULTIPLE
0774 STD CF_COMAND
0775 BSR WAITRDY
0776 LDX #$C000
0773 F9F9 C6 20 LDB #CMDREAD ; IDE READ MULTIPLE
0774 F9FB FD E1 0E STD CF_COMAND
0775 F9FE 8D 17 BSR WAITRDY
0776 FA00 8E C0 00 LDX #$C000
0777 *
0778 * READ LOOP
0779 *
0780 RDLOOP BSR WAITDRQ
0781 LDD CF_DATA
0782 STB ,X+
0783 CMPX #$C100
0784 BNE RDLOOP
0780 FA03 8D 21 RDLOOP BSR WAITDRQ
0781 FA05 FC E1 00 LDD CF_DATA
0782 FA08 E7 80 STB ,X+
0783 FA0A 8C C1 00 CMPX #$C100
0784 FA0D 26 F4 BNE RDLOOP
0785 *
0786 LDX #$C000
0787 STX $0A,U
0788 TFR U,S
0789 RTI
0786 FA0F 8E C0 00 LDX #$C000
0787 FA12 AF 4A STX $0A,U
0788 FA14 1F 34 TFR U,S
0789 FA16 3B 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
0793 FA17 FC E1 0E WAITRDY LDD CF_STATUS
0794 FA1A C5 80 BITB #BUSY
0795 FA1C 26 F9 BNE WAITRDY
0796 FA1E FC E1 0E LDD CF_STATUS
0797 FA21 C5 40 BITB #DRDY
0798 FA23 27 F2 BEQ WAITRDY
0799 FA25 39 RTS
0800 *
0801 * WAIT FOR DATA REQUEST
0802 *
0803 WAITDRQ LDD CF_STATUS
0804 BITB #DRQ
0805 BEQ WAITDRQ
0806 RTS
0803 FA26 FC E1 0E WAITDRQ LDD CF_STATUS
0804 FA29 C5 08 BITB #DRQ
0805 FA2B 27 F9 BEQ WAITDRQ
0806 FA2D 39 RTS
0807 ENDIF IDEOPT
0807 ENDIF IDEOPT
0808 *
0809 IFD RTCOPT
0810 *
2415,298 → 2422,297
0883 * PRESENT PHYSICAL ADDRESSES ON THE
0884 * SYSTEM BUS.
0885 *
0886 LRA PSHS A,B,X,Y ; PUSH REGISTERS ON STACK
0887 LDA 2,S ; GET MSB LOGICAL ADDR FRM X REG ON STACK
0888 LSRA ;
0889 LSRA ; ADJ FOR INDEXED INTO
0890 LSRA ; CORRESPONDING LOCATION
0891 LSRA ; IN LRA TABLE
0892 LDY #LRARAM ; LOAD LRA TABLE BASE ADDRESS
0893 LDB A,Y ; GET PHYSICAL ADDR. DATA FROM LRA TABLE
0894 LSRB ; ADJ. REAL ADDR. TO REFLECT EXTENDED
0895 LSRB ; PHYSICAL ADDRESS.
0896 LSRB ; EXTENDED MS 4-BITS ARE RETURNED
0897 LSRB ; IN THE "A" ACCUMULATOR
0898 STB ,S ; MS 4 BITS IN A ACCUM. STORED ON STACK
0899 LDB A,Y ; LOAD REAL ADDRESS DATA FROM LRA TABLE
0900 COMB ; COMP TO ADJ FOR PHYSICAL ADDR. IN X REG
0901 ASLB ; ADJ DATA FOR RELOCATION IN X REG
0902 ASLB ;
0903 ASLB ; $FB97
0904 ASLB ;
0905 LDA 2,S ; GET MS BYTE OF LOGICAL ADDR.
0906 ANDA #$0F ; MASK MS NIBBLE OF LOGICAL ADDRESS
0907 STA 2,S ; SAVE IT IN X REG ON STACK
0908 ORB 2,S ; SET MS BYTE IN X REG TO ADJ PHY ADDR.
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 STB 2,S ; SAVE AS LS 16 BITS OF PHY ADDR IN X REG ON STACK
0913 PULS A,B,X,Y,PC ; POP REGS. FROM STACK
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
0914 ENDIF DATOPT
0915 *
0916 * DELAY LOOP
0917 *
0918 F9BC 34 04 DLY PSHS B ; SAVE CONTENTS OF "B"
0919 F9BE C6 20 LDB #$20 ; GET LOOP DELAY VALUE
0920 F9C0 5A SUB1 DECB ; SUBTRACT ONE FROM VALUE
0921 F9C1 26 FD BNE SUB1 ; LOOP UNTIL ZERO
0922 F9C3 35 84 PULS B,PC ; RESTORE CONTENTS OF "B"
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 F9C5 BD FC 36 LOAD JSR ACINIZ
0928 F9C8 86 11 LDA #$11 ; LOAD 'DC1' CASS. READ ON CODE
0929 F9CA 17 02 54 LBSR OUTCH ; OUTPUT IT TO TERMINAL PORT
0930 F9CD 7F DF D2 CLR ECHO ; TURN OFF ECHO FLAG
0931 F9D0 17 02 26 LOAD1 LBSR ECHON ; INPUT 8 BIT BYTE WITH NO ECHO
0932 F9D3 81 53 LOAD2 CMPA #'S ; IS IT AN "S", START CHARACTER ?
0933 F9D5 26 F9 BNE LOAD1 ; IF NOT, DISCARD AND GET NEXT CHAR.
0934 F9D7 17 02 1F LBSR ECHON
0935 F9DA 81 39 CMPA #'9 ; IS IT A "9" , END OF FILE CHAR ?
0936 F9DC 27 3D BEQ LOAD21 ; IF SO, EXIT LOAD
0937 F9DE 81 31 CMPA #'1 ; IS IT A "1" , FILE LOAD CHAR ?
0938 F9E0 26 F1 BNE LOAD2 ; IF NOT, LOOK FOR START CHAR.
0939 F9E2 17 01 A8 LBSR BYTE ; INPUT BYTE COUNT
0940 F9E5 34 02 PSHS A ; PUSH COUNT ON STACK
0941 F9E7 29 26 BVS LODERR ; (V) C-CODE SET, ILLEGAL HEX
0942 F9E9 17 01 91 LBSR IN1ADR ; INPUT LOAD ADDRESS
0943 F9EC 29 21 BVS LODERR ; (V) C-CODE SET, ADDR NOT HEX
0944 F9EE 34 10 PSHS X ; PUSH ADDR ON STACK
0945 F9F0 E6 E0 LDB ,S+ ; LOAD MSB OF ADDR AS CHECKSUM BYTE
0946 F9F2 EB E0 ADDB ,S+ ; ADD LSB OF ADDR TO CHECKSUM
0947 F9F4 EB E4 ADDB ,S ; ADD BYTE COUNT BYTE TO CHECKSUM
0948 F9F6 6A E4 DEC ,S ; $FC37 DECREMENT BYTE COUNT 2 TO BYPASS
0949 F9F8 6A E4 DEC ,S ; ADDRESS BYTES.
0950 F9FA 34 04 LOAD10 PSHS B ; PUSH CHECKSUM ON STACK
0951 F9FC 17 01 8E LBSR BYTE ; INPUT DATA BYTE (2 HEX CHAR)
0952 F9FF 35 04 PULS B ; POP CHECKSUM FROM STACK
0953 FA01 29 0C BVS LODERR ; (V) SET, DATA BYTE NOT HEX
0954 FA03 34 02 PSHS A ; PUSH DATA BYTE ON STACK
0955 FA05 EB E0 ADDB ,S+ ; ADD DATA TO CHECKSUM, AUTO INC STACK
0956 FA07 6A E4 DEC ,S ; DECREMENT BYTE COUNT 1
0957 FA09 27 05 BEQ LOAD16 ; IF BYTE COUNT ZERO, TEST CHECKSUM
0958 FA0B A7 80 STA ,X+ ; SAVE DATA BYTE IN MEMORY
0959 FA0D 20 EB BRA LOAD10 ; GET NEXT DATA BYTE
0960 FA0F 5F LODERR CLRB ; ERROR CONDITION, ZERO CHECKSUM ;
0961 FA10 35 02 LOAD16 PULS A ; ADJUST STACK (REMOVE BYTE COUNT)
0962 FA12 C1 FF CMPB #$FF ; CHECKSUM OK?
0963 FA14 27 BA BEQ LOAD1 ; IF SO, LOAD NEXT LINE
0964 FA16 86 3F LDA #'? ; LOAD (?) ERROR INDICATOR
0965 FA18 17 02 06 LBSR OUTCH ; OUTPUT IT TO TERMINAL
0966 FA1B 73 DF D2 LOAD21 COM ECHO ; TURN ECHO ON
0967 FA1E 86 13 LDA #$13 ; $FC5F LOAD 'DC3' CASS. READ OFF CODE
0968 FA20 16 01 FE LBRA OUTCH ; OUTPUT IT
0927 FA5E BD FC F9 LOAD JSR ACINIZ
0928 FA61 86 11 LDA #$11 ; LOAD 'DC1' CASS. READ ON CODE
0929 FA63 17 02 7A 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 2C 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 24 LBRA OUTCH ; OUTPUT IT
0969 *
0970 ***** "P" PUNCH MIKBUG TAPE *****
0971 *
0972 FA23 6F E2 PUNCH CLR ,-S ; CLEAR RESERVED BYTE ON STACK
0973 FA25 17 01 4A LBSR IN2ADR ; GET BEGIN AND END ADDRESS
0974 FA28 34 30 PSHS X,Y ; SAVE ADDRESSES ON STACK
0975 FA2A 29 4D BVS PUNEXT ; (V) C-CODE SET, EXIT PUNCH
0976 FA2C AC 62 CMPX 2,S ; COMPARE BEGIN TO END ADDR
0977 FA2E 25 49 BCS PUNEXT ; IF BEGIN GREATER THAN END, EXIT PUNCH
0978 FA30 30 01 LEAX 1,X ; INCREMENT END ADDRESS
0979 FA32 AF E4 STX ,S ; STORE END ADDR ON STACK
0980 FA34 BD FC 36 JSR ACINIZ
0981 FA37 86 12 LDA #$12 ; LOAD 'DC2' PUNCH ON CODE
0982 FA39 17 01 E5 LBSR OUTCH ; OUTPUT IT TO TERMINAL
0983 FA3C EC E4 PUNCH2 LDD ,S ; LOAD END ADDR IN D-ACC
0984 FA3E A3 62 SUBD 2,S ; SUBTRACT BEGIN FROM END
0985 FA40 27 06 BEQ PUNCH3 ; SAME, PUNCH 32 BYTES DEFAULT
0986 FA42 10 83 00 20 CMPD #$20 ; LESS THAN 32 BYTES?
0987 FA46 23 02 BLS PUNCH4 ; PUNCH THAT MANY BYTES
0988 FA48 C6 20 PUNCH3 LDB #$20 ; LOAD BYTE COUNT OF 32.
0989 FA4A E7 64 PUNCH4 STB 4,S ; STORE ON STACK AS BYTE COUNT
0990 FA4C 8E FC F6 LDX #MSG20 ; POINT TO MSG "S1"
0991 FA4F 17 00 2F LBSR PSTRNG ; PRINT MSG
0992 FA52 CB 03 ADDB #3 ; ADD 3 BYTES TO BYTE COUNT
0993 FA54 1F 98 TFR B,A ; GET BYTE COUNT IN A-ACC TO PUNCH
0994 FA56 17 01 75 LBSR OUT2H ; OUTPUT BYTE COUNT
0995 FA59 AE 62 LDX 2,S ; LOAD BEGIN ADDRESS
0996 FA5B 17 01 68 LBSR OUT4H ; PUNCH ADDRESS
0997 FA5E EB 62 ADDB 2,S ; ADD ADDR MSB TO CHECKSUM
0998 FA60 EB 63 ADDB 3,S ; ADD ADDR LSB TO CHECKSUM
0999 FA62 EB 84 PUNCHL ADDB ,X ; ADD DATA BYTE TO CHECKSUM
1000 FA64 A6 80 LDA ,X+ ; LOAD DATA BYTE TO PUNCH
1001 FA66 17 01 65 LBSR OUT2H ; OUTPUT DATA BYTE
1002 FA69 6A 64 DEC 4,S ; DECREMENT BYTE COUNT
1003 FA6B 26 F5 BNE PUNCHL ; NOT DONE, PUNCH NEXT BYTE
1004 FA6D 53 COMB 1's ; COMPLIMENT CHECKSUM BYTE
1005 FA6E 1F 98 TFR B,A ; GET IT IN A-ACC TO PUNCH
1006 FA70 17 01 5B LBSR OUT2H ; OUTPUT CHECKSUM BYTE
1007 FA73 AF 62 STX 2,S ; SAVE X-REG IN STACK AS NEW PUNCH ADDR
1008 FA75 AC E4 CMPX ,S ; COMPARE IT TO END ADDR
1009 FA77 26 C3 BNE PUNCH2 ; $FCB5 PUNCH NOT DONE, CONT.
1010 FA79 86 14 PUNEXT LDA #$14 ; LOAD 'DC4' PUNCH OFF CODE
1011 FA7B 17 01 A3 LBSR OUTCH ; OUTPUT IT
1012 FA7E 32 65 LEAS 5,S ; READJUST STACK POINTER
1013 FA80 39 RTS ;
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 F9 JSR ACINIZ
0981 FAD0 86 12 LDA #$12 ; LOAD 'DC2' PUNCH ON CODE
0982 FAD2 17 02 0B 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 F3 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 C9 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 FA81 8D 02 PSTRNG BSR PCRLF ; PRINT CR/LF
1018 FA83 20 71 BRA PDATA ; PRINT STRING POINTED TO BY IX
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 FA85 34 10 PCRLF PSHS X ; SAVE IX
1023 FA87 8E FC A7 LDX #MSG2+1 ; POINT TO MSG CR/LF + 3 NULS
1024 FA8A 17 00 69 LBSR PDATA ; PRINT MSG
1025 FA8D 35 90 PULS X,PC ; RESTORE IX & RETURN
1022 FB1E 34 10 PCRLF PSHS X ; SAVE IX
1023 FB20 8E FE A4 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 FA8F 16 01 8D JOUT1S LBRA OUT1S
1030 FA92 16 00 F8 JBYTE LBRA BYTE
1031 FA95 16 00 E5 JIN1ADR LBRA IN1ADR
1029 FB28 16 01 B3 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 FA98 17 00 91 ALTRPC LBSR PRTPC ; $FCF5 PRINT MSG " PC = "
1036 FA9B 8D F2 ALTPC1 BSR JOUT1S ; OUTPUT SPACE
1037 FA9D 8D F6 BSR JIN1ADR ; GET NEW CONTENTS FOR "PC"
1038 FA9F 29 02 BVS ALTPCD ; EXIT IF INVALID HEX
1039 FAA1 AF 4A STX 10,U ; POKE IN NEW CONTENTS
1040 FAA3 39 ALTPCD RTS ;
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 FAA4 8D 61 ALTRU BSR PRTUS ; $FCCA PRINT MSG " US = "
1045 FAA6 8D E7 BSR JOUT1S ; OUTPUT SPACE
1046 FAA8 8D EB BSR JIN1ADR ; GET NEW CONTENTS FOR "US"
1047 FAAA 29 02 BVS ALTUD ; EXIT IF INVALID HEX
1048 FAAC AF 48 STX 8,U ; POKE IN NEW CONTENTS
1049 FAAE 39 ALTUD RTS ;
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 FAAF 8D 72 ALTRY BSR PRTIY ; PRINT MSG " IY = "
1054 FAB1 8D DC BSR JOUT1S ; OUTPUT SPACE
1055 FAB3 8D E0 BSR JIN1ADR ; GET NEW CONTENTS FOR "IY"
1056 FAB5 29 02 BVS ALTYD ; EXIT IF INVALID HEX
1057 FAB7 AF 46 STX 6,U ; $F8F0 POKE IN NEW CONTENTS
1058 FAB9 39 ALTYD RTS ;
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 FABA 8D 5E ALTRX BSR PRTIX ; $FCE0 PRINT MSG " IX = "
1063 FABC 8D D1 BSR JOUT1S ; OUTPUT SPACE
1064 FABE 8D D5 BSR JIN1ADR
1065 FAC0 29 02 BVS ALTXD
1066 FAC2 AF 44 STX 4,U
1067 FAC4 39 ALTXD RTS ;
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 FAC5 8D 49 ALTRDP BSR PRTDP ; $FCD5 PRINT MSG " DP = "
1072 FAC7 8D C6 BSR JOUT1S ; OUTPUT SPACE
1073 FAC9 8D C7 BSR JBYTE ; INPUT BYTE (2 HEX CHAR)
1074 FACB 29 02 BVS ALTDPD
1075 FACD A7 43 STA 3,U
1076 FACF 39 ALTDPD RTS ;
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 FAD0 8D 6C ALTRB BSR PRTB ; $FD09 PRINT MSG " B = "
1081 FAD2 8D BB BSR JOUT1S ; OUTPUT SPACE
1082 FAD4 8D BC BSR JBYTE ; INPUT BYTE (2 HEX CHAR)
1083 FAD6 29 02 BVS ALTBD
1084 FAD8 A7 42 STA 2,U
1085 FADA 39 ALTBD RTS ; $F91C
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 FADB 8D 58 ALTRA BSR PRTA ; $FCFF RINT MSG " A = "
1090 FADD 8D B0 BSR JOUT1S ; OUTPUT SPACE
1091 FADF 8D B1 BSR JBYTE ; INPUT BYTE (2 HEX CHAR)
1092 FAE1 29 02 BVS ALTAD
1093 FAE3 A7 41 STA 1,U
1094 FAE5 39 ALTAD RTS ;
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 FAE6 8D 5F ALTRCC BSR PRTCC ; $FD13 PRINT MSG " CC: "
1099 FAE8 8D A5 BSR JOUT1S ; OUTPUT SPACE
1100 FAEA 8D A6 BSR JBYTE ; INPUT BYTE (2 HEX CHAR)
1101 FAEC 29 04 BVS ALTCCD
1102 FAEE 8A 80 ORA #$80 ; SETS "E" FLAG IN PRINT LIST
1103 FAF0 A7 C4 STA ,U
1104 FAF2 39 ALTCCD RTS ;
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 FAF3 17 01 2B PRINT LBSR OUTCH
1109 FAF6 A6 80 PDATA LDA ,X+ ; GET 1st CHAR. TO PRINT
1110 FAF8 81 04 CMPA #4 ; IS IT EOT?
1111 FAFA 26 F7 BNE PRINT ; IF NOT EOT PRINT IT
1112 FAFC 39 RTS ;
1108 FB8C 17 01 51 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 FAFD 8E FC B9 PRTSP LDX #MSG10 ; POINT TO MSG "SP="
1117 FB00 8D F4 BSR PDATA ; PRINT MSG
1118 FB02 1F 31 TFR U,X
1119 FB04 16 00 BF JOUT4H LBRA OUT4H
1116 FB96 8E FE B6 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 FB07 8E FC C5 PRTUS LDX #MSG12 ; POINT TO MSG "US="
1122 FB0A 8D EA BSR PDATA ; PRINT MSG
1123 FB0C AE 48 LDX 8,U
1124 FB0E 20 F4 BRA JOUT4H
1121 FBA0 8E FE C2 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 FB10 8E FC D7 PRTDP LDX #MSG15 ; POINT TO MSG "DP="
1127 FB13 8D E1 BSR PDATA ; PRINT MSG
1128 FB15 A6 43 LDA 3,U
1129 FB17 16 00 B4 JOUT2H LBRA OUT2H ; OUTPUT HEX BYTE AS ASCII
1126 FBA9 8E FE D4 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 FB1A 8E FC D1 PRTIX LDX #MSG14 ; POINT TO MSG "IX="
1132 FB1D 8D D7 BSR PDATA ; PRINT MSG
1133 FB1F AE 44 LDX 4,U ; $FCE6
1134 FB21 20 E1 BRA JOUT4H
1131 FBB3 8E FE CE 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 FB23 8E FC CB PRTIY LDX #MSG13 ; POINT TO MSG "IY="
1137 FB26 8D CE BSR PDATA ; PRINT MSG
1138 FB28 AE 46 LDX 6,U
1139 FB2A 20 D8 BRA JOUT4H
1136 FBBC 8E FE C8 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 FB2C 8E FC BF PRTPC LDX #MSG11 ; POINT TO MSG "PC="
1142 FB2F 8D C5 BSR PDATA ; PRINT MSG
1143 FB31 AE 4A LDX 10,U
1144 FB33 20 CF BRA JOUT4H
1141 FBC5 8E FE BC 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 FB35 8E FC DD PRTA LDX #MSG16 ; POINT TO MSG "A="
1147 FB38 8D BC BSR PDATA ; PRINT MSG
1148 FB3A A6 41 LDA 1,U
1149 FB3C 20 D9 BRA JOUT2H ; OUTPUT HEX BYTE AS ASCII
1146 FBCE 8E FE DA 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 FB3E 8E FC E2 PRTB LDX #MSG17 ; POINT TO MSG "B="
1152 FB41 8D B3 BSR PDATA ; PRINT MSG
1153 FB43 A6 42 LDA 2,U
1154 FB45 20 D0 BRA JOUT2H ; OUTPUT HEX BYTE AS ASCII
1151 FBD7 8E FE DF 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 FB47 8E FC E7 PRTCC LDX #MSG18 ; POINT TO MSG "CC:"
1157 FB4A 8D AA BSR PDATA ; PRINT MSG
1158 FB4C A6 C4 LDA ,U
1159 FB4E 8E FC EE LDX #MSG19 ; POINT TO MSG "EFHINZVC"
1160 FB51 16 00 90 LBRA BIASCI ; OUTPUT IN BINARY/ASCII FORMAT
1156 FBE0 8E FE E4 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 EB 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 FB54 8E FC B5 REGSTR LDX #MSG5 ; POINT TO MSG " - "
1165 FB57 17 FF 27 LBSR PSTRNG ; PRINT MSG
1166 FB5A 8D A1 BSR PRTSP ; $FCBF
1167 FB5C 8D A9 BSR PRTUS ; $FCCA
1168 FB5E 8D B0 BSR PRTDP ; $FCD5
1169 FB60 8D B8 BSR PRTIX ; $FCE0
1170 FB62 8D BF BSR PRTIY ; $FCEB
1171 FB64 8E FC B5 LDX #MSG5 ; POINT TO MSG " - "
1172 FB67 17 FF 17 LBSR PSTRNG ; PRINT MSG
1173 FB6A 8D C0 BSR PRTPC ; $FCF5
1174 FB6C 8D C7 BSR PRTA ; $FCFF
1175 FB6E 8D CE BSR PRTB ; $FD09
1176 FB70 20 D5 BRA PRTCC ; $FD13
1164 FBED 8E FE B2 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 B2 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.
2715,87 → 2721,87
1182 * IN THE C-CODE REG. IS SET IF AN INVALID HEX
1183 * ADDRESS IS INPUT.
1184 *
1185 FB72 8D 09 IN2ADR BSR IN1ADR ; GET FIRST ADDRESS
1186 FB74 29 4D BVS NOTHEX ; EXIT IF NOT VALID HEX
1187 FB76 1F 12 TFR X,Y ; SAVE FIRST ADDR. IN "IY"
1188 FB78 86 2D LDA #'-
1189 FB7A 17 00 A4 LBSR OUTCH ; PRINT " - "
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 CA 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 FB7D 8D 0E IN1ADR BSR BYTE ; INPUT BYTE (2 HEX CHAR)
1196 FB7F 29 42 BVS NOTHEX ; EXIT IF NOT VALID HEX
1197 FB81 1F 01 TFR D,X
1198 FB83 8D 08 BSR BYTE ; INPUT BYTE (2 HEX CHAR)
1199 FB85 29 3C BVS NOTHEX
1200 FB87 34 10 PSHS X
1201 FB89 A7 61 STA 1,S
1202 FB8B 35 90 PULS X,PC
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 FB8D 8D 11 BYTE BSR INHEX ; GET HEX LEFT
1207 FB8F 29 32 BVS NOTHEX ; EXIT IF NOT VALID HEX
1208 FB91 48 ASLA ;
1209 FB92 48 ASLA ;
1210 FB93 48 ASLA ; SHIFT INTO LEFT NIBBLE
1211 FB94 48 ASLA ;
1212 FB95 1F 89 TFR A,B ; PUT HEXL IN "B"
1213 FB97 8D 07 BSR INHEX ; GET HEX RIGHT
1214 FB99 29 28 BVS NOTHEX ; EXIT IF NOT VALID HEX
1215 FB9B 34 04 PSHS B ; PUSH HEXL ON STACK
1216 FB9D AB E0 ADDA ,S+ ; ADD HEXL TO HEXR AND ADJ. STK
1217 FB9F 39 RTS ; RETURN WITH HEX L&R IN "A"
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 FBA0 8D 57 INHEX BSR ECHON ; INPUT ASCII CHAR.
1221 FBA2 81 30 CMPA #'0 ; IS IT > OR = "0" ?
1222 FBA4 25 1D BCS NOTHEX ; IF LESS IT AIN'T HEX
1223 FBA6 81 39 CMPA #'9 ; IS IT < OR = "9" ?
1224 FBA8 22 03 BHI INHEXA ; IF > MAYBE IT'S ALPHA
1225 FBAA 80 30 SUBA #$30 ; ASCII ADJ. NUMERIC
1226 FBAC 39 RTS ;
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 FBAD 81 41 INHEXA CMPA #'A ; IS IT > OR = "A"
1230 FBAF 25 12 BCS NOTHEX ; IF LESS IT AIN'T HEX
1231 FBB1 81 46 CMPA #'F ; IS IT < OR = "F" ?
1232 FBB3 22 03 BHI INHEXL ; IF > IT AIN'T HEX
1233 FBB5 80 37 SUBA #'A-10 ; ($37) ASCII ADJ. ALPHA
1234 FBB7 39 RTS ;
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 FBB8 81 61 INHEXL CMPA #'a ; IS IT > OR = "a"
1237 FBBA 25 07 BCS NOTHEX ; IF LESS IT AIN'T HEX
1238 FBBC 81 66 CMPA #'f ; IS IT < "f"
1239 FBBE 22 03 BHI NOTHEX ; IF > IT AIN'T HEX
1240 FBC0 80 57 SUBA #'a-10 ; ($57) ADJUST TO LOWER CASE
1241 FBC2 39 RTS ;
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 FBC3 1A 02 NOTHEX ORCC #2 ; SET (V) FLAG IN C-CODES REGISTER
1245 FBC5 39 RTS ;
1244 FC5C 1A 02 NOTHEX ORCC #2 ; SET (V) FLAG IN C-CODES REGISTER
1245 FC5E 39 RTS ;
1246 *
1247 *
1248 FBC6 34 10 OUT4H PSHS X ; PUSH X-REG. ON THE STACK
1249 FBC8 35 02 PULS A ; POP MS BYTE OF X-REG INTO A-ACC.
1250 FBCA 8D 02 BSR OUTHL ; OUTPUT HEX LEFT
1251 FBCC 35 02 PULS A ; POP LS BYTE OF X-REG INTO A-ACC.
1252 FBCE OUTHL EQU *
1253 FBCE 34 02 OUT2H PSHS A ; SAVE IT BACK ON STACK
1254 FBD0 44 LSRA ; CONVERT UPPER HEX NIBBLE TO ASCII
1255 FBD1 44 LSRA ;
1256 FBD2 44 LSRA ;
1257 FBD3 44 LSRA ;
1258 FBD4 8D 04 BSR XASCII ; PRINT HEX NIBBLE AS ASCII
1259 FBD6 35 02 OUTHR PULS A ; CONVERT LOWER HEX NIBBLE TO ASCII
1260 FBD8 84 0F ANDA #$0F ; STRIP LEFT NIBBLE
1261 FBDA 8B 30 XASCII ADDA #$30 ; ASCII ADJ
1262 FBDC 81 39 CMPA #$39 ; IS IT < OR = "9" ?
1263 FBDE 2F 02 BLE OUTC ; IF LESS, OUTPUT IT
1264 FBE0 8B 07 ADDA #7 ; IF > MAKE ASCII LETTER
1265 FBE2 20 3D OUTC BRA OUTCH ; OUTPUT CHAR
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 63 OUTC BRA OUTCH ; OUTPUT CHAR
1266 *
1267 * BINARY / ASCII --- THIS ROUTINE
1268 * OUTPUTS A BYTE IN ENHANCED
2806,29 → 2812,28
1273 * ARE OBTAINED FROM THE STRING
1274 * POINTED TO BY THE INDEX REG. "X".
1275 *
1276 FBE4 34 02 BIASCI PSHS A ; SAVE "A" ON STACK
1277 FBE6 C6 08 LDB #8 ; PRESET LOOP# TO BITS PER BYTE
1278 FBE8 A6 80 OUTBA LDA ,X+ ; GET LETTER FROM STRING
1279 FBEA 68 E4 ASL ,S ; TEST BYTE FOR "1" IN B7
1280 FBEC 25 02 BCS PRTBA ; IF ONE PRINT LETTER
1281 FBEE 86 2D LDA #'- ; IF ZERO PRINT "-"
1282 FBF0 8D 2F PRTBA BSR OUTCH ; PRINT IT
1283 FBF2 8D 2B BSR OUT1S ; PRINT SPACE
1284 FBF4 5A DECB ; SUB 1 FROM #BITS YET TO PRINT
1285 FBF5 26 F1 BNE OUTBA
1286 FBF7 35 82 PULS A,PC
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 55 PRTBA BSR OUTCH ; PRINT IT
1283 FC8B 8D 51 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 USRCMD JMP [MONEXT+EXTCMD]
1292 FC92 6E 9F F0 00 USRCMD JMP [MONEXT+EXTCMD]
1293 ENDIF EXTOPT
1293 ENDIF EXTOPT
1294 *
1295 *
1296 FBF9 7D DF D2 ECHON TST ECHO ; IS ECHO REQUIRED ?
1297 FBFC 27 06 BEQ INCH ; ECHO NOT REQ. IF CLEAR
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 *
2838,9 → 2843,9
1304 * BIT MASKED OFF. ALL OTHER REGISTERS
1305 * ARE PRESERVED.
1306 *
1307 FBFE 8D 04 INCHE BSR INCH ; GET CHAR FROM TERMINAL
1308 FC00 84 7F ANDA #$7F ; STRIP PARITY FROM CHAR.
1309 FC02 20 1D BRA OUTCH ; ECHO CHAR TO TERMINAL
1307 FC9B 8D 04 INCHE BSR INCH ; GET CHAR FROM TERMINAL
1308 FC9D 84 7F ANDA #$7F ; STRIP PARITY FROM CHAR.
1309 FC9F 20 3F BRA OUTCH ; ECHO CHAR TO TERMINAL
1310 *
1311 * INCH
1312 *
2850,31 → 2855,28
1316 * IS 8 BITS AND IS NOT ECHOED.
1317 *
1318 *
1319 FC04 34 10 INCH PSHS X ; SAVE IX
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]
1321 FCA3 86 11 LDA #$11 ; SET RTS* LOW, REQUEST FAR END TO TX
1322 FCA5 A7 9F DF E0 STA [CPORT]
1323 ENDIF HFCOPT
1323 ENDIF HFCOPT
1324 FC06 BE DF D0 GETSTA LDX CPORT ; POINT TO TERMINAL PORT
1325 FC09 A6 84 LDA ,X ; FETCH PORT STATUS
1326 FC0B 85 01 BITA #1 ; TEST READY BIT, RDRF ?
1324 FCA9 BE DF E0 GETSTA LDX CPORT ; POINT TO TERMINAL PORT
1325 FCAC A6 84 LDA ,X ; FETCH PORT STATUS
1326 FCAE 85 01 BITA #1 ; TEST READY BIT, RDRF ?
1327 IFD PS2OPT
1328 BNE GETST1
1329 LDX #PS2KBD
1330 LDA ,X
1331 BITA #1
1328 FCB0 26 09 BNE GETST1
1329 FCB2 8E E0 20 LDX #PS2KBD
1330 FCB5 A6 84 LDA ,X
1331 FCB7 85 01 BITA #1
1332 ENDIF PS2OPT
1332 ENDIF PS2OPT
1333 FC0D 27 F7 BEQ GETSTA ; IF NOT RDY, THEN TRY AGAIN
1334 FC0F GETST1 EQU *
1333 FCB9 27 EE BEQ GETSTA ; IF NOT RDY, THEN TRY AGAIN
1334 FCBB GETST1 EQU *
1335 IFD HFCOPT
1336 LDA #$51 ; SET RTS* HIGH, STOP FAR END FROM TXING, UNTIL NEXT INPUT
1337 STA [CPORT]
1336 FCBB 86 51 LDA #$51 ; SET RTS* HIGH, STOP FAR END FROM TXING, UNTIL NEXT INPUT
1337 FCBD A7 9F DF E0 STA [CPORT]
1338 ENDIF HFCOPT
1338 ENDIF HFCOPT
1339 FC0F A6 01 LDA 1,X ; FETCH CHAR
1340 FC11 35 90 PULS X,PC ; RESTORE IX
1339 FCC1 A6 01 LDA 1,X ; FETCH CHAR
1340 FCC3 35 90 PULS X,PC ; RESTORE IX
1341 *
1342 * INCHEK
1343 *
2885,24 → 2887,22
1348 * CLEAR IF A CHARACTER CAN BE READ.
1349 *
1350 *
1351 FC13 34 02 INCHEK PSHS A ; SAVE A ACCUM
1351 FCC5 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]
1353 FCC7 86 11 LDA #$11 ; SET RTS* LOW, REQUEST FAR END TO TX
1354 FCC9 A7 9F DF E0 STA [CPORT]
1355 ENDIF HFCOPT
1355 ENDIF HFCOPT
1356 FC15 A6 9F DF D0 LDA [CPORT] ; FETCH PORT STATUS
1357 FC19 85 01 BITA #1 ; TEST READY BIT, RDRF ?
1356 FCCD A6 9F DF E0 LDA [CPORT] ; FETCH PORT STATUS
1357 FCD1 85 01 BITA #1 ; TEST READY BIT, RDRF ?
1358 IFD PS2OPT
1359 BNE INCHEK1
1360 LDA PS2KBD
1361 BITA #1 ; TEST READY BIT< RDRF ?
1359 FCD3 26 05 BNE INCHEK1
1360 FCD5 B6 E0 20 LDA PS2KBD
1361 FCD8 85 01 BITA #1 ; TEST READY BIT< RDRF ?
1362 ENDIF PS2OPT
1362 ENDIF PS2OPT
1363 FC1B 35 82 INCHEK1 PULS A,PC ; RESTORE A ACCUM.
1363 FCDA 35 82 INCHEK1 PULS A,PC ; RESTORE A ACCUM.
1364 *
1365 FC1D 8D 00 OUT2S BSR OUT1S ; OUTPUT 2 SPACES
1366 FC1F 86 20 OUT1S LDA #$20 ; OUTPUT 1 SPACE
1365 FCDC 8D 00 OUT2S BSR OUT1S ; OUTPUT 2 SPACES
1366 FCDE 86 20 OUT1S LDA #$20 ; OUTPUT 1 SPACE
1367 *
1368 *
1369 * OUTCH
2913,44 → 2913,42
1374 * ALL REGISTERS ARE PRESERVED.
1375 *
1376 OUTCH IFD VDUOPT
1377 BSR VOUTCH
1377 FCE0 8D 49 BSR VOUTCH
1378 ENDIF VDUOPT
1378 ENDIF VDUOPT
1379 IFD DG640OPT
1380 BSR VOUTCH
1381 ENDIF DG640OPT
1381 ENDIF DG640OPT
1382 FC21 34 12 AOUTCH PSHS A,X ; SAVE A ACCUM AND IX
1383 FC23 BE DF D0 LDX CPORT ; GET ADDR. OF TERMINAL
1384 FC26 A6 84 FETSTA LDA ,X ; FETCH PORT STATUS
1385 FC28 85 02 BITA #2 ; TEST TDRE, OK TO XMIT ?
1386 FC2A 27 FA BEQ FETSTA ; IF NOT LOOP UNTIL RDY
1387 FC2C 85 08 BITA #8 ; CLEAR TO SEND ?
1388 FC2E 26 F6 BNE FETSTA ; NO, LOOP UNTIL CLEAR
1389 FC30 35 02 PULS A ; GET CHAR. FOR XMIT
1390 FC32 A7 01 STA 1,X ; XMIT CHAR.
1391 FC34 35 90 PULS X,PC ; RESTORE IX
1382 FCE2 34 12 AOUTCH PSHS A,X ; SAVE A ACCUM AND IX
1383 FCE4 BE DF E0 LDX CPORT ; GET ADDR. OF TERMINAL
1384 FCE7 A6 84 FETSTA LDA ,X ; FETCH PORT STATUS
1385 FCE9 85 02 BITA #2 ; TEST TDRE, OK TO XMIT ?
1386 FCEB 27 FA BEQ FETSTA ; IF NOT LOOP UNTIL RDY
1387 FCED 85 08 BITA #8 ; CLEAR TO SEND ?
1388 FCEF 26 F6 BNE FETSTA ; NO, LOOP UNTIL CLEAR
1389 FCF1 35 02 PULS A ; GET CHAR. FOR XMIT
1390 FCF3 A7 01 STA 1,X ; XMIT CHAR.
1391 FCF5 35 90 PULS X,PC ; RESTORE IX
1392 *
1393 * IO INITIALIZATION
1394 *
1395 FC36 IOINIZ EQU *
1395 FCF7 IOINIZ EQU *
1396 IFD VDUOPT
1397 BSR VINIZ
1397 FCF7 8D 13 BSR VINIZ
1398 ENDIF VDUOPT
1398 ENDIF VDUOPT
1399 IFD DG640OPT
1400 BSR VINIZ
1401 ENDIF DG640OPT
1401 ENDIF DG640OPT
1402 FC36 BE DF D0 ACINIZ LDX CPORT ; POINT TO CONTROL PORT ADDRESS
1403 FC39 86 03 LDA #3 ; RESET ACIA PORT CODE
1404 FC3B A7 84 STA ,X ; STORE IN CONTROL REGISTER
1405 FC3D 86 51 LDA #$51 ; SET 8 DATA, 2 STOP AN 0 PARITY RTS* HIGH
1406 FC3F A7 84 STA ,X ; STORE IN CONTROL REGISTER
1407 FC41 6D 01 TST 1,X ; ANYTHING IN DATA REGISTER?
1408 FC43 86 FF LDA #$FF ; TURN ON ECHO FLAG
1409 FC45 B7 DF D2 STA ECHO
1410 FC48 39 RTS
1402 FCF9 BE DF E0 ACINIZ LDX CPORT ; POINT TO CONTROL PORT ADDRESS
1403 FCFC 86 03 LDA #3 ; RESET ACIA PORT CODE
1404 FCFE A7 84 STA ,X ; STORE IN CONTROL REGISTER
1405 FD00 86 51 LDA #$51 ; SET 8 DATA, 2 STOP AN 0 PARITY RTS* HIGH
1406 FD02 A7 84 STA ,X ; STORE IN CONTROL REGISTER
1407 FD04 6D 01 TST 1,X ; ANYTHING IN DATA REGISTER?
1408 FD06 86 FF LDA #$FF ; TURN ON ECHO FLAG
1409 FD08 B7 DF E2 STA ECHO
1410 FD0B 39 RTS
1411 *
1412 IFD VDUOPT
1413 *
2965,221 → 2963,220
1422 * INITIALIZE EMULATOR *
1423 ***************************************************
1424 *
1425 VINIZ LDX #VDU
1426 LDD #0
1427 STD COLADX ; AND ROWADX
1428 STA VDUCOL,X
1429 STB VDUROW,X
1430 STB VDUOFF,X
1431 STD NEWROW ; AND ESCFLG
1432 LDB #$02
1433 STB VDUATT,X
1434 CLR ESCFLG
1435 LDA #$1B ; SEND ESCAPE
1436 BSR VOUTCH
1437 LDA #'Y ; CLEAR TO END OF SCREEN
1425 FD0C 8E E0 30 VINIZ LDX #VDU
1426 FD0F CC 00 00 LDD #0
1427 FD12 FD DF FB STD COLADX ; AND ROWADX
1428 FD15 A7 02 STA VDUCOL,X
1429 FD17 E7 03 STB VDUROW,X
1430 FD19 E7 04 STB VDUOFF,X
1431 FD1B FD DF FD STD NEWROW ; AND ESCFLG
1432 FD1E C6 02 LDB #$02
1433 FD20 E7 01 STB VDUATT,X
1434 FD22 7F DF FE CLR ESCFLG
1435 FD25 86 1B LDA #$1B ; SEND ESCAPE
1436 FD27 8D 02 BSR VOUTCH
1437 FD29 86 59 LDA #'Y ; CLEAR TO END OF SCREEN
1438 *
1439 ** VIDEO OUTPUT ROUTINE
1440 *
1441 VOUTCH PSHS A,B,X ; SAVE REGISTERS
1442 LDX #VDU ; POINT TO VDU REGISTERS
1441 FD2B 34 16 VOUTCH PSHS A,B,X ; SAVE REGISTERS
1442 FD2D 8E E0 30 LDX #VDU ; POINT TO VDU REGISTERS
1443 *
1444 ** CHECK FOR ESCAPE SEQUENCE
1445 *
1446 TST ESCFLG ; ESCAPE ACTIVE?
1447 BEQ SOROU1 ; BRANCH IF NOT
1448 BSR ESCAPE ; ELSE DO ESCAPE
1449 BRA RETURN ; AND RETURN
1446 FD30 7D DF FE TST ESCFLG ; ESCAPE ACTIVE?
1447 FD33 27 04 BEQ SOROU1 ; BRANCH IF NOT
1448 FD35 8D 60 BSR ESCAPE ; ELSE DO ESCAPE
1449 FD37 20 0D BRA RETURN ; AND RETURN
1450 *
1451 ** CHECK FOR CONTROL CHARACTERS
1452 *
1453 SOROU1 CMPA #$20 ; CONTROL CODES?
1454 BHS SOROU2
1455 BSR CONTRL ; BRANCH IF SO
1456 BRA RETURN
1453 FD39 81 20 SOROU1 CMPA #$20 ; CONTROL CODES?
1454 FD3B 24 04 BHS SOROU2
1455 FD3D 8D 09 BSR CONTRL ; BRANCH IF SO
1456 FD3F 20 05 BRA RETURN
1457 *
1458 ** OUTPUT TEXT CHARACTER
1459 *
1460 SOROU2 STA VDUCHR,X ; DISPLAY CHARACTER
1461 LBSR NEWCOL ; UPDATE COLUMN
1460 FD41 A7 84 SOROU2 STA VDUCHR,X ; DISPLAY CHARACTER
1461 FD43 17 00 AF LBSR NEWCOL ; UPDATE COLUMN
1462 *
1463 ** DISPLAY CURSOR AND RETURN
1464 *
1465 RETURN PULS A,B,X,PC ; RESTORE REGISTERS AND RETURN
1465 FD46 35 96 RETURN PULS A,B,X,PC ; RESTORE REGISTERS AND RETURN
1466 *
1467 ***************************************************
1468 * CONTROL CODE HANDLERS *
1469 ***************************************************
1470 *
1471 CONTRL CMPA #$08 ; CTRL H - BACKSPACE ?
1472 BEQ BACKSP
1473 CMPA #$1B ; ESCAPE SEQUENCE?
1474 BEQ SETESC
1475 CMPA #$1A ; CTRL Z - Clear Screen
1476 LBEQ CLRSCR
1477 CMPA #$16 ; CTRL ^ - Home
1478 BEQ HOME
1479 CMPA #$0D ; CTRL M - RETURN?
1480 LBEQ CRETN
1481 CMPA #$0C ; CTRL L - CHAR RIGHT
1482 BEQ CHRIGHT
1483 CMPA #$0B ; CTRL K - MOVE UP ONE LINE
1484 BEQ LINEUP
1485 CMPA #$0A ; CTRL J - LINE FEED
1486 BNE RETESC ; NONE OF THESE, RETURN
1471 FD48 81 08 CONTRL CMPA #$08 ; CTRL H - BACKSPACE ?
1472 FD4A 27 34 BEQ BACKSP
1473 FD4C 81 1B CMPA #$1B ; ESCAPE SEQUENCE?
1474 FD4E 27 5A BEQ SETESC
1475 FD50 81 1A CMPA #$1A ; CTRL Z - Clear Screen
1476 FD52 10 27 00 7C LBEQ CLRSCR
1477 FD56 81 16 CMPA #$16 ; CTRL ^ - Home
1478 FD58 27 38 BEQ HOME
1479 FD5A 81 0D CMPA #$0D ; CTRL M - RETURN?
1480 FD5C 10 27 00 89 LBEQ CRETN
1481 FD60 81 0C CMPA #$0C ; CTRL L - CHAR RIGHT
1482 FD62 27 24 BEQ CHRIGHT
1483 FD64 81 0B CMPA #$0B ; CTRL K - MOVE UP ONE LINE
1484 FD66 27 0F BEQ LINEUP
1485 FD68 81 0A CMPA #$0A ; CTRL J - LINE FEED
1486 FD6A 26 45 BNE RETESC ; NONE OF THESE, RETURN
1487 *
1488 ***************************************** LINE FEED
1489 *
1490 LINEFD LDD COLADX ; GET CURRENT COLUMN AND ROW
1491 INCB ; BUMP ROW
1492 CMPB #NUMLIN ; SCROLL TIME?
1493 BNE NEWCUR ; POSITION CURSOR IF NOT
1494 LBRA SCROLL ; ELSE SCROLL IT
1490 FD6C FC DF FB LINEFD LDD COLADX ; GET CURRENT COLUMN AND ROW
1491 FD6F 5C INCB ; BUMP ROW
1492 FD70 C1 19 CMPB #NUMLIN ; SCROLL TIME?
1493 FD72 26 79 BNE NEWCUR ; POSITION CURSOR IF NOT
1494 FD74 16 00 8F LBRA SCROLL ; ELSE SCROLL IT
1495 *
1496 ***************************************** LINE FEED
1497 *
1498 LINEUP LDD COLADX ; GET CURRENT COLUMN AND ROW
1499 TSTB ; AT TOP OF SCREEN ?
1500 BEQ RETESC ; Yes, Ignore
1501 DECB ; No, Decrement ROW
1502 BRA NEWCUR ; POSITION CURSOR
1498 FD77 FC DF FB LINEUP LDD COLADX ; GET CURRENT COLUMN AND ROW
1499 FD7A 5D TSTB ; AT TOP OF SCREEN ?
1500 FD7B 27 34 BEQ RETESC ; Yes, Ignore
1501 FD7D 5A DECB ; No, Decrement ROW
1502 FD7E 20 6D BRA NEWCUR ; POSITION CURSOR
1503 *
1504 *********************************** BACK SPACE
1505 *
1506 BACKSP LDA COLADX
1507 BEQ RETESC ; RETURN
1508 DECA
1509 BRA POSCOL ; POSITION CURSOR
1506 FD80 B6 DF FB BACKSP LDA COLADX
1507 FD83 27 2C BEQ RETESC ; RETURN
1508 FD85 4A DECA
1509 FD86 20 62 BRA POSCOL ; POSITION CURSOR
1510 *
1511 *********************************** CURSOR RIGHT
1512 *
1513 CHRIGHT LDA COLADX
1514 INCA
1515 CMPA #LINLEN
1516 BEQ RETESC
1517 BRA POSCOL
1513 FD88 B6 DF FB CHRIGHT LDA COLADX
1514 FD8B 4C INCA
1515 FD8C 81 50 CMPA #LINLEN
1516 FD8E 27 21 BEQ RETESC
1517 FD90 20 58 BRA POSCOL
1518 *
1519 *********************************** CURSOR RIGHT
1520 *
1521 HOME LDD #0 ; HOME - POSITION TOP OF SCREEN
1522 BRA NEWCUR
1521 FD92 CC 00 00 HOME LDD #0 ; HOME - POSITION TOP OF SCREEN
1522 FD95 20 56 BRA NEWCUR
1523 *
1524 ***************************************************
1525 * ESCAPE HANDLERS *
1526 ***************************************************
1527 *
1528 ESCAPE LDB ESCFLG ; GET FLAG
1529 CMPB #'= ; SETTING CURSOR?
1530 BEQ ESCCUR ; BRANCH IF SO
1531 CMPA #'Y ; CLEAR TO END OF SCREEN?
1532 BEQ ESCCLS
1533 CMPA #'T ; CLEAR TO END OF LINE?
1534 BEQ ESCCLL
1535 CMPA #'= ; STARTING CURSOR SET?
1536 BNE CLRESC ; BRANCH IF NOT
1528 FD97 F6 DF FE ESCAPE LDB ESCFLG ; GET FLAG
1529 FD9A C1 3D CMPB #'= ; SETTING CURSOR?
1530 FD9C 27 14 BEQ ESCCUR ; BRANCH IF SO
1531 FD9E 81 59 CMPA #'Y ; CLEAR TO END OF SCREEN?
1532 FDA0 27 6E BEQ ESCCLS
1533 FDA2 81 54 CMPA #'T ; CLEAR TO END OF LINE?
1534 FDA4 27 31 BEQ ESCCLL
1535 FDA6 81 3D CMPA #'= ; STARTING CURSOR SET?
1536 FDA8 26 04 BNE CLRESC ; BRANCH IF NOT
1537 *
1538 ***************************** START ESCAPE SEQUENCE
1539 *
1540 SETESC STA ESCFLG ; ELSE START CURSORING
1541 RTS ; AND RETURN
1540 FDAA B7 DF FE SETESC STA ESCFLG ; ELSE START CURSORING
1541 FDAD 39 RTS ; AND RETURN
1542 *
1543 CLRESC CLR ESCFLG ; NO OTHERS SUPPORTED
1544 RETESC RTS ; SO RETURN
1543 FDAE 7F DF FE CLRESC CLR ESCFLG ; NO OTHERS SUPPORTED
1544 FDB1 39 RETESC RTS ; SO RETURN
1545 *
1546 ********************************* SET SCREEN CURSOR
1547 *
1548 ESCCUR TST NEWROW ; ROW SET?
1549 BNE ESCCU1 ; BRANCH IF SO
1550 STA NEWROW ; ELSE SET NEW ROW
1551 RTS ; AND RETURN
1548 FDB2 7D DF FD ESCCUR TST NEWROW ; ROW SET?
1549 FDB5 26 04 BNE ESCCU1 ; BRANCH IF SO
1550 FDB7 B7 DF FD STA NEWROW ; ELSE SET NEW ROW
1551 FDBA 39 RTS ; AND RETURN
1552 *
1553 ESCCU1 CLR ESCFLG
1554 SUBA #$20 ; ADJUST COLUMN ADDRESS
1555 CMPA #LINLEN-1 ;CHECK FOR ACCEPTABLE COLUM
1556 BHI RETESC ; NOT OK, DO NOTHING
1553 FDBB 7F DF FE ESCCU1 CLR ESCFLG
1554 FDBE 80 20 SUBA #$20 ; ADJUST COLUMN ADDRESS
1555 FDC0 81 4F CMPA #LINLEN-1 ;CHECK FOR ACCEPTABLE COLUM
1556 FDC2 22 ED BHI RETESC ; NOT OK, DO NOTHING
1557 *
1558 ESCCU2 LDB NEWROW
1559 CLR NEWROW
1560 SUBB #$20 ; ADJUST TO ROW ADDRESS
1561 CMPB #NUMLIN-1 ; CHECK FOR ACCEPTABLE ROW
1562 BHI RETESC ; ELSE RETURN DOING NOTHING
1563 BRA NEWCUR ; GO SET NEW CURSOR IF SO
1558 FDC4 F6 DF FD ESCCU2 LDB NEWROW
1559 FDC7 7F DF FD CLR NEWROW
1560 FDCA C0 20 SUBB #$20 ; ADJUST TO ROW ADDRESS
1561 FDCC C1 18 CMPB #NUMLIN-1 ; CHECK FOR ACCEPTABLE ROW
1562 FDCE 22 E1 BHI RETESC ; ELSE RETURN DOING NOTHING
1563 FDD0 20 1B BRA NEWCUR ; GO SET NEW CURSOR IF SO
1564 *
1565 ****************** CLEAR FROM CURSOR TO END OF LINE
1566 *
1567 CLRSCR LDD #0 ; CLEAR FROM TOP OF SCREEN
1568 BSR NEWCUR
1569 ESCCLL LDA COLADX
1570 LDB #$20 ; AND CLEAR CHAR
1571 ESCCL1 STB VDUCHR,X ; DISPLAY TEXT
1572 INCA
1573 STA VDUCOL,X
1574 CMPA #LINLEN ; UNTIL END OF LINE
1575 BNE ESCCL1
1576 CLR ESCFLG
1577 RTS
1567 FDD2 CC 00 00 CLRSCR LDD #0 ; CLEAR FROM TOP OF SCREEN
1568 FDD5 8D 16 BSR NEWCUR
1569 FDD7 B6 DF FB ESCCLL LDA COLADX
1570 FDDA C6 20 LDB #$20 ; AND CLEAR CHAR
1571 FDDC E7 84 ESCCL1 STB VDUCHR,X ; DISPLAY TEXT
1572 FDDE 4C INCA
1573 FDDF A7 02 STA VDUCOL,X
1574 FDE1 81 50 CMPA #LINLEN ; UNTIL END OF LINE
1575 FDE3 26 F7 BNE ESCCL1
1576 FDE5 7F DF FE CLR ESCFLG
1577 FDE8 39 RTS
1578 *
1579 *********************************** CARRIAGE RETURN
1580 *
1581 CRETN CLRA ; SET COLUMN ZERO
1582 POSCOL LDB ROWADX ; GET CURRENT ROW
1581 FDE9 4F CRETN CLRA ; SET COLUMN ZERO
1582 FDEA F6 DF FC POSCOL LDB ROWADX ; GET CURRENT ROW
1583 *
1584 *********** GENERATE NEW CURSOR POSITION AND RETURN
1585 *
1586 NEWCUR STD COLADX ; SAVE NEW ROW AND COLUMN
1587 STA VDUCOL,X ; SET NEW COLUMN
1588 STB VDUROW,X ; SET NEW ROW
1589 RTS ; AND RETURN
1586 FDED FD DF FB NEWCUR STD COLADX ; SAVE NEW ROW AND COLUMN
1587 FDF0 A7 02 STA VDUCOL,X ; SET NEW COLUMN
1588 FDF2 E7 03 STB VDUROW,X ; SET NEW ROW
1589 FDF4 39 RTS ; AND RETURN
1590 *
1591 ********************* UPDATE CURRENT COLUMN AND ROW
1592 *
1593 NEWCOL LDD COLADX ; GET ROW AND COLUMN
1594 INCA ; BUMP COLUMN
1595 CMPA #LINLEN ; ROLL?
1596 BNE NEWCUR ; BRANCH IF NOT
1597 CLRA ; ELSE RESET TO ZERO
1598 INCB ; AND BUMP ROW
1599 CMPB #NUMLIN
1600 BNE NEWCUR
1601 DECB ; BOTTOM ROW
1602 BSR NEWCUR
1593 FDF5 FC DF FB NEWCOL LDD COLADX ; GET ROW AND COLUMN
1594 FDF8 4C INCA ; BUMP COLUMN
1595 FDF9 81 50 CMPA #LINLEN ; ROLL?
1596 FDFB 26 F0 BNE NEWCUR ; BRANCH IF NOT
1597 FDFD 4F CLRA ; ELSE RESET TO ZERO
1598 FDFE 5C INCB ; AND BUMP ROW
1599 FDFF C1 19 CMPB #NUMLIN
1600 FE01 26 EA BNE NEWCUR
1601 FE03 5A DECB ; BOTTOM ROW
1602 FE04 8D E7 BSR NEWCUR
1603 *
1604 ********************************* SCROLL THE SCREEN
1605 *
1606 SCROLL LDB VDUOFF,X
1607 INCB
1608 CMPB #NUMLIN
1609 BLO SCROL1
1610 CLRB
1611 SCROL1 STB VDUOFF,X
1606 FE06 E6 04 SCROLL LDB VDUOFF,X
1607 FE08 5C INCB
1608 FE09 C1 19 CMPB #NUMLIN
1609 FE0B 25 01 BLO SCROL1
1610 FE0D 5F CLRB
1611 FE0E E7 04 SCROL1 STB VDUOFF,X
1612 *
1613 **************** CLEAR FROM CURSOR TO END OF SCREEN
1614 *
1615 ESCCLS LDB COLADX ; GET CURSOR
1616 LDA #$20 ; GET A SPACE
1617 ESCCLS1 STB COLADX
1618 STB VDUCOL,X
1619 STA VDUCHR,X
1620 INCB
1621 CMPB #LINLEN
1622 BNE ESCCLS1
1615 FE10 F6 DF FB ESCCLS LDB COLADX ; GET CURSOR
1616 FE13 86 20 LDA #$20 ; GET A SPACE
1617 FE15 F7 DF FB ESCCLS1 STB COLADX
1618 FE18 E7 02 STB VDUCOL,X
1619 FE1A A7 84 STA VDUCHR,X
1620 FE1C 5C INCB
1621 FE1D C1 50 CMPB #LINLEN
1622 FE1F 26 F4 BNE ESCCLS1
1623 *
1624 LDB ROWADX
1625 INCB
1626 CMPB #NUMLIN
1627 BEQ ESCCLS2
1628 STB ROWADX
1629 STB VDUROW,X
1630 CLRB
1631 BRA ESCCLS1
1624 FE21 F6 DF FC LDB ROWADX
1625 FE24 5C INCB
1626 FE25 C1 19 CMPB #NUMLIN
1627 FE27 27 08 BEQ ESCCLS2
1628 FE29 F7 DF FC STB ROWADX
1629 FE2C E7 03 STB VDUROW,X
1630 FE2E 5F CLRB
1631 FE2F 20 E4 BRA ESCCLS1
1632 *
1633 ESCCLS2 CLRB
1634 STB COLADX
1635 STB VDUCOL,X
1636 STB ESCFLG
1637 RTS
1633 FE31 5F ESCCLS2 CLRB
1634 FE32 F7 DF FB STB COLADX
1635 FE35 E7 02 STB VDUCOL,X
1636 FE37 F7 DF FE STB ESCFLG
1637 FE3A 39 RTS
1638 ENDIF VDUOPT
1638 ENDIF VDUOPT
1639 *
1640 IFD DG640OPT
1641 ***************************************************
3495,42 → 3492,42
1949 *
1950 *************************************
1951 *
1952 FC49 JMPTAB EQU *
1953 FC49 01 FCB 1 " ^A "
1954 FC4A FA DB FDB ALTRA
1955 FC4C 02 FCB 2 " ^B "
1956 FC4D FA D0 FDB ALTRB
1957 FC4F 03 FCB 3 " ^C "
1958 FC50 FA E6 FDB ALTRCC
1959 FC52 04 FCB 4 " ^D "
1960 FC53 FA C5 FDB ALTRDP
1961 FC55 10 FCB $10 " ^P "
1962 FC56 FA 98 FDB ALTRPC
1963 FC58 15 FCB $15 " ^U "
1964 FC59 FA A4 FDB ALTRU
1965 FC5B 18 FCB $18 " ^X "
1966 FC5C FA BA FDB ALTRX
1967 FC5E 19 FCB $19 " ^Y "
1968 FC5F FA AF FDB ALTRY
1952 FE3B JMPTAB EQU *
1953 FE3B 01 FCB 1 " ^A "
1954 FE3C FB 74 FDB ALTRA
1955 FE3E 02 FCB 2 " ^B "
1956 FE3F FB 69 FDB ALTRB
1957 FE41 03 FCB 3 " ^C "
1958 FE42 FB 7F FDB ALTRCC
1959 FE44 04 FCB 4 " ^D "
1960 FE45 FB 5E FDB ALTRDP
1961 FE47 10 FCB $10 " ^P "
1962 FE48 FB 31 FDB ALTRPC
1963 FE4A 15 FCB $15 " ^U "
1964 FE4B FB 3D FDB ALTRU
1965 FE4D 18 FCB $18 " ^X "
1966 FE4E FB 53 FDB ALTRX
1967 FE50 19 FCB $19 " ^Y "
1968 FE51 FB 48 FDB ALTRY
1969 *
1970 FC61 42 FCC 'B'
1971 FC62 F9 43 FDB BRKPNT
1972 FC64 45 FCC 'E'
1973 FC65 F8 E4 FDB MEMDUMP
1974 FC67 47 FCC 'G'
1975 FC68 F8 8C FDB GO
1976 FC6A 4C FCC 'L'
1977 FC6B F9 C5 FDB LOAD
1978 FC6D 50 FCC 'P'
1979 FC6E FA 23 FDB PUNCH
1980 FC70 4D FCC 'M'
1981 FC71 F8 8F FDB MEMCHG
1982 FC73 52 FCC 'R'
1983 FC74 FB 54 FDB REGSTR
1984 FC76 53 FCC 'S'
1985 FC77 F8 D8 FDB DISSTK
1986 FC79 58 FCC 'X'
1987 FC7A F9 6F FDB XBKPNT
1970 FE53 42 FCC 'B'
1971 FE54 F9 5C FDB BRKPNT
1972 FE56 45 FCC 'E'
1973 FE57 F8 FD FDB MEMDUMP
1974 FE59 47 FCC 'G'
1975 FE5A F8 A5 FDB GO
1976 FE5C 4C FCC 'L'
1977 FE5D FA 5E FDB LOAD
1978 FE5F 50 FCC 'P'
1979 FE60 FA BC FDB PUNCH
1980 FE62 4D FCC 'M'
1981 FE63 F8 A8 FDB MEMCHG
1982 FE65 52 FCC 'R'
1983 FE66 FB ED FDB REGSTR
1984 FE68 53 FCC 'S'
1985 FE69 F8 F1 FDB DISSTK
1986 FE6B 58 FCC 'X'
1987 FE6C F9 88 FDB XBKPNT
1988 IFD MFDCOPT
1989 FCC 'D' ; *** SWTPC USES 'U' FOR MINIBOOT
1990 FDB MINBOOT
3542,10 → 3539,9
1995 ENDIF CF8OPT
1995 ENDIF CF8OPT
1996 IFD IDEOPT
1997 FCC 'D' ; *** XESS FPGA 16 BIT IDE USES 'D' FOR IDEBOOT
1998 FDB IDEBOOT
1997 FE6E 44 FCC 'D' ; *** XESS FPGA 16 BIT IDE USES 'D' FOR IDEBOOT
1998 FE6F F9 D5 FDB IDEBOOT
1999 ENDIF IDEOPT
1999 ENDIF IDEOPT
2000 IFD DMAFOPT
2001 FCC 'U' ; *** SWTPC USES 'D' FOR DMAF2 BOOT
2002 FDB DBOOT
3552,10 → 3548,9
2003 ENDIF DMAFOPT
2003 ENDIF DMAFOPT
2004 IFD EXTOPT
2005 FCC 'U' ; *** IF FPGA, 'U' IS FOR USER
2006 FDB USRCMD
2005 FE71 55 FCC 'U' ; *** IF FPGA, 'U' IS FOR USER
2006 FE72 FC 92 FDB USRCMD
2007 ENDIF EXTOPT
2007 ENDIF EXTOPT
2008 IFD RTCOPT
2009 FCC 'T'
2010 FDB TIMSET
3567,7 → 3562,7
2015 ENDIF TRAOPT
2015 ENDIF TRAOPT
2016 *
2017 FC7C TABEND EQU *
2017 FE74 TABEND EQU *
2018 *
2019 * ** 6809 VECTOR ADDRESSES **
2020 *
3578,19 → 3573,19
2025 * HIS OWN ROUTINES IF HE SO DESIRES.
2026 *
2027 *
2028 FC7C F9 7B RAMVEC FDB SWIE ; USER-V
2029 FC7E F8 8E FDB RTI ; SWI3-V
2030 FC80 F8 8E FDB RTI ; SWI2-V
2031 FC82 F8 8E FDB RTI ; FIRQ-V
2032 FC84 F8 8E FDB RTI ; IRQ-V
2033 FC86 F9 7B FDB SWIE ; SWI-V
2034 FC88 FF FF FDB $FFFF ; SVC-VO
2035 FC8A FF FF FDB $FFFF ; SVC-VL
2028 FE74 F9 94 RAMVEC FDB SWIE ; USER-V
2029 FE76 F8 A7 FDB RTI ; SWI3-V
2030 FE78 F8 A7 FDB RTI ; SWI2-V
2031 FE7A F8 A7 FDB RTI ; FIRQ-V
2032 FE7C F8 A7 FDB RTI ; IRQ-V
2033 FE7E F9 94 FDB SWIE ; SWI-V
2034 FE80 FF FF FDB $FFFF ; SVC-VO
2035 FE82 FF FF FDB $FFFF ; SVC-VL
2036 *
2037 * PRINTABLE MESSAGE STRINGS
2038 *
2039 FC8C 0D 0A 00 00 00 MSG1 FCB $D,$A,$0,$0,$0 * 0, CR/LF, 0
2040 FC91 53 79 73 30 39 42 FCC 'Sys09Bug 1.7 FOR '
2039 FE84 0D 0A 00 00 00 MSG1 FCB $D,$A,$0,$0,$0 * 0, CR/LF, 0
2040 FE89 53 79 73 30 39 42 FCC 'Sys09Bug 1.7 FOR '
75 67 20 31 2E 37
20 46 4F 52 20
2041 IFD SWTOPT
3621,55 → 3616,54
2060 FCC 'XESS'
2061 ENDIF XESOPT
2061 ENDIF XESOPT
2062 IFD ATLYSOPT
2063 FCC 'Atlys'
2064 ENDIF ATLYSOPT
2064 ENDIF ATLYSOPT
2062 IFD ATLOPT
2063 FE9A 41 74 6C 79 73 FCC 'Atlys'
2064 ENDIF ATLOPT
2065 IFD DE270OPT
2066 FCC 'DE2-70'
2067 ENDIF DE270OPT
2067 ENDIF DE270OPT
2068 FCA2 20 2D 20 FCC ' - '
2069 FCA5 04 FCB 4
2070 FCA6 4B 0D 0A 00 00 00 MSG2 FCB 'K,$0D,$0A,$00,$00,$00,$04 ; K,<CR>,<LF>,3 NULS,<EOT>
2068 FE9F 20 2D 20 FCC ' - '
2069 FEA2 04 FCB 4
2070 FEA3 4B 0D 0A 00 00 00 MSG2 FCB 'K,$0D,$0A,$00,$00,$00,$04 ; K,<CR>,<LF>,3 NULS,<EOT>
04
2071 FCAD 3E MSG3 FCC '>'
2072 FCAE 04 FCB 4
2073 FCAF 57 48 41 54 3F MSG4 FCC 'WHAT?'
2074 FCB4 04 FCB 4
2075 FCB5 20 2D 20 MSG5 FCC ' - '
2076 FCB8 04 FCB 4'
2077 FCB9 20 20 53 50 3D MSG10 FCC ' SP='
2078 FCBE 04 FCB 4
2079 FCBF 20 20 50 43 3D MSG11 FCC ' PC='
2080 FCC4 04 FCB 4
2081 FCC5 20 20 55 53 3D MSG12 FCC ' US='
2082 FCCA 04 FCB 4
2083 FCCB 20 20 49 59 3D MSG13 FCC ' IY='
2084 FCD0 04 FCB 4
2085 FCD1 20 20 49 58 3D MSG14 FCC ' IX='
2086 FCD6 04 FCB 4
2087 FCD7 20 20 44 50 3D MSG15 FCC ' DP='
2088 FCDC 04 FCB 4
2089 FCDD 20 20 41 3D MSG16 FCC ' A='
2090 FCE1 04 FCB 4
2091 FCE2 20 20 42 3D MSG17 FCC ' B='
2092 FCE6 04 FCB 4
2093 FCE7 20 20 43 43 3A 20 MSG18 FCC ' CC: '
2094 FCED 04 FCB 4
2095 FCEE 45 46 48 49 4E 5A MSG19 FCC 'EFHINZVC'
2071 FEAA 3E MSG3 FCC '>'
2072 FEAB 04 FCB 4
2073 FEAC 57 48 41 54 3F MSG4 FCC 'WHAT?'
2074 FEB1 04 FCB 4
2075 FEB2 20 2D 20 MSG5 FCC ' - '
2076 FEB5 04 FCB 4'
2077 FEB6 20 20 53 50 3D MSG10 FCC ' SP='
2078 FEBB 04 FCB 4
2079 FEBC 20 20 50 43 3D MSG11 FCC ' PC='
2080 FEC1 04 FCB 4
2081 FEC2 20 20 55 53 3D MSG12 FCC ' US='
2082 FEC7 04 FCB 4
2083 FEC8 20 20 49 59 3D MSG13 FCC ' IY='
2084 FECD 04 FCB 4
2085 FECE 20 20 49 58 3D MSG14 FCC ' IX='
2086 FED3 04 FCB 4
2087 FED4 20 20 44 50 3D MSG15 FCC ' DP='
2088 FED9 04 FCB 4
2089 FEDA 20 20 41 3D MSG16 FCC ' A='
2090 FEDE 04 FCB 4
2091 FEDF 20 20 42 3D MSG17 FCC ' B='
2092 FEE3 04 FCB 4
2093 FEE4 20 20 43 43 3A 20 MSG18 FCC ' CC: '
2094 FEEA 04 FCB 4
2095 FEEB 45 46 48 49 4E 5A MSG19 FCC 'EFHINZVC'
56 43
2096 FCF6 53 31 MSG20 FCC 'S1'
2097 FCF8 04 FCB 4
2096 FEF3 53 31 MSG20 FCC 'S1'
2097 FEF5 04 FCB 4
2098 IFD DATOPT
2099 *
2100 * POWER UP/ RESET/ NMI ENTRY POINT
2101 *
2102 ORG $FF00
2102 FF00 ORG $FF00
2103 *
2104 *
2105 START LDX #IC11 ; POINT TO DAT RAM IC11
2106 LDA #$0F ; GET COMPLIMENT OF ZERO
2105 FF00 8E FF F0 START LDX #IC11 ; POINT TO DAT RAM IC11
2106 FF03 86 0F LDA #$0F ; GET COMPLIMENT OF ZERO
2107 *
2108 *
2109 * INITIALIZE DAT RAM --- LOADS $F-$0 IN LOCATIONS $0-$F
3679,26 → 3673,26
2113 * STORED IN IT.
2114 *
2115 *
2116 DATLP STA ,X+ ; STORE & POINT TO NEXT RAM LOCATION
2117 DECA ; GET COMP. VALUE FOR NEXT LOCATION
2118 BNE DATLP ; ALL 16 LOCATIONS INITIALIZED ?
2116 FF05 A7 80 DATLP STA ,X+ ; STORE & POINT TO NEXT RAM LOCATION
2117 FF07 4A DECA ; GET COMP. VALUE FOR NEXT LOCATION
2118 FF08 26 FB BNE DATLP ; ALL 16 LOCATIONS INITIALIZED ?
2119 *
2120 * NOTE: IX NOW CONTAINS $0000, DAT RAM IS NO LONGER
2121 * ADDRESSED, AND LOGICAL ADDRESSES NOW EQUAL
2122 * PHYSICAL ADDRESSES.
2123 *
2124 LDA #$F0
2125 STA ,X ; STORE $F0 AT $FFFF
2126 LDX #$D0A0 ; ASSUME RAM TO BE AT $D000-$DFFF
2127 LDY #TSTPAT ; LOAD TEST DATA PATTERN INTO "Y"
2128 TSTRAM LDU ,X ; SAVE DATA FROM TEST LOCATION
2129 STY ,X ; STORE TEST PATTERN AT $D0A0
2130 CMPY ,X ; IS THERE RAM AT THIS LOCATION ?
2131 BEQ CNVADR ; IF MATCH THERE'S RAM, SO SKIP
2132 LEAX -$1000,X ; ELSE POINT 4K LOWER
2133 CMPX #$F0A0 ; DECREMENTED PAST ZER0 YET ?
2134 BNE TSTRAM ; IF NOT CONTINUE TESTING FOR RAM
2135 BRA START ; ELSE START ALL OVER AGAIN
2124 FF0A 86 F0 LDA #$F0
2125 FF0C A7 84 STA ,X ; STORE $F0 AT $FFFF
2126 FF0E 8E D0 A0 LDX #$D0A0 ; ASSUME RAM TO BE AT $D000-$DFFF
2127 FF11 10 8E 55 AA LDY #TSTPAT ; LOAD TEST DATA PATTERN INTO "Y"
2128 FF15 EE 84 TSTRAM LDU ,X ; SAVE DATA FROM TEST LOCATION
2129 FF17 10 AF 84 STY ,X ; STORE TEST PATTERN AT $D0A0
2130 FF1A 10 AC 84 CMPY ,X ; IS THERE RAM AT THIS LOCATION ?
2131 FF1D 27 0B BEQ CNVADR ; IF MATCH THERE'S RAM, SO SKIP
2132 FF1F 30 89 F0 00 LEAX -$1000,X ; ELSE POINT 4K LOWER
2133 FF23 8C F0 A0 CMPX #$F0A0 ; DECREMENTED PAST ZER0 YET ?
2134 FF26 26 ED BNE TSTRAM ; IF NOT CONTINUE TESTING FOR RAM
2135 FF28 20 D6 BRA START ; ELSE START ALL OVER AGAIN
2136 *
2137 *
2138 * THE FOLLOWING CODE STORES THE COMPLEMENT OF
3723,16 → 3717,16
2157 * OF RAM RESPONDS.
2158 *
2159 *
2160 CNVADR STU ,X ; RESTORE DATA AT TEST LOCATION
2161 TFR X,D ; PUT ADDR. OF PRESENT 4K BLOCK IN D
2162 COMA ; COMPLEMENT MSB OF THAT ADDRESS
2163 LSRA ; PUT MS 4 BITS OF ADDRESS IN
2164 LSRA ; LOCATION D0-D3 TO ALLOW STORING
2165 LSRA ; IT IN THE DYNAMIC ADDRESS
2166 LSRA ; TRANSLATION RAM.
2167 STA $FFFD ; STORE XLATION FACTOR IN DAT "D"
2160 FF2A EF 84 CNVADR STU ,X ; RESTORE DATA AT TEST LOCATION
2161 FF2C 1F 10 TFR X,D ; PUT ADDR. OF PRESENT 4K BLOCK IN D
2162 FF2E 43 COMA ; COMPLEMENT MSB OF THAT ADDRESS
2163 FF2F 44 LSRA ; PUT MS 4 BITS OF ADDRESS IN
2164 FF30 44 LSRA ; LOCATION D0-D3 TO ALLOW STORING
2165 FF31 44 LSRA ; IT IN THE DYNAMIC ADDRESS
2166 FF32 44 LSRA ; TRANSLATION RAM.
2167 FF33 B7 FF FD STA $FFFD ; STORE XLATION FACTOR IN DAT "D"
2168 *
2169 LDS #STACK ; INITIALIZE STACK POINTER
2169 FF36 10 CE DF C0 LDS #STACK ; INITIALIZE STACK POINTER
2170 *
2171 *
2172 * THE FOLLOWING CHECKS TO FIND THE REAL PHYSICAL ADDRESSES
3766,37 → 3760,37
2200 * 4K 4K 4K 4K 4K 4K 4K 4K 4K 4K -- -- 4K 4K -- --
2201 *
2202 *
2203 LDY #LRARAM ; POINT TO LOGICAL/REAL ADDR. TABLE
2204 STA 13,Y ; STORE $D--- XLATION FACTOR AT $DFDD
2205 CLR 14,Y ; CLEAR $DFDE
2206 LDA #$F0 ; DESTINED FOR IC8 AN MEM EXPANSION ?
2207 STA 15,Y ; STORE AT $DFDF
2208 LDA #$0C ; PRESET NUMBER OF BYTES TO CLEAR
2209 CLRLRT CLR A,Y ; CLEAR $DFDC THRU $DFD0
2210 DECA ; SUB. 1 FROM BYTES LEFT TO CLEAR
2211 BPL CLRLRT ; CONTINUE IF NOT DONE CLEARING
2212 FNDRAM LEAX -$1000,X ; POINT TO NEXT LOWER 4K OF RAM
2213 CMPX #$F0A0 ; TEST FOR DECREMENT PAST ZERO
2214 BEQ FINTAB ; SKIP IF FINISHED
2215 LDU ,X ; SAVE DATA AT CURRENT TEST LOCATION
2216 LDY #TSTPAT ; LOAD TEST DATA PATTERN INTO Y REG.
2217 STY ,X ; STORE TEST PATT. INTO RAM TEST LOC.
2218 CMPY ,X ; VERIFY RAM AT TEST LOCATION
2219 BNE FNDRAM ; IF NO RAM GO LOOK 4K LOWER
2220 STU ,X ; ELSE RESTORE DATA TO TEST LOCATION
2221 LDY #LRARAM ; POINT TO LOGICAL/REAL ADDR. TABLE
2222 TFR X,D ; PUT ADDR. OF PRESENT 4K BLOCK IN D
2223 LSRA ; PUT MS 4 BITS OF ADDR. IN LOC. D0-D3
2224 LSRA ; TO ALLOW STORING IT IN THE DAT RAM.
2225 LSRA
2226 LSRA
2227 TFR A,B ; SAVE OFFSET INTO LRARAM TABLE
2228 EORA #$0F ; INVERT MSB OF ADDR. OF CURRENT 4K BLK
2229 STA B,Y ; SAVE TRANSLATION FACTOR IN LRARAM TABLE
2230 BRA FNDRAM ; GO TRANSLATE ADDR. OF NEXT 4K BLK
2231 FINTAB LDA #$F1 ; DESTINED FOR IC8 AND MEM EXPANSION ?
2232 LDY #LRARAM ; POINT TO LRARAM TABLE
2233 STA 14,Y ; STORE $F1 AT $DFCE
2203 FF3A 10 8E DF D0 LDY #LRARAM ; POINT TO LOGICAL/REAL ADDR. TABLE
2204 FF3E A7 2D STA 13,Y ; STORE $D--- XLATION FACTOR AT $DFDD
2205 FF40 6F 2E CLR 14,Y ; CLEAR $DFDE
2206 FF42 86 F0 LDA #$F0 ; DESTINED FOR IC8 AN MEM EXPANSION ?
2207 FF44 A7 2F STA 15,Y ; STORE AT $DFDF
2208 FF46 86 0C LDA #$0C ; PRESET NUMBER OF BYTES TO CLEAR
2209 FF48 6F A6 CLRLRT CLR A,Y ; CLEAR $DFDC THRU $DFD0
2210 FF4A 4A DECA ; SUB. 1 FROM BYTES LEFT TO CLEAR
2211 FF4B 2A FB BPL CLRLRT ; CONTINUE IF NOT DONE CLEARING
2212 FF4D 30 89 F0 00 FNDRAM LEAX -$1000,X ; POINT TO NEXT LOWER 4K OF RAM
2213 FF51 8C F0 A0 CMPX #$F0A0 ; TEST FOR DECREMENT PAST ZERO
2214 FF54 27 22 BEQ FINTAB ; SKIP IF FINISHED
2215 FF56 EE 84 LDU ,X ; SAVE DATA AT CURRENT TEST LOCATION
2216 FF58 10 8E 55 AA LDY #TSTPAT ; LOAD TEST DATA PATTERN INTO Y REG.
2217 FF5C 10 AF 84 STY ,X ; STORE TEST PATT. INTO RAM TEST LOC.
2218 FF5F 10 AC 84 CMPY ,X ; VERIFY RAM AT TEST LOCATION
2219 FF62 26 E9 BNE FNDRAM ; IF NO RAM GO LOOK 4K LOWER
2220 FF64 EF 84 STU ,X ; ELSE RESTORE DATA TO TEST LOCATION
2221 FF66 10 8E DF D0 LDY #LRARAM ; POINT TO LOGICAL/REAL ADDR. TABLE
2222 FF6A 1F 10 TFR X,D ; PUT ADDR. OF PRESENT 4K BLOCK IN D
2223 FF6C 44 LSRA ; PUT MS 4 BITS OF ADDR. IN LOC. D0-D3
2224 FF6D 44 LSRA ; TO ALLOW STORING IT IN THE DAT RAM.
2225 FF6E 44 LSRA
2226 FF6F 44 LSRA
2227 FF70 1F 89 TFR A,B ; SAVE OFFSET INTO LRARAM TABLE
2228 FF72 88 0F EORA #$0F ; INVERT MSB OF ADDR. OF CURRENT 4K BLK
2229 FF74 A7 A5 STA B,Y ; SAVE TRANSLATION FACTOR IN LRARAM TABLE
2230 FF76 20 D5 BRA FNDRAM ; GO TRANSLATE ADDR. OF NEXT 4K BLK
2231 FF78 86 F1 FINTAB LDA #$F1 ; DESTINED FOR IC8 AND MEM EXPANSION ?
2232 FF7A 10 8E DF D0 LDY #LRARAM ; POINT TO LRARAM TABLE
2233 FF7E A7 2E STA 14,Y ; STORE $F1 AT $DFCE
2234 *
2235 * THE FOLLOWING CHECKS TO SEE IF THERE IS A 4K BLK OF
2236 * RAM LOCATED AT $C000-$CFFF. IF NONE THERE IT LOCATES
3804,14 → 3798,14
2238 * LOGICALLY RESPONDS TO THE ADDRESS $C---.
2239 *
2240 *
2241 LDA #$0C ; PRESET NUMBER HEX "C"
2242 FINDC LDB A,Y ; GET ENTRY FROM LRARAM TABLE
2243 BNE FOUNDC ; BRANCH IF RAM THIS PHYSICAL ADDR.
2244 DECA ; ELSE POINT 4K LOWER
2245 BPL FINDC ; GO TRY AGAIN
2246 BRA XFERTF
2247 FOUNDC CLR A,Y ; CLR XLATION FACTOR OF 4K BLOCK FOUND
2248 STB $0C,Y ; GIVE IT XLATION FACTOR MOVING IT TO $C---
2241 FF80 86 0C LDA #$0C ; PRESET NUMBER HEX "C"
2242 FF82 E6 A6 FINDC LDB A,Y ; GET ENTRY FROM LRARAM TABLE
2243 FF84 26 05 BNE FOUNDC ; BRANCH IF RAM THIS PHYSICAL ADDR.
2244 FF86 4A DECA ; ELSE POINT 4K LOWER
2245 FF87 2A F9 BPL FINDC ; GO TRY AGAIN
2246 FF89 20 14 BRA XFERTF
2247 FF8B 6F A6 FOUNDC CLR A,Y ; CLR XLATION FACTOR OF 4K BLOCK FOUND
2248 FF8D E7 2C STB $0C,Y ; GIVE IT XLATION FACTOR MOVING IT TO $C---
2249 *
2250 * THE FOLLOWING CODE ADJUSTS THE TRANSLATION
2251 * FACTORS SUCH THAT ALL REMAINING RAM WILL
3818,392 → 3812,489
2252 * RESPOND TO A CONTIGUOUS BLOCK OF LOGICAL
2253 * ADDRESSES FROM $0000 AND UP....
2254 *
2255 CLRA ; START AT ZERO
2256 TFR Y,X ; START POINTER "X" START OF "LRARAM" TABLE.
2257 COMPRS LDB A,Y ; GET ENTRY FROM "LRARAM" TABLE
2258 BEQ PNTNXT ; IF IT'S ZER0 SKIP
2259 CLR A,Y ; ELSE ERASE FROM TABLE
2260 STB ,X+ ; AND ENTER ABOVE LAST ENTRY- BUMP
2261 PNTNXT INCA ; GET OFFSET TO NEXT ENTRY
2262 CMPA #$0C ; LAST ENTRY YET ?
2263 BLT COMPRS
2255 FF8F 4F CLRA ; START AT ZERO
2256 FF90 1F 21 TFR Y,X ; START POINTER "X" START OF "LRARAM" TABLE.
2257 FF92 E6 A6 COMPRS LDB A,Y ; GET ENTRY FROM "LRARAM" TABLE
2258 FF94 27 04 BEQ PNTNXT ; IF IT'S ZER0 SKIP
2259 FF96 6F A6 CLR A,Y ; ELSE ERASE FROM TABLE
2260 FF98 E7 80 STB ,X+ ; AND ENTER ABOVE LAST ENTRY- BUMP
2261 FF9A 4C PNTNXT INCA ; GET OFFSET TO NEXT ENTRY
2262 FF9B 81 0C CMPA #$0C ; LAST ENTRY YET ?
2263 FF9D 2D F3 BLT COMPRS
2264 *
2265 * THE FOLLOWING CODE TRANSFER THE TRANSLATION
2266 * FACTORS FROM THE LRARAM TABLE TO IC11 ON
2267 * THE MP-09 CPU CARD.
2268 *
2269 XFERTF LDX #IC11 ; POINT TO DAT RAM IC11
2270 LDB #$10 ; GET NO. OF BYTES TO MOVE
2271 FETCH LDA ,Y+ ; GET BYTE AND POINT TO NEXT
2272 STA ,X+ ; POKE XLATION FACTOR IN IC11
2273 DECB ; SUB 1 FROM BYTES TO MOVE
2274 BNE FETCH ; CONTINUE UNTIL 16 MOVED
2269 FF9F 8E FF F0 XFERTF LDX #IC11 ; POINT TO DAT RAM IC11
2270 FFA2 C6 10 LDB #$10 ; GET NO. OF BYTES TO MOVE
2271 FFA4 A6 A0 FETCH LDA ,Y+ ; GET BYTE AND POINT TO NEXT
2272 FFA6 A7 80 STA ,X+ ; POKE XLATION FACTOR IN IC11
2273 FFA8 5A DECB ; SUB 1 FROM BYTES TO MOVE
2274 FFA9 26 F9 BNE FETCH ; CONTINUE UNTIL 16 MOVED
2275 *
2276 ELSE
2277 FCF9 39 LRA RTS
2278 FCFA 10 CE DF C0 START LDS #STACK ; INITIALIZE STACK POINTER
2279 FCFE 5F CLRB
2277 LRA RTS
2278 START LDS #STACK ; INITIALIZE STACK POINTER
2279 CLRB
2280 ENDIF DATOPT
2280 ENDIF DATOPT
2281 *
2282 FCFF 53 COMB ; SET "B" NON-ZERO
2283 FD00 F7 DF D2 STB ECHO ; TURN ON ECHO FLAG
2284 FD03 16 FB 0E LBRA MONITOR ; INITIALIZATION IS COMPLETE
2282 FFAB 53 COMB ; SET "B" NON-ZERO
2283 FFAC F7 DF E2 STB ECHO ; TURN ON ECHO FLAG
2284 FFAF 16 F8 62 LBRA MONITOR ; INITIALIZATION IS COMPLETE
2285 *
2286 ** INTERRUPT JUMP VECTORS
2287 *
2288 FD06 6E 9F DF C0 V1 JMP [STACK]
2289 FD0A 6E 9F DF C4 V2 JMP [SWI2]
2290 FD0E 6E 9F DF C6 V3 JMP [FIRQ]
2291 FD12 6E 9F DF C8 V4 JMP [IRQ]
2292 FD16 6E 9F DF CA V5 JMP [SWI]
2288 FFB2 6E 9F DF C0 V1 JMP [STACK]
2289 FFB6 6E 9F DF C4 V2 JMP [SWI2]
2290 FFBA 6E 9F DF C6 V3 JMP [FIRQ]
2291 FFBE 6E 9F DF C8 V4 JMP [IRQ]
2292 FFC2 6E 9F DF CA V5 JMP [SWI]
2293 *
2294 * SWI3 ENTRY POINT
2295 *
2296 FD1A 1F 43 SWI3E TFR S,U
2297 FD1C AE 4A LDX 10,U *$FFC8
2298 FD1E E6 80 LDB ,X+
2299 FD20 AF 4A STX 10,U
2300 FD22 4F CLRA
2301 FD23 58 ASLB
2302 FD24 49 ROLA
2303 FD25 BE DF CC LDX SVCVO
2304 FD28 8C FF FF CMPX #$FFFF
2305 FD2B 27 0F BEQ SWI3Z
2306 FD2D 30 8B LEAX D,X
2307 FD2F BC DF CE CMPX SVCVL
2308 FD32 22 08 BHI SWI3Z
2309 FD34 34 10 PSHS X
2310 FD36 EC C4 LDD ,U
2311 FD38 AE 44 LDX 4,U
2312 FD3A 6E F1 JMP [,S++]
2313 FD3C 37 1F SWI3Z PULU A,B,X,CC,DP
2314 FD3E EE 42 LDU 2,U
2315 FD40 6E 9F DF C2 JMP [SWI3]
2296 FFC6 1F 43 SWI3E TFR S,U
2297 FFC8 AE 4A LDX 10,U *$FFC8
2298 FFCA E6 80 LDB ,X+
2299 FFCC AF 4A STX 10,U
2300 FFCE 4F CLRA
2301 FFCF 58 ASLB
2302 FFD0 49 ROLA
2303 FFD1 BE DF CC LDX SVCVO
2304 FFD4 8C FF FF CMPX #$FFFF
2305 FFD7 27 0F BEQ SWI3Z
2306 FFD9 30 8B LEAX D,X
2307 FFDB BC DF CE CMPX SVCVL
2308 FFDE 22 08 BHI SWI3Z
2309 FFE0 34 10 PSHS X
2310 FFE2 EC C4 LDD ,U
2311 FFE4 AE 44 LDX 4,U
2312 FFE6 6E F1 JMP [,S++]
2313 FFE8 37 1F SWI3Z PULU A,B,X,CC,DP
2314 FFEA EE 42 LDU 2,U
2315 FFEC 6E 9F DF C2 JMP [SWI3]
2316 *
2317 * 6809 VECTORS
2318 *
2319 FFF0 ORG $FFF0
2320 FFF0 FD 06 FDB V1 USER-V
2321 FFF2 FD 1A FDB SWI3E SWI3-V
2322 FFF4 FD 0A FDB V2 SWI2-V
2323 FFF6 FD 0E FDB V3 FIRQ-V
2324 FFF8 FD 12 FDB V4 IRQ-V
2325 FFFA FD 16 FDB V5 SWI-V
2326 FFFC FD 06 FDB V1 NMI-V
2327 FFFE FC FA FDB START RESTART-V
2320 FFF0 FF B2 FDB V1 USER-V
2321 FFF2 FF C6 FDB SWI3E SWI3-V
2322 FFF4 FF B6 FDB V2 SWI2-V
2323 FFF6 FF BA FDB V3 FIRQ-V
2324 FFF8 FF BE FDB V4 IRQ-V
2325 FFFA FF C2 FDB V5 SWI-V
2326 FFFC FF B2 FDB V1 NMI-V
2327 FFFE FF 00 FDB START RESTART-V
0005 END START
0006 END
Program + Init Data = 2898 bytes
Program + Init Data = 3583 bytes
Error count = 0
 
ACIAC1 0000
ACIAD1 0001
ACINIZ FC36
ACIRST 01F7
ACIAC1 E000
ACIAD1 E001
ACIAOPT 00FF
ACIAS E000
ACINIZ FCF9
ACIRST F1FC
ACK 0006
AJDUMP F8F0
ALTAD FAE5
ALTBD FADA
ALTCCD FAF2
ALTDPD FACF
ALTPC1 FA9B
ALTPCD FAA3
ALTRA FADB
ALTRB FAD0
ALTRCC FAE6
ALTRDP FAC5
ALTRPC FA98
ALTRU FAA4
ALTRX FABA
ALTRY FAAF
ALTUD FAAE
ALTXD FAC4
ALTYD FAB9
AOUTCH FC21
AJDUMP F909
ALTAD FB7E
ALTBD FB73
ALTCCD FB8B
ALTDPD FB68
ALTPC1 FB34
ALTPCD FB3C
ALTRA FB74
ALTRB FB69
ALTRCC FB7F
ALTRDP FB5E
ALTRPC FB31
ALTRU FB3D
ALTRX FB53
ALTRY FB48
ALTUD FB47
ALTXD FB5D
ALTYD FB52
AOUTCH FCE2
ATLOPT 00FF
BACK F8D4
BIASCI FBE4
AUXRESET 0006
AUXRSTREL 0002
BACK F8ED
BACKSP FD80
BIASCI FC7D
BLKNUM 0104
BLOAD0 070D
BLOAD1 071B
BLOAD2 0731
BLOAD3 0745
BOOT 0700
BPADJ F9B9
BPERR F967
BPTBL DFD3
BPTEST F9A9
BRKPNT F943
BLOAD0 F70D
BLOAD1 F71B
BLOAD2 F731
BLOAD3 F745
BOOT F700
BPADJ F9D2
BPERR F980
BPTBL DFE3
BPTEST F9C2
BRKPNT F95C
BSSTACK C0FF
BUFFER 0200
BUSY 0080
BYTCNT 0105
BYTE FB8D
BYTE FC26
CAN 0018
CFLAG 0001
CHANGE F8C2
CHKDRV 053B
CF_AUX E11E
CF_BASE E100
CF_COMAND E10E
CF_CYLHI E10A
CF_CYLLO E108
CF_DATA E100
CF_ERROR E102
CF_FEATURE E102
CF_HEAD E10C
CF_SECCNT E104
CF_SECNUM E106
CF_STATUS E10E
CHANGE F8DB
CHKDRV F546
CHKSUM 0103
CHRTN F8C1
CHRIGHT FD88
CHRTN F8DA
CLRESC FDAE
CLRLRT FF48
CLRSCR FDD2
CLRSTK F82F
CPORT DFD0
CMDREAD 0020
CMDWRITE 0030
CNVADR FF2A
COLADX DFFB
COMPRS FF92
CONTRL FD48
CPORT DFE0
CRETN FDE9
DATLP FF05
DATOPT 00FF
DELCNT 0108
DELCON 04E2
DFL1 0115
DFL2 0122
DFL3 0136
DFL4 01A0
DISFOS 0085
DISSTK F8D8
DLY F9BC
DNS 0707
DRNUM 070C
DFL1 F119
DFL2 F126
DFL3 F13A
DFL4 F1A4
DISFOS F089
DISSTK F8F1
DLY FA55
DNS F707
DRDY 0040
DRNUM F70C
DRQ 0008
DRVNUM 0100
DRVS2 0536
DRVSEL 052F
ECHO DFD2
ECHON FBF9
EDPASC F92F
EDPRTN F8EF
EDUMP F90B
DRVS2 F541
DRVSEL F53A
ECHO DFE2
ECHON FC96
EDPASC F948
EDPRTN F908
EDUMP F924
EFLAG 0080
ELOOP F91D
ELOOP F936
EOT 0004
EXITBP F966
EXTEND 0035
EXTTAB 002C
FETSTA FC26
ERR 0001
ESCAPE FD97
ESCCL1 FDDC
ESCCLL FDD7
ESCCLS FE10
ESCCLS1 FE15
ESCCLS2 FE31
ESCCU1 FDBB
ESCCU2 FDC4
ESCCUR FDB2
ESCFLG DFFE
EXITBP F97F
EXTCMD 0000
EXTEND F035
EXTOPT 00FF
EXTTAB F02C
FETCH FFA4
FETSTA FCE7
FFLAG 0040
FFSTBL F9A0
FFSTBL F9B9
FINDC FF82
FINTAB FF78
FIRQ DFC6
FNDBP F9AF
FORWRD F8D0
GETCH 0752
GETCH2 0758
GETCH4 0767
GETST1 FC0F
GETSTA FC06
GO F88C
GOFLEX 076A
FNDBP F9C8
FNDRAM FF4D
FNDREL F84E
FORWRD F8E9
FOUNDC FF8B
GETCH F752
GETCH2 F758
GETCH4 F767
GETST1 FCBB
GETSTA FCA9
GO F8A5
GOFLEX F76A
HEADLBA 00E0
HFCOPT 00FF
HFLAG 0020
HOME FD92
IC11 FFF0
IDEBOOT F9D5
IDEOPT 00FF
IFLAG 0010
IN1ADR FB7D
IN2ADR FB72
INCH FC04
INCHE FBFE
INCHEK FC13
INCHEK1 FC1B
IN1ADR FC16
IN2ADR FC0B
INCH FCA1
INCHE FC9B
INCHEK FCC5
INCHEK1 FCDA
INCHEV F806
INCHKV F808
INCHV F804
INHEX FBA0
INHEXA FBAD
INHEXL FBB8
INITDR 04B2
INTER 0200
INTER0 020B
INTER1 0219
INTER2 021E
INTEST 01F2
IOINIZ FC36
INHEX FC39
INHEXA FC46
INHEXL FC51
INITDR F4BD
INTER F207
INTER0 F212
INTER1 F221
INTER2 F227
INTEST F1F6
IOINIZ FCF7
IRQ DFC8
JBYTE FA92
JIN1ADR FA95
JMPCMD F888
JMPEXT 002A
JMPTAB FC49
JOUT1S FA8F
JOUT2H FB17
JOUT4H FB04
LADR 070A
LOAD F9C5
LOAD1 F9D0
LOAD10 F9FA
LOAD16 FA10
LOAD2 F9D3
LOAD21 FA1B
LODERR FA0F
JBYTE FB2B
JIN1ADR FB2E
JMPCMD F8A1
JMPEXT F02A
JMPTAB FE3B
JOUT1S FB28
JOUT2H FBB0
JOUT4H FB9D
LADR F70A
LINEFD FD6C
LINEUP FD77
LINLEN 0050
LOAD FA5E
LOAD1 FA69
LOAD10 FA93
LOAD16 FAA9
LOAD2 FA6C
LOAD21 FAB4
LODERR FAA8
LOOPA F81D
LRA FCF9
LRA FA2E
LRARAM DFD0
LRAV F812
MAXSEC 010C
MAXTRK 010B
MDUMP1 F8E9
MEMC2 F896
MEMCHG F88F
MEMDUMP F8E4
MESS6 00AE
MDUMP1 F902
MEMC2 F8AF
MEMCHG F8A8
MEMDUMP F8FD
MESS6 F0B2
MONEXT F000
MONIO E000
MONITOR F814
MONITV F800
MONRAM DFC0
MONROM F800
MSG1 FC8C
MSG10 FCB9
MSG11 FCBF
MSG12 FCC5
MSG13 FCCB
MSG14 FCD1
MSG15 FCD7
MSG16 FCDD
MSG17 FCE2
MSG18 FCE7
MSG19 FCEE
MSG2 FCA6
MSG20 FCF6
MSG3 FCAD
MSG4 FCAF
MSG5 FCB5
MSGWHAT 0035
MSG1 FE84
MSG10 FEB6
MSG11 FEBC
MSG12 FEC2
MSG13 FEC8
MSG14 FECE
MSG15 FED4
MSG16 FEDA
MSG17 FEDF
MSG18 FEE4
MSG19 FEEB
MSG2 FEA3
MSG20 FEF3
MSG3 FEAA
MSG4 FEAC
MSG5 FEB2
MSGWHAT F035
NAK 0015
NEXTCMD F848
NEXTEXT 0002
NEWCOL FDF5
NEWCUR FDED
NEWROW DFFD
NEXTCMD F861
NEXTEXT F002
NFLAG 0008
NMI DFC0
NOTHEX FBC3
NXTCH0 F872
NXTCHR F875
NOTHEX FC5C
NUMLIN 0019
NXTCH0 F88B
NXTCHR F88E
NXTCMV F802
NXTEX0 0016
NXTEX1 0019
NXTLIN F8FF
OUT1S FC1F
OUT2H FBCE
OUT2S FC1D
OUT4H FBC6
OUTBA FBE8
OUTC FBE2
OUTCH FC21
NXTEX0 F016
NXTEX1 F019
NXTLIN F918
OUT1S FCDE
OUT2H FC67
OUT2S FCDC
OUT4H FC5F
OUTBA FC81
OUTC FC7B
OUTCH FCE0
OUTCHV F80A
OUTHL FBCE
OUTHR FBD6
OUTTE1 0233
OUTTE2 0241
OUTTER 0231
OUTHL FC67
OUTHR FC6F
OUTTE1 F23C
OUTTE2 F24B
OUTTER F23A
PCLKHI 0001
PCLKLO 0000
PCRLF FA85
PCRLF FB1E
PCRLFV F80E
PDATA FAF6
PDATA0 0246
PDATA1 0248
PDATA FB8F
PDATA0 F251
PDATA1 F253
PDATAV F80C
PERIOD F939
PRASC F93B
PRINT FAF3
PERIOD F952
PNTNXT FF9A
POSCOL FDEA
PRASC F954
PRINT FB8C
PROMREG E0C0
PRSTHI 0002
PRSTLO 0000
PRTA FB35
PRTB FB3E
PRTBA FBF0
PRTCC FB47
PRTCMD F866
PRTDP FB10
PRTIX FB1A
PRTIY FB23
PRTPC FB2C
PRTSP FAFD
PRTUS FB07
PRTA FBCE
PRTB FBD7
PRTBA FC89
PRTCC FBE0
PRTCMD F87F
PRTDP FBA9
PRTIX FBB3
PRTIY FBBC
PRTPC FBC5
PRTSP FB96
PRTUS FBA0
PS2KBD E020
PS2OPT 00FF
PSTRGV F810
PSTRNG FA81
PUNCH FA23
PUNCH2 FA3C
PUNCH3 FA48
PUNCH4 FA4A
PUNCHL FA62
PUNEXT FA79
RAMVEC FC7C
RCHAR 0046
RCHAR1 004B
RCHAR2 004F
RCHAR3 005E
RDLP1 04F7
READ 0787
READ1 0797
READSC 04E6
REGPR F989
REGSTR FB54
RESTR1 04C7
RF3 01D7
PSTRNG FB1A
PUNCH FABC
PUNCH2 FAD5
PUNCH3 FAE1
PUNCH4 FAE3
PUNCHL FAFB
PUNEXT FB12
RAMVEC FE74
RCHAR F046
RCHAR1 F04B
RCHAR2 F04F
RCHAR3 F05F
RDLOOP FA03
RDLP1 F502
READ F787
READ1 F797
READSC F4F1
REGPR F9A2
REGSTR FBED
RELPAS F855
RESTR1 F4D2
RETESC FDB1
RETURN FD46
RF3 F1DB
RMAXSEC 00FF
RMAXTRK 0100
RPLSWI F98F
RTI F88E
ROWADX DFFC
RPLSWI F9A8
RTI F8A7
RTOTSEC FE01
SCHAR 0062
SCHAR1 0069
SCHAR2 006D
SCHAR3 007F
SCT 0706
SCHAR F064
SCHAR1 F06B
SCHAR2 F06F
SCHAR3 F082
SCROL1 FE0E
SCROLL FE06
SCT F706
SCTBUF C300
SECTOR 0102
SEEK 076D
SEEKTS 04CC
SKPDMP F908
SEEK F76D
SEEKTS F4D7
SETESC FDAA
SKPDMP F921
SOH 0001
SOROU1 FD39
SOROU2 FD41
STACK DFC0
START FCFA
SUB1 F9C0
START FF00
SUB1 FA59
SVCVL DFCE
SVCVO DFCC
SWI DFCA
SWI2 DFC4
SWI3 DFC2
SWI3E FD1A
SWI3Z FD3C
SWIE F97B
SWI3E FFC6
SWI3Z FFE8
SWIE F994
SYNCHI AA55
SYNCLO FF00
TABEND FC7C
TADR 0708
TABEND FE74
TADR F708
TRACK 0101
TRK 0705
UBSUB 003E
UFEXIT 01EC
UFMSG1 00CB
UFSUB 00E6
UFSUB1 00EF
UXERR 03FF
UXEXIT 03F9
UXLOOP 03AD
UXMES0 024F
UXMES1 0268
UXMES2 027A
UXMSG3 0289
UXMSG4 029A
UXSUB 02B1
UXSUB1 02BD
UXSUB2 02EA
V1 FD06
V2 FD0A
V3 FD0E
V4 FD12
V5 FD16
TRK F705
TSTPAT 55AA
TSTRAM FF15
UBSUB F03E
UFEXIT F1F0
UFMSG1 F0CF
UFSUB F0EA
UFSUB1 F0F3
USRCMD FC92
UXERR F40A
UXEXIT F404
UXLOOP F3B8
UXMES0 F25A
UXMES1 F273
UXMES2 F285
UXMSG3 F294
UXMSG4 F2A5
UXSUB F2BC
UXSUB1 F2C8
UXSUB2 F2F5
V1 FFB2
V2 FFB6
V3 FFBA
V4 FFBE
V5 FFC2
VDU E030
VDUATT 0001
VDUCHR 0000
VDUCOL 0002
VDUOFF 0004
VDUOPT 00FF
VDUROW 0003
VFLAG 0002
VOLMSG 00DD
WRITSC 050A
WRTLP1 051C
WTDRQ 07B7
WTRDY 07A8
XACK 04A9
XASCII FBDA
XBKPNT F96F
XBPLP F975
XBYTE0 040A
XBYTE1 0419
XREAD 0405
VINIZ FD0C
VOLMSG F0E1
VOUTCH FD2B
WAITDRQ FA26
WAITRDY FA17
WRITSC F515
WRTLP1 F527
WTDRQ F7B7
WTRDY F7A8
XACK F4B4
XASCII FC73
XBKPNT F988
XBPLP F98E
XBYTE0 F415
XBYTE1 F424
XFERTF FF9F
XREAD F410
XSTATE 0106
XSTBL 0442
XSTBLE 044D
XSTCK 0483
XSTCK1 0493
XSTCK2 04A0
XSTCOM 0458
XSTDA 046C
XSTDA1 047E
XSTST 0422
XSTST1 042C
XSTST2 0438
XSTST3 043F
XSTBL F44D
XSTBLE F458
XSTCK F48E
XSTCK1 F49E
XSTCK2 F4AB
XSTCOM F463
XSTDA F477
XSTDA1 F489
XSTST F42D
XSTST1 F437
XSTST2 F443
XSTST3 F44A
ZFLAG 0004
/System09/trunk/src/sys09bug/sys09atl.vhd
28,49 → 28,49
 
ROM00: RAMB16_S9
generic map (
INIT_00 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_01 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_02 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_03 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_04 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_05 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_06 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_07 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_08 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_09 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_0a => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_0b => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_0c => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_0d => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_0e => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_0f => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_10 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_11 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_12 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_13 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_14 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_15 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_16 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_17 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_18 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_19 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_1a => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_1b => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_1c => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_1d => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_1e => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_1f => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_20 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_21 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_22 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_23 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_24 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_25 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_26 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_27 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_28 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_29 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_2a => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_00 => x"8C02300D2780E12CF08E20C0022F60C10AF89FAD2086891F7F8406F89FAD02F0",
INIT_01 => x"CD8E040D0A3F2054414857BCF258EAF0463EF042946E29021635F08EF52635F0",
INIT_02 => x"B6B035EE261F30F6263F310A254700E0B6E2048E10E8038E30343B341F4AAF00",
INIT_03 => x"0235ED261F30F5263F310C25474700E0B6E2048E10E8038E02343034B03501E0",
INIT_04 => x"2E2E2E6B7369642045444920676E6974616D726F460D0AB03501E0B70235B035",
INIT_05 => x"6E20657669726420454449040D0A043F207265626D754E2065766972440D0A20",
INIT_06 => x"6574656C706D6F432074616D726F460D0A04202164657461636F6C6C6120746F",
INIT_07 => x"002510308169FF17FB2450FF1753F2BD89F08EBDF4BD04204B53494445444904",
INIT_08 => x"017FFB265A80A75F4F00028E3AF5BDFD008E0001F7891F3080E90022103381EF",
INIT_09 => x"F60101B601A70186846C042600814C0201B684A70101B600028E0201B7018601",
INIT_0a => x"028EC82600810101B601017C0201B70186D72600810201B602017C15F5BD0201",
INIT_0b => x"8EF1F4BDFFC64F00028E15F5BDFFC6FF86016F846F00028EF1F4BDFFC6FF8600",
INIT_0c => x"8E102034016F846F00028EF1F4BD03C64F00028E15F5BDFFC64F016F846F0002",
INIT_0d => x"FFC6FF861D88ED0101CC1B88ED0001F64F2035F72618C15C85A7A0A610C6E1F0",
INIT_0e => x"F5BD03C64F2588A707862488A707862388A701862188ED01FECC2688ED1F88ED",
INIT_0f => x"E0B7038639018500E0B653F27ECFF08E2503170201F70101B701C64F00F78E15",
INIT_10 => x"20DD8D0A2778850826018500E0B60A017F09017F0801B710863900E0B7118600",
INIT_11 => x"8500E0B6023439021A4FDC2608017AE12609017AE6260A017A39FD1C01E0B6E6",
INIT_12 => x"646F6D580A0D39F826048180A6E78D3901E0B70235F120B38DF5277885082602",
INIT_13 => x"706D6F432064616F6C70550A0D0464616F6C7055206B73694420454449206D65",
INIT_14 => x"626D754E2065766972440A0D04726F7272452064616F6C70550A0D046574656C",
INIT_15 => x"175AF28E04294E2F5928203F206572755320756F59206572410A0D043A207265",
INIT_16 => x"01B730802801221033812E01251030816AFF17FB293CFF178BFF1794F28E91FF",
INIT_17 => x"815F843DFF17FB290FFF175EFF17A5F28E4BFF17308B0001B66CFF1794F28E00",
INIT_18 => x"0101B701C64F00028E0401B701860601FF2DF4CEB10117B3265981FF0027104E",
INIT_19 => x"D501170201F60101B600028ED6002510E00017870117E0002510EA00170201F7",
INIT_1a => x"B00017570117B0002510BA00170201F70101B75C0201F60101B600028E710117",
INIT_1b => x"0101B75C0201F60101B600028E410117A501170201F60101B600028EA6002510",
INIT_1c => x"88E60B01B74C2688A600028E76002510800017270117800025108A00170201F7",
INIT_1d => x"01F70101B700028E5C0201F60101B60301176701170201F60101B60C01F75C27",
INIT_1e => x"00173701170201F60101B600028E38002510420017E90017420025104C001702",
INIT_1f => x"01F70101B701C64F00F78EC3260B01B14C01C6CB260C01F15C0201F60101B6D3",
INIT_20 => x"CE1BFE1715860A28EFFD170601FE403443FE1685F28E53F27E73F28E11011702",
INIT_21 => x"FAFD1706860826048139FA1C4DF4CE06260181C0350601FFED26C4ADF1202DF4",
INIT_22 => x"2DF4CEDDFD17158639FA1C63F4CE06260401B139FA1C39051A0326188139051A",
INIT_23 => x"350301B70301BB023439FA1C77F4CE0501B7808603017FEF260401B14339FA1C",
INIT_24 => x"043439041AFE1C2DF4CE04017C0B260301B139FA1C80A78EF4CE032605017A02",
INIT_25 => x"0600CC82357FFD170686023439FA1C2DF4CE8CFD1715860435011F80C45A101F",
INIT_26 => x"E4E606E1FD5A4F023401C64F668DD602160CE1FDE000CC1EE1FD0200CC1EE1FD",
INIT_27 => x"8E102034AC02170EE1FD2000CCE48D82355F04E1FD01C60AE1FD0001F608E1FD",
INIT_28 => x"8802170EE1FD3000CCC08D395F9502172035F4263F3180E700E1FCB202170001",
INIT_29 => x"0123038103A6395F7002172035F4263F3100E1FD80E68D02174F00018E102034",
INIT_2a => x"00000000000000000000000000000000000000000000395F03A6395F0001B74F",
INIT_2b => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_2c => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_2d => x"0000000000000000000000000000000000000000000000000000000000000000",
84,12 → 84,12
INIT_35 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_36 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_37 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_38 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_39 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_3a => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_3b => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_3c => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_3d => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_38 => x"270281358D00C48E1000C3FDF18CECFFC0CE1000000000C00000000000000B20",
INIT_39 => x"5D891F158DD08CA71A8DD48CA71F8DEA20DA8CA7268DDE8CA72B8DF626168110",
INIT_3a => x"8D0B2784EC00C38E0F2600C48C10C920F5265A80A71435098D1434C58CAED927",
INIT_3b => x"C60AE1FD908CE608E1FDE4E606E1FD5A4F02349B9C6E39A0A604C38E109D2626",
INIT_3c => x"3F3180E700E1FC1E8D00018E102034178D0EE1FD2000CCE48D82355F04E1FD01",
INIT_3d => x"0039F92708C50EE1FC39F22740C50EE1FCF92680C50EE1FC395F028D2035F526",
INIT_3e => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_3f => x"0000000000000000000000000000000000000000000000000000000000000000"
)
142,70 → 142,70
 
ROM00: RAMB16_S9
generic map (
INIT_00 => x"A780A610C6C0DF8E107CFC8EF9FC81FA85FAF6FA21FC13FCFEFB04FC48F814F8",
INIT_01 => x"17431FE4A7D0866AAFDD8C30FB265AE26F0CC6420117D0DFBF00008EF9265AA0",
INIT_02 => x"175E86092C2081891FF1270D817F84B30317330217ADFC8EAE02178CFC8EF403",
INIT_03 => x"F5267CFC8C02300F2780E149FC8E20C0022F60C1B30317B80317408B981FBF03",
INIT_04 => x"0317211FE50117B5FC8E121F2D29EB02173B341FBC2094ADC020700217AFFC8E",
INIT_05 => x"260D8117275E81DD271881E12708811128DE0217730317250317A4A67B031725",
INIT_06 => x"C0DF8E321F220217BE203F31C22021315103173F865403170827A4A1A4A7390F",
INIT_07 => x"AC011FF0C4201F0634F0C41000C3101F390124E1AC203406298B021705201F30",
INIT_08 => x"1780A610C6020317AE0217E4AE6E0117B5FC8E103439623203270D03170527E4",
INIT_09 => x"265AE302172E8602237E810425208180A610C6E1AEF20217F5265AFA0217AC02",
INIT_0a => x"A0A709273F8184A60F271035558DFFFF8E10341A24C0DF8C1E29370217BC20EE",
INIT_0b => x"304AAE431F39FB265A188D08C6D3DF8E10B202163F86B502173984A73F86A4AF",
INIT_0c => x"84A7A4A604263F8184A60A24C0DF8C21AEB9FE16C80117068D4AAF0427268D1F",
INIT_0d => x"20C60434393D3139F7265A0427A1ACA0A608C6D3DF8E1039A0A7A0A7A0A7FF86",
INIT_0e => x"31813D2739811F0217F9265381260217D2DF7F540217118636FCBD8435FD265A",
INIT_0f => x"358E01170434E46AE46AE4EBE0EBE0E61034212991011726290234A80117F126",
INIT_10 => x"1386D2DF730602173F86BA27FFC102355FEB2080A70527E46AE0EB02340C2904",
INIT_11 => x"62A3E4ECE50117128636FCBDE4AF0130492562AC4D2930344A0117E26FFE0116",
INIT_12 => x"62EB68011762AE750117981F03CB2F0017F6FC8E64E720C60223200083100627",
INIT_13 => x"6532A301171486C326E4AC62AF5B0117981F53F526646A65011780A684EB63EB",
INIT_14 => x"29F68DF28D910017E50016F800168D01169035690017A7FC8E10347120028D39",
INIT_15 => x"D58DD18D5E8D3946AF0229E08DDC8D728D3948AF0229EB8DE78D618D394AAF02",
INIT_16 => x"8DB08D588D3942A70229BC8DBB8D6C8D3943A70229C78DC68D498D3944AF0229",
INIT_17 => x"B9FC8E39F726048180A62B011739C4A7808A0429A68DA58D5F8D3941A70229B1",
INIT_18 => x"AED78DD1FC8EB4001643A6E18DD7FC8EF42048AEEA8DC5FC8EBF0016311FF48D",
INIT_19 => x"FC8ED92041A6BC8DDDFC8ECF204AAEC58DBFFC8ED82046AECE8DCBFC8EE12044",
INIT_1a => x"B08DA98DA18D27FF17B5FC8E900016EEFC8EC4A6AA8DE7FC8ED02042A6B38DE2",
INIT_1b => x"290E8DA400172D86121F4D29098DD520CE8DC78DC08D17FF17B5FC8EBF8DB88D",
INIT_1c => x"39E0AB04342829078D891F484848483229118D903561A710343C29088D011F42",
INIT_1d => x"03226681072561813937800322468112254181393080032239811D253081578D",
INIT_1e => x"022F3981308B0F840235048D4444444402340235028D0235103439021A395780",
INIT_1f => x"048D0627D2DF7D8235F1265A2B8D2F8D2D860225E46880A608C602343D20078B",
INIT_20 => x"86008D82350185D0DF9FA60234903501A6F727018584A6D0DFBE10341D207F84",
INIT_21 => x"A7518684A70386D0DFBE903501A70235F6260885FA27028584A6D0DFBE123420",
INIT_22 => x"FA19BAFA18A4FA1598FA10C5FA04E6FA03D0FA02DBFA0139D2DFB7FF86016D84",
INIT_23 => x"8EF87BF96FF958D8F85354FB528FF84D23FA50C5F94C8CF847E4F84543F942AF",
INIT_24 => x"4F4620372E312067754239307379530000000A0DFFFFFFFF7BF98EF88EF88EF8",
INIT_25 => x"20043D5053202004202D20043F54414857043E040000000A0D4B04202D202052",
INIT_26 => x"412020043D50442020043D58492020043D59492020043D53552020043D435020",
INIT_27 => x"535FC0DFCE103904315343565A4E4948464504203A43432020043D422020043D",
INIT_28 => x"80E64AAE431FCADF9F6EC8DF9F6EC6DF9F6EC4DF9F6EC0DF9F6E0EFB16D2DFF7",
INIT_29 => x"42EE1F37F16E44AEC4EC10340822CEDFBC8B300F27FFFF8CCCDFBE49584F4AAF",
INIT_2a => x"00000000000000000000000000000000000000000000000000000000C2DF9F6E",
INIT_2b => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_2c => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_2d => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_2e => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_2f => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_30 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_31 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_32 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_33 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_34 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_35 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_36 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_37 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_38 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_39 => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_3a => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_3b => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_3c => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_3d => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_3e => x"0000000000000000000000000000000000000000000000000000000000000000",
INIT_3f => x"FAFC06FD16FD12FD0EFD0AFD1AFD06FD00000000000000000000000000000000"
INIT_00 => x"A780A610C6C0DF8E1074FE8E2EFA1AFB1EFB8FFBE0FCC5FC9BFCA1FC61F814F8",
INIT_01 => x"17431FE4A7D0866AAFDD8C30FB265AE26F0CC65B0117E0DFBF00E08EF9265AA0",
INIT_02 => x"0317A3FE8E0C0417F62A5A19048B0327856D0DC64FD0DF8E47031784FE8EB504",
INIT_03 => x"17408B981F6504175E86092C2081891FF1270D817F84370417B30217AAFE8E2E",
INIT_04 => x"20F00217ACFE8EF52674FE8C02300F2780E13BFE8E20C0022F60C15904175E04",
INIT_05 => x"17A4A6210417A50317211F650217B2FE8E121F2D296B03173B341FBC2094ADC0",
INIT_06 => x"27A4A1A4A7390F260D8117275E81DD271881E127088111285E0317190417A503",
INIT_07 => x"0B031705201F30C0DF8E321FA20217BE203F31C2202131F703173F86FA031708",
INIT_08 => x"27A603170527E4AC011FF0C4201F0634F0C41000C3101F390124E1AC20340629",
INIT_09 => x"265AA003172C031780A610C6A803172E0317E4AEEE0117B2FE8E103439623203",
INIT_0a => x"29B70217BC20EE265A8903172E8602237E810425208180A610C6E1AE980317F5",
INIT_0b => x"3984A73F86A4AFA0A709273F8184A60F271035558DFFFF8E10341A24C0DF8C1E",
INIT_0c => x"4AAF0427268D1F304AAE431F39FB265A188D08C6E3DF8E105803163F865B0317",
INIT_0d => x"A7A0A7A0A7FF8684A7A4A604263F8184A60A24C0DF8C21AEB9FE16480217068D",
INIT_0e => x"E1FD0200CC1EE1FD0600CC393D3139F7265A0427A1ACA0A608C6E3DF8E1039A0",
INIT_0f => x"178D0EE1FD20C60AE1FD08E1FD06E1FD5F04E1FD0100CC2E8D0CE1FDE000CC1E",
INIT_10 => x"E1FCF92680C50EE1FC3B341F4AAF00C08EF42600C18C80E700E1FC218D00C08E",
INIT_11 => x"54545454A6E6D0DF8E104444444462A6363439F92708C50EE1FC39F22740C50E",
INIT_12 => x"FCBD8435FD265A20C60434B63562E762EA62A70F8462A65858585853A6E6E4E7",
INIT_13 => x"0234A80117F12631813D273981230217F92653812A0217E2DF7F7A02171186F9",
INIT_14 => x"E0EB02340C2904358E01170434E46AE46AE4EBE0EBE0E6103421299101172629",
INIT_15 => x"0117E26F2402161386E2DF732C02173F86BA27FFC102355FEB2080A70527E46A",
INIT_16 => x"2320008310062762A3E4EC0B02171286F9FCBDE4AF0130492562AC4D2930344A",
INIT_17 => x"1780A684EB63EB62EB68011762AE750117981F03CB2F0017F3FE8E64E720C602",
INIT_18 => x"10347120028D396532C901171486C326E4AC62AF5B0117981F53F526646A6501",
INIT_19 => x"8D618D394AAF0229F68DF28D910017E50016F80016B301169035690017A4FE8E",
INIT_1a => x"498D3944AF0229D58DD18D5E8D3946AF0229E08DDC8D728D3948AF0229EB8DE7",
INIT_1b => x"8D3941A70229B18DB08D588D3942A70229BC8DBB8D6C8D3943A70229C78DC68D",
INIT_1c => x"BF0016311FF48DB6FE8E39F726048180A651011739C4A7808A0429A68DA58D5F",
INIT_1d => x"8DC8FE8EE12044AED78DCEFE8EB4001643A6E18DD4FE8EF42048AEEA8DC2FE8E",
INIT_1e => x"D02042A6B38DDFFE8ED92041A6BC8DDAFE8ECF204AAEC58DBCFE8ED82046AECE",
INIT_1f => x"B2FE8EBF8DB88DB08DA98DA18D27FF17B2FE8E900016EBFE8EC4A6AA8DE4FE8E",
INIT_20 => x"3C29088D011F42290E8DCA00172D86121F4D29098DD520CE8DC78DC08D17FF17",
INIT_21 => x"811D2530815B8D39E0AB04342829078D891F484848483229118D903561A71034",
INIT_22 => x"3439021A39578003226681072561813937800322468112254181393080032239",
INIT_23 => x"C602346320078B022F3981308B0F840235048D4444444402340235028D023510",
INIT_24 => x"207F84048D0627E2DF7D00F09F6E8235F1265A518D558D2D860225E46880A608",
INIT_25 => x"DF9FA75186EE27018584A620E08E0926018584A6E0DFBEE0DF9FA7118610343F",
INIT_26 => x"2086008D8235018520E0B605260185E0DF9FA6E0DF9FA711860234903501A6E0",
INIT_27 => x"84A70386E0DFBE138D903501A70235F6260885FA27028584A6E0DFBE1234498D",
INIT_28 => x"02C6FDDFFD04E703E702A7FBDFFD0000CC30E08E39E2DFB7FF86016D84A75186",
INIT_29 => x"20098D042420810D20608D0427FEDF7D30E08E16345986028D1B86FEDF7F01E7",
INIT_2a => x"890027100D81382716817C0027101A815A271B81342708819635AF001784A705",
INIT_2b => x"6D205A34275DFBDFFC8F0016792619C15CFBDFFC45260A810F270B8124270C81",
INIT_2c => x"598114273DC1FEDFF656200000CC5820212750814CFBDFB662204A2C27FBDFB6",
INIT_2d => x"2080FEDF7F39FDDFB70426FDDF7D39FEDF7F39FEDFB704263D81312754816E27",
INIT_2e => x"A74C84E720C6FBDFB6168D0000CC1B20E12218C120C0FDDF7FFDDFF6ED224F81",
INIT_2f => x"C15C4FF02650814CFBDFFC3903E702A7FBDFFDFCDFF64F39FEDF7FF726508102",
INIT_30 => x"2650C15C84A702E7FBDFF72086FBDFF604E75F012519C15C04E6E78D5AEA2619",
INIT_31 => x"FB0274FB0139FEDFF702E7FBDFF75FE4205F03E7FCDFF7082719C15CFCDFF6F4",
INIT_32 => x"505EFA4CA5F847FDF8455CF94248FB1953FB183DFB1531FB105EFB047FFB0369",
INIT_33 => x"94F9A7F8A7F8A7F8A7F894F992FC55D5F94488F958F1F853EDFB52A8F84DBCFA",
INIT_34 => x"2073796C744120524F4620372E312067754239307379530000000A0DFFFFFFFF",
INIT_35 => x"43502020043D5053202004202D20043F54414857043E040000000A0D4B04202D",
INIT_36 => x"20043D412020043D50442020043D58492020043D59492020043D53552020043D",
INIT_37 => x"0000000000000000000004315343565A4E4948464504203A43432020043D4220",
INIT_38 => x"300B2784AC1084AF1084EEAA558E10A0D08E84A7F086FB264A80A70F86F0FF8E",
INIT_39 => x"2DA7D0DF8E10C0DFCE10FDFFB74444444443101F84EFD620ED26A0F08C00F089",
INIT_3a => x"1084AF10AA558E1084EE2227A0F08C00F08930FB2A4AA66F0C862FA7F0862E6F",
INIT_3b => x"2EA7D0DF8E10F186D520A5A70F88891F44444444101FD0DF8E1084EFE92684AC",
INIT_3c => x"8EF32D0C814C80E7A66F0427A6E6211F4F2CE7A66F1420F92A4A0526A6E60C86",
INIT_3d => x"9F6EC6DF9F6EC4DF9F6EC0DF9F6E62F816E2DFF753F9265A80A7A0A610C6F0FF",
INIT_3e => x"0822CEDFBC8B300F27FFFF8CCCDFBE49584F4AAF80E64AAE431FCADF9F6EC8DF",
INIT_3f => x"00FFB2FFC2FFBEFFBAFFB6FFC6FFB2FFC2DF9F6E42EE1F37F16E44AEC4EC1034"
)
port map (
CLK => clk,
/System09/trunk/src/sys09bug/sys09bug.asm
2059,6 → 2059,9
IFD XESOPT
FCC 'XESS'
ENDIF XESOPT
IFD ATLOPT
FCC 'Atlys'
ENDIF ATLOPT
IFD DE270OPT
FCC 'DE2-70'
ENDIF DE270OPT
/System09/trunk/src/sys09bug/sys09equ.asm
21,6 → 21,10
MONEXT EQU $F000 START OF EXTENDED COMMANDS
EXTCMD EQU $00 EXTENDED OFFSET
ENDIF XESOPT
IFD ATLOPT
MONEXT EQU $F000 START OF EXTENDED COMMANDS
EXTCMD EQU $00 EXTENDED OFFSET
ENDIF ATLOPT
IFD DE270OPT
MONEXT EQU $F000 START OF EXTENDED COMMANDS
EXTCMD EQU $00 EXTENDED OFFSET
107,6 → 111,19
EXTOPT EQU $FF EXTENDED COMMANDS
ENDIF XESOPT
*
IFD ATLOPT
*
* Digilent Atlys SPARTAN6
*
ACIAOPT EQU $FF ACIA AT PORT 0
PS2OPT EQU $FF PS2 KEYBOARD AT $E020
VDUOPT EQU $FF VDU AT $E030
IDEOPT EQU $FF IDE AT $E100
DATOPT EQU $FF DYNAMIC ADDRESS TRANSLATION
HFCOPT EQU $FF HARDWARE FLOW CONTROL
EXTOPT EQU $FF EXTENDED COMMANDS
ENDIF ATLOPT
*
IFD DE270OPT
*
* TERASIC CYCLONE 2 DE2-70
/System09/trunk/src/sys09bug/sys09swt.vhd
187,7 → 187,7
INIT_2a => x"518684A70386E0DFBE903501A70235F6260885FA27028584A6E0DFBE12342086",
INIT_2b => x"19DBFB18C5FB15B9FB10E6FB0407FC03F1FB02FCFB0139E2DFB7FF86016D84A7",
INIT_2c => x"D5F94488F958F1F85375FC52A8F84D44FB50E6FA4CA5F847FDF8455CF942D0FB",
INIT_2d => x"47554239305359530000000A0DFFFFFFFF94F9A7F8A7F8A7F8A7F894F929FA55",
INIT_2d => x"67754239307379530000000A0DFFFFFFFF94F9A7F8A7F8A7F8A7F894F929FA55",
INIT_2e => x"3F54414857043E040000000A0D4B04202D20435054575320524F4620372E3120",
INIT_2f => x"492020043D59492020043D53552020043D43502020043D5053202004202D2004",
INIT_30 => x"5A4E4948464504203A43432020043D422020043D412020043D50442020043D58",

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.