Difference between revisions of "OSBYTE &19"

From BeebWiki
Jump to: navigation, search
m (Added soft teletext call.)
(Tidied up description)
Line 1: Line 1:
 
[[Category:OSBYTE]]
 
[[Category:OSBYTE]]
__TOC__
+
{{PageTitle|OSBYTE &19 (24): Reset font groups}}
 +
__NOTOC__
 
   OSBYTE &19 (25) - Reset a group of font definitions
 
   OSBYTE &19 (25) - Reset a group of font definitions
 
   On entry:
 
   On entry:
     X=0 resets 32-255
+
     X=0     reset all font groups - CHR$32-CHR$255
     X=1 resets 32-63
+
     X=1     reset font group 1 - CHR$32-CHR$63
     X=2 resets 64-95
+
     X=2     reset font group 2 - CHR$64-CHR$95
     X=3 resets 96-127
+
     X=3     reset font group 3 - CHR$96-CHR$127
     X=4 resets 128-159
+
     X=4     reset font group 4 - CHR$128-CHR$159
     X=5 resets 160-191
+
     X=5     reset font group 5 - CHR$160-CHR$191
     X=6 resets 192-223
+
     X=6     reset font group 6 - CHR$192-CHR$223
     X=7 resets 224-255
+
     X=7     reset font group 7 - CHR$224-CHR$255
     X=16 resets soft Teletext font (where supported)
+
  Extension:
 +
     X=16   resets soft Teletext font (where supported)
 +
    X=&80+n ...
 
    
 
    
 
   On exit:
 
   On exit:
Line 18: Line 21:
 
     X=&00:      subcall actioned
 
     X=&00:      subcall actioned
  
  OSBYTE &19 (25) - Watford Speech: Output a speech allophone
+
On MOS 3 and later each font group is reset by copying it from ROM into RAM. On earlier MOSs (Electron, BBC, BBC B+) a font group can be reset by clearing the appropriate bit of the FONTFLG VDU variable, b6 for font group 1 down to b0 for font group 7. This will result in that font group being read from ROM until any future VDU 23 to redefine a character in that font group.
   On entry:
+
 
    Y=0 X=allophone number - output allophone
+
===Extensions===
    Y=1 X=word number - output a word from dictionary 1
+
   On entry: X=16
    Y=2 X=word number - output a word from dictionary 2
+
placeholder
    Y=3 X=word number - output a word from dictionary 3
+
 
    Y>3 - ignored, allowing other ROMs to respond to and pass to OSBYTE &19,x,0
+
  On entry: X=&80+n
 +
placeholder
  
 
==Example code==
 
==Example code==
On MOS 3 and later the font is always exploded, on earlier MOSs (Electron, BBC, BBC B+) OSBYTE &19 does not exist, [[OSBYTE &14]] explodes the font and resets it. The following code will reset the whole font regardless of what machine the code is running on. OSBYTE 25 - if it exists - resets all characters, then *FX20,6 resets characters &20-&7F. OSBYTE 25 has to be called via OSBYTE as *FX25 will give an error if it is not present.
+
On MOS 3 and later the font is always exploded, on earlier MOSs OSBYTE &19 does not exist and [[OSBYTE &14]] only resets CHR$32-CHR$127. The following code will reset the whole font regardless of what machine the code is running on. OSBYTE 25 - if it exists - resets all characters, then *FX20,6 resets characters &20-&7F. OSBYTE 25 has to be called via OSBYTE as *FX25 will give an error if it is not present.
  
 
===BASIC===
 
===BASIC===
 +
      if you want to ensure the full font is exploded, this may change PAGE
 +
      on the BBC:
 
       A%=FNbyte(25,0):*FX20,6
 
       A%=FNbyte(25,0):*FX20,6
 
        
 
        
       if you want to leave the explosion state unchanged on the BBC and not overwrite memory at PAGE:
+
       if you want to leave the explosion state unchanged on the BBC and not
 +
      overwrite memory at PAGE:
 
       A%=FNbyte(25,0):A%=FNbyte(20,FNbyte(182,&FF00))
 
       A%=FNbyte(25,0):A%=FNbyte(20,FNbyte(182,&FF00))
 
        
 
        
Line 39: Line 46:
  
 
===6502===
 
===6502===
 +
      if you want to ensure the full font is exploded, this may change PAGE:
 +
      on the BBC:
 
       LDA #25:LDX #0:JSR OSBYTE  :\ try 'reset all font'
 
       LDA #25:LDX #0:JSR OSBYTE  :\ try 'reset all font'
 
       LDA #20:LDX #6:JSR OSBYTE  :\ 'explode full font'
 
       LDA #20:LDX #6:JSR OSBYTE  :\ 'explode full font'
 
        
 
        
       if you want to leave the explosion state unchanged on the BBC and not overwrite memory at PAGE:
+
       if you want to leave the explosion state unchanged on the BBC and not
 +
      overwrite memory at PAGE:
 
       LDA #25:LDX #0:JSR OSBYTE          :\ try 'reset all font'
 
       LDA #25:LDX #0:JSR OSBYTE          :\ try 'reset all font'
 
       LDA #182:LDX #0:LDY #&FF:JSR OSBYTE :\ Read current explosion state
 
       LDA #182:LDX #0:LDY #&FF:JSR OSBYTE :\ Read current explosion state
Line 48: Line 58:
  
 
On the Master and later [[OSBYTE &B6|OSBYTE 182]] reads the NoIgnore status, but the value returned is ignored by the following [[OSBYTE &14|OSBYTE 20]].
 
On the Master and later [[OSBYTE &B6|OSBYTE 182]] reads the NoIgnore status, but the value returned is ignored by the following [[OSBYTE &14|OSBYTE 20]].
 +
 +
==OSBYTE &19 (25) - Watford Speech: Output a speech allophone==
 +
  On entry:
 +
    Y=0 X=allophone number - output allophone
 +
    Y=1 X=word number - output a word from dictionary 1
 +
    Y=2 X=word number - output a word from dictionary 2
 +
    Y=3 X=word number - output a word from dictionary 3
 +
    Y>3 - ignored, allowing other ROMs to respond to and pass to OSBYTE &19,x,0
  
 
==See Also==
 
==See Also==
* [[OSBYTE &14]] explode fonts
+
* [[OSBYTE &14]] explode font
 
* http://mdfs.net/Docs/Comp/BBC/Osbyte00
 
* http://mdfs.net/Docs/Comp/BBC/Osbyte00
 +
 +
[[User:Jgharston|Jgharston]] ([[User talk:Jgharston|talk]]) 00:21, 24 November 2022 (CET)

Revision as of 00:21, 24 November 2022

OSBYTE &19 (24): Reset font groups
 OSBYTE &19 (25) - Reset a group of font definitions
 On entry:
   X=0     reset all font groups - CHR$32-CHR$255
   X=1     reset font group 1 - CHR$32-CHR$63
   X=2     reset font group 2 - CHR$64-CHR$95
   X=3     reset font group 3 - CHR$96-CHR$127
   X=4     reset font group 4 - CHR$128-CHR$159
   X=5     reset font group 5 - CHR$160-CHR$191
   X=6     reset font group 6 - CHR$192-CHR$223
   X=7     reset font group 7 - CHR$224-CHR$255
 Extension:
   X=16    resets soft Teletext font (where supported)
   X=&80+n ...
 
 On exit:
   X=&FF:       OSBYTE &19 unsupported
   X=preserved: subcall unsupported
   X=&00:       subcall actioned

On MOS 3 and later each font group is reset by copying it from ROM into RAM. On earlier MOSs (Electron, BBC, BBC B+) a font group can be reset by clearing the appropriate bit of the FONTFLG VDU variable, b6 for font group 1 down to b0 for font group 7. This will result in that font group being read from ROM until any future VDU 23 to redefine a character in that font group.

Extensions

 On entry: X=16

placeholder

 On entry: X=&80+n

placeholder

Example code

On MOS 3 and later the font is always exploded, on earlier MOSs OSBYTE &19 does not exist and OSBYTE &14 only resets CHR$32-CHR$127. The following code will reset the whole font regardless of what machine the code is running on. OSBYTE 25 - if it exists - resets all characters, then *FX20,6 resets characters &20-&7F. OSBYTE 25 has to be called via OSBYTE as *FX25 will give an error if it is not present.

BASIC

     if you want to ensure the full font is exploded, this may change PAGE
     on the BBC:
     A%=FNbyte(25,0):*FX20,6
     
     if you want to leave the explosion state unchanged on the BBC and not
     overwrite memory at PAGE:
     A%=FNbyte(25,0):A%=FNbyte(20,FNbyte(182,&FF00))
     
     using:
     DEFFNbyte(A%,X%):LOCAL Y%:Y%=X%DIV256:=((USR&FFF4)AND&FF00)DIV256

6502

     if you want to ensure the full font is exploded, this may change PAGE:
     on the BBC:
     LDA #25:LDX #0:JSR OSBYTE  :\ try 'reset all font'
     LDA #20:LDX #6:JSR OSBYTE  :\ 'explode full font'
     
     if you want to leave the explosion state unchanged on the BBC and not
     overwrite memory at PAGE:
     LDA #25:LDX #0:JSR OSBYTE           :\ try 'reset all font'
     LDA #182:LDX #0:LDY #&FF:JSR OSBYTE :\ Read current explosion state
     LDA #20:JSR OSBYTE                  :\ 'explode full font'

On the Master and later OSBYTE 182 reads the NoIgnore status, but the value returned is ignored by the following OSBYTE 20.

OSBYTE &19 (25) - Watford Speech: Output a speech allophone

 On entry:
   Y=0 X=allophone number - output allophone
   Y=1 X=word number - output a word from dictionary 1
   Y=2 X=word number - output a word from dictionary 2
   Y=3 X=word number - output a word from dictionary 3
   Y>3 - ignored, allowing other ROMs to respond to and pass to OSBYTE &19,x,0

See Also

Jgharston (talk) 00:21, 24 November 2022 (CET)