Fact-checked by Grok 2 weeks ago

Bank switching

Bank switching is a technique employed in computer architectures, particularly in 8-bit microcontrollers and early personal computers, to expand the effective size of code and memory beyond the processor's native able limit without requiring an increase in the width of the bus. This method partitions the total into multiple discrete banks, each typically of equal size (e.g., 64 KB in systems like the ), with only one bank active and accessible to the CPU at any given time. The active bank is selected through dedicated hardware mechanisms, such as bank selection instructions or control registers that concatenate a bank identifier with the processor's virtual to form the physical , effectively treating bank switching as a simplified form of mapping without full page descriptors. Originating in the mid-1960s with early minicomputers, alongside more advanced memory mapping techniques such as , bank switching became particularly prevalent in the and 1980s for resource-constrained embedded systems and personal computers limited to 16-bit address spaces (e.g., 64 KB total). In practice, it enabled memory expansion in devices like the , Intel 8051, and PIC16F877A microcontrollers, where switching between banks (e.g., four 128-byte data banks in the PIC16F877A) is triggered by explicit instructions, incurring overhead in code size and execution cycles due to the need to manage bank selections before accessing variables or code in non-active banks. For instance, in systems popular in the late , bank switching allowed expansion to 1 MB or more by selecting among multiple 64 KB banks via DIP switches, I/O ports, or software controls, supporting applications in early personal computing like the and TRS-80. The primary advantages of bank switching include reduced complexity and cost, as it avoids the need for wider address buses or more complex mapping , while also potentially lowering power consumption and increasing clock speeds in designs. However, it introduces challenges such as bank conflicts—where frequent switches serialize operations and degrade performance—and limitations on program size, as no single program can span multiple banks without explicit management, making data exchange between banks cumbersome. Compiler optimizations, such as those using partitioned to minimize selection instructions, have been developed to mitigate these issues, yielding reductions in usage (2.7%–18.2%) and cycles (5.1%–28.8%) in benchmarks for microcontrollers like the PIC16F877A. Although largely superseded in modern 32- and 64-bit architectures by and larger address spaces, bank switching remains relevant in low-cost, memory-constrained and systems, for example, in processors and low-end microcontrollers as of 2024.

Fundamentals

Definition and Purpose

Bank switching is a hardware-based technique that enables a to access more than its processor's native bus can directly support. It achieves this by partitioning the total physical into fixed-size units known as "banks," typically matching the size of the processor's , such as 64 KB segments for 16-bit addressing . These banks are selectively mapped into the processor's visible through controls, allowing only one or a subset to be active at a time while others remain dormant. The primary purpose of bank switching is to circumvent the inherent limitations of processors with constrained address buses, such as those limited to 64 KB of directly addressable memory, thereby permitting the installation and utilization of larger total memory capacities without necessitating a complete redesign of the processor architecture. This approach was particularly valuable in resource-constrained environments where expanding the address bus width would increase hardware complexity and cost. Key benefits include its relative simplicity in implementation, relying on basic hardware elements like latches or registers for bank selection, and minimal runtime overhead, making it ideal for static memory applications such as program code storage in read-only memory (ROM). Bank switching emerged in the amid the rapid decline in memory costs, which outpaced advancements in addressing capabilities, creating a demand for techniques to scale memory economically in early systems. For instance, by the and 1980s, 8-bit s, commonly limited to 64 KB addressing, increasingly required bank switching to accommodate or cartridges exceeding this limit in consumer devices like consoles. Unlike , which involves operating system-mediated abstraction, protection, and swapping between and secondary storage like disks, bank switching operates at the level without OS intervention or disk involvement, focusing solely on expanding direct physical through explicit program-controlled switching.

Basic Mechanism

Bank switching enables a with a limited to access larger amounts of physical by selectively mapping different memory banks into the visible address range. The core process involves the writing a bank identifier to a dedicated bank select , often via an I/O port instruction or memory-mapped I/O. This write operation latches the bank number into the register, after which a interprets the value to assert signals for the target memory bank while deasserting them for others, thereby routing the processor's address and data signals exclusively to the active bank. At the hardware level, the mechanism relies on address decoding logic to interpret the processor's address bus, combined with latches—such as the 74LS373 octal D-type transparent latch—to stably hold the bank select value until the next switch. Multiplexers then remap the high-order address bits by substituting bits from the bank register in place of unused upper address lines from the processor, effectively extending the addressable space. For instance, in a basic circuit for switching between two 64 KB banks using a single control bit, the processor's 16-bit address bus connects directly to the lower 16 bits of each bank's address inputs, while the latched select bit drives a decoder (e.g., a 74LS138 3-to-8 line decoder configured for binary selection) to enable one bank's chip select and a multiplexer (e.g., 74LS157 quad 2-to-1) to prepend the select bit as the 17th address line for the physical memory array. Software plays an active role by explicitly managing bank switches through dedicated routines, typically implemented as inline assembly or function calls that perform port writes or interrupt-driven handlers to load content from inactive banks into the active space; unlike systems, no hardware-managed automatic translation occurs, requiring programmers to track bank states manually. Address space mapping in bank switching generally affects only the upper bits of the bus, leaving lower bits unchanged for direct access within the . For example, a 16-bit address bus paired with a 2-bit bank select register supports 256 KB of total organized into four 64 KB banks, where the two highest bits are replaced by the latched bank value during decoding. Bank sizes remain fixed per , often 16 KB or 64 KB, to align with common dynamic () chip capacities and simplify decoding logic. A representative software routine for initiating a bank switch might appear in pseudocode as follows:
procedure SwitchBank(bank_id: integer);
begin
  OUT(0xFF, bank_id);  // Write the bank number to I/O port 0xFF, latching it into the select register
end;
This simple operation, such as SwitchBank(3); to activate bank 3, immediately remaps the address space without further overhead, allowing seamless continuation of program execution in the new bank. In contrast to software overlays, which manage by dynamically loading and unloading modules from secondary storage under explicit control to fit within physical limits, bank switching provides hardware-mediated of pre-loaded blocks, avoiding disk access delays and supporting rapid context shifts for resident and .

Historical Applications

Early Minicomputers

Bank switching first appeared in the (CDC) 160 series of minicomputers, introduced in 1960 and designed by . Initially developed as a peripheral controller for the mainframe, the standalone CDC 160 provided 4,096 words of 12-bit , but its architecture limited direct addressing to this amount. The subsequent CDC 160-A model, released shortly after, incorporated a dedicated bank-switch instruction to enable selection among multiple memory banks, extending the effective addressable space up to 32,000 words while using the same 12-bit addressing scheme. A prominent example of bank switching's application in larger-scale minicomputers was the , unveiled in 1964. This system organized its central memory into 32 independent banks of 4,096 60-bit words each, supporting configurations up to 131,072 words in standard mode. For scientific computing workloads requiring greater capacity, the Extended Core Storage (ECS) option employed bank switching across up to four bays of phased banks, achieving a total of 2 million words—equivalent to approximately 15 of storage (using 60-bit words)—through address decoding that selected specific banks via controller logic. In these early implementations, bank switching operated by altering addressing through processor control words or dedicated instructions; for instance, in the CDC 160-A, an extension triggered the switch between banks of 4,096 words, remapping the without reconfiguration. Similarly, the CDC 6600's mode registers and peripheral processors managed selection, ensuring seamless transitions for batch-processing tasks while maintaining with core cycle times of around 1 . This technique facilitated cost-effective memory expansion in batch-processing environments, where minicomputers handled scientific simulations and for multiple users, demonstrating reliability under sustained loads. Its success in systems like the influenced subsequent architectures by validating bank switching as a practical for scaling without redesigning the core . By 1965, bank switching had become a standard feature in minicomputers, coinciding with magnetic core memory prices falling below $1 per bit due to manufacturing improvements and economies of scale.

8-Bit Microcomputers

In the 1970s and 1980s, home and hobbyist microcomputers based on 8-bit processors like the Zilog Z80 and MOS 6502 were constrained by their 16-bit address buses, which permitted direct access to only 64 KB of memory. This limitation proved particularly restrictive for software distribution, as ROM capacities for games and operating systems quickly exceeded 64 KB. Bank switching addressed this by allowing multiple memory banks to be mapped into the processor's address space, effectively expanding usable ROM without altering the core CPU architecture. This technique became essential for affordable personal systems, shifting from the bulkier core memory of earlier minicomputers to semiconductor-based expansions that enabled larger, more complex programs. Early adoption appeared in systems like the System Three, introduced in 1977, which utilized the to support up to 16 banks of 64 RAM, facilitating multitasking and multi-user environments through selective bank mapping. The exemplified software-controlled switching via "soft switches," where language cards expanded memory to 128 by toggling between two 64 RAM banks in the D000–FFFF range, activated by writes to addresses like C080 for bank selection and C011 for reading the current state. Implementations varied: fixed banking for often relied on address line decoding to segment static code areas, while dynamic banking for RAM used I/O ports or registers for on-the-fly selection. For instance, the Commodore 64 employed 16 banks for VIC-II video memory access, controlled by the second CIA chip's data direction register at DD02 and port A at DD00, where bits 0–1 output bank select signals to configure one of four RAM banks visible to the . Software techniques for managing bank switches typically involved dedicated headers in fixed memory banks containing jump tables, which facilitated seamless transitions to subroutines in other banks via an OUT instruction to a control port followed by a CALL. This allowed programs to execute across expanded spaces while maintaining with the 64 KB view. However, interrupts posed significant challenges, as they could trigger mid-switch, leading to bank conflicts where code or data from the wrong bank was accessed; developers mitigated this by saving and restoring bank states on the before interrupt handlers, ensuring atomic switches to prevent corruption. By 1982, bank switching had become standard in most 8-bit microcomputers, exemplified by the , which supported cartridge expansions up to 512 KB through paging mechanisms that mapped 16 KB ROM banks into the address space via I/O port writes. This widespread integration democratized access to larger software libraries, fueling the home computing boom with ROM-based games and utilities that far exceeded the native address limits.

IBM PC Implementation

The IBM PC, introduced in 1981, utilized the microprocessor with a 20-bit address bus capable of addressing up to 1 MB of physical memory in total. Of this, only was designated as available to applications, with the remaining 384 KB reserved for system , video buffers, and memory mappings. This limitation prompted the development of the Expanded Memory Specification () by , , and (collectively ), with the initial version 3.0 released in 1985 and version 3.2 standardized in 1986 to support up to 8 MB of expanded memory. implemented bank switching by dividing expanded memory into 16 KB logical pages, which could be mapped into a contiguous 64 KB page frame within the upper memory area (typically between and 1 MB, such as at addresses D0000h–DFFFFh). In the subsequent LIM 4.0 specification from October 1987, an expanded memory manager (EMM) used four page registers to control these mappings, allowing up to 32 MB total expanded memory while emulating 16 KB pages if hardware provided smaller units. Switching occurred through software calls that updated the page registers, enabling dynamic access to non-conventional memory without altering the base 1 MB . Hardware support for EMS required add-on expansion cards, such as Intel's Above Board introduced in , which provided the additional banks and bank select registers integrated with the bus. Programs accessed EMS via an EMM device driver loaded at boot time, using interrupt 67h for operations like mapping pages ( 50h in AH) to set the visible frame content. For example, terminate-and-stay-resident (TSR) programs could be relocated to expanded memory using utilities from memory managers like Quarterdeck's QEMM, such as its LOADHI command, to maximize availability. By the early 1990s, hardware had become obsolete as 32-bit operating systems and standards like XMS superseded it, though software via drivers such as persisted in and early Windows versions for legacy compatibility. Modern Windows environments continue to support through virtual machines for running older applications.

Consumer Electronics Applications

Video Game Consoles

Bank switching played a crucial role in early video game consoles from the to the , enabling developers to expand ROM capacity beyond the hardware's native limits, typically 16 to 64 KB, to accommodate more complex game logic, levels, and . In fixed-hardware systems like these, cartridge-based mappers—custom chips or logic circuits—facilitated dynamic switching of ROM banks, allowing games to access larger program ROM (PRG-ROM) without redesigning the console's CPU bus. This technique was essential for cost-effective production, as it permitted the use of inexpensive 8-bit processors while supporting cartridges up to several hundred kilobytes. A seminal example is the , released in 1977, which featured only 4 KB of addressable space. Bank switching here employed simple address line tricks to select between 4 KB banks, often triggered by writing to specific "hotspot" addresses like $1FF8 or $1FF9, which latched an extra address bit to remap the cartridge's into the F000–FFFF range. This allowed early games to reach 8 KB, with later schemes supporting up to 32 KB or more through multi-bank configurations, fundamentally enabling richer gameplay in titles like Pitfall! without exceeding the system's 13-bit address bus. The (), launched in 1983, advanced this with dedicated Controller (MMC) chips, such as the MMC1, which supported PRG-ROM banking in 16 KB or 32 KB chunks, extending capacity to 256 KB standard and up to 512 KB in variants like SUROM or SXROM by reusing CHR lines for additional addressing. Techniques included horizontal banking, where banks switched based on CPU access patterns, and vertical banking tied to Picture Processing Unit (PPU) reads for graphics, allowing seamless transitions for scrolling effects in games like The Legend of Zelda. The add-on (1986) further innovated by loading data from double-sided 3-inch floppies—offering up to 256 KB total capacity—into a 32 KB RAM buffer via BIOS-managed sequential transfers and software-based banking, reducing cartridge costs for titles like Super Mario Bros. 2. However, these methods introduced challenges, including the need for mapper-specific code that complicated development and portability across cartridges, as each game had to handle bank transitions precisely to avoid glitches. Manufacturers like incorporated proprietary chips, such as the VRC series, not only for advanced banking but also for measures, embedding unique timing checks or hardware locks that thwarted unauthorized copies. By the early 1990s, bank switching waned in 16-bit consoles like the (SNES, 1990), which featured a 24-bit address bus capable of directly accessing up to 8 MB of ROM, rendering cartridge mappers largely obsolete for basic expansion in favor of integrated coprocessors for enhanced features.

Video Processing

In video processing hardware of early display systems, bank switching enabled access to video beyond the limitations of the CPU's addressable space, particularly for frame buffers supporting higher s or color depths. For instance, achieving a 640x480 in 256-color requires approximately 300 KB of , exceeding the standard 256 KB available on VGA hardware, necessitating techniques to switch between memory banks to map additional VRAM into the accessible window. Expansions for the utilized bank switching in its chip RAM to expand video memory capacity, allowing the —a dedicated for operations—to efficiently handle tasks like bit-block transfers for frame buffer updates and manipulation. This expansion, such as the MaxiMEGS card providing up to 2.5 MB of chip RAM via software-controlled bank switching during non-sync periods, ensured seamless integration with the video subsystem for real-time rendering. Similarly, early VGA cards introduced in supported banked modes to utilize more than 256 of video memory, enabling higher-resolution by selectively mapping extended VRAM segments into the 64 access window. Bank selection in EGA and VGA controllers was managed through dedicated registers in the sequencer and graphics controller. In the EGA, introduced in 1984, the 64 KB windowed banking system relied on the Miscellaneous Output Register (port 3C2, bit 5) to toggle between low and high 64 KB pages in odd/even modes, while the Sequencer Memory Mode Register (port 3C5, index 04) enabled access to expanded beyond 64 KB by leveraging address bits 14 and 15. For VGA, the Sequencer Map Mask Register (port 3C5, index 02) controlled plane write enables, and the Graphics Controller Memory Map Select Register (index 06) defined the address range for banking, with switches occurring via CPU writes or during () operations for efficient frame updates. These mechanisms allowed dynamic bank selection on a per-scanline basis in progressive modes or during bursts for blitter-like transfers, minimizing latency in video pipelines. A key technique in these systems was bank interleaving, which alternated access between odd and even memory banks to improve , particularly in where odd and even fields were processed separately. The EGA's Sequencer Memory Mode Register (index 03) configured odd/even addressing to interleave planes for faster sequential reads during , reducing contention in planar memory architectures. This approach, inherited in VGA's sequencer, enabled smoother handling of by mapping odd lines to one bank and even lines to another, enhancing video performance without full memory chaining. In arcade hardware, bank switching facilitated sprite and palette management for dynamic video effects. The Sega System 16, launched in 1985, employed sprite banking where ROM board bits 1 and 0 selected one of four sprite banks, allowing rapid switching of sprite data and associated palettes—up to 64 16-color palettes per sprite—for layered video composition in games like . This technique optimized video controller access to large sprite sets exceeding direct addressing limits, ensuring fluid on-screen animations within the system's 68000-based video pipeline.

Embedded Systems

Microcontrollers

In 8-bit and 16-bit microcontrollers constrained by less than 64 KB of , bank switching facilitates the management of larger sizes by partitioning the program into multiple selectable banks, allowing access to extended code space without requiring more advanced hardware. This technique is particularly vital in applications where cost and power efficiency limit memory capacity, enabling developers to implement complex routines while adhering to the microcontroller's addressable limits. PIC microcontrollers, introduced by in the 1980s, exemplify this approach through banked special function registers (SFRs) that control core and peripheral operations. In mid-range PIC devices, such as the PIC16F series, data is organized into up to four banks of 128 bytes each, with switching accomplished by toggling the RP0 bit (and RP1 for additional banks) in the during direct addressing operations. This mechanism supports efficient access to general-purpose registers and SFRs across banks, though it requires careful management to avoid unintended switches during execution. For instance, 0 typically holds commonly used SFRs, while higher banks store additional configuration registers, minimizing frequent banking in performance-critical code. In PIC, a dedicated Bank Select Register (BSR) is used for indirect addressing to select the active data bank. The 8051 microcontroller family, originating from in the late 1970s and widely adopted thereafter, employs code banking to surpass the standard 64 KB program memory limit, dividing code into banks accessible via hardware selection. Code execution often relies on the MOV DPTR instruction for indirect jumps to banked addresses, enabling dynamic routing to routines in different banks while maintaining a unified addressing model. A dedicated common area, typically the lower 32 KB, houses interrupt vectors—including the shared at address 0x0000—ensuring seamless handling of interrupts regardless of the active bank and preventing conflicts in tasks. In 8051 variants, code banking is managed through external hardware or address extension registers, with compilers like Keil C51 using linkers to overlay banks. Bank switching in these microcontrollers introduces overhead in service routines (ISRs), as developers must save and restore bank states to avoid disrupting the main program's context, a practice enforced through directives or intrinsics. This methodology persists into the 2020s for cost-sensitive devices, where 8/16-bit microcontrollers like and 8051 derivatives remain prevalent due to their low power and minimal footprint. The Keil continues to support banked models, generating optimized for up to 2 of banked in 8051-based systems, facilitating deployment in resource-constrained sensors and controllers.

Modern Processors like

In ARM-based embedded systems, particularly low-end microcontrollers without units (MMUs), bank switching remains relevant for expanding limited addressable in and RAM. For instance, in the Cortex-M0 and Cortex-M0+ profiles (ARMv6-M architecture, introduced in 2009), devices with exceeding 512 KB often use banking to alias regions, such as remapping the vector table to different banks at address 0x00000000 for handling. The from , based on Cortex-M0, employs dual- configurations to enable over-the-air () updates without halting execution. Each is 32–64 KB, with hardware controls switching between them via option bytes or software commands, allowing safe swapping during updates while maintaining code execution from the active . This approach avoids the need for external and supports up to 256 KB total in banked setups. In higher-end but MMU-less ARM profiles like Cortex-M3/M4 (ARMv7-M, launched in 2004), some devices implement code banking for large (>1 MB) using base address registers or linker scripts to select banks, though automatic stacking and dual stack pointers (Main SP and Process SP) in handler mode reduce overhead without register banking for access. banking persists in cost-optimized MCUs, such as NXP's LPC800 series (Cortex-M0+), where segmented uses banking for secure boot and updates. As of November 2025, bank switching in embedded systems supports low-power in battery-operated sensors, with examples in devices using Cortex-M0+ for efficient memory expansion without full overhead. In contrast, high-end series in mobile SoCs rely on MMUs for virtual addressing, rendering memory banking obsolete.

Alternatives and Successors

Limitations

Bank switching, while effective for expanding memory in resource-constrained systems, suffers from significant overhead due to the involved in executing switch instructions. These operations often require writing to I/O ports, which in 8-bit microcontrollers can consume multiple CPU cycles per switch, leading to fragmented code execution and increased susceptibility to programming errors when switches occur frequently. In embedded applications, unoptimized bank selection can impose overheads ranging from 5.1% to 28.8%, as demonstrated in analyses of partitioned memory architectures for devices like the PIC16F877A. The technique demands manual management by programmers, who must explicitly insert bank selection instructions throughout the , complicating and introducing error-prone scenarios. This is particularly challenging in multitasking or -driven environments, where an may execute in the wrong bank if not properly synchronized, resulting in or system instability; for instance, subroutine calls and interrupts require explicit bank awareness, escalating complexity beyond 64 KB of . Such manual oversight lacks the automated handling found in modern , amplifying bugs in larger programs. Scalability becomes inefficient beyond approximately 1 MB of , as the proliferation of banks grows exponentially with demands, necessitating intricate switching logic without inherent support for , virtual addressing, or inter-process sharing essential for operating system environments. In fixed-address architectures like those in 8-bit microcontrollers, expanding to larger sizes exacerbates and power draw from repeated switches, limiting practical use in evolving computing paradigms. Hardware implementation adds costs through dedicated decoder logic, which incorporates additional gates for bank selection and address multiplexing, increasing overall chip area and power inefficiency—particularly under frequent switching regimes that elevate dynamic consumption. A notable example is the (NES), where mapper chip implementations for bank switching occasionally led to glitches, such as flickering graphics in titles like , stemming from timing-sensitive bank conflicts during rendering. By the , the advent of 32-bit processors with native support for up to 4 GB of addressable memory rendered bank switching obsolete for desktop computing, as direct addressing eliminated the need for such workarounds.

Advanced Memory Management Techniques

Segmentation represents a foundational advancement in memory management that superseded bank switching by dividing the address space into variable-sized segments, each defined by descriptors containing base addresses, limits, and access rights. Introduced in the microprocessor in 1982, protected mode segmentation allows for a 1 GB per task, mapped to up to 16 MB of physical , while incorporating protection mechanisms such as privilege levels (0-3) to isolate tasks and prevent unauthorized access. Descriptors, stored in tables like the (GDT) for shared segments or Local Descriptor Table (LDT) for task-specific ones, enable flexible addressing where a 16-bit segment selector and offset form a 32-bit , translated via to physical addresses with boundary and type checks. This approach addressed the fixed-bank limitations of earlier systems by supporting dynamic segment sizing from 1 byte to 64 KB, enhancing multitasking support without manual switching overhead. Paging further evolved by organizing memory into fixed-size pages, typically 4 KB, mapped through s managed by the (MMU). The 80386, released in 1985, introduced paging in its , enabling a 4 GB linear with virtual-to-physical translation via multi-level page directories and tables, supporting demand paging where pages are swapped to disk as needed. Each entry (PTE) includes physical frame numbers, protection bits (e.g., read/write, user/), and validity flags, allowing non-contiguous allocation and efficient sharing of physical memory among processes. This mechanism provides isolation and relocation transparency, mitigating fragmentation issues inherent in segmentation alone, and forms the basis for modern systems. Hybrid approaches combine segmentation and paging to leverage their strengths, as seen in modern architectures where segmentation provides coarse-grained protection but paging handles fine-grained mapping and . In , a flat memory model uses minimal segmentation (e.g., single segment for the entire ) atop four-level paging hierarchies, supporting up to 2^48 bytes of with 4 KB pages, enabling terabyte-scale addressing while maintaining . Similarly, the MMU, which has supported multi-level page tables since ARMv4 in the 1990s and evolved further in versions like ARMv6 (2001) and ARMv8, employs two- to four-level structures for 32- and 64-bit addressing, mapping virtual pages to physical frames with attributes like access permissions and cacheability, scalable to terabyte virtual spaces without banking. These hybrids reduce overhead by using paging for allocation and segmentation for protection where needed. Bank switching largely faded after the as 32- and 64-bit address buses proliferated, enabling direct large-address access without hardware multiplexing. For instance, , released in 1993, relied on paging-based management with 4 KB pages and TLBs for efficient translation, supporting a 4 GB virtual space per via the 80386 MMU, marking a shift toward OS-mediated abstraction over hardware banking. By the early 2000s, widespread adoption of these techniques in processors like x86 and rendered bank switching obsolete for general computing. In 2025, graphics processing units (GPUs) exemplify current standards through unified memory architectures, such as NVIDIA's , which provides a single accessible by CPU and GPU without explicit transfers. 's unified memory employs hierarchical paging with on-demand migration and prefetching, leveraging MMU extensions for fine-grained page faults and multi-level tables to manage terabyte-scale datasets across devices, eliminating banking entirely in favor of transparent .

References

  1. [1]
    [PDF] Minimizing Bank Selection Instructions for Partitioned Memory ...
    Bank switching is a common technique for 8-bit micro- controllers to increase the size of code and data memory without extending the address buses of the CPU.
  2. [2]
    [PDF] . Signature redacted - DSpace@MIT
    Jan 20, 1978 · Bank switching is a degenerate case of memory mapping where no page descriptor is used; instead, a single bank register is concatenated with the ...
  3. [3]
    [PDF] Untitled - University of Wisconsin–Madison
    Like bank switching, memory mapping was first used in the early sixties. The Atlas computer developed at Manchester University used a memory mapping ...
  4. [4]
    [PDF] Byte Oct 1980 - Vintage Apple
    Oct 14, 1980 · The common solution to this problem is called bank switching. This process is similar to a selector switch that turns on the bank of memory that ...
  5. [5]
    The effect of the Harvard architecture on the teaching of assembly ...
    Bank switching is used when the actual memory size exceeds what is allowed by the address size. A chip with an address size of n bits has a natural memory size ...Missing: definition | Show results with:definition
  6. [6]
    Bank switching - Computer History Wiki
    Nov 7, 2021 · In bank switching, the machine's main memory is divided into 'banks' (hence the name), each usually the size of the machine's basic address ...Missing: technique definition<|control11|><|separator|>
  7. [7]
    PDP-8 Memory Extension units - Computer History Wiki
    Aug 7, 2022 · All the models of the PDP-8 family have (mostly optional) Memory Extension units, which use bank switching to allow more than one PDP-8 address space worth of ...
  8. [8]
    NES / Famicom Architecture | A Practical Analysis - Rodrigo Copetti
    Its primary job is to extend the address space, allowing developers to fit more chips. This is achieved through bank switching: memory addresses are grouped ...
  9. [9]
    Bank Switching | Big Mess o' Wires
    Jun 19, 2010 · Bank switching divides memory into two blocks. Block 0 is swappable, while block 1 is always present. Physical memory is divided into 128 banks ...
  10. [10]
    Z80 Memory Mapping/Bank Switching | Details - Hackaday.io
    Sep 23, 2019 · In the simplest scheme, bank switching involves creating a single window in the Z80 memory space and switching in banks of SRAM into the window.
  11. [11]
    digital logic - What is the application of the 74LS373?
    Jul 23, 2023 · It's an 8-bit latch. It's main use was separating data and address busses while maintaining the address. In old CPU designs.
  12. [12]
    Overlays in Memory Management - GeeksforGeeks
    Sep 5, 2025 · Overlays are a memory management technique used to efficiently manage limited memory by loading only necessary parts of a program into memory at a time.
  13. [13]
    Inside Those CDC Computers
    Central memory was 32 boxes each of 4K 60 bits words for a total of 217 words. The cycle time was 1 microsecond and the memory bus cycle time was 100 ns like ...
  14. [14]
    CDC-160A
    Seymour Cray claimed that he needed only one week to design the CDC 160A, a standalone version of his CDC 160. Some would argue that what he invented at Control ...Missing: bank switching
  15. [15]
    [PDF] CDC 6600
    Similarly, Central Memory is organized in 32 logically independent banks of 4096 words (60-bit). Several banks may be in operation simultaneously, thereby ...
  16. [16]
    [PDF] Extended core storage for the control data 64 6600 systems
    The purpose of this paper is to describe the design of the basic memory hardware required to operate a very large word memory. Hardware system description. The ...
  17. [17]
    Core Memory
    The price per bit of core memory was 20 dollarcent in 1960 and decreased from there with 19% per year.Missing: 1965 | Show results with:1965
  18. [18]
    Zilog Z80 microprocessor architecture - CPU-World
    May 17, 2024 · The total addressable memory size is 64 KB. 16-bit pointers and data are stored as: address: low-order byte address+1: high-order byte. Program ...
  19. [19]
    MOS Technology 6502 microprocessor family - CPU-World
    6502 and 6512 processors could address 64KB of memory, other CPUs in the family could address up to 8 KB. Stack size of the 6502 was limited to 256 bytes.
  20. [20]
    Cromemco S-100 computer - Retrotechnology
    Jan 22, 2008 · The Z-80 processor was able to utilize up to 16 banks of 64KB of RAM to support 1MB multi user and multitasking applications. It was possible to ...
  21. [21]
    [PDF] Apple IIe Technical Reference Manual Part 2 - AppleLogic
    Reading Bank Switches. You can read which language card bank is currently switched in by reading the soft switch at $C011. You can find out whether the ...
  22. [22]
    [PDF] c64 programmers reference guide(commodore)
    ... CIA#2 (location 56576 (or. $DD00 HEX)). These 2 bits must be set to outputs by setting bits 0 and 1 of location 56578 ($DD02,HEX) to change banks. The ...
  23. [23]
    Better way to do Z80 "bank switch & call"?
    Nov 10, 2020 · Banks are switched by sending a certain control byte to a certain control port (actual values depend on hardware setup / expansion cards / etc ...Managing registers/memory effectively on the Z80Disable memory refresh on Z80 - Retrocomputing Stack ExchangeMore results from retrocomputing.stackexchange.comMissing: techniques | Show results with:techniques
  24. [24]
    128K ZX Spectrum Technical Information
    The principle is the same for all bank switching: change only the bits you need to. Memory banks 1,3,5 and 7 are contended, which reduces the speed of memory ...
  25. [25]
    Why Were PCs Limited to 640K of RAM (And How Did They Fix It)?
    Aug 26, 2023 · Engineers and developers took the 640K memory limitation as a challenge, devising ways to overcome the constraints of the IBM PC's architecture.
  26. [26]
    DOS Memory, Managers & Extenders, Part I | OS/2 Museum
    Jun 17, 2011 · Expanded Memory. In 1985, the LIM EMS (Lotus/Intel/Microsoft Expanded Memory Specification) was created. The initial release was called EMS ...
  27. [27]
    The MS-DOS memory environment - ACM Digital Library
    At the Spring, 1985, COMDEX, Lotus and. Intel announced the original Expanded. Memory Specification, EMS 3.0. The specification defined a uniform mechanism ...
  28. [28]
    Version 4.0 - Phatcode.net
    LOTUS /INTEL /MICROSOFT EXPANDED MEMORY SPECIFICATION Version 4.0 300275-005 October, 1987 Copyright (c) 1987 Lotus Development Corporation 55 Cambridge ...
  29. [29]
    LOTUS, INTEL, MICROSOFT REVISE L/I/M EXPANDED MEMORY ...
    Aug 20, 1987 · Lotus said L/I/M EMS 4.0 will complement several new features in release 3 of 1-2-3. The new expanded memory specification practically ...
  30. [30]
    Intel - DOS Days
    The original Intel Above Board was an 8-bit card, designed to expand the memory of the original IBM Model 5150 IBM PC. A set of DIP switches in the upper-right ...
  31. [31]
    int 67
    INT 67 - Expanded Memory Specification. For more information, see the following topics: INT 67,40 Get EMM Status INT 67,41 Get Page Frame Base Address INT ...
  32. [32]
    Microsoft KB Archive/66420 - BetaArchive Wiki
    Jul 18, 2020 · There are two different kinds of expanded memory, differentiated by their Lotus/Intel/Microsoft (LIM) Expanded Memory Specification (EMS) ...
  33. [33]
    Bank switching, best practices? - 2600 Programming For Newbies
    Feb 21, 2006 · (1) Bankswitching schemes where each bank is 4K in size. When you switch banks, the entire 4K ROM cartridge area is switched. In these schemes, ...
  34. [34]
    Atari 2600: The Atlantis of Game Consoles - TechSpot
    Apr 14, 2025 · ... 4KB of ROM. Developers soon discovered a technique called "bank switching," which allowed cartridges to swap between multiple 4KB banks of ...
  35. [35]
    MMC1 - NESdev Wiki
    Through writes to the MMC1 control register, it is possible for the program to swap the fixed and switchable PRG-ROM banks or to set up 32 KB PRG bankswitching ...Missing: Entertainment | Show results with:Entertainment
  36. [36]
    Family Computer Disk System - NESdev Wiki
    Sep 17, 2025 · The Family Computer Disk System (Famicom Disk System, FDS for short) is a video game add-on made by Nintendo for the Famicom and sold in Japan and Hong Kong.
  37. [37]
    Cartridge Bankswitching Outside the NES - Nerdly Pleasures
    Mar 5, 2017 · In this article I will trace the evolution of that hardware outside the NES and give links to sites and documents where the user can find more ...<|control11|><|separator|>
  38. [38]
    VGA/SVGA Video Programming--Accessing the VGA Display Memory
    ### Summary of VGA Memory Access, Banking for >256KB, and Relevant Registers
  39. [39]
    Memory and Storage Technology - Amiga Hardware Database
    the ColorBurst memory can be written by the Blitter ... A500. Interface. trapdoor slot. provides a total of 2.5 MB Chip RAM using bank-switching technique ...
  40. [40]
    None
    Below is a merged summary of the memory banking and windowed access mechanisms in the IBM Enhanced Graphics Adapter (EGA), consolidating all information from the provided segments into a single, detailed response. To maximize density and clarity, I’ve organized key details into tables where appropriate, while retaining narrative explanations for context. All technical specifics, registers, and mechanisms are included, with no information omitted.
  41. [41]
    Sequencer Registers - VGA/SVGA Video Programming - OSDever.net
    The Address Register is located at port 3C4h and the Data Register is located at port 3C5h. Index 00h -- Reset Register; Index 01h -- Clocking Mode Register ...
  42. [42]
    Code Banking With Keil C51
    When your application has exhausted the standard 64K code space of the 8051, code banking (or bank switching) can support applications up to 2 MBytes in size (4 ...Missing: banked | Show results with:banked<|control11|><|separator|>
  43. [43]
    [PDF] Section 6. Memory Organization - Microchip Technology
    Switching between these banks requires the RP0 and RP1 bits in the STATUS register to be configured for the desired bank when using direct addressing.
  44. [44]
    8051 Code Banking · contiki-os/contiki Wiki - GitHub
    Sep 23, 2019 · The 8051 uses a technique called Code Banking. This introductory page aims to describe the basics and only focuses on SoCs supported by Contiki.
  45. [45]
    PIC-IOT WG DEVELOPMENT BOARD - Microchip Technology
    The PIC-IOT WG board includes a PIC24FJ128GA705 MCU, ATWINC1510 WiFi, ATECC608A Crypto, and on-board debugger. It has preloaded firmware for Google Cloud, and ...
  46. [46]
    Architecture history and extensions - Arm Developer
    The ARM architecture changed relatively little between the first test silicon in the mid-1980s through to the first ARM6 and ARM7 devices of the early 1990s.
  47. [47]
    ARM Architecture – Registers and Exception Model
    Mar 26, 2024 · This blog will capture the ARM interrupt architecture along with the evolution of the same from the early ARMv4 to the latest ARMv8 models.
  48. [48]
    ARM core registers - Arm Developer
    Each mode that the processor might enter in this way has: A Banked copy of the stack pointer, for example SP_irq and SP_hyp. A register that holds a preferred ...
  49. [49]
    The ARM-state register set - Arm Developer
    The User, IRQ, Supervisor, Abort, and undefined modes each have two banked registers mapped to r13 and r14, allowing a private SP and LR for each mode. System ...
  50. [50]
    [PDF] The ARM Instruction Set Architecture
    Aug 22, 2008 · ARM has 37 registers in total, all of which are 32-bits long. – 1 dedicated program counter. – 1 dedicated current program status register. – ...
  51. [51]
    Memory model - Cortex-M0 - Arm Developer
    This section describes the memory map of a Cortex-M0 device and the behavior of memory accesses. The processor has a fixed memory map that provides up to 4GB ...
  52. [52]
    Cortex-M0 Flash memory aliased from 0x0000_0000 to ... - Reddit
    Jun 12, 2024 · The STM32F030x8 has two 64Kb memory banks, one at 0x0000_0000 and other at 0x0800_0000. The RAM is at 0x2000_2000.Cortex-M: Adding external memory cheaper than choosing MCU ...How is program loaded into ram? What is running from flash? - RedditMore results from www.reddit.com
  53. [53]
    HardFault on ARM Cortex-M0+ - #12 by mramirez - Kernel
    Jul 8, 2022 · In rare cases, the code prefetch may fail upon branching and function calls across Flash memory banks, regardless of the DUAL_BANK and ...
  54. [54]
    Navigating the Cortex Maze - Architectures and Processors blog
    Oct 8, 2013 · The most significant change occurred in 2004 with the release of architecture ARMv7. This defined three architecture profiles: ARMv7-A ...
  55. [55]
    ARM Cortex-M RTOS Context Switching - Interrupt - Memfault
    Oct 30, 2019 · In this article we will explore how context switching works on ARM Cortex-M MCUs. We will discuss how the hardware was designed to support this operation.Missing: 2004 | Show results with:2004
  56. [56]
    Extended 8051 Variants - Arm Developer
    In addition to the code banking known from the BL51 linker/locater, the LX51 linker/locator supports also data banking for xdata and code areas with standard ...Missing: compatible | Show results with:compatible
  57. [57]
    IoT Markets – Internet of Things Markets - Arm
    Billions of intelligent IoT devices are transforming both human and digital decision making by automatically gathering and analyzing vast new sources of data.Missing: switching | Show results with:switching
  58. [58]
    IoT Trends To Drive Innovation For Business In 2025 - MobiDev
    Sep 11, 2025 · In this article, we will share our observations and predictions as to what businesses can expect from IoT in 2025.Trend #1: Aiot... · Trend #5: Wearable Iot... · Trend #6: Green Iot...
  59. [59]
    [PDF] Minimizing Bank Selection Instructions for Partitioned Memory ...
    Bank switching is a common technique for 8-bit micro- controllers to increase the size of code and data memory without extending the address buses of the ...
  60. [60]
    [PDF] Advantages and Pitfall of Moving from an 8 bit System to 32 bit ... - HAL
    Modern embedded systems often have easily over 64 Kbytes of program code, and require complex bank switching schemes. This makes interrupts and subroutine ...
  61. [61]
    Mega Man 3's Graphical Glitches, the MMC3 Mapper, and a Bad ...
    Jun 25, 2024 · Why is there a flashing line above Shadow Man on the Stage Select screen? Why does the pause menu flicker? How do these NES graphics work, ...Missing: memory | Show results with:memory
  62. [62]
    [PDF] Intel 80286 Programmer's Reference Manual - Bitsavers.org
    Product line handbooks contain data sheets, application notes, article reprints and other design information. NAME. COMPLETE SET OF 9 HANDBOOKS. Save $50.00 off ...
  63. [63]
    [PDF] INTEL 80386 PROGRAMMER'S REFERENCE MANUAL 1986
    Page 1. INTEL 80386 PROGRAMMER'S REFERENCE MANUAL 1986. Page 1 of 421. INTEL 80386. PROGRAMMER'S REFERENCE MANUAL. 1986. Intel Corporation makes no warranty for ...
  64. [64]
    Intel® 64 and IA-32 Architectures Software Developer Manuals
    Oct 29, 2025 · These manuals describe the architecture and programming environment of the Intel® 64 and IA-32 architectures.
  65. [65]
    Multilevel translation - Learn the architecture - Arm Developer
    This guide introduces the MMU, which is used to control virtual to physical address translation.Missing: 1990s | Show results with:1990s
  66. [66]
    The Virtual-Memory Manager in Windows NT - LaBRI
    Dec 21, 1992 · Windows NT provides a page-based virtual memory management scheme that allows applications to realize a 32-bit linear address space for 4 gigabytes (GB) of ...
  67. [67]
    CUDA C++ Programming Guide
    Unified memory on devices without full CUDA Unified Memory support. 24.3.1. Unified memory on devices with only CUDA Managed Memory support; 24.3.2. Unified ...