83Plus:Hooks:9B9C

From WikiTI
Revision as of 08:07, 6 April 2005 by 83.118.75.45 (Talk)

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

This hook is called when a character is about to be displayed. A = 0 for small font, 1 for large font, 2 for small font width. B contains the character. If you want to use the default characters (or rather, the bitmaps provided by the localize hook), return with zero reset. If you do this, HL must be left intact. Otherwise, set HL pointing to the font data, which must be in RAM. If you want to, you can copy data to sFont_record and lFont_record, and then point HL to this location. Of course, you can use any location you want.

  • In small font:
(HL) = width of character
(HL+1) = first (accent) row, right aligned (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

See the example code for actual formatted data.

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