83Plus:Hooks:9B9C

From WikiTI
Revision as of 22:13, 29 March 2005 by FloppusMaximus (Talk | contribs)

Jump to: navigation, search

Synopsis

Name: Font Hook

Hook Pointer Block Address: 9B9C

Hook Enable BCALL: 4FE4

Hook Disable BCALL: 4FE7

Hook Call BCALL: 4003

Hook Active Flag: 5, (iy + 35h)

This hook allows you to change the font bitmaps; for example, it is used for Omnicalc's custom fonts.

Using the Hook

  • A = 0 for small font, 1 for large font
  • B = character
  • NZ to use the default bitmaps (or rather, the bitmaps provided by the localize hook)
  • Otherwise, set HL pointing to the font data, which must be in RAM:
    • In small font:
      • (HL) = width of character
      • (HL+1) = first (accent) row, right aligned (with the last pixel usually clear)
      • (HL+2) = second row
      • ...
      • (HL+6) = sixth row
      • (HL+7) = seventh row (only displayed with bit textEraseBelow, (iy+textFlags) set)
    • In large font:
      • (HL) = first row, right aligned
      • ...
      • (HL+6) = seventh row

Comments

This hook is one of the four "official" hooks defined in ti83plus.inc.

Example

The following code displays the letter A in boldface:

FontHook:
        .db 83h             ; Required for all hooks
        or a                ; is it small or large font?
        jr z,SmallFont
        ld a,b              ; what character is to be displayed?
        cp 'A'
        ret nz
        ld hl,BigA          ; get our replacement bitmap
        ld de,lFont_record
        ld bc,7             ; copy it into RAM
        ldir
        ld hl,lFont_record
        cp a
        ret
SmallFont:
        ld a,b              ; what character is to be displayed?
        cp 'A'
        ret nz
        ld hl,SmallA        ; get our replacement bitmap
        ld de,sFont_record
        ld bc,8             ; copy it into RAM
        ldir
        ld hl,sFont_record
        cp a
        ret
BigA:
        .db 00001110b
        .db 00010011b
        .db 00010011b
        .db 00011111b
        .db 00010011b
        .db 00010011b
        .db 00010011b
SmallA:
        .db 5
        .db 00000000b
        .db 00001100b
        .db 00010110b
        .db 00011110b
        .db 00010110b
        .db 00010110b
        .db 00000000b