Colourmon 1.2 Assembler Listing

COLOURMON 1.2 1/10/83 TSC ASSEMBLER PAGE 1 1 * NAM COLOURMON 1.2 2 * 3 * This a machine language monitor program 4 * written for the Tandy colour computer. 5 * It is written as a subroutine and gains 6 * execution by the BASIC command EXEC. 7 * The X and Y registers are preserved but 8 * A and B accumulators are lost. 9 * External routines called are in the 10 * BASIC ROMS and are undocumented calls 11 * to BASIC's input and output routine 12 * INCH = $A1B1 wait for key press 13 * OUTCH = $A282 send character to device 14 * specified by location 15 * $006F where 16 * $00 = screen 17 * $FF = tape 18 * $FE = printer 19 * There are seven commands 20 * (1) E Examine a 128 byte memory block 21 * (2) F Fill a memory block with a byte 22 * (3) G go to machine code subroutine 23 * (4) M Memory change of locations 24 * (5) O Opcode display of machine code 25 * (6) S Shift colourmon elsewhere 26 * (7) X eXit to the BASIC ROMs. 27 * 28 0004 EOT EQU $04 end of transmission 29 000D CR EQU $0D carriage return 30 0020 SPACE EQU $20 31 005E UPARW EQU $5E up arrow 32 * 33 A1B1 INCH EQU $A1B1 get typed character 34 A282 OUTCH EQU $A282 output char to device 35 * 36 3000 ORG $3000 37 >3000 16 004F START LBRA INIT jump to colourmon commands 38 3003 7E A1B1 INPUT JMP INCH jump for basic input routine 39 3006 7E A282 OUTPUT JMP OUTCH jump for BASIC output 40 3009 45 FCTABL FCC 'E' examine command 41 300A 008C FDB MEMBLK-FCTABL 42 300C 46 FCC 'F' fill command 43 300D 00D6 FDB FILMEM-FCTABL 44 300F 47 FCC 'G' go command 45 3010 00FD FDB GOTO-FCTABL 46 3012 4D FCC 'M' memory change command 47 3013 0107 FDB CHANGE-FCTABLE 48 3015 4F FCC 'O' opcode list command 49 3016 0157 FDB OPCODE-FCTABL 50 3018 53 FCC 'S' shift colourmon command 51 3019 025C FDB SHIFT-FCTABL 52 301B 58 FCC 'X' exit to basic command 53 301C 0292 FDB EXIT-FCTABL 54 301E FCTBEN EQU * 55 * 56 * Message strings 57 301E 43 4F 4C 4F MHEAD FCC 'COLOURMON 1.2' 58 302B 04 FCB EOT 59 302C 2A MPROM FCC '*' 60 302D 04 FCB EOT 61 302E 42 45 47 20 MBEG FCC 'BEG ADDR ?' 62 3038 04 FCB EOT 63 3039 45 4E 44 20 MEND FCC 'END ADDR ?' 64 3043 04 FCB EOT 65 3044 46 49 4C 4C MFILL FCC 'FILL CHAR?' 66 304E 04 FCB EOT 67 304F 20 3F MWHAT FCC ' ?' 68 3051 04 FCB EOT 69 * 70 * Program start 71 3052 34 30 INIT PSHS Y,X save Y and X registers 72 3054 30 8C C7 LEAX MHEAD,PCR point to name 73 3057 17 02A6 LBSR PSTRNG print program name 74 305A 30 8C CF CONTRL LEAX MPROM,PCR point to prompt 75 305D 17 02A0 LBSR PSTRNG print prompt 76 3060 17 0298 LBSR GETCHR read command character 77 3063 30 8C B8 LEAX FCTBEN,PCR end of command table 78 3066 34 10 PSHS X put on to stack 79 3068 30 8C 9E LEAX FCTABL,PCR start of command table 80 306B A1 84 NXTCHR CMPA ,X does input char match 81 306D 27 10 BEQ GOODCH yes,go to desired routine 82 306F 30 03 LEAX 3,X no,check for another cmd 83 3071 AC E4 CMPX ,S end of table reached? 84 3073 26 F6 BNE NXTCHR no,try next char 85 3075 32 62 LEAS 2,S yes,finished with table 86 3077 30 8C D5 LEAX MWHAT,PCR point to bad cmd reply 87 307A 17 0290 LBSR PDATA print reply to bad cmd 88 307D 20 DB BRA CONTRL try another 89 307F 32 62 GOODCH LEAS 2,S finished with table end 90 3081 17 029A LBSR OUTS output space 91 3084 EC 01 LDD 1,X get offset from cmd table 92 3086 30 8C 80 LEAX FCTABL,PCR add start of table 93 3089 AD 8B JSR D,X do command 94 308B 24 CD BCC CONTRL errors? no,get another cmd 95 308D 30 8C BF LEAX MWHAT,PCR yes,show error 96 3090 17 027A LBSR PDATA 97 3093 20 C5 BRA CONTRL get another command 98 * 99 * Examine a block of memory 100 3095 17 021A MEMBLK LBSR GETAD get address of block 101 3098 25 44 BCS MEM6 non hex? yes,return 102 309A 1F 10 TFR X,D put address into A & B 103 309C C4 80 ANDB #$80 round to 128 byte block 104 309E 34 07 PSHS B,A,CC save address and a byte 105 30A0 86 10 MEM1 LDA #16 number of lines 106 30A2 A7 E4 STA ,S set up line counter 107 30A4 17 025D MEM2 LBSR PCRLF new line 108 30A7 30 61 LEAX 1,S point to memory address 109 30A9 17 026E LBSR OUT4HS output this address 110 30AC AE 61 LDX 1,S pick up memory pointer 111 30AE C6 08 LDB #8 no. of bytes per line 112 30B0 17 026F MEM3 LBSR OUT2H output hexadecimal digit 113 30B3 5A DECB done 8 bytes? 114 30B4 26 FA BNE MEM3 no,output another hex 115 30B6 17 0265 LBSR OUTS now output a space 116 30B9 AE 61 LDX 1,S pick up memory pointer 117 30BB C6 08 LDB #8 no. of locations per line 118 30BD A6 80 MEM4 LDA ,X+ get contents 119 30BF 84 7F ANDA #$7F remove most significant 120 30C1 81 20 CMPA #$20 is it a control char? 121 30C3 24 02 BHS MEM5 no,show ASCII equivalent 122 30C5 86 2E LDA #'. yes,dot for non-printables 123 30C7 17 FF3C MEM5 LBSR OUTPUT 124 30CA 5A DECB done 8 bytes? 125 30CB 26 F0 BNE MEM4 no,do another 126 30CD AF 61 STX 1,S update memory pointer 127 30CF 6A E4 DEC ,S done 16 lines yet? 128 30D1 26 D1 BNE MEM2 no,do another line 129 30D3 17 FF2D LBSR INPUT yes,wait for keyboard 130 30D6 81 0D CMPA #CR is it an enter key 131 30D8 26 C6 BNE MEM1 no,do another block 132 30DA 32 63 LEAS 3,S don't need line cnt or addr 133 30DC 1C FE ANDCC #$FE show no error in exit 134 30DE 39 MEM6 RTS 135 * 136 * Fill a block of memory 137 30DF 17 01BD FILMEM LBSR GETADD get begin and end address 138 30E2 25 1E BCS FIL3 non-hexadecimal error 139 30E4 34 30 PSHS Y,X save end and begin addrs 140 30E6 30 8D FF5A LEAX MFILL,PCR fill char question 141 30EA 17 0213 LBSR PSTRNG print question 142 30ED 17 01DE LBSR BYTE get desired fill byte 143 30F0 25 11 BCS FIL4 non-hex error 144 30F2 AE E4 LDX ,S get start address 145 30F4 A7 84 FIL1 STA ,X place byte 146 30F6 AC 62 CMPX 2,S reached end yet? 147 30F8 27 04 BEQ FIL2 yes 148 30FA 30 01 LEAX 1,X no,next location then 149 30FC 20 F6 BRA FIL1 continue filling 150 30FE 32 64 FIL2 LEAS 4,S finished with addresses 151 3100 1C FE ANDCC #$FE show no error in exit 152 3102 39 FIL3 RTS 153 3103 32 64 FIL4 LEAS 4,S finished with addresses 154 3105 39 RTS 155 * 156 * Go to users program 157 3106 17 01A9 GOTO LBSR GETAD get desired address 158 3109 25 04 BCS GOTO1 non hexadecimal error 159 310B AD 84 JSR ,X go to address 160 310D 1C FE ANDCC #$FE show no error on return 161 310F 39 GOTO1 RTS 162 * 163 * Byte examine and change of memory 164 3110 17 019F CHANGE LBSR GETAD get desired address 165 3113 25 43 BCS CHA7 non-hexadecimal error 166 3115 34 10 PSHS X save address 167 3117 17 01EA CHA1 LBSR PCRLF new line 168 311A 30 E4 LEAX ,S point to address 169 311C 17 01FB LBSR OUT4HS display it 170 311F AE E4 LDX ,S pick up address 171 3121 17 01F8 LBSR OUT2HS display contents 172 3124 17 01D4 LBSR GETCHR wait for a keyboard entry 173 3127 81 20 CMPA #SPACE is it a space? 174 3129 27 18 BEQ CHA2 yes,step to next location 175 312B 81 5E CMPA #UPARW is it an up arrow? 176 312D 27 1A BEQ CHA4 yes,step back to previous 177 312F 81 0D CMPA #CR is it an enter? 178 3131 27 28 BEQ CHA8 yes,end of memory change 179 3133 17 01AD LBSR INHEX2 check for hex char 180 3136 25 1E BCS CHA6 non-hexadecimal error 181 3138 17 0197 LBSR BYTE2 check for another hex char 182 313B 25 19 BCS CHA6 non-hexadecimal error 183 313D A7 1F STA -1,X put byte in location 184 313F A1 1F CMPA -1,X did it get there? 185 3141 26 0A BNE CHA5 no,display same loc 186 3143 12 CHA2 NOP yes 187 3144 12 NOP 188 3145 AF E4 CHA3 STX ,S save new address 189 3147 20 CE BRA CHA1 display it 190 3149 30 1E CHA4 LEAX -2,X go display previous 191 314B 20 F8 BRA CHA3 192 314D 30 8D FEFE CHA5 LEAX MWHAT,PCR memory won't change 193 3151 17 01B9 LBSR PDATA display error 194 3154 20 C1 BRA CHA1 show location again 195 3156 32 62 CHA6 LEAS 2,S don't need address 196 3158 1A 01 CHA7 ORCC #$01 show hexadecimal error 197 315A 39 RTS 198 315B 32 62 CHA8 LEAS 2,S don't need address 199 315D 1C FE ANDCC #$FE show no error 200 315F 39 RTS 201 * 202 * Display memory one opcode per line 203 3160 17 014F OPCODE LBSR GETAD get beginning address 204 3163 1025 0082 LBCS OPERR non-hexadecimal error 205 3167 32 7C LEAS -4,S save temporary on stack 206 3169 34 10 PSHS X save address 207 316B 86 10 OPAGN LDA #16 number of lines 208 316D A7 65 STA 5,S save it 209 316F 17 0192 NXT LBSR PCRLF new line 210 3172 30 E4 LEAX ,S point to address 211 3174 17 01A3 LBSR OUT4HS display it 212 3177 AE E4 LDX ,S get address 213 3179 A6 84 LDA ,X get opcode 214 317B A7 64 STA 4,S save opcode 215 317D 17 019C LBSR OUT2HS display opcode 216 3180 A6 64 LDA 4,S get opcode again 217 3182 84 F9 ANDA #$F9 mask two byters at 1X 218 3184 81 18 CMPA #$18 ORCC#,ANDCC#,EXG 219 3186 27 62 BEQ TWO show next byte operand 220 3188 A6 64 LDA 4,S pick up opcode 221 318A 84 BF ANDA #$BF get three byters 83,C3 222 318C 81 83 CMPA #$83 SUBD#,ADDD# 223 318E 27 5F BEQ THREE show next two bytes 224 3190 84 BD ANDA #$BD get three byters 8C,8E,CC,CE 225 3192 81 8C CMPA #$8C CMPX#,LDX#,LDD#,LDU# 226 3194 27 59 BEQ THREE show next two bytes 227 3196 A6 64 LDA 4,S pick up opcode 228 3198 81 1F CMPA #$1F TFR 229 319A 27 4E BEQ TWO show next byte operand 230 319C 81 3C CMPA #$3C CWAI opcode 231 319E 27 4A BEQ TWO show next byte operand 232 31A0 81 8D CMPA #$8D BSR opcode 233 31A2 27 5A BEQ BRN 1 byte offset plus dest 234 31A4 84 FE ANDA #$FE mask two byte offsets at 1X 235 31A6 81 16 CMPA #$16 LBRA,LBSR 236 31A8 27 4A BEQ LBRN 2 byte offset plus dest 237 31AA 81 10 CMPA #$10 10,11 group instructions 238 31AC 27 61 BEQ GROUP more work on pre-byters 239 31AE 84 FC ANDA #$FC mask indexed at 3X 240 31B0 81 30 CMPA #$30 LEAX,LEAY,LEAS,LEAU 241 31B2 27 7E BEQ INDEXD more work on indexed 242 31B4 81 34 CMPA #$34 PSHS,PULS,PSHU,PULU 243 31B6 27 32 BEQ TWO show next byte operand 244 31B8 84 F0 ANDA #$F0 mask one byte offset 245 31BA 81 20 CMPA #$20 2X branches 246 31BC 27 40 BEQ BRN offset plus destination 247 31BE 81 60 CMPA #$60 memory indexed addressing 248 31C0 27 70 BEQ INDEXD more work on indexed 249 31C2 81 70 CMPA #$70 memory extended addr 250 31C4 27 29 BEQ THREE show two byte operand 251 31C6 81 00 CMPA #$00 memory direct addressing 252 31C8 27 20 BEQ TWO show next byte operand 253 31CA 84 B0 ANDA #$B0 mask AX,EX 254 31CC 81 A0 CMPA #$A0 A or B acc,indexed 255 31CE 27 62 BEQ INDEXD more work on indexed 256 31D0 81 B0 CMPA #$B0 A or B acc,extended 257 31D2 27 1B BEQ THREE show two byte operand 258 31D4 84 80 ANDA #$80 A,B acc,direct or immed 259 31D6 2B 12 BMI TWO all above 80 left are 2 260 31D8 AF E4 ONE STX ,S all below are 1 byte 261 31DA 6A 65 NOSAVE DEC 5,S done 16 lines? 262 31DC 26 91 BNE NXT no,do next opcode 263 31DE 17 FE22 LBSR INPUT yes,wait for keyboard 264 31E1 81 0D CMPA #CR is it an enter? 265 31E3 26 86 BNE OPAGN no,do another 16 lines 266 31E5 32 66 LEAS 6,S finished with temporaries 267 31E7 1C FE ANDCC #$FE show no error exit 268 31E9 39 OPERR RTS 269 31EA 17 012F TWO LBSR OUT2HS one byte operand 270 31ED 20 E9 BRA ONE check no. of lines 271 31EF 17 0128 THREE LBSR OUT4HS 2 byte operand 272 31F2 20 E4 BRA ONE check no. of lines 273 * 274 * Relative addressing destination calculation 275 31F4 EC 84 LBRN LDD ,X pick up two byte offset 276 31F6 ED 62 STD 2,S save 277 31F8 17 011F LBSR OUT4HS display offset 278 31FB 12 NOP 279 31FC 20 57 BRA DESTIN display destination 280 31FE 6F 62 BRN CLR 2,S clear high byte 281 3200 A6 84 LDA ,X pick up one byte offset 282 3202 A7 63 STA 3,S save 283 3204 2A 04 BPL BRN1 check for sign extend 284 3206 86 FF LDA #-1 sign extend -ve offsets 285 3208 A7 62 STA 2,S set high byte 286 320A 17 010F BRN1 LBSR OUT2HS display offset 287 320D 20 46 BRA DESTIN display destination 288 * 289 * Instructions with 10 or 11 pre-byte 290 320F A6 84 GROUP LDA ,X pick up opcode 291 3211 34 02 PSHS A save opcode 292 3213 17 0106 LBSR OUT2HS print opcode 293 3216 35 02 PULS A retrieve opcode 294 3218 84 F0 ANDA #$F0 mask out low digit 295 321A 81 20 CMPA #$20 long branches 296 321C 27 D6 BEQ LBRN show offset & destin 297 321E 84 B0 ANDA #$B0 mask out 108X,10CX 298 3220 81 80 CMPA #$80 CMPR#,LDR# immediate 299 3222 27 CB BEQ THREE show 2 byte operand 300 3224 81 90 CMPA #$90 CMPR,LDR,STR direct 301 3226 27 C2 BEQ TWO show 1 byte operand 302 3228 81 A0 CMPA #$A0 CMPR,LDR,STR indexed 303 322A 27 06 BEQ INDEXD more work on indexed 304 322C 81 B0 CMPA #$B0 CMPR,LDR,STR extended 305 322E 27 BF BEQ THREE show 2 byte operand 306 3230 20 A6 BRA ONE unknowns give no operand 307 * 308 * Indexed addressing mode 309 3232 A6 84 INDEXD LDA ,X pick up post byte 310 3234 34 02 PSHS A save post byte 311 3236 17 00E3 LBSR OUT2HS display post byte 312 3239 35 02 PULS A retrieve post byte 313 323B 84 9F ANDA #$9F mask out 9F,BF,DF,FF 314 323D 81 9F CMPA #$9F extended indirect 315 323F 27 AE BEQ THREE show 2 byte operand 316 3241 84 8F ANDA #$8F mask out X8 above 88 317 3243 81 88 CMPA #$88 +-7 bit offset 318 3245 27 A3 BEQ TWO show 1 byte operand 319 3247 81 89 CMPA #$89 +-15 bit offset 320 3249 27 A4 BEQ THREE show 2 byte operand 321 324B 81 8C CMPA #$8C +-7 bit pc relative 322 324D 27 AF BEQ BRN show offset & destination 323 324F 81 8D CMPA #$8D +-15 bit pc relative 324 3251 27 A1 BEQ LBRN show offset & destination 325 3253 20 83 BRA ONE all left are 1 byte 326 * 327 * Calculate destination and display 328 3255 AF E4 DESTIN STX ,S save present memory pointer 329 3257 EC E4 LDD ,S pick up program counter 330 3259 E3 62 ADDD 2,S add offset 331 325B ED 62 STD 2,S save destination 332 325D 30 62 LEAX 2,S point to destination 333 325F 17 00B8 LBSR OUT4HS display it 334 3262 16 FF75 LBRA NOSAVE check no. of lines 335 * 336 * Shift colourmon to run elsewhere 337 3265 8D 4B SHIFT BSR GETAD get desired destination 338 3267 25 1F BCS SHIF3 non-hexadecimal error 339 3269 34 10 PSHS X save address for execution 340 326B 31 8D 00CC LEAY ENDMON,PCR get end of colourmon 341 326F 34 20 PSHS Y save source end 342 3271 31 8D FD8B LEAY START,PCR get start of colormon 343 3275 A6 A4 SHIF1 LDA ,Y pick up byte to move 344 3277 A7 84 STA ,X move it to new location 345 3279 A1 80 CMPA ,X+ did it get there 346 327B 26 09 BNE SHIF2 no,show memory error 347 327D 10AC E4 CMPY ,S finished yet? 348 3280 27 09 BEQ SHIF4 yes,go to new copy 349 3282 31 21 LEAY 1,Y no,step to next location 350 3284 20 EF BRA SHIF1 pick up byte 351 3286 32 64 SHIF2 LEAS 4,S finished with addresses 352 3288 1A 01 SHIF3 ORCC #$01 show error 353 328A 39 RTS 354 328B EC 68 SHIF4 LDD 8,S pick up original Y 355 328D ED 64 STD 4,S save 356 328F EC 62 LDD 2,S pick up new return addr 357 3291 ED 68 STD 8,S set up return addr 358 3293 AE 66 LDX 6,S pick up original X 359 3295 10AE 64 LDY 4,S pick up original Y 360 3298 32 68 LEAS 8,S finished with old stack 361 329A 39 RTS go to new colourmon 362 * 363 * Exit back to BASIC 364 329B 32 62 EXIT LEAS 2,S finished with command return 365 329D 35 B0 PULS X,Y,PC restore original registers 366 * 367 * Get beginning and end addresses 368 329F 8D 11 GETADD BSR GETAD get beginning address 369 32A1 25 0E BCS GADD1 non-hexadecimal error 370 32A3 1F 12 TFR X,Y save address in Y 371 32A5 30 8D FD90 LEAX MEND,PCR ask for end address 372 32A9 8D 55 BSR PSTRNG print request 373 32AB 8D 0E BSR BADDR get reply 374 32AD 25 02 BCS GADD1 non-hexadecimal error 375 32AF 1E 12 EXG X,Y begin in X and end in Y 376 32B1 39 GADD1 RTS 377 * 378 * Get beginning address 379 32B2 30 8D FD78 GETAD LEAX MBEG,PCR ask for beg address 380 32B6 8D 48 BSR PSTRNG print request 381 32B8 8D 01 BSR BADDR get reply 382 32BA 39 RTS 383 * 384 * Build address in X-reg 385 32BB 32 7E BADDR LEAS -2,S save room for address 386 32BD 8D 0F BSR BYTE get high byte 387 32BF 25 0A BCS BADD1 non-hexadecimal error 388 32C1 A7 E4 STA ,S save high byte 389 32C3 8D 09 BSR BYTE get low byte 390 32C5 25 04 BCS BADD1 non-hexadecimal error 391 32C7 A7 61 STA 1,S save low byte 392 32C9 35 90 PULS X,PC address into X reg 393 32CB 32 62 BADD1 LEAS 2,S finished with temporaries 394 32CD 39 RTS 395 * 396 * INPUT BYTE 397 32CE 8D 11 BYTE BSR INHEX get hexadecimal digit 398 32D0 25 0E BCS BYTE3 non-hexadecimal error 399 32D2 48 BYTE2 ASLA make digit high nibble 400 32D3 48 ASLA 401 32D4 48 ASLA 402 32D5 48 ASLA 403 32D6 1F 89 TFR A,B save in B accumulator 404 32D8 8D 07 BSR INHEX get another digit 405 32DA 25 04 BCS BYTE3 non-hexadecimal digit error 406 32DC 34 04 PSHS B save high nibble 407 32DE AB E0 ADDA ,S+ add low nibble 408 32E0 39 BYTE3 RTS 409 * 410 * Input hex digit to A accumulator 411 32E1 8D 18 INHEX BSR GETCHR wait for a keyboard char 412 32E3 80 30 INHEX2 SUBA #$30 code lower than 0 ? 413 32E5 25 11 BLO INH2 yes,show error 414 32E7 81 0A CMPA #$0A code lower than : ? 415 32E9 25 0A BLO INH1 yes,digit 0-9 is hex 416 32EB 81 11 CMPA #$11 is,code lower than A ? 417 32ED 25 09 BLO INH2 yes,show error 418 32EF 81 16 CMPA #$16 is code higher than F ? 419 32F1 22 05 BHI INH2 yes,show error 420 32F3 80 07 SUBA #$07 make A-F hex digit 421 32F5 1C FE INH1 ANDCC #$FE show no error 422 32F7 39 RTS 423 32F8 1A 01 INH2 ORCC #$01 non-hexadecimal error 424 32FA 39 RTS 425 * 426 * Input character and echo it 427 32FB 17 FD05 GETCHR LBSR INPUT wait for key pushed 428 32FE 20 38 BRA PUTCHR display key pushed 429 * 430 * Print a string of ASCII on a new line 431 3300 8D 02 PSTRNG BSR PCRLF new line 432 3302 20 09 BRA PDATA print data pointed by X 433 * 434 * New line 435 3304 34 02 PCRLF PSHS A save A 436 3306 86 0D LDA #CR get carriage return 437 3308 8D 2E BSR PUTCHR output it 438 330A 35 02 PULS A retrieve A 439 330C 39 RTS 440 * 441 * Print ASCII data pointed to by X 442 330D A6 84 PDATA LDA ,X pick up character 443 330F 81 04 CMPA #EOT is it end of transmission? 444 3311 27 06 BEQ PDATA2 yes,finished string 445 3313 8D 23 BSR PUTCHR no,output character 446 3315 30 01 LEAX 1,X point to next 447 3317 20 F4 BRA PDATA pick it up 448 3319 39 PDATA2 RTS 449 * 450 * Output hex word,bytes and nibbles 451 331A 8D 06 OUT4HS BSR OUT2H output 2 bytes 452 331C 8D 04 OUT2HS BSR OUT2H output 1 byte 453 331E 86 20 OUTS LDA #SPACE get space 454 3320 20 16 BRA PUTCHR output it 455 3322 A6 84 OUT2H LDA ,X pick up byte 456 3324 8D 04 BSR OUTHL display left hex digit 457 3326 A6 80 LDA ,X+ pick it up again 458 3328 20 04 BRA OUTHR display right hex digit 459 332A 44 OUTHL LSRA shift top digit down 460 332B 44 LSRA 461 332C 44 LSRA 462 332D 44 LSRA 463 332E 84 0F OUTHR ANDA #$0F remove top 4 bits 464 3330 8B 30 ADDA #$30 add to 0 465 3332 81 39 CMPA #$39 lower or same as 9 466 3334 23 02 BLS PUTCHR yes,we've got ASCII equiv 467 3336 8B 07 ADDA #$07 no,make A-F ASCII 468 3338 16 FCCB PUTCHR LBRA OUTPUT output digit 469 * 470 * End for shift command 471 333B ENDMON EQU * 472 END START 0 ERROR(S) DETECTED +++
Copyright © 2000 Alan Electron. All Rights Reserved.
Colourmon 1.2 Monitor Program for Coco I & II Issue 2, 26 May 2021
cmonlist.html Draft Page 1 of 1