kthacker | 62e146c | 2006-04-17 15:11:35 +0000 | [diff] [blame] | 1 | ;; Hires: |
| 2 | ;; |
| 3 | ;; Mode 0, 40 columns. Each character is 4 pixels wide and 8 pixels tall. |
| 4 | ;; Each character is two bytes wide and 8 lines tall. |
| 5 | ;; |
| 6 | ;; The graphics for each character is a bitmap defined using |
| 7 | ;; pen 0 and pen 15. |
| 8 | ;; |
| 9 | ;; The bitmap is processed at runtime to convert the font to the |
| 10 | ;; appropiate pixel colours. |
| 11 | .area _CODE |
| 12 | ;; This table converts between pen index (0-15) and pixel bitmap. |
| 13 | .pen_table |
| 14 | defb #00 ;; pen 0 (%00000000) |
| 15 | defb #c0 ;; pen 1 (%11000000) |
| 16 | defb #0c ;; pen 2 (%00001100) |
| 17 | defb #cc ;; pen 3 (%11001100) |
| 18 | defb #30 ;; pen 4 (%00110000) |
| 19 | defb #f0 ;; pen 5 (%11110000) |
| 20 | defb #3c ;; pen 6 (%00111100) |
| 21 | defb #fc ;; pen 7 (%11111100) |
| 22 | defb #03 ;; pen 8 (%00000011) |
| 23 | defb #c3 ;; pen 9 (%11000011) |
| 24 | defb #0f ;; pen 10 (%00001111) |
| 25 | defb #cf ;; pen 11 (%11001111) |
| 26 | defb #33 ;; pen 12 (%00110011) |
| 27 | defb #f3 ;; pen 13 (%11110011) |
| 28 | defb #3f ;; pen 14 (%00111111) |
| 29 | defb #ff ;; pen 15 (%11111111) |
| 30 | |
| 31 | ;; A = pen |
| 32 | .get_pen_mask |
| 33 | ld hl,pen_table |
| 34 | add a,l |
| 35 | ld l,a |
| 36 | ld a,h |
| 37 | adc a,0 |
| 38 | ld h,a |
| 39 | ld a,(hl) |
| 40 | ret |
| 41 | |
| 42 | .set_pen |
| 43 | call get_pen_mask |
| 44 | ld (pen_mask+1),a |
| 45 | ld (pen_mask2+1),a |
| 46 | ret |
| 47 | |
| 48 | .set_paper |
| 49 | call get_pen_mask |
| 50 | ld (paper_mask+1),a |
| 51 | ld (paper_mask2+1),a |
| 52 | ret |
| 53 | |
| 54 | ;; enter: |
| 55 | ;; HL = current memory address |
| 56 | ;; exit: |
| 57 | ;; HL = memory address of byte immediatly below |
| 58 | ;; AF corrupt. |
| 59 | .scr_next_line |
| 60 | ld a,h |
| 61 | add a,8 |
| 62 | ld h,a |
| 63 | ret nc |
| 64 | ld a,l |
| 65 | add a,&50 |
| 66 | ld l,a |
| 67 | ld a,h |
| 68 | adc a,&c0 |
| 69 | ld h,a |
| 70 | ret |
| 71 | |
| 72 | ;; enter: |
| 73 | ;; HL = screen address |
| 74 | ;; DE = character pixel graphics |
| 75 | ;; exit: |
| 76 | ;; AF, BC, HL, DE corrupt |
| 77 | .plot_char |
| 78 | ld b,8 |
| 79 | .pc1 |
| 80 | ld a,(de) ;; convert 'on' pixels |
| 81 | .pen_mask and 1 |
| 82 | ld c,a |
| 83 | ld a,(de) |
| 84 | cpl |
| 85 | .paper_mask and 1 |
| 86 | or c |
| 87 | ld (hl),a |
| 88 | inc l |
| 89 | ld a,(de) |
| 90 | .pen_mask2 and 1 |
| 91 | ld c,a |
| 92 | ld a,(de) |
| 93 | cpl |
| 94 | .paper_mask2 and 1 |
| 95 | or c |
| 96 | ld (hl),a |
| 97 | dec l |
| 98 | call scr_next_line |
| 99 | djnz pc1 |
| 100 | ret |
| 101 | |