Difference between revisions of "83Plus:Hooks:9B9C"

From WikiTI
Jump to: navigation, search
 
m (Clarify zero is the zero flag)
 
(10 intermediate revisions by 5 users not shown)
Line 1: Line 1:
'''Note:''' Do not take the information on this template page as actual documentation!
+
[[Category:83Plus:Hooks:By_Name|Font Hook]] [[Category:83Plus:Hooks:By_Address|9B9C - Font Hook]]
 +
== Synopsis ==
 +
'''Name:''' Font Hook
  
The Hooks are named by their hook pointer block address (the four bytes consisting of page, address, and an extra byte), in hexadecimal. An example is [[83Plus:Hooks:9B84]].
+
'''Hook Pointer Block Address:''' [[83Plus:RAM:9B9C|9B9C]]
  
----
+
'''Hook Enable BCALL:''' [[83Plus:BCALLs:4FE4|4FE4]]
  
== Synopsis ==
+
'''Hook Disable BCALL:''' [[83Plus:BCALLs:4FE7|4FE7]]
'''Name:''' ImAHook
+
  
'''Hook Pointer Block Address:''' [[83Plus:RAM:8562|8562]]
+
'''Hook Call BCALL:''' [[83Plus:BCALLs:4003|4003]]
  
'''Hook Enable BCALL:''' [[83Plus:BCALLs:1234|1234]]
+
'''Hook Active Flag:''' [[83Plus:Flags:35#Bit_5|5, (iy + 35h)]]
  
'''Hook Disable BCALL:''' [[83Plus:BCALLs:5678|5678]]
+
This hook allows you to change the font bitmaps; for example, it is used for [http://www.detachedsolutions.com/omnicalc/ Omnicalc]'s custom fonts.
  
'''Hook Call BCALL:''' [[83Plus:BCALLs:9012|9012]]
+
== 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 [[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 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 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.
  
'''Hook Active Flag:''' 6, (iy + 23h)
+
=== Character bitmap formats ===
 +
In small font (mode 0):
 +
<nowiki>(HL) = width of character
 +
(HL+1) = first (accent) row, right aligned (the last pixel usually clear)
 +
(HL+2) = second row
 +
...
 +
(HL+6) = sixth row</nowiki>
 +
(HL+7) = seventh row (only displayed with bit [[83Plus:Flags:05#Bit_1|textEraseBelow, (iy+textFlags)]] set)
  
This hook allows you to change the values that [[83Plus:BCALLs:4972|GetKey]] returns.
+
In large font (modes 1 and 3):
 +
<nowiki>(HL) = first row, right aligned
 +
...
 +
(HL+6) = seventh row</nowiki>
  
== Using the Hook ==
+
See the example code for actual formatted data.
These different values, passed in a, determines what the hook should do.
+
* 1: The calculator just turned on. There seem to be no other values passed to the hook.
+
* 2: The calculator is computing 1+1.
+
** b: 1
+
** c: 1
+
** Change b and/or c to affect the output of the problem (which will still look like 1+1 to the user).
+
* 3: Preparing to turn off due to 2nd+OFF.
+
** Zero flag: Clear to abort the power off.
+
  
 
== Comments ==
 
== Comments ==
This hook doesn't exist. This is a demonstration only.
+
This hook is one of the four "official" hooks defined in ti83plus.inc.
 +
 
 +
== Example ==
 +
The following code displays the letter A in boldface:
  
== Credits and Contributions ==
+
FontHook:
* '''/dev/hda1:''' My favorite hard drive partition.
+
        .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,[[83Plus:RAM:845A|lFont_record]]+1
 +
        ld bc,7            ; copy it into RAM
 +
        ldir
 +
        ld hl,[[83Plus:RAM:845A|lFont_record]]+1
 +
        cp a
 +
        ret
 +
SmallFontMode:
 +
        ld hl,SmallA        ; get our replacement bitmap
 +
        ld de,[[83Plus:RAM:8462|sFont_record]]
 +
        ld bc,8            ; copy it into RAM
 +
        ldir
 +
        ld hl,[[83Plus:RAM:8462|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

Latest revision as of 10: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