Difference between revisions of "83Plus:Hooks:9B9C"
(clarified width condition, added fracdrawlfont condition, updated example code; note that B is not always equal to the character!) |
m (Clarify zero is the zero flag) |
||
Line 21: | Line 21: | ||
* '''A = 2''': The width of a small font character is requested. | * '''A = 2''': The width of a small font character is requested. | ||
* '''A = 3''': A large font bitmap is requested for variable-width display. The bitmap provided will be shifted left by 1 bit and copied to [[83Plus:RAM:845A|lFont_record]] ''plus 1'', so that (lFont_record) can be set to 6. | * '''A = 3''': A large font bitmap is requested for variable-width display. The bitmap provided will be shifted left by 1 bit and copied to [[83Plus:RAM:845A|lFont_record]] ''plus 1'', so that (lFont_record) can be set to 6. | ||
− | HL contains the font table offset, equal to the character multiplied by 8. In modes 1 and 3, B also contains the character. If you want to use the default characters (or rather, the bitmaps provided by the [[83Plus:Hooks:9BCC|localize hook]]), return with zero reset. If you do this, HL and B '''must''' be left intact. Otherwise, your outputs depend on the mode. | + | HL contains the font table offset, equal to the character multiplied by 8. In modes 1 and 3, B also contains the character. If you want to use the default characters (or rather, the bitmaps provided by the [[83Plus:Hooks:9BCC|localize hook]]), return with the zero flag reset. If you do this, HL and B '''must''' be left intact. Otherwise, your outputs depend on the mode. |
* In modes 0 and 1, set HL pointing to the font data, which must be in RAM. If you want to, you can copy data to [[83Plus:RAM:8462|sFont_record]] or [[83Plus:RAM:845A|lFont_record]], and then point HL to this location. Of course, you can use any location you want. | * In modes 0 and 1, set HL pointing to the font data, which must be in RAM. If you want to, you can copy data to [[83Plus:RAM:8462|sFont_record]] or [[83Plus:RAM:845A|lFont_record]], and then point HL to this location. Of course, you can use any location you want. | ||
* In mode 2, set B to the width of the character. | * In mode 2, set B to the width of the character. |
Latest revision as of 11:12, 5 September 2023
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 to request information about a particular character. The accumulator indicates the type of information:
- A = 0: A small font bitmap is requested.
- A = 1: A large font bitmap is requested for fixed-width display.
- A = 2: The width of a small font character is requested.
- A = 3: A large font bitmap is requested for variable-width display. The bitmap provided will be shifted left by 1 bit and copied to lFont_record plus 1, so that (lFont_record) can be set to 6.
HL contains the font table offset, equal to the character multiplied by 8. In modes 1 and 3, B also contains the character. If you want to use the default characters (or rather, the bitmaps provided by the localize hook), return with the zero flag reset. If you do this, HL and B must be left intact. Otherwise, your outputs depend on the mode.
- In modes 0 and 1, set HL pointing to the font data, which must be in RAM. If you want to, you can copy data to sFont_record or lFont_record, and then point HL to this location. Of course, you can use any location you want.
- In mode 2, set B to the width of the character.
- In mode 3, set HL pointing to the font data as in mode 1, but note that in this case it must not be located at lFont_record, but at lFontRecord+1, or else an entirely different area.
Character bitmap formats
In small font (mode 0):
(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 (modes 1 and 3):
(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 ld c,a ld a,h ; what character is to be displayed? or l rrca rrca rrca cp 'A' ret nz ld a,c or a ; check hook mode jr z,SmallFontMode cp 2 jr z,WidthMode ld hl,BigA ; get our replacement bitmap ld de,lFont_record+1 ld bc,7 ; copy it into RAM ldir ld hl,lFont_record+1 cp a ret SmallFontMode: 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 WidthMode: ld b,5 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