1 *************** 2 * MC3 monitor 1.4 3 * Daniel Tufvesson 2013-2014 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 0008 TIMECON EQU $08 TIMER CONTROL AND STAUS REG 12 0009 COUNTHI EQU $09 COUNTER HIGH 13 000A COUNTLW EQU $0A COUNTER LOW 14 000B OCPRGHI EQU $0B OUTPUT COMPARE REG. HIGH BYTE 15 000C OCPRGLW EQU $0C OUTPUT COMPARE REG. LOW BYTE 16 000D ICPRGHI EQU $0D INPUT COMPARE REG. HIGH BYTE 17 000E ICPRGLW EQU $0E INPUT COMPARE REG. LOW BYTE 18 0010 ACIAMOD EQU $10 RATE AND MODE CONTROL REGISTER 19 0011 ACIASTA EQU $11 TXD/RXD CONTROL AND STATUS REG. 20 0012 ACIARXD EQU $12 RECEIVE DATA REGISTER 21 0013 ACIATXD EQU $13 TRANSMIT DATA REGISTER 22 0014 RAMCONT EQU $14 RAM CONTROL REGISTER 23 0000 24 *************** 25 * DEFINITION OF VARIABELS 26 7F00 ORG $7F00 27 7F00 0001 STACK RMB 1 STACK POINTER 28 7F01 0001 RMB 1 CONDITIONS CODES 29 7F02 0001 RMB 1 B-ACC 30 7F03 0001 RMB 1 A-ACC 31 7F04 0001 RMB 1 X-HIGH 32 7F05 0001 RMB 1 X-LOW 33 7F06 0001 RMB 1 P-HIGH 34 7F07 0001 RMB 1 P-LOW 35 7F08 0002 SP RMB 2 STACK POINTER 36 7F0A 0001 CKSM RMB 1 CHECKSUM 37 7F0B 0001 TEMP RMB 1 TEMP 38 7F0C 0001 XHI RMB 1 X-TEMP HIGH 39 7F0D 0001 XLOW RMB 1 X-TEMP LOW 40 7F0E 0002 XTEMP RMB 2 X-TEMP 41 7F10 42 *************** 43 * DEFINITION OF VECTORS 44 * 3 BYTES JMP+ADDR 45 7FE5 ORG $7FE5 46 7FE5 0003 CONSVEC RMB 3 CONSOLE STATUS VECTOR 47 7FE8 0003 CONOVEC RMB 3 CONSOLE OUTPUT VECTOR 48 7FEB 0003 CONIVEC RMB 3 CONSOLE INPUT VECTOR 49 7FEE 0003 TMOFVEC RMB 3 TIMER OVER FLOW INTERRUPT VECTOR 50 7FF1 0003 TMOCVEC RMB 3 TIMER OUTPUT COMPARE INTERRUPT VECTOR 51 7FF4 0003 TMICVEC RMB 3 TIMER INPUT CAPTURE INTERRUPT VECTOR 52 7FF7 0003 IRQVEC RMB 3 IRQ INTERRUPT VECTOR 53 7FFA 0003 SWIVEC RMB 3 SWI INTERRUPT VECTOR 54 7FFD 0003 NMIVEC RMB 3 NMI INTERRUPT VECTOR 55 8000 56 *************** 57 * ROM BEGIN HERE 58 C000 ORG $C000 59 * JUMPTABLE 60 C000 7E C3A3 JMP RETURN 61 C003 7E 7FE8 JMP CONOVEC 'OUTCHAR' 62 C006 7E C6ED JMP INCHAR 63 C009 7E C6F7 JMP PDATA 64 C00C 7E C70B JMP OUTHR 65 C00F 7E C707 JMP OUTHL 66 C012 7E C725 JMP OUT2HS 67 C015 7E C723 JMP OUT4HS 68 C018 7E C72C JMP INHEX 69 C01B 7E C747 JMP INBYTE 70 C01E 7E C75B JMP BADDR 71 C021 7E C6FE JMP PCRLF 72 C024 7E C727 JMP OUTS 73 C027 7E C7C4 JMP IORD 74 C02A 7E C7CF JMP IOWR 75 C02D 76 * STRINGS 77 C02D 0D 0A 04 CRLFTX FCB $0D,$0A,$04 78 C030 0D 0A PROMPTX FCB $0D,$0A 79 C032 3E 20 FCC "> " 80 C034 04 FCB $04 81 C035 0D 0A 0A HELPTX FCB $0D,$0A,$0A 82 C038 4D 43 33 20 FCC "MC3 monitor 1.4" C03C 6D 6F 6E 69 C040 74 6F 72 20 C044 31 2E 34 83 C047 0D 0A FCB $0D,$0A 84 C049 44 61 6E 69 FCC "Daniel Tufvesson 2013-2014" C04D 65 6C 20 54 C051 75 66 76 65 C055 73 73 6F 6E C059 20 32 30 31 C05D 33 2D 32 30 C061 31 34 85 C063 0D 0A 0D 0A FCB $0D,$0A,$0D,$0A 86 C067 20 47 20 20 FCC " G Go (RTI)" C06B 47 6F 20 28 C06F 52 54 49 29 87 C073 0D 0A FCB $0D,$0A 88 C075 20 4A 20 20 FCC " J Jump to address" C079 4A 75 6D 70 C07D 20 74 6F 20 C081 61 64 64 72 C085 65 73 73 89 C088 0D 0A FCB $0D,$0A 90 C08A 20 4C 20 20 FCC " L Load S19 from console" C08E 4C 6F 61 64 C092 20 53 31 39 C096 20 66 72 6F C09A 6D 20 63 6F C09E 6E 73 6F 6C C0A2 65 91 C0A3 0D 0A FCB $0D,$0A 92 C0A5 20 4D 43 20 FCC " MC Memory change" C0A9 4D 65 6D 6F C0AD 72 79 20 63 C0B1 68 61 6E 67 C0B5 65 93 C0B6 0D 0A FCB $0D,$0A 94 C0B8 20 4D 44 20 FCC " MD Memory dump" C0BC 4D 65 6D 6F C0C0 72 79 20 64 C0C4 75 6D 70 95 C0C7 0D 0A FCB $0D,$0A 96 C0C9 20 4D 46 20 FCC " MF Memory fill" C0CD 4D 65 6D 6F C0D1 72 79 20 66 C0D5 69 6C 6C 97 C0D8 0D 0A FCB $0D,$0A 98 C0DA 20 4D 57 20 FCC " MW Memory write" C0DE 4D 65 6D 6F C0E2 72 79 20 77 C0E6 72 69 74 65 99 C0EA 0D 0A FCB $0D,$0A 100 C0EC 20 52 52 20 FCC " RR Print contents of stack" C0F0 50 72 69 6E C0F4 74 20 63 6F C0F8 6E 74 65 6E C0FC 74 73 20 6F C100 66 20 73 74 C104 61 63 6B 101 C107 0D 0A FCB $0D,$0A 102 C109 20 52 43 20 FCC " RC Change stack CC" C10D 43 68 61 6E C111 67 65 20 73 C115 74 61 63 6B C119 20 43 43 103 C11C 0D 0A FCB $0D,$0A 104 C11E 20 52 41 20 FCC " RA Change stack A" C122 43 68 61 6E C126 67 65 20 73 C12A 74 61 63 6B C12E 20 41 105 C130 0D 0A FCB $0D,$0A 106 C132 20 52 42 20 FCC " RB Change stack B" C136 43 68 61 6E C13A 67 65 20 73 C13E 74 61 63 6B C142 20 42 107 C144 0D 0A FCB $0D,$0A 108 C146 20 52 58 20 FCC " RX Change stack X" C14A 43 68 61 6E C14E 67 65 20 73 C152 74 61 63 6B C156 20 58 109 C158 0D 0A FCB $0D,$0A 110 C15A 20 52 50 20 FCC " RP Change stack PC" C15E 43 68 61 6E C162 67 65 20 73 C166 74 61 63 6B C16A 20 50 43 111 C16D 0D 0A FCB $0D,$0A 112 C16F 20 52 53 20 FCC " RS Change stack pointer" C173 43 68 61 6E C177 67 65 20 73 C17B 74 61 63 6B C17F 20 70 6F 69 C183 6E 74 65 72 113 C187 0D 0A FCB $0D,$0A 114 C189 20 52 4D 20 FCC " RM Reset stack pointer" C18D 52 65 73 65 C191 74 20 73 74 C195 61 63 6B 20 C199 70 6F 69 6E C19D 74 65 72 115 C1A0 0D 0A FCB $0D,$0A 116 C1A2 20 50 20 20 FCC " P Select I/O page" C1A6 53 65 6C 65 C1AA 63 74 20 49 C1AE 2F 4F 20 70 C1B2 61 67 65 117 C1B5 0D 0A FCB $0D,$0A 118 C1B7 20 53 20 20 FCC " S Single step" C1BB 53 69 6E 67 C1BF 6C 65 20 73 C1C3 74 65 70 119 C1C6 0D 0A FCB $0D,$0A 120 C1C8 20 58 20 20 FCC " X Enter extended ROM" C1CC 45 6E 74 65 C1D0 72 20 65 78 C1D4 74 65 6E 64 C1D8 65 64 20 52 C1DC 4F 4D 121 C1DE 0D 0A 04 FCB $0D,$0A,$04 122 C1E1 0D 0A REGTX FCB $0D,$0A 123 C1E3 43 43 20 42 FCC "CC B A X PC SP H I N Z V C" C1E7 20 20 41 20 C1EB 20 58 20 20 C1EF 20 20 50 43 C1F3 20 20 20 53 C1F7 50 20 20 20 C1FB 20 20 48 20 C1FF 49 20 4E 20 C203 5A 20 56 20 C207 43 124 C208 0D 0A 04 FCB $0D,$0A,$04 125 C20B 0D 0A DUMPTX FCB $0D,$0A 126 C20D 41 44 44 52 FCC "ADDR 0 1 2 3 4 5 6 7 8 9 A B C D E F" C211 20 20 30 20 C215 20 31 20 20 C219 32 20 20 33 C21D 20 20 34 20 C221 20 35 20 20 C225 36 20 20 37 C229 20 20 20 38 C22D 20 20 39 20 C231 20 41 20 20 C235 42 20 20 43 C239 20 20 44 20 C23D 20 45 20 20 C241 46 127 C242 0D 0A 04 FCB $0D,$0A,$04 128 C245 0D 0A LDTX FCB $0D,$0A 129 C247 4C 6F 61 64 FCC "Load S19 record" C24B 20 53 31 39 C24F 20 72 65 63 C253 6F 72 64 130 C256 0D 0A 04 FCB $0D,$0A,$04 131 C259 0D 0A 0A LFAILTX FCB $0D,$0A,$0A 132 C25C 4C 6F 61 64 FCC "Load fail - Press Y to continue" C260 20 66 61 69 C264 6C 20 2D 20 C268 50 72 65 73 C26C 73 20 59 20 C270 74 6F 20 63 C274 6F 6E 74 69 C278 6E 75 65 133 C27B 0D 0A 04 FCB $0D,$0A,$04 134 C27E 0D 0A LDOKTX FCB $0D,$0A 135 C280 4C 6F 61 64 FCC "Load OK" C284 20 4F 4B 136 C287 0D 0A 04 FCB $0D,$0A,$04 137 C28A 0D 0A STOPTX FCB $0D,$0A 138 C28C 53 54 4F 50 FCC "STOP" 139 C290 04 FCB $04 140 C291 0D 0A TRAPTX FCB $0D,$0A 141 C293 54 52 41 50 FCC "TRAP" 142 C297 04 FCB $04 143 C298 144 *********** 145 * START FROM RESET 146 C298 8E 7F00 RESET LDS #STACK INIT STACK POINTER 147 C29B BF 7F08 STS SP 148 C29E BD C77F JSR INITVEC INIT VECTORS 149 C2A1 BD C6B1 JSR SCIINIT INIT INTERNAL ACIA 150 C2A4 86 FF LDAA #$FF SETUP PAGE REGISTER 151 C2A6 97 00 STAA PIA1DIR 152 C2A8 86 87 LDAA #$87 MASK EXTERNAL INTERRUPTS AND SELECT PAGE 7 153 C2AA 97 02 STAA PIA1DAT 154 C2AC 86 40 LDAA #$40 155 C2AE 97 14 STAA RAMCONT ENABLE CPU INTERNAL RAM 156 C2B0 CE C030 PROMPT LDX #PROMPTX 157 C2B3 BD C6F7 JSR PDATA 158 C2B6 BD C6ED JSR INCHAR 159 C2B9 81 0D CMPA #$0D 160 C2BB 27 F3 BEQ PROMPT 161 C2BD 84 DF ANDA #$DF CONVERT TO UPPER CASE 162 C2BF 81 48 CMPA #'H 163 C2C1 26 03 BNE *+5 164 C2C3 7E C381 JMP HELP PRINT HELP 165 C2C6 81 47 CMPA #'G 166 C2C8 26 03 BNE *+5 167 C2CA 7E C38A JMP GO GOTO USER PROGRAM 168 C2CD 81 4A CMPA #'J 169 C2CF 26 03 BNE *+5 170 C2D1 7E C38E JMP JUMP JUMP TO USER PROGRAM 171 C2D4 81 52 CMPA #'R 172 C2D6 26 03 BNE *+5 173 C2D8 7E C335 JMP MENU_R REG/STACK CMDS 174 C2DB 81 4D CMPA #'M 175 C2DD 26 03 BNE *+5 176 C2DF 7E C305 JMP MENU_M MEMORY CMDS 177 C2E2 81 4C CMPA #'L 178 C2E4 26 03 BNE *+5 179 C2E6 7E C5B7 JMP LOAD LOAD S19 180 C2E9 81 50 CMPA #'P 181 C2EB 26 03 BNE *+5 182 C2ED 7E C641 JMP PAGE SELECT I/O PAGE 183 C2F0 81 53 CMPA #'S 184 C2F2 26 03 BNE *+5 185 C2F4 7E C662 JMP SSTEP SINGLE STEP 186 C2F7 81 58 CMPA #'X 187 C2F9 26 03 BNE *+5 188 C2FB 7E D000 JMP EXROM JUMP TO EXTENDED ROM 189 C2FE 86 3F LDAA #'? 190 C300 BD 7FE8 JSR OUTCHAR 191 C303 20 AB BRA PROMPT 192 C305 193 C305 BD C6ED MENU_M JSR INCHAR 194 C308 81 0D CMPA #$0D 195 C30A 26 03 BNE *+5 196 C30C 7E C2B0 JMP PROMPT 197 C30F 84 DF ANDA #$DF CONVERT TO UPPER CASE 198 C311 81 43 CMPA #'C 199 C313 26 03 BNE *+5 200 C315 7E C477 JMP CHANGE MEMORY CHANGE 201 C318 81 57 CMPA #'W 202 C31A 26 03 BNE *+5 203 C31C 7E C4B3 JMP MEMWRT MEMORY WRITE 204 C31F 81 46 CMPA #'F 205 C321 26 03 BNE *+5 206 C323 7E C4F2 JMP MFILL MEMORY FILL 207 C326 81 44 CMPA #'D 208 C328 26 03 BNE *+5 209 C32A 7E C53A JMP DUMP MEMORY DUMP 210 C32D 86 3F LDAA #'? 211 C32F BD 7FE8 JSR OUTCHAR 212 C332 7E C2B0 JMP PROMPT 213 C335 214 C335 BD C6ED MENU_R JSR INCHAR 215 C338 81 0D CMPA #$0D 216 C33A 26 03 BNE *+5 217 C33C 7E C2B0 JMP PROMPT 218 C33F 84 DF ANDA #$DF 219 C341 81 52 CMPA #'R 220 C343 26 03 BNE *+5 221 C345 7E C3A9 JMP PRTREG REGISTER PRINT 222 C348 81 41 CMPA #'A 223 C34A 26 03 BNE *+5 224 C34C 7E C3EF JMP REGACH REGISTER A CHANGE 225 C34F 81 42 CMPA #'B 226 C351 26 03 BNE *+5 227 C353 7E C401 JMP REGBCH REGISTER B CHANGE 228 C356 81 58 CMPA #'X 229 C358 26 03 BNE *+5 230 C35A 7E C413 JMP REGXCH REGISTER X CHANGE 231 C35D 81 50 CMPA #'P 232 C35F 26 03 BNE *+5 233 C361 7E C42B JMP REGPCH REGISTER PC CHANGE 234 C364 81 43 CMPA #'C 235 C366 26 03 BNE *+5 236 C368 7E C443 JMP REGCCH REGISTER CC CHANGE 237 C36B 81 53 CMPA #'S 238 C36D 26 03 BNE *+5 239 C36F 7E C455 JMP REGLDS CHANGE STACK POINTER 240 C372 81 4D CMPA #'M 241 C374 26 03 BNE *+5 242 C376 7E C466 JMP REGRS RESET STACK POINTER 243 C379 86 3F LDAA #'? 244 C37B BD 7FE8 JSR OUTCHAR 245 C37E 7E C2B0 JMP PROMPT 246 C381 247 *************** 248 * HELP 249 C381 CE C035 HELP LDX #HELPTX 250 C384 BD C6F7 JSR PDATA 251 C387 7E C2B0 JMP PROMPT 252 C38A 253 *************** 254 * GO 255 C38A BE 7F08 GO LDS SP 256 C38D 3B RTI 257 C38E 258 *************** 259 * JUMP TO ADDRESS 260 C38E BD C727 JUMP JSR OUTS 261 C391 BD C75B JSR BADDR 262 C394 24 05 BCC JUMPE ADDRESS INPUT OK? 263 C396 BD C6FE JSR PCRLF 264 C399 6E 00 JMP 0,X JUMP TO ADDRESS IN X 265 C39B 86 3F JUMPE LDAA #'? 266 C39D BD 7FE8 JSR OUTCHAR 267 C3A0 7E C2B0 JMP PROMPT 268 C3A3 269 *************** 270 * RETURN FROM USER PROGRAM 271 C3A3 BF 7F08 RETURN STS SP 272 C3A6 7E C2B0 JMP PROMPT 273 C3A9 274 *************** 275 * PRINT CONTENTS OF STACK 276 C3A9 CE C1E1 PRTREG LDX #REGTX 277 C3AC BD C6F7 JSR PDATA 278 C3AF FE 7F08 LDX SP 279 C3B2 08 INX 280 C3B3 BD C725 JSR OUT2HS CONDITION CODES 281 C3B6 BD C725 JSR OUT2HS ACC-B 282 C3B9 BD C725 JSR OUT2HS ACC-A 283 C3BC BD C723 JSR OUT4HS X-REG 284 C3BF BD C723 JSR OUT4HS P-COUNTER 285 C3C2 CE 7F08 LDX #SP 286 C3C5 BD C723 JSR OUT4HS STACK POINTER 287 C3C8 288 C3C8 BD C727 JSR OUTS 289 C3CB FE 7F08 LDX SP 290 C3CE 08 INX 291 C3CF E6 00 LDAB ,X 292 C3D1 CE 0006 LDX #$06 293 C3D4 58 ASLB 294 C3D5 58 ASLB 295 C3D6 BD C727 CCLOOP JSR OUTS 296 C3D9 58 ASLB 297 C3DA 25 08 BCS CCONE 298 C3DC 86 30 CCZERO LDAA #'0 299 C3DE BD 7FE8 JSR OUTCHAR 300 C3E1 7E C3E9 JMP CCEND 301 C3E4 86 31 CCONE LDAA #'1 302 C3E6 BD 7FE8 JSR OUTCHAR 303 C3E9 304 C3E9 09 CCEND DEX 305 C3EA 26 EA BNE CCLOOP 306 C3EC 7E C2B0 JMP PROMPT 307 C3EF 308 *************** 309 * REGISTER CHANGE ROUTINES (A B X PC CC SP) 310 C3EF 86 3D REGACH LDAA #'= 311 C3F1 BD 7FE8 JSR OUTCHAR 312 C3F4 FE 7F08 LDX SP 313 C3F7 BD C747 JSR INBYTE 314 C3FA 24 73 BCC REGERR 315 C3FC A7 03 STAA 3,X 316 C3FE 7E C2B0 ENDA JMP PROMPT 317 C401 86 3D REGBCH LDAA #'= 318 C403 BD 7FE8 JSR OUTCHAR 319 C406 FE 7F08 LDX SP 320 C409 BD C747 JSR INBYTE 321 C40C 24 61 BCC REGERR 322 C40E A7 02 STAA 2,X 323 C410 7E C2B0 ENDB JMP PROMPT 324 C413 86 3D REGXCH LDAA #'= 325 C415 BD 7FE8 JSR OUTCHAR 326 C418 BD C75B JSR BADDR 327 C41B 24 52 BCC REGERR 328 C41D FF 7F0C STX XHI 329 C420 FE 7F08 LDX SP 330 C423 FC 7F0C LDD XHI 331 C426 ED 04 STD 4,X 332 C428 7E C2B0 ENDX JMP PROMPT 333 C42B 86 3D REGPCH LDAA #'= 334 C42D BD 7FE8 JSR OUTCHAR 335 C430 BD C75B JSR BADDR 336 C433 24 3A BCC REGERR 337 C435 FF 7F0C STX XHI 338 C438 FE 7F08 LDX SP 339 C43B FC 7F0C LDD XHI 340 C43E ED 06 STD 6,X 341 C440 7E C2B0 ENDP JMP PROMPT 342 C443 86 3D REGCCH LDAA #'= 343 C445 BD 7FE8 JSR OUTCHAR 344 C448 FE 7F08 LDX SP 345 C44B BD C747 JSR INBYTE 346 C44E 24 1F BCC REGERR 347 C450 A7 01 STAA 1,X 348 C452 7E C2B0 ENDC JMP PROMPT 349 C455 86 3D REGLDS LDAA #'= 350 C457 BD 7FE8 JSR OUTCHAR 351 C45A BD C75B JSR BADDR 352 C45D 24 10 BCC REGERR 353 C45F FF 7F08 STX SP 354 C462 35 TXS 355 C463 7E C2B0 JMP PROMPT 356 C466 8E 7F00 REGRS LDS #STACK 357 C469 BF 7F08 STS SP 358 C46C BD C2B0 JSR PROMPT 359 C46F 86 3F REGERR LDAA #'? 360 C471 BD 7FE8 JSR OUTCHAR 361 C474 7E C2B0 JMP PROMPT 362 C477 363 *************** 364 * CHANGE MEMORY (MC AAAA DD NN) 365 C477 BD C727 CHANGE JSR OUTS 366 C47A BD C75B JSR BADDR BUILD ADDRESS 367 C47D 24 2C BCC CHANGER 368 C47F BD C6FE CHA51 JSR PCRLF C/R L/F 369 C482 CE 7F0C LDX #XHI 370 C485 BD C723 JSR OUT4HS PRINT ADDRESS 371 C488 FE 7F0C LDX XHI 372 C48B BD C725 JSR OUT2HS PRIND DATA (OLD) 373 C48E FF 7F0C STX XHI SAVE DATA ADDRESS 374 C491 BD C747 JSR INBYTE INPUT NEW DATA 375 C494 24 0E BCC CHANG1 376 C496 09 DEX 377 C497 A7 00 STAA ,X CHANGE MEMEORY 378 C499 A1 00 CMPA ,X 379 C49B 27 E2 BEQ CHA51 DID CHANGE 380 C49D 86 3F LDAA #'? 381 C49F BD 7FE8 JSR OUTCHAR 382 C4A2 20 DB BRA CHA51 383 C4A4 81 DD CHANG1 CMPA #$DD 384 C4A6 27 D7 BEQ CHA51 385 C4A8 7E C2B0 CHANGEE JMP PROMPT 386 C4AB 86 3F CHANGER LDAA #'? 387 C4AD BD 7FE8 JSR OUTCHAR 388 C4B0 7E C2B0 JMP PROMPT 389 C4B3 390 *************** 391 * MEMORY WRITE (MW SADR) 392 C4B3 BD C727 MEMWRT JSR OUTS PRINT SPACE 393 C4B6 BD C75B JSR BADDR ENTER STARTING ADDRESS 394 C4B9 24 2F BCC MEMWRTE ADDRESS OK? 395 C4BB FF 7F0C STX XHI 396 C4BE 7F 7F0B MEMWRTA CLR TEMP CLEAR DATA ENTRY FLAG 397 C4C1 BD C6FE JSR PCRLF 398 C4C4 CE 7F0C LDX #XHI 399 C4C7 BD C723 JSR OUT4HS PRINT CURRENT ADDRESS 400 C4CA FE 7F0C LDX XHI 401 C4CD BD C747 MEMWRTD JSR INBYTE GET BYTE FROM USER 402 C4D0 25 08 BCS MEMWRTW BYTE OK 403 C4D2 7D 7F0B TST TEMP CHECK DATA ENTRY FLAG 404 C4D5 26 E7 BNE MEMWRTA LOOP IF PREVIOUS DATA BYTES ENTERED 405 C4D7 7E C2B0 JMP PROMPT IF NOT, EXIT ROUTINE 406 C4DA A7 00 MEMWRTW STAA ,X STORE ENTERED DATA BYTE 407 C4DC 86 01 LDAA #1 408 C4DE B7 7F0B STAA TEMP SET DATA ENTRY FLAG 409 C4E1 08 INX 410 C4E2 FF 7F0C STX XHI STORE CURRENT ADDRESS 411 C4E5 BD C727 JSR OUTS PRINT SPACE 412 C4E8 20 E3 BRA MEMWRTD WAIT FOR ANOTHER BYTE 413 C4EA 86 3F MEMWRTE LDAA #'? 414 C4EC BD 7FE8 JSR OUTCHAR 415 C4EF 7E C2B0 JMP PROMPT 416 C4F2 417 *************** 418 * FILL MEMORY (MF SADR-EADR DA) 419 C4F2 BD C727 MFILL JSR OUTS PRINT SPACE 420 C4F5 BD C75B JSR BADDR BUILD STARTING ADDRESS 421 C4F8 24 30 BCC MFILLE CHECK IF CORRECT 422 C4FA FF 7F0E STX XTEMP SAVE STARTING ADDRESS 423 C4FD 86 2D LDAA #'- PRINT SEPARATOR 424 C4FF BD 7FE8 JSR OUTCHAR 425 C502 BD C75B JSR BADDR BUILD ENDING ADRESS 426 C505 24 23 BCC MFILLE CHECK IF CORRECT 427 C507 FF 7F0C STX XHI 428 C50A BC 7F0E CPX XTEMP CHECK IF CORRECT ADDRESS RANGE 429 C50D 23 1B BLS MFILLE IF NOT, EXIT ROUTINE 430 C50F 08 INX 431 C510 FF 7F0C STX XHI 432 C513 BD C727 JSR OUTS PRINT SPACE 433 C516 BD C747 JSR INBYTE LOAD FILL DATA 434 C519 24 0F BCC MFILLE CHECK IF CORRECT 435 C51B 16 TAB 436 C51C FE 7F0E LDX XTEMP 437 C51F E7 00 MFILL2 STAB ,X STORE DATA 438 C521 08 INX 439 C522 BC 7F0C CPX XHI 440 C525 26 F8 BNE MFILL2 441 C527 7E C2B0 JMP PROMPT 442 C52A 86 3F MFILLE LDAA #'? 443 C52C BD 7FE8 JSR OUTCHAR 444 C52F 7E C2B0 JMP PROMPT 445 C532 446 *************** 447 * DUMP MEMORY (MD AAAA) 448 C532 86 3F DUMPERR LDAA #'? 449 C534 BD 7FE8 JSR OUTCHAR 450 C537 7E C2B0 JMP PROMPT 451 C53A BD C727 DUMP JSR OUTS 452 C53D BD C75B JSR BADDR 453 C540 24 F0 BCC DUMPERR END IF ADDRESS NOT OK 454 C542 FF 7F0C STX XHI 455 C545 BD C6FE JSR PCRLF 456 C548 B6 7F0D DUMP0 LDAA XLOW 457 C54B 84 F0 ANDA #$F0 BEGIN DUMP AT $xxx0 458 C54D B7 7F0D STAA XLOW 459 C550 CE C20B LDX #DUMPTX 460 C553 BD C6F7 JSR PDATA 461 C556 86 10 LDAA #16 462 C558 B7 7F0B STAA TEMP ROW COUNTER. 16 ROWS = 1 MEMORY PAGE 463 ** PRINT ROW 464 C55B CE 7F0C DUMP1 LDX #XHI 465 C55E BD C723 JSR OUT4HS PRINT ADDRESS 466 C561 BD C727 JSR OUTS 467 C564 FE 7F0C LDX XHI 468 C567 FF 7F0E STX XTEMP SAVE X FOR ASCII PRINT 469 ** PRINT ROW OF BYTES 470 C56A BD C725 DUMP2 JSR OUT2HS 471 C56D FF 7F0C STX XHI SAVE NOW INCREMENTED X 472 C570 B6 7F0D LDAA XLOW 473 C573 84 0F ANDA #$0F FILTER OUT LAST NIB 474 C575 81 08 CMPA #$08 475 C577 26 03 BNE DUMP25 476 C579 BD C727 JSR OUTS 477 C57C 81 00 DUMP25 CMPA #$00 LAST BYTE IN ROW? 478 C57E 26 EA BNE DUMP2 479 C580 FE 7F0E LDX XTEMP RESTORE POINTER 480 C583 FF 7F0C STX XHI FOR ASCII DUMP 481 C586 BD C727 JSR OUTS 482 ** PRINT ROW OF ASCII 483 C589 A6 00 DUMP3 LDAA 0,X 484 C58B 81 7E CMPA #$7E 485 C58D 22 04 BHI DUMP4 BYTE IS NOT PRINTABLE 486 C58F 81 20 CMPA #$20 487 C591 2C 02 BGE DUMP5 BYTE IS PRINTABLE 488 C593 86 2E DUMP4 LDAA #'. 489 C595 BD 7FE8 DUMP5 JSR OUTCHAR PRINT ASCII CHAR 490 C598 08 INX 491 C599 FF 7F0C STX XHI POINT TO NEXT CHARACTER 492 C59C B6 7F0D LDAA XLOW 493 C59F 84 0F ANDA #$0F 494 C5A1 26 E6 BNE DUMP3 LAST CHARACTER IN ROW? 495 C5A3 BD C6FE JSR PCRLF 496 C5A6 7A 7F0B DEC TEMP 497 C5A9 27 02 BEQ DUMPE LAST ROW? 498 C5AB 20 AE BRA DUMP1 499 C5AD BD C6ED DUMPE JSR INCHAR 500 C5B0 81 0D CMPA #$0D 501 C5B2 27 94 BEQ DUMP0 DUMP NEXT PAGE 502 C5B4 7E C2B0 JMP PROMPT 503 C5B7 504 *************** 505 * LOAD S19 RECORD 506 C5B7 CE C245 LOAD LDX #LDTX 507 C5BA BD C6F7 JSR PDATA 508 C5BD 86 0D LOAD1 LDAA #$0D 509 C5BF BD 7FE8 JSR OUTCHAR 510 C5C2 86 39 LOAD2 LDAA #$39 (RTS) 511 C5C4 B7 7FE8 STAA CONOVEC DISABLE CONSOLE OUTPUT 512 C5C7 BD C6ED JSR INCHAR 513 C5CA 81 53 CMPA #'S 514 C5CC 26 F4 BNE LOAD2 1ST CHAR NOT (S) 515 C5CE BD C6ED JSR INCHAR READ CHAR 516 C5D1 81 39 CMPA #'9 517 C5D3 27 57 BEQ LOAD21 2ND CHAR (9) 518 C5D5 81 31 CMPA #'1 519 C5D7 26 E9 BNE LOAD2 2ND CHAR NOT (1) 520 C5D9 7F 7F0A CLR CKSM CLEAR CHECKSUM 521 C5DC BD C747 JSR INBYTE READ BYTE 522 C5DF 16 TAB 523 C5E0 FB 7F0A ADDB CKSM 524 C5E3 F7 7F0A STAB CKSM 525 C5E6 80 02 SUBA #2 526 C5E8 B7 7F0B STAA TEMP BYTE COUNT 527 C5EB BD C75B JSR BADDR 528 C5EE 24 25 BCC LOAD19 ADDRESS OK? 529 C5F0 F6 7F0A LDAB CKSM 530 C5F3 FB 7F0C ADDB XHI 531 C5F6 FB 7F0D ADDB XLOW 532 C5F9 F7 7F0A STAB CKSM 533 C5FC BD C747 LOAD11 JSR INBYTE 534 C5FF 16 TAB 535 C600 FB 7F0A ADDB CKSM 536 C603 F7 7F0A STAB CKSM 537 C606 7A 7F0B DEC TEMP 538 C609 27 05 BEQ LOAD15 ZERO BYTE COUNT 539 C60B A7 00 STAA ,X STORE DATA 540 C60D 08 INX 541 C60E 20 EC BRA LOAD11 542 C610 7C 7F0A LOAD15 INC CKSM INCREMENT CHECKSUM 543 C613 27 A8 BEQ LOAD1 544 C615 86 7E LOAD19 LDAA #$7E (JMP EXTENDED) 545 C617 B7 7FE8 STAA CONOVEC ENABLE CONSOLE OUTPUT 546 C61A CE C259 LDX #LFAILTX PRINT ERROR MESSAGE 547 C61D BD C6F7 JSR PDATA 548 C620 BD 7FEB LOAD20 JSR CONIVEC 549 C623 84 DF ANDA #$DF TO UPPER CASE 550 C625 81 59 CMPA #'Y 551 C627 26 F7 BNE LOAD20 552 C629 7E C2B0 JMP PROMPT 553 C62C BD C6ED LOAD21 JSR INCHAR 554 C62F 81 0D CMPA #$0D 555 C631 26 F9 BNE LOAD21 556 C633 86 7E LDAA #$7E (JMP EXTENDED) 557 C635 B7 7FE8 STAA CONOVEC ENABLE CONSOLE OUTPUT 558 C638 CE C27E LDX #LDOKTX 559 C63B BD C6F7 JSR PDATA 560 C63E 7E C2B0 JMP PROMPT 561 C641 562 *************** 563 * PAGE SELECT ROUTINE 564 C641 86 3D PAGE LDAA #'= 565 C643 BD 7FE8 JSR OUTCHAR 566 C646 86 FF LDAA #$FF 567 C648 97 00 STAA PIA1DIR SET ALL OUTPUT 568 C64A BD C72C JSR INHEX 569 C64D 24 04 BCC PAGERR 570 C64F 81 07 CMPA #$07 571 C651 23 08 BLS PAGESET 572 C653 86 3F PAGERR LDAA #'? 573 C655 BD 7FE8 JSR OUTCHAR 574 C658 7E C2B0 JMP PROMPT 575 C65B 8A 80 PAGESET ORAA #$80 MASK EXTERNAL INTERRUPTS 576 C65D 97 02 STAA PIA1DAT 577 C65F 7E C2B0 JMP PROMPT 578 C662 579 *************** 580 * DO SINGLE STEP 581 C662 BD C6FE SSTEP JSR PCRLF 582 C665 BE 7F08 STEP LDS SP RESTORE PROGRAM STACK POINTER 583 C668 C6 1F LDAB #$1F 584 C66A 5A STPWAI DECB WAIT FOR EVENTUAL SCI XFER 585 C66B C1 00 CMPB #$00 BEFORE TIMER INIT 586 C66D 26 FB BNE STPWAI 587 C66F CE C682 LDX #STOP SET INTERRUPT VECTOR 588 C672 FF 7FEF STX TMOFVEC+1 589 C675 CE FFEC LDX #$FFEC RESET COUNTER VALUE 590 C678 DF 09 STX COUNTHI 591 C67A DE 08 LDX TIMECON CLEAR INTERRUPT BIT IN TIMER CTRL REG 592 C67C 86 04 LDAA #$04 ENABLE TIMER OVERFLOW INTERRUPT 593 C67E 97 08 STAA TIMECON 594 C680 0E CLI CLEAR INTERRUPT BIT IN CC 595 C681 3B RTI 596 C682 597 *************** 598 * SINGLE STEP INTERRUPT ENTRY 599 C682 BF 7F08 STOP STS SP SAVE PROGRAM STACK POINTER 600 C685 CE C76D LDX #INTSEQ RESTORE INTERRUPT VECTOR 601 C688 FF 7FEF STX TMOFVEC+1 602 C68B DE 08 LDX TIMECON CLEARS INTERRUPT BIT IN TIMER CTRL REG 603 C68D 86 00 LDAA #$00 DISABLE TIMER INTERRUPT 604 C68F 97 08 STAA TIMECON 605 C691 FE 7F08 LDX SP EXTRACT PROGRAM STOP ADDRESS 606 C694 C6 06 LDAB #6 607 C696 3A ABX 608 C697 EE 00 LDX ,X 609 C699 8C C000 CPX #$C000 610 C69C 22 C7 BHI STEP NO STOP IN ROM 611 C69E FF 7F0E STX XTEMP 612 C6A1 F6 7F0E LDAB XTEMP 613 C6A4 C1 7F CMPB #$7F 614 C6A6 27 BD BEQ STEP NO STOP IN PAGE $7F 615 C6A8 CE C28A LDX #STOPTX 616 C6AB BD C6F7 JSR PDATA 617 C6AE 7E C3A9 JMP PRTREG PRINT REGS AND GO TO PROMPT 618 C6B1 619 *************** 620 * INIT BUILTIN ACIA 621 C6B1 86 05 SCIINIT LDAA #$05 ENABLE INTERNAL ACIA, INTERNAL CLOCK, 9600 BAUD 622 C6B3 97 10 STAA ACIAMOD 623 C6B5 86 0A LDAA #$0A ENABLE RECIEVE AND TRANSMITT DATA 624 C6B7 97 11 STAA ACIASTA 625 C6B9 96 12 LDAA ACIARXD FLUSH BUFFER AND CLEAR ERROR FLAGS 626 C6BB 39 RTS 627 C6BC 628 *************** 629 * BUILTIN ACIA OUTPUT FROM A-ACC 630 C6BC 37 SCIOUT PSHB SAVE B-REG 631 C6BD D6 11 SCIOUT1 LDAB ACIASTA 632 C6BF 58 ASLB 633 C6C0 58 ASLB 634 C6C1 58 ASLB 635 C6C2 24 F9 BCC SCIOUT1 READY FOR NEXT CHARACTER 636 C6C4 97 13 STAA ACIATXD 637 C6C6 33 PULB RESTORE B-REG 638 C6C7 39 RTS 639 C6C8 640 *************** 641 * BUILTIN ACIA INPUT TO A-ACC 642 C6C8 96 12 SCIINER LDAA ACIARXD ON ERROR, FLUSH BUFFER AND CLEAR ERROR FLAG 643 C6CA 96 11 SCIIN LDAA ACIASTA 644 C6CC 84 C0 ANDA #$C0 FILTER OUT RDRF AND ORFE 645 C6CE 81 00 CMPA #$00 646 C6D0 27 F8 BEQ SCIIN WAIT FOR CHARACTER 647 C6D2 81 40 CMPA #$40 648 C6D4 27 F2 BEQ SCIINER CHECK FOR FRAMING ERROR 649 C6D6 96 12 LDAA ACIARXD READ RECIEVED CHARACTER 650 C6D8 39 RTS 651 C6D9 652 *************** 653 * BUILTIN ACIA STATUS TO A-ACC 654 * RETURNS 1 ON CHAR WAITING. 0 ON NO CHAR 655 C6D9 96 12 SCISTAE LDAA ACIARXD ON ERROR, FLUSH BUFFER AND CLEAR ERROR FLAG 656 C6DB 96 11 SCISTAT LDAA ACIASTA 657 C6DD 84 C0 ANDA #$C0 FILTER OUT RDRF AND ORFE 658 C6DF 81 00 CMPA #$00 659 C6E1 27 07 BEQ SCISTA0 NO ERROR AND NO CHARACTER 660 C6E3 81 40 CMPA #$40 661 C6E5 27 F2 BEQ SCISTAE CHECK FOR ERROR 662 C6E7 86 01 LDAA #$01 CHARACTER WAITING 663 C6E9 39 RTS 664 C6EA 86 00 SCISTA0 LDAA #$00 665 C6EC 39 RTS 666 C6ED 667 *************** 668 * OUTPUT/INPUT ONE CHAR TO/FROM A-REGISTER AND ECHO 669 C6ED BD 7FEB INCHAR JSR CONIVEC 670 C6F0 7E 7FE8 JMP CONOVEC 671 7FE8 OUTCHAR EQU CONOVEC 672 C6F3 673 *************** 674 * PRINT DATA POINTED AT BY X-REG 675 C6F3 BD 7FE8 PDATA2 JSR OUTCHAR 676 C6F6 08 INX 677 C6F7 A6 00 PDATA LDAA ,X 678 C6F9 81 04 CMPA #4 679 C6FB 26 F6 BNE PDATA2 GO ON IF NOT EOT 680 C6FD 39 RTS 681 C6FE 682 *************** 683 * OUTPUT CRLF 684 C6FE 3C PCRLF PSHX 685 C6FF CE C02D LDX #CRLFTX 686 C702 BD C6F7 JSR PDATA 687 C705 38 PULX 688 C706 39 RTS 689 C707 690 *************** 691 * OUTPUT HEX CHARS 692 C707 44 OUTHL LSRA OUT HEX LEFT BCD DIGIT 693 C708 44 LSRA 694 C709 44 LSRA 695 C70A 44 LSRA 696 C70B 84 0F OUTHR ANDA #$F OUT HEX RIGHT BCD DIGIT 697 C70D 8B 30 ADDA #$30 698 C70F 81 39 CMPA #$39 699 C711 23 02 BLS OUTHE 700 C713 8B 07 ADDA #$7 701 C715 7E 7FE8 OUTHE JMP OUTCHAR 702 C718 703 C718 A6 00 OUT2H LDAA 0,X 704 C71A BD C707 JSR OUTHL OUTPUT LEFT HEX CHAR 705 C71D A6 00 LDAA 0,X 706 C71F 08 INX 707 C720 7E C70B JMP OUTHR OUTPUT RIGHT HEX CHAR 708 C723 709 C723 8D F3 OUT4HS BSR OUT2H OUTPUT 4 HEX CHAR + SPACE 710 C725 8D F1 OUT2HS BSR OUT2H OUTPUT 2 HEX CHAR + SPACE 711 C727 86 20 OUTS LDAA #$20 SPACE 712 C729 7E 7FE8 JMP OUTCHAR (BSR & RTS) 713 C72C 714 *************** 715 * INPUT HEX CHAR INTO A-ACC 716 C72C BD C6ED INHEX JSR INCHAR 717 C72F 80 30 SUBA #$30 718 C731 2B 12 BMI NOTHEX 719 C733 81 09 CMPA #$09 720 C735 2F 0C BLE IN1HG 721 C737 84 DF ANDA #$DF CONVERT TO UPPER CASE 722 C739 81 11 CMPA #$11 723 C73B 2B 08 BMI NOTHEX 724 C73D 81 16 CMPA #$16 725 C73F 2E 04 BGT NOTHEX 726 C741 80 07 SUBA #7 727 C743 0D IN1HG SEC INPUT OK. SET CARRY 728 C744 39 RTS 729 C745 0C NOTHEX CLC INPUT BAD. CLEAR CARRY 730 C746 39 RTS 731 C747 732 *************** 733 * INPUT BYTE (TWO FRAMES) INTO A-ACC 734 C747 BD C72C INBYTE JSR INHEX GET HEX CHAR 735 C74A 24 0D BCC INBYTE1 736 C74C 48 ASLA 737 C74D 48 ASLA 738 C74E 48 ASLA 739 C74F 48 ASLA 740 C750 16 TAB 741 C751 BD C72C JSR INHEX 742 C754 24 03 BCC INBYTE1 743 C756 1B ABA 744 C757 0D SEC GOOD INPUT 745 C758 39 RTS 746 C759 0C INBYTE1 CLC BAD INPUT 747 C75A 39 RTS 748 C75B 749 *************** 750 * BUILD ADDRESS INTO X-REG 751 C75B 8D EA BADDR BSR INBYTE READ FIRST FRAME 752 C75D 24 0D BCC BADDRE 753 C75F B7 7F0C STAA XHI 754 C762 8D E3 BSR INBYTE READ SECOND FRAME 755 C764 24 06 BCC BADDRE 756 C766 B7 7F0D STAA XLOW 757 C769 FE 7F0C LDX XHI (X) ADDRESS WE BUILD 758 C76C 39 BADDRE RTS 759 C76D 760 *************** 761 * INTERRUPT SEQUENCE 762 C76D BF 7F08 INTSEQ STS SP 763 C770 7E C3A9 JMP PRTREG PRINT REGS AND GO TO PROMPT 764 C773 765 *************** 766 * TRAP INTERRUPT SEQUENCE 767 C773 BF 7F08 TRAP STS SP SAVE TARGET STACKPOINTER 768 C776 CE C291 LDX #TRAPTX 769 C779 BD C6F7 JSR PDATA 770 C77C 7E C3A9 JMP PRTREG PRINT REGS AND GO TO PROMPT 771 C77F 772 *************** 773 * INITIATE VECTOR JUMPTABLE 774 C77F 86 7E INITVEC LDAA #$7E JMP EXT OP CODE 775 C781 CE C76D LDX #INTSEQ 776 C784 B7 7FFD STAA NMIVEC 777 C787 FF 7FFE STX NMIVEC+1 778 C78A B7 7FFA STAA SWIVEC 779 C78D FF 7FFB STX SWIVEC+1 780 C790 B7 7FF7 STAA IRQVEC 781 C793 FF 7FF8 STX IRQVEC+1 782 C796 B7 7FF4 STAA TMICVEC 783 C799 FF 7FF5 STX TMICVEC+1 784 C79C B7 7FF1 STAA TMOCVEC 785 C79F FF 7FF2 STX TMOCVEC+1 786 C7A2 B7 7FEE STAA TMOFVEC 787 C7A5 FF 7FEF STX TMOFVEC+1 788 C7A8 CE C6BC LDX #SCIOUT 789 C7AB B7 7FE8 STAA CONOVEC 790 C7AE FF 7FE9 STX CONOVEC+1 791 C7B1 CE C6CA LDX #SCIIN 792 C7B4 B7 7FEB STAA CONIVEC 793 C7B7 FF 7FEC STX CONIVEC+1 794 C7BA CE C6DB LDX #SCISTAT 795 C7BD B7 7FE5 STAA CONSVEC 796 C7C0 FF 7FE6 STX CONSVEC+1 797 C7C3 39 RTS 798 C7C4 799 *************** 800 * I/O READ FUNCTION 801 * IN: X = ADDRESS 802 * B = I/O PAGE 803 * OUT: A = DATA 804 C7C4 96 02 IORD LDAA PIA1DAT 805 C7C6 36 PSHA SAVE PAGE REG 806 C7C7 D7 02 STAB PIA1DAT SET NEW I/O PAGE 807 C7C9 A6 00 LDAA ,X ACCESS I/O PAGE 808 C7CB 33 PULB 809 C7CC D7 02 STAB PIA1DAT RESTORE PAGE REG 810 C7CE 39 RTS 811 C7CF 812 *************** 813 * I/O WRITE FUNCTION 814 * IN: X = ADDRESS 815 * B = I/O PAGE 816 * A = DATA 817 C7CF 36 IOWR PSHA SAVE DATA 818 C7D0 96 02 LDAA PIA1DAT 819 C7D2 36 PSHA SAVE PAGE REG 820 C7D3 D7 02 STAB PIA1DAT SET NEW I/O PAGE 821 C7D5 33 PULB RESTORE PAGE REG VALUE 822 C7D6 32 PULA RESORE DATA VALUE 823 C7D7 A7 00 STAA ,X ACCESS I/O PAGE 824 C7D9 D7 02 STAB PIA1DAT RESTORE PAGE REG 825 C7DB 39 RTS 826 C7DC 827 *************** 828 * VECTORS 829 FFEE ORG $FFEE 830 FFEE C773 FDB TRAP FFEE-EF TRAP 831 FFF0 832 FFF2 ORG $FFF2 833 FFF2 7FEE FDB TMOFVEC FFF2-3 TIMER OVER FLOW 834 FFF4 7FF1 FDB TMOCVEC FFF4-5 TIMER OUTPUT COMPARE 835 FFF6 7FF4 FDB TMICVEC FFF6-7 TIMER INPUT CAPTURE 836 FFF8 7FF7 FDB IRQVEC FFF8-9 IRQ 837 FFFA 7FFA FDB SWIVEC FFFA-B SOFTWARE INTERRUPT 838 FFFC 7FFD FDB NMIVEC FFFC-D NMI 839 FFFE C298 FDB RESET FFFE-F RESET 840 0000 841 *************** 842 * EXTENDED ROM 843 D000 EXROM EQU $D000 Total Errors 0