135 lines
3.6 KiB
ArmAsm
135 lines
3.6 KiB
ArmAsm
|
|
;
|
|
; Names of hardware registers
|
|
;
|
|
; See https://github.com/MEGA65/mega65-core/blob/master/iomap.txt
|
|
;
|
|
|
|
|
|
!ifdef CONFIG_MB_M65 {
|
|
|
|
; VIC-IV registers
|
|
|
|
!addr VIC_KEY = $D02F
|
|
!addr VIC_CTRLA = $D030
|
|
!addr VIC_CTRLB = $D031
|
|
|
|
!addr VIC_XPOS = $D050
|
|
|
|
!addr VIC_CTRLC = $D054
|
|
|
|
!addr VIC_CHARSTEP = $D058 ; 2 bytes - logical characters per line
|
|
|
|
!addr VIC_SRH = $D05D ; - various flags, bit 7 = hot registers
|
|
|
|
!addr VIC_SCRNPTR = $D060 ; 4 bytes - pointer to start of screen memory
|
|
!addr VIC_COLPTR = $D064 ; 2 bytes - pointer to start of color memory
|
|
|
|
!addr VIC_CHARPTR = $D068 ; 3 bytes - pointer to start of character generator
|
|
|
|
!addr VIC_PALSEL = $D070 ; - palette selection register
|
|
|
|
; Floppy controller registers
|
|
|
|
!addr FDC_CONTROL = $D080
|
|
!addr FDC_COMMAND = $D081
|
|
!addr FDC_STATUS_A = $D082
|
|
!addr FDC_STATUS_B = $D083
|
|
!addr FDC_TRACK = $D084
|
|
!addr FDC_SECTOR = $D085
|
|
!addr FDC_SIDE = $D086
|
|
!addr FDC_DATA = $D087
|
|
!addr FDC_CLOCK = $D088
|
|
!addr FDC_STEP = $D089
|
|
!addr FDC_PCODE = $D08A
|
|
|
|
!addr FDC_DBG0 = $D6A0
|
|
!addr FDC_DBG1 = $D6A1
|
|
!addr FDC_DATARATE = $D6A2
|
|
!addr FDC_LAST_TRACK = $D6A3
|
|
!addr FDC_LAST_SECTOR = $D6A4
|
|
!addr FDC_LAST_SIODE = $D6A5
|
|
|
|
; Palette memory areas
|
|
|
|
!addr PALETTE_R = $D100
|
|
!addr PALETTE_G = $D200
|
|
!addr PALETTE_B = $D300
|
|
|
|
; Keyboard
|
|
|
|
!addr C65_EXTKEYS_PR = $D607
|
|
!addr C65_EXTKEYS_DDR = $D608
|
|
|
|
!addr KBSCN_BUCKY = $D611
|
|
!addr KBSCN_PEEK = $D613
|
|
!addr KBSCN_SELECT = $D614
|
|
|
|
; SD card
|
|
|
|
!addr SD_CTL = $D680
|
|
!addr SD_ADDR = $D681 ; 4 bytes
|
|
!addr SD_BUFCTL = $D689
|
|
!addr SD_ERRCODE = $D6DA
|
|
|
|
; SD card sector buffer, $FFFD6E00
|
|
|
|
!set SD_SECBUF_0 = $00
|
|
!set SD_SECBUF_1 = $6E
|
|
!set SD_SECBUF_2 = $FD
|
|
!set SD_SECBUF_3 = $0F
|
|
|
|
; DMAgic
|
|
|
|
!addr DMA_ADDRLSBTRIG = $D700
|
|
!addr DMA_ADDRMSB = $D701
|
|
!addr DMA_ADDRBANK = $D702
|
|
!addr DMA_EN018B = $D703
|
|
!addr DMA_ADDRMB = $D704
|
|
!addr DMA_ETRIG = $D705
|
|
!addr DMA_ADDRLSB = $D70E
|
|
|
|
; MISC registers
|
|
|
|
!addr MISC_BOARDID = $D629 ; board identification byte
|
|
!addr MISC_EMU = $D710 ; to enable badlines and slow interrupts
|
|
|
|
; Hypervisor traps
|
|
|
|
!addr HTRAP00 = $D640
|
|
|
|
|
|
; SID offsets
|
|
|
|
!set __SID_R1_OFFSET = $00 ; right SID 1, $D400
|
|
!set __SID_R2_OFFSET = $20 ; right SID 2, $D420
|
|
!set __SID_L1_OFFSET = $40 ; left SID 1, $D440
|
|
!set __SID_L2_OFFSET = $60 ; left SID 2, $D460
|
|
|
|
|
|
|
|
; SD card commands
|
|
;
|
|
; XXX command codes taken from XEMU emulator, to be updated when official documentation exists
|
|
|
|
!set CARD_CMD_RESET = $00 ; reset SD card
|
|
!set CARD_CMD_RESET_FL = $10 ; reset with flags, XXX what's this?
|
|
!set CARD_CMD_END_RESET = $01 ; end reset
|
|
!set CARD_CMD_END_RESET_FL = $11 ; end reset with flags
|
|
!set CARD_CMD_READ = $02 ; read sector
|
|
!set CARD_CMD_WRITE = $03 ; write sector
|
|
!set CARD_CMD_WRITE_1 = $04 ; multi-sector write, 1st sector
|
|
!set CARD_CMD_WRITE_2 = $05 ; multi-sector write
|
|
!set CARD_CMD_WRITE_3 = $06 ; multi-sector write, last sector
|
|
!set CARD_CMD_FLUSH = $0C
|
|
!set CARD_CMD_SDHC_OFF = $40 ; for older cores only?
|
|
!set CARD_CMD_SDHC_ON = $41 ; for older cores only?
|
|
; XXX $44, $45 - completely unclear to me
|
|
!set CARD_CMD_MAP_BUF = $81
|
|
!set CARD_CMD_UNMAP_BUF = $82
|
|
!set CARD_CMD_FILL_ON = $83
|
|
!set CARD_CMD_FILL_OFF = $84
|
|
!set CARD_CMD_SELECT_INT = $C0 ; select internal slot
|
|
!set CARD_CMD_SELECT_EXT = $C1 ; select external slot
|
|
}
|