1 2ATTR_UNDERLINE = $04 3ATTR_BOLD = $06 4ATTR_ITALICS = $0B 5ATTR_OUTLINE = $0C 6ATTR_RESET = $92 7 8COLOR_BLACK = $90 9COLOR_RED = $1C 10COLOR_GREEN = $1E 11COLOR_BLUE = $1F 12 13test: 14 beq test0 15 jsr getbyt 16 txa 17 beq test0 18 cmp #1 19 bne :+ 20 jmp test1 21: cmp #2 22 bne :+ 23 jmp test2 24: cmp #3 25 bne :+ 26 jmp test3 27: jmp fcerr 28 29test0: 30 lda #$80 31 sec 32 jsr screen_set_mode 33 jsr test1_hline 34 jsr test2_vline 35 jsr test3_bresenham 36 jsr test4_set_get_pixels 37 jsr test5_filter_pixels 38 jsr test6_frame 39 jsr test7_rect 40 jsr test8_varlen_hline 41 jsr test9_varlen_vline 42 jsr test10_put_char 43 jsr test11_char_size 44 jsr test12_char_styles 45 jsr test13_move_rect 46 jsr test14_image 47 jsr checksum_framebuffer 48 rts 49 50test1_hline: 51 ; horizontal line 52 lda #0 53 jsr GRAPH_set_colors 54 LoadW r0, 1 55 LoadW r1, 2 56 LoadW r2, 318 57 LoadW r3, 2 58 lda #0 ; set 59 jsr GRAPH_draw_line 60 61 ; horizontal line - reversed 62 lda #2 63 jsr GRAPH_set_colors 64 LoadW r0, 318 65 LoadW r1, 4 66 LoadW r2, 1 67 LoadW r3, 4 68 lda #0 ; set 69 jmp GRAPH_draw_line 70 71test2_vline: 72 ; vertical line 73 lda #3 74 jsr GRAPH_set_colors 75 LoadW r0, 1 76 LoadW r1, 6 77 LoadW r2, 1 78 LoadW r3, 198 79 lda #0 ; set 80 jsr GRAPH_draw_line 81 82 ; vertical line - reversed 83 lda #4 84 jsr GRAPH_set_colors 85 LoadW r0, 3 86 LoadW r1, 198 87 LoadW r2, 3 88 LoadW r3, 6 89 lda #0 ; set 90 jmp GRAPH_draw_line 91 92test3_bresenham: 93 ; Bresenham line TL->BR 94 lda #5 95 jsr GRAPH_set_colors 96 LoadW r0, 5 97 LoadW r1, 7 98 LoadW r2, 10 99 LoadW r3, 9 100 lda #0 ; set 101 jsr GRAPH_draw_line 102 103 ; Bresenham line BL->TR 104 lda #6 105 jsr GRAPH_set_colors 106 LoadW r0, 5 107 LoadW r1, 13 108 LoadW r2, 10 109 LoadW r3, 11 110 lda #0 ; set 111 jsr GRAPH_draw_line 112 113 ; Bresenham line BR->TL 114 lda #7 115 jsr GRAPH_set_colors 116 LoadW r0, 10 117 LoadW r1, 17 118 LoadW r2, 5 119 LoadW r3, 15 120 lda #0 ; set 121 jsr GRAPH_draw_line 122 123 ; Bresenham line TR->BL 124 lda #8 125 jsr GRAPH_set_colors 126 LoadW r0, 10 127 LoadW r1, 19 128 LoadW r2, 5 129 LoadW r3, 21 130 lda #0 ; set 131 jmp GRAPH_draw_line 132 133test4_set_get_pixels: 134 ; set direct pixels 135 LoadW r0, 5 136 LoadW r1, 23 137 jsr FB_cursor_position 138 ldx #0 139: phx 140 txa 141 jsr FB_set_pixel 142 plx 143 inx 144 bne :- 145 146 ; get direct pixels 147 LoadW r0, 5 148 LoadW r1, 23 149 jsr FB_cursor_position 150 LoadB r1H, 1; "OK" 151 ldx #0 152: phx 153 jsr FB_get_pixel 154 plx 155 sta r0L 156 cpx r0L 157 beq @1 158 stz r1H ; "BAD" 159@1: inx 160 bne :- 161 162 ; print result of comparison 163 lda r1H 164 bne @2 165 LoadW 0, str_BAD 166 bra @3 167@2: LoadW 0, str_OK 168@3: lda #9 169 jsr GRAPH_set_colors 170 LoadW r0, 263 171 LoadW r1, 22 172 jmp print_string 173 174test5_filter_pixels: 175 ; set direct pixels 176 LoadW r0, 5 177 LoadW r1, 25 178 jsr FB_cursor_position 179 ldx #0 180: phx 181 txa 182 jsr FB_set_pixel 183 plx 184 inx 185 bne :- 186 187 ; filter pixels 188 LoadW r0, 5 189 LoadW r1, 25 190 jsr FB_cursor_position 191 LoadW $70, $49 ; EOR # 192 LoadW $71, $55 ; $55 193 LoadW $72, $60 ; RTS 194 LoadW r0, 256 195 LoadW r1, $70 196 jsr FB_filter_pixels 197 198 ; check filter result using direct read 199 LoadW r0, 5 200 LoadW r1, 25 201 jsr FB_cursor_position 202 LoadB r1H, 1; "OK" 203 ldx #0 204: phx 205 jsr FB_get_pixel 206 plx 207 eor #$55 208 sta r0L 209 cpx r0L 210 beq @4 211 stz r1H ; "BAD" 212@4: inx 213 bne :- 214 215 ; print result of comparison 216 lda r1H 217 bne @2a 218 LoadW 0, str_BAD 219 bra @3a 220@2a: LoadW 0, str_OK 221@3a: lda #10 222 jsr GRAPH_set_colors 223 LoadW r0, 263 224 LoadW r1, 32 225 jmp print_string 226 227test6_frame: 228 ; frame frame 229 lda #11 230 jsr GRAPH_set_colors 231 LoadW r0, 100 232 LoadW r1, 20 233 LoadW r2, 10 234 LoadW r3, 10 235 clc 236 jmp GRAPH_draw_rect 237 238test7_rect: 239 ; rectangle frame 240 lda #11 241 ldx #5 242 jsr GRAPH_set_colors 243 LoadW r0, 111 244 LoadW r1, 20 245 LoadW r2, 10 246 LoadW r3, 10 247 sec 248 jmp GRAPH_draw_rect 249 250test8_varlen_hline: 251 lda #15 252 jsr GRAPH_set_colors 253 LoadW r0, 5 254 LoadW r1, 41 255 LoadW r2, 5 256 LoadW r3, 41 257: lda #0 ; set 258 jsr GRAPH_draw_line 259 IncW r1 ; y++ 260 IncW r3 ; y++ 261 lda r2L 262 clc 263 adc #11 264 sta r2L 265 lda r2H 266 adc #0 267 sta r2H 268 cmp #>318 269 bcc :- 270 lda r2L 271 cmp #<318 272 bcc :- 273 rts 274 275test9_varlen_vline: 276 lda #0 277 jsr GRAPH_set_colors 278 LoadW r0, 5 279 LoadW r1, 71 280 LoadW r2, 5 281 LoadW r3, 71 282: lda #0 ; set 283 jsr GRAPH_draw_line 284 IncW r0 ; x++ 285 IncW r2 ; x++ 286 lda r3L 287 clc 288 adc #11 289 sta r3L 290 lda r3H 291 adc #0 292 sta r3H 293 cmp #>198 294 bcc :- 295 lda r3L 296 cmp #<198 297 bcc :- 298 rts 299 300test10_put_char: 301 lda #2 302 jsr GRAPH_set_colors 303 304 LoadW r0, 25 305 LoadW r1, 80 306 LoadW r2, 255 307 LoadW r3, 15 308 jsr GRAPH_set_window 309 clc 310 jsr GRAPH_draw_rect 311 312 AddVW 5, r1 ; add baseline -2 313 314 lda #$20 315: jsr GRAPH_set_colors 316 pha 317 jsr GRAPH_put_char 318 pla 319 bcc @1 320 pha 321 lda #10 ; LF 322 jsr GRAPH_put_char 323 pla 324 dec 325@1: inc 326 cmp #$7f 327 bne :- 328 rts 329 330test11_char_size: 331 LoadW r0, 25 332 LoadW r1, 100 333 LoadW r2, 255 334 LoadW r3, 20 335 jsr GRAPH_set_window 336 clc 337 jsr GRAPH_draw_rect 338 339 AddVW 7, r1 ; add baseline 340 341 lda #$20 342: tax 343 jsr GRAPH_set_colors 344 345 ; draw bounding box 346 pha 347 tax 348 PushW r0 349 PushW r1 350 txa 351 ldx #0; mode 352 jsr GRAPH_get_char_size 353 sta 0 ; baseline 354 PopW r1 355 PopW r0 356 357 PushW r1 358 ; y -= baseline 359 lda r1L 360 sec 361 sbc 0; baseline 362 sta r1L 363 lda r1H 364 sbc #0 365 sta r1H 366 367 stx r2L 368 stz r2H 369 370 sty r3L 371 stz r3H 372 373 sec 374 jsr GRAPH_draw_rect 375 PopW r1 376 377 lda #0 378 jsr GRAPH_set_colors 379 380 pla 381 pha 382 jsr GRAPH_put_char 383 pla 384 bcc @1 385 pha 386 lda #10 ; LF 387 jsr GRAPH_put_char 388 pla 389 dec 390@1: inc 391 cmp #$7f 392 beq :+ 393 jmp :- 394: rts 395 396test12_char_styles: 397 lda #0 398 ldx #4 399 jsr GRAPH_set_colors 400 401 LoadW r0, 20 402 LoadW r1, 125 403 LoadW r2, 295 404 LoadW r3, 74 405 jsr GRAPH_set_window 406 clc 407 jsr GRAPH_draw_rect 408 409 AddVW 7, r1 ; add baseline 410 411 ldy #0 412 413@loop: phy 414 lda #$92 ; attributes off 415 jsr GRAPH_put_char 416 ply 417 phy 418 tya 419 ldx #0 420@2: lsr 421 bcc @1 422 pha 423 lda style_codes,x 424 phx 425 jsr GRAPH_put_char 426 plx 427 pla 428@1: inx 429 cpx #5 430 bne @2 431 LoadW 0, test_string 432 jsr print_string 433 ply 434 iny 435 cpy #32 436 bne @loop 437 438 lda #$92 ; attributes off 439 jmp GRAPH_put_char 440 441test_string: 442 .byte "abcABC123", 0 443 444style_codes: 445 .byte $04 ; underline 446 .byte $06 ; bold 447 .byte $0b ; italics 448 .byte $0c ; outline 449 .byte $12 ; reverse 450 451test13_move_rect: 452 LoadW r0, 100 453 LoadW r1, 100 454 LoadW r2, 320-40 455 LoadW r3, 10 456 LoadW r4, 40 457 LoadW r5, 50 458 jsr GRAPH_move_rect 459 460 LoadW r0, 320-40 461 LoadW r1, 10 462 LoadW r2, 320-40 463 LoadW r3, 35 464 LoadW r4, 40 465 LoadW r5, 50 466 jmp GRAPH_move_rect 467 468test14_image: 469 ldx #0 470: lda logo_image,x 471 sta $0400,x 472 inx 473 bne :- 474 475 LoadW r0, 50 476 LoadW r1, 6 477 LoadW r2, $0400 478 LoadW r3, 16 479 LoadW r4, 16 480 481 ldx #10 482: phx 483 jsr GRAPH_draw_image 484 AddVW 20, r0 485 plx 486 dex 487 bne :- 488 rts 489 490checksum_framebuffer: 491 lda #$ff 492 sta crclo 493 sta crchi 494 495 ldx #0 496@loop: LoadW r0, 0 497 stx r1L 498 stz r1H 499 phx 500 jsr FB_cursor_position 501 502 ldx #>320 503 ldy #<320 504@loop2: phy 505 phx 506 jsr FB_get_pixel 507 jsr crc16_f 508 plx 509 ply 510 dey 511 bne @loop2 512 dex 513 bpl @loop2 514 515 plx 516 inx 517 cpx #200 518 bne @loop 519 520 lda #0 521 tax 522 jsr GRAPH_set_colors 523 524 LoadW r0, 295 525 LoadW r1, 190 526 LoadW r2, 24 527 LoadW r3, 9 528 jsr GRAPH_set_window 529 sec 530 jsr GRAPH_draw_rect 531 532 AddVW 7, r1 ; add baseline 533 534 lda #1 535 jsr GRAPH_set_colors 536 537 lda crchi 538 lsr 539 lsr 540 lsr 541 lsr 542 tax 543 lda hextab,x 544 jsr GRAPH_put_char 545 546 lda crchi 547 and #15 548 tax 549 lda hextab,x 550 jsr GRAPH_put_char 551 552 lda crclo 553 lsr 554 lsr 555 lsr 556 lsr 557 tax 558 lda hextab,x 559 jsr GRAPH_put_char 560 561 lda crclo 562 and #15 563 tax 564 lda hextab,x 565 jsr GRAPH_put_char 566 567 rts 568 569hextab: 570 .byte "0123456789ABCDEF" 571 572; http://www.6502.org/source/integers/crc-more.html 573crclo =0 ; current value of CRC 574crchi =1 ; not necessarily contiguous 575 576crc16_f: 577 eor crchi ; A contained the data 578 sta crchi ; XOR it into high byte 579 lsr ; right shift A 4 bits 580 lsr ; to make top of x^12 term 581 lsr ; ($1...) 582 lsr 583 tax ; save it 584 asl ; then make top of x^5 term 585 eor crclo ; and XOR that with low byte 586 sta crclo ; and save 587 txa ; restore partial term 588 eor crchi ; and update high byte 589 sta crchi ; and save 590 asl ; left shift three 591 asl ; the rest of the terms 592 asl ; have feedback from x^12 593 tax ; save bottom of x^12 594 asl ; left shift two more 595 asl ; watch the carry flag 596 eor crchi ; bottom of x^5 ($..2.) 597 tay ; save high byte 598 txa ; fetch temp value 599 rol ; bottom of x^12, middle of x^5! 600 eor crclo ; finally update low byte 601 sta crchi ; then swap high and low bytes 602 sty crclo 603 rts 604 605 606 607print_string: 608 ldy #0 609: lda (0),y 610 beq :+ 611 phy 612 jsr GRAPH_put_char 613 614 bcc @1 615 lda #10 ; LF 616 jsr GRAPH_put_char 617 ply 618 bra :- 619@1: 620 ply 621 iny 622 bne :- 623: rts 624 625str_OK: 626 .byte "OK", 0 627str_BAD: 628 .byte "BAD", 0 629 630 631; print text, alternating char/word wrap 632; full screen 633test1: 634 lda #$80 635 jsr screen_set_mode 636 637 LoadW r0, 0 638 jsr GRAPH_init 639 640 LoadW r0, 0 641 LoadW r1, 0 642 LoadW r2, 0 643 LoadW r3, 0 644 jsr console_init 645 646 jsr set_pause_text 647 648: clc ; char wrap 649 jsr print_lots_of_text 650 sec ; word wrap 651 jsr print_lots_of_text 652 bra :- 653 654; print text, alternating char/word wrap 655; window 656test2: 657 lda #$80 658 jsr screen_set_mode 659 660 LoadW r0, 0 661 jsr GRAPH_init 662 663 LoadW r0, 0 664 LoadW r1, 0 665 LoadW r2, 319 666 LoadW r3, 0 667: lda r1L 668 jsr GRAPH_set_colors 669 jsr GRAPH_draw_line 670 IncW r1 671 IncW r3 672 CmpWI r1, 200 673 bne :- 674 675 lda #0 676 ldx #15 677 ldy #1 678 jsr GRAPH_set_colors 679 680 INSET=20 681 LoadW r0, INSET 682 LoadW r1, INSET 683 LoadW r2, 320-2*INSET 684 LoadW r3, 200-2*INSET 685 jsr console_init 686 687 jsr set_pause_text 688 689: clc ; char wrap 690 jsr print_lots_of_text 691 sec ; word wrap 692 jsr print_lots_of_text 693 bra :- 694 695set_pause_text: 696 ldx #0 697: lda pause_text,x 698 sta $0500,x 699 beq :+ 700 inx 701 bne :- 702: 703 LoadW r0, $0500 704 jmp console_set_paging_message 705 706pause_text: 707 .byte $92,$9B,$01,$90,$12,"Press any key to continue.",0 708 709tmp = 0 710print_lots_of_text: 711 LoadW tmp, text 712 jmp print_text 713 714print_text: 715 php 716@loop: lda (tmp) 717 beq @end 718 cmp #CODE_LOGO 719 bne @1 720 jsr draw_logo 721 bra @9 722@1: cmp #CODE_SMILEY 723 bne @2 724 jsr draw_smiley 725 bra @9 726@2: 727 plp 728 php 729 jsr console_put_char 730 731@9: inc tmp 732 bne @loop 733 inc tmp+1 734 bra @loop 735@end plp 736 rts 737 738CODE_LOGO = $fe 739CODE_SMILEY = $ff 740text: 741 .byte ATTR_RESET,COLOR_BLACK 742 .byte "Space " 743 .byte ATTR_UNDERLINE 744 .byte "is" 745 .byte ATTR_RESET,ATTR_BOLD 746 .byte "big. " 747 .byte ATTR_RESET,ATTR_ITALICS 748 .byte "Really " 749 .byte ATTR_RESET,ATTR_OUTLINE 750 .byte "big. " 751 .byte ATTR_RESET,COLOR_RED 752 .byte "You " 753 .byte ATTR_UNDERLINE 754 .byte "just " 755 .byte ATTR_RESET,ATTR_BOLD 756 .byte "won't " 757 .byte ATTR_RESET,ATTR_ITALICS 758 .byte "believe " 759 .byte ATTR_RESET,ATTR_OUTLINE 760 .byte "how " 761 .byte ATTR_RESET,COLOR_GREEN 762 .byte "vastly, " 763 .byte ATTR_UNDERLINE 764 .byte "hugely," 765 .byte ATTR_RESET 766 .byte " " 767 .byte CODE_LOGO 768 .byte ATTR_BOLD 769 .byte "mindbogglingly " 770 .byte ATTR_RESET,ATTR_ITALICS 771 .byte "big " 772 .byte ATTR_RESET,ATTR_OUTLINE 773 .byte "it " 774 .byte ATTR_RESET,COLOR_BLUE 775 .byte "is. " 776 .byte CODE_SMILEY 777 .byte 0 778 779draw_smiley: 780 ldx #smiley_image_end-smiley_image-1 781: lda smiley_image,x 782 sta $0400,x 783 dex 784 bpl :- 785 786 LoadW r0, $0400 787 LoadW r1, 10 788 LoadW r2, 10 789 jmp console_put_image 790 791draw_logo: 792 ldx #0 793: lda logo_image,x 794 sta $0400,x 795 inx 796 bne :- 797 798 LoadW r0, $0400 799 LoadW r1, 16 800 LoadW r2, 16 801 jmp console_put_image 802 803; input line, echo it, loop 804test3: 805 lda #$80 806 jsr screen_set_mode 807 808 LoadW r0, 0 809 LoadW r1, 0 810 LoadW r2, 0 811 LoadW r3, 0 812 jsr console_init 813 814: jsr console_get_char 815 sec 816 jsr console_put_char 817 jmp :- 818 819smiley_image: 820 .byte $1f,$1f,$42,$49,$49,$49,$49,$42,$1f,$1f,$1f,$49,$42,$42,$42,$42 821 .byte $42,$42,$42,$1f,$42,$49,$07,$07,$42,$42,$07,$07,$49,$42,$08,$14 822 .byte $5c,$3f,$46,$46,$3f,$3f,$3d,$08,$57,$12,$13,$13,$4c,$4c,$13,$13 823 .byte $12,$57,$57,$56,$45,$45,$50,$50,$45,$4c,$56,$57,$50,$50,$50,$50 824 .byte $50,$50,$50,$50,$50,$08,$42,$57,$50,$4f,$54,$54,$4f,$50,$57,$42 825 .byte $1f,$49,$57,$57,$57,$57,$57,$57,$49,$1f,$1f,$1f,$42,$08,$56,$56 826 .byte $08,$42,$1f,$1f 827smiley_image_end: 828 829logo_image: 830 .byte $14,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$91 831 .byte $cb,$16,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$ca,$e8 832 .byte $ae,$b1,$af,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$ae,$b0,$af 833 .byte $91,$b8,$b8,$b6,$91,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$b6,$b8,$b8,$91 834 .byte $c9,$b7,$b9,$b9,$b8,$91,$c9,$c9,$c9,$c9,$c9,$b7,$b9,$b9,$b8,$c9 835 .byte $c9,$92,$9d,$9d,$9d,$9c,$ae,$c9,$c9,$b5,$b8,$9d,$9d,$9d,$9b,$c9 836 .byte $c9,$91,$9c,$95,$9d,$9d,$9d,$ae,$c9,$9c,$9d,$9d,$95,$95,$b6,$c9 837 .byte $c9,$c9,$91,$ae,$92,$9b,$9c,$9a,$91,$9c,$9b,$9a,$ae,$b5,$c9,$c9 838 .byte $c9,$c9,$c9,$c9,$c9,$91,$80,$99,$91,$80,$99,$c9,$c9,$c9,$c9,$c9 839 .byte $c9,$c9,$c9,$c9,$5a,$63,$64,$5a,$91,$64,$63,$3e,$91,$c9,$c9,$c9 840 .byte $c9,$c9,$3e,$48,$48,$48,$48,$15,$c9,$47,$48,$48,$48,$46,$c9,$c9 841 .byte $c9,$c9,$47,$49,$49,$48,$14,$c9,$c9,$91,$48,$49,$49,$48,$c9,$c9 842 .byte $c9,$c9,$08,$50,$08,$15,$c9,$c9,$c9,$c9,$14,$47,$50,$50,$14,$c9 843 .byte $c9,$e5,$08,$2c,$e5,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$2b,$2d,$22,$c9 844 .byte $c9,$e5,$2b,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$2a,$2a,$c9 845 .byte $c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9,$c9 846