Difference between revisions of "OSBYTE &19"

From BeebWiki
Jump to: navigation, search
m (Added soft teletext call.)
(4 intermediate revisions by the same user not shown)
Line 11: Line 11:
 
     X=6 resets 192-223
 
     X=6 resets 192-223
 
     X=7 resets 224-255
 
     X=7 resets 224-255
 +
    X=16 resets soft Teletext font (where supported)
 +
 
 
   On exit:
 
   On exit:
 
     X=&FF:      OSBYTE &19 unsupported
 
     X=&FF:      OSBYTE &19 unsupported
Line 20: Line 22:
 
     Y=0 X=allophone number - output allophone
 
     Y=0 X=allophone number - output allophone
 
     Y=1 X=word number - output a word from dictionary 1
 
     Y=1 X=word number - output a word from dictionary 1
     Y=2 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 1
+
     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
 
     Y>3 - ignored, allowing other ROMs to respond to and pass to OSBYTE &19,x,0
  
 
==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.
+
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.
  
 
===BASIC===
 
===BASIC===
       IFFNbyte(25,0,0):FORB%=1TO6:A%=FNbyte(20,B%,0):NEXT
+
       A%=FNbyte(25,0):*FX20,6
 
        
 
        
       using the following function to call OSBYTE:
+
      if you want to leave the explosion state unchanged on the BBC and not overwrite memory at PAGE:
       DEFFNbyte(A%,X%,Y%)=((USR&FFF4)AND&FF00)DIV256
+
      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===
 
===6502===
 
       LDA #25:LDX #0:JSR OSBYTE  :\ try 'reset all font'
 
       LDA #25:LDX #0:JSR OSBYTE  :\ try 'reset all font'
       TXA:BEQ resetDone          :\ X=0 if done
+
       LDA #20:LDX #6:JSR OSBYTE  :\ 'explode full font'
      LDX #6                     :\ loop through 'explode font' calls
+
        
       .resetLoop
+
       if you want to leave the explosion state unchanged on the BBC and not overwrite memory at PAGE:
       TXA:PHA                    :\ save current font block
+
       LDA #25:LDX #0:JSR OSBYTE           :\ try 'reset all font'
       LDA #20:JSR OSBYTE         :\ explode block X
+
       LDA #182:LDX #0:LDY #&FF:JSR OSBYTE :\ Read current explosion state
       PLA:TAX                    :\ get block number back
+
       LDA #20:JSR OSBYTE                  :\ 'explode full font'
       DEX:BNE resetLoop          :\ loop until X=0
+
 
      .resetDone
+
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]].
  
 
==See Also==
 
==See Also==
 
* [[OSBYTE &14]] explode fonts
 
* [[OSBYTE &14]] explode fonts
 
* http://mdfs.net/Docs/Comp/BBC/Osbyte00
 
* http://mdfs.net/Docs/Comp/BBC/Osbyte00

Revision as of 00:05, 9 May 2020

 OSBYTE &19 (25) - Reset a group of font definitions
 On entry:
   X=0 resets 32-255
   X=1 resets 32-63
   X=2 resets 64-95
   X=3 resets 96-127
   X=4 resets 128-159
   X=5 resets 160-191
   X=6 resets 192-223
   X=7 resets 224-255
   X=16 resets soft Teletext font (where supported)
 
 On exit:
   X=&FF:       OSBYTE &19 unsupported
   X=preserved: subcall unsupported
   X=&00:       subcall actioned
 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

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.

BASIC

     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

     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.

See Also