メモリ
メモリマップ
バンク切り替え
標準実装RAMのバンク切り替えは、PIA Aポート($FFC0,$FFC1)を使用する。
【注意】BASICからROMエリアをバンク切り替えしないこと。
"0" | "1" | |
---|---|---|
PIA PA1 | A000~BFFFをRAM側に選択 | ROM側を選択 |
PIA PA2 | C000~DFFFをRAM側に選択 | |
PIA PA3 | E000~EFFFをRAM側に選択 | |
PIA PA6 | A000~BFFFは書き込み専用 | PA1="0"のとき、A000~BFFFを読み書き可能モードに設定 |
PIA PA7 | C000~DFFFは書き込み専用 | PA2="0"のとき、C000~DFFFを読み書き可能モードに設定 |
E000~EFFFは書き込み専用 | PA3="0"のとき、E000~EFFFを読み書き可能モードに設定 |
標準実装RAMのバンク切り替え例:
機械語 | アセンブリ言語 | 説明 |
---|---|---|
7F FF C1 | CLR $FFC1 | DDRAを指定 (#$00 -> $FFC1) |
86 FF | LDA #$FF | Aポートを出力モードにする。(#$FF -> $FFC0) |
B7 FF C0 | STA $FFC0 | |
86 04 | LDA #$04 | PRAを指定し、データ書き込み可能にする。(#$04 -> $FFC1) |
B7 FF C1 | STA $FFC1 | |
86 0C | LDA #$0C | Aポートにデータ書き込み→バンク切り替え。(#$0C -> $FFC0) |
B7 FF C0 | STA $FFC0 |
拡張RAMのバンク切り替えは、BANK-REGレジスタ($FFE8)を使用する。
"0" | "1" | |
---|---|---|
D0 | 非選択 | 標準実装RAMのF000~FEFFを選択 |
D1 | 非選択 | 標準実装RAMのFFF0~FFFFを選択 |
D2 *1 | 固定 | VRAM領域0400~43FFをバンク切り替え |
D3 | 非選択 | 拡張RAMの0000~7FFFを選択 |
D4 | 非選択 | 拡張RAMの8000~FFFFを選択 |
D5 | 拡張RAMの0000~7FFFは書きこみ専用 | 拡張RAMの0000~7FFFを読み書き可能モードに設定 |
D6 | 拡張RAMの8000~FFFFは書きこみ専用 | 拡張RAMの8000~FFFFを読み書き可能モードに設定 |
拡張RAMは、ROMや標準RAMより優先される。
*1: $0000~$7FFFが標準RAMの場合、"1"にすると拡張RAMの$0400~$43FFを選択。
$0000~$7FFFが拡張RAMの場合、"1"にすると標準RAMの$0400~$43FFを選択。
なお、拡張RAMの$0400~$43FFはVRAMとして使用できない。
*2: IGMODEREGをセットすると$A000~$A7FFは上記RAMよりIG RAMへの書き込みが優先される。
I/O
PIA (HD46821(MC6821))
アド レス |
データビット | R / W | 備考 | |||||||
---|---|---|---|---|---|---|---|---|---|---|
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |||
FFC0 | PA7 | PA6 | x | x | PA3 | PA2 | PA1 | x | W | PIA Aポート 標準RAMバンク切り替え |
FFC1 | IRQ A2 | IRQ A1 | CA2制御 | DDR A | CA1制御 | W | ||||
FFC2 | PB7 | PB6 | PB5 | PB4 | PB3 | PB2 | PB1 | PB0 | R / W | PIA Bポート プリンター出力(パラレルポート) |
FFC3 | IRQ B2 | IRQ B1 | CB2制御 | DDR B | CB1制御 | R / W |
バンク切り替えの詳細はメモリの項を参照。
BANK-REG 拡張RAMバンク切り替え
アド レス |
データビット | R / W | 備考 | |||||||
---|---|---|---|---|---|---|---|---|---|---|
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |||
FFE8 | x | D6 | D5 | D4 | D3 | D2 | D1 | D0 | W | 拡張RAMバンク切り替え |
バンク切り替えの詳細はメモリの項を参照。