Difference between revisions of "MODE 9"

From BeebWiki
Jump to: navigation, search
m (Minor formatting.)
 
(6 intermediate revisions by the same user not shown)
Line 1: Line 1:
[[Category:Display]]
+
[[Category:Display]]__NOTOC__
[[Image:MODE 9 (BBC) demonstration.png|right|Demonstration of 'MODE 9' (BBC)]]
+
==MODE 9 - 40x32x16==
'''MODE 9''' is the unofficial title of an ultra-low resolution screen [[MODE]], developed by Ian Robertson and published in ''The Micro User'' magazine (November 1985, p.123).  It works on the BBC Micro but not the Electron or Master, or the Archimedes (where MODE 9 is officially a 16-colour version of [[MODE 1]]).
+
[[Image:MODE 9 (BBC) demonstration.gif|right|Demonstration of 'MODE 9' (BBC)]]
 
+
'''MODE 9''' is a medium-resolution screen [[MODE]], selectable with the
The MODE 9 code adapts the [[MODE 6]] screen to provide a 10 × 25 text display in 16 colours. The MOS does not allow complete support of this MODE and some bugs can be seen: for instance, [[VDU 28|text windows]] do not work correctly.
+
'''*MODE''' command or the NewModes sideways ROM module, that replicates the functionality
 +
of the native RISC OS MODE 9.<ref name="newmodes">[http://mdfs.net/Apps/Graphics/NewModes/ NewModes]</ref>
  
 +
The MODE 9 code adapts the [[MODE 2]] screen to provide a 16-colour version
 +
of MODE 1, 40 &times; 32 characters in 16 colours. It does this by redefining
 +
the character set to provide thin characters.
 +
<br><br><br><br><br><br><br><br>
 
{| class="wikitable" style="text-align:left"
 
{| class="wikitable" style="text-align:left"
 
|+'MODE 9'
 
|+'MODE 9'
 
| Type
 
| Type
| colspan="2" | Bitmapped, text only ('[[ASCII]]')
+
| colspan="2" | Bitmapped
 
|- style="vertical-align:top"
 
|- style="vertical-align:top"
 
| rowspan="2" | Resolution
 
| rowspan="2" | Resolution
 
| Text
 
| Text
| 10 &times; 25 characters
+
| 40 &times; 32 characters
 
|- style="vertical-align:top"
 
|- style="vertical-align:top"
 
| Graphics
 
| Graphics
| ''n/a''
+
| 160 &times; 256
 
|- style="vertical-align:top"
 
|- style="vertical-align:top"
 
| Character size
 
| Character size
| colspan="2" | 8 &times; 10 pixels, top 8 lines user definable
+
| colspan="2" | 4 &times; 8 pixels
 
|- style="vertical-align:top"
 
|- style="vertical-align:top"
 
| Pixel aspect
 
| Pixel aspect
| colspan="2" | 4:1 (wide)
+
| colspan="2" | 2:1 (wide)
 
|- style="vertical-align:top"
 
|- style="vertical-align:top"
 
| Bits per pixel
 
| Bits per pixel
| 4
+
| 2
 
|- style="vertical-align:top"
 
|- style="vertical-align:top"
 
| rowspan="17" | Default palette
 
| rowspan="17" | Default palette
Line 80: Line 85:
 
| rowspan="2" | Memory
 
| rowspan="2" | Memory
 
| allocated
 
| allocated
| 8192 bytes
+
| 20480 bytes
 
|- style="vertical-align:top"
 
|- style="vertical-align:top"
 
| on screen
 
| on screen
| 8000 bytes
+
| 20480 bytes
 
|- style="vertical-align:top"
 
|- style="vertical-align:top"
 
| rowspan="1" | Address range
 
| rowspan="1" | Address range
 
| Model B ''etc.''
 
| Model B ''etc.''
| &6000..&7FFF
+
| &3000..&7FFF
 
|- style="vertical-align:top"
 
|- style="vertical-align:top"
 
| rowspan="3" | Configuration
 
| rowspan="3" | Configuration
 
| [[Video ULA]] control register
 
| [[Video ULA]] control register
| &80
+
| &D4
 
|- style="vertical-align:top"
 
|- style="vertical-align:top"
 
| Video ULA palette register file
 
| Video ULA palette register file
| &07 &16 &25 &34<br> &43 &52 &61 &70<br> &8F &9E &AD &BC<br> &CB &DA &E9 &F8
+
| &07 &17 &26 &36 &47 &57 &66 &76<br> &84 &94 &A0 &B0 &C4 &D4 &E0 &F0
 
|- style="vertical-align:top"
 
|- style="vertical-align:top"
 
| [[CRTC]] register file
 
| [[CRTC]] register file
| &3F &28 &31 &24<br> &1E &02 &19 &1B<br> &01 &09 &67 &09<br> (from table in [[MOS 1.20]] at &C492..&C49D)
+
| &3F &28 &31 &24 &26 &00<br> &20 &22 &01 &07 &67 &08
 
|}
 
|}
  
 +
MODE 9 can be created manually with the following code running in the I/O
 +
processor.
 +
 +
    BASIC:
 +
    MODE 2    :REM Base MODE
 +
    ?&30A=39  :REM Characters per line
 +
    ?&34F=8    :REM Bytes per character
 +
    *FX154,212
 +
   
 +
    6502:
 +
    LDA #22:JSR OSWRCH
 +
    LDA #02:JSR OSWRCH          \ Base MODE
 +
    LDA #&27:STA &30A            \ Characters per line
 +
    LDA #&08:STA &34F            \ Byte per character
 +
    LDA #154:LDX #212:JSR OSBYTE \ Cursor width
  
[[Image:MODE 9 (BBC) demonstration.gif|right|Demonstration of 'MODE 9' (BBC)]]
+
The character set needs to be redefined to be four pixels wide, such as with
'''MODE 9''' is also the unofficial title of a medium-resolution screen [[MODE]],
+
the one used with [http://mdfs.net/Apps/Graphics/NewModes/ NewModes].
selectable with the *MODE command or the NewModes sideways ROM module.<ref
 
name="newmodes">[http://mdfs.net/Apps/Graphics/NewModes/ NewModes]</ref>
 
  
The MODE 9 code adapts the [[MODE 2]] screen to provide a 4-colour version of
+
==MODE 9 - 10x25x16==
MODE 1, 40 &times; 32 characters in 4 colours. It does this by redefining the
+
[[Image:MODE 9 (BBC) demonstration.png|right|Demonstration of 'MODE 9' (BBC)]]
character set to provide thin characters.
+
'''MODE 9''' is also the unofficial title of an ultra-low resolution screen
 +
[[MODE]], developed by Ian Robertson and published in
 +
''The Micro User'' magazine (November 1985, p.123). It works on the BBC
 +
Micro but not the Electron, or the Archimedes where MODE 9 is the official
 +
16-colour version of [[MODE 1]]).
  
 +
The MODE 9 code adapts the [[MODE 6]] screen to provide a 10 &times; 25 text
 +
display in 16 colours. The MOS does not allow complete support of this MODE
 +
and some bugs can be seen: for instance, [[VDU 28|text windows]] do not work
 +
correctly.
 +
<br><br><br><br><br>
 
{| class="wikitable" style="text-align:left"
 
{| class="wikitable" style="text-align:left"
 
|+'MODE 9'
 
|+'MODE 9'
 
| Type
 
| Type
| colspan="2" | Bitmapped
+
| colspan="2" | Bitmapped, text only ('[[ASCII]]')
 
|- style="vertical-align:top"
 
|- style="vertical-align:top"
 
| rowspan="2" | Resolution
 
| rowspan="2" | Resolution
 
| Text
 
| Text
| 40 &times; 32 characters
+
| 10 &times; 25 characters
 
|- style="vertical-align:top"
 
|- style="vertical-align:top"
 
| Graphics
 
| Graphics
| 160 &times; 256
+
| ''n/a''
 
|- style="vertical-align:top"
 
|- style="vertical-align:top"
 
| Character size
 
| Character size
| colspan="2" | 4 &times; 8 pixels
+
| colspan="2" | 8 &times; 10 pixels, top 8 lines user definable
 
|- style="vertical-align:top"
 
|- style="vertical-align:top"
 
| Pixel aspect
 
| Pixel aspect
| colspan="2" | 2:1 (wide)
+
| colspan="2" | 4:1 (wide)
 
|- style="vertical-align:top"
 
|- style="vertical-align:top"
 
| Bits per pixel
 
| Bits per pixel
| 2
+
| 4
 
|- style="vertical-align:top"
 
|- style="vertical-align:top"
| rowspan="5" | Default palette
+
| rowspan="17" | Default palette
 
! Logical colour
 
! Logical colour
 
! Actual colour
 
! Actual colour
Line 142: Line 169:
 
|- style="vertical-align:top"
 
|- style="vertical-align:top"
 
| 2
 
| 2
 +
| 2 (green)
 +
|- style="vertical-align:top"
 +
| 3
 
| 3 (yellow)
 
| 3 (yellow)
 
|- style="vertical-align:top"
 
|- style="vertical-align:top"
| 3
+
| 4
 +
| 4 (blue)
 +
|- style="vertical-align:top"
 +
| 5
 +
| 5 (magenta)
 +
|- style="vertical-align:top"
 +
| 6
 +
| 6 (cyan)
 +
|- style="vertical-align:top"
 +
| 7
 
| 7 (white)
 
| 7 (white)
 +
|- style="vertical-align:top"
 +
| 8
 +
| 8 (flashing black/white)
 +
|- style="vertical-align:top"
 +
| 9
 +
| 9 (flashing red/cyan)
 +
|- style="vertical-align:top"
 +
| 10
 +
| 10 (flashing green/magenta)
 +
|- style="vertical-align:top"
 +
| 11
 +
| 11 (flashing yellow/blue)
 +
|- style="vertical-align:top"
 +
| 12
 +
| 12 (flashing blue/yellow)
 +
|- style="vertical-align:top"
 +
| 13
 +
| 13 (flashing magenta/green)
 +
|- style="vertical-align:top"
 +
| 14
 +
| 14 (flashing cyan/red)
 +
|- style="vertical-align:top"
 +
| 15
 +
| 15 (flashing white/black)
 
|- style="vertical-align:top"
 
|- style="vertical-align:top"
 
| rowspan="2" | Memory
 
| rowspan="2" | Memory
 
| allocated
 
| allocated
| 20480 bytes
+
| 8192 bytes
 
|- style="vertical-align:top"
 
|- style="vertical-align:top"
 
| on screen
 
| on screen
| 20480 bytes
+
| 8000 bytes
 
|- style="vertical-align:top"
 
|- style="vertical-align:top"
 
| rowspan="1" | Address range
 
| rowspan="1" | Address range
 
| Model B ''etc.''
 
| Model B ''etc.''
| &3000..&7FFF
+
| &6000..&7FFF
 
|- style="vertical-align:top"
 
|- style="vertical-align:top"
 
| rowspan="3" | Configuration
 
| rowspan="3" | Configuration
 
| [[Video ULA]] control register
 
| [[Video ULA]] control register
| &D4
+
| &80
 
|- style="vertical-align:top"
 
|- style="vertical-align:top"
 
| Video ULA palette register file
 
| Video ULA palette register file
| &07 &17 &26 &36<br> &47 &57 &66 &76<br> &84 &94 &A0 &B0<br> &C4 &D4 &E0 &F0
+
| &07 &16 &25 &34<br> &43 &52 &61 &70<br> &8F &9E &AD &BC<br> &CB &DA &E9 &F8
 
|- style="vertical-align:top"
 
|- style="vertical-align:top"
 
| [[CRTC]] register file
 
| [[CRTC]] register file
| &3F &28 &31 &24<br> &26 &00 &20 &22<br> &01 &07 &67 &08
+
| &3F &28 &31 &24<br> &1E &02 &19 &1B<br> &01 &09 &67 &09<br> (from table in [[MOS 1.20]] at &C492..&C49D)
 
|}
 
|}
  
Line 173: Line 236:
  
 
     BASIC:
 
     BASIC:
     MODE 2     :REM Base MODE
+
     MODE 6     :REM Base MODE
     ?&30A=39  :REM Characters per line
+
     ?&30A=9    :REM Characters per line
     ?&34F=8    :REM Bytes per character
+
     ?&34F=32  :REM Bytes per character
     *FX154,212
+
    ?&360=15  :REM Number of colours
 +
    ?&361=1    :REM Pixels per byte
 +
    ?&362=&AA  :REM Pixel left mask
 +
    ?&363=&55  :REM Pixel right mask
 +
    VDU 20    :REM Reset palette
 +
     *FX154,128
 
      
 
      
 
     6502:
 
     6502:
 
     LDA #22:JSR OSWRCH
 
     LDA #22:JSR OSWRCH
     LDA #02:JSR OSWRCH          \ Base MODE
+
     LDA #06:JSR OSWRCH          \ Base MODE
     LDA #&27:STA &30A            \ Characters per line
+
     LDA #&09:STA &30A            \ Characters per line
     LDA #&08:STA &34F            \ Byte per character
+
     LDA #&20:STA &34F            \ Byte per character
     LDA #154:LDX #212:JSR OSBYTE \ Cursor width
+
    LDA #&0F:STA &360            \ Number of colours
 
+
    LDA #&01:STA &361            \ Pixels per byte
The character set needs to be redefined to be four pixels wide, such as with
+
    LDA #&AA:STA &362            \ Pixel left mask
the one used with [http://mdfs.net/Apps/Graphics/NewModes/ NewModes].
+
    LDA #&55:STA &363            \ Pixel right mask
 +
    LDA #20:JSR OSWRCH          \ Reset palette
 +
     LDA #154:LDX #128:JSR OSBYTE \ Cursor width
  
 
==See Also==
 
==See Also==
Line 194: Line 264:
 
<references/>
 
<references/>
  
--
+
{{MODE}}
 
[[User:Jgharston|Jgharston]] ([[User talk:Jgharston|talk]]) 17:22, 12 October 2016 (UTC)
 
[[User:Jgharston|Jgharston]] ([[User talk:Jgharston|talk]]) 17:22, 12 October 2016 (UTC)
 
[[User:Beardo|beardo]] 12:52, 20 September 2006 (BST)
 
[[User:Beardo|beardo]] 12:52, 20 September 2006 (BST)

Latest revision as of 02:22, 20 January 2023

MODE 9 - 40x32x16

Demonstration of 'MODE 9' (BBC)

MODE 9 is a medium-resolution screen MODE, selectable with the *MODE command or the NewModes sideways ROM module, that replicates the functionality of the native RISC OS MODE 9.[1]

The MODE 9 code adapts the MODE 2 screen to provide a 16-colour version of MODE 1, 40 × 32 characters in 16 colours. It does this by redefining the character set to provide thin characters.







'MODE 9'
Type Bitmapped
Resolution Text 40 × 32 characters
Graphics 160 × 256
Character size 4 × 8 pixels
Pixel aspect 2:1 (wide)
Bits per pixel 2
Default palette Logical colour Actual colour
0 0 (black)
1 1 (red)
2 2 (green)
3 3 (yellow)
4 4 (blue)
5 5 (magenta)
6 6 (cyan)
7 7 (white)
8 8 (flashing black/white)
9 9 (flashing red/cyan)
10 10 (flashing green/magenta)
11 11 (flashing yellow/blue)
12 12 (flashing blue/yellow)
13 13 (flashing magenta/green)
14 14 (flashing cyan/red)
15 15 (flashing white/black)
Memory allocated 20480 bytes
on screen 20480 bytes
Address range Model B etc. &3000..&7FFF
Configuration Video ULA control register &D4
Video ULA palette register file &07 &17 &26 &36 &47 &57 &66 &76
&84 &94 &A0 &B0 &C4 &D4 &E0 &F0
CRTC register file &3F &28 &31 &24 &26 &00
&20 &22 &01 &07 &67 &08

MODE 9 can be created manually with the following code running in the I/O processor.

   BASIC:
   MODE 2     :REM Base MODE
   ?&30A=39   :REM Characters per line
   ?&34F=8    :REM Bytes per character
   *FX154,212
   
   6502:
   LDA #22:JSR OSWRCH
   LDA #02:JSR OSWRCH           \ Base MODE
   LDA #&27:STA &30A            \ Characters per line
   LDA #&08:STA &34F            \ Byte per character
   LDA #154:LDX #212:JSR OSBYTE \ Cursor width

The character set needs to be redefined to be four pixels wide, such as with the one used with NewModes.

MODE 9 - 10x25x16

Demonstration of 'MODE 9' (BBC)

MODE 9 is also the unofficial title of an ultra-low resolution screen MODE, developed by Ian Robertson and published in The Micro User magazine (November 1985, p.123). It works on the BBC Micro but not the Electron, or the Archimedes where MODE 9 is the official 16-colour version of MODE 1).

The MODE 9 code adapts the MODE 6 screen to provide a 10 × 25 text display in 16 colours. The MOS does not allow complete support of this MODE and some bugs can be seen: for instance, text windows do not work correctly.




'MODE 9'
Type Bitmapped, text only ('ASCII')
Resolution Text 10 × 25 characters
Graphics n/a
Character size 8 × 10 pixels, top 8 lines user definable
Pixel aspect 4:1 (wide)
Bits per pixel 4
Default palette Logical colour Actual colour
0 0 (black)
1 1 (red)
2 2 (green)
3 3 (yellow)
4 4 (blue)
5 5 (magenta)
6 6 (cyan)
7 7 (white)
8 8 (flashing black/white)
9 9 (flashing red/cyan)
10 10 (flashing green/magenta)
11 11 (flashing yellow/blue)
12 12 (flashing blue/yellow)
13 13 (flashing magenta/green)
14 14 (flashing cyan/red)
15 15 (flashing white/black)
Memory allocated 8192 bytes
on screen 8000 bytes
Address range Model B etc. &6000..&7FFF
Configuration Video ULA control register &80
Video ULA palette register file &07 &16 &25 &34
&43 &52 &61 &70
&8F &9E &AD &BC
&CB &DA &E9 &F8
CRTC register file &3F &28 &31 &24
&1E &02 &19 &1B
&01 &09 &67 &09
(from table in MOS 1.20 at &C492..&C49D)

MODE 9 can be created manually with the following code running in the I/O processor.

   BASIC:
   MODE 6     :REM Base MODE
   ?&30A=9    :REM Characters per line
   ?&34F=32   :REM Bytes per character
   ?&360=15   :REM Number of colours
   ?&361=1    :REM Pixels per byte
   ?&362=&AA  :REM Pixel left mask
   ?&363=&55  :REM Pixel right mask
   VDU 20     :REM Reset palette
   *FX154,128
   
   6502:
   LDA #22:JSR OSWRCH
   LDA #06:JSR OSWRCH           \ Base MODE
   LDA #&09:STA &30A            \ Characters per line
   LDA #&20:STA &34F            \ Byte per character
   LDA #&0F:STA &360            \ Number of colours
   LDA #&01:STA &361            \ Pixels per byte
   LDA #&AA:STA &362            \ Pixel left mask
   LDA #&55:STA &363            \ Pixel right mask
   LDA #20:JSR OSWRCH           \ Reset palette
   LDA #154:LDX #128:JSR OSBYTE \ Cursor width

See Also

References

Screen display MODEs

MODE 0 | MODE 1 | MODE 2 | MODE 3 | MODE 4 | MODE 5 | MODE 6 | MODE 7
MODE 8 | MODE 9 | MODE 10 | MODE 11 | MODE 12 | MODE 13 | MODE 14
MODE &60 | MODE &61 | MODE &63 | MODE &64 | MODE &66
MODE &68 | MODE &69 | MODE &6B | MODE &6C | MODE &6E
MODE | VDU 22

Jgharston (talk) 17:22, 12 October 2016 (UTC) beardo 12:52, 20 September 2006 (BST)