1 *************** 2 * MC3 monitor 1.1 3 * Daniel Tufvesson 2013 4 0000 5 *************** 6 * DEFINITION OF INTERNAL CPU REGISTERS 7 0000 PIA1DIR EQU $00 8 0002 PIA1DAT EQU $02 9 0001 PIA2DIR EQU $01 10 0003 PIA2DAT EQU $03 11 0010 ACIAMOD EQU $10 RATE AND MODE CONTROL REGISTER 12 0011 ACIASTA EQU $11 TXD/RXD CONTROL AND STATUS REG. 13 0012 ACIARXD EQU $12 RECEIVE DATA REGISTER 14 0013 ACIATXD EQU $13 TRANSMIT DATA REGISTER 15 0014 RAMCONT EQU $14 RAM CONTROL REGISTER 16 0000 17 *************** 18 * DEFINITION OF VARIABELS 19 7F00 ORG $7F00 20 7F00 0001 STACK RMB 1 STACK POINTER 21 7F01 0001 RMB 1 CONDITIONS CODES 22 7F02 0001 RMB 1 B-ACC 23 7F03 0001 RMB 1 A-ACC 24 7F04 0001 RMB 1 X-HIGH 25 7F05 0001 RMB 1 X-LOW 26 7F06 0001 RMB 1 P-HIGH 27 7F07 0001 RMB 1 P-LOW 28 7F08 0002 SP RMB 2 STACK POINTER 29 7F0A 0001 CKSM RMB 1 CHECKSUM 30 7F0B 0001 TEMP RMB 1 TEMP 31 7F0C 0001 XHI RMB 1 X-TEMP HIGH 32 7F0D 0001 XLOW RMB 1 X-TEMP LOW 33 7F0E 0002 XTEMP RMB 2 X-TEMP 34 7F10 35 *************** 36 * DEFINITION OF VECTORS 37 * 3 BYTES JMP+ADDR 38 7FE5 ORG $7FE5 39 7FE5 0003 CONSVEC RMB 3 CONSOLE STATUS VECTOR 40 7FE8 0003 CONOVEC RMB 3 CONSOLE OUTPUT VECTOR 41 7FEB 0003 CONIVEC RMB 3 CONSOLE INPUT VECTOR 42 7FEE 0003 TMOFVEC RMB 3 TIMER OVER FLOW INTERUPT VECTOR 43 7FF1 0003 TMOCVEC RMB 3 TIMER OUTPUT COMPARE INTERUPT VECTOR 44 7FF4 0003 TMICVEC RMB 3 TIMER INPUT CAPTURE INTERUPT VECTOR 45 7FF7 0003 IRQVEC RMB 3 IRQ INTERUPT VECTOR 46 7FFA 0003 SWIVEC RMB 3 SWI INTERUPT VECTOR 47 7FFD 0003 NMIVEC RMB 3 NMI INTERUPT VECTOR 48 8000 49 *************** 50 * ROM BEGIN HERE 51 C000 ORG $C000 52 * JUMPTABLE 53 C000 7E C323 JMP RETURN 54 C003 7E 7FE8 JMP CONOVEC 'OUTCHAR' 55 C006 7E C5E5 JMP INCHAR 56 C009 7E C5EF JMP PDATA 57 C00C 7E C5FA JMP OUTHR 58 C00F 7E C5F6 JMP OUTHL 59 C012 7E C614 JMP OUT2HS 60 C015 7E C612 JMP OUT4HS 61 C018 7E C61B JMP INHEX 62 C01B 7E C636 JMP INBYTE 63 C01E 7E C64A JMP BADDR 64 * STRINGS 65 C021 0D 0A 04 CRLFTX FCB $0D,$0A,$04 66 C024 0D 0A PROMPTX FCB $0D,$0A 67 C026 3E 20 FCC '> ' 68 C028 04 FCB $04 69 C029 0D 0A 0A HELPTX FCB $0D,$0A,$0A 70 C02C 4D 43 33 20 FCC 'MC3 monitor 1.1' C030 6D 6F 6E 69 C034 74 6F 72 20 C038 31 2E 31 71 C03B 0D 0A FCB $0D,$0A 72 C03D 44 61 6E 69 FCC 'Daniel Tufvesson 2013' C041 65 6C 20 54 C045 75 66 76 65 C049 73 73 6F 6E C04D 20 32 30 31 C051 33 73 C052 0D 0A 0D 0A FCB $0D,$0A,$0D,$0A 74 C056 20 47 20 20 FCC ' G Go (RTI)' C05A 47 6F 20 28 C05E 52 54 49 29 75 C062 0D 0A FCB $0D,$0A 76 C064 20 4A 20 20 FCC ' J Jump to address' C068 4A 75 6D 70 C06C 20 74 6F 20 C070 61 64 64 72 C074 65 73 73 77 C077 0D 0A FCB $0D,$0A 78 C079 20 4C 20 20 FCC ' L Load S1 from console' C07D 4C 6F 61 64 C081 20 53 31 20 C085 66 72 6F 6D C089 20 63 6F 6E C08D 73 6F 6C 65 79 C091 0D 0A FCB $0D,$0A 80 C093 20 4D 43 20 FCC ' MC Memory change' C097 4D 65 6D 6F C09B 72 79 20 63 C09F 68 61 6E 67 C0A3 65 81 C0A4 0D 0A FCB $0D,$0A 82 C0A6 20 4D 44 20 FCC ' MD Memory dump' C0AA 4D 65 6D 6F C0AE 72 79 20 64 C0B2 75 6D 70 83 C0B5 0D 0A FCB $0D,$0A 84 C0B7 20 52 52 20 FCC ' RR Print contents of stack' C0BB 50 72 69 6E C0BF 74 20 63 6F C0C3 6E 74 65 6E C0C7 74 73 20 6F C0CB 66 20 73 74 C0CF 61 63 6B 85 C0D2 0D 0A FCB $0D,$0A 86 C0D4 20 52 53 20 FCC ' RS Reset stack pointer' C0D8 52 65 73 65 C0DC 74 20 73 74 C0E0 61 63 6B 20 C0E4 70 6F 69 6E C0E8 74 65 72 87 C0EB 0D 0A FCB $0D,$0A 88 C0ED 20 52 43 20 FCC ' RC Change stack CC' C0F1 43 68 61 6E C0F5 67 65 20 73 C0F9 74 61 63 6B C0FD 20 43 43 89 C100 0D 0A FCB $0D,$0A 90 C102 20 52 41 20 FCC ' RA Change stack A' C106 43 68 61 6E C10A 67 65 20 73 C10E 74 61 63 6B C112 20 41 91 C114 0D 0A FCB $0D,$0A 92 C116 20 52 42 20 FCC ' RB Change stack B' C11A 43 68 61 6E C11E 67 65 20 73 C122 74 61 63 6B C126 20 42 93 C128 0D 0A FCB $0D,$0A 94 C12A 20 52 58 20 FCC ' RX Change stack X' C12E 43 68 61 6E C132 67 65 20 73 C136 74 61 63 6B C13A 20 58 95 C13C 0D 0A FCB $0D,$0A 96 C13E 20 52 50 20 FCC ' RP Change stack PC' C142 43 68 61 6E C146 67 65 20 73 C14A 74 61 63 6B C14E 20 50 43 97 C151 0D 0A FCB $0D,$0A 98 C153 20 50 20 20 FCC ' P Select I/O page' C157 53 65 6C 65 C15B 63 74 20 49 C15F 2F 4F 20 70 C163 61 67 65 99 C166 0D 0A 04 FCB $0D,$0A,$04 100 C169 0D 0A REGTX FCB $0D,$0A 101 C16B 43 43 20 42 FCC 'CC B A X PC SP H I N Z V C' C16F 20 20 41 20 C173 20 58 20 20 C177 20 20 50 43 C17B 20 20 20 53 C17F 50 20 20 20 C183 20 20 48 20 C187 49 20 4E 20 C18B 5A 20 56 20 C18F 43 102 C190 0D 0A 04 FCB $0D,$0A,$04 103 C193 0D 0A DUMPTX FCB $0D,$0A 104 C195 41 44 44 52 FCC 'ADDR 0 1 2 3 4 5 6 7 8 9 A B C D E F' C199 20 20 30 20 C19D 20 31 20 20 C1A1 32 20 20 33 C1A5 20 20 34 20 C1A9 20 35 20 20 C1AD 36 20 20 37 C1B1 20 20 20 38 C1B5 20 20 39 20 C1B9 20 41 20 20 C1BD 42 20 20 43 C1C1 20 20 44 20 C1C5 20 45 20 20 C1C9 46 105 C1CA 0D 0A 04 FCB $0D,$0A,$04 106 C1CD 0D 0A LDTX FCB $0D,$0A 107 C1CF 4C 6F 61 64 FCC 'Load S19 record' C1D3 20 53 31 39 C1D7 20 72 65 63 C1DB 6F 72 64 108 C1DE 0D 0A 04 FCB $0D,$0A,$04 109 C1E1 0D 0A 0A LFAILTX FCB $0D,$0A,$0A 110 C1E4 4C 6F 61 64 FCC 'Load fail - Press Y to continue' C1E8 20 66 61 69 C1EC 6C 20 2D 20 C1F0 50 72 65 73 C1F4 73 20 59 20 C1F8 74 6F 20 63 C1FC 6F 6E 74 69 C200 6E 75 65 111 C203 0D 0A 04 FCB $0D,$0A,$04 112 C206 0D 0A LDOKTX FCB $0D,$0A 113 C208 4C 6F 61 64 FCC 'Load OK' C20C 20 4F 4B 114 C20F 0D 0A 04 FCB $0D,$0A,$04 115 C212 0D 0A TRAPTX FCB $0D,$0A 116 C214 54 52 41 50 FCC 'TRAP at address: $' C218 20 61 74 20 C21C 61 64 64 72 C220 65 73 73 3A C224 20 24 117 C226 04 FCB $04 118 C227 0D 0A PAERRTX FCB $0D,$0A 119 C229 50 61 72 61 FCC 'Parameter error' C22D 6D 65 74 65 C231 72 20 65 72 C235 72 6F 72 120 C238 0D 0A 04 FCB $0D,$0A,$04 121 C23B 122 *********** 123 * START FROM RESET 124 C23B 8E 7F00 RESET LDS #STACK INIT STACK POINTER 125 C23E BF 7F08 STS SP 126 C241 BD C680 JSR INITVEC INIT VECTORS 127 C244 BD C5A9 JSR SCIINIT INIT INTERNAL ACIA 128 C247 86 FF LDAA #$FF SETUP PAGE REGISTER 129 C249 97 00 STAA PIA1DIR 130 C24B 86 87 LDAA #$87 MASK EXTERNAL INTERRUPTS AND SELECT PAGE 7 131 C24D 97 02 STAA PIA1DAT 132 C24F 4F CLRA 133 C250 97 14 STAA RAMCONT DISABLE CPU INTERNAL RAM 134 C252 CE C024 PROMPT LDX #PROMPTX 135 C255 BD C5EF JSR PDATA 136 C258 BD C5E5 JSR INCHAR 137 C25B 81 0D CMPA #$0D 138 C25D 27 F3 BEQ PROMPT 139 C25F 84 DF ANDA #$DF CONVERT TO UPPER CASE 140 C261 81 48 CMPA #'H 141 C263 26 03 BNE *+5 142 C265 7E C307 JMP HELP PRINT HELP 143 C268 81 47 CMPA #'G 144 C26A 26 03 BNE *+5 145 C26C 7E C310 JMP GO GOTO USER PROGRAM 146 C26F 81 4A CMPA #'J 147 C271 26 03 BNE *+5 148 C273 7E C314 JMP JUMP JUMP TO USER PROGRAM 149 C276 81 52 CMPA #'R 150 C278 26 03 BNE *+5 151 C27A 7E C2C2 JMP MENU_R REG/STACK CMDS 152 C27D 81 4D CMPA #'M 153 C27F 26 03 BNE *+5 154 C281 7E C299 JMP MENU_M MEMORY CMDS 155 C284 81 4C CMPA #'L 156 C286 26 03 BNE *+5 157 C288 7E C4FD JMP LOAD LOAD S1 158 C28B 81 50 CMPA #'P 159 C28D 26 03 BNE *+5 160 C28F 7E C587 JMP PAGE SELECT I/O PAGE 161 C292 86 3F LDAA #'? 162 C294 BD 7FE8 JSR OUTCHAR 163 C297 20 B9 BRA PROMPT 164 C299 165 C299 BD C5E5 MENU_M JSR INCHAR 166 C29C 81 0D CMPA #$0D 167 C29E 26 03 BNE *+5 168 C2A0 7E C252 JMP PROMPT 169 C2A3 84 DF ANDA #$DF CONVERT TO UPPER CASE 170 C2A5 81 43 CMPA #'C 171 C2A7 26 03 BNE *+5 172 C2A9 7E C3E2 JMP CHANGE MEMORY CHANGE 173 C2AC 81 46 CMPA #'F 174 C2AE 26 03 BNE *+5 175 C2B0 7E C424 JMP MFILL MEMORY FILL 176 C2B3 81 44 CMPA #'D 177 C2B5 26 03 BNE *+5 178 C2B7 7E C472 JMP DUMP MEMORY DUMP 179 C2BA 86 3F LDAA #'? 180 C2BC BD 7FE8 JSR OUTCHAR 181 C2BF 7E C252 JMP PROMPT 182 C2C2 183 C2C2 BD C5E5 MENU_R JSR INCHAR 184 C2C5 81 0D CMPA #$0D 185 C2C7 26 03 BNE *+5 186 C2C9 7E C252 JMP PROMPT 187 C2CC 84 DF ANDA #$DF 188 C2CE 81 52 CMPA #'R 189 C2D0 26 03 BNE *+5 190 C2D2 7E C329 JMP PRTREG REGISTER PRINT 191 C2D5 81 41 CMPA #'A 192 C2D7 26 03 BNE *+5 193 C2D9 7E C373 JMP REGACH REGISTER A CHANGE 194 C2DC 81 42 CMPA #'B 195 C2DE 26 03 BNE *+5 196 C2E0 7E C385 JMP REGBCH REGISTER B CHANGE 197 C2E3 81 58 CMPA #'X 198 C2E5 26 03 BNE *+5 199 C2E7 7E C397 JMP REGXCH REGISTER X CHANGE 200 C2EA 81 50 CMPA #'P 201 C2EC 26 03 BNE *+5 202 C2EE 7E C3AF JMP REGPCH REGISTER PC CHANGE 203 C2F1 81 43 CMPA #'C 204 C2F3 26 03 BNE *+5 205 C2F5 7E C3C7 JMP REGCCH REGISTER CC CHANGE 206 C2F8 81 53 CMPA #'S 207 C2FA 26 03 BNE *+5 208 C2FC 7E C3D9 JMP REGLDS RESET STACK POINTER 209 C2FF 86 3F LDAA #'? 210 C301 BD 7FE8 JSR OUTCHAR 211 C304 7E C252 JMP PROMPT 212 C307 213 *************** 214 * HELP 215 C307 CE C029 HELP LDX #HELPTX 216 C30A BD C5EF JSR PDATA 217 C30D 7E C252 JMP PROMPT 218 C310 219 *************** 220 * GO 221 C310 BE 7F08 GO LDS SP 222 C313 3B RTI 223 C314 224 *************** 225 * JUMP TO ADDRESS 226 C314 86 20 JUMP LDAA #$20 227 C316 BD 7FE8 JSR OUTCHAR 228 C319 BD C64A JSR BADDR 229 C31C 24 03 BCC *+5 ADDRESS INPUT OK? 230 C31E 6E 00 JMP 0,X JUMP TO ADDRESS IN X 231 C320 7E C252 JMP PROMPT 232 C323 233 *************** 234 * RETURN FROM USER PROGRAM 235 C323 BF 7F08 RETURN STS SP 236 C326 7E C252 JMP PROMPT 237 C329 238 *************** 239 * PRINT CONTENTS OF STACK 240 C329 CE C169 PRTREG LDX #REGTX 241 C32C BD C5EF JSR PDATA 242 C32F FE 7F08 LDX SP 243 C332 08 INX 244 C333 BD C614 JSR OUT2HS CONDITION CODES 245 C336 BD C614 JSR OUT2HS ACC-B 246 C339 BD C614 JSR OUT2HS ACC-A 247 C33C BD C612 JSR OUT4HS X-REG 248 C33F BD C612 JSR OUT4HS P-COUNTER 249 C342 CE 7F08 LDX #SP 250 C345 BD C612 JSR OUT4HS STACK POINTER 251 C348 252 C348 86 20 LDAA #$20 253 C34A BD 7FE8 JSR OUTCHAR 254 C34D FE 7F08 LDX SP 255 C350 08 INX 256 C351 E6 00 LDAB ,X 257 C353 CE 0006 LDX #$06 258 C356 58 ASLB 259 C357 58 ASLB 260 C358 86 20 CCLOOP LDAA #$20 261 C35A BD 7FE8 JSR OUTCHAR 262 C35D 58 ASLB 263 C35E 25 08 BCS CCONE 264 C360 86 30 CCZERO LDAA #'0 265 C362 BD 7FE8 JSR OUTCHAR 266 C365 7E C36D JMP CCEND 267 C368 86 31 CCONE LDAA #'1 268 C36A BD 7FE8 JSR OUTCHAR 269 C36D 270 C36D 09 CCEND DEX 271 C36E 26 E8 BNE CCLOOP 272 C370 7E C252 JMP PROMPT 273 C373 274 *************** 275 * REGISTER CHANGE ROUTINES (A B X PC) 276 C373 86 3D REGACH LDAA #'= 277 C375 BD 7FE8 JSR OUTCHAR 278 C378 FE 7F08 LDX SP 279 C37B BD C636 JSR INBYTE 280 C37E 24 02 BCC ENDA 281 C380 A7 03 STAA 3,X 282 C382 7E C252 ENDA JMP PROMPT 283 C385 86 3D REGBCH LDAA #'= 284 C387 BD 7FE8 JSR OUTCHAR 285 C38A FE 7F08 LDX SP 286 C38D BD C636 JSR INBYTE 287 C390 24 02 BCC ENDB 288 C392 A7 02 STAA 2,X 289 C394 7E C252 ENDB JMP PROMPT 290 C397 86 3D REGXCH LDAA #'= 291 C399 BD 7FE8 JSR OUTCHAR 292 C39C BD C64A JSR BADDR 293 C39F 24 0B BCC ENDX 294 C3A1 FF 7F0C STX XHI 295 C3A4 FE 7F08 LDX SP 296 C3A7 FC 7F0C LDD XHI 297 C3AA ED 04 STD 4,X 298 C3AC 7E C252 ENDX JMP PROMPT 299 C3AF 86 3D REGPCH LDAA #'= 300 C3B1 BD 7FE8 JSR OUTCHAR 301 C3B4 BD C64A JSR BADDR 302 C3B7 24 0B BCC ENDP 303 C3B9 FF 7F0C STX XHI 304 C3BC FE 7F08 LDX SP 305 C3BF FC 7F0C LDD XHI 306 C3C2 ED 06 STD 6,X 307 C3C4 7E C252 ENDP JMP PROMPT 308 C3C7 86 3D REGCCH LDAA #'= 309 C3C9 BD 7FE8 JSR OUTCHAR 310 C3CC FE 7F08 LDX SP 311 C3CF BD C636 JSR INBYTE 312 C3D2 24 02 BCC ENDC 313 C3D4 A7 01 STAA 1,X 314 C3D6 7E C252 ENDC JMP PROMPT 315 C3D9 8E 7F00 REGLDS LDS #STACK 316 C3DC BF 7F08 STS SP 317 C3DF 7E C252 JMP PROMPT 318 C3E2 319 *************** 320 * CHANGE MEMORY (MC AAAA DD NN) 321 C3E2 86 20 CHANGE LDAA #$20 322 C3E4 BD 7FE8 JSR OUTCHAR 323 C3E7 BD C64A JSR BADDR BUILD ADDRESS 324 C3EA 24 2F BCC CHANGER 325 C3EC CE C021 CHA51 LDX #CRLFTX 326 C3EF BD C5EF JSR PDATA C/R L/F 327 C3F2 CE 7F0C LDX #XHI 328 C3F5 BD C612 JSR OUT4HS PRINT ADDRESS 329 C3F8 FE 7F0C LDX XHI 330 C3FB BD C614 JSR OUT2HS PRIND DATA (OLD) 331 C3FE FF 7F0C STX XHI SAVE DATA ADDRESS 332 C401 BD C636 JSR INBYTE INPUT NEW DATA 333 C404 24 0E BCC CHANG1 334 C406 09 DEX 335 C407 A7 00 STAA ,X CHANGE MEMEORY 336 C409 A1 00 CMPA ,X 337 C40B 27 DF BEQ CHA51 DID CHANGE 338 C40D 86 3F LDAA #'? 339 C40F BD 7FE8 JSR OUTCHAR 340 C412 20 D8 BRA CHA51 341 C414 81 DD CHANG1 CMPA #$DD 342 C416 27 D4 BEQ CHA51 343 C418 7E C252 CHANGEE JMP PROMPT 344 C41B CE C227 CHANGER LDX #PAERRTX 345 C41E BD C5EF JSR PDATA 346 C421 7E C252 JMP PROMPT 347 C424 348 *************** 349 * FILL MEMORY (F SADR-EADR DA) 350 C424 86 20 MFILL LDAA #$20 PRINT SPACE 351 C426 BD 7FE8 JSR OUTCHAR 352 C429 BD C64A JSR BADDR BUILD STARTING ADDRESS 353 C42C 24 32 BCC MFILLE CHECK IF CORRECT 354 C42E FF 7F0E STX XTEMP SAVE STARTING ADDRESS 355 C431 86 2D LDAA #'- PRINT SEPARATOR 356 C433 BD 7FE8 JSR OUTCHAR 357 C436 BD C64A JSR BADDR BUILD ENDING ADRESS 358 C439 24 25 BCC MFILLE CHECK IF CORRECT 359 C43B FF 7F0C STX XHI 360 C43E BC 7F0E CPX XTEMP CHECK IF CORRECT ADDRESS RANGE 361 C441 23 1D BLS MFILLE IF NOT, EXIT ROUTINE 362 C443 08 INX 363 C444 FF 7F0C STX XHI 364 C447 86 20 LDAA #$20 PRINT SPACE 365 C449 BD 7FE8 JSR OUTCHAR 366 C44C BD C636 JSR INBYTE LOAD FILL DATA 367 C44F 24 0F BCC MFILLE CHECK IF CORRECT 368 C451 16 TAB 369 C452 FE 7F0E LDX XTEMP 370 C455 E7 00 MFILL2 STAB ,X STORE DATA 371 C457 08 INX 372 C458 BC 7F0C CPX XHI 373 C45B 26 F8 BNE MFILL2 374 C45D 7E C252 JMP PROMPT 375 C460 CE C227 MFILLE LDX #PAERRTX 376 C463 BD C5EF JSR PDATA 377 C466 7E C252 JMP PROMPT 378 C469 379 *************** 380 * DUMP MEMORY (MD AAAA) 381 C469 CE C227 DUMPERR LDX #PAERRTX 382 C46C BD C5EF JSR PDATA 383 C46F 7E C252 JMP PROMPT 384 C472 86 20 DUMP LDAA #$20 385 C474 BD 7FE8 JSR OUTCHAR 386 C477 BD C64A JSR BADDR 387 C47A 24 ED BCC DUMPERR END IF ADDRESS NOT OK 388 C47C FF 7F0C STX XHI 389 C47F CE C021 LDX #CRLFTX 390 C482 BD C5EF JSR PDATA 391 C485 B6 7F0D DUMP0 LDAA XLOW 392 C488 84 F0 ANDA #$F0 BEGIN DUMP AT $xxx0 393 C48A B7 7F0D STAA XLOW 394 C48D CE C193 LDX #DUMPTX 395 C490 BD C5EF JSR PDATA 396 C493 86 10 LDAA #16 397 C495 B7 7F0B STAA TEMP ROW COUNTER. 16 ROWS = 1 MEMORY PAGE 398 ** PRINT ROW 399 C498 CE 7F0C DUMP1 LDX #XHI 400 C49B BD C612 JSR OUT4HS PRINT ADDRESS 401 C49E 86 20 LDAA #$20 402 C4A0 BD 7FE8 JSR OUTCHAR 403 C4A3 FE 7F0C LDX XHI 404 C4A6 FF 7F0E STX XTEMP SAVE X FOR ASCII PRINT 405 ** PRINT ROW OF BYTES 406 C4A9 BD C614 DUMP2 JSR OUT2HS 407 C4AC FF 7F0C STX XHI SAVE NOW INCREMENTED X 408 C4AF B6 7F0D LDAA XLOW 409 C4B2 84 0F ANDA #$0F FILTER OUT LAST NIB 410 C4B4 81 08 CMPA #$08 411 C4B6 26 05 BNE DUMP25 412 C4B8 86 20 LDAA #$20 413 C4BA BD 7FE8 JSR OUTCHAR 414 C4BD 81 00 DUMP25 CMPA #$00 LAST BYTE IN ROW? 415 C4BF 26 E8 BNE DUMP2 416 C4C1 FE 7F0E LDX XTEMP RESTORE POINTER 417 C4C4 FF 7F0C STX XHI FOR ASCII DUMP 418 C4C7 86 20 LDAA #$20 419 C4C9 BD 7FE8 JSR OUTCHAR 420 ** PRINT ROW OF ASCII 421 C4CC A6 00 DUMP3 LDAA 0,X 422 C4CE 81 7E CMPA #$7E 423 C4D0 22 04 BHI DUMP4 BYTE IS NOT PRINTABLE 424 C4D2 81 20 CMPA #$20 425 C4D4 2C 02 BGE DUMP5 BYTE IS PRINTABLE 426 C4D6 86 2E DUMP4 LDAA #'. 427 C4D8 BD 7FE8 DUMP5 JSR OUTCHAR PRINT ASCII CHAR 428 C4DB 08 INX 429 C4DC FF 7F0C STX XHI POINT TO NEXT CHARACTER 430 C4DF B6 7F0D LDAA XLOW 431 C4E2 84 0F ANDA #$0F 432 C4E4 26 E6 BNE DUMP3 LAST CHARACTER IN ROW? 433 C4E6 CE C021 LDX #CRLFTX 434 C4E9 BD C5EF JSR PDATA 435 C4EC 7A 7F0B DEC TEMP 436 C4EF 27 02 BEQ DUMPE LAST ROW? 437 C4F1 20 A5 BRA DUMP1 438 C4F3 BD C5E5 DUMPE JSR INCHAR 439 C4F6 81 0D CMPA #$0D 440 C4F8 27 8B BEQ DUMP0 DUMP NEXT PAGE 441 C4FA 7E C252 JMP PROMPT 442 C4FD 443 *************** 444 * LOAD S1 RECORD 445 C4FD CE C1CD LOAD LDX #LDTX 446 C500 BD C5EF JSR PDATA 447 C503 86 0D LOAD1 LDAA #$0D 448 C505 BD 7FE8 JSR OUTCHAR 449 C508 86 39 LOAD2 LDAA #$39 (RTS) 450 C50A B7 7FE8 STAA CONOVEC DISABLE CONSOLE OUTPUT 451 C50D BD C5E5 JSR INCHAR 452 C510 81 53 CMPA #'S 453 C512 26 F4 BNE LOAD2 1ST CHAR NOT (S) 454 C514 BD C5E5 JSR INCHAR READ CHAR 455 C517 81 39 CMPA #'9 456 C519 27 57 BEQ LOAD21 2ND CHAR (9) 457 C51B 81 31 CMPA #'1 458 C51D 26 E9 BNE LOAD2 2ND CHAR NOT (1) 459 C51F 7F 7F0A CLR CKSM CLEAR CHECKSUM 460 C522 BD C636 JSR INBYTE READ BYTE 461 C525 16 TAB 462 C526 FB 7F0A ADDB CKSM 463 C529 F7 7F0A STAB CKSM 464 C52C 80 02 SUBA #2 465 C52E B7 7F0B STAA TEMP BYTE COUNT 466 C531 BD C64A JSR BADDR 467 C534 24 25 BCC LOAD19 ADDRESS OK? 468 C536 F6 7F0A LDAB CKSM 469 C539 FB 7F0C ADDB XHI 470 C53C FB 7F0D ADDB XLOW 471 C53F F7 7F0A STAB CKSM 472 C542 BD C636 LOAD11 JSR INBYTE 473 C545 16 TAB 474 C546 FB 7F0A ADDB CKSM 475 C549 F7 7F0A STAB CKSM 476 C54C 7A 7F0B DEC TEMP 477 C54F 27 05 BEQ LOAD15 ZERO BYTE COUNT 478 C551 A7 00 STAA ,X STORE DATA 479 C553 08 INX 480 C554 20 EC BRA LOAD11 481 C556 7C 7F0A LOAD15 INC CKSM INCREMENT CHECKSUM 482 C559 27 A8 BEQ LOAD1 483 C55B 86 7E LOAD19 LDAA #$7E (JMP EXTENDED) 484 C55D B7 7FE8 STAA CONOVEC ENABLE CONSOLE OUTPUT 485 C560 CE C1E1 LDX #LFAILTX PRINT ERROR MESSAGE 486 C563 BD C5EF JSR PDATA 487 C566 BD 7FEB LOAD20 JSR CONIVEC 488 C569 84 DF ANDA #$DF 489 C56B 81 59 CMPA #'Y 490 C56D 26 F7 BNE LOAD20 491 C56F 7E C252 JMP PROMPT 492 C572 BD C5E5 LOAD21 JSR INCHAR 493 C575 81 0D CMPA #$0D 494 C577 26 F9 BNE LOAD21 495 C579 86 7E LDAA #$7E (JMP EXTENDED) 496 C57B B7 7FE8 STAA CONOVEC ENABLE CONSOLE OUTPUT 497 C57E CE C206 LDX #LDOKTX 498 C581 BD C5EF JSR PDATA 499 C584 7E C252 JMP PROMPT 500 C587 501 *************** 502 * PAGE SELECT ROUTINE 503 C587 86 3D PAGE LDAA #'= 504 C589 BD 7FE8 JSR OUTCHAR 505 C58C 86 FF LDAA #$FF 506 C58E 97 00 STAA PIA1DIR SET ALL OUTPUT 507 C590 BD C61B JSR INHEX 508 C593 24 04 BCC PAGERR 509 C595 81 07 CMPA #$07 510 C597 23 09 BLS PAGESET 511 C599 CE C227 PAGERR LDX #PAERRTX 512 C59C BD C5EF JSR PDATA 513 C59F 7E C252 JMP PROMPT 514 C5A2 8A 80 PAGESET ORAA #$80 MASK EXTERNAL INTERRUPTS 515 C5A4 97 02 STAA PIA1DAT 516 C5A6 7E C252 JMP PROMPT 517 C5A9 518 *************** 519 * INIT BUILTIN ACIA 520 C5A9 86 05 SCIINIT LDAA #$05 ENABLE INTERNAL ACIA, INTERNAL CLOCK, 9600 BAUD 521 C5AB 97 10 STAA ACIAMOD 522 C5AD 86 0A LDAA #$0A ENABLE RECIEVE AND TRANSMITT DATA 523 C5AF 97 11 STAA ACIASTA 524 C5B1 96 12 LDAA ACIARXD FLUSH BUFFER AND CLEAR ERROR FLAGS 525 C5B3 39 RTS 526 C5B4 527 *************** 528 * BUILTIN ACIA OUTPUT FROM A-ACC 529 C5B4 37 SCIOUT PSHB SAVE B-REG 530 C5B5 D6 11 SCIOUT1 LDAB ACIASTA 531 C5B7 58 ASLB 532 C5B8 58 ASLB 533 C5B9 58 ASLB 534 C5BA 24 F9 BCC SCIOUT1 READY FOR NEXT CHARACTER 535 C5BC 97 13 STAA ACIATXD 536 C5BE 33 PULB RESTORE B-REG 537 C5BF 39 RTS 538 C5C0 539 *************** 540 * BUILTIN ACIA INPUT TO A-ACC 541 C5C0 96 12 SCIINER LDAA ACIARXD ON ERROR, FLUSH BUFFER AND CLEAR ERROR FLAG 542 C5C2 96 11 SCIIN LDAA ACIASTA 543 C5C4 84 C0 ANDA #$C0 FILTER OUT RDRF AND ORFE 544 C5C6 81 00 CMPA #$00 545 C5C8 27 F8 BEQ SCIIN WAIT FOR CHARACTER 546 C5CA 81 40 CMPA #$40 547 C5CC 27 F2 BEQ SCIINER CHECK FOR FRAMING ERROR 548 C5CE 96 12 LDAA ACIARXD READ RECIEVED CHARACTER 549 C5D0 39 RTS 550 C5D1 551 *************** 552 * BUILTIN ACIA STATUS TO A-ACC 553 * RETURNS 1 ON CHAR WAITING. 0 ON NO CHAR 554 C5D1 96 12 SCISTAE LDAA ACIARXD ON ERROR, FLUSH BUFFER AND CLEAR ERROR FLAG 555 C5D3 96 11 SCISTAT LDAA ACIASTA 556 C5D5 84 C0 ANDA #$C0 FILTER OUT RDRF AND ORFE 557 C5D7 81 00 CMPA #$00 558 C5D9 27 07 BEQ SCISTA0 NO ERROR AND NO CHARACTER 559 C5DB 81 40 CMPA #$40 560 C5DD 27 F2 BEQ SCISTAE CHECK FOR ERROR 561 C5DF 86 01 LDAA #$01 CHARACTER WAITING 562 C5E1 39 RTS 563 C5E2 86 00 SCISTA0 LDAA #$00 564 C5E4 39 RTS 565 C5E5 566 *************** 567 * OUTPUT/INPUT ONE CHAR TO/FROM A-REGISTER AND ECHO 568 C5E5 BD 7FEB INCHAR JSR CONIVEC 569 C5E8 7E 7FE8 JMP CONOVEC 570 7FE8 OUTCHAR EQU CONOVEC 571 C5EB 572 *************** 573 * PRINT DATA POINTED AT BY X-REG 574 C5EB BD 7FE8 PDATA2 JSR OUTCHAR 575 C5EE 08 INX 576 C5EF A6 00 PDATA LDAA ,X 577 C5F1 81 04 CMPA #4 578 C5F3 26 F6 BNE PDATA2 GO ON IF NOT EOT 579 C5F5 39 RTS 580 C5F6 581 *************** 582 * OUTPUT HEX CHARS 583 C5F6 44 OUTHL LSRA OUT HEX LEFT BCD DIGIT 584 C5F7 44 LSRA 585 C5F8 44 LSRA 586 C5F9 44 LSRA 587 C5FA 84 0F OUTHR ANDA #$F OUT HEX RIGHT BCD DIGIT 588 C5FC 8B 30 ADDA #$30 589 C5FE 81 39 CMPA #$39 590 C600 23 02 BLS OUTHE 591 C602 8B 07 ADDA #$7 592 C604 7E 7FE8 OUTHE JMP OUTCHAR 593 C607 594 C607 A6 00 OUT2H LDAA 0,X 595 C609 BD C5F6 JSR OUTHL OUTPUT LEFT HEX CHAR 596 C60C A6 00 LDAA 0,X 597 C60E 08 INX 598 C60F 7E C5FA JMP OUTHR OUTPUT RIGHT HEX CHAR 599 C612 600 C612 8D F3 OUT4HS BSR OUT2H OUTPUT 4 HEX CHAR + SPACE 601 C614 8D F1 OUT2HS BSR OUT2H OUTPUT 2 HEX CHAR + SPACE 602 C616 86 20 OUTS LDAA #$20 SPACE 603 C618 7E 7FE8 JMP OUTCHAR (BSR & RTS) 604 C61B 605 *************** 606 * INPUT HEX CHAR INTO A-ACC 607 C61B BD C5E5 INHEX JSR INCHAR 608 C61E 80 30 SUBA #$30 609 C620 2B 12 BMI NOTHEX 610 C622 81 09 CMPA #$09 611 C624 2F 0C BLE IN1HG 612 C626 84 DF ANDA #$DF CONVERT TO UPPER CASE 613 C628 81 11 CMPA #$11 614 C62A 2B 08 BMI NOTHEX 615 C62C 81 16 CMPA #$16 616 C62E 2E 04 BGT NOTHEX 617 C630 80 07 SUBA #7 618 C632 0D IN1HG SEC INPUT OK. SET CARRY 619 C633 39 RTS 620 C634 0C NOTHEX CLC INPUT BAD. CLEAR CARRY 621 C635 39 RTS 622 C636 623 *************** 624 * INPUT BYTE (TWO FRAMES) INTO A-ACC 625 C636 BD C61B INBYTE JSR INHEX GET HEX CHAR 626 C639 24 0D BCC INBYTE1 627 C63B 48 ASLA 628 C63C 48 ASLA 629 C63D 48 ASLA 630 C63E 48 ASLA 631 C63F 16 TAB 632 C640 BD C61B JSR INHEX 633 C643 24 03 BCC INBYTE1 634 C645 1B ABA 635 C646 0D SEC GOOD INPUT 636 C647 39 RTS 637 C648 0C INBYTE1 CLC BAD INPUT 638 C649 39 RTS 639 C64A 640 *************** 641 * BUILD ADDRESS INTO X-REG 642 C64A 8D EA BADDR BSR INBYTE READ FIRST FRAME 643 C64C 24 0D BCC BADDRE 644 C64E B7 7F0C STAA XHI 645 C651 8D E3 BSR INBYTE READ SECOND FRAME 646 C653 24 06 BCC BADDRE 647 C655 B7 7F0D STAA XLOW 648 C658 FE 7F0C LDX XHI (X) ADDRESS WE BUILD 649 C65B 39 BADDRE RTS 650 C65C 651 C65C 652 *************** 653 * SOFTWARE INTERRUPT SEQUENCE 654 C65C BF 7F08 SFE STS SP 655 C65F BD C329 JSR PRTREG 656 C662 7E C252 JMP PROMPT 657 C665 658 *************** 659 * TRAP INTERRUPT SEQUENCE 660 C665 BF 7F08 TRAP STS SP SAVE TARGET STACKPOINTER 661 C668 CE C212 LDX #TRAPTX 662 C66B BD C5EF JSR PDATA 663 C66E FE 7F08 LDX SP 664 C671 C6 06 LDAB #$6 665 C673 3A ABX 666 C674 BD C612 JSR OUT4HS 667 C677 CE C021 LDX #CRLFTX 668 C67A BD C5EF JSR PDATA 669 C67D 7E C252 JMP PROMPT 670 C680 671 *************** 672 * INITIATE VECTOR JUMPTABLE 673 C680 86 7E INITVEC LDAA #$7E JMP EXT OP CODE 674 C682 CE C252 LDX #PROMPT 675 C685 B7 7FFD STAA NMIVEC 676 C688 FF 7FFE STX NMIVEC+1 677 C68B CE C65C LDX #SFE 678 C68E B7 7FFA STAA SWIVEC 679 C691 FF 7FFB STX SWIVEC+1 680 C694 CE C310 LDX #GO 681 C697 B7 7FF7 STAA IRQVEC 682 C69A FF 7FF8 STX IRQVEC+1 683 C69D CE C310 LDX #GO 684 C6A0 B7 7FF4 STAA TMICVEC 685 C6A3 FF 7FF5 STX TMICVEC+1 686 C6A6 CE C310 LDX #GO 687 C6A9 B7 7FF1 STAA TMOCVEC 688 C6AC FF 7FF2 STX TMOCVEC+1 689 C6AF CE C310 LDX #GO 690 C6B2 B7 7FEE STAA TMOFVEC 691 C6B5 FF 7FEF STX TMOFVEC+1 692 C6B8 CE C5B4 LDX #SCIOUT 693 C6BB B7 7FE8 STAA CONOVEC 694 C6BE FF 7FE9 STX CONOVEC+1 695 C6C1 CE C5C2 LDX #SCIIN 696 C6C4 B7 7FEB STAA CONIVEC 697 C6C7 FF 7FEC STX CONIVEC+1 698 C6CA CE C5D3 LDX #SCISTAT 699 C6CD B7 7FE5 STAA CONSVEC 700 C6D0 FF 7FE6 STX CONSVEC+1 701 C6D3 39 RTS 702 C6D4 703 *************** 704 * VECTORS 705 FFEE ORG $FFEE 706 FFEE C665 FDB TRAP FFEE-EF TRAP 707 FFF0 708 FFF2 ORG $FFF2 709 FFF2 7FEE FDB TMOFVEC FFF2-3 TIMER OVER FLOW 710 FFF4 7FF1 FDB TMOCVEC FFF4-5 TIMER OUTPUT COMPARE 711 FFF6 7FF4 FDB TMICVEC FFF6-7 TIMER INPUT CAPTURE 712 FFF8 7FF7 FDB IRQVEC FFF8-9 IRQ 713 FFFA 7FFA FDB SWIVEC FFFA-B SOFTWARE INTERUPT 714 FFFC 7FFD FDB NMIVEC FFFC-D NMI 715 FFFE C23B FDB RESET FFFE-F RESET Total Errors 0