WonderWitch/FreyaBIOS/Bank

From WSdev Wiki
Jump to navigationJump to search

The Bank interrupt provides an abstraction layer for accessing the WonderWitch cartridge's flash and RAM.

Interrupts

INT $18/AH=$00 - bank_set_map

  • AH = $00
  • BX = Bank region
  • CX = Number of bank to map to region

Bank regions:

  • 0 = SRAM (1000:xxxx)
  • 1 = ROM0 (2000:xxxx)
  • 2 = ROM1 (3000:xxxx)

INT $18/AH=$01 - bank_get_map

  • AH = $01
  • BX = Bank region

Return:

  • AX = Number of bank mapped to region

INT $18/AH=$02 - bank_read_byte

  • AH = $02
  • BX = Bank ID
  • DX = Offset within bank

Return:

  • AL = Byte read

Bank ID format:

15  bit  8  7  bit  0
 ---- ----  ---- ----
 tiii iiii  iiii iiii
 |||| ||||  |||| ||||
 |+++-++++--++++-++++- Number of bank
 +-------------------- 0 = SRAM, 1 = Flash

INT $18/AH=$03 - bank_write_byte

  • AH = $03
  • BX = Bank ID
  • CL = Byte to write
  • DX = Offset within bank

INT $18/AH=$04 - bank_read_word

  • AH = $04
  • BX = Bank ID
  • DX = Offset within bank

Return:

  • AX = Word read

INT $18/AH=$05 - bank_write_word

  • AH = $05
  • BX = Bank ID
  • CX = Word to write
  • DX = Offset within bank

INT $18/AH=$06 - bank_read_block

  • AH = $06
  • BX = Bank ID
  • CX = Number of bytes to read
  • DX = Offset within bank
  • DS:SI = Output buffer, of size CX

INT $18/AH=$07 - bank_write_block

  • AH = $07
  • BX = Bank ID
  • CX = Number of bytes to write
  • DX = Offset within bank
  • DS:SI = Input buffer, of size CX

INT $18/AH=$08 - bank_fill_block

  • AH = $08
  • AL = Fill value
  • BX = Bank ID
  • CX = Number of bytes to write
  • DX = Offset within bank

Sets CX bytes in bank BX to value AL starting at offset DX.

INT $18/AH=$09 - bank_erase_flash

  • AH = $09
  • BX = Bank ID